{"version":3,"file":"index-cBvAJ90K.mjs","sources":["../../../file-preview-core/lib/index.mjs","../../src/i18n/LocaleContext.tsx","../../src/ThemeContext.tsx","../../src/RequestContext.tsx","../../src/renderers/Unsupported/index.tsx","../../src/hooks/useKeyboardNavigation.ts","../../src/hooks/useThemeMode.ts","../../src/components/preview/ToolbarButton.tsx","../../src/toolbar/renderItems.tsx","../../src/components/preview/FilePreviewToolbar.tsx","../../src/components/preview/RendererError.tsx","../../src/components/preview/RendererErrorBoundary.tsx","../../src/renderers/RendererLoading.tsx","../../src/components/preview/FilePreviewRenderer.tsx","../../src/components/preview/NavArrows.tsx","../../src/renderers/lazy.tsx","../../src/renderers/registry.tsx","../../src/FilePreviewContent.tsx","../../src/FilePreviewModal.tsx","../../src/FilePreviewEmbed.tsx","../../../../node_modules/.pnpm/pdfjs-dist@6.1.200/node_modules/pdfjs-dist/legacy/build/pdf.mjs","../../src/utils/pdfConfig.ts","../../src/index.ts"],"sourcesContent":["import n from \"jszip\";\nconst LM = [\n  \"image\",\n  \"pdf\",\n  \"docx\",\n  \"xlsx\",\n  \"pptx\",\n  \"msg\",\n  \"epub\",\n  \"mobi\",\n  \"video\",\n  \"audio\",\n  \"markdown\",\n  \"json\",\n  \"csv\",\n  \"xml\",\n  \"subtitle\",\n  \"zip\",\n  \"text\",\n  \"font\",\n  \"cad\"\n];\nfunction u(I) {\n  try {\n    const P = new URL(I).pathname.split(\"/\").pop() || \"file\";\n    return decodeURIComponent(P);\n  } catch {\n    const M = I.split(\"/\").pop() || \"file\";\n    return decodeURIComponent(M);\n  }\n}\nfunction J(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase()) || \"\";\n  return {\n    // 图片\n    jpg: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    png: \"image/png\",\n    gif: \"image/gif\",\n    webp: \"image/webp\",\n    svg: \"image/svg+xml\",\n    bmp: \"image/bmp\",\n    ico: \"image/x-icon\",\n    // 视频\n    mp4: \"video/mp4\",\n    webm: \"video/webm\",\n    ogg: \"video/ogg\",\n    ogv: \"video/ogg\",\n    mov: \"video/quicktime\",\n    avi: \"video/x-msvideo\",\n    mkv: \"video/x-matroska\",\n    m4v: \"video/x-m4v\",\n    \"3gp\": \"video/3gpp\",\n    flv: \"video/x-flv\",\n    // 音频\n    mp3: \"audio/mpeg\",\n    wav: \"audio/wav\",\n    m4a: \"audio/mp4\",\n    aac: \"audio/aac\",\n    flac: \"audio/flac\",\n    // 文档\n    pdf: \"application/pdf\",\n    docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n    ppt: \"application/vnd.ms-powerpoint\",\n    msg: \"application/vnd.ms-outlook\",\n    mobi: \"application/x-mobipocket-ebook\",\n    azw: \"application/vnd.amazon.ebook\",\n    azw3: \"application/vnd.amazon.ebook\",\n    kf8: \"application/vnd.amazon.ebook\",\n    // 文本\n    txt: \"text/plain\",\n    md: \"text/markdown\",\n    markdown: \"text/markdown\",\n    json: \"application/json\",\n    xml: \"application/xml\",\n    html: \"text/html\",\n    css: \"text/css\",\n    js: \"text/javascript\",\n    ts: \"text/typescript\",\n    jsx: \"text/javascript\",\n    tsx: \"text/typescript\",\n    py: \"text/x-python\",\n    java: \"text/x-java\",\n    cpp: \"text/x-c++src\",\n    c: \"text/x-csrc\",\n    cs: \"text/x-csharp\",\n    php: \"text/x-php\",\n    rb: \"text/x-ruby\",\n    go: \"text/x-go\",\n    rs: \"text/x-rust\",\n    yaml: \"text/yaml\",\n    yml: \"text/yaml\",\n    toml: \"text/toml\",\n    ini: \"text/plain\",\n    env: \"text/plain\",\n    diff: \"text/x-diff\",\n    patch: \"text/x-diff\",\n    log: \"text/plain\",\n    csv: \"text/csv\",\n    tsv: \"text/tab-separated-values\",\n    srt: \"application/x-subrip\",\n    vtt: \"text/vtt\",\n    zip: \"application/zip\"\n  }[M] || \"application/octet-stream\";\n}\nfunction r(I, M = 0) {\n  if (I instanceof File)\n    return {\n      id: `file-${Date.now()}-${M}`,\n      name: I.name,\n      url: URL.createObjectURL(I),\n      type: I.type || J(I.name),\n      size: I.size,\n      file: I\n      // 保留原始 File 对象\n    };\n  if (typeof I == \"string\") {\n    const K = u(I);\n    return {\n      id: `url-${Date.now()}-${M}`,\n      name: K,\n      url: I,\n      type: J(K)\n    };\n  }\n  return {\n    id: I.id || `link-${Date.now()}-${M}`,\n    name: I.name,\n    url: I.url,\n    type: I.type || J(I.name),\n    size: I.size\n  };\n}\nfunction QM(I) {\n  return I.map((M, K) => r(M, K));\n}\nfunction EM(I, M) {\n  return M !== void 0 ? M : I === \"modal\";\n}\nfunction UM(I) {\n  var w;\n  const M = ((w = I.name.split(\".\").pop()) == null ? void 0 : w.toLowerCase()) || \"\", K = I.type.toLowerCase();\n  if (K.startsWith(\"image/\") || [\n    \"jpg\",\n    \"jpeg\",\n    \"png\",\n    \"gif\",\n    \"webp\",\n    \"svg\",\n    \"bmp\",\n    \"ico\",\n    // 高级图片格式\n    \"heic\",\n    \"heif\",\n    \"avif\",\n    \"tif\",\n    \"tiff\",\n    // RAW 格式\n    \"cr2\",\n    \"nef\",\n    \"arw\",\n    \"dng\",\n    \"raf\",\n    \"orf\",\n    // 其他专业格式\n    \"psd\",\n    \"jp2\",\n    \"jpx\",\n    \"j2k\"\n  ].includes(M))\n    return \"image\";\n  if (K.includes(\"pdf\") || M === \"pdf\")\n    return \"pdf\";\n  if (K.includes(\"wordprocessingml\") || M === \"docx\")\n    return \"docx\";\n  if (K.includes(\"spreadsheetml\") || M === \"xlsx\")\n    return \"xlsx\";\n  if (K.includes(\"presentationml\") || M === \"pptx\" || M === \"ppt\")\n    return \"pptx\";\n  if (K.includes(\"ms-outlook\") || M === \"msg\")\n    return \"msg\";\n  if (K.includes(\"epub\") || M === \"epub\")\n    return \"epub\";\n  if ([\"mobi\", \"azw\", \"azw3\", \"kf8\"].includes(M) || K === \"application/x-mobipocket-ebook\" || K === \"application/vnd.amazon.ebook\")\n    return \"mobi\";\n  if ([\"csv\", \"tsv\"].includes(M) || K === \"text/csv\" || K === \"text/tab-separated-values\")\n    return \"csv\";\n  if (M === \"xml\" || K === \"application/xml\" || K === \"text/xml\")\n    return \"xml\";\n  if ([\"srt\", \"vtt\", \"lrc\", \"elrc\", \"ass\", \"ssa\", \"ttml\", \"dfxp\"].includes(M) || K === \"text/vtt\" || K === \"application/x-subrip\" || K === \"application/ttml+xml\")\n    return \"subtitle\";\n  if (M === \"zip\" || K === \"application/zip\" || K === \"application/x-zip-compressed\")\n    return \"zip\";\n  if ([\"ttf\", \"otf\", \"woff\", \"woff2\"].includes(M) || K.startsWith(\"font/\") || K === \"application/font-woff\" || K === \"application/font-woff2\" || K === \"application/x-font-ttf\" || K === \"application/x-font-otf\" || K === \"application/font-sfnt\")\n    return \"font\";\n  if ([\"dxf\", \"stl\", \"obj\", \"gltf\", \"glb\"].includes(M) || K === \"application/dxf\" || K === \"application/vnd.ms-pki.stl\" || K === \"model/stl\" || K === \"model/obj\" || K === \"model/gltf+json\" || K === \"model/gltf-binary\")\n    return \"cad\";\n  if (K.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"ogv\", \"mov\", \"avi\", \"mkv\", \"m4v\", \"3gp\", \"flv\"].includes(M))\n    return \"video\";\n  if (K.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\"].includes(M))\n    return \"audio\";\n  if (M === \"md\" || M === \"markdown\")\n    return \"markdown\";\n  if (K === \"application/json\" || M === \"json\" || M === \"jsonc\")\n    return \"json\";\n  const P = [\n    \"txt\",\n    \"log\",\n    \"lock\",\n    \"js\",\n    \"jsx\",\n    \"ts\",\n    \"tsx\",\n    \"cjs\",\n    \"mjs\",\n    \"cts\",\n    \"mts\",\n    \"py\",\n    \"java\",\n    \"cpp\",\n    \"c\",\n    \"h\",\n    \"cs\",\n    \"php\",\n    \"rb\",\n    \"go\",\n    \"mod\",\n    \"rs\",\n    \"swift\",\n    \"kt\",\n    \"lua\",\n    \"vim\",\n    \"html\",\n    \"css\",\n    \"scss\",\n    \"sass\",\n    \"less\",\n    \"yaml\",\n    \"yml\",\n    \"toml\",\n    \"ini\",\n    \"conf\",\n    \"env\",\n    \"diff\",\n    \"patch\",\n    \"sh\",\n    \"bash\",\n    \"zsh\",\n    \"sql\"\n  ];\n  return K.startsWith(\"text/\") || P.includes(M) || I.name.startsWith(\".\") && !I.name.includes(\"/\") ? \"text\" : \"unsupported\";\n}\nfunction zM(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase()) || \"\", K = {\n    js: \"javascript\",\n    jsx: \"jsx\",\n    ts: \"typescript\",\n    tsx: \"tsx\",\n    cjs: \"javascript\",\n    mjs: \"javascript\",\n    cts: \"typescript\",\n    mts: \"typescript\",\n    py: \"python\",\n    java: \"java\",\n    cpp: \"cpp\",\n    c: \"c\",\n    cs: \"csharp\",\n    php: \"php\",\n    rb: \"ruby\",\n    go: \"go\",\n    mod: \"go\",\n    rs: \"rust\",\n    swift: \"swift\",\n    kt: \"kotlin\",\n    lua: \"lua\",\n    vim: \"vim\",\n    scala: \"scala\",\n    sh: \"bash\",\n    bash: \"bash\",\n    zsh: \"bash\",\n    json: \"json\",\n    jsonc: \"json\",\n    xml: \"xml\",\n    html: \"html\",\n    css: \"css\",\n    scss: \"scss\",\n    sass: \"sass\",\n    less: \"less\",\n    sql: \"sql\",\n    yaml: \"yaml\",\n    yml: \"yaml\",\n    toml: \"toml\",\n    ini: \"ini\",\n    env: \"bash\",\n    conf: \"nginx\",\n    diff: \"diff\",\n    patch: \"diff\",\n    log: \"log\",\n    md: \"markdown\",\n    txt: \"text\"\n  };\n  if (K[M])\n    return K[M];\n  if (I.startsWith(\".\")) {\n    const w = I.toLowerCase(), g = {\n      // Git 相关\n      \".gitignore\": \"ini\",\n      \".gitattributes\": \"ini\",\n      \".gitmodules\": \"ini\",\n      \".gitkeep\": \"text\",\n      // 编辑器配置\n      \".editorconfig\": \"ini\",\n      \".prettierrc\": \"json\",\n      \".prettierignore\": \"ini\",\n      \".eslintrc\": \"json\",\n      \".eslintignore\": \"ini\",\n      \".stylelintrc\": \"json\",\n      // Shell 配置\n      \".bashrc\": \"bash\",\n      \".zshrc\": \"bash\",\n      \".bash_profile\": \"bash\",\n      \".zprofile\": \"bash\",\n      \".profile\": \"bash\",\n      \".vimrc\": \"vim\",\n      // 环境变量\n      \".env\": \"bash\",\n      \".env.local\": \"bash\",\n      \".env.development\": \"bash\",\n      \".env.production\": \"bash\",\n      \".env.test\": \"bash\",\n      // 其他配置\n      \".npmrc\": \"ini\",\n      \".yarnrc\": \"ini\",\n      \".nvmrc\": \"text\",\n      \".dockerignore\": \"ini\"\n    };\n    if (g[w])\n      return g[w];\n    if (w.startsWith(\".env\"))\n      return \"bash\";\n    if (w.endsWith(\"rc\"))\n      return \"json\";\n    if (w.endsWith(\"ignore\"))\n      return \"ini\";\n  }\n  return \"text\";\n}\nfunction NM(I) {\n  var P;\n  const M = ((P = I.split(\".\").pop()) == null ? void 0 : P.toLowerCase().split(\"?\")[0]) || \"\";\n  return {\n    mp4: \"video/mp4\",\n    webm: \"video/webm\",\n    ogg: \"video/ogg\",\n    ogv: \"video/ogg\",\n    mov: \"video/quicktime\",\n    avi: \"video/x-msvideo\",\n    mkv: \"video/x-matroska\",\n    m4v: \"video/mp4\",\n    \"3gp\": \"video/3gpp\",\n    flv: \"video/x-flv\"\n  }[M] || \"video/mp4\";\n}\nfunction tM(I) {\n  return I < 1024 ? `${I} B` : I < 1024 * 1024 ? `${(I / 1024).toFixed(1)} KB` : `${(I / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction fM(I) {\n  if (!isFinite(I) || isNaN(I) || I < 0) return \"0:00\";\n  const M = Math.floor(I / 60), K = Math.floor(I % 60);\n  return `${M}:${K.toString().padStart(2, \"0\")}`;\n}\nfunction VM(I) {\n  var K;\n  return (((K = I.split(\".\").pop()) == null ? void 0 : K.toLowerCase()) || \"\") === \"tsv\" ? \"\t\" : \",\";\n}\nfunction aM(I, M = {}) {\n  const K = M.delimiter ?? \",\", P = M.firstRowAsHeader ?? !0, w = [];\n  let g = [], C = \"\", y = !1, l = 0;\n  const s = I.length;\n  for (; l < s; ) {\n    const j = I[l];\n    if (y) {\n      if (j === '\"') {\n        if (I[l + 1] === '\"') {\n          C += '\"', l += 2;\n          continue;\n        }\n        y = !1, l += 1;\n        continue;\n      }\n      C += j, l += 1;\n      continue;\n    }\n    if (j === '\"') {\n      y = !0, l += 1;\n      continue;\n    }\n    if (j === K) {\n      g.push(C), C = \"\", l += 1;\n      continue;\n    }\n    if (j === \"\\r\") {\n      I[l + 1] === `\n` && (l += 1), g.push(C), w.push(g), g = [], C = \"\", l += 1;\n      continue;\n    }\n    if (j === `\n`) {\n      g.push(C), w.push(g), g = [], C = \"\", l += 1;\n      continue;\n    }\n    C += j, l += 1;\n  }\n  for ((C.length > 0 || g.length > 0) && (g.push(C), w.push(g)); w.length > 0; ) {\n    const j = w[w.length - 1];\n    if (j.length === 1 && j[0] === \"\")\n      w.pop();\n    else\n      break;\n  }\n  let T = [], X = w;\n  P && w.length > 0 && (T = w[0], X = w.slice(1));\n  const S = Math.max(\n    T.length,\n    ...X.map((j) => j.length),\n    0\n  );\n  for (const j of X)\n    for (; j.length < S; ) j.push(\"\");\n  return {\n    header: T,\n    rows: X,\n    columnCount: S,\n    delimiter: K\n  };\n}\nfunction a(I) {\n  const M = I instanceof Uint8Array ? I : new Uint8Array(I);\n  if (M.length >= 3 && M[0] === 239 && M[1] === 187 && M[2] === 191)\n    return new TextDecoder(\"utf-8\").decode(M);\n  if (M.length >= 2 && M[0] === 255 && M[1] === 254)\n    return new TextDecoder(\"utf-16le\").decode(M);\n  if (M.length >= 2 && M[0] === 254 && M[1] === 255)\n    return new TextDecoder(\"utf-16be\").decode(M);\n  try {\n    return new TextDecoder(\"utf-8\", { fatal: !0 }).decode(M);\n  } catch {\n  }\n  try {\n    return new TextDecoder(\"gbk\").decode(M);\n  } catch {\n  }\n  return new TextDecoder(\"utf-8\", { fatal: !1 }).decode(M);\n}\nconst v = a;\nasync function RM(I, M) {\n  const K = !!M && (\"fetcher\" in M || \"init\" in M || \"signal\" in M), P = K ? M.fetcher ?? fetch : fetch, w = K ? M.signal : void 0, g = K ? M.init : M, C = w ? { ...g, signal: w } : g, y = await P(I, C);\n  if (!y.ok) throw new Error(`请求失败: ${y.status}`);\n  const l = await y.arrayBuffer();\n  return a(l);\n}\nasync function e(I, M) {\n  if (I)\n    return typeof I == \"function\" ? await I(M) : I;\n}\nfunction q(I, M) {\n  if (!I && !M) return;\n  if (!I) return M;\n  if (!M) return I;\n  const K = new Headers(I.headers || {});\n  return M.headers && new Headers(M.headers).forEach((P, w) => {\n    K.set(w, P);\n  }), {\n    ...I,\n    ...M,\n    headers: K\n  };\n}\nfunction OM(I) {\n  const M = (I == null ? void 0 : I.requestHandler) ?? ((P, w) => fetch(P, w)), K = I == null ? void 0 : I.requestInit;\n  return async (P, w) => {\n    const g = await e(K, P), C = q(g, w);\n    return M(P, C);\n  };\n}\nasync function nM(I, M = fetch, K) {\n  const P = await M(I, K);\n  if (!P.ok) throw new Error(`请求失败: ${P.status}`);\n  const w = await P.blob();\n  return URL.createObjectURL(w);\n}\nasync function uM(I, M, K = fetch, P) {\n  const w = await K(I, P);\n  if (!w.ok) throw new Error(`请求失败: ${w.status}`);\n  const g = await w.blob(), C = URL.createObjectURL(g);\n  try {\n    const y = document.createElement(\"a\");\n    y.href = C, y.download = M, y.style.display = \"none\", document.body.appendChild(y), y.click(), document.body.removeChild(y);\n  } finally {\n    setTimeout(() => URL.revokeObjectURL(C), 1e3);\n  }\n}\nfunction F(I) {\n  const M = I.trim().replace(\",\", \".\"), K = M.split(\":\").map((P) => P.trim());\n  if (K.length === 3) {\n    const [P, w, g] = K;\n    return Number(P) * 3600 + Number(w) * 60 + Number(g);\n  }\n  if (K.length === 2) {\n    const [P, w] = K;\n    return Number(P) * 60 + Number(w);\n  }\n  return Number(M) || 0;\n}\nfunction rM(I) {\n  if (!isFinite(I) || I < 0) return \"00:00:00.000\";\n  const M = Math.floor(I * 1e3), K = M % 1e3, P = Math.floor(M / 1e3) % 60, w = Math.floor(M / 6e4) % 60, g = Math.floor(M / 36e5), C = (y, l = 2) => y.toString().padStart(l, \"0\");\n  return `${C(g)}:${C(w)}:${C(P)}.${C(K, 3)}`;\n}\nconst L = /(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}\\s*-->\\s*(\\d{1,2}:)?\\d{1,2}:\\d{1,2}[.,]\\d{1,3}/, _ = /^\\s*\\[\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?\\]/;\nfunction $(I) {\n  const M = I.replace(/^\\uFEFF/, \"\").trimStart();\n  return /^WEBVTT/.test(M) ? \"vtt\" : /^<\\?xml/i.test(M) || /<tt\\b[^>]*>/i.test(M) ? \"ttml\" : /^\\[Script Info\\]/im.test(M) || /^Dialogue:/m.test(M) ? /ScriptType:\\s*v4\\.00\\s*$/im.test(M) ? \"ssa\" : \"ass\" : _.test(M) || /^\\[(ti|ar|al|au|by|length|offset|re|ve):/im.test(M) ? /<\\d{1,2}:\\d{1,2}(?:[.:]\\d{1,3})?>/.test(M) ? \"elrc\" : \"lrc\" : \"srt\";\n}\nfunction Q(I, M) {\n  const P = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), w = [];\n  let g, C = 0;\n  if (M === \"vtt\") {\n    const y = [];\n    for (; C < P.length && P[C].trim() !== \"\"; )\n      y.push(P[C]), C++;\n    for (g = y.join(`\n`); C < P.length && P[C].trim() === \"\"; ) C++;\n  }\n  for (; C < P.length; ) {\n    for (; C < P.length && P[C].trim() === \"\"; ) C++;\n    if (C >= P.length) break;\n    let y, l = null;\n    if (L.test(P[C]))\n      l = P[C], C++;\n    else if (y = P[C].trim() || void 0, C++, C < P.length && L.test(P[C]))\n      l = P[C], C++;\n    else\n      continue;\n    if (!l) continue;\n    const s = l.match(/([\\d:.,]+)\\s*-->\\s*([\\d:.,]+)/);\n    if (!s) continue;\n    const T = F(s[1]), X = F(s[2]), S = [];\n    for (; C < P.length && P[C].trim() !== \"\"; )\n      S.push(P[C]), C++;\n    w.push({ id: y, start: T, end: X, text: S.join(`\n`) });\n  }\n  return { format: M, cues: w, header: g };\n}\nfunction o(I, M, K) {\n  const P = Number(I), w = Number(M);\n  let g = 0;\n  if (K) {\n    const C = (K + \"000\").slice(0, 3);\n    g = Number(C);\n  }\n  return P * 60 + w + g / 1e3;\n}\nfunction R(I, M) {\n  const K = /^\\[(ti|ar|al|au|by|length|offset|re|ve):(.*)\\]$/i.exec(I.trim());\n  if (!K) return !1;\n  const P = K[1].toLowerCase(), w = K[2].trim();\n  if (M.metadata[P] = w, P === \"offset\") {\n    const g = Number(w);\n    isNaN(g) || (M.offsetMs = g);\n  }\n  return !0;\n}\nfunction MM(I) {\n  const K = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), P = { metadata: {}, offsetMs: 0 }, w = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, g = [];\n  for (const l of K) {\n    const s = l.trim();\n    if (!s || R(s, P)) continue;\n    const T = [];\n    let X = 0;\n    w.lastIndex = 0;\n    let S;\n    for (; (S = w.exec(s)) !== null && S.index === X; )\n      T.push(o(S[1], S[2], S[3])), X = S.index + S[0].length;\n    if (T.length === 0) continue;\n    const j = s.slice(X).trim();\n    for (const B of T)\n      g.push({ start: B, text: j });\n  }\n  g.sort((l, s) => l.start - s.start);\n  const C = P.offsetMs / 1e3;\n  return { format: \"lrc\", cues: g.map((l, s) => {\n    const T = Math.max(0, l.start - C), X = g[s + 1], S = X ? Math.max(T, X.start - C) : T + 5;\n    return { start: T, end: S, text: l.text };\n  }), metadata: P.metadata };\n}\nfunction IM(I) {\n  const K = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`), P = { metadata: {}, offsetMs: 0 }, w = /\\[(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?\\]/g, g = /<(\\d{1,2}):(\\d{1,2})(?:[.:](\\d{1,3}))?>/g, C = [];\n  for (const s of K) {\n    const T = s.trim();\n    if (!T || R(T, P)) continue;\n    const X = [];\n    let S = 0;\n    w.lastIndex = 0;\n    let j;\n    for (; (j = w.exec(T)) !== null && j.index === S; )\n      X.push(o(j[1], j[2], j[3])), S = j.index + j[0].length;\n    if (X.length === 0) continue;\n    const B = T.slice(S);\n    for (const D of X)\n      C.push({ start: D, raw: B });\n  }\n  C.sort((s, T) => s.start - T.start);\n  const y = P.offsetMs / 1e3;\n  return { format: \"elrc\", cues: C.map((s, T) => {\n    const X = [];\n    let S = \"\", j = 0, B = null;\n    g.lastIndex = 0;\n    let D;\n    for (; (D = g.exec(s.raw)) !== null; ) {\n      const x = s.raw.slice(j, D.index);\n      B !== null && x && X.push({ start: Math.max(0, B - y), text: x }), S += x, B = o(D[1], D[2], D[3]), j = D.index + D[0].length;\n    }\n    const Y = s.raw.slice(j);\n    B !== null && Y && X.push({ start: Math.max(0, B - y), text: Y }), S += Y;\n    const A = Math.max(0, s.start - y), G = C[T + 1], Z = G ? Math.max(A, G.start - y) : A + 5;\n    return {\n      start: A,\n      end: Z,\n      text: S.trim(),\n      words: X.length ? X : void 0\n    };\n  }), metadata: P.metadata };\n}\nfunction E(I) {\n  const M = I.trim().split(\":\");\n  return M.length !== 3 ? 0 : Number(M[0]) * 3600 + Number(M[1]) * 60 + Number(M[2].replace(\",\", \".\"));\n}\nfunction U(I, M) {\n  const P = I.replace(/\\r\\n?/g, `\n`).replace(/^\\uFEFF/, \"\").split(`\n`);\n  let w = \"\", g = [];\n  const C = [], y = [];\n  for (const l of P) {\n    const s = l.replace(/\\s+$/, \"\"), T = s.trim(), X = /^\\[([^\\]]+)\\]\\s*$/.exec(T);\n    if (X) {\n      w = X[1].toLowerCase(), y.push(s);\n      continue;\n    }\n    if (w !== \"events\") {\n      y.push(s);\n      continue;\n    }\n    const S = /^Format:\\s*(.+)$/i.exec(T);\n    if (S) {\n      g = S[1].split(\",\").map((d) => d.trim());\n      continue;\n    }\n    const j = /^(Dialogue|Comment):\\s*(.+)$/i.exec(T);\n    if (!j || j[1].toLowerCase() === \"comment\" || g.length === 0) continue;\n    const B = g.length, D = j[2].split(\",\"), Y = D.slice(0, B - 1), A = D.slice(B - 1).join(\",\"), G = {};\n    g.forEach((d, W) => {\n      G[d] = W === B - 1 ? A : Y[W] ?? \"\";\n    });\n    const Z = E(G.Start || \"\"), x = E(G.End || \"\"), c = (G.Text || \"\").replace(/\\\\N/g, `\n`).replace(/\\\\n/g, `\n`).replace(/\\\\h/g, \" \").replace(/\\{[^}]*\\}/g, \"\");\n    C.push({ start: Z, end: x, text: c, style: G.Style });\n  }\n  return C.sort((l, s) => l.start - s.start), {\n    format: M,\n    cues: C,\n    header: y.join(`\n`).trim() || void 0\n  };\n}\nfunction b(I) {\n  const M = I.trim();\n  if (!M) return 0;\n  const K = /^(\\d+(?:\\.\\d+)?)(h|m|s|ms|f|t)$/i.exec(M);\n  if (K) {\n    const w = Number(K[1]), g = K[2].toLowerCase();\n    return g === \"h\" ? w * 3600 : g === \"m\" ? w * 60 : g === \"ms\" ? w / 1e3 : w;\n  }\n  const P = M.split(\":\");\n  return P.length === 3 ? Number(P[0]) * 3600 + Number(P[1]) * 60 + Number(P[2]) : P.length === 2 ? Number(P[0]) * 60 + Number(P[1]) : Number(M) || 0;\n}\nfunction KM(I) {\n  return I.replace(/&#x([0-9a-fA-F]+);/g, (M, K) => String.fromCharCode(parseInt(K, 16))).replace(/&#(\\d+);/g, (M, K) => String.fromCharCode(Number(K))).replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&apos;/g, \"'\").replace(/&nbsp;/g, \" \").replace(/&amp;/g, \"&\");\n}\nfunction PM(I) {\n  var w, g, C;\n  const M = [], K = /<(?:[\\w-]+:)?p\\b([^>]*)>([\\s\\S]*?)<\\/(?:[\\w-]+:)?p\\s*>/gi;\n  let P;\n  for (; (P = K.exec(I)) !== null; ) {\n    const y = P[1], l = P[2], s = ((w = /\\bbegin\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : w[1]) || \"\", T = ((g = /\\bend\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : g[1]) || \"\", X = ((C = /\\bdur\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(y)) == null ? void 0 : C[1]) || \"\", S = b(s);\n    let j;\n    T ? j = b(T) : X ? j = S + b(X) : j = S + 5;\n    const B = KM(\n      l.replace(/<(?:[\\w-]+:)?br\\s*\\/?>/gi, `\n`).replace(/<[^>]+>/g, \"\")\n    ).replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n    (B || S || j) && M.push({ start: S, end: j, text: B });\n  }\n  return M.sort((y, l) => y.start - l.start), { format: \"ttml\", cues: M };\n}\nfunction wM(I) {\n  const M = I.replace(/^\\uFEFF/, \"\");\n  if (typeof DOMParser < \"u\") {\n    const K = new DOMParser().parseFromString(M, \"application/xml\");\n    if (K.getElementsByTagName(\"parsererror\").length === 0) {\n      const w = K.getElementsByTagNameNS ? K.getElementsByTagNameNS(\"*\", \"p\") : K.getElementsByTagName(\"p\");\n      if (w.length > 0) {\n        const g = [];\n        for (let C = 0; C < w.length; C++) {\n          const y = w[C], l = y.getAttribute(\"begin\") || \"\", s = y.getAttribute(\"end\") || \"\", T = y.getAttribute(\"dur\") || \"\", X = b(l);\n          let S;\n          s ? S = b(s) : T ? S = X + b(T) : S = X + 5;\n          let j = \"\";\n          y.childNodes.forEach((D) => {\n            if (D.nodeType === 3)\n              j += D.nodeValue || \"\";\n            else if (D.nodeType === 1) {\n              const Y = D;\n              (Y.localName || Y.tagName).toLowerCase() === \"br\" ? j += `\n` : j += Y.textContent || \"\";\n            }\n          });\n          const B = j.replace(/[ \\t]+/g, \" \").replace(/\\n /g, `\n`).trim();\n          (B || X || S) && g.push({ start: X, end: S, text: B });\n        }\n        return g.sort((C, y) => C.start - y.start), { format: \"ttml\", cues: g };\n      }\n    }\n  }\n  return PM(M);\n}\nfunction vM(I, M) {\n  switch (M ?? $(I)) {\n    case \"lrc\":\n      return MM(I);\n    case \"elrc\":\n      return IM(I);\n    case \"ass\":\n      return U(I, \"ass\");\n    case \"ssa\":\n      return U(I, \"ssa\");\n    case \"ttml\":\n      return wM(I);\n    case \"vtt\":\n      return Q(I, \"vtt\");\n    case \"srt\":\n    default:\n      return Q(I, \"srt\");\n  }\n}\nasync function eM(I) {\n  return n.loadAsync(I);\n}\nfunction qM(I) {\n  const M = [];\n  return I.forEach((K, P) => {\n    var X;\n    const w = P.dir, g = w && !K.endsWith(\"/\") ? K + \"/\" : K, C = w ? g.replace(/\\/$/, \"\") : g, y = C.lastIndexOf(\"/\"), l = y >= 0 ? C.slice(y + 1) : C, s = y >= 0 ? C.slice(0, y) : \"\", T = w ? 0 : ((X = P._data) == null ? void 0 : X.uncompressedSize) ?? 0;\n    M.push({\n      path: g,\n      name: l,\n      dir: s,\n      isDir: w,\n      size: T,\n      date: P.date\n    });\n  }), M;\n}\nfunction _M(I) {\n  const M = { name: \"\", path: \"\", isDir: !0, children: [], size: 0 }, K = /* @__PURE__ */ new Map();\n  K.set(\"\", M);\n  const P = (g) => {\n    if (K.has(g)) return K.get(g);\n    const C = g.split(\"/\").filter(Boolean);\n    let y = M, l = \"\";\n    for (const s of C) {\n      l = l ? `${l}/${s}` : s;\n      let T = K.get(l);\n      T || (T = { name: s, path: l + \"/\", isDir: !0, children: [], size: 0 }, y.children.push(T), K.set(l, T)), y = T;\n    }\n    return y;\n  };\n  for (const g of I) {\n    if (g.isDir) {\n      P(g.path.replace(/\\/$/, \"\"));\n      continue;\n    }\n    P(g.dir).children.push({\n      name: g.name,\n      path: g.path,\n      isDir: !1,\n      size: g.size\n    });\n  }\n  const w = (g) => {\n    if (g.children) {\n      g.children.sort((C, y) => C.isDir !== y.isDir ? C.isDir ? -1 : 1 : C.name.localeCompare(y.name));\n      for (const C of g.children) w(C);\n    }\n  };\n  return w(M), M;\n}\nasync function $M(I, M) {\n  const K = I.file(M);\n  if (!K) throw new Error(`ZIP entry not found: ${M}`);\n  const P = await K.async(\"arraybuffer\");\n  return v(P);\n}\nasync function MI(I, M, K) {\n  const P = I.file(M);\n  if (!P) throw new Error(`ZIP entry not found: ${M}`);\n  const w = await P.async(\"arraybuffer\");\n  return new Blob([w], K ? { type: K } : void 0);\n}\nfunction CM(I) {\n  return I ? I.startsWith(\"#\") ? I : I.length === 8 ? \"#\" + I.substring(2) : I.length === 6 ? \"#\" + I : \"#000000\" : \"#000000\";\n}\nconst gM = [\n  \"FFFFFF\",\n  \"000000\",\n  \"E7E6E6\",\n  \"44546A\",\n  \"4472C4\",\n  \"ED7D31\",\n  \"A5A5A5\",\n  \"FFC000\",\n  \"5B9BD5\",\n  \"70AD47\"\n], yM = [\n  \"000000\",\n  \"FFFFFF\",\n  \"FF0000\",\n  \"00FF00\",\n  \"0000FF\",\n  \"FFFF00\",\n  \"FF00FF\",\n  \"00FFFF\",\n  \"000000\",\n  \"FFFFFF\",\n  \"FF0000\",\n  \"00FF00\",\n  \"0000FF\",\n  \"FFFF00\",\n  \"FF00FF\",\n  \"00FFFF\",\n  \"800000\",\n  \"008000\",\n  \"000080\",\n  \"808000\",\n  \"800080\",\n  \"008080\",\n  \"C0C0C0\",\n  \"808080\",\n  \"9999FF\",\n  \"993366\",\n  \"FFFFCC\",\n  \"CCFFFF\",\n  \"660066\",\n  \"FF8080\",\n  \"0066CC\",\n  \"CCCCFF\",\n  \"000080\",\n  \"FF00FF\",\n  \"FFFF00\",\n  \"00FFFF\",\n  \"800080\",\n  \"800000\",\n  \"008080\",\n  \"0000FF\",\n  \"00CCFF\",\n  \"CCFFFF\",\n  \"CCFFCC\",\n  \"FFFF99\",\n  \"99CCFF\",\n  \"FF99CC\",\n  \"CC99FF\",\n  \"FFCC99\",\n  \"3366FF\",\n  \"33CCCC\",\n  \"99CC00\",\n  \"FFCC00\",\n  \"FF9900\",\n  \"FF6600\",\n  \"666699\",\n  \"969696\",\n  \"003366\",\n  \"339966\",\n  \"003300\",\n  \"333300\",\n  \"993300\",\n  \"993366\",\n  \"333399\",\n  \"333333\"\n];\nfunction lM(I, M) {\n  const K = parseInt(I.substring(0, 2), 16), P = parseInt(I.substring(2, 4), 16), w = parseInt(I.substring(4, 6), 16), g = (s) => M < 0 ? Math.round(s * (1 + M)) : Math.round(s + (255 - s) * M), C = Math.min(255, Math.max(0, g(K))), y = Math.min(255, Math.max(0, g(P))), l = Math.min(255, Math.max(0, g(w)));\n  return C.toString(16).padStart(2, \"0\") + y.toString(16).padStart(2, \"0\") + l.toString(16).padStart(2, \"0\");\n}\nfunction sM(I) {\n  if (I && I.type === \"pattern\" && I.pattern === \"solid\") {\n    const M = I.fgColor;\n    if (M)\n      return m(M);\n  }\n}\nfunction m(I) {\n  if (I) {\n    if (\"argb\" in I && typeof I.argb == \"string\" && I.argb)\n      return CM(I.argb);\n    if (\"theme\" in I && typeof I.theme == \"number\") {\n      const M = gM[I.theme] || \"000000\", K = \"tint\" in I && typeof I.tint == \"number\" ? I.tint : 0;\n      return \"#\" + (K !== 0 ? lM(M, K) : M);\n    }\n    if (\"indexed\" in I && typeof I.indexed == \"number\") {\n      const M = yM[I.indexed];\n      if (M) return \"#\" + M;\n    }\n  }\n}\nfunction TM(I) {\n  if (!I || !I.style) return;\n  const M = m(I.color) || \"#000000\";\n  return [I.style, M];\n}\nfunction SM(I) {\n  const M = {};\n  let K = !1;\n  if (I.font) {\n    const w = I.font;\n    if ((w.name || w.size || w.bold || w.italic) && (K = !0, M.font = {}, w.name && (M.font.name = w.name), w.size && (M.font.size = w.size), w.bold && (M.font.bold = !0), w.italic && (M.font.italic = !0)), w.color) {\n      const g = m(w.color);\n      g && (K = !0, M.color = g);\n    }\n    w.underline && (K = !0, M.underline = !0), w.strike && (K = !0, M.strike = !0);\n  }\n  const P = sM(I.fill);\n  if (P && (K = !0, M.bgcolor = P), I.alignment) {\n    const w = I.alignment;\n    w.horizontal && (K = !0, M.align = w.horizontal), w.vertical && (K = !0, M.valign = w.vertical), w.wrapText && (K = !0, M.textwrap = !0);\n  }\n  if (I.border) {\n    const w = {};\n    let g = !1;\n    const C = [\"top\", \"bottom\", \"left\", \"right\"];\n    for (const y of C) {\n      const l = TM(I.border[y]);\n      l && (w[y] = l, g = !0);\n    }\n    g && (K = !0, M.border = w);\n  }\n  return K ? M : null;\n}\nfunction jM(I) {\n  return JSON.stringify(I);\n}\nfunction XM(I, M, K) {\n  const P = SM(I);\n  if (!P) return -1;\n  const w = jM(P), g = K.get(w);\n  if (g !== void 0) return g;\n  const C = M.length;\n  return M.push(P), K.set(w, C), C;\n}\nfunction BM(I) {\n  const M = I.value;\n  if (M == null) return \"\";\n  if (typeof M == \"string\") return M;\n  if (typeof M == \"number\") return String(M);\n  if (typeof M == \"boolean\") return M ? \"TRUE\" : \"FALSE\";\n  if (M instanceof Date)\n    return M.toLocaleDateString();\n  if (typeof M == \"object\" && \"formula\" in M) {\n    const K = M.result;\n    return K != null ? String(K) : \"\";\n  }\n  return typeof M == \"object\" && \"richText\" in M ? M.richText.map((P) => P.text).join(\"\") : typeof M == \"object\" && \"hyperlink\" in M ? M.text || \"\" : typeof M == \"object\" && \"error\" in M ? String(M.error) : String(M);\n}\nfunction DM(I) {\n  const M = I.split(\":\"), K = z(M[0]), P = M[1] ? z(M[1]) : K;\n  return {\n    top: K.row,\n    left: K.col,\n    bottom: P.row,\n    right: P.col\n  };\n}\nfunction z(I) {\n  const M = I.match(/^([A-Z]+)(\\d+)$/);\n  if (!M) return { row: 1, col: 1 };\n  const K = M[1], P = parseInt(M[2], 10);\n  let w = 0;\n  for (let g = 0; g < K.length; g++)\n    w = w * 26 + (K.charCodeAt(g) - 64);\n  return { row: P, col: w };\n}\nfunction II(I) {\n  const M = [];\n  return I.eachSheet((K) => {\n    const P = [], w = /* @__PURE__ */ new Map(), g = [], C = {}, y = {}, l = K.columnCount;\n    for (let S = 1; S <= l; S++) {\n      const j = K.getColumn(S);\n      j.width && (y[String(S - 1)] = { width: Math.round(j.width * 7.5) });\n    }\n    y.len = Math.max(l, 26);\n    const s = /* @__PURE__ */ new Map(), T = K.model, X = (T == null ? void 0 : T.merges) || [];\n    for (const S of X) {\n      g.push(S);\n      const { top: j, left: B, bottom: D, right: Y } = DM(S), A = D - j, G = Y - B;\n      s.set(`${j - 1},${B - 1}`, [A, G]);\n    }\n    K.eachRow({ includeEmpty: !0 }, (S, j) => {\n      const B = j - 1, D = {};\n      S.eachCell({ includeEmpty: !1 }, (A, G) => {\n        const Z = G - 1;\n        if (A.isMerged && A.master !== A) return;\n        const x = BM(A), c = XM(A, P, w), d = { text: x };\n        c !== -1 && (d.style = c);\n        const W = `${B},${Z}`;\n        s.has(W) && (d.merge = s.get(W)), D[String(Z)] = d;\n      });\n      const Y = { cells: D };\n      S.height && (Y.height = Math.round(S.height * 1.333)), C[String(B)] = Y;\n    }), M.push({\n      name: K.name,\n      styles: P,\n      merges: g,\n      rows: C,\n      cols: y\n    });\n  }), M;\n}\nfunction KI(I, M, K = \"Sheet1\") {\n  const P = I.length > 0, g = P ? [{ font: { bold: !0 } }] : [], C = {};\n  if (P) {\n    const l = {};\n    I.forEach((s, T) => {\n      l[String(T)] = { text: s, style: 0 };\n    }), C[0] = { cells: l };\n  }\n  const y = P ? 1 : 0;\n  return M.forEach((l, s) => {\n    const T = {};\n    l.forEach((X, S) => {\n      X !== void 0 && X !== \"\" && (T[String(S)] = { text: X });\n    }), C[String(s + y)] = { cells: T };\n  }), [{ name: K, styles: g, rows: C }];\n}\nconst N = \"0123456789abcdef\", YM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", AM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nfunction GM(I) {\n  let M = \"\";\n  for (let K = 0; K < I.length; K++) {\n    const P = I[K];\n    M += N[P >> 4] + N[P & 15];\n  }\n  return M;\n}\nfunction t(I) {\n  if (I.length % 2 !== 0)\n    throw new SyntaxError(\"Uint8Array.fromHex: string length must be even\");\n  const M = I.length / 2, K = new Uint8Array(M);\n  for (let P = 0; P < M; P++) {\n    const w = parseInt(I.substr(P * 2, 2), 16);\n    if (Number.isNaN(w))\n      throw new SyntaxError(\"Uint8Array.fromHex: invalid hex string\");\n    K[P] = w;\n  }\n  return K;\n}\nfunction xM(I, M) {\n  let K = \"\", P = 0;\n  const w = I.length;\n  for (; P + 2 < w; P += 3) {\n    const C = I[P] << 16 | I[P + 1] << 8 | I[P + 2];\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + M[C >> 6 & 63] + M[C & 63];\n  }\n  const g = w - P;\n  if (g === 1) {\n    const C = I[P] << 16;\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + \"==\";\n  } else if (g === 2) {\n    const C = I[P] << 16 | I[P + 1] << 8;\n    K += M[C >> 18 & 63] + M[C >> 12 & 63] + M[C >> 6 & 63] + \"=\";\n  }\n  return K;\n}\nfunction f(I, M) {\n  const K = {};\n  for (let s = 0; s < M.length; s++) K[M[s]] = s;\n  const P = I.replace(/[\\s=]/g, \"\"), w = Math.floor(P.length * 6 / 8), g = new Uint8Array(w);\n  let C = 0, y = 0, l = 0;\n  for (let s = 0; s < P.length; s++) {\n    const T = K[P[s]];\n    if (T === void 0)\n      throw new SyntaxError(\"Uint8Array.fromBase64: invalid base64 character\");\n    C = C << 6 | T, y += 6, y >= 8 && (y -= 8, g[l++] = C >> y & 255);\n  }\n  return g;\n}\nfunction i(I) {\n  return (I == null ? void 0 : I.alphabet) === \"base64url\" ? AM : YM;\n}\nfunction dM() {\n  if (typeof Uint8Array > \"u\") return;\n  const I = Uint8Array.prototype, M = Uint8Array, K = (P, w, g) => {\n    typeof P[w] != \"function\" && Object.defineProperty(P, w, {\n      value: g,\n      writable: !0,\n      enumerable: !1,\n      configurable: !0\n    });\n  };\n  K(I, \"toHex\", function() {\n    return GM(this);\n  }), K(I, \"toBase64\", function(w) {\n    return xM(this, i(w));\n  }), K(I, \"setFromHex\", function(w) {\n    const g = t(w), C = Math.min(g.length, this.length);\n    return this.set(g.subarray(0, C)), { read: C * 2, written: C };\n  }), K(I, \"setFromBase64\", function(w, g) {\n    const C = f(w, i(g)), y = Math.min(C.length, this.length);\n    return this.set(C.subarray(0, y)), { read: w.length, written: y };\n  }), K(M, \"fromHex\", function(w) {\n    return t(w);\n  }), K(M, \"fromBase64\", function(w, g) {\n    return f(w, i(g));\n  });\n}\nlet H = null;\nfunction PI(I, M) {\n  var y;\n  if (typeof window > \"u\") return;\n  dM();\n  const K = (I == null ? void 0 : I.version) || ((y = I == null ? void 0 : I.GlobalWorkerOptions) == null ? void 0 : y.version) || \"\", {\n    workerSrc: P = `https://unpkg.com/pdfjs-dist@${K}/legacy/build/pdf.worker.min.mjs`,\n    cMapUrl: w = `https://unpkg.com/pdfjs-dist@${K}/cmaps/`,\n    cMapPacked: g = !0,\n    standardFontDataUrl: C = `https://unpkg.com/pdfjs-dist@${K}/standard_fonts/`\n  } = M || {};\n  I.GlobalWorkerOptions && (I.GlobalWorkerOptions.workerSrc = P), H = { cMapUrl: w, cMapPacked: g, standardFontDataUrl: C };\n}\nfunction wI() {\n  return H ? { ...H } : null;\n}\nconst ZM = {\n  // ─────── common ───────\n  \"common.download\": \"下载\",\n  \"common.close\": \"关闭\",\n  \"common.loading\": \"加载中\",\n  \"common.unknown_error\": \"未知错误\",\n  \"common.unsupported_preview\": \"不支持预览此文件类型 ({type})\",\n  \"common.retry\": \"重试\",\n  // ─────── accessibility ───────\n  \"accessibility.previousFile\": \"上一个文件\",\n  \"accessibility.nextFile\": \"下一个文件\",\n  \"accessibility.closePreview\": \"关闭预览\",\n  \"accessibility.downloadFile\": \"下载文件\",\n  // ─────── toolbar ───────\n  \"toolbar.zoom_in\": \"放大\",\n  \"toolbar.zoom_out\": \"缩小\",\n  \"toolbar.rotate_left\": \"向左旋转\",\n  \"toolbar.rotate_right\": \"向右旋转\",\n  \"toolbar.reset\": \"复原\",\n  \"toolbar.fit_to_window\": \"适应窗口\",\n  \"toolbar.original_size\": \"原始尺寸\",\n  \"toolbar.toc\": \"目录\",\n  \"toolbar.outline\": \"大纲\",\n  \"toolbar.prev_page\": \"上一页\",\n  \"toolbar.next_page\": \"下一页\",\n  \"toolbar.full_width\": \"全屏宽度\",\n  \"toolbar.normal_width\": \"正常宽度\",\n  \"toolbar.wrap_on\": \"自动换行\",\n  \"toolbar.wrap_off\": \"不换行\",\n  \"toolbar.source\": \"源码\",\n  \"toolbar.preview\": \"预览\",\n  // ─────── image ───────\n  \"image.load_failed\": \"图片加载失败\",\n  \"image.decode_failed\": \"图片解码失败\",\n  // ─────── pdf ───────\n  \"pdf.load_failed\": \"PDF 文件加载失败\",\n  // ─────── docx ───────\n  \"docx.parse_failed\": \"Word 文档解析失败\",\n  // ─────── xlsx ───────\n  \"xlsx.loading\": \"加载 Excel 中...\",\n  \"xlsx.load_failed\": \"Excel 加载失败\",\n  \"xlsx.parse_failed\": \"Excel 文件解析失败\",\n  \"xlsx.not_found\": \"Excel 文件不存在\",\n  // ─────── pptx ───────\n  \"pptx.loading\": \"加载 PPT 中...\",\n  \"pptx.load_failed\": \"PPT 加载失败\",\n  \"pptx.parse_failed\": \"PPT 文件解析失败\",\n  \"pptx.not_found\": \"PPT 文件不存在\",\n  \"pptx.invalid_format\": \"PPT 文件格式错误或已损坏\",\n  \"pptx.no_pages\": \"PPT 文件无有效页面\",\n  \"pptx.timeout\": \"加载超时，请检查网络或稍后重试\",\n  // ─────── msg ───────\n  \"msg.parse_failed\": \"Outlook 邮件解析失败\",\n  \"msg.parse_failed_short\": \"邮件解析失败\",\n  \"msg.empty_body\": \"（无邮件正文）\",\n  // ─────── epub ───────\n  \"epub.load_failed\": \"EPUB 文件加载失败\",\n  // ─────── mobi ───────\n  \"mobi.load_failed\": \"电子书加载失败，文件可能已损坏或带有 DRM 保护\",\n  // ─────── video ───────\n  \"video.loading\": \"加载视频中...\",\n  \"video.load_failed\": \"视频加载失败\",\n  \"video.load_failed_with_error\": \"视频加载失败: {error}\",\n  \"video.format_not_supported\": \"浏览器不支持 {format} 格式，建议转换为 MP4/WebM 格式\",\n  \"video.unsupported_title\": \"该视频格式无法在浏览器中直接播放\",\n  \"video.unsupported_detail\": \"{format} 是浏览器原生不支持的容器/编码（常见于 AVI / WMV / FLV 及部分 MKV）。请下载到本地播放器观看，或转换为 MP4（H.264 + AAC）。\",\n  \"video.codec_not_supported_detail\": \"视频或音频编码 {codecs} 浏览器无法解码。请转换为 MP4（H.264 + AAC）后再预览。\",\n  // ─────── audio (aria-label) ───────\n  \"audio.aria.play\": \"播放\",\n  \"audio.aria.pause\": \"暂停\",\n  \"audio.aria.forward_10\": \"前进 10 秒\",\n  \"audio.aria.backward_10\": \"后退 10 秒\",\n  \"audio.aria.mute\": \"静音\",\n  \"audio.aria.unmute\": \"取消静音\",\n  \"audio.aria.loop_on\": \"开启循环\",\n  \"audio.aria.loop_off\": \"关闭循环\",\n  \"audio.aria.progress\": \"播放进度\",\n  \"audio.aria.volume\": \"音量\",\n  // ─────── markdown ───────\n  \"markdown.load_failed\": \"Markdown 文件加载失败\",\n  \"markdown.copy_code\": \"复制代码\",\n  \"markdown.copied\": \"已复制\",\n  // ─────── json ───────\n  \"json.load_failed\": \"JSON 文件加载失败\",\n  \"json.items\": \"items\",\n  \"json.keys\": \"keys\",\n  // ─────── csv ───────\n  \"csv.loading\": \"加载 CSV 中...\",\n  \"csv.load_failed\": \"CSV 文件加载失败\",\n  \"csv.parse_failed\": \"CSV 解析失败\",\n  // ─────── xml ───────\n  \"xml.load_failed\": \"XML 文件加载失败\",\n  // ─────── subtitle / lyric ───────\n  \"subtitle.load_failed\": \"字幕文件加载失败\",\n  \"subtitle.parse_failed\": \"字幕解析失败\",\n  \"subtitle.lines\": \"lines\",\n  \"subtitle.cues\": \"cues\",\n  \"subtitle.meta.title\": \"标题\",\n  \"subtitle.meta.artist\": \"艺术家\",\n  \"subtitle.meta.album\": \"专辑\",\n  \"subtitle.meta.author\": \"作者\",\n  \"subtitle.meta.by\": \"制作\",\n  \"subtitle.meta.length\": \"时长\",\n  \"subtitle.meta.offset\": \"偏移\",\n  \"subtitle.meta.editor\": \"编辑器\",\n  \"subtitle.meta.version\": \"版本\",\n  // ─────── zip ───────\n  \"zip.load_failed\": \"ZIP 文件加载失败\",\n  \"zip.parse_failed\": \"ZIP 解析失败\",\n  // ─────── text ───────\n  \"text.load_failed\": \"文本文件加载失败\",\n  // ─────── font ───────\n  \"font.loading\": \"加载字体中...\",\n  \"font.load_failed\": \"字体文件加载失败\",\n  \"font.parse_failed\": \"字体解析失败\",\n  \"font.metadata_loading\": \"解析元数据中...\",\n  \"font.metadata_unavailable\": \"元数据不可用\",\n  \"font.meta.family\": \"字体家族\",\n  \"font.meta.subfamily\": \"子系列\",\n  \"font.meta.version\": \"版本\",\n  \"font.meta.designer\": \"设计师\",\n  \"font.meta.glyphs\": \"字形数量\",\n  \"font.meta.format\": \"格式\",\n  \"font.sample_text_placeholder\": \"输入自定义文本...\",\n  // ─────── cad ───────\n  \"cad.loading\": \"加载 CAD 文件中...\",\n  \"cad.load_failed\": \"CAD 文件加载失败\",\n  \"cad.parse_failed\": \"CAD 文件解析失败\",\n  \"cad.wireframe\": \"线框\",\n  \"cad.solid\": \"实体\",\n  \"cad.grid\": \"网格\",\n  \"cad.axes\": \"坐标轴\"\n}, bM = {\n  // ─────── common ───────\n  \"common.download\": \"Download\",\n  \"common.close\": \"Close\",\n  \"common.loading\": \"Loading\",\n  \"common.unknown_error\": \"Unknown error\",\n  \"common.unsupported_preview\": \"Preview not supported for this file type ({type})\",\n  \"common.retry\": \"Retry\",\n  // ─────── accessibility ───────\n  \"accessibility.previousFile\": \"Previous file\",\n  \"accessibility.nextFile\": \"Next file\",\n  \"accessibility.closePreview\": \"Close preview\",\n  \"accessibility.downloadFile\": \"Download file\",\n  // ─────── toolbar ───────\n  \"toolbar.zoom_in\": \"Zoom in\",\n  \"toolbar.zoom_out\": \"Zoom out\",\n  \"toolbar.rotate_left\": \"Rotate left\",\n  \"toolbar.rotate_right\": \"Rotate right\",\n  \"toolbar.reset\": \"Reset\",\n  \"toolbar.fit_to_window\": \"Fit to window\",\n  \"toolbar.original_size\": \"Original size\",\n  \"toolbar.toc\": \"Table of contents\",\n  \"toolbar.outline\": \"Outline\",\n  \"toolbar.prev_page\": \"Previous page\",\n  \"toolbar.next_page\": \"Next page\",\n  \"toolbar.full_width\": \"Full width\",\n  \"toolbar.normal_width\": \"Normal width\",\n  \"toolbar.wrap_on\": \"Word wrap\",\n  \"toolbar.wrap_off\": \"No wrap\",\n  \"toolbar.source\": \"Source\",\n  \"toolbar.preview\": \"Preview\",\n  // ─────── image ───────\n  \"image.load_failed\": \"Failed to load image\",\n  \"image.decode_failed\": \"Failed to decode image\",\n  // ─────── pdf ───────\n  \"pdf.load_failed\": \"Failed to load PDF\",\n  // ─────── docx ───────\n  \"docx.parse_failed\": \"Failed to parse Word document\",\n  // ─────── xlsx ───────\n  \"xlsx.loading\": \"Loading Excel...\",\n  \"xlsx.load_failed\": \"Failed to load Excel\",\n  \"xlsx.parse_failed\": \"Failed to parse Excel file\",\n  \"xlsx.not_found\": \"Excel file not found\",\n  // ─────── pptx ───────\n  \"pptx.loading\": \"Loading PPT...\",\n  \"pptx.load_failed\": \"Failed to load PPT\",\n  \"pptx.parse_failed\": \"Failed to parse PPT file\",\n  \"pptx.not_found\": \"PPT file not found\",\n  \"pptx.invalid_format\": \"PPT file format is invalid or corrupted\",\n  \"pptx.no_pages\": \"PPT file has no valid pages\",\n  \"pptx.timeout\": \"Loading timed out, please check your network and retry\",\n  // ─────── msg ───────\n  \"msg.parse_failed\": \"Failed to parse Outlook message\",\n  \"msg.parse_failed_short\": \"Failed to parse message\",\n  \"msg.empty_body\": \"(No message body)\",\n  // ─────── epub ───────\n  \"epub.load_failed\": \"Failed to load EPUB\",\n  // ─────── mobi ───────\n  \"mobi.load_failed\": \"Failed to load ebook — file may be corrupted or DRM-protected\",\n  // ─────── video ───────\n  \"video.loading\": \"Loading video...\",\n  \"video.load_failed\": \"Failed to load video\",\n  \"video.load_failed_with_error\": \"Failed to load video: {error}\",\n  \"video.format_not_supported\": \"Browser does not support {format} format. Please convert to MP4/WebM\",\n  \"video.unsupported_title\": \"This video format cannot be played in the browser\",\n  \"video.unsupported_detail\": \"{format} is a container/codec that browsers do not natively support (typical for AVI / WMV / FLV and some MKV files). Please download and play it in a local player, or convert to MP4 (H.264 + AAC).\",\n  \"video.codec_not_supported_detail\": \"The video or audio codec ({codecs}) cannot be decoded by the browser. Please convert to MP4 (H.264 + AAC) before previewing.\",\n  // ─────── audio (aria-label) ───────\n  \"audio.aria.play\": \"Play\",\n  \"audio.aria.pause\": \"Pause\",\n  \"audio.aria.forward_10\": \"Forward 10 seconds\",\n  \"audio.aria.backward_10\": \"Back 10 seconds\",\n  \"audio.aria.mute\": \"Mute\",\n  \"audio.aria.unmute\": \"Unmute\",\n  \"audio.aria.loop_on\": \"Enable loop\",\n  \"audio.aria.loop_off\": \"Disable loop\",\n  \"audio.aria.progress\": \"Playback progress\",\n  \"audio.aria.volume\": \"Volume\",\n  // ─────── markdown ───────\n  \"markdown.load_failed\": \"Failed to load Markdown\",\n  \"markdown.copy_code\": \"Copy code\",\n  \"markdown.copied\": \"Copied\",\n  // ─────── json ───────\n  \"json.load_failed\": \"Failed to load JSON\",\n  \"json.items\": \"items\",\n  \"json.keys\": \"keys\",\n  // ─────── csv ───────\n  \"csv.loading\": \"Loading CSV...\",\n  \"csv.load_failed\": \"Failed to load CSV\",\n  \"csv.parse_failed\": \"Failed to parse CSV\",\n  // ─────── xml ───────\n  \"xml.load_failed\": \"Failed to load XML\",\n  // ─────── subtitle / lyric ───────\n  \"subtitle.load_failed\": \"Failed to load subtitle\",\n  \"subtitle.parse_failed\": \"Failed to parse subtitle\",\n  \"subtitle.lines\": \"lines\",\n  \"subtitle.cues\": \"cues\",\n  \"subtitle.meta.title\": \"Title\",\n  \"subtitle.meta.artist\": \"Artist\",\n  \"subtitle.meta.album\": \"Album\",\n  \"subtitle.meta.author\": \"Author\",\n  \"subtitle.meta.by\": \"By\",\n  \"subtitle.meta.length\": \"Length\",\n  \"subtitle.meta.offset\": \"Offset\",\n  \"subtitle.meta.editor\": \"Editor\",\n  \"subtitle.meta.version\": \"Version\",\n  // ─────── zip ───────\n  \"zip.load_failed\": \"Failed to load ZIP\",\n  \"zip.parse_failed\": \"Failed to parse ZIP\",\n  // ─────── text ───────\n  \"text.load_failed\": \"Failed to load text file\",\n  // ─────── font ───────\n  \"font.loading\": \"Loading font...\",\n  \"font.load_failed\": \"Failed to load font\",\n  \"font.parse_failed\": \"Failed to parse font\",\n  \"font.metadata_loading\": \"Parsing metadata...\",\n  \"font.metadata_unavailable\": \"Metadata unavailable\",\n  \"font.meta.family\": \"Family\",\n  \"font.meta.subfamily\": \"Subfamily\",\n  \"font.meta.version\": \"Version\",\n  \"font.meta.designer\": \"Designer\",\n  \"font.meta.glyphs\": \"Glyphs\",\n  \"font.meta.format\": \"Format\",\n  \"font.sample_text_placeholder\": \"Type custom text...\",\n  // ─────── cad ───────\n  \"cad.loading\": \"Loading CAD file...\",\n  \"cad.load_failed\": \"Failed to load CAD file\",\n  \"cad.parse_failed\": \"Failed to parse CAD file\",\n  \"cad.wireframe\": \"Wireframe\",\n  \"cad.solid\": \"Solid\",\n  \"cad.grid\": \"Grid\",\n  \"cad.axes\": \"Axes\"\n}, p = {\n  \"zh-CN\": ZM,\n  \"en-US\": bM\n}, WM = /\\{(\\w+)\\}/g;\nfunction cM(I, M) {\n  return M ? I.replace(WM, (K, P) => {\n    const w = M[P];\n    return w === void 0 ? `{${P}}` : String(w);\n  }) : I;\n}\nfunction CI(I) {\n  var C;\n  const M = I.fallbackLocale ?? \"zh-CN\", K = p[I.locale] ?? p[M] ?? p[\"zh-CN\"], P = (C = I.messages) == null ? void 0 : C[I.locale], w = P ? { ...K, ...P } : K, g = p[\"zh-CN\"];\n  return (y, l) => {\n    const s = w[y] ?? g[y] ?? y;\n    return cM(s, l);\n  };\n}\nconst pM = {\n  // 标准图片格式\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  png: \"image/png\",\n  gif: \"image/gif\",\n  webp: \"image/webp\",\n  svg: \"image/svg+xml\",\n  bmp: \"image/bmp\",\n  ico: \"image/x-icon\",\n  // 高级图片格式\n  heic: \"image/heic\",\n  heif: \"image/heif\",\n  avif: \"image/avif\",\n  tif: \"image/tiff\",\n  tiff: \"image/tiff\",\n  // RAW 格式\n  cr2: \"image/x-canon-cr2\",\n  nef: \"image/x-nikon-nef\",\n  arw: \"image/x-sony-arw\",\n  dng: \"image/x-adobe-dng\",\n  raf: \"image/x-fuji-raf\",\n  orf: \"image/x-olympus-orf\",\n  // 其他专业格式\n  psd: \"image/vnd.adobe.photoshop\",\n  jp2: \"image/jp2\",\n  jpx: \"image/jpx\",\n  j2k: \"image/jp2\",\n  // 文档格式\n  pdf: \"application/pdf\",\n  docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n  xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n  pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n  ppt: \"application/vnd.ms-powerpoint\",\n  // 其他\n  msg: \"application/vnd.ms-outlook\",\n  epub: \"application/epub+zip\",\n  mobi: \"application/x-mobipocket-ebook\",\n  azw: \"application/vnd.amazon.ebook\",\n  azw3: \"application/vnd.amazon.ebook\",\n  kf8: \"application/vnd.amazon.ebook\",\n  csv: \"text/csv\",\n  tsv: \"text/tab-separated-values\",\n  xml: \"application/xml\",\n  json: \"application/json\",\n  md: \"text/markdown\",\n  markdown: \"text/markdown\",\n  txt: \"text/plain\",\n  zip: \"application/zip\",\n  // 字体\n  ttf: \"font/ttf\",\n  otf: \"font/otf\",\n  woff: \"font/woff\",\n  woff2: \"font/woff2\",\n  // 视频\n  mp4: \"video/mp4\",\n  webm: \"video/webm\",\n  ogg: \"video/ogg\",\n  ogv: \"video/ogg\",\n  mov: \"video/quicktime\",\n  avi: \"video/x-msvideo\",\n  mkv: \"video/x-matroska\",\n  m4v: \"video/mp4\",\n  \"3gp\": \"video/3gpp\",\n  flv: \"video/x-flv\",\n  // 音频\n  mp3: \"audio/mpeg\",\n  wav: \"audio/wav\",\n  m4a: \"audio/mp4\",\n  flac: \"audio/flac\",\n  aac: \"audio/aac\",\n  // 字幕\n  srt: \"application/x-subrip\",\n  vtt: \"text/vtt\",\n  lrc: \"application/x-lrc\",\n  elrc: \"application/x-lrc\",\n  ass: \"text/x-ssa\",\n  ssa: \"text/x-ssa\",\n  ttml: \"application/ttml+xml\",\n  dfxp: \"application/ttml+xml\",\n  // CAD / 3D\n  dxf: \"application/dxf\",\n  stl: \"model/stl\",\n  obj: \"model/obj\",\n  gltf: \"model/gltf+json\",\n  glb: \"model/gltf-binary\"\n};\nfunction JM(I) {\n  const M = I.toLowerCase();\n  return pM[M] || \"application/octet-stream\";\n}\nfunction iM(I) {\n  var K;\n  const M = ((K = I.split(\".\").pop()) == null ? void 0 : K.toLowerCase()) || \"\";\n  return JM(M);\n}\nfunction hM(I) {\n  return [\n    \"image/heic\",\n    \"image/heif\",\n    \"image/avif\",\n    \"image/tiff\",\n    \"image/x-canon-cr2\",\n    \"image/x-nikon-nef\",\n    \"image/x-sony-arw\",\n    \"image/x-adobe-dng\",\n    \"image/x-fuji-raf\",\n    \"image/x-olympus-orf\",\n    \"image/vnd.adobe.photoshop\",\n    \"image/jp2\",\n    \"image/jpx\"\n  ].includes(I);\n}\nfunction gI(I) {\n  return I.startsWith(\"image/x-\") && [\"cr2\", \"nef\", \"arw\", \"dng\", \"raf\", \"orf\"].some((M) => I.includes(M));\n}\nconst k = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();\nfunction yI(I, M) {\n  k.set(I, M);\n}\nfunction lI(I) {\n  return k.get(I) || null;\n}\nfunction sI(I) {\n  return k.has(I);\n}\nasync function TI(I) {\n  if (h.has(I))\n    return h.get(I);\n  if (!hM(I))\n    return null;\n  try {\n    let M = null;\n    return I === \"image/heic\" || I === \"image/heif\" ? M = (await import(\"./heicLoader-CH_raQNn.js\")).default : I === \"image/avif\" ? M = (await import(\"./avifLoader-BP3fgcMm.js\")).default : I === \"image/tiff\" ? M = (await import(\"./tiffLoader-CmUAD1vO.js\")).default : I === \"image/x-canon-cr2\" || I === \"image/x-nikon-nef\" || I === \"image/x-sony-arw\" || I === \"image/x-adobe-dng\" || I === \"image/x-fuji-raf\" || I === \"image/x-olympus-orf\" ? M = (await import(\"./rawLoader-0mLvxCNp.js\")).default : I === \"image/vnd.adobe.photoshop\" ? M = (await import(\"./psdLoader-D5CkupyY.js\")).default : (I === \"image/jp2\" || I === \"image/jpx\") && (M = (await import(\"./jp2Loader-Bn-qPMbD.js\")).default), M && h.set(I, M), M;\n  } catch (M) {\n    return console.warn(`Failed to load image decoder for ${I}:`, M), null;\n  }\n}\nasync function SI(I) {\n  if (I.type && I.type !== \"application/octet-stream\")\n    return I.type;\n  const M = iM(I.name);\n  if (M !== \"application/octet-stream\")\n    return M;\n  if (I instanceof Blob || I instanceof File) {\n    const K = await oM(I);\n    if (K !== \"application/octet-stream\")\n      return K;\n  }\n  return \"application/octet-stream\";\n}\nasync function oM(I) {\n  try {\n    const M = new Uint8Array(await I.slice(0, 12).arrayBuffer());\n    if (M[4] === 102 && M[5] === 116 && M[6] === 121 && M[7] === 112) {\n      const K = String.fromCharCode(...M.slice(8, 12));\n      if (K === \"heic\" || K === \"heix\" || K === \"mif1\")\n        return \"image/heic\";\n    }\n    if (M[0] === 73 && M[1] === 73 && M[2] === 42 && M[3] === 0 || M[0] === 77 && M[1] === 77 && M[2] === 0 && M[3] === 42)\n      return \"image/tiff\";\n    if (M[4] === 102 && M[5] === 116 && M[6] === 121 && M[7] === 112 && String.fromCharCode(...M.slice(8, 12)) === \"avif\")\n      return \"image/avif\";\n    if (M[0] === 56 && M[1] === 66 && M[2] === 80 && M[3] === 83)\n      return \"image/vnd.adobe.photoshop\";\n    if (M[0] === 255 && M[1] === 79 && M[2] === 255 && M[3] === 81)\n      return \"image/jp2\";\n  } catch (M) {\n    console.warn(\"Failed to detect image format by magic number:\", M);\n  }\n  return \"application/octet-stream\";\n}\nconst O = \"ZnVuY3Rpb24gZGYociwgZSkgewogIHJldHVybiBlLmZvckVhY2goZnVuY3Rpb24oYSkgewogICAgYSAmJiB0eXBlb2YgYSAhPSAic3RyaW5nIiAmJiAhQXJyYXkuaXNBcnJheShhKSAmJiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKEEpIHsKICAgICAgaWYgKEEgIT09ICJkZWZhdWx0IiAmJiAhKEEgaW4gcikpIHsKICAgICAgICB2YXIgdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwgQSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIEEsIHQuZ2V0ID8gdCA6IHsKICAgICAgICAgIGVudW1lcmFibGU6ICEwLAogICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGFbQV07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0pLCBPYmplY3QuZnJlZXplKHIpOwp9CmFzeW5jIGZ1bmN0aW9uIGhmKHIpIHsKICByZXR1cm4gciA9PT0gImltYWdlL2hlaWMiIHx8IHIgPT09ICJpbWFnZS9oZWlmIiA/IChhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGdmOwogIH0pKS5kZWZhdWx0IDogciA9PT0gImltYWdlL3gtY2Fub24tY3IyIiB8fCByID09PSAiaW1hZ2UveC1uaWtvbi1uZWYiIHx8IHIgPT09ICJpbWFnZS94LXNvbnktYXJ3IiB8fCByID09PSAiaW1hZ2UveC1hZG9iZS1kbmciIHx8IHIgPT09ICJpbWFnZS94LWZ1amktcmFmIiB8fCByID09PSAiaW1hZ2UveC1vbHltcHVzLW9yZiIgPyAoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiB5ZjsKICB9KSkuZGVmYXVsdCA6IHIgPT09ICJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wIiA/IChhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIElmOwogIH0pKS5kZWZhdWx0IDogbnVsbDsKfQpzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChyKSA9PiB7CiAgY29uc3QgeyBpZDogZSwgbWltZVR5cGU6IGEsIGJ1ZmZlcjogQSwgb3B0aW9uczogdCB9ID0gci5kYXRhOwogIHRyeSB7CiAgICBjb25zdCBpID0gYXdhaXQgaGYoYSk7CiAgICBpZiAoIWkpIHsKICAgICAgY29uc3QgbCA9IHsKICAgICAgICBpZDogZSwKICAgICAgICBzdWNjZXNzOiAhMSwKICAgICAgICBlcnJvcjogYOS4jeaUr+aMgeeahCBNSU1FIOexu+WeizogJHthfWAKICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbiA9IGF3YWl0IGkuZGVjb2RlKEEsIHQpLCBmID0gbiBpbnN0YW5jZW9mIEJsb2IgPyBuIDogbmV3IEJsb2IoW25dLCB7IHR5cGU6ICJpbWFnZS9wbmciIH0pLCB1ID0gYXdhaXQgZi5hcnJheUJ1ZmZlcigpLCBvID0gewogICAgICBpZDogZSwKICAgICAgc3VjY2VzczogITAsCiAgICAgIGRhdGE6IHUsCiAgICAgIG1pbWVUeXBlOiBmLnR5cGUgfHwgImltYWdlL3BuZyIKICAgIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKG8sIFt1XSk7CiAgfSBjYXRjaCAoaSkgewogICAgY29uc3QgbiA9IHsKICAgICAgaWQ6IGUsCiAgICAgIHN1Y2Nlc3M6ICExLAogICAgICBlcnJvcjogKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgfHwgIuino+eggeWksei0pSIKICAgIH07CiAgICBzZWxmLnBvc3RNZXNzYWdlKG4pOwogIH0KfTsKY2xhc3MgdmYgewogIC8qKgogICAqIEhFSUMg5qC85byP5rWP6KeI5Zmo5Z2H5LiN5Y6f55Sf5pSv5oyB77yM5aeL57uI6ZyA6KaB6Kej56CBCiAgICovCiAgYXN5bmMgbmVlZHNEZWNvZGUoZSkgewogICAgcmV0dXJuIGUgPT09ICJpbWFnZS9oZWljIiB8fCBlID09PSAiaW1hZ2UvaGVpZiI7CiAgfQogIC8qKgogICAqIOino+eggSBIRUlDIOaWh+S7tuS4uiBKUEVHIEJsb2IKICAgKi8KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgdmFyIEEsIHQ7CiAgICB0cnkgewogICAgICBjb25zdCBpID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gX2Y7CiAgICAgIH0pLCBuID0gZSBpbnN0YW5jZW9mIEJsb2IgPyBlIDogbmV3IEJsb2IoW2VdLCB7IHR5cGU6ICJpbWFnZS9oZWljIiB9KSwgZiA9IGF3YWl0IGkuZGVmYXVsdCh7CiAgICAgICAgYmxvYjogbiwKICAgICAgICB0b1R5cGU6IChhID09IG51bGwgPyB2b2lkIDAgOiBhLm91dHB1dEZvcm1hdCkgfHwgImltYWdlL2pwZWciLAogICAgICAgIHF1YWxpdHk6IDAuOQogICAgICB9KTsKICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZikgPyBmWzBdIDogZjsKICAgIH0gY2F0Y2ggKGkpIHsKICAgICAgdGhyb3cgKEEgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpICE9IG51bGwgJiYgQS5pbmNsdWRlcygiRFJNIikgfHwgKHQgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpICE9IG51bGwgJiYgdC5pbmNsdWRlcygicHJvdGVjdGVkIikgPyBuZXcgRXJyb3IoIkhFSUMg6Kej56CB5aSx6LSl77yM5paH5Lu25Y+XIERSTSDkv53miqQiKSA6IG5ldyBFcnJvcihgSEVJQyDop6PnoIHlpLHotKXvvIzmlofku7blj6/og73mjZ/lnY86ICR7KGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgfHwgIuacquefpemUmeivryJ9YCk7CiAgICB9CiAgfQogIC8qKgogICAqIOiOt+WPliBIRUlDIOWFg+aVsOaNru+8iOW9k+WJjeeJiOacrOaaguS4jeWunueOsO+8jOi/lOWbnuepuuWvueixoe+8iQogICAqLwogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogImhlaWMiCiAgICB9OwogIH0KfQp2YXIga2YgPSBuZXcgdmYoKSwgZ2YgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7CiAgX19wcm90b19fOiBudWxsLAogIGRlZmF1bHQ6IGtmCn0pOwpjb25zdCBtZiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAiaW1hZ2UveC1jYW5vbi1jcjIiLAogICJpbWFnZS94LW5pa29uLW5lZiIsCiAgImltYWdlL3gtc29ueS1hcnciLAogICJpbWFnZS94LWFkb2JlLWRuZyIsCiAgImltYWdlL3gtZnVqaS1yYWYiLAogICJpbWFnZS94LW9seW1wdXMtb3JmIgpdKTsKYXN5bmMgZnVuY3Rpb24gcUEocikgewogIGNvbnN0IGUgPSBuZXcgVWludDhBcnJheShyKTsKICBpZiAoZS5sZW5ndGggPCA4KSByZXR1cm4gbnVsbDsKICBsZXQgYTsKICBpZiAoZVswXSA9PT0gNzMgJiYgZVsxXSA9PT0gNzMpCiAgICBhID0gITA7CiAgZWxzZSBpZiAoZVswXSA9PT0gNzcgJiYgZVsxXSA9PT0gNzcpCiAgICBhID0gITE7CiAgZWxzZQogICAgcmV0dXJuIHhlKGUpOwogIGNvbnN0IEEgPSBuZXcgRGF0YVZpZXcociksIHQgPSAobykgPT4gQS5nZXRVaW50MTYobywgYSksIGkgPSAobykgPT4gQS5nZXRVaW50MzIobywgYSk7CiAgaWYgKHQoMikgIT09IDQyKQogICAgcmV0dXJuIHhlKGUpOwogIGxldCBuID0gaSg0KSwgZiA9IDAsIHUgPSAwOwogIGZvciAobGV0IG8gPSAwOyBvIDwgMTAgJiYgbiAhPT0gMCAmJiBuICsgMiA8IGUubGVuZ3RoOyBvKyspIHsKICAgIGNvbnN0IGwgPSB0KG4pOwogICAgbGV0IHMgPSAwLCBjID0gMDsKICAgIGZvciAobGV0IHYgPSAwOyB2IDwgbDsgdisrKSB7CiAgICAgIGNvbnN0IGsgPSBuICsgMiArIHYgKiAxMjsKICAgICAgaWYgKGsgKyAxMiA+IGUubGVuZ3RoKSBicmVhazsKICAgICAgY29uc3QgRSA9IHQoayksIGcgPSBrICsgODsKICAgICAgRSA9PT0gNTEzID8gcyA9IGkoZykgOiBFID09PSA1MTQgJiYgKGMgPSBpKGcpKTsKICAgIH0KICAgIHMgPiAwICYmIGMgPiB1ICYmIHMgKyBjIDw9IGUubGVuZ3RoICYmIChmID0gcywgdSA9IGMpOwogICAgY29uc3QgZCA9IG4gKyAyICsgbCAqIDEyOwogICAgaWYgKGQgKyA0ID4gZS5sZW5ndGgpIGJyZWFrOwogICAgbiA9IGkoZCk7CiAgfQogIHJldHVybiBmID4gMCAmJiB1ID4gMCA/IG5ldyBCbG9iKFtlLnNsaWNlKGYsIGYgKyB1KV0sIHsKICAgIHR5cGU6ICJpbWFnZS9qcGVnIgogIH0pIDogeGUoZSk7Cn0KZnVuY3Rpb24geGUocikgewogIGxldCBlID0gLTEsIGEgPSAtMSwgQSA9IDA7CiAgZm9yIChsZXQgdCA9IDA7IHQgPCByLmxlbmd0aCAtIDQ7IHQrKykKICAgIGlmIChyW3RdID09PSAyNTUgJiYgclt0ICsgMV0gPT09IDIxNiAmJiByW3QgKyAyXSA9PT0gMjU1KSB7CiAgICAgIGNvbnN0IGkgPSB0OwogICAgICBmb3IgKGxldCBuID0gdCArIDI7IG4gPCByLmxlbmd0aCAtIDE7IG4rKykKICAgICAgICBpZiAocltuXSA9PT0gMjU1ICYmIHJbbiArIDFdID09PSAyMTcpIHsKICAgICAgICAgIGNvbnN0IGYgPSBuICsgMiAtIGk7CiAgICAgICAgICBmID4gQSAmJiAoZSA9IGksIGEgPSBuICsgMiwgQSA9IGYpLCB0ID0gbiArIDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuIGUgPj0gMCAmJiBhID4gZSA/IG5ldyBCbG9iKFtyLnNsaWNlKGUsIGEpXSwgeyB0eXBlOiAiaW1hZ2UvanBlZyIgfSkgOiBudWxsOwp9CmNsYXNzIHBmIHsKICBhc3luYyBuZWVkc0RlY29kZShlKSB7CiAgICByZXR1cm4gbWYuaGFzKGUpOwogIH0KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgY29uc3QgQSA9IGUgaW5zdGFuY2VvZiBCbG9iID8gYXdhaXQgZS5hcnJheUJ1ZmZlcigpIDogZTsKICAgIGlmICghKGEgIT0gbnVsbCAmJiBhLmZ1bGxRdWFsaXR5KSkgewogICAgICBjb25zdCBpID0gYXdhaXQgcUEoQSk7CiAgICAgIGlmIChpKQogICAgICAgIHJldHVybiBpOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIuacquWcqCBSQVcg5paH5Lu25Lit5om+5Yiw5bWM5YWl55qE6aKE6KeI5Zu+5YOP77yI6K+l5paH5Lu25Y+v6IO95bey6KKr5Yml56a7IEpQRUcg6aKE6KeI77yJ44CCIik7CiAgICB9CiAgICBjb25zdCB0ID0gYXdhaXQgcUEoQSk7CiAgICBpZiAodCkKICAgICAgcmV0dXJuIHQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoIuWujOaVtCBSQVcg6Kej56CB5pqC5pyq5a6e546w77yM5LiU5peg5rOV5o+Q5Y+W5bWM5YWl6aKE6KeI5Zu+44CCIik7CiAgfQogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogInJhdyIKICAgIH07CiAgfQp9CnZhciB3ZiA9IG5ldyBwZigpLCB5ZiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHsKICBfX3Byb3RvX186IG51bGwsCiAgZGVmYXVsdDogd2YKfSk7CmNsYXNzIEVmIHsKICBhc3luYyBuZWVkc0RlY29kZShlKSB7CiAgICByZXR1cm4gZSA9PT0gImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AiOwogIH0KICBhc3luYyBkZWNvZGUoZSwgYSkgewogICAgdmFyIEE7CiAgICB0cnkgewogICAgICBjb25zdCB0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gSmk7CiAgICAgIH0pLCBpID0gdC5yZWFkUHNkIHx8ICgoQSA9IHQuZGVmYXVsdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEEucmVhZFBzZCk7CiAgICAgIGlmICh0eXBlb2YgaSAhPSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYWctcHNkIOW6kyBBUEkg5LiN56ym5ZCI6aKE5pyfIik7CiAgICAgIGNvbnN0IG4gPSBlIGluc3RhbmNlb2YgQmxvYiA/IGF3YWl0IGUuYXJyYXlCdWZmZXIoKSA6IGUsIGYgPSBpKG4sIHsKICAgICAgICBza2lwTGF5ZXJJbWFnZURhdGE6ICEwLAogICAgICAgIC8vIOS4jemcgOimgeWNleeLrOWbvuWxguaVsOaNrgogICAgICAgIHNraXBDb21wb3NpdGVJbWFnZURhdGE6ICExLAogICAgICAgIC8vIOmcgOimgeWQiOW5tumihOiniAogICAgICAgIHNraXBUaHVtYm5haWw6ICEwLAogICAgICAgIC8vIOS/neeVmeWDj+e0oOaVsOaNru+8jOmBv+WFjSBXb3JrZXIg546v5aKD5L6d6LWWIGRvY3VtZW50L0hUTUxDYW52YXNFbGVtZW50CiAgICAgICAgdXNlSW1hZ2VEYXRhOiAhMAogICAgICB9KTsKICAgICAgaWYgKGYuaW1hZ2VEYXRhICYmIGYud2lkdGggJiYgZi5oZWlnaHQpIHsKICAgICAgICBjb25zdCB1ID0gbmV3IEltYWdlRGF0YSgKICAgICAgICAgIG5ldyBVaW50OENsYW1wZWRBcnJheShmLmltYWdlRGF0YS5kYXRhIHx8IGYuaW1hZ2VEYXRhKSwKICAgICAgICAgIGYud2lkdGgsCiAgICAgICAgICBmLmhlaWdodAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGF3YWl0IFpmKHUsIChhID09IG51bGwgPyB2b2lkIDAgOiBhLm91dHB1dEZvcm1hdCkgfHwgImltYWdlL3BuZyIpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcigiUFNEIOaWh+S7tuS4jeWMheWQq+WQiOW5tueahOmihOiniOWbvuWDj++8iOWPr+iDveS7heWQq+WbvuWxguaVsOaNru+8iSIpOwogICAgfSBjYXRjaCAodCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYFBTRCDop6PnoIHlpLHotKU6ICR7KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubWVzc2FnZSkgfHwgIuacquefpemUmeivryJ9YCk7CiAgICB9CiAgfQogIGFzeW5jIGdldE1ldGFkYXRhKGUpIHsKICAgIHZhciBhOwogICAgdHJ5IHsKICAgICAgY29uc3QgQSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIEppOwogICAgICB9KSwgdCA9IEEucmVhZFBzZCB8fCAoKGEgPSBBLmRlZmF1bHQpID09IG51bGwgPyB2b2lkIDAgOiBhLnJlYWRQc2QpOwogICAgICBpZiAodHlwZW9mIHQgIT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4geyBmb3JtYXQ6ICJwc2QiIH07CiAgICAgIGNvbnN0IGkgPSBlIGluc3RhbmNlb2YgQmxvYiA/IGF3YWl0IGUuYXJyYXlCdWZmZXIoKSA6IGUsIG4gPSB0KGksIHsKICAgICAgICBza2lwTGF5ZXJJbWFnZURhdGE6ICEwLAogICAgICAgIHNraXBDb21wb3NpdGVJbWFnZURhdGE6ICEwLAogICAgICAgIHNraXBUaHVtYm5haWw6ICEwCiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGZvcm1hdDogInBzZCIsCiAgICAgICAgd2lkdGg6IG4ud2lkdGgsCiAgICAgICAgaGVpZ2h0OiBuLmhlaWdodAogICAgICB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiB7IGZvcm1hdDogInBzZCIgfTsKICAgIH0KICB9Cn0KYXN5bmMgZnVuY3Rpb24gWmYociwgZSkgewogIGlmICh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIDwgInUiKSB7CiAgICBjb25zdCB0ID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhyLndpZHRoLCByLmhlaWdodCksIGkgPSB0LmdldENvbnRleHQoIjJkIik7CiAgICBpZiAoIWkpIHRocm93IG5ldyBFcnJvcigi5peg5rOV5Yib5bu6IE9mZnNjcmVlbkNhbnZhcyAyRCDkuIrkuIvmlociKTsKICAgIHJldHVybiBpLnB1dEltYWdlRGF0YShyLCAwLCAwKSwgdC5jb252ZXJ0VG9CbG9iKHsgdHlwZTogZSB9KTsKICB9CiAgaWYgKHR5cGVvZiBkb2N1bWVudCA+ICJ1IikKICAgIHRocm93IG5ldyBFcnJvcigi5b2T5YmNIFdvcmtlciDnjq/looPkuI3mlK/mjIEgT2Zmc2NyZWVuQ2FudmFzIik7CiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogIGEud2lkdGggPSByLndpZHRoLCBhLmhlaWdodCA9IHIuaGVpZ2h0OwogIGNvbnN0IEEgPSBhLmdldENvbnRleHQoIjJkIik7CiAgaWYgKCFBKSB0aHJvdyBuZXcgRXJyb3IoIuaXoOazleWIm+W7uiBDYW52YXMgMkQg5LiK5LiL5paHIik7CiAgcmV0dXJuIEEucHV0SW1hZ2VEYXRhKHIsIDAsIDApLCBuZXcgUHJvbWlzZSgodCwgaSkgPT4gewogICAgYS50b0Jsb2IoCiAgICAgIChuKSA9PiB7CiAgICAgICAgbiA/IHQobikgOiBpKG5ldyBFcnJvcigiUFNEIENhbnZhcyDovazmjaLkuLogQmxvYiDlpLHotKUiKSk7CiAgICAgIH0sCiAgICAgIGUKICAgICk7CiAgfSk7Cn0KdmFyIEJmID0gbmV3IEVmKCksIElmID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoewogIF9fcHJvdG9fXzogbnVsbCwKICBkZWZhdWx0OiBCZgp9KSwgRmYgPSB0eXBlb2YgZ2xvYmFsVGhpcyA8ICJ1IiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93IDwgInUiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA8ICJ1IiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmIDwgInUiID8gc2VsZiA6IHt9OwpmdW5jdGlvbiBDZihyKSB7CiAgcmV0dXJuIHIgJiYgci5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCAiZGVmYXVsdCIpID8gci5kZWZhdWx0IDogcjsKfQp2YXIgSGkgPSB7IGV4cG9ydHM6IHt9IH07CihmdW5jdGlvbihyLCBlKSB7CiAgKGZ1bmN0aW9uKGEsIEEsIHQsIGkpIHsKICAgIGZ1bmN0aW9uIG4oKSB7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGYoKSB7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHUoKSB7CiAgICAgIHZhciBiID0geyBnZXRVc2VyTWVkaWE6ICEwIH07CiAgICAgIHJldHVybiBDLmlzVmFsaWQoYik7CiAgICB9CiAgICBmdW5jdGlvbiBvKGIpIHsKICAgICAgdmFyIFogPSAhMTsKICAgICAgaWYgKHAuaXNBcnJheShiKSAmJiBiLmxlbmd0aCkgewogICAgICAgIGlmIChwLmVhY2goYiwgZnVuY3Rpb24oeSwgRikgewogICAgICAgICAgcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tGXSAmJiAoWiA9ICEwKTsKICAgICAgICB9KSwgIVopCiAgICAgICAgICByZXR1cm4gITE7CiAgICAgIH0gZWxzZSBpZiAocC5pc1N0cmluZyhiKSAmJiBiLmxlbmd0aCAmJiAhcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tiXSkKICAgICAgICByZXR1cm4gITE7CiAgICAgIHJldHVybiBDLmlzVmFsaWQoeyBnZXRVc2VyTWVkaWE6ICEwIH0pOwogICAgfQogICAgZnVuY3Rpb24gbCgpIHsKICAgICAgZnVuY3Rpb24gYihoMCwgZDAsIFYwKSB7CiAgICAgICAgdmFyIHMwLCBrMDsKICAgICAgICBmb3IgKGIwID0gaDAsIGUwID0gZDAsIHEgPSBWMCwgbzAgPSBuZXcgQXJyYXkoYzApLCBzMCA9IDA7IGMwID4gczA7IHMwKyspCiAgICAgICAgICBvMFtzMF0gPSBuZXcgQXJyYXkoNCksIGswID0gbzBbczBdLCBrMFswXSA9IGswWzFdID0gazBbMl0gPSAoczAgPDwgTjAgKyA4KSAvIGMwIHwgMCwgbmFbczBdID0gUDAgLyBjMCB8IDAsIGlhW3MwXSA9IDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gWigpIHsKICAgICAgICBmb3IgKHZhciBoMCA9IFtdLCBkMCA9IG5ldyBBcnJheShjMCksIFYwID0gMDsgYzAgPiBWMDsgVjArKykKICAgICAgICAgIGQwW28wW1YwXVszXV0gPSBWMDsKICAgICAgICBmb3IgKHZhciBzMCA9IDAsIGswID0gMDsgYzAgPiBrMDsgazArKykgewogICAgICAgICAgdmFyICQgPSBkMFtrMF07CiAgICAgICAgICBoMFtzMCsrXSA9IG8wWyRdWzBdLCBoMFtzMCsrXSA9IG8wWyRdWzFdLCBoMFtzMCsrXSA9IG8wWyRdWzJdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaDA7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geSgpIHsKICAgICAgICB2YXIgaDAsIGQwLCBWMCwgczAsIGswLCAkLCBpMCwgXzA7CiAgICAgICAgZm9yIChpMCA9IDAsIF8wID0gMCwgaDAgPSAwOyBjMCA+IGgwOyBoMCsrKSB7CiAgICAgICAgICBmb3IgKGswID0gbzBbaDBdLCBWMCA9IGgwLCBzMCA9IGswWzFdLCBkMCA9IGgwICsgMTsgYzAgPiBkMDsgZDArKykKICAgICAgICAgICAgJCA9IG8wW2QwXSwgJFsxXSA8IHMwICYmIChWMCA9IGQwLCBzMCA9ICRbMV0pOwogICAgICAgICAgaWYgKCQgPSBvMFtWMF0sIGgwICE9IFYwICYmIChkMCA9ICRbMF0sICRbMF0gPSBrMFswXSwgazBbMF0gPSBkMCwgZDAgPSAkWzFdLCAkWzFdID0gazBbMV0sIGswWzFdID0gZDAsIGQwID0gJFsyXSwgJFsyXSA9IGswWzJdLCBrMFsyXSA9IGQwLCBkMCA9ICRbM10sICRbM10gPSBrMFszXSwgazBbM10gPSBkMCksIHMwICE9IGkwKSB7CiAgICAgICAgICAgIGZvciAoSHJbaTBdID0gXzAgKyBoMCA+PiAxLCBkMCA9IGkwICsgMTsgczAgPiBkMDsgZDArKykKICAgICAgICAgICAgICBIcltkMF0gPSBoMDsKICAgICAgICAgICAgaTAgPSBzMCwgXzAgPSBoMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChIcltpMF0gPSBfMCArIFcwID4+IDEsIGQwID0gaTAgKyAxOyAyNTYgPiBkMDsgZDArKykKICAgICAgICAgIEhyW2QwXSA9IFcwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEYoKSB7CiAgICAgICAgdmFyIGgwLCBkMCwgVjAsIHMwLCBrMCwgJCwgaTAsIF8wLCB4MCwgajAsIF9yLCBUMCwgdXIsIEtBOwogICAgICAgIGZvciAoTzAgPiBlMCAmJiAocSA9IDEpLCBhMCA9IDMwICsgKHEgLSAxKSAvIDMsIFQwID0gYjAsIHVyID0gMCwgS0EgPSBlMCwgX3IgPSBlMCAvICgzICogcSksIGowID0gX3IgLyBRMCB8IDAsIF8wID0gTjIsICQgPSBzciwgaTAgPSAkID4+IFdyLCAxID49IGkwICYmIChpMCA9IDApLCBoMCA9IDA7IGkwID4gaDA7IGgwKyspCiAgICAgICAgICB0MltoMF0gPSBfMCAqICgoaTAgKiBpMCAtIGgwICogaDApICogVDIgLyAoaTAgKiBpMCkpOwogICAgICAgIGZvciAoeDAgPSBPMCA+IGUwID8gMyA6IGUwICUgUzAgIT09IDAgPyAzICogUzAgOiBlMCAlIHYwICE9PSAwID8gMyAqIHYwIDogZTAgJSBJMCAhPT0gMCA/IDMgKiBJMCA6IDMgKiBDMCwgaDAgPSAwOyBfciA+IGgwOyApCiAgICAgICAgICBpZiAoVjAgPSAoMjU1ICYgVDBbdXIgKyAwXSkgPDwgTjAsIHMwID0gKDI1NSAmIFQwW3VyICsgMV0pIDw8IE4wLCBrMCA9ICgyNTUgJiBUMFt1ciArIDJdKSA8PCBOMCwgZDAgPSBqKFYwLCBzMCwgazApLCB6KF8wLCBkMCwgVjAsIHMwLCBrMCksIGkwICE9PSAwICYmIFYoaTAsIGQwLCBWMCwgczAsIGswKSwgdXIgKz0geDAsIHVyID49IEtBICYmICh1ciAtPSBlMCksIGgwKyssIGowID09PSAwICYmIChqMCA9IDEpLCBoMCAlIGowID09PSAwKQogICAgICAgICAgICBmb3IgKF8wIC09IF8wIC8gYTAsICQgLT0gJCAvIGdhLCBpMCA9ICQgPj4gV3IsIDEgPj0gaTAgJiYgKGkwID0gMCksIGQwID0gMDsgaTAgPiBkMDsgZDArKykKICAgICAgICAgICAgICB0MltkMF0gPSBfMCAqICgoaTAgKiBpMCAtIGQwICogZDApICogVDIgLyAoaTAgKiBpMCkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIFIoaDAsIGQwLCBWMCkgewogICAgICAgIHZhciBzMCwgazAsICQsIGkwLCBfMCwgeDAsIGowOwogICAgICAgIGZvciAoXzAgPSAxZTMsIGowID0gLTEsIHMwID0gSHJbZDBdLCBrMCA9IHMwIC0gMTsgYzAgPiBzMCB8fCBrMCA+PSAwOyApCiAgICAgICAgICBjMCA+IHMwICYmICh4MCA9IG8wW3MwXSwgJCA9IHgwWzFdIC0gZDAsICQgPj0gXzAgPyBzMCA9IGMwIDogKHMwKyssIDAgPiAkICYmICgkID0gLSQpLCBpMCA9IHgwWzBdIC0gaDAsIDAgPiBpMCAmJiAoaTAgPSAtaTApLCAkICs9IGkwLCBfMCA+ICQgJiYgKGkwID0geDBbMl0gLSBWMCwgMCA+IGkwICYmIChpMCA9IC1pMCksICQgKz0gaTAsIF8wID4gJCAmJiAoXzAgPSAkLCBqMCA9IHgwWzNdKSkpKSwgazAgPj0gMCAmJiAoeDAgPSBvMFtrMF0sICQgPSBkMCAtIHgwWzFdLCAkID49IF8wID8gazAgPSAtMSA6IChrMC0tLCAwID4gJCAmJiAoJCA9IC0kKSwgaTAgPSB4MFswXSAtIGgwLCAwID4gaTAgJiYgKGkwID0gLWkwKSwgJCArPSBpMCwgXzAgPiAkICYmIChpMCA9IHgwWzJdIC0gVjAsIDAgPiBpMCAmJiAoaTAgPSAtaTApLCAkICs9IGkwLCBfMCA+ICQgJiYgKF8wID0gJCwgajAgPSB4MFszXSkpKSk7CiAgICAgICAgcmV0dXJuIGowOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIE0oKSB7CiAgICAgICAgcmV0dXJuIEYoKSwgSSgpLCB5KCksIFooKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBJKCkgewogICAgICAgIHZhciBoMDsKICAgICAgICBmb3IgKGgwID0gMDsgYzAgPiBoMDsgaDArKykKICAgICAgICAgIG8wW2gwXVswXSA+Pj0gTjAsIG8wW2gwXVsxXSA+Pj0gTjAsIG8wW2gwXVsyXSA+Pj0gTjAsIG8wW2gwXVszXSA9IGgwOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIFYoaDAsIGQwLCBWMCwgczAsIGswKSB7CiAgICAgICAgdmFyICQsIGkwLCBfMCwgeDAsIGowLCBfciwgVDA7CiAgICAgICAgZm9yIChfMCA9IGQwIC0gaDAsIC0xID4gXzAgJiYgKF8wID0gLTEpLCB4MCA9IGQwICsgaDAsIHgwID4gYzAgJiYgKHgwID0gYzApLCAkID0gZDAgKyAxLCBpMCA9IGQwIC0gMSwgX3IgPSAxOyB4MCA+ICQgfHwgaTAgPiBfMDsgKSB7CiAgICAgICAgICBpZiAoajAgPSB0MltfcisrXSwgeDAgPiAkKSB7CiAgICAgICAgICAgIFQwID0gbzBbJCsrXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBUMFswXSAtPSBqMCAqIChUMFswXSAtIFYwKSAvIFRyIHwgMCwgVDBbMV0gLT0gajAgKiAoVDBbMV0gLSBzMCkgLyBUciB8IDAsIFQwWzJdIC09IGowICogKFQwWzJdIC0gazApIC8gVHIgfCAwOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGkwID4gXzApIHsKICAgICAgICAgICAgVDAgPSBvMFtpMC0tXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBUMFswXSAtPSBqMCAqIChUMFswXSAtIFYwKSAvIFRyIHwgMCwgVDBbMV0gLT0gajAgKiAoVDBbMV0gLSBzMCkgLyBUciB8IDAsIFQwWzJdIC09IGowICogKFQwWzJdIC0gazApIC8gVHIgfCAwOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiB6KGgwLCBkMCwgVjAsIHMwLCBrMCkgewogICAgICAgIHZhciAkID0gbzBbZDBdLCBpMCA9IGgwIC8gTjI7CiAgICAgICAgJFswXSAtPSBpMCAqICgkWzBdIC0gVjApIHwgMCwgJFsxXSAtPSBpMCAqICgkWzFdIC0gczApIHwgMCwgJFsyXSAtPSBpMCAqICgkWzJdIC0gazApIHwgMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBqKGgwLCBkMCwgVjApIHsKICAgICAgICB2YXIgczAsIGswLCAkLCBpMCwgXzAsIHgwLCBqMCwgX3IsIFQwLCB1cjsKICAgICAgICBmb3IgKF9yID0gMjE0NzQ4MzY0NywgVDAgPSBfciwgeDAgPSAtMSwgajAgPSB4MCwgczAgPSAwOyBjMCA+IHMwOyBzMCsrKQogICAgICAgICAgdXIgPSBvMFtzMF0sIGswID0gdXJbMF0gLSBoMCwgMCA+IGswICYmIChrMCA9IC1rMCksICQgPSB1clsxXSAtIGQwLCAwID4gJCAmJiAoJCA9IC0kKSwgazAgKz0gJCwgJCA9IHVyWzJdIC0gVjAsIDAgPiAkICYmICgkID0gLSQpLCBrMCArPSAkLCBfciA+IGswICYmIChfciA9IGswLCB4MCA9IHMwKSwgaTAgPSBrMCAtIChpYVtzMF0gPj4gVTAgLSBOMCksIFQwID4gaTAgJiYgKFQwID0gaTAsIGowID0gczApLCBfMCA9IG5hW3MwXSA+PiBBciwgbmFbczBdIC09IF8wLCBpYVtzMF0gKz0gXzAgPDwgSjA7CiAgICAgICAgcmV0dXJuIG5hW3gwXSArPSBMMCwgaWFbeDBdIC09IGNyLCBqMDsKICAgICAgfQogICAgICB2YXIgYTAsIGIwLCBlMCwgcSwgbzAsIGMwID0gMjU2LCBTMCA9IDQ5OSwgdjAgPSA0OTEsIEkwID0gNDg3LCBDMCA9IDUwMywgTzAgPSAzICogQzAsIFcwID0gYzAgLSAxLCBOMCA9IDQsIFEwID0gMTAwLCBVMCA9IDE2LCBQMCA9IDEgPDwgVTAsIEowID0gMTAsIEFyID0gMTAsIEwwID0gUDAgPj4gQXIsIGNyID0gUDAgPDwgSjAgLSBBciwgeXIgPSBjMCA+PiAzLCBXciA9IDYsIE1yID0gMSA8PCBXciwgc3IgPSB5ciAqIE1yLCBnYSA9IDMwLCBBMiA9IDEwLCBOMiA9IDEgPDwgQTIsIE0yID0gOCwgVDIgPSAxIDw8IE0yLCBEZSA9IEEyICsgTTIsIFRyID0gMSA8PCBEZSwgSHIgPSBbXSwgaWEgPSBbXSwgbmEgPSBbXSwgdDIgPSBbXTsKICAgICAgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB2YXIgbWEgPSB7fTsKICAgICAgcmV0dXJuIG1hLm1hcCA9IFIsIG1hLnByb2Nlc3MgPSBNLCBtYTsKICAgIH0KICAgIGZ1bmN0aW9uIHMoKSB7CiAgICAgIHZhciBiID0gdGhpczsKICAgICAgdHJ5IHsKICAgICAgICBiLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKHkpIHsKICAgICAgICAgIHZhciBGLCBSID0geS5kYXRhIHx8IHt9OwogICAgICAgICAgUi5naWZzaG90ICYmIChGID0gWi5ydW4oUiksIHBvc3RNZXNzYWdlKEYpKTsKICAgICAgICB9OwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICB2YXIgWiA9IHsgZGF0YVRvUkdCOiBmdW5jdGlvbih5LCBGLCBSKSB7CiAgICAgICAgZm9yICh2YXIgTSA9IEYgKiBSICogNCwgSSA9IDAsIFYgPSBbXTsgTSA+IEk7ICkKICAgICAgICAgIFYucHVzaCh5W0krK10pLCBWLnB1c2goeVtJKytdKSwgVi5wdXNoKHlbSSsrXSksIEkrKzsKICAgICAgICByZXR1cm4gVjsKICAgICAgfSwgY29tcG9uZW50aXplZFBhbGV0dGVUb0FycmF5OiBmdW5jdGlvbih5KSB7CiAgICAgICAgeSA9IHkgfHwgW107CiAgICAgICAgZm9yICh2YXIgRiA9IFtdLCBSID0gMDsgUiA8IHkubGVuZ3RoOyBSICs9IDMpIHsKICAgICAgICAgIHZhciBNID0geVtSXSwgSSA9IHlbUiArIDFdLCBWID0geVtSICsgMl07CiAgICAgICAgICBGLnB1c2goTSA8PCAxNiB8IEkgPDwgOCB8IFYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRjsKICAgICAgfSwgcHJvY2Vzc0ZyYW1lV2l0aFF1YW50aXplcjogZnVuY3Rpb24oeSwgRiwgUiwgTSkgewogICAgICAgIGZvciAodmFyIEkgPSB0aGlzLmRhdGFUb1JHQih5LCBGLCBSKSwgViA9IG5ldyBsKEksIEkubGVuZ3RoLCBNKSwgeiA9IFYucHJvY2VzcygpLCBqID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuY29tcG9uZW50aXplZFBhbGV0dGVUb0FycmF5KHopKSwgYTAgPSBGICogUiwgYjAgPSBuZXcgVWludDhBcnJheShhMCksIGUwID0gMCwgcSA9IDA7IGEwID4gcTsgcSsrKSB7CiAgICAgICAgICB2YXIgbzAgPSBJW2UwKytdLCBjMCA9IElbZTArK10sIFMwID0gSVtlMCsrXTsKICAgICAgICAgIGIwW3FdID0gVi5tYXAobzAsIGMwLCBTMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHBpeGVsczogYjAsIHBhbGV0dGU6IGogfTsKICAgICAgfSwgcnVuOiBmdW5jdGlvbih5KSB7CiAgICAgICAgeSA9IHkgfHwge307CiAgICAgICAgdmFyIEYgPSB5LCBSID0gRi5oZWlnaHQsIE0gPSAoRi5wYWxldHRlLCBGLnNhbXBsZUludGVydmFsKSwgSSA9IEYud2lkdGgsIFYgPSB5LmRhdGE7CiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZyYW1lV2l0aFF1YW50aXplcihWLCBJLCBSLCBNKTsKICAgICAgfSB9OwogICAgICByZXR1cm4gWjsKICAgIH0KICAgIGZ1bmN0aW9uIGMoYiwgWiwgeSwgRikgewogICAgICBmdW5jdGlvbiBSKGUwKSB7CiAgICAgICAgdmFyIHEgPSBlMC5sZW5ndGg7CiAgICAgICAgaWYgKDIgPiBxIHx8IHEgPiAyNTYgfHwgcSAmIHEgLSAxKQogICAgICAgICAgdGhyb3cgIkludmFsaWQgY29kZS9jb2xvciBsZW5ndGgsIG11c3QgYmUgcG93ZXIgb2YgMiBhbmQgMiAuLiAyNTYuIjsKICAgICAgICByZXR1cm4gcTsKICAgICAgfQogICAgICBmdW5jdGlvbiBNKGUwLCBxLCBvMCwgYzApIHsKICAgICAgICBmdW5jdGlvbiBTMChzcikgewogICAgICAgICAgZm9yICg7IFUwID49IHNyOyApCiAgICAgICAgICAgIGUwW3ErK10gPSAyNTUgJiBQMCwgUDAgPj49IDgsIFUwIC09IDgsIHEgPT09IEkwICsgMjU2ICYmIChlMFtJMF0gPSAyNTUsIEkwID0gcSsrKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gdjAoc3IpIHsKICAgICAgICAgIFAwIHw9IHNyIDw8IFUwLCBVMCArPSBRMCwgUzAoOCk7CiAgICAgICAgfQogICAgICAgIGUwW3ErK10gPSBvMDsKICAgICAgICB2YXIgSTAgPSBxKyssIEMwID0gMSA8PCBvMCwgTzAgPSBDMCAtIDEsIFcwID0gQzAgKyAxLCBOMCA9IFcwICsgMSwgUTAgPSBvMCArIDEsIFUwID0gMCwgUDAgPSAwLCBKMCA9IGMwWzBdICYgTzAsIEFyID0ge307CiAgICAgICAgdjAoQzApOwogICAgICAgIGZvciAodmFyIEwwID0gMSwgY3IgPSBjMC5sZW5ndGg7IGNyID4gTDA7ICsrTDApIHsKICAgICAgICAgIHZhciB5ciA9IGMwW0wwXSAmIE8wLCBXciA9IEowIDw8IDggfCB5ciwgTXIgPSBBcltXcl07CiAgICAgICAgICBpZiAoTXIgPT09IGkpIHsKICAgICAgICAgICAgZm9yIChQMCB8PSBKMCA8PCBVMCwgVTAgKz0gUTA7IFUwID49IDg7ICkKICAgICAgICAgICAgICBlMFtxKytdID0gMjU1ICYgUDAsIFAwID4+PSA4LCBVMCAtPSA4LCBxID09PSBJMCArIDI1NiAmJiAoZTBbSTBdID0gMjU1LCBJMCA9IHErKyk7CiAgICAgICAgICAgIE4wID09PSA0MDk2ID8gKHYwKEMwKSwgTjAgPSBXMCArIDEsIFEwID0gbzAgKyAxLCBBciA9IHt9KSA6IChOMCA+PSAxIDw8IFEwICYmICsrUTAsIEFyW1dyXSA9IE4wKyspLCBKMCA9IHlyOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIEowID0gTXI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2MChKMCksIHYwKFcwKSwgUzAoMSksIEkwICsgMSA9PT0gcSA/IGUwW0kwXSA9IDAgOiAoZTBbSTBdID0gcSAtIEkwIC0gMSwgZTBbcSsrXSA9IDApLCBxOwogICAgICB9CiAgICAgIHZhciBJID0gMDsKICAgICAgRiA9IEYgPT09IGkgPyB7fSA6IEY7CiAgICAgIHZhciBWID0gRi5sb29wID09PSBpID8gbnVsbCA6IEYubG9vcCwgeiA9IEYucGFsZXR0ZSA9PT0gaSA/IG51bGwgOiBGLnBhbGV0dGU7CiAgICAgIGlmICgwID49IFogfHwgMCA+PSB5IHx8IFogPiA2NTUzNSB8fCB5ID4gNjU1MzUpCiAgICAgICAgdGhyb3cgIldpZHRoL0hlaWdodCBpbnZhbGlkLiI7CiAgICAgIGJbSSsrXSA9IDcxLCBiW0krK10gPSA3MywgYltJKytdID0gNzAsIGJbSSsrXSA9IDU2LCBiW0krK10gPSA1NywgYltJKytdID0gOTc7CiAgICAgIHZhciBqID0gMCwgYTAgPSAwOwogICAgICBpZiAoYltJKytdID0gMjU1ICYgWiwgYltJKytdID0gWiA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiB5LCBiW0krK10gPSB5ID4+IDggJiAyNTUsIGJbSSsrXSA9ICh6ICE9PSBudWxsID8gMTI4IDogMCkgfCBqLCBiW0krK10gPSBhMCwgYltJKytdID0gMCwgViAhPT0gbnVsbCkgewogICAgICAgIGlmICgwID4gViB8fCBWID4gNjU1MzUpCiAgICAgICAgICB0aHJvdyAiTG9vcCBjb3VudCBpbnZhbGlkLiI7CiAgICAgICAgYltJKytdID0gMzMsIGJbSSsrXSA9IDI1NSwgYltJKytdID0gMTEsIGJbSSsrXSA9IDc4LCBiW0krK10gPSA2OSwgYltJKytdID0gODQsIGJbSSsrXSA9IDgzLCBiW0krK10gPSA2NywgYltJKytdID0gNjUsIGJbSSsrXSA9IDgwLCBiW0krK10gPSA2OSwgYltJKytdID0gNTAsIGJbSSsrXSA9IDQ2LCBiW0krK10gPSA0OCwgYltJKytdID0gMywgYltJKytdID0gMSwgYltJKytdID0gMjU1ICYgViwgYltJKytdID0gViA+PiA4ICYgMjU1LCBiW0krK10gPSAwOwogICAgICB9CiAgICAgIHZhciBiMCA9ICExOwogICAgICB0aGlzLmFkZEZyYW1lID0gZnVuY3Rpb24oZTAsIHEsIG8wLCBjMCwgUzAsIHYwKSB7CiAgICAgICAgaWYgKGIwID09PSAhMCAmJiAoLS1JLCBiMCA9ICExKSwgdjAgPSB2MCA9PT0gaSA/IHt9IDogdjAsIDAgPiBlMCB8fCAwID4gcSB8fCBlMCA+IDY1NTM1IHx8IHEgPiA2NTUzNSkKICAgICAgICAgIHRocm93ICJ4L3kgaW52YWxpZC4iOwogICAgICAgIGlmICgwID49IG8wIHx8IDAgPj0gYzAgfHwgbzAgPiA2NTUzNSB8fCBjMCA+IDY1NTM1KQogICAgICAgICAgdGhyb3cgIldpZHRoL0hlaWdodCBpbnZhbGlkLiI7CiAgICAgICAgaWYgKFMwLmxlbmd0aCA8IG8wICogYzApCiAgICAgICAgICB0aHJvdyAiTm90IGVub3VnaCBwaXhlbHMgZm9yIHRoZSBmcmFtZSBzaXplLiI7CiAgICAgICAgdmFyIEkwID0gITAsIEMwID0gdjAucGFsZXR0ZTsKICAgICAgICBpZiAoKEMwID09PSBpIHx8IEMwID09PSBudWxsKSAmJiAoSTAgPSAhMSwgQzAgPSB6KSwgQzAgPT09IGkgfHwgQzAgPT09IG51bGwpCiAgICAgICAgICB0aHJvdyAiTXVzdCBzdXBwbHkgZWl0aGVyIGEgbG9jYWwgb3IgZ2xvYmFsIHBhbGV0dGUuIjsKICAgICAgICBmb3IgKHZhciBPMCA9IFIoQzApLCBXMCA9IDA7IE8wID4+PSAxOyApCiAgICAgICAgICArK1cwOwogICAgICAgIE8wID0gMSA8PCBXMDsKICAgICAgICB2YXIgTjAgPSB2MC5kZWxheSA9PT0gaSA/IDAgOiB2MC5kZWxheSwgUTAgPSB2MC5kaXNwb3NhbCA9PT0gaSA/IDAgOiB2MC5kaXNwb3NhbDsKICAgICAgICBpZiAoMCA+IFEwIHx8IFEwID4gMykKICAgICAgICAgIHRocm93ICJEaXNwb3NhbCBvdXQgb2YgcmFuZ2UuIjsKICAgICAgICB2YXIgVTAgPSAhMSwgUDAgPSAwOwogICAgICAgIGlmICh2MC50cmFuc3BhcmVudCAhPT0gaSAmJiB2MC50cmFuc3BhcmVudCAhPT0gbnVsbCAmJiAoVTAgPSAhMCwgUDAgPSB2MC50cmFuc3BhcmVudCwgMCA+IFAwIHx8IFAwID49IE8wKSkKICAgICAgICAgIHRocm93ICJUcmFuc3BhcmVudCBjb2xvciBpbmRleC4iOwogICAgICAgIGlmICgoUTAgIT09IDAgfHwgVTAgfHwgTjAgIT09IDApICYmIChiW0krK10gPSAzMywgYltJKytdID0gMjQ5LCBiW0krK10gPSA0LCBiW0krK10gPSBRMCA8PCAyIHwgKFUwID09PSAhMCA/IDEgOiAwKSwgYltJKytdID0gMjU1ICYgTjAsIGJbSSsrXSA9IE4wID4+IDggJiAyNTUsIGJbSSsrXSA9IFAwLCBiW0krK10gPSAwKSwgYltJKytdID0gNDQsIGJbSSsrXSA9IDI1NSAmIGUwLCBiW0krK10gPSBlMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBxLCBiW0krK10gPSBxID4+IDggJiAyNTUsIGJbSSsrXSA9IDI1NSAmIG8wLCBiW0krK10gPSBvMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBjMCwgYltJKytdID0gYzAgPj4gOCAmIDI1NSwgYltJKytdID0gSTAgPT09ICEwID8gMTI4IHwgVzAgLSAxIDogMCwgSTAgPT09ICEwKQogICAgICAgICAgZm9yICh2YXIgSjAgPSAwLCBBciA9IEMwLmxlbmd0aDsgQXIgPiBKMDsgKytKMCkgewogICAgICAgICAgICB2YXIgTDAgPSBDMFtKMF07CiAgICAgICAgICAgIGJbSSsrXSA9IEwwID4+IDE2ICYgMjU1LCBiW0krK10gPSBMMCA+PiA4ICYgMjU1LCBiW0krK10gPSAyNTUgJiBMMDsKICAgICAgICAgIH0KICAgICAgICBJID0gTShiLCBJLCAyID4gVzAgPyAyIDogVzAsIFMwKTsKICAgICAgfSwgdGhpcy5lbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gYjAgPT09ICExICYmIChiW0krK10gPSA1OSwgYjAgPSAhMCksIEk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBkKGIsIFopIHsKICAgICAgYi5nZXRCYXNlNjRHSUYoZnVuY3Rpb24oeSkgewogICAgICAgIFooeyBlcnJvcjogITEsIGVycm9yQ29kZTogIiIsIGVycm9yTXNnOiAiIiwgaW1hZ2U6IHkgfSk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gdigpIHsKICAgICAgZnVuY3Rpb24gYigpIHsKICAgICAgICBwLmVhY2goeiwgZnVuY3Rpb24oZTAsIHEpIHsKICAgICAgICAgIHEgJiYgKHEudGV4dCA/IGIwLmFkZEZyYW1lKHEuaW1nLCBSLCBxLnRleHQpIDogYjAuYWRkRnJhbWUocSwgUikpOwogICAgICAgIH0pLCBkKGIwLCB5KTsKICAgICAgfQogICAgICB2YXIgWiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCB5ID0gWi5jYWxsYmFjaywgRiA9IFouaW1hZ2VzLCBSID0gWi5vcHRpb25zLCBNID0gWi5pbWFnZXNMZW5ndGgsIEkgPSB7IGdldFVzZXJNZWRpYTogITAsICJ3aW5kb3cuVVJMIjogITAgfSwgViA9IEMudmFsaWRhdGUoSSksIHogPSBbXSwgaiA9IDAsIGEwID0gdm9pZCAwLCBiMCA9IHZvaWQgMDsKICAgICAgcmV0dXJuIFYuZXJyb3IgPyB5KFYpIDogKGIwID0gbmV3IEcoUiksIHAuZWFjaChGLCBmdW5jdGlvbihlMCwgcSkgewogICAgICAgIHZhciBvMCA9IHE7CiAgICAgICAgcS5zcmMgJiYgKG8wID0gbzAuc3JjKSwgcC5pc0VsZW1lbnQobzApID8gKFIuY3Jvc3NPcmlnaW4gJiYgKG8wLmNyb3NzT3JpZ2luID0gUi5jcm9zc09yaWdpbiksIHpbZTBdID0gbzAsIGogKz0gMSwgaiA9PT0gTSAmJiBiKCkpIDogcC5pc1N0cmluZyhvMCkgJiYgKGEwID0gbmV3IEltYWdlKCksIFIuY3Jvc3NPcmlnaW4gJiYgKGEwLmNyb3NzT3JpZ2luID0gUi5jcm9zc09yaWdpbiksIGZ1bmN0aW9uKGMwKSB7CiAgICAgICAgICBxLnRleHQgJiYgKGMwLnRleHQgPSBxLnRleHQpLCBjMC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBTMCA9IHZvaWQgMDsKICAgICAgICAgICAgcmV0dXJuIC0tTSwgTSA9PT0gMCA/IChTMCA9IHt9LCBTMC5lcnJvciA9ICJOb25lIG9mIHRoZSByZXF1ZXN0ZWQgaW1hZ2VzIHdhcyBjYXBhYmxlIG9mIGJlaW5nIHJldHJpZXZlZCIsIHkoUzApKSA6IHZvaWQgMDsKICAgICAgICAgIH0sIGMwLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB6W2UwXSA9IHEudGV4dCA/IHsgaW1nOiBjMCwgdGV4dDogYzAudGV4dCB9IDogYzAsIGogKz0gMSwgaiA9PT0gTSAmJiBiKCksIHAucmVtb3ZlRWxlbWVudChjMCk7CiAgICAgICAgICB9LCBjMC5zcmMgPSBvMDsKICAgICAgICB9KGEwKSwgcC5zZXRDU1NBdHRyKGEwLCB7IHBvc2l0aW9uOiAiZml4ZWQiLCBvcGFjaXR5OiAiMCIgfSksIEEuYm9keS5hcHBlbmRDaGlsZChhMCkpOwogICAgICB9KSwgdm9pZCAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGsoYikgewogICAgICBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fSwgWC5zdG9wVmlkZW9TdHJlYW1pbmcoYik7CiAgICB9CiAgICBmdW5jdGlvbiBFKGIsIFopIHsKICAgICAgdmFyIHkgPSBiLm9wdGlvbnMgfHwge30sIEYgPSB5LmltYWdlcywgUiA9IHkudmlkZW8sIE0gPSBOdW1iZXIoeS5naWZXaWR0aCksIEkgPSBOdW1iZXIoeS5naWZIZWlnaHQpLCBWID0gKE51bWJlcih5Lm51bUZyYW1lcyksIGIuY2FtZXJhU3RyZWFtKSwgeiA9IGIudmlkZW9FbGVtZW50LCBqID0gYi52aWRlb1dpZHRoLCBhMCA9IGIudmlkZW9IZWlnaHQsIGIwID0gSy5nZXRDcm9wRGltZW5zaW9ucyh7IHZpZGVvV2lkdGg6IGosIHZpZGVvSGVpZ2h0OiBhMCwgZ2lmSGVpZ2h0OiBJLCBnaWZXaWR0aDogTSB9KSwgZTAgPSBaOwogICAgICB5LmNyb3AgPSBiMCwgeS52aWRlb0VsZW1lbnQgPSB6LCB5LnZpZGVvV2lkdGggPSBqLCB5LnZpZGVvSGVpZ2h0ID0gYTAsIHkuY2FtZXJhU3RyZWFtID0gViwgcC5pc0VsZW1lbnQoeikgJiYgKHoud2lkdGggPSBNICsgYjAud2lkdGgsIHouaGVpZ2h0ID0gSSArIGIwLmhlaWdodCwgeS53ZWJjYW1WaWRlb0VsZW1lbnQgfHwgKHAuc2V0Q1NTQXR0cih6LCB7IHBvc2l0aW9uOiAiZml4ZWQiLCBvcGFjaXR5OiAiMCIgfSksIEEuYm9keS5hcHBlbmRDaGlsZCh6KSksIHoucGxheSgpLCBLLmdldEdJRih5LCBmdW5jdGlvbihxKSB7CiAgICAgICAgRiAmJiBGLmxlbmd0aCB8fCBSICYmIFIubGVuZ3RoIHx8IGsocSksIGUwKHEpOwogICAgICB9KSk7CiAgICB9CiAgICBmdW5jdGlvbiBnKCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYi5jYWxsYmFjaywgeSA9IGIuZXhpc3RpbmdWaWRlbywgRiA9IGIub3B0aW9ucywgUiA9IHsgZ2V0VXNlck1lZGlhOiAhMCwgIndpbmRvdy5VUkwiOiAhMCB9LCBNID0gQy52YWxpZGF0ZShSKSwgSSA9IHZvaWQgMCwgViA9IHZvaWQgMDsKICAgICAgaWYgKE0uZXJyb3IpCiAgICAgICAgcmV0dXJuIFooTSk7CiAgICAgIGlmIChwLmlzRWxlbWVudCh5KSAmJiB5LnNyYykgewogICAgICAgIGlmIChWID0geS5zcmMsIEkgPSBwLmdldEV4dGVuc2lvbihWKSwgIXAuaXNTdXBwb3J0ZWQudmlkZW9Db2RlY3NbSV0pCiAgICAgICAgICByZXR1cm4gWihDLm1lc3NhZ2VzLnZpZGVvQ29kZWNzKTsKICAgICAgfSBlbHNlCiAgICAgICAgcC5pc0FycmF5KHkpICYmIHAuZWFjaCh5LCBmdW5jdGlvbih6LCBqKSB7CiAgICAgICAgICByZXR1cm4gSSA9IGogaW5zdGFuY2VvZiBCbG9iID8gai50eXBlLnN1YnN0cihqLnR5cGUubGFzdEluZGV4T2YoIi8iKSArIDEsIGoubGVuZ3RoKSA6IGouc3Vic3RyKGoubGFzdEluZGV4T2YoIi4iKSArIDEsIGoubGVuZ3RoKSwgcC5pc1N1cHBvcnRlZC52aWRlb0NvZGVjc1tJXSA/ICh5ID0gaiwgITEpIDogdm9pZCAwOwogICAgICAgIH0pOwogICAgICBYLnN0YXJ0U3RyZWFtaW5nKHsgY29tcGxldGVkOiBmdW5jdGlvbih6KSB7CiAgICAgICAgei5vcHRpb25zID0gRiB8fCB7fSwgRSh6LCBaKTsKICAgICAgfSwgZXhpc3RpbmdWaWRlbzogeSwgY3Jvc3NPcmlnaW46IEYuY3Jvc3NPcmlnaW4sIG9wdGlvbnM6IEYgfSk7CiAgICB9CiAgICBmdW5jdGlvbiB3KCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYi5jYWxsYmFjaywgeSA9IGIubGFzdENhbWVyYVN0cmVhbSwgRiA9IGIub3B0aW9ucywgUiA9IGIud2ViY2FtVmlkZW9FbGVtZW50OwogICAgICByZXR1cm4gZigpID8gRi5zYXZlZFJlbmRlcmluZ0NvbnRleHRzLmxlbmd0aCA/IChLLmdldEdJRihGLCBmdW5jdGlvbihNKSB7CiAgICAgICAgWihNKTsKICAgICAgfSksIHZvaWQgMCkgOiAoWC5zdGFydFZpZGVvU3RyZWFtaW5nKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBNID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgTS5vcHRpb25zID0gRiB8fCB7fSwgRShNLCBaKTsKICAgICAgfSwgeyBsYXN0Q2FtZXJhU3RyZWFtOiB5LCBjYWxsYmFjazogWiwgd2ViY2FtVmlkZW9FbGVtZW50OiBSLCBjcm9zc09yaWdpbjogRi5jcm9zc09yaWdpbiB9KSwgdm9pZCAwKSA6IFooQy52YWxpZGF0ZSgpKTsKICAgIH0KICAgIGZ1bmN0aW9uIEIoYiwgWikgewogICAgICBpZiAoWiA9IHAuaXNGdW5jdGlvbihiKSA/IGIgOiBaLCBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fSwgcC5pc0Z1bmN0aW9uKFopKSB7CiAgICAgICAgdmFyIHkgPSBwLm1lcmdlT3B0aW9ucyhELCBiKSB8fCB7fSwgRiA9IGIuY2FtZXJhU3RyZWFtLCBSID0geS5pbWFnZXMsIE0gPSBSID8gUi5sZW5ndGggOiAwLCBJID0geS52aWRlbywgViA9IHkud2ViY2FtVmlkZW9FbGVtZW50OwogICAgICAgIHkgPSBwLm1lcmdlT3B0aW9ucyh5LCB7IGdpZldpZHRoOiBNYXRoLmZsb29yKHkuZ2lmV2lkdGgpLCBnaWZIZWlnaHQ6IE1hdGguZmxvb3IoeS5naWZIZWlnaHQpIH0pLCBNID8gdih7IGltYWdlczogUiwgaW1hZ2VzTGVuZ3RoOiBNLCBjYWxsYmFjazogWiwgb3B0aW9uczogeSB9KSA6IEkgPyBnKHsgZXhpc3RpbmdWaWRlbzogSSwgY2FsbGJhY2s6IFosIG9wdGlvbnM6IHkgfSkgOiB3KHsgbGFzdENhbWVyYVN0cmVhbTogRiwgY2FsbGJhY2s6IFosIHdlYmNhbVZpZGVvRWxlbWVudDogViwgb3B0aW9uczogeSB9KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbShiLCBaKSB7CiAgICAgIGlmIChaID0gcC5pc0Z1bmN0aW9uKGIpID8gYiA6IFosIGIgPSBwLmlzT2JqZWN0KGIpID8gYiA6IHt9LCBwLmlzRnVuY3Rpb24oWikpIHsKICAgICAgICB2YXIgeSA9IHAubWVyZ2VPcHRpb25zKEQsIGIpLCBGID0gcC5tZXJnZU9wdGlvbnMoeSwgeyBpbnRlcnZhbDogMC4xLCBudW1GcmFtZXM6IDEsIGdpZldpZHRoOiBNYXRoLmZsb29yKHkuZ2lmV2lkdGgpLCBnaWZIZWlnaHQ6IE1hdGguZmxvb3IoeS5naWZIZWlnaHQpIH0pOwogICAgICAgIEIoRiwgWik7CiAgICAgIH0KICAgIH0KICAgIHZhciBwID0geyBVUkw6IGEuVVJMIHx8IGEud2Via2l0VVJMIHx8IGEubW96VVJMIHx8IGEubXNVUkwsIGdldFVzZXJNZWRpYTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gdC5nZXRVc2VyTWVkaWEgfHwgdC53ZWJraXRHZXRVc2VyTWVkaWEgfHwgdC5tb3pHZXRVc2VyTWVkaWEgfHwgdC5tc0dldFVzZXJNZWRpYTsKICAgICAgcmV0dXJuIGIgJiYgYi5iaW5kKHQpOwogICAgfSgpLCByZXF1ZXN0QW5pbUZyYW1lOiBhLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBhLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgYS5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgcmVxdWVzdFRpbWVvdXQ6IGZ1bmN0aW9uKGIsIFopIHsKICAgICAgaWYgKGIgPSBiIHx8IHAubm9vcCwgWiA9IFogfHwgMCwgIXAucmVxdWVzdEFuaW1GcmFtZSkKICAgICAgICByZXR1cm4gc2V0VGltZW91dChiLCBaKTsKICAgICAgdmFyIHkgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgRiA9IG5ldyBPYmplY3QoKSwgUiA9IHAucmVxdWVzdEFuaW1GcmFtZSwgTSA9IGZ1bmN0aW9uIEkoKSB7CiAgICAgICAgdmFyIFYgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgeiA9IFYgLSB5OwogICAgICAgIHogPj0gWiA/IGIuY2FsbCgpIDogRi52YWx1ZSA9IFIoSSk7CiAgICAgIH07CiAgICAgIHJldHVybiBGLnZhbHVlID0gUihNKSwgRjsKICAgIH0sIEJsb2I6IGEuQmxvYiB8fCBhLkJsb2JCdWlsZGVyIHx8IGEuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgYS5Nb3pCbG9iQnVpbGRlciB8fCBhLk1TQmxvYkJ1aWxkZXIsIGJ0b2E6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IGEuYnRvYSB8fCBmdW5jdGlvbihaKSB7CiAgICAgICAgZm9yICh2YXIgeSA9ICIiLCBGID0gMCwgUiA9IFoubGVuZ3RoLCBNID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IiwgSSA9IHZvaWQgMCwgViA9IHZvaWQgMCwgeiA9IHZvaWQgMCwgaiA9IHZvaWQgMCwgYTAgPSB2b2lkIDAsIGIwID0gdm9pZCAwLCBlMCA9IHZvaWQgMDsgUiA+IEY7ICkKICAgICAgICAgIEkgPSBaLmNoYXJDb2RlQXQoRisrKSwgViA9IFouY2hhckNvZGVBdChGKyspLCB6ID0gWi5jaGFyQ29kZUF0KEYrKyksIGogPSBJID4+IDIsIGEwID0gKDMgJiBJKSA8PCA0IHwgViA+PiA0LCBiMCA9ICgxNSAmIFYpIDw8IDIgfCB6ID4+IDYsIGUwID0gNjMgJiB6LCBpc05hTihWKSA/IGIwID0gZTAgPSA2NCA6IGlzTmFOKHopICYmIChlMCA9IDY0KSwgeSA9IHkgKyBNLmNoYXJBdChqKSArIE0uY2hhckF0KGEwKSArIE0uY2hhckF0KGIwKSArIE0uY2hhckF0KGUwKTsKICAgICAgICByZXR1cm4geTsKICAgICAgfTsKICAgICAgcmV0dXJuIGIgPyBiLmJpbmQoYSkgOiBwLm5vb3A7CiAgICB9KCksIGlzT2JqZWN0OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKSA9PT0gIltvYmplY3QgT2JqZWN0XSI7CiAgICB9LCBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBwLmlzT2JqZWN0KGIpICYmICFPYmplY3Qua2V5cyhiKS5sZW5ndGg7CiAgICB9LCBpc0FycmF5OiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIEFycmF5LmlzQXJyYXkoYik7CiAgICB9LCBpc0Z1bmN0aW9uOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiICYmIHR5cGVvZiBiID09ICJmdW5jdGlvbiI7CiAgICB9LCBpc0VsZW1lbnQ6IGZ1bmN0aW9uKGIpIHsKICAgICAgcmV0dXJuIGIgJiYgYi5ub2RlVHlwZSA9PT0gMTsKICAgIH0sIGlzU3RyaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiB0eXBlb2YgYiA9PSAic3RyaW5nIiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYikgPT09ICJbb2JqZWN0IFN0cmluZ10iOwogICAgfSwgaXNTdXBwb3J0ZWQ6IHsgY2FudmFzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGIgPSBBLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICByZXR1cm4gYiAmJiBiLmdldENvbnRleHQgJiYgYi5nZXRDb250ZXh0KCIyZCIpOwogICAgfSwgd2Vid29ya2VyczogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLldvcmtlcjsKICAgIH0sIGJsb2I6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcC5CbG9iOwogICAgfSwgVWludDhBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLlVpbnQ4QXJyYXk7CiAgICB9LCBVaW50MzJBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBhLlVpbnQzMkFycmF5OwogICAgfSwgdmlkZW9Db2RlY3M6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IEEuY3JlYXRlRWxlbWVudCgidmlkZW8iKSwgWiA9IHsgbXA0OiAhMSwgaDI2NDogITEsIG9ndjogITEsIG9nZzogITEsIHdlYm06ICExIH07CiAgICAgIHRyeSB7CiAgICAgICAgYiAmJiBiLmNhblBsYXlUeXBlICYmIChaLm1wNCA9IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPSJtcDR2LjIwLjgiJykgIT09ICIiLCBaLmgyNjQgPSAoYi5jYW5QbGF5VHlwZSgndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFIicpIHx8IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjQyRTAxRSwgbXA0YS40MC4yIicpKSAhPT0gIiIsIFoub2d2ID0gYi5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSInKSAhPT0gIiIsIFoub2dnID0gYi5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSInKSAhPT0gIiIsIFoud2VibSA9IGIuY2FuUGxheVR5cGUoJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4LCB2b3JiaXMiJykgIT09IC0xKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgcmV0dXJuIFo7CiAgICB9KCkgfSwgbm9vcDogZnVuY3Rpb24oKSB7CiAgICB9LCBlYWNoOiBmdW5jdGlvbihiLCBaKSB7CiAgICAgIHZhciB5ID0gdm9pZCAwLCBGID0gdm9pZCAwOwogICAgICBpZiAocC5pc0FycmF5KGIpKQogICAgICAgIGZvciAoeSA9IC0xLCBGID0gYi5sZW5ndGg7ICsreSA8IEYgJiYgWih5LCBiW3ldKSAhPT0gITE7ICkKICAgICAgICAgIDsKICAgICAgZWxzZSBpZiAocC5pc09iamVjdChiKSkgewogICAgICAgIGZvciAoeSBpbiBiKQogICAgICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkoeSkgJiYgWih5LCBiW3ldKSA9PT0gITEpCiAgICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9LCBtZXJnZU9wdGlvbnM6IGZ1bmN0aW9uKGIsIFopIHsKICAgICAgaWYgKHAuaXNPYmplY3QoYikgJiYgcC5pc09iamVjdChaKSAmJiBPYmplY3Qua2V5cykgewogICAgICAgIHZhciB5ID0ge307CiAgICAgICAgcmV0dXJuIHAuZWFjaChiLCBmdW5jdGlvbihGKSB7CiAgICAgICAgICB5W0ZdID0gYltGXTsKICAgICAgICB9KSwgcC5lYWNoKFosIGZ1bmN0aW9uKEYpIHsKICAgICAgICAgIHZhciBSID0gWltGXTsKICAgICAgICAgIHlbRl0gPSBwLmlzT2JqZWN0KFIpICYmIGJbRl0gPyBwLm1lcmdlT3B0aW9ucyhiW0ZdLCBSKSA6IFI7CiAgICAgICAgfSksIHk7CiAgICAgIH0KICAgIH0sIHNldENTU0F0dHI6IGZ1bmN0aW9uKGIsIFosIHkpIHsKICAgICAgcC5pc0VsZW1lbnQoYikgJiYgKHAuaXNTdHJpbmcoWikgJiYgcC5pc1N0cmluZyh5KSA/IGIuc3R5bGVbWl0gPSB5IDogcC5pc09iamVjdChaKSAmJiBwLmVhY2goWiwgZnVuY3Rpb24oRiwgUikgewogICAgICAgIGIuc3R5bGVbRl0gPSBSOwogICAgICB9KSk7CiAgICB9LCByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihiKSB7CiAgICAgIHAuaXNFbGVtZW50KGIpICYmIGIucGFyZW50Tm9kZSAmJiBiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYik7CiAgICB9LCBjcmVhdGVXZWJXb3JrZXI6IGZ1bmN0aW9uKGIpIHsKICAgICAgaWYgKCFwLmlzU3RyaW5nKGIpKQogICAgICAgIHJldHVybiB7fTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgWiA9IG5ldyBwLkJsb2IoW2JdLCB7IHR5cGU6ICJ0ZXh0L2phdmFzY3JpcHQiIH0pLCB5ID0gcC5VUkwuY3JlYXRlT2JqZWN0VVJMKFopLCBGID0gbmV3IFdvcmtlcih5KTsKICAgICAgICByZXR1cm4geyBvYmplY3RVcmw6IHksIHdvcmtlcjogRiB9OwogICAgICB9IGNhdGNoIChSKSB7CiAgICAgICAgcmV0dXJuICIiICsgUjsKICAgICAgfQogICAgfSwgZ2V0RXh0ZW5zaW9uOiBmdW5jdGlvbihiKSB7CiAgICAgIHJldHVybiBiLnN1YnN0cihiLmxhc3RJbmRleE9mKCIuIikgKyAxLCBiLmxlbmd0aCk7CiAgICB9LCBnZXRGb250U2l6ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgIGlmICghQS5ib2R5IHx8IGIucmVzaXplRm9udCA9PT0gITEpCiAgICAgICAgcmV0dXJuIGIuZm9udFNpemU7CiAgICAgIHZhciBaID0gYi50ZXh0LCB5ID0gYi5naWZXaWR0aCwgRiA9IHBhcnNlSW50KGIuZm9udFNpemUsIDEwKSwgUiA9IHBhcnNlSW50KGIubWluRm9udFNpemUsIDEwKSwgTSA9IEEuY3JlYXRlRWxlbWVudCgiZGl2IiksIEkgPSBBLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgZm9yIChNLnNldEF0dHJpYnV0ZSgid2lkdGgiLCB5KSwgTS5hcHBlbmRDaGlsZChJKSwgSS5pbm5lckhUTUwgPSBaLCBJLnN0eWxlLmZvbnRTaXplID0gRiArICJweCIsIEkuc3R5bGUudGV4dEluZGVudCA9ICItOTk5OXB4IiwgSS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiIsIEEuYm9keS5hcHBlbmRDaGlsZChJKTsgSS5vZmZzZXRXaWR0aCA+IHkgJiYgRiA+PSBSOyApCiAgICAgICAgSS5zdHlsZS5mb250U2l6ZSA9IC0tRiArICJweCI7CiAgICAgIHJldHVybiBBLmJvZHkucmVtb3ZlQ2hpbGQoSSksIEYgKyAicHgiOwogICAgfSwgd2ViV29ya2VyRXJyb3I6ICExIH0sIFcgPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogcCB9KSwgQyA9IHsgdmFsaWRhdGU6IGZ1bmN0aW9uKGIpIHsKICAgICAgYiA9IHAuaXNPYmplY3QoYikgPyBiIDoge307CiAgICAgIHZhciBaID0ge307CiAgICAgIHJldHVybiBwLmVhY2goQy52YWxpZGF0b3JzLCBmdW5jdGlvbih5LCBGKSB7CiAgICAgICAgdmFyIFIgPSBGLmVycm9yQ29kZTsKICAgICAgICByZXR1cm4gYltSXSB8fCBGLmNvbmRpdGlvbiA/IHZvaWQgMCA6IChaID0gRiwgWi5lcnJvciA9ICEwLCAhMSk7CiAgICAgIH0pLCBkZWxldGUgWi5jb25kaXRpb24sIFo7CiAgICB9LCBpc1ZhbGlkOiBmdW5jdGlvbihaKSB7CiAgICAgIHZhciB5ID0gQy52YWxpZGF0ZShaKSwgRiA9IHkuZXJyb3IgIT09ICEwOwogICAgICByZXR1cm4gRjsKICAgIH0sIHZhbGlkYXRvcnM6IFt7IGNvbmRpdGlvbjogcC5pc0Z1bmN0aW9uKHAuZ2V0VXNlck1lZGlhKSwgZXJyb3JDb2RlOiAiZ2V0VXNlck1lZGlhIiwgZXJyb3JNc2c6ICJUaGUgZ2V0VXNlck1lZGlhIEFQSSBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQuY2FudmFzKCksIGVycm9yQ29kZTogImNhbnZhcyIsIGVycm9yTXNnOiAiQ2FudmFzIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQud2Vid29ya2VycygpLCBlcnJvckNvZGU6ICJ3ZWJ3b3JrZXJzIiwgZXJyb3JNc2c6ICJUaGUgV2ViIFdvcmtlcnMgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9LCB7IGNvbmRpdGlvbjogcC5pc0Z1bmN0aW9uKHAuVVJMKSwgZXJyb3JDb2RlOiAid2luZG93LlVSTCIsIGVycm9yTXNnOiAiVGhlIHdpbmRvdy5VUkwgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9LCB7IGNvbmRpdGlvbjogcC5pc1N1cHBvcnRlZC5ibG9iKCksIGVycm9yQ29kZTogIndpbmRvdy5CbG9iIiwgZXJyb3JNc2c6ICJUaGUgd2luZG93LkJsb2IgRmlsZSBBUEkgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiIH0sIHsgY29uZGl0aW9uOiBwLmlzU3VwcG9ydGVkLlVpbnQ4QXJyYXkoKSwgZXJyb3JDb2RlOiAid2luZG93LlVpbnQ4QXJyYXkiLCBlcnJvck1zZzogIlRoZSB3aW5kb3cuVWludDhBcnJheSBmdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSwgeyBjb25kaXRpb246IHAuaXNTdXBwb3J0ZWQuVWludDMyQXJyYXkoKSwgZXJyb3JDb2RlOiAid2luZG93LlVpbnQzMkFycmF5IiwgZXJyb3JNc2c6ICJUaGUgd2luZG93LlVpbnQzMkFycmF5IGZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiB9XSwgbWVzc2FnZXM6IHsgdmlkZW9Db2RlY3M6IHsgZXJyb3JDb2RlOiAidmlkZW9jb2RlYyIsIGVycm9yTXNnOiAiVGhlIHZpZGVvIGNvZGVjIHlvdSBhcmUgdHJ5aW5nIHRvIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIgfSB9IH0sIF8gPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogQyB9KSwgTiA9IGZ1bmN0aW9uKCkgewogICAgfSwgRCA9IHsgc2FtcGxlSW50ZXJ2YWw6IDEwLCBudW1Xb3JrZXJzOiAyLCBmaWx0ZXI6ICIiLCBnaWZXaWR0aDogMjAwLCBnaWZIZWlnaHQ6IDIwMCwgaW50ZXJ2YWw6IDAuMSwgbnVtRnJhbWVzOiAxMCwgZnJhbWVEdXJhdGlvbjogMSwga2VlcENhbWVyYU9uOiAhMSwgaW1hZ2VzOiBbXSwgdmlkZW86IG51bGwsIHdlYmNhbVZpZGVvRWxlbWVudDogbnVsbCwgY2FtZXJhU3RyZWFtOiBudWxsLCB0ZXh0OiAiIiwgZm9udFdlaWdodDogIm5vcm1hbCIsIGZvbnRTaXplOiAiMTZweCIsIG1pbkZvbnRTaXplOiAiMTBweCIsIHJlc2l6ZUZvbnQ6ICExLCBmb250RmFtaWx5OiAic2Fucy1zZXJpZiIsIGZvbnRDb2xvcjogIiNmZmZmZmYiLCB0ZXh0QWxpZ246ICJjZW50ZXIiLCB0ZXh0QmFzZWxpbmU6ICJib3R0b20iLCB0ZXh0WENvb3JkaW5hdGU6IG51bGwsIHRleHRZQ29vcmRpbmF0ZTogbnVsbCwgcHJvZ3Jlc3NDYWxsYmFjazogTiwgY29tcGxldGVDYWxsYmFjazogTiwgc2F2ZVJlbmRlcmluZ0NvbnRleHRzOiAhMSwgc2F2ZWRSZW5kZXJpbmdDb250ZXh0czogW10sIHNob3dGcmFtZVRleHQ6ICEwLCBjcm9zc09yaWdpbjogIkFub255bW91cyIsIHdhdGVyTWFyazogbnVsbCwgd2F0ZXJNYXJrSGVpZ2h0OiBudWxsLCB3YXRlck1hcmtXaWR0aDogbnVsbCwgd2F0ZXJNYXJrWENvb3JkaW5hdGU6IDEsIHdhdGVyTWFya1lDb29yZGluYXRlOiAxIH0sIFkgPSBPYmplY3QuZnJlZXplKHsgZGVmYXVsdDogRCB9KSwgZjAgPSBmdW5jdGlvbigpIHsKICAgIH0sIEcgPSBmdW5jdGlvbihiKSB7CiAgICAgIHRoaXMuY2FudmFzID0gbnVsbCwgdGhpcy5jdHggPSBudWxsLCB0aGlzLnJlcGVhdCA9IDAsIHRoaXMuZnJhbWVzID0gW10sIHRoaXMubnVtUmVuZGVyZWRGcmFtZXMgPSAwLCB0aGlzLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjayA9IGYwLCB0aGlzLm9uUmVuZGVyUHJvZ3Jlc3NDYWxsYmFjayA9IGYwLCB0aGlzLndvcmtlcnMgPSBbXSwgdGhpcy5hdmFpbGFibGVXb3JrZXJzID0gW10sIHRoaXMuZ2VuZXJhdGluZ0dJRiA9ICExLCB0aGlzLm9wdGlvbnMgPSBiLCB0aGlzLmluaXRpYWxpemVXZWJXb3JrZXJzKGIpOwogICAgfTsKICAgIEcucHJvdG90eXBlID0geyB3b3JrZXJNZXRob2RzOiBzKCksIGluaXRpYWxpemVXZWJXb3JrZXJzOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gdGhpcywgeSA9IGwudG9TdHJpbmcoKSArICIoIiArIHMudG9TdHJpbmcoKSArICIoKSk7IiwgRiA9IHZvaWQgMCwgUiA9IHZvaWQgMCwgTSA9IHZvaWQgMCwgSSA9IHZvaWQgMCwgViA9IC0xLCB6ID0gIiI7CiAgICAgIGZvciAoSSA9IGIubnVtV29ya2VyczsgKytWIDwgSTsgKQogICAgICAgIEYgPSBwLmNyZWF0ZVdlYldvcmtlcih5KSwgcC5pc09iamVjdChGKSA/IChSID0gRi5vYmplY3RVcmwsIE0gPSBGLndvcmtlciwgWi53b3JrZXJzLnB1c2goeyB3b3JrZXI6IE0sIG9iamVjdFVybDogUiB9KSwgWi5hdmFpbGFibGVXb3JrZXJzLnB1c2goTSkpIDogKHogPSBGLCBwLndlYldvcmtlckVycm9yID0gISFGKTsKICAgICAgdGhpcy53b3JrZXJFcnJvciA9IHosIHRoaXMuY2FudmFzID0gQS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSwgdGhpcy5jYW52YXMud2lkdGggPSBiLmdpZldpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQgPSBiLmdpZkhlaWdodCwgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLCB0aGlzLmZyYW1lcyA9IFtdOwogICAgfSwgZ2V0V29ya2VyOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlV29ya2Vycy5wb3AoKTsKICAgIH0sIGZyZWVXb3JrZXI6IGZ1bmN0aW9uKGIpIHsKICAgICAgdGhpcy5hdmFpbGFibGVXb3JrZXJzLnB1c2goYik7CiAgICB9LCBieXRlTWFwOiBmdW5jdGlvbigpIHsKICAgICAgZm9yICh2YXIgYiA9IFtdLCBaID0gMDsgMjU2ID4gWjsgWisrKQogICAgICAgIGJbWl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFopOwogICAgICByZXR1cm4gYjsKICAgIH0oKSwgYnVmZmVyVG9TdHJpbmc6IGZ1bmN0aW9uKGIpIHsKICAgICAgZm9yICh2YXIgWiA9IGIubGVuZ3RoLCB5ID0gIiIsIEYgPSAtMTsgKytGIDwgWjsgKQogICAgICAgIHkgKz0gdGhpcy5ieXRlTWFwW2JbRl1dOwogICAgICByZXR1cm4geTsKICAgIH0sIG9uRnJhbWVGaW5pc2hlZDogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHRoaXMsIHkgPSBaLmZyYW1lcywgRiA9IFoub3B0aW9ucywgUiA9ICEhKEYuaW1hZ2VzIHx8IFtdKS5sZW5ndGgsIE0gPSB5LmV2ZXJ5KGZ1bmN0aW9uKEkpIHsKICAgICAgICByZXR1cm4gIUkuYmVpbmdQcm9jZXNzZWQgJiYgSS5kb25lOwogICAgICB9KTsKICAgICAgWi5udW1SZW5kZXJlZEZyYW1lcysrLCBSICYmIGIoWi5udW1SZW5kZXJlZEZyYW1lcyAvIHkubGVuZ3RoKSwgWi5vblJlbmRlclByb2dyZXNzQ2FsbGJhY2soMC43NSAqIFoubnVtUmVuZGVyZWRGcmFtZXMgLyB5Lmxlbmd0aCksIE0gPyBaLmdlbmVyYXRpbmdHSUYgfHwgWi5nZW5lcmF0ZUdJRih5LCBaLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjaykgOiBwLnJlcXVlc3RUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIFoucHJvY2Vzc05leHRGcmFtZSgpOwogICAgICB9LCAxKTsKICAgIH0sIHByb2Nlc3NGcmFtZTogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHRoaXMsIHkgPSAodGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMpLCBGID0geS5wcm9ncmVzc0NhbGxiYWNrLCBSID0geS5zYW1wbGVJbnRlcnZhbCwgTSA9IHRoaXMuZnJhbWVzLCBJID0gdm9pZCAwLCBWID0gdm9pZCAwLCB6ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGogPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IGkgPyBhcmd1bWVudHNbMF0gOiB7fSwgYTAgPSBqLmRhdGE7CiAgICAgICAgZGVsZXRlIEkuZGF0YSwgSS5waXhlbHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhMC5waXhlbHMpLCBJLnBhbGV0dGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhMC5wYWxldHRlKSwgSS5kb25lID0gITAsIEkuYmVpbmdQcm9jZXNzZWQgPSAhMSwgWi5mcmVlV29ya2VyKFYpLCBaLm9uRnJhbWVGaW5pc2hlZChGKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEkgPSBNW2JdLCBJLmJlaW5nUHJvY2Vzc2VkIHx8IEkuZG9uZSA/ICh0aGlzLm9uRnJhbWVGaW5pc2hlZCgpLCB2b2lkIDApIDogKEkuc2FtcGxlSW50ZXJ2YWwgPSBSLCBJLmJlaW5nUHJvY2Vzc2VkID0gITAsIEkuZ2lmc2hvdCA9ICEwLCBWID0gdGhpcy5nZXRXb3JrZXIoKSwgViA/IChWLm9ubWVzc2FnZSA9IHosIFYucG9zdE1lc3NhZ2UoSSkpIDogeih7IGRhdGE6IFoud29ya2VyTWV0aG9kcy5ydW4oSSkgfSksIHZvaWQgMCk7CiAgICB9LCBzdGFydFJlbmRlcmluZzogZnVuY3Rpb24oYikgewogICAgICB0aGlzLm9uUmVuZGVyQ29tcGxldGVDYWxsYmFjayA9IGI7CiAgICAgIGZvciAodmFyIFogPSAwOyBaIDwgdGhpcy5vcHRpb25zLm51bVdvcmtlcnMgJiYgWiA8IHRoaXMuZnJhbWVzLmxlbmd0aDsgWisrKQogICAgICAgIHRoaXMucHJvY2Vzc0ZyYW1lKFopOwogICAgfSwgcHJvY2Vzc05leHRGcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgIGZvciAodmFyIGIgPSAtMSwgWiA9IDA7IFogPCB0aGlzLmZyYW1lcy5sZW5ndGg7IForKykgewogICAgICAgIHZhciB5ID0gdGhpcy5mcmFtZXNbWl07CiAgICAgICAgaWYgKCF5LmRvbmUgJiYgIXkuYmVpbmdQcm9jZXNzZWQpIHsKICAgICAgICAgIGIgPSBaOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGIgPj0gMCAmJiB0aGlzLnByb2Nlc3NGcmFtZShiKTsKICAgIH0sIGdlbmVyYXRlR0lGOiBmdW5jdGlvbihiLCBaKSB7CiAgICAgIHZhciB5ID0gW10sIEYgPSB7IGxvb3A6IHRoaXMucmVwZWF0IH0sIFIgPSB0aGlzLm9wdGlvbnMsIE0gPSBSLmludGVydmFsLCBJID0gUi5mcmFtZUR1cmF0aW9uLCBWID0gUi5pbWFnZXMsIHogPSAhIVYubGVuZ3RoLCBqID0gUi5naWZIZWlnaHQsIGEwID0gUi5naWZXaWR0aCwgYjAgPSBuZXcgYyh5LCBhMCwgaiwgRiksIGUwID0gdGhpcy5vblJlbmRlclByb2dyZXNzQ2FsbGJhY2ssIHEgPSB6ID8gMTAwICogTSA6IDAsIG8wID0gdm9pZCAwLCBjMCA9IHZvaWQgMDsKICAgICAgdGhpcy5nZW5lcmF0aW5nR0lGID0gITAsIHAuZWFjaChiLCBmdW5jdGlvbihTMCwgdjApIHsKICAgICAgICB2YXIgSTAgPSB2MC5wYWxldHRlOwogICAgICAgIGUwKDAuNzUgKyAwLjI1ICogdjAucG9zaXRpb24gKiAxIC8gYi5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIEMwID0gMDsgSSA+IEMwOyBDMCsrKQogICAgICAgICAgYjAuYWRkRnJhbWUoMCwgMCwgYTAsIGosIHYwLnBpeGVscywgeyBwYWxldHRlOiBJMCwgZGVsYXk6IHEgfSk7CiAgICAgIH0pLCBiMC5lbmQoKSwgZTAoMSksIHRoaXMuZnJhbWVzID0gW10sIHRoaXMuZ2VuZXJhdGluZ0dJRiA9ICExLCBwLmlzRnVuY3Rpb24oWikgJiYgKG8wID0gdGhpcy5idWZmZXJUb1N0cmluZyh5KSwgYzAgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LCIgKyBwLmJ0b2EobzApLCBaKGMwKSk7CiAgICB9LCBzZXRSZXBlYXQ6IGZ1bmN0aW9uKGIpIHsKICAgICAgdGhpcy5yZXBlYXQgPSBiOwogICAgfSwgYWRkRnJhbWU6IGZ1bmN0aW9uKGIsIFosIHkpIHsKICAgICAgWiA9IHAuaXNPYmplY3QoWikgPyBaIDoge307CiAgICAgIHZhciBGID0gdGhpcywgUiA9IEYuY3R4LCBNID0gRi5vcHRpb25zLCBJID0gTS5naWZXaWR0aCwgViA9IE0uZ2lmSGVpZ2h0LCB6ID0gcC5nZXRGb250U2l6ZShaKSwgaiA9IFosIGEwID0gai5maWx0ZXIsIGIwID0gai5mb250Q29sb3IsIGUwID0gai5mb250RmFtaWx5LCBxID0gai5mb250V2VpZ2h0LCBvMCA9IChqLmdpZkhlaWdodCwgai5naWZXaWR0aCwgai50ZXh0KSwgYzAgPSBqLnRleHRBbGlnbiwgUzAgPSBqLnRleHRCYXNlbGluZSwgdjAgPSBqLndhdGVyTWFyaywgSTAgPSBqLndhdGVyTWFya0hlaWdodCwgQzAgPSBqLndhdGVyTWFya1dpZHRoLCBPMCA9IGoud2F0ZXJNYXJrWENvb3JkaW5hdGUsIFcwID0gai53YXRlck1hcmtZQ29vcmRpbmF0ZSwgTjAgPSBaLnRleHRYQ29vcmRpbmF0ZSA/IFoudGV4dFhDb29yZGluYXRlIDogYzAgPT09ICJsZWZ0IiA/IDEgOiBjMCA9PT0gInJpZ2h0IiA/IEkgOiBJIC8gMiwgUTAgPSBaLnRleHRZQ29vcmRpbmF0ZSA/IFoudGV4dFlDb29yZGluYXRlIDogUzAgPT09ICJ0b3AiID8gMSA6IFMwID09PSAiY2VudGVyIiA/IFYgLyAyIDogViwgVTAgPSBxICsgIiAiICsgeiArICIgIiArIGUwLCBQMCA9IHkgJiYgWi5zaG93RnJhbWVUZXh0ID8geSA6IG8wLCBKMCA9IHZvaWQgMDsKICAgICAgdHJ5IHsKICAgICAgICBSLmZpbHRlciA9IGEwLCBSLmRyYXdJbWFnZShiLCAwLCAwLCBJLCBWKSwgUDAgJiYgKFIuZm9udCA9IFUwLCBSLmZpbGxTdHlsZSA9IGIwLCBSLnRleHRBbGlnbiA9IGMwLCBSLnRleHRCYXNlbGluZSA9IFMwLCBSLmZpbGxUZXh0KFAwLCBOMCwgUTApKSwgdjAgJiYgUi5kcmF3SW1hZ2UodjAsIE8wLCBXMCwgQzAsIEkwKSwgSjAgPSBSLmdldEltYWdlRGF0YSgwLCAwLCBJLCBWKSwgRi5hZGRGcmFtZUltYWdlRGF0YShKMCk7CiAgICAgIH0gY2F0Y2ggKEFyKSB7CiAgICAgICAgcmV0dXJuICIiICsgQXI7CiAgICAgIH0KICAgIH0sIGFkZEZyYW1lSW1hZ2VEYXRhOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IGkgPyBhcmd1bWVudHNbMF0gOiB7fSwgWiA9IHRoaXMuZnJhbWVzLCB5ID0gYi5kYXRhOwogICAgICB0aGlzLmZyYW1lcy5wdXNoKHsgZGF0YTogeSwgd2lkdGg6IGIud2lkdGgsIGhlaWdodDogYi5oZWlnaHQsIHBhbGV0dGU6IG51bGwsIGRpdGhlcmluZzogbnVsbCwgZG9uZTogITEsIGJlaW5nUHJvY2Vzc2VkOiAhMSwgcG9zaXRpb246IFoubGVuZ3RoIH0pOwogICAgfSwgb25SZW5kZXJQcm9ncmVzczogZnVuY3Rpb24oYikgewogICAgICB0aGlzLm9uUmVuZGVyUHJvZ3Jlc3NDYWxsYmFjayA9IGI7CiAgICB9LCBpc1JlbmRlcmluZzogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRpbmdHSUY7CiAgICB9LCBnZXRCYXNlNjRHSUY6IGZ1bmN0aW9uKGIpIHsKICAgICAgdmFyIFogPSB0aGlzLCB5ID0gZnVuY3Rpb24oRikgewogICAgICAgIFouZGVzdHJveVdvcmtlcnMoKSwgcC5yZXF1ZXN0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgIGIoRik7CiAgICAgICAgfSwgMCk7CiAgICAgIH07CiAgICAgIFouc3RhcnRSZW5kZXJpbmcoeSk7CiAgICB9LCBkZXN0cm95V29ya2VyczogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghdGhpcy53b3JrZXJFcnJvcikgewogICAgICAgIHZhciBiID0gdGhpcy53b3JrZXJzOwogICAgICAgIHAuZWFjaChiLCBmdW5jdGlvbihaLCB5KSB7CiAgICAgICAgICB2YXIgRiA9IHkud29ya2VyLCBSID0geS5vYmplY3RVcmw7CiAgICAgICAgICBGLnRlcm1pbmF0ZSgpLCBwLlVSTC5yZXZva2VPYmplY3RVUkwoUik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gfTsKICAgIHZhciBKID0gZnVuY3Rpb24oKSB7CiAgICB9LCBLID0geyBnZXRHSUY6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gaSA/IGFyZ3VtZW50c1swXSA6IHt9LCBaID0gYXJndW1lbnRzWzFdOwogICAgICBaID0gcC5pc0Z1bmN0aW9uKFopID8gWiA6IEo7CiAgICAgIHZhciB5ID0gQS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSwgRiA9IHZvaWQgMCwgUiA9IGIuaW1hZ2VzLCBNID0gISFSLmxlbmd0aCwgSSA9IGIuY2FtZXJhU3RyZWFtLCBWID0gYi5jcm9wLCB6ID0gYi5maWx0ZXIsIGogPSBiLmZvbnRDb2xvciwgYTAgPSBiLmZvbnRGYW1pbHksIGIwID0gYi5mb250V2VpZ2h0LCBlMCA9IGIua2VlcENhbWVyYU9uLCBxID0gKGIubnVtV29ya2VycywgYi5wcm9ncmVzc0NhbGxiYWNrKSwgbzAgPSBiLnNhdmVSZW5kZXJpbmdDb250ZXh0cywgYzAgPSBiLnNhdmVkUmVuZGVyaW5nQ29udGV4dHMsIFMwID0gYi50ZXh0LCB2MCA9IGIudGV4dEFsaWduLCBJMCA9IGIudGV4dEJhc2VsaW5lLCBDMCA9IGIudmlkZW9FbGVtZW50LCBPMCA9IGIudmlkZW9IZWlnaHQsIFcwID0gYi52aWRlb1dpZHRoLCBOMCA9IGIud2ViY2FtVmlkZW9FbGVtZW50LCBRMCA9IGIud2F0ZXJNYXJrLCBVMCA9IGIud2F0ZXJNYXJrSGVpZ2h0LCBQMCA9IGIud2F0ZXJNYXJrV2lkdGgsIEowID0gYi53YXRlck1hcmtYQ29vcmRpbmF0ZSwgQXIgPSBiLndhdGVyTWFya1lDb29yZGluYXRlLCBMMCA9IE51bWJlcihiLmdpZldpZHRoKSwgY3IgPSBOdW1iZXIoYi5naWZIZWlnaHQpLCB5ciA9IE51bWJlcihiLmludGVydmFsKSwgV3IgPSAoTnVtYmVyKGIuc2FtcGxlSW50ZXJ2YWwpLCBNID8gMCA6IDFlMyAqIHlyKSwgTXIgPSBbXSwgc3IgPSBjMC5sZW5ndGggPyBjMC5sZW5ndGggOiBiLm51bUZyYW1lcywgZ2EgPSBzciwgQTIgPSBuZXcgRyhiKSwgTjIgPSBwLmdldEZvbnRTaXplKGIpLCBNMiA9IGIudGV4dFhDb29yZGluYXRlID8gYi50ZXh0WENvb3JkaW5hdGUgOiB2MCA9PT0gImxlZnQiID8gMSA6IHYwID09PSAicmlnaHQiID8gTDAgOiBMMCAvIDIsIFQyID0gYi50ZXh0WUNvb3JkaW5hdGUgPyBiLnRleHRZQ29vcmRpbmF0ZSA6IEkwID09PSAidG9wIiA/IDEgOiBJMCA9PT0gImNlbnRlciIgPyBjciAvIDIgOiBjciwgRGUgPSBiMCArICIgIiArIE4yICsgIiAiICsgYTAsIFRyID0gViA/IE1hdGguZmxvb3IoVi5zY2FsZWRXaWR0aCAvIDIpIDogMCwgSHIgPSBWID8gVzAgLSBWLnNjYWxlZFdpZHRoIDogMCwgaWEgPSBWID8gTWF0aC5mbG9vcihWLnNjYWxlZEhlaWdodCAvIDIpIDogMCwgbmEgPSBWID8gTzAgLSBWLnNjYWxlZEhlaWdodCA6IDAsIHQyID0gZnVuY3Rpb24gbWEoKSB7CiAgICAgICAgZnVuY3Rpb24gaDAoKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBIciA+IFcwICYmIChIciA9IFcwKSwgbmEgPiBPMCAmJiAobmEgPSBPMCksIDAgPiBUciAmJiAoVHIgPSAwKSwgMCA+IGlhICYmIChpYSA9IDApLCBGLmZpbHRlciA9IHosIEYuZHJhd0ltYWdlKEMwLCBUciwgaWEsIEhyLCBuYSwgMCwgMCwgTDAsIGNyKSwgZDAoKTsKICAgICAgICAgIH0gY2F0Y2ggKHMwKSB7CiAgICAgICAgICAgIGlmIChzMC5uYW1lICE9PSAiTlNfRVJST1JfTk9UX0FWQUlMQUJMRSIpCiAgICAgICAgICAgICAgdGhyb3cgczA7CiAgICAgICAgICAgIHAucmVxdWVzdFRpbWVvdXQoaDAsIDEwMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGQwKCkgewogICAgICAgICAgdmFyIHMwID0gdm9pZCAwOwogICAgICAgICAgbzAgJiYgTXIucHVzaChGLmdldEltYWdlRGF0YSgwLCAwLCBMMCwgY3IpKSwgUTAgJiYgRi5kcmF3SW1hZ2UoUTAsIEowLCBBciwgUDAsIFUwKSwgUzAgJiYgKEYuZm9udCA9IERlLCBGLmZpbGxTdHlsZSA9IGosIEYudGV4dEFsaWduID0gdjAsIEYudGV4dEJhc2VsaW5lID0gSTAsIEYuZmlsbFRleHQoUzAsIE0yLCBUMikpLCBzMCA9IEYuZ2V0SW1hZ2VEYXRhKDAsIDAsIEwwLCBjciksIEEyLmFkZEZyYW1lSW1hZ2VEYXRhKHMwKSwgZ2EgPSBWMCwgcSgoc3IgLSBnYSkgLyBzciksIFYwID4gMCAmJiBwLnJlcXVlc3RUaW1lb3V0KG1hLCBXciksIGdhIHx8IEEyLmdldEJhc2U2NEdJRihmdW5jdGlvbihrMCkgewogICAgICAgICAgICBaKHsgZXJyb3I6ICExLCBlcnJvckNvZGU6ICIiLCBlcnJvck1zZzogIiIsIGltYWdlOiBrMCwgY2FtZXJhU3RyZWFtOiBJLCB2aWRlb0VsZW1lbnQ6IEMwLCB3ZWJjYW1WaWRlb0VsZW1lbnQ6IE4wLCBzYXZlZFJlbmRlcmluZ0NvbnRleHRzOiBNciwga2VlcENhbWVyYU9uOiBlMCB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB2YXIgVjAgPSBnYSAtIDE7CiAgICAgICAgYzAubGVuZ3RoID8gKEYucHV0SW1hZ2VEYXRhKGMwW3NyIC0gZ2FdLCAwLCAwKSwgZDAoKSkgOiBoMCgpOwogICAgICB9OwogICAgICBzciA9IHNyICE9PSBpID8gc3IgOiAxMCwgeXIgPSB5ciAhPT0gaSA/IHlyIDogMC4xLCB5LndpZHRoID0gTDAsIHkuaGVpZ2h0ID0gY3IsIEYgPSB5LmdldENvbnRleHQoIjJkIiksIGZ1bmN0aW9uIG1hKCkgewogICAgICAgIHJldHVybiBjMC5sZW5ndGggfHwgQzAuY3VycmVudFRpbWUgIT09IDAgPyAodDIoKSwgdm9pZCAwKSA6IChwLnJlcXVlc3RUaW1lb3V0KG1hLCAxMDApLCB2b2lkIDApOwogICAgICB9KCk7CiAgICB9LCBnZXRDcm9wRGltZW5zaW9uczogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge30sIFogPSBiLnZpZGVvV2lkdGgsIHkgPSBiLnZpZGVvSGVpZ2h0LCBGID0gYi5naWZXaWR0aCwgUiA9IGIuZ2lmSGVpZ2h0LCBNID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCBzY2FsZWRXaWR0aDogMCwgc2NhbGVkSGVpZ2h0OiAwIH07CiAgICAgIHJldHVybiBaID4geSA/IChNLndpZHRoID0gTWF0aC5yb3VuZChaICogKFIgLyB5KSkgLSBGLCBNLnNjYWxlZFdpZHRoID0gTWF0aC5yb3VuZChNLndpZHRoICogKHkgLyBSKSkpIDogKE0uaGVpZ2h0ID0gTWF0aC5yb3VuZCh5ICogKEYgLyBaKSkgLSBSLCBNLnNjYWxlZEhlaWdodCA9IE1hdGgucm91bmQoTS5oZWlnaHQgKiAoWiAvIEYpKSksIE07CiAgICB9IH0sIFggPSB7IGxvYWRlZERhdGE6ICExLCBkZWZhdWx0VmlkZW9EaW1lbnNpb25zOiB7IHdpZHRoOiA2NDAsIGhlaWdodDogNDgwIH0sIGZpbmRWaWRlb1NpemU6IGZ1bmN0aW9uIGIoWikgewogICAgICBiLmF0dGVtcHRzID0gYi5hdHRlbXB0cyB8fCAwOwogICAgICB2YXIgeSA9IFouY2FtZXJhU3RyZWFtLCBGID0gWi5jb21wbGV0ZWRDYWxsYmFjaywgUiA9IFoudmlkZW9FbGVtZW50OwogICAgICBSICYmIChSLnZpZGVvV2lkdGggPiAwICYmIFIudmlkZW9IZWlnaHQgPiAwID8gKFIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsIFguZmluZFZpZGVvU2l6ZSksIEYoeyB2aWRlb0VsZW1lbnQ6IFIsIGNhbWVyYVN0cmVhbTogeSwgdmlkZW9XaWR0aDogUi52aWRlb1dpZHRoLCB2aWRlb0hlaWdodDogUi52aWRlb0hlaWdodCB9KSkgOiBiLmF0dGVtcHRzIDwgMTAgPyAoYi5hdHRlbXB0cyArPSAxLCBwLnJlcXVlc3RUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIFguZmluZFZpZGVvU2l6ZShaKTsKICAgICAgfSwgNDAwKSkgOiBGKHsgdmlkZW9FbGVtZW50OiBSLCBjYW1lcmFTdHJlYW06IHksIHZpZGVvV2lkdGg6IFguZGVmYXVsdFZpZGVvRGltZW5zaW9ucy53aWR0aCwgdmlkZW9IZWlnaHQ6IFguZGVmYXVsdFZpZGVvRGltZW5zaW9ucy5oZWlnaHQgfSkpOwogICAgfSwgb25TdHJlYW1pbmdUaW1lb3V0OiBmdW5jdGlvbihiKSB7CiAgICAgIHAuaXNGdW5jdGlvbihiKSAmJiBiKHsgZXJyb3I6ICEwLCBlcnJvckNvZGU6ICJnZXRVc2VyTWVkaWEiLCBlcnJvck1zZzogIlRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoIHRoZSBnZXRVc2VyTWVkaWEgQVBJIC0gVGltZWQgb3V0IHdoaWxlIHRyeWluZyB0byBzdGFydCBzdHJlYW1pbmciLCBpbWFnZTogbnVsbCwgY2FtZXJhU3RyZWFtOiB7fSB9KTsKICAgIH0sIHN0cmVhbTogZnVuY3Rpb24oYikgewogICAgICB2YXIgWiA9IHAuaXNBcnJheShiLmV4aXN0aW5nVmlkZW8pID8gYi5leGlzdGluZ1ZpZGVvWzBdIDogYi5leGlzdGluZ1ZpZGVvLCB5ID0gYi5jYW1lcmFTdHJlYW0sIEYgPSBiLmNvbXBsZXRlZENhbGxiYWNrLCBSID0gYi5zdHJlYW1lZENhbGxiYWNrLCBNID0gYi52aWRlb0VsZW1lbnQ7CiAgICAgIGlmIChwLmlzRnVuY3Rpb24oUikgJiYgUigpLCBaKSB7CiAgICAgICAgaWYgKHAuaXNTdHJpbmcoWikpCiAgICAgICAgICBNLnNyYyA9IFosIE0uaW5uZXJIVE1MID0gJzxzb3VyY2Ugc3JjPSInICsgWiArICciIHR5cGU9InZpZGVvLycgKyBwLmdldEV4dGVuc2lvbihaKSArICciIC8+JzsKICAgICAgICBlbHNlIGlmIChaIGluc3RhbmNlb2YgQmxvYikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgTS5zcmMgPSBwLlVSTC5jcmVhdGVPYmplY3RVUkwoWik7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICAgIE0uaW5uZXJIVE1MID0gJzxzb3VyY2Ugc3JjPSInICsgWiArICciIHR5cGU9IicgKyBaLnR5cGUgKyAnIiAvPic7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE0ubW96U3JjT2JqZWN0KQogICAgICAgIE0ubW96U3JjT2JqZWN0ID0geTsKICAgICAgZWxzZSBpZiAocC5VUkwpCiAgICAgICAgdHJ5IHsKICAgICAgICAgIE0uc3JjT2JqZWN0ID0geSwgTS5zcmMgPSBwLlVSTC5jcmVhdGVPYmplY3RVUkwoeSk7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBNLnNyY09iamVjdCA9IHk7CiAgICAgICAgfQogICAgICBNLnBsYXkoKSwgcC5yZXF1ZXN0VGltZW91dChmdW5jdGlvbiBJKCkgewogICAgICAgIEkuY291bnQgPSBJLmNvdW50IHx8IDAsIFgubG9hZGVkRGF0YSA9PT0gITAgPyAoWC5maW5kVmlkZW9TaXplKHsgdmlkZW9FbGVtZW50OiBNLCBjYW1lcmFTdHJlYW06IHksIGNvbXBsZXRlZENhbGxiYWNrOiBGIH0pLCBYLmxvYWRlZERhdGEgPSAhMSkgOiAoSS5jb3VudCArPSAxLCBJLmNvdW50ID4gMTAgPyBYLmZpbmRWaWRlb1NpemUoeyB2aWRlb0VsZW1lbnQ6IE0sIGNhbWVyYVN0cmVhbTogeSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBJKCkpOwogICAgICB9LCAwKTsKICAgIH0sIHN0YXJ0U3RyZWFtaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gcC5pc0Z1bmN0aW9uKGIuZXJyb3IpID8gYi5lcnJvciA6IHAubm9vcCwgeSA9IHAuaXNGdW5jdGlvbihiLnN0cmVhbWVkKSA/IGIuc3RyZWFtZWQgOiBwLm5vb3AsIEYgPSBwLmlzRnVuY3Rpb24oYi5jb21wbGV0ZWQpID8gYi5jb21wbGV0ZWQgOiBwLm5vb3AsIFIgPSBiLmNyb3NzT3JpZ2luLCBNID0gYi5leGlzdGluZ1ZpZGVvLCBJID0gYi5sYXN0Q2FtZXJhU3RyZWFtLCBWID0gYi5vcHRpb25zLCB6ID0gYi53ZWJjYW1WaWRlb0VsZW1lbnQsIGogPSBwLmlzRWxlbWVudChNKSA/IE0gOiB6IHx8IEEuY3JlYXRlRWxlbWVudCgidmlkZW8iKTsKICAgICAgUiAmJiAoai5jcm9zc09yaWdpbiA9IFYuY3Jvc3NPcmlnaW4pLCBqLmF1dG9wbGF5ID0gITAsIGoubG9vcCA9ICEwLCBqLm11dGVkID0gITAsIGouYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsIGZ1bmN0aW9uKCkgewogICAgICAgIFgubG9hZGVkRGF0YSA9ICEwLCBWLm9mZnNldCAmJiAoai5jdXJyZW50VGltZSA9IFYub2Zmc2V0KTsKICAgICAgfSksIE0gPyBYLnN0cmVhbSh7IHZpZGVvRWxlbWVudDogaiwgZXhpc3RpbmdWaWRlbzogTSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBJID8gWC5zdHJlYW0oeyB2aWRlb0VsZW1lbnQ6IGosIGNhbWVyYVN0cmVhbTogSSwgc3RyZWFtZWRDYWxsYmFjazogeSwgY29tcGxldGVkQ2FsbGJhY2s6IEYgfSkgOiBwLmdldFVzZXJNZWRpYSh7IHZpZGVvOiAhMCB9LCBmdW5jdGlvbihhMCkgewogICAgICAgIFguc3RyZWFtKHsgdmlkZW9FbGVtZW50OiBqLCBjYW1lcmFTdHJlYW06IGEwLCBzdHJlYW1lZENhbGxiYWNrOiB5LCBjb21wbGV0ZWRDYWxsYmFjazogRiB9KTsKICAgICAgfSwgWik7CiAgICB9LCBzdGFydFZpZGVvU3RyZWFtaW5nOiBmdW5jdGlvbihiKSB7CiAgICAgIHZhciBaID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSBpID8gYXJndW1lbnRzWzFdIDoge30sIHkgPSBaLnRpbWVvdXQgIT09IGkgPyBaLnRpbWVvdXQgOiAwLCBGID0gWi5jYWxsYmFjaywgUiA9IFoud2ViY2FtVmlkZW9FbGVtZW50LCBNID0gdm9pZCAwOwogICAgICB5ID4gMCAmJiAoTSA9IHAucmVxdWVzdFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgWC5vblN0cmVhbWluZ1RpbWVvdXQoRik7CiAgICAgIH0sIDFlNCkpLCBYLnN0YXJ0U3RyZWFtaW5nKHsgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgIEYoeyBlcnJvcjogITAsIGVycm9yQ29kZTogImdldFVzZXJNZWRpYSIsIGVycm9yTXNnOiAiVGhlcmUgd2FzIGFuIGlzc3VlIHdpdGggdGhlIGdldFVzZXJNZWRpYSBBUEkgLSB0aGUgdXNlciBwcm9iYWJseSBkZW5pZWQgcGVybWlzc2lvbiIsIGltYWdlOiBudWxsLCBjYW1lcmFTdHJlYW06IHt9IH0pOwogICAgICB9LCBzdHJlYW1lZDogZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KE0pOwogICAgICB9LCBjb21wbGV0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBJID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSBpID8gYXJndW1lbnRzWzBdIDoge30sIFYgPSBJLmNhbWVyYVN0cmVhbSwgeiA9IEkudmlkZW9FbGVtZW50LCBqID0gSS52aWRlb0hlaWdodCwgYTAgPSBJLnZpZGVvV2lkdGg7CiAgICAgICAgYih7IGNhbWVyYVN0cmVhbTogViwgdmlkZW9FbGVtZW50OiB6LCB2aWRlb0hlaWdodDogaiwgdmlkZW9XaWR0aDogYTAgfSk7CiAgICAgIH0sIGxhc3RDYW1lcmFTdHJlYW06IFoubGFzdENhbWVyYVN0cmVhbSwgd2ViY2FtVmlkZW9FbGVtZW50OiBSLCBjcm9zc09yaWdpbjogWi5jcm9zc09yaWdpbiwgb3B0aW9uczogWiB9KTsKICAgIH0sIHN0b3BWaWRlb1N0cmVhbWluZzogZnVuY3Rpb24oYikgewogICAgICBiID0gcC5pc09iamVjdChiKSA/IGIgOiB7fTsKICAgICAgdmFyIFogPSBiLCB5ID0gWi5rZWVwQ2FtZXJhT24sIEYgPSBaLnZpZGVvRWxlbWVudCwgUiA9IFoud2ViY2FtVmlkZW9FbGVtZW50LCBNID0gYi5jYW1lcmFTdHJlYW0gfHwge30sIEkgPSBNLmdldFRyYWNrcyA/IE0uZ2V0VHJhY2tzKCkgfHwgW10gOiBbXSwgViA9ICEhSS5sZW5ndGgsIHogPSBJWzBdOwogICAgICAheSAmJiBWICYmIHAuaXNGdW5jdGlvbih6LnN0b3ApICYmIHouc3RvcCgpLCBwLmlzRWxlbWVudChGKSAmJiAhUiAmJiAoRi5wYXVzZSgpLCBwLmlzRnVuY3Rpb24ocC5VUkwucmV2b2tlT2JqZWN0VVJMKSAmJiAhcC53ZWJXb3JrZXJFcnJvciAmJiBGLnNyYyAmJiBwLlVSTC5yZXZva2VPYmplY3RVUkwoRi5zcmMpLCBwLnJlbW92ZUVsZW1lbnQoRikpOwogICAgfSB9LCBsMCA9IHsgdXRpbHM6IFcsIGVycm9yOiBfLCBkZWZhdWx0T3B0aW9uczogWSwgY3JlYXRlR0lGOiBCLCB0YWtlU25hcFNob3Q6IG0sIHN0b3BWaWRlb1N0cmVhbWluZzogaywgaXNTdXBwb3J0ZWQ6IG4sIGlzV2ViQ2FtR0lGU3VwcG9ydGVkOiBmLCBpc0V4aXN0aW5nVmlkZW9HSUZTdXBwb3J0ZWQ6IG8sIGlzRXhpc3RpbmdJbWFnZXNHSUZTdXBwb3J0ZWQ6IHUsIFZFUlNJT046ICIwLjQuNSIgfTsKICAgIHIuZXhwb3J0cyA9IGwwOwogIH0pKHR5cGVvZiB3aW5kb3cgPCAidSIgPyB3aW5kb3cgOiB7fSwgdHlwZW9mIGRvY3VtZW50IDwgInUiID8gZG9jdW1lbnQgOiB7IGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgewogIH0gfSwgdHlwZW9mIHdpbmRvdyA8ICJ1IiA/IHdpbmRvdy5uYXZpZ2F0b3IgOiB7fSksIGZ1bmN0aW9uKGEsIEEpIHsKICAgIHIuZXhwb3J0cyA9IEEoKSwgci5leHBvcnRzLmRlZmF1bHQgPSBBKCk7CiAgfShGZiwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYSA9IGAKdmFyIE1vZHVsZT12b2lkIDAhPT1Nb2R1bGU/TW9kdWxlOnt9OyhmdW5jdGlvbigpe3ZhciBkPXtwcmludDpmdW5jdGlvbihBKXtBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiICIpLGNvbnNvbGUubG9nKEEpfSxwcmludEVycjpmdW5jdGlvbihBKXtBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiICIpLGNvbnNvbGUuZXJyb3IoQSl9LGNhbnZhczp7fSxub0luaXRpYWxSdW46ITB9LEE9e307Zm9yKFNyIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShTcikmJihBW1NyXT1kW1NyXSk7dmFyIGksZixlPSExLGw9ITEsbz0hMSxyPSExO2lmKGQuRU5WSVJPTk1FTlQpaWYoIldFQiI9PT1kLkVOVklST05NRU5UKWU9ITA7ZWxzZSBpZigiV09SS0VSIj09PWQuRU5WSVJPTk1FTlQpbD0hMDtlbHNlIGlmKCJOT0RFIj09PWQuRU5WSVJPTk1FTlQpbz0hMDtlbHNle2lmKCJTSEVMTCIhPT1kLkVOVklST05NRU5UKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIE1vZHVsZVsnRU5WSVJPTk1FTlQnXSB2YWx1ZSBpcyBub3QgdmFsaWQuIEl0IG11c3QgYmUgb25lIG9mOiBXRUJ8V09SS0VSfE5PREV8U0hFTEwuIik7cj0hMH1lbHNlIGU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3csbD0iZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxvPSJvYmplY3QiPT10eXBlb2YgcHJvY2VzcyYmImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJiFlJiYhbCxyPSFlJiYhbyYmIWw7aWYobylkLnByaW50fHwoZC5wcmludD1jb25zb2xlLmxvZyksZC5wcmludEVycnx8KGQucHJpbnRFcnI9Y29uc29sZS53YXJuKSxkLnJlYWQ9ZnVuY3Rpb24oQSxlKXt2YXIgcjtyZXR1cm4ocj12cihBKSl8fChpPWl8fHJlcXVpcmUoImZzIiksQT0oZj1mfHxyZXF1aXJlKCJwYXRoIikpLm5vcm1hbGl6ZShBKSxyPWkucmVhZEZpbGVTeW5jKEEpKSxlP3I6ci50b1N0cmluZygpfSxkLnJlYWRCaW5hcnk9ZnVuY3Rpb24oQSl7dmFyIGU9ZC5yZWFkKEEsITApO3JldHVybiBlLmJ1ZmZlcnx8KGU9bmV3IFVpbnQ4QXJyYXkoZSkpLGgoZS5idWZmZXIpLGV9LGQudGhpc1Byb2dyYW18fCgxPHByb2Nlc3MuYXJndi5sZW5ndGg/ZC50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFxcXC9nLCIvIik6ZC50aGlzUHJvZ3JhbT0idW5rbm93bi1wcm9ncmFtIiksZC5hcmd1bWVudHM9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLCJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9ZCkscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKEEpe2lmKCEoQSBpbnN0YW5jZW9mIFlyKSl0aHJvdyBBfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihBLGUpe3Byb2Nlc3MuZXhpdCgxKX0pLGQuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9O2Vsc2UgaWYocilkLnByaW50fHwoZC5wcmludD1wcmludCksInVuZGVmaW5lZCIhPXR5cGVvZiBwcmludEVyciYmKGQucHJpbnRFcnI9cHJpbnRFcnIpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVhZD9kLnJlYWQ9ZnVuY3Rpb24oQSl7dmFyIGU9dnIoQSk7cmV0dXJuIGU/a3IoZSk6cmVhZChBKX06ZC5yZWFkPWZ1bmN0aW9uKCl7dGhyb3cibm8gcmVhZCgpIGF2YWlsYWJsZSJ9LGQucmVhZEJpbmFyeT1mdW5jdGlvbihBKXt2YXIgZTtyZXR1cm4oZT12cihBKSk/ZToiZnVuY3Rpb24iPT10eXBlb2YgcmVhZGJ1ZmZlcj9uZXcgVWludDhBcnJheShyZWFkYnVmZmVyKEEpKTooaCgib2JqZWN0Ij09dHlwZW9mKGU9cmVhZChBLCJiaW5hcnkiKSkpLGUpfSwidW5kZWZpbmVkIiE9dHlwZW9mIHNjcmlwdEFyZ3M/ZC5hcmd1bWVudHM9c2NyaXB0QXJnczp2b2lkIDAhPT1hcmd1bWVudHMmJihkLmFyZ3VtZW50cz1hcmd1bWVudHMpLCJmdW5jdGlvbiI9PXR5cGVvZiBxdWl0JiYoZC5xdWl0PWZ1bmN0aW9uKEEsZSl7cXVpdChBKX0pO2Vsc2V7aWYoIWUmJiFsKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBydW50aW1lIGVudmlyb25tZW50LiBXaGVyZSBhcmUgd2U/Iik7aWYoZC5yZWFkPWZ1bmN0aW9uKGUpe3RyeXt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEEub3BlbigiR0VUIixlLCExKSxBLnNlbmQobnVsbCksQS5yZXNwb25zZVRleHR9Y2F0Y2goQSl7dmFyIHI9dnIoZSk7aWYocilyZXR1cm4ga3Iocik7dGhyb3cgQX19LGwmJihkLnJlYWRCaW5hcnk9ZnVuY3Rpb24oZSl7dHJ5e3ZhciBBPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gQS5vcGVuKCJHRVQiLGUsITEpLEEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsQS5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KEEucmVzcG9uc2UpfWNhdGNoKEEpe3ZhciByPXZyKGUpO2lmKHIpcmV0dXJuIHI7dGhyb3cgQX19KSxkLnJlYWRBc3luYz1mdW5jdGlvbihlLHIsaSl7dmFyIGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub3BlbigiR0VUIixlLCEwKSxmLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGYub25sb2FkPWZ1bmN0aW9uKCl7aWYoMjAwPT1mLnN0YXR1c3x8MD09Zi5zdGF0dXMmJmYucmVzcG9uc2UpcihmLnJlc3BvbnNlKTtlbHNle3ZhciBBPXZyKGUpO0E/cihBLmJ1ZmZlcik6aSgpfX0sZi5vbmVycm9yPWksZi5zZW5kKG51bGwpfSx2b2lkIDAhPT1hcmd1bWVudHMmJihkLmFyZ3VtZW50cz1hcmd1bWVudHMpLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSlkLnByaW50fHwoZC5wcmludD1mdW5jdGlvbihBKXtjb25zb2xlLmxvZyhBKX0pLGQucHJpbnRFcnJ8fChkLnByaW50RXJyPWZ1bmN0aW9uKEEpe2NvbnNvbGUud2FybihBKX0pO2Vsc2V7ZC5wcmludHx8KGQucHJpbnQ9ZnVuY3Rpb24oQSl7fSl9dm9pZCAwPT09ZC5zZXRXaW5kb3dUaXRsZSYmKGQuc2V0V2luZG93VGl0bGU9ZnVuY3Rpb24oQSl7ZG9jdW1lbnQudGl0bGU9QX0pfWZvcihTciBpbiBkLnByaW50fHwoZC5wcmludD1mdW5jdGlvbigpe30pLGQucHJpbnRFcnJ8fChkLnByaW50RXJyPWQucHJpbnQpLGQuYXJndW1lbnRzfHwoZC5hcmd1bWVudHM9W10pLGQudGhpc1Byb2dyYW18fChkLnRoaXNQcm9ncmFtPSIuL3RoaXMucHJvZ3JhbSIpLGQucXVpdHx8KGQucXVpdD1mdW5jdGlvbihBLGUpe3Rocm93IGV9KSxkLnByaW50PWQucHJpbnQsZC5wcmludEVycj1kLnByaW50RXJyLGQucHJlUnVuPVtdLGQucG9zdFJ1bj1bXSxBKUEuaGFzT3duUHJvcGVydHkoU3IpJiYoZFtTcl09QVtTcl0pO0E9dm9pZCAwO3ZhciBrPXtzZXRUZW1wUmV0MDpmdW5jdGlvbihBKXtyZXR1cm4gdGVtcFJldDA9QX0sZ2V0VGVtcFJldDA6ZnVuY3Rpb24oKXtyZXR1cm4gdGVtcFJldDB9LHN0YWNrU2F2ZTpmdW5jdGlvbigpe3JldHVybiBffSxzdGFja1Jlc3RvcmU6ZnVuY3Rpb24oQSl7Xz1BfSxnZXROYXRpdmVUeXBlU2l6ZTpmdW5jdGlvbihBKXtzd2l0Y2goQSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIDE7Y2FzZSJpMTYiOnJldHVybiAyO2Nhc2UiaTMyIjpyZXR1cm4gNDtjYXNlImk2NCI6cmV0dXJuIDg7Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJkb3VibGUiOnJldHVybiA4O2RlZmF1bHQ6aWYoIioiPT09QVtBLmxlbmd0aC0xXSlyZXR1cm4gay5RVUFOVFVNX1NJWkU7aWYoImkiIT09QVswXSlyZXR1cm4gMDt2YXIgZT1wYXJzZUludChBLnN1YnN0cigxKSk7cmV0dXJuIGgoZSU4PT0wKSxlLzh9fSxnZXROYXRpdmVGaWVsZFNpemU6ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgubWF4KGsuZ2V0TmF0aXZlVHlwZVNpemUoQSksay5RVUFOVFVNX1NJWkUpfSxTVEFDS19BTElHTjoxNixwcmVwVmFyYXJnOmZ1bmN0aW9uKEEsZSl7cmV0dXJuImRvdWJsZSI9PT1lfHwiaTY0Ij09PWU/NyZBJiYoaCg0PT0oNyZBKSksQSs9NCk6aCgwPT0oMyZBKSksQX0sZ2V0QWxpZ25TaXplOmZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnx8Imk2NCIhPUEmJiJkb3VibGUiIT1BP0E/TWF0aC5taW4oZXx8KEE/ay5nZXROYXRpdmVGaWVsZFNpemUoQSk6MCksay5RVUFOVFVNX1NJWkUpOk1hdGgubWluKGUsOCk6OH0sZHluQ2FsbDpmdW5jdGlvbihBLGUscil7cmV0dXJuIHImJnIubGVuZ3RoP2RbImR5bkNhbGxfIitBXS5hcHBseShudWxsLFtlXS5jb25jYXQocikpOmRbImR5bkNhbGxfIitBXS5jYWxsKG51bGwsZSl9LGZ1bmN0aW9uUG9pbnRlcnM6W10sYWRkRnVuY3Rpb246ZnVuY3Rpb24oQSl7Zm9yKHZhciBlPTA7ZTxrLmZ1bmN0aW9uUG9pbnRlcnMubGVuZ3RoO2UrKylpZighay5mdW5jdGlvblBvaW50ZXJzW2VdKXJldHVybiBrLmZ1bmN0aW9uUG9pbnRlcnNbZV09QSwyKigxK2UpO3Rocm93IkZpbmlzaGVkIHVwIGFsbCByZXNlcnZlZCBmdW5jdGlvbiBwb2ludGVycy4gVXNlIGEgaGlnaGVyIHZhbHVlIGZvciBSRVNFUlZFRF9GVU5DVElPTl9QT0lOVEVSUy4ifSxyZW1vdmVGdW5jdGlvbjpmdW5jdGlvbihBKXtrLmZ1bmN0aW9uUG9pbnRlcnNbKEEtMikvMl09bnVsbH0sd2Fybk9uY2U6ZnVuY3Rpb24oQSl7ay53YXJuT25jZS5zaG93bnx8KGsud2Fybk9uY2Uuc2hvd249e30pLGsud2Fybk9uY2Uuc2hvd25bQV18fChrLndhcm5PbmNlLnNob3duW0FdPTEsZC5wcmludEVycihBKSl9LGZ1bmNXcmFwcGVyczp7fSxnZXRGdW5jV3JhcHBlcjpmdW5jdGlvbihlLHIpe2lmKGUpe2gociksay5mdW5jV3JhcHBlcnNbcl18fChrLmZ1bmNXcmFwcGVyc1tyXT17fSk7dmFyIEE9ay5mdW5jV3JhcHBlcnNbcl07cmV0dXJuIEFbZV18fCgxPT09ci5sZW5ndGg/QVtlXT1mdW5jdGlvbigpe3JldHVybiBrLmR5bkNhbGwocixlKX06Mj09PXIubGVuZ3RoP0FbZV09ZnVuY3Rpb24oQSl7cmV0dXJuIGsuZHluQ2FsbChyLGUsW0FdKX06QVtlXT1mdW5jdGlvbigpe3JldHVybiBrLmR5bkNhbGwocixlLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksQVtlXX19LGdldENvbXBpbGVyU2V0dGluZzpmdW5jdGlvbihBKXt0aHJvdyJZb3UgbXVzdCBidWlsZCB3aXRoIC1zIFJFVEFJTl9DT01QSUxFUl9TRVRUSU5HUz0xIGZvciBSdW50aW1lLmdldENvbXBpbGVyU2V0dGluZyBvciBlbXNjcmlwdGVuX2dldF9jb21waWxlcl9zZXR0aW5nIHRvIHdvcmsifSxzdGFja0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlPV87cmV0dXJuIF89KF89XytBfDApKzE1Ji0xNixlfSxzdGF0aWNBbGxvYzpmdW5jdGlvbihBKXt2YXIgZT1SO3JldHVybiBSPShSPVIrQXwwKSsxNSYtMTYsZX0sZHluYW1pY0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlPUlbRD4+Ml0scj0tMTYmKGUrQSsxNXwwKTtpZigoSVtEPj4yXT1yLEg8PXIpJiYheigpKXJldHVybiBJW0Q+PjJdPWUsMDtyZXR1cm4gZX0sYWxpZ25NZW1vcnk6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQT1NYXRoLmNlaWwoQS8oZXx8MTYpKSooZXx8MTYpfSxtYWtlQmlnSW50OmZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcj8rKEE+Pj4wKSs0Mjk0OTY3Mjk2KihlPj4+MCk6KyhBPj4+MCkrNDI5NDk2NzI5NiooMHxlKX0sR0xPQkFMX0JBU0U6OCxRVUFOVFVNX1NJWkU6NCxfX2R1bW15X186MH07ZC5SdW50aW1lPWs7dmFyIG49MDtmdW5jdGlvbiBoKEEsZSl7QXx8TXIoIkFzc2VydGlvbiBmYWlsZWQ6ICIrZSl9ZnVuY3Rpb24gdyhBLGUscil7c3dpdGNoKCIqIj09PShyPXJ8fCJpOCIpLmNoYXJBdChyLmxlbmd0aC0xKSYmKHI9ImkzMiIpLHIpe2Nhc2UiaTEiOmNhc2UiaTgiOkJbQT4+MF09ZTticmVhaztjYXNlImkxNiI6WFtBPj4xXT1lO2JyZWFrO2Nhc2UiaTMyIjpJW0E+PjJdPWU7YnJlYWs7Y2FzZSJpNjQiOnRlbXBJNjQ9W2U+Pj4wLCh0ZW1wRG91YmxlPWUsMTw9K2lBKHRlbXBEb3VibGUpPzA8dGVtcERvdWJsZT8oMHx0QSgrbkEodGVtcERvdWJsZS80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K2ZBKCh0ZW1wRG91YmxlLSh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxJW0E+PjJdPXRlbXBJNjRbMF0sSVtBKzQ+PjJdPXRlbXBJNjRbMV07YnJlYWs7Y2FzZSJmbG9hdCI6R1tBPj4yXT1lO2JyZWFrO2Nhc2UiZG91YmxlIjpWW0E+PjNdPWU7YnJlYWs7ZGVmYXVsdDpNcigiaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogIityKX19dmFyIHQ9MCx2PTIsbT00O2Z1bmN0aW9uIGEoQSxlLHIsaSl7dmFyIGYsbjtuPSJudW1iZXIiPT10eXBlb2YgQT8oZj0hMCxBKTooZj0hMSxBLmxlbmd0aCk7dmFyIHQsbz0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsO2lmKHQ9cj09bT9pOlsiZnVuY3Rpb24iPT10eXBlb2YgR3I/R3I6ay5zdGF0aWNBbGxvYyxrLnN0YWNrQWxsb2Msay5zdGF0aWNBbGxvYyxrLmR5bmFtaWNBbGxvY11bdm9pZCAwPT09cj92OnJdKE1hdGgubWF4KG4sbz8xOmUubGVuZ3RoKSksZil7dmFyIGE7Zm9yKGgoMD09KDMmKGk9dCkpKSxhPXQrKC00Jm4pO2k8YTtpKz00KUlbaT4+Ml09MDtmb3IoYT10K247aTxhOylCW2krKz4+MF09MDtyZXR1cm4gdH1pZigiaTgiPT09bylyZXR1cm4gQS5zdWJhcnJheXx8QS5zbGljZT9FLnNldChBLHQpOkUuc2V0KG5ldyBVaW50OEFycmF5KEEpLHQpLHQ7Zm9yKHZhciBjLGwsdSxiPTA7YjxuOyl7dmFyIHM9QVtiXTsiZnVuY3Rpb24iPT10eXBlb2YgcyYmKHM9ay5nZXRGdW5jdGlvbkluZGV4KHMpKSwwIT09KGM9b3x8ZVtiXSk/KCJpNjQiPT1jJiYoYz0iaTMyIiksdyh0K2IscyxjKSx1IT09YyYmKGw9ay5nZXROYXRpdmVUeXBlU2l6ZShjKSx1PWMpLGIrPWwpOmIrK31yZXR1cm4gdH1mdW5jdGlvbiBnKEEsZSl7aWYoMD09PWV8fCFBKXJldHVybiIiO2Zvcih2YXIgcixpPTAsZj0wO2l8PXI9RVtBK2Y+PjBdLCgwIT1yfHxlKSYmKGYrKywhZXx8ZiE9ZSk7KTtlPWV8fGY7dmFyIG49IiI7aWYoaTwxMjgpe2Zvcih2YXIgdDswPGU7KXQ9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsRS5zdWJhcnJheShBLEErTWF0aC5taW4oZSwxMDI0KSkpLG49bj9uK3Q6dCxBKz0xMDI0LGUtPTEwMjQ7cmV0dXJuIG59cmV0dXJuIGMoRSxBKX1kLkFMTE9DX05PUk1BTD10LGQuQUxMT0NfU1RBQ0s9MSxkLkFMTE9DX1NUQVRJQz12LGQuQUxMT0NfRFlOQU1JQz0zLGQuQUxMT0NfTk9ORT1tLGQuZ2V0TWVtb3J5PWZ1bmN0aW9uKEEpe3JldHVybiBOP0FBP0dyKEEpOmsuZHluYW1pY0FsbG9jKEEpOmsuc3RhdGljQWxsb2MoQSl9O3ZhciB1PSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIGMoQSxlKXtmb3IodmFyIHI9ZTtBW3JdOykrK3I7aWYoMTY8ci1lJiZBLnN1YmFycmF5JiZ1KXJldHVybiB1LmRlY29kZShBLnN1YmFycmF5KGUscikpO2Zvcih2YXIgaSxmLG4sdCxvLGE9IiI7Oyl7aWYoIShpPUFbZSsrXSkpcmV0dXJuIGE7aWYoMTI4JmkpaWYoZj02MyZBW2UrK10sMTkyIT0oMjI0JmkpKWlmKG49NjMmQVtlKytdLChpPTIyND09KDI0MCZpKT8oMTUmaSk8PDEyfGY8PDZ8bjoodD02MyZBW2UrK10sMjQwPT0oMjQ4JmkpPyg3JmkpPDwxOHxmPDwxMnxuPDw2fHQ6KG89NjMmQVtlKytdLDI0OD09KDI1MiZpKT8oMyZpKTw8MjR8Zjw8MTh8bjw8MTJ8dDw8NnxvOigxJmkpPDwzMHxmPDwyNHxuPDwxOHx0PDwxMnxvPDw2fDYzJkFbZSsrXSkpKTw2NTUzNilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2Vsc2V7dmFyIGM9aS02NTUzNjthKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGM+PjEwLDU2MzIwfDEwMjMmYyl9ZWxzZSBhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZpKTw8NnxmKTtlbHNlIGErPVN0cmluZy5mcm9tQ2hhckNvZGUoaSl9fWZ1bmN0aW9uIGIoQSxlLHIsaSl7aWYoISgwPGkpKXJldHVybiAwO2Zvcih2YXIgZj1yLG49citpLTEsdD0wO3Q8QS5sZW5ndGg7Kyt0KXt2YXIgbz1BLmNoYXJDb2RlQXQodCk7aWYoNTUyOTY8PW8mJm88PTU3MzQzJiYobz02NTUzNisoKDEwMjMmbyk8PDEwKXwxMDIzJkEuY2hhckNvZGVBdCgrK3QpKSxvPD0xMjcpe2lmKG48PXIpYnJlYWs7ZVtyKytdPW99ZWxzZSBpZihvPD0yMDQ3KXtpZihuPD1yKzEpYnJlYWs7ZVtyKytdPTE5MnxvPj42LGVbcisrXT0xMjh8NjMmb31lbHNlIGlmKG88PTY1NTM1KXtpZihuPD1yKzIpYnJlYWs7ZVtyKytdPTIyNHxvPj4xMixlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2UgaWYobzw9MjA5NzE1MSl7aWYobjw9ciszKWJyZWFrO2VbcisrXT0yNDB8bz4+MTgsZVtyKytdPTEyOHxvPj4xMiY2MyxlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2UgaWYobzw9NjcxMDg4NjMpe2lmKG48PXIrNClicmVhaztlW3IrK109MjQ4fG8+PjI0LGVbcisrXT0xMjh8bz4+MTgmNjMsZVtyKytdPTEyOHxvPj4xMiY2MyxlW3IrK109MTI4fG8+PjYmNjMsZVtyKytdPTEyOHw2MyZvfWVsc2V7aWYobjw9cis1KWJyZWFrO2VbcisrXT0yNTJ8bz4+MzAsZVtyKytdPTEyOHxvPj4yNCY2MyxlW3IrK109MTI4fG8+PjE4JjYzLGVbcisrXT0xMjh8bz4+MTImNjMsZVtyKytdPTEyOHxvPj42JjYzLGVbcisrXT0xMjh8NjMmb319cmV0dXJuIGVbcl09MCxyLWZ9ZnVuY3Rpb24gcyhBLGUscil7cmV0dXJuIGIoQSxFLGUscil9ZnVuY3Rpb24gWihBKXtmb3IodmFyIGU9MCxyPTA7cjxBLmxlbmd0aDsrK3Ipe3ZhciBpPUEuY2hhckNvZGVBdChyKTs1NTI5Njw9aSYmaTw9NTczNDMmJihpPTY1NTM2KygoMTAyMyZpKTw8MTApfDEwMjMmQS5jaGFyQ29kZUF0KCsrcikpLGk8PTEyNz8rK2U6ZSs9aTw9MjA0Nz8yOmk8PTY1NTM1PzM6aTw9MjA5NzE1MT80Omk8PTY3MTA4ODYzPzU6Nn1yZXR1cm4gZX0idW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyJiZuZXcgVGV4dERlY29kZXIoInV0Zi0xNmxlIik7ZnVuY3Rpb24gcCgpe3ZhciBBPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IEVycm9yO2lmKCFlLnN0YWNrKXt0cnl7dGhyb3cgbmV3IEVycm9yKDApfWNhdGNoKEEpe2U9QX1pZighZS5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiBlLnN0YWNrLnRvU3RyaW5nKCl9KCk7cmV0dXJuIGQuZXh0cmFTdGFja1RyYWNlJiYoQSs9IlxcbiIrZC5leHRyYVN0YWNrVHJhY2UoKSksQS5yZXBsYWNlKC9fX1pbXFx3XFxkX10rL2csZnVuY3Rpb24oQSl7dmFyIGU9QTtyZXR1cm4gQT09PWU/QTpBKyIgWyIrZSsiXSJ9KX12YXIgeSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE09NjU1MzYsVD0xNjc3NzIxNixVPTE2Nzc3MjE2O2Z1bmN0aW9uIFMoQSxlKXtyZXR1cm4gMDxBJWUmJihBKz1lLUElZSksQX1mdW5jdGlvbiBPKCl7ZC5IRUFQOD1CPW5ldyBJbnQ4QXJyYXkoeSksZC5IRUFQMTY9WD1uZXcgSW50MTZBcnJheSh5KSxkLkhFQVAzMj1JPW5ldyBJbnQzMkFycmF5KHkpLGQuSEVBUFU4PUU9bmV3IFVpbnQ4QXJyYXkoeSksZC5IRUFQVTE2PVc9bmV3IFVpbnQxNkFycmF5KHkpLGQuSEVBUFUzMj1DPW5ldyBVaW50MzJBcnJheSh5KSxkLkhFQVBGMzI9Rz1uZXcgRmxvYXQzMkFycmF5KHkpLGQuSEVBUEY2ND1WPW5ldyBGbG9hdDY0QXJyYXkoeSl9ZnVuY3Rpb24geigpe3ZhciBBPWQudXNpbmdXYXNtP006VCxlPTIxNDc0ODM2NDgtQTtpZihJW0Q+PjJdPmUpcmV0dXJuITE7dmFyIHI9SDtmb3IoSD1NYXRoLm1heChILFUpO0g8SVtEPj4yXTspSD1IPD01MzY4NzA5MTI/UygyKkgsQSk6TWF0aC5taW4oUygoMypIKzIxNDc0ODM2NDgpLzQsQSksZSk7dmFyIGksZj1kLnJlYWxsb2NCdWZmZXIoSCk7cmV0dXJuIGYmJmYuYnl0ZUxlbmd0aD09SD8oaT1mLGQuYnVmZmVyPXk9aSxPKCksITApOihIPXIsITEpfVI9Xz1EPTAsTj0hMSxkLnJlYWxsb2NCdWZmZXJ8fChkLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQSl7dmFyIGU7dHJ5e2lmKEFycmF5QnVmZmVyLnRyYW5zZmVyKWU9QXJyYXlCdWZmZXIudHJhbnNmZXIoeSxBKTtlbHNle3ZhciByPUI7ZT1uZXcgQXJyYXlCdWZmZXIoQSksbmV3IEludDhBcnJheShlKS5zZXQocil9fWNhdGNoKEEpe3JldHVybiExfXJldHVybiEhSXIoZSkmJmV9KTt0cnl7KEo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2goT3Ipe0o9ZnVuY3Rpb24oQSl7cmV0dXJuIEEuYnl0ZUxlbmd0aH19dmFyIGo9ZC5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxIPWQuVE9UQUxfTUVNT1JZfHwxNjc3NzIxNjtpZihIPGomJmQucHJpbnRFcnIoIlRPVEFMX01FTU9SWSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gVE9UQUxfU1RBQ0ssIHdhcyAiK0grIiEgKFRPVEFMX1NUQUNLPSIraisiKSIpLHk9ZC5idWZmZXI/ZC5idWZmZXI6bmV3IEFycmF5QnVmZmVyKEgpLE8oKSxJWzBdPTE2Njg1MDkwMjksWFsxXT0yNTQ1OSwxMTUhPT1FWzJdfHw5OSE9PUVbM10pdGhyb3ciUnVudGltZSBlcnJvcjogZXhwZWN0ZWQgdGhlIHN5c3RlbSB0byBiZSBsaXR0bGUtZW5kaWFuISI7ZnVuY3Rpb24geChBKXtmb3IoOzA8QS5sZW5ndGg7KXt2YXIgZT1BLnNoaWZ0KCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpe3ZhciByPWUuZnVuYzsibnVtYmVyIj09dHlwZW9mIHI/dm9pZCAwPT09ZS5hcmc/ZC5keW5DYWxsX3Yocik6ZC5keW5DYWxsX3ZpKHIsZS5hcmcpOnIodm9pZCAwPT09ZS5hcmc/bnVsbDplLmFyZyl9ZWxzZSBlKCl9fWQuSEVBUD12b2lkIDAsZC5idWZmZXI9eSxkLkhFQVA4PUIsZC5IRUFQMTY9WCxkLkhFQVAzMj1JLGQuSEVBUFU4PUUsZC5IRUFQVTE2PVcsZC5IRUFQVTMyPUMsZC5IRUFQRjMyPUcsZC5IRUFQRjY0PVY7dmFyIFA9W10sTD1bXSxLPVtdLHE9W10sJD1bXSxBQT0hMTtmdW5jdGlvbiBlQShBLGUpe0Iuc2V0KEEsZSl9ZnVuY3Rpb24gckEoQSxlLHIpe2Zvcih2YXIgaT0wO2k8QS5sZW5ndGg7KytpKUJbZSsrPj4wXT1BLmNoYXJDb2RlQXQoaSk7cnx8KEJbZT4+MF09MCl9TWF0aC5pbXVsJiYtNT09PU1hdGguaW11bCg0Mjk0OTY3Mjk1LDUpfHwoTWF0aC5pbXVsPWZ1bmN0aW9uKEEsZSl7dmFyIHI9NjU1MzUmQSxpPTY1NTM1JmU7cmV0dXJuIHIqaSsoKEE+Pj4xNikqaStyKihlPj4+MTYpPDwxNil8MH0pLE1hdGguaW11bD1NYXRoLmltdWwsTWF0aC5jbHozMnx8KE1hdGguY2x6MzI9ZnVuY3Rpb24oQSl7QT4+Pj0wO2Zvcih2YXIgZT0wO2U8MzI7ZSsrKWlmKEEmMTw8MzEtZSlyZXR1cm4gZTtyZXR1cm4gMzJ9KSxNYXRoLmNsejMyPU1hdGguY2x6MzIsTWF0aC50cnVuY3x8KE1hdGgudHJ1bmM9ZnVuY3Rpb24oQSl7cmV0dXJuIEE8MD9NYXRoLmNlaWwoQSk6TWF0aC5mbG9vcihBKX0pLE1hdGgudHJ1bmM9TWF0aC50cnVuYzt2YXIgaUE9TWF0aC5hYnMsZkE9KE1hdGguY29zLE1hdGguc2luLE1hdGgudGFuLE1hdGguYWNvcyxNYXRoLmFzaW4sTWF0aC5hdGFuLE1hdGguYXRhbjIsTWF0aC5leHAsTWF0aC5sb2csTWF0aC5zcXJ0LE1hdGguY2VpbCksbkE9TWF0aC5mbG9vcix0QT0oTWF0aC5wb3csTWF0aC5pbXVsLE1hdGguZnJvdW5kLE1hdGgucm91bmQsTWF0aC5taW4pLG9BPShNYXRoLmNsejMyLE1hdGgudHJ1bmMsMCksYUE9bnVsbCxjQT1udWxsO2Z1bmN0aW9uIGxBKEEpe29BKyssZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMob0EpfWZ1bmN0aW9uIHVBKEEpe2lmKG9BLS0sZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMob0EpLDA9PW9BJiYobnVsbCE9PWFBJiYoY2xlYXJJbnRlcnZhbChhQSksYUE9bnVsbCksY0EpKXt2YXIgZT1jQTtjQT1udWxsLGUoKX19ZC5hZGRSdW5EZXBlbmRlbmN5PWxBLGQucmVtb3ZlUnVuRGVwZW5kZW5jeT11QSxkLnByZWxvYWRlZEltYWdlcz17fSxkLnByZWxvYWRlZEF1ZGlvcz17fTt2YXIgYkE9bnVsbDtGPWsuR0xPQkFMX0JBU0UsUj1GKzc5NjY0LEwucHVzaCh7ZnVuYzpmdW5jdGlvbigpe1pyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe3lyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe0JyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe0VyKCl9fSx7ZnVuYzpmdW5jdGlvbigpe3ByKCl9fSx7ZnVuYzpmdW5jdGlvbigpe1hyKCl9fSk7dmFyIHNBPVI7ZnVuY3Rpb24gZEEoKXtyZXR1cm4hIWRBLnVuY2F1Z2h0X2V4Y2VwdGlvbn1SKz0xNjt2YXIga0E9e2xhc3Q6MCxjYXVnaHQ6W10saW5mb3M6e30sZGVBZGp1c3Q6ZnVuY3Rpb24oQSl7aWYoIUF8fGtBLmluZm9zW0FdKXJldHVybiBBO2Zvcih2YXIgZSBpbiBrQS5pbmZvcyl7aWYoa0EuaW5mb3NbZV0uYWRqdXN0ZWQ9PT1BKXJldHVybiBlfXJldHVybiBBfSxhZGRSZWY6ZnVuY3Rpb24oQSl7QSYma0EuaW5mb3NbQV0ucmVmY291bnQrK30sZGVjUmVmOmZ1bmN0aW9uKEEpe2lmKEEpe3ZhciBlPWtBLmluZm9zW0FdO2goMDxlLnJlZmNvdW50KSxlLnJlZmNvdW50LS0sMCE9PWUucmVmY291bnR8fGUucmV0aHJvd258fChlLmRlc3RydWN0b3ImJmQuZHluQ2FsbF92aShlLmRlc3RydWN0b3IsQSksZGVsZXRlIGtBLmluZm9zW0FdLF9fX2N4YV9mcmVlX2V4Y2VwdGlvbihBKSl9fSxjbGVhclJlZjpmdW5jdGlvbihBKXtBJiYoa0EuaW5mb3NbQV0ucmVmY291bnQ9MCl9fTt2YXIgaEE9e0VQRVJNOjEsRU5PRU5UOjIsRVNSQ0g6MyxFSU5UUjo0LEVJTzo1LEVOWElPOjYsRTJCSUc6NyxFTk9FWEVDOjgsRUJBREY6OSxFQ0hJTEQ6MTAsRUFHQUlOOjExLEVXT1VMREJMT0NLOjExLEVOT01FTToxMixFQUNDRVM6MTMsRUZBVUxUOjE0LEVOT1RCTEs6MTUsRUJVU1k6MTYsRUVYSVNUOjE3LEVYREVWOjE4LEVOT0RFVjoxOSxFTk9URElSOjIwLEVJU0RJUjoyMSxFSU5WQUw6MjIsRU5GSUxFOjIzLEVNRklMRToyNCxFTk9UVFk6MjUsRVRYVEJTWToyNixFRkJJRzoyNyxFTk9TUEM6MjgsRVNQSVBFOjI5LEVST0ZTOjMwLEVNTElOSzozMSxFUElQRTozMixFRE9NOjMzLEVSQU5HRTozNCxFTk9NU0c6NDIsRUlEUk06NDMsRUNIUk5HOjQ0LEVMMk5TWU5DOjQ1LEVMM0hMVDo0NixFTDNSU1Q6NDcsRUxOUk5HOjQ4LEVVTkFUQ0g6NDksRU5PQ1NJOjUwLEVMMkhMVDo1MSxFREVBRExLOjM1LEVOT0xDSzozNyxFQkFERTo1MixFQkFEUjo1MyxFWEZVTEw6NTQsRU5PQU5POjU1LEVCQURSUUM6NTYsRUJBRFNMVDo1NyxFREVBRExPQ0s6MzUsRUJGT05UOjU5LEVOT1NUUjo2MCxFTk9EQVRBOjYxLEVUSU1FOjYyLEVOT1NSOjYzLEVOT05FVDo2NCxFTk9QS0c6NjUsRVJFTU9URTo2NixFTk9MSU5LOjY3LEVBRFY6NjgsRVNSTU5UOjY5LEVDT01NOjcwLEVQUk9UTzo3MSxFTVVMVElIT1A6NzIsRURPVERPVDo3MyxFQkFETVNHOjc0LEVOT1RVTklROjc2LEVCQURGRDo3NyxFUkVNQ0hHOjc4LEVMSUJBQ0M6NzksRUxJQkJBRDo4MCxFTElCU0NOOjgxLEVMSUJNQVg6ODIsRUxJQkVYRUM6ODMsRU5PU1lTOjM4LEVOT1RFTVBUWTozOSxFTkFNRVRPT0xPTkc6MzYsRUxPT1A6NDAsRU9QTk9UU1VQUDo5NSxFUEZOT1NVUFBPUlQ6OTYsRUNPTk5SRVNFVDoxMDQsRU5PQlVGUzoxMDUsRUFGTk9TVVBQT1JUOjk3LEVQUk9UT1RZUEU6OTEsRU5PVFNPQ0s6ODgsRU5PUFJPVE9PUFQ6OTIsRVNIVVRET1dOOjEwOCxFQ09OTlJFRlVTRUQ6MTExLEVBRERSSU5VU0U6OTgsRUNPTk5BQk9SVEVEOjEwMyxFTkVUVU5SRUFDSDoxMDEsRU5FVERPV046MTAwLEVUSU1FRE9VVDoxMTAsRUhPU1RET1dOOjExMixFSE9TVFVOUkVBQ0g6MTEzLEVJTlBST0dSRVNTOjExNSxFQUxSRUFEWToxMTQsRURFU1RBRERSUkVROjg5LEVNU0dTSVpFOjkwLEVQUk9UT05PU1VQUE9SVDo5MyxFU09DS1ROT1NVUFBPUlQ6OTQsRUFERFJOT1RBVkFJTDo5OSxFTkVUUkVTRVQ6MTAyLEVJU0NPTk46MTA2LEVOT1RDT05OOjEwNyxFVE9PTUFOWVJFRlM6MTA5LEVVU0VSUzo4NyxFRFFVT1Q6MTIyLEVTVEFMRToxMTYsRU5PVFNVUDo5NSxFTk9NRURJVU06MTIzLEVJTFNFUTo4NCxFT1ZFUkZMT1c6NzUsRUNBTkNFTEVEOjEyNSxFTk9UUkVDT1ZFUkFCTEU6MTMxLEVPV05FUkRFQUQ6MTMwLEVTVFJQSVBFOjg2fTtmdW5jdGlvbiB3QShBKXtyZXR1cm4gZC5fX19lcnJub19sb2NhdGlvbiYmKElbZC5fX19lcnJub19sb2NhdGlvbigpPj4yXT1BKSxBfXZhciB2QT17MDoiU3VjY2VzcyIsMToiTm90IHN1cGVyLXVzZXIiLDI6Ik5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiLDM6Ik5vIHN1Y2ggcHJvY2VzcyIsNDoiSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiLDU6IkkvTyBlcnJvciIsNjoiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIsNzoiQXJnIGxpc3QgdG9vIGxvbmciLDg6IkV4ZWMgZm9ybWF0IGVycm9yIiw5OiJCYWQgZmlsZSBudW1iZXIiLDEwOiJObyBjaGlsZHJlbiIsMTE6Ik5vIG1vcmUgcHJvY2Vzc2VzIiwxMjoiTm90IGVub3VnaCBjb3JlIiwxMzoiUGVybWlzc2lvbiBkZW5pZWQiLDE0OiJCYWQgYWRkcmVzcyIsMTU6IkJsb2NrIGRldmljZSByZXF1aXJlZCIsMTY6Ik1vdW50IGRldmljZSBidXN5IiwxNzoiRmlsZSBleGlzdHMiLDE4OiJDcm9zcy1kZXZpY2UgbGluayIsMTk6Ik5vIHN1Y2ggZGV2aWNlIiwyMDoiTm90IGEgZGlyZWN0b3J5IiwyMToiSXMgYSBkaXJlY3RvcnkiLDIyOiJJbnZhbGlkIGFyZ3VtZW50IiwyMzoiVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0iLDI0OiJUb28gbWFueSBvcGVuIGZpbGVzIiwyNToiTm90IGEgdHlwZXdyaXRlciIsMjY6IlRleHQgZmlsZSBidXN5IiwyNzoiRmlsZSB0b28gbGFyZ2UiLDI4OiJObyBzcGFjZSBsZWZ0IG9uIGRldmljZSIsMjk6IklsbGVnYWwgc2VlayIsMzA6IlJlYWQgb25seSBmaWxlIHN5c3RlbSIsMzE6IlRvbyBtYW55IGxpbmtzIiwzMjoiQnJva2VuIHBpcGUiLDMzOiJNYXRoIGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmMiLDM0OiJNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSIsMzU6IkZpbGUgbG9ja2luZyBkZWFkbG9jayBlcnJvciIsMzY6IkZpbGUgb3IgcGF0aCBuYW1lIHRvbyBsb25nIiwzNzoiTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSIsMzg6IkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIsMzk6IkRpcmVjdG9yeSBub3QgZW1wdHkiLDQwOiJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyIsNDI6Ik5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIiw0MzoiSWRlbnRpZmllciByZW1vdmVkIiw0NDoiQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIiw0NToiTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkIiw0NjoiTGV2ZWwgMyBoYWx0ZWQiLDQ3OiJMZXZlbCAzIHJlc2V0Iiw0ODoiTGluayBudW1iZXIgb3V0IG9mIHJhbmdlIiw0OToiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCIsNTA6Ik5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlIiw1MToiTGV2ZWwgMiBoYWx0ZWQiLDUyOiJJbnZhbGlkIGV4Y2hhbmdlIiw1MzoiSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IiLDU0OiJFeGNoYW5nZSBmdWxsIiw1NToiTm8gYW5vZGUiLDU2OiJJbnZhbGlkIHJlcXVlc3QgY29kZSIsNTc6IkludmFsaWQgc2xvdCIsNTk6IkJhZCBmb250IGZpbGUgZm10Iiw2MDoiRGV2aWNlIG5vdCBhIHN0cmVhbSIsNjE6Ik5vIGRhdGEgKGZvciBubyBkZWxheSBpbykiLDYyOiJUaW1lciBleHBpcmVkIiw2MzoiT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzIiw2NDoiTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsiLDY1OiJQYWNrYWdlIG5vdCBpbnN0YWxsZWQiLDY2OiJUaGUgb2JqZWN0IGlzIHJlbW90ZSIsNjc6IlRoZSBsaW5rIGhhcyBiZWVuIHNldmVyZWQiLDY4OiJBZHZlcnRpc2UgZXJyb3IiLDY5OiJTcm1vdW50IGVycm9yIiw3MDoiQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kIiw3MToiUHJvdG9jb2wgZXJyb3IiLDcyOiJNdWx0aWhvcCBhdHRlbXB0ZWQiLDczOiJDcm9zcyBtb3VudCBwb2ludCAobm90IHJlYWxseSBlcnJvcikiLDc0OiJUcnlpbmcgdG8gcmVhZCB1bnJlYWRhYmxlIG1lc3NhZ2UiLDc1OiJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIiw3NjoiR2l2ZW4gbG9nLiBuYW1lIG5vdCB1bmlxdWUiLDc3OiJmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uIiw3ODoiUmVtb3RlIGFkZHJlc3MgY2hhbmdlZCIsNzk6IkNhbiAgIGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliIiw4MDoiQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWIiLDgxOiIubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkIiw4MjoiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnMiLDgzOiJBdHRlbXB0aW5nIHRvIGV4ZWMgYSBzaGFyZWQgbGlicmFyeSIsODQ6IklsbGVnYWwgYnl0ZSBzZXF1ZW5jZSIsODY6IlN0cmVhbXMgcGlwZSBlcnJvciIsODc6IlRvbyBtYW55IHVzZXJzIiw4ODoiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0Iiw4OToiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCIsOTA6Ik1lc3NhZ2UgdG9vIGxvbmciLDkxOiJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiLDkyOiJQcm90b2NvbCBub3QgYXZhaWxhYmxlIiw5MzoiVW5rbm93biBwcm90b2NvbCIsOTQ6IlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiLDk1OiJOb3Qgc3VwcG9ydGVkIiw5NjoiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiLDk3OiJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIGZhbWlseSIsOTg6IkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiLDk5OiJBZGRyZXNzIG5vdCBhdmFpbGFibGUiLDEwMDoiTmV0d29yayBpbnRlcmZhY2UgaXMgbm90IGNvbmZpZ3VyZWQiLDEwMToiTmV0d29yayBpcyB1bnJlYWNoYWJsZSIsMTAyOiJDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsiLDEwMzoiQ29ubmVjdGlvbiBhYm9ydGVkIiwxMDQ6IkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIsMTA1OiJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIiwxMDY6IlNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCIsMTA3OiJTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCIsMTA4OiJDYW4ndCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93biIsMTA5OiJUb28gbWFueSByZWZlcmVuY2VzIiwxMTA6IkNvbm5lY3Rpb24gdGltZWQgb3V0IiwxMTE6IkNvbm5lY3Rpb24gcmVmdXNlZCIsMTEyOiJIb3N0IGlzIGRvd24iLDExMzoiSG9zdCBpcyB1bnJlYWNoYWJsZSIsMTE0OiJTb2NrZXQgYWxyZWFkeSBjb25uZWN0ZWQiLDExNToiQ29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIiwxMTY6IlN0YWxlIGZpbGUgaGFuZGxlIiwxMjI6IlF1b3RhIGV4Y2VlZGVkIiwxMjM6Ik5vIG1lZGl1bSAoaW4gdGFwZSBkcml2ZSkiLDEyNToiT3BlcmF0aW9uIGNhbmNlbGVkIiwxMzA6IlByZXZpb3VzIG93bmVyIGRpZWQiLDEzMToiU3RhdGUgbm90IHJlY292ZXJhYmxlIn0sbUE9e3NwbGl0UGF0aDpmdW5jdGlvbihBKXtyZXR1cm4vXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLy5leGVjKEEpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTpmdW5jdGlvbihBLGUpe2Zvcih2YXIgcj0wLGk9QS5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIGY9QVtpXTsiLiI9PT1mP0Euc3BsaWNlKGksMSk6Ii4uIj09PWY/KEEuc3BsaWNlKGksMSkscisrKTpyJiYoQS5zcGxpY2UoaSwxKSxyLS0pfWlmKGUpZm9yKDtyO3ItLSlBLnVuc2hpZnQoIi4uIik7cmV0dXJuIEF9LG5vcm1hbGl6ZTpmdW5jdGlvbihBKXt2YXIgZT0iLyI9PT1BLmNoYXJBdCgwKSxyPSIvIj09PUEuc3Vic3RyKC0xKTtyZXR1cm4oQT1tQS5ub3JtYWxpemVBcnJheShBLnNwbGl0KCIvIikuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiEhQX0pLCFlKS5qb2luKCIvIikpfHxlfHwoQT0iLiIpLEEmJnImJihBKz0iLyIpLChlPyIvIjoiIikrQX0sZGlybmFtZTpmdW5jdGlvbihBKXt2YXIgZT1tQS5zcGxpdFBhdGgoQSkscj1lWzBdLGk9ZVsxXTtyZXR1cm4gcnx8aT9yKyhpPWkmJmkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpOiIuIn0sYmFzZW5hbWU6ZnVuY3Rpb24oQSl7aWYoIi8iPT09QSlyZXR1cm4iLyI7dmFyIGU9QS5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT9BOkEuc3Vic3RyKGUrMSl9LGV4dG5hbWU6ZnVuY3Rpb24oQSl7cmV0dXJuIG1BLnNwbGl0UGF0aChBKVszXX0sam9pbjpmdW5jdGlvbigpe3ZhciBBPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbUEubm9ybWFsaXplKEEuam9pbigiLyIpKX0sam9pbjI6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gbUEubm9ybWFsaXplKEErIi8iK2UpfSxyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBBPSIiLGU9ITEscj1hcmd1bWVudHMubGVuZ3RoLTE7LTE8PXImJiFlO3ItLSl7dmFyIGk9MDw9cj9hcmd1bWVudHNbcl06RUEuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIWkpcmV0dXJuIiI7QT1pKyIvIitBLGU9Ii8iPT09aS5jaGFyQXQoMCl9cmV0dXJuKGU/Ii8iOiIiKSsoQT1tQS5ub3JtYWxpemVBcnJheShBLnNwbGl0KCIvIikuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiEhQX0pLCFlKS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOmZ1bmN0aW9uKEEsZSl7ZnVuY3Rpb24gcihBKXtmb3IodmFyIGU9MDtlPEEubGVuZ3RoJiYiIj09PUFbZV07ZSsrKTtmb3IodmFyIHI9QS5sZW5ndGgtMTswPD1yJiYiIj09PUFbcl07ci0tKTtyZXR1cm4gcjxlP1tdOkEuc2xpY2UoZSxyLWUrMSl9QT1tQS5yZXNvbHZlKEEpLnN1YnN0cigxKSxlPW1BLnJlc29sdmUoZSkuc3Vic3RyKDEpO2Zvcih2YXIgaT1yKEEuc3BsaXQoIi8iKSksZj1yKGUuc3BsaXQoIi8iKSksbj1NYXRoLm1pbihpLmxlbmd0aCxmLmxlbmd0aCksdD1uLG89MDtvPG47bysrKWlmKGlbb10hPT1mW29dKXt0PW87YnJlYWt9dmFyIGE9W107Zm9yKG89dDtvPGkubGVuZ3RoO28rKylhLnB1c2goIi4uIik7cmV0dXJuKGE9YS5jb25jYXQoZi5zbGljZSh0KSkpLmpvaW4oIi8iKX19LGdBPXt0dHlzOltdLGluaXQ6ZnVuY3Rpb24oKXt9LHNodXRkb3duOmZ1bmN0aW9uKCl7fSxyZWdpc3RlcjpmdW5jdGlvbihBLGUpe2dBLnR0eXNbQV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6ZX0sRUEucmVnaXN0ZXJEZXZpY2UoQSxnQS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihBKXt2YXIgZT1nQS50dHlzW0Eubm9kZS5yZGV2XTtpZighZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO0EudHR5PWUsQS5zZWVrYWJsZT0hMX0sY2xvc2U6ZnVuY3Rpb24oQSl7QS50dHkub3BzLmZsdXNoKEEudHR5KX0sZmx1c2g6ZnVuY3Rpb24oQSl7QS50dHkub3BzLmZsdXNoKEEudHR5KX0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKCFBLnR0eXx8IUEudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTlhJTyk7Zm9yKHZhciBuPTAsdD0wO3Q8aTt0Kyspe3ZhciBvO3RyeXtvPUEudHR5Lm9wcy5nZXRfY2hhcihBLnR0eSl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1pZih2b2lkIDA9PT1vJiYwPT09bil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQUdBSU4pO2lmKG51bGw9PW8pYnJlYWs7bisrLGVbcit0XT1vfXJldHVybiBuJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYpe2lmKCFBLnR0eXx8IUEudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTlhJTyk7Zm9yKHZhciBuPTA7bjxpO24rKyl0cnl7QS50dHkub3BzLnB1dF9jaGFyKEEudHR5LGVbcituXSl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1yZXR1cm4gaSYmKEEubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksbn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6ZnVuY3Rpb24oQSl7aWYoIUEuaW5wdXQubGVuZ3RoKXt2YXIgZT1udWxsO2lmKG8pe3ZhciByPW5ldyBCdWZmZXIoMjU2KSxpPTAsZj0id2luMzIiIT1wcm9jZXNzLnBsYXRmb3JtLG49cHJvY2Vzcy5zdGRpbi5mZDtpZihmKXt2YXIgdD0hMTt0cnl7bj11ci5vcGVuU3luYygiL2Rldi9zdGRpbiIsInIiKSx0PSEwfWNhdGNoKEEpe319dHJ5e2k9dXIucmVhZFN5bmMobixyLDAsMjU2LG51bGwpfWNhdGNoKEEpe2lmKC0xPT1BLnRvU3RyaW5nKCkuaW5kZXhPZigiRU9GIikpdGhyb3cgQTtpPTB9dCYmdXIuY2xvc2VTeW5jKG4pLGU9MDxpP3Iuc2xpY2UoMCxpKS50b1N0cmluZygidXRmLTgiKTpudWxsfWVsc2UidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5wcm9tcHQ/bnVsbCE9PShlPXdpbmRvdy5wcm9tcHQoIklucHV0OiAiKSkmJihlKz0iXFxuIik6ImZ1bmN0aW9uIj09dHlwZW9mIHJlYWRsaW5lJiZudWxsIT09KGU9cmVhZGxpbmUoKSkmJihlKz0iXFxuIik7aWYoIWUpcmV0dXJuIG51bGw7QS5pbnB1dD1kcihlLCEwKX1yZXR1cm4gQS5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihBLGUpe251bGw9PT1lfHwxMD09PWU/KGQucHJpbnQoYyhBLm91dHB1dCwwKSksQS5vdXRwdXQ9W10pOjAhPWUmJkEub3V0cHV0LnB1c2goZSl9LGZsdXNoOmZ1bmN0aW9uKEEpe0Eub3V0cHV0JiYwPEEub3V0cHV0Lmxlbmd0aCYmKGQucHJpbnQoYyhBLm91dHB1dCwwKSksQS5vdXRwdXQ9W10pfX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6ZnVuY3Rpb24oQSxlKXtudWxsPT09ZXx8MTA9PT1lPyhkLnByaW50RXJyKGMoQS5vdXRwdXQsMCkpLEEub3V0cHV0PVtdKTowIT1lJiZBLm91dHB1dC5wdXNoKGUpfSxmbHVzaDpmdW5jdGlvbihBKXtBLm91dHB1dCYmMDxBLm91dHB1dC5sZW5ndGgmJihkLnByaW50RXJyKGMoQS5vdXRwdXQsMCkpLEEub3V0cHV0PVtdKX19fSxaQT17b3BzX3RhYmxlOm51bGwsbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIFpBLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oQSxlLHIsaSl7aWYoRUEuaXNCbGtkZXYocil8fEVBLmlzRklGTyhyKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7WkEub3BzX3RhYmxlfHwoWkEub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6WkEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOlpBLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOlpBLm5vZGVfb3BzLmxvb2t1cCxta25vZDpaQS5ub2RlX29wcy5ta25vZCxyZW5hbWU6WkEubm9kZV9vcHMucmVuYW1lLHVubGluazpaQS5ub2RlX29wcy51bmxpbmsscm1kaXI6WkEubm9kZV9vcHMucm1kaXIscmVhZGRpcjpaQS5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6WkEubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6WkEuc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOlpBLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpaQS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2VlazpaQS5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOlpBLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpaQS5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOlpBLnN0cmVhbV9vcHMuYWxsb2NhdGUsbW1hcDpaQS5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6WkEuc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6WkEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOlpBLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6WkEubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOlpBLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpaQS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06RUEuY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIGY9RUEuY3JlYXRlTm9kZShBLGUscixpKTtyZXR1cm4gRUEuaXNEaXIoZi5tb2RlKT8oZi5ub2RlX29wcz1aQS5vcHNfdGFibGUuZGlyLm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5kaXIuc3RyZWFtLGYuY29udGVudHM9e30pOkVBLmlzRmlsZShmLm1vZGUpPyhmLm5vZGVfb3BzPVpBLm9wc190YWJsZS5maWxlLm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5maWxlLnN0cmVhbSxmLnVzZWRCeXRlcz0wLGYuY29udGVudHM9bnVsbCk6RUEuaXNMaW5rKGYubW9kZSk/KGYubm9kZV9vcHM9WkEub3BzX3RhYmxlLmxpbmsubm9kZSxmLnN0cmVhbV9vcHM9WkEub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpFQS5pc0NocmRldihmLm1vZGUpJiYoZi5ub2RlX29wcz1aQS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsZi5zdHJlYW1fb3BzPVpBLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxmLnRpbWVzdGFtcD1EYXRlLm5vdygpLEEmJihBLmNvbnRlbnRzW2VdPWYpLGZ9LGdldEZpbGVEYXRhQXNSZWd1bGFyQXJyYXk6ZnVuY3Rpb24oQSl7aWYoQS5jb250ZW50cyYmQS5jb250ZW50cy5zdWJhcnJheSl7Zm9yKHZhciBlPVtdLHI9MDtyPEEudXNlZEJ5dGVzOysrcillLnB1c2goQS5jb250ZW50c1tyXSk7cmV0dXJuIGV9cmV0dXJuIEEuY29udGVudHN9LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmZ1bmN0aW9uKEEpe3JldHVybiBBLmNvbnRlbnRzP0EuY29udGVudHMuc3ViYXJyYXk/QS5jb250ZW50cy5zdWJhcnJheSgwLEEudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShBLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheX0sZXhwYW5kRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oQSxlKXtpZihBLmNvbnRlbnRzJiZBLmNvbnRlbnRzLnN1YmFycmF5JiZlPkEuY29udGVudHMubGVuZ3RoJiYoQS5jb250ZW50cz1aQS5nZXRGaWxlRGF0YUFzUmVndWxhckFycmF5KEEpLEEudXNlZEJ5dGVzPUEuY29udGVudHMubGVuZ3RoKSwhQS5jb250ZW50c3x8QS5jb250ZW50cy5zdWJhcnJheSl7dmFyIHI9QS5jb250ZW50cz9BLmNvbnRlbnRzLmxlbmd0aDowO2lmKGU8PXIpcmV0dXJuO2U9TWF0aC5tYXgoZSxyKihyPDEwNDg1NzY/MjoxLjEyNSl8MCksMCE9ciYmKGU9TWF0aC5tYXgoZSwyNTYpKTt2YXIgaT1BLmNvbnRlbnRzO3JldHVybiBBLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGUpLHZvaWQoMDxBLnVzZWRCeXRlcyYmQS5jb250ZW50cy5zZXQoaS5zdWJhcnJheSgwLEEudXNlZEJ5dGVzKSwwKSl9Zm9yKCFBLmNvbnRlbnRzJiYwPGUmJihBLmNvbnRlbnRzPVtdKTtBLmNvbnRlbnRzLmxlbmd0aDxlOylBLmNvbnRlbnRzLnB1c2goMCl9LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKEEsZSl7aWYoQS51c2VkQnl0ZXMhPWUpe2lmKDA9PWUpcmV0dXJuIEEuY29udGVudHM9bnVsbCx2b2lkKEEudXNlZEJ5dGVzPTApO2lmKCFBLmNvbnRlbnRzfHxBLmNvbnRlbnRzLnN1YmFycmF5KXt2YXIgcj1BLmNvbnRlbnRzO3JldHVybiBBLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcihlKSksciYmQS5jb250ZW50cy5zZXQoci5zdWJhcnJheSgwLE1hdGgubWluKGUsQS51c2VkQnl0ZXMpKSksdm9pZChBLnVzZWRCeXRlcz1lKX1pZihBLmNvbnRlbnRzfHwoQS5jb250ZW50cz1bXSksQS5jb250ZW50cy5sZW5ndGg+ZSlBLmNvbnRlbnRzLmxlbmd0aD1lO2Vsc2UgZm9yKDtBLmNvbnRlbnRzLmxlbmd0aDxlOylBLmNvbnRlbnRzLnB1c2goMCk7QS51c2VkQnl0ZXM9ZX19LG5vZGVfb3BzOntnZXRhdHRyOmZ1bmN0aW9uKEEpe3ZhciBlPXt9O3JldHVybiBlLmRldj1FQS5pc0NocmRldihBLm1vZGUpP0EuaWQ6MSxlLmlubz1BLmlkLGUubW9kZT1BLm1vZGUsZS5ubGluaz0xLGUudWlkPTAsZS5naWQ9MCxlLnJkZXY9QS5yZGV2LEVBLmlzRGlyKEEubW9kZSk/ZS5zaXplPTQwOTY6RUEuaXNGaWxlKEEubW9kZSk/ZS5zaXplPUEudXNlZEJ5dGVzOkVBLmlzTGluayhBLm1vZGUpP2Uuc2l6ZT1BLmxpbmsubGVuZ3RoOmUuc2l6ZT0wLGUuYXRpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUubXRpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUuY3RpbWU9bmV3IERhdGUoQS50aW1lc3RhbXApLGUuYmxrc2l6ZT00MDk2LGUuYmxvY2tzPU1hdGguY2VpbChlLnNpemUvZS5ibGtzaXplKSxlfSxzZXRhdHRyOmZ1bmN0aW9uKEEsZSl7dm9pZCAwIT09ZS5tb2RlJiYoQS5tb2RlPWUubW9kZSksdm9pZCAwIT09ZS50aW1lc3RhbXAmJihBLnRpbWVzdGFtcD1lLnRpbWVzdGFtcCksdm9pZCAwIT09ZS5zaXplJiZaQS5yZXNpemVGaWxlU3RvcmFnZShBLGUuc2l6ZSl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3Rocm93IEVBLmdlbmVyaWNFcnJvcnNbaEEuRU5PRU5UXX0sbWtub2Q6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIFpBLmNyZWF0ZU5vZGUoQSxlLHIsaSl9LHJlbmFtZTpmdW5jdGlvbihBLGUscil7aWYoRUEuaXNEaXIoQS5tb2RlKSl7dmFyIGk7dHJ5e2k9RUEubG9va3VwTm9kZShlLHIpfWNhdGNoKEEpe31pZihpKWZvcih2YXIgZiBpbiBpLmNvbnRlbnRzKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RFTVBUWSl9ZGVsZXRlIEEucGFyZW50LmNvbnRlbnRzW0EubmFtZV0sQS5uYW1lPXIsKGUuY29udGVudHNbcl09QSkucGFyZW50PWV9LHVubGluazpmdW5jdGlvbihBLGUpe2RlbGV0ZSBBLmNvbnRlbnRzW2VdfSxybWRpcjpmdW5jdGlvbihBLGUpe3ZhciByPUVBLmxvb2t1cE5vZGUoQSxlKTtmb3IodmFyIGkgaW4gci5jb250ZW50cyl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9URU1QVFkpO2RlbGV0ZSBBLmNvbnRlbnRzW2VdfSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPVsiLiIsIi4uIl07Zm9yKHZhciByIGluIEEuY29udGVudHMpQS5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShyKSYmZS5wdXNoKHIpO3JldHVybiBlfSxzeW1saW5rOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1aQS5jcmVhdGVOb2RlKEEsZSw0MTQ3MSwwKTtyZXR1cm4gaS5saW5rPXIsaX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7aWYoIUVBLmlzTGluayhBLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7cmV0dXJuIEEubGlua319LHN0cmVhbV9vcHM6e3JlYWQ6ZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbj1BLm5vZGUuY29udGVudHM7aWYoZj49QS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgdD1NYXRoLm1pbihBLm5vZGUudXNlZEJ5dGVzLWYsaSk7aWYoaCgwPD10KSw4PHQmJm4uc3ViYXJyYXkpZS5zZXQobi5zdWJhcnJheShmLGYrdCkscik7ZWxzZSBmb3IodmFyIG89MDtvPHQ7bysrKWVbcitvXT1uW2Yrb107cmV0dXJuIHR9LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZixuKXtpZighaSlyZXR1cm4gMDt2YXIgdD1BLm5vZGU7aWYodC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLnN1YmFycmF5JiYoIXQuY29udGVudHN8fHQuY29udGVudHMuc3ViYXJyYXkpKXtpZihuKXJldHVybiB0LmNvbnRlbnRzPWUuc3ViYXJyYXkocixyK2kpLHQudXNlZEJ5dGVzPWk7aWYoMD09PXQudXNlZEJ5dGVzJiYwPT09ZilyZXR1cm4gdC5jb250ZW50cz1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KHIscitpKSksdC51c2VkQnl0ZXM9aTtpZihmK2k8PXQudXNlZEJ5dGVzKXJldHVybiB0LmNvbnRlbnRzLnNldChlLnN1YmFycmF5KHIscitpKSxmKSxpfWlmKFpBLmV4cGFuZEZpbGVTdG9yYWdlKHQsZitpKSx0LmNvbnRlbnRzLnN1YmFycmF5JiZlLnN1YmFycmF5KXQuY29udGVudHMuc2V0KGUuc3ViYXJyYXkocixyK2kpLGYpO2Vsc2UgZm9yKHZhciBvPTA7bzxpO28rKyl0LmNvbnRlbnRzW2Yrb109ZVtyK29dO3JldHVybiB0LnVzZWRCeXRlcz1NYXRoLm1heCh0LnVzZWRCeXRlcyxmK2kpLGl9LGxsc2VlazpmdW5jdGlvbihBLGUscil7dmFyIGk9ZTtpZigxPT09cj9pKz1BLnBvc2l0aW9uOjI9PT1yJiZFQS5pc0ZpbGUoQS5ub2RlLm1vZGUpJiYoaSs9QS5ub2RlLnVzZWRCeXRlcyksaTwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7cmV0dXJuIGl9LGFsbG9jYXRlOmZ1bmN0aW9uKEEsZSxyKXtaQS5leHBhbmRGaWxlU3RvcmFnZShBLm5vZGUsZStyKSxBLm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KEEubm9kZS51c2VkQnl0ZXMsZStyKX0sbW1hcDpmdW5jdGlvbihBLGUscixpLGYsbix0KXtpZighRUEuaXNGaWxlKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO3ZhciBvLGEsYz1BLm5vZGUuY29udGVudHM7aWYoMiZ0fHxjLmJ1ZmZlciE9PWUmJmMuYnVmZmVyIT09ZS5idWZmZXIpe2lmKCgwPGZ8fGYraTxBLm5vZGUudXNlZEJ5dGVzKSYmKGM9Yy5zdWJhcnJheT9jLnN1YmFycmF5KGYsZitpKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGYsZitpKSksYT0hMCwhKG89R3IoaSkpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT01FTSk7ZS5zZXQoYyxvKX1lbHNlIGE9ITEsbz1jLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpvLGFsbG9jYXRlZDphfX0sbXN5bmM6ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZighRUEuaXNGaWxlKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9ERVYpO2lmKDImZilyZXR1cm4gMDtaQS5zdHJlYW1fb3BzLndyaXRlKEEsZSwwLGksciwhMSk7cmV0dXJuIDB9fX0scEE9e2Riczp7fSxpbmRleGVkREI6ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGluZGV4ZWREQilyZXR1cm4gaW5kZXhlZERCO3ZhciBBPW51bGw7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihBPXdpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQiksaChBLCJJREJGUyB1c2VkLCBidXQgaW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQiKSxBfSxEQl9WRVJTSU9OOjIxLERCX1NUT1JFX05BTUU6IkZJTEVfREFUQSIsbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIFpBLm1vdW50LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc3luY2ZzOmZ1bmN0aW9uKGUsbix0KXtwQS5nZXRMb2NhbFNldChlLGZ1bmN0aW9uKEEsZil7aWYoQSlyZXR1cm4gdChBKTtwQS5nZXRSZW1vdGVTZXQoZSxmdW5jdGlvbihBLGUpe2lmKEEpcmV0dXJuIHQoQSk7dmFyIHI9bj9lOmYsaT1uP2Y6ZTtwQS5yZWNvbmNpbGUocixpLHQpfSl9KX0sZ2V0REI6ZnVuY3Rpb24oQSxlKXt2YXIgcixpPXBBLmRic1tBXTtpZihpKXJldHVybiBlKG51bGwsaSk7dHJ5e3I9cEEuaW5kZXhlZERCKCkub3BlbihBLHBBLkRCX1ZFUlNJT04pfWNhdGNoKEEpe3JldHVybiBlKEEpfWlmKCFyKXJldHVybiBlKCJVbmFibGUgdG8gY29ubmVjdCB0byBJbmRleGVkREIiKTtyLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbihBKXt2YXIgZSxyPUEudGFyZ2V0LnJlc3VsdCxpPUEudGFyZ2V0LnRyYW5zYWN0aW9uOyhlPXIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhwQS5EQl9TVE9SRV9OQU1FKT9pLm9iamVjdFN0b3JlKHBBLkRCX1NUT1JFX05BTUUpOnIuY3JlYXRlT2JqZWN0U3RvcmUocEEuREJfU1RPUkVfTkFNRSkpLmluZGV4TmFtZXMuY29udGFpbnMoInRpbWVzdGFtcCIpfHxlLmNyZWF0ZUluZGV4KCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXAiLHt1bmlxdWU6ITF9KX0sci5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXtpPXIucmVzdWx0LHBBLmRic1tBXT1pLGUobnVsbCxpKX0sci5vbmVycm9yPWZ1bmN0aW9uKEEpe2UodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0sZ2V0TG9jYWxTZXQ6ZnVuY3Rpb24oQSxlKXt2YXIgcj17fTtmdW5jdGlvbiBpKEEpe3JldHVybiIuIiE9PUEmJiIuLiIhPT1BfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGZ1bmN0aW9uKEEpe3JldHVybiBtQS5qb2luMihlLEEpfX1mb3IodmFyIG49RUEucmVhZGRpcihBLm1vdW50cG9pbnQpLmZpbHRlcihpKS5tYXAoZihBLm1vdW50cG9pbnQpKTtuLmxlbmd0aDspe3ZhciB0LG89bi5wb3AoKTt0cnl7dD1FQS5zdGF0KG8pfWNhdGNoKEEpe3JldHVybiBlKEEpfUVBLmlzRGlyKHQubW9kZSkmJm4ucHVzaC5hcHBseShuLEVBLnJlYWRkaXIobykuZmlsdGVyKGkpLm1hcChmKG8pKSkscltvXT17dGltZXN0YW1wOnQubXRpbWV9fXJldHVybiBlKG51bGwse3R5cGU6ImxvY2FsIixlbnRyaWVzOnJ9KX0sZ2V0UmVtb3RlU2V0OmZ1bmN0aW9uKEEsaSl7dmFyIGY9e307cEEuZ2V0REIoQS5tb3VudHBvaW50LGZ1bmN0aW9uKEEscil7aWYoQSlyZXR1cm4gaShBKTt0cnl7dmFyIGU9ci50cmFuc2FjdGlvbihbcEEuREJfU1RPUkVfTkFNRV0sInJlYWRvbmx5Iik7ZS5vbmVycm9yPWZ1bmN0aW9uKEEpe2kodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfSxlLm9iamVjdFN0b3JlKHBBLkRCX1NUT1JFX05BTUUpLmluZGV4KCJ0aW1lc3RhbXAiKS5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKEEpe3ZhciBlPUEudGFyZ2V0LnJlc3VsdDtpZighZSlyZXR1cm4gaShudWxsLHt0eXBlOiJyZW1vdGUiLGRiOnIsZW50cmllczpmfSk7ZltlLnByaW1hcnlLZXldPXt0aW1lc3RhbXA6ZS5rZXl9LGUuY29udGludWUoKX19Y2F0Y2goQSl7cmV0dXJuIGkoQSl9fSl9LGxvYWRMb2NhbEVudHJ5OmZ1bmN0aW9uKEEsZSl7dmFyIHIsaTt0cnl7aT1FQS5sb29rdXBQYXRoKEEpLm5vZGUscj1FQS5zdGF0KEEpfWNhdGNoKEEpe3JldHVybiBlKEEpfXJldHVybiBFQS5pc0RpcihyLm1vZGUpP2UobnVsbCx7dGltZXN0YW1wOnIubXRpbWUsbW9kZTpyLm1vZGV9KTpFQS5pc0ZpbGUoci5tb2RlKT8oaS5jb250ZW50cz1aQS5nZXRGaWxlRGF0YUFzVHlwZWRBcnJheShpKSxlKG51bGwse3RpbWVzdGFtcDpyLm10aW1lLG1vZGU6ci5tb2RlLGNvbnRlbnRzOmkuY29udGVudHN9KSk6ZShuZXcgRXJyb3IoIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkIikpfSxzdG9yZUxvY2FsRW50cnk6ZnVuY3Rpb24oQSxlLHIpe3RyeXtpZihFQS5pc0RpcihlLm1vZGUpKUVBLm1rZGlyKEEsZS5tb2RlKTtlbHNle2lmKCFFQS5pc0ZpbGUoZS5tb2RlKSlyZXR1cm4gcihuZXcgRXJyb3IoIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkIikpO0VBLndyaXRlRmlsZShBLGUuY29udGVudHMse2VuY29kaW5nOiJiaW5hcnkiLGNhbk93bjohMH0pfUVBLmNobW9kKEEsZS5tb2RlKSxFQS51dGltZShBLGUudGltZXN0YW1wLGUudGltZXN0YW1wKX1jYXRjaChBKXtyZXR1cm4gcihBKX1yKG51bGwpfSxyZW1vdmVMb2NhbEVudHJ5OmZ1bmN0aW9uKEEsZSl7dHJ5e0VBLmxvb2t1cFBhdGgoQSk7dmFyIHI9RUEuc3RhdChBKTtFQS5pc0RpcihyLm1vZGUpP0VBLnJtZGlyKEEpOkVBLmlzRmlsZShyLm1vZGUpJiZFQS51bmxpbmsoQSl9Y2F0Y2goQSl7cmV0dXJuIGUoQSl9ZShudWxsKX0sbG9hZFJlbW90ZUVudHJ5OmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1BLmdldChlKTtpLm9uc3VjY2Vzcz1mdW5jdGlvbihBKXtyKG51bGwsQS50YXJnZXQucmVzdWx0KX0saS5vbmVycm9yPWZ1bmN0aW9uKEEpe3IodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0sc3RvcmVSZW1vdGVFbnRyeTpmdW5jdGlvbihBLGUscixpKXt2YXIgZj1BLnB1dChyLGUpO2Yub25zdWNjZXNzPWZ1bmN0aW9uKCl7aShudWxsKX0sZi5vbmVycm9yPWZ1bmN0aW9uKEEpe2kodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0scmVtb3ZlUmVtb3RlRW50cnk6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUEuZGVsZXRlKGUpO2kub25zdWNjZXNzPWZ1bmN0aW9uKCl7cihudWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKEEpe3IodGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfX0scmVjb25jaWxlOmZ1bmN0aW9uKGksZixlKXt2YXIgbj0wLHQ9W107T2JqZWN0LmtleXMoaS5lbnRyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPWkuZW50cmllc1tBXSxyPWYuZW50cmllc1tBXTsoIXJ8fGUudGltZXN0YW1wPnIudGltZXN0YW1wKSYmKHQucHVzaChBKSxuKyspfSk7dmFyIHI9W107aWYoT2JqZWN0LmtleXMoZi5lbnRyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2YuZW50cmllc1tBXTtpLmVudHJpZXNbQV18fChyLnB1c2goQSksbisrKX0pLCFuKXJldHVybiBlKG51bGwpO3ZhciBvPTAsQT0oInJlbW90ZSI9PT1pLnR5cGU/aS5kYjpmLmRiKS50cmFuc2FjdGlvbihbcEEuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpLGE9QS5vYmplY3RTdG9yZShwQS5EQl9TVE9SRV9OQU1FKTtmdW5jdGlvbiBjKEEpe3JldHVybiBBP2MuZXJyb3JlZD92b2lkIDA6KGMuZXJyb3JlZD0hMCxlKEEpKTorK28+PW4/ZShudWxsKTp2b2lkIDB9QS5vbmVycm9yPWZ1bmN0aW9uKEEpe2ModGhpcy5lcnJvciksQS5wcmV2ZW50RGVmYXVsdCgpfSx0LnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyJsb2NhbCI9PT1mLnR5cGU/cEEubG9hZFJlbW90ZUVudHJ5KGEscixmdW5jdGlvbihBLGUpe2lmKEEpcmV0dXJuIGMoQSk7cEEuc3RvcmVMb2NhbEVudHJ5KHIsZSxjKX0pOnBBLmxvYWRMb2NhbEVudHJ5KHIsZnVuY3Rpb24oQSxlKXtpZihBKXJldHVybiBjKEEpO3BBLnN0b3JlUmVtb3RlRW50cnkoYSxyLGUsYyl9KX0pLHIuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKEEpeyJsb2NhbCI9PT1mLnR5cGU/cEEucmVtb3ZlTG9jYWxFbnRyeShBLGMpOnBBLnJlbW92ZVJlbW90ZUVudHJ5KGEsQSxjKX0pfX0seUE9e2lzV2luZG93czohKGJBPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUFBQUFBQUFBQUFFQUFBQUFBQUFBQmdLQUFBaEFBQUFJZ0FBQVB6Ly8vLzgvLy8vR0FvQUFDTUFBQUFrQUFBQUFBQUFBQUFBQUFDWVJBQUF6RWdBQU1CRUFBRGlTQUFBUUFBQUFBQUFBQUNZUkFBQWRVb0FBTUJFQUFEdFNRQUEyQWtBQUFBQUFBREFSQUFBTDBvQUFCZ0tBQUFBQUFBQXdFUUFBTk5LQUFCWUFBQUFBQUFBQU1CRUFBQTRTd0FBZ0FBQUFBQUFBQURBUkFBQXBsc0FBSUFBQUFBQUFBQUFRQUFBQUFBQUFBRG9DUUFBRndBQUFCZ0FBQURBLy8vL3dQLy8vK2dKQUFBWkFBQUFHZ0FBQUVBQUFBQUFBQUFBU0FvQUFCc0FBQUFjQUFBQU9BQUFBUGovLy85SUNnQUFIUUFBQUI0QUFBREEvLy8vd1AvLy8wZ0tBQUFmQUFBQUlBQUFBQUFBQUFBNEFBQUFBQUFBQUJnS0FBQWhBQUFBSWdBQUFNai8vLy9JLy8vL0dBb0FBQ01BQUFBa0FBQUF3RVFBQUhOTEFBQklDZ0FBQUFBQUFNQkVBQUFzVEFBQU9BOEFBQUFBQUFEQVJBQUFoa3dBQUlBQUFBQUFBQUFBd0VRQUFKZE1BQUE0RHdBQUFBQUFBTUJFQUFCYlRnQUFnQUFBQUFBQUFBREFSQUFBNmt3QUFLQUJBQUFBQUFBQW1FUUFBQVZOQUFEQVJBQUFIRTBBQURnUEFBQUFBQUFBd0VRQUFNQk5BQUNnQVFBQUFBQUFBTUJFQUFEY1RRQUFPQThBQUFBQUFBREFSQUFBYkU0QUFEZ1BBQUFBQUFBQXdFUUFBTHRPQUFDQUFBQUFBQUFBQU1CRUFBRExUZ0FBT0E4QUFBQUFBQURBUkFBQURrOEFBSUFBQUFBQUFBQUF3RVFBQUI5UEFBQTREd0FBQUFBQUFNQkVBQUJqVHdBQWdBQUFBQUFBQUFEQVJBQUFkRThBQURnUEFBQUFBQUFBd0VRQUFPTlBBQUNBQUFBQUFBQUFBTUJFQUFEMFR3QUFPQThBQUFBQUFBREFSQUFBVDFBQUFJQUFBQUFBQUFBQXdFUUFBR0JRQUFBNER3QUFBQUFBQU1CRUFBQmZVUUFBZ0FBQUFBQUFBQURBUkFBQWNGRUFBRGdQQUFBQUFBQUF3RVFBQUdGVEFBQ0FBQUFBQUFBQUFNQkVBQUJ5VXdBQU9BOEFBQUFBQUFEQVJBQUE0MU1BQUlBQUFBQUFBQUFBd0VRQUFQUlRBQUE0RHdBQUFBQUFBTUJFQUFCY1ZBQUFnQUFBQUFBQUFBREFSQUFBYlZRQUFEZ1BBQUFBQUFBQXdFUUFBTlZVQUFDQUFBQUFBQUFBQU1CRUFBRG1WQUFBT0E4QUFBQUFBQURBUkFBQVJWVUFBSUFBQUFBQUFBQUF3RVFBQUZaVkFBQTREd0FBQUFBQUFNQkVBQUMwVlFBQWdBQUFBQUFBQUFEQVJBQUF4VlVBQURnUEFBQUFBQUFBd0VRQUFDWldBQUNBQUFBQUFBQUFBTUJFQUFBM1ZnQUFPQThBQUFBQUFBREFSQUFBdFZZQUFJQUFBQUFBQUFBQXdFUUFBTVpXQUFBNER3QUFBQUFBQU1CRUFBQUtWd0FBZ0FBQUFBQUFBQURBUkFBQUcxY0FBRGdQQUFBQUFBQUF3RVFBQUY5WEFBQ0FBQUFBQUFBQUFNQkVBQUJ3VndBQU9BOEFBQUFBQUFEQVJBQUFPRmdBQUlBQUFBQUFBQUFBd0VRQUFFbFlBQUE0RHdBQUFBQUFBTUJFQUFDTldBQUFnQUFBQUFBQUFBREFSQUFBbmxnQUFEZ1BBQUFBQUFBQXdFUUFBTVJaQUFDQUFBQUFBQUFBQU1CRUFBRFZXUUFBT0E4QUFBQUFBQURBUkFBQUxWb0FBSUFBQUFBQUFBQUF3RVFBQUQ1YUFBQTREd0FBQUFBQUFNQkVBQUNtV2dBQWdBQUFBQUFBQUFEQVJBQUF0MW9BQURnUEFBQUFBQUFBd0VRQUFQdGFBQUE0RHdBQUFBQUFBTUJFQUFBL1d3QUFPQThBQUFBQUFBREFSQUFBWUdNQUFEZ1BBQUFBQUFBQXdFUUFBTjlrQUFBNER3QUFBQUFBQUVoRkFBQ2Zjd0FBU0VVQUFJcHpBQUJJUlFBQWNITUFBRWhGQUFCaWN3QUFTRVVBQUZCekFBQklSUUFBUVhNQUFKaEVBQUF5Y3dBQUxFVUFBQ0p6QUFBQUFBQUErQVFBQUN4RkFBQVJjd0FBQVFBQUFQZ0VBQUNZUkFBQS9YSUFBQ3hGQUFEb2NnQUFBQUFBQUNBRkFBQXNSUUFBMG5JQUFBRUFBQUFnQlFBQW1FUUFBTVZ5QUFBc1JRQUF0M0lBQUFBQUFBQklCUUFBTEVVQUFLaHlBQUFCQUFBQVNBVUFBSmhFQUFDYmNnQUFtRVFBQUxGekFBQmtSUUFBbFhRQUFBQUFBQUFCQUFBQW1BVUFBQUFBQUFDWVJBQUExSFFBQU1CRUFBRDZkQUFBT0E4QUFBQUFBQURBUkFBQUZuWUFBRGdQQUFBQUFBQUFtRVFBQUJoNkFBQmtSUUFBeVhrQUFBQUFBQUFDQUFBQXdBVUFBQUlBQUFENEJRQUFBZ2dBQU1CRUFBQi9lUUFBT0E4QUFBQUFBQUNZUkFBQTkza0FBTUJFQUFBc2VnQUFPQThBQUFBQUFBREFSQUFBZG4wQUFEZ1BBQUFBQUFBQXdFUUFBQ04rQUFBd0JnQUFBQUFBQUpoRUFBQTRmZ0FBd0VRQUFGcCtBQUF3QmdBQUFBQUFBTUJFQUFCeGZnQUFNQVlBQUFBQUFBREFSQUFBaUg0QUFEQUdBQUFBQUFBQXdFUUFBS1IrQUFBd0JnQUFBQUFBQU1CRUFBQzhmZ0FBTUFZQUFBQUFBQURBUkFBQTJINEFBREFHQUFBQUFBQUF3RVFBQVBaK0FBQXdCZ0FBQUFBQUFNQkVBQUFNZndBQU1BWUFBQUFBQUFEQVJBQUFJbjhBQURBR0FBQUFBQUFBd0VRQUFJMS9BQUF3QmdBQUFBQUFBTUJFQUFDcmZ3QUFNQVlBQUFBQUFBREFSQUFBd1g4QUFEQUdBQUFBQUFBQXdFUUFBTlIvQUFBd0JnQUFBQUFBQU1CRUFBRG5md0FBTUFZQUFBQUFBQURBUkFBQUJZQUFBREFHQUFBQUFBQUF3RVFBQUIrQUFBQTREd0FBQUFBQUFNQkVBQUJ3Z0FBQU9BOEFBQUFBQUFEQVJBQUF0b0FBQURnUEFBQUFBQUFBd0VRQUFQeUFBQUE0RHdBQUFBQUFBTUJFQUFCRmdRQUFNQVlBQUFBQUFBREFSQUFBV29FQUFEZ1BBQUFBQUFBQXdFUUFBS0tCQUFBd0JnQUFBQUFBQU1CRUFBQzNnUUFBT0E4QUFBQUFBQURBUkFBQS80RUFBRGdQQUFBQUFBQUF3RVFBQUZDQ0FBQTREd0FBQUFBQUFNQkVBQUNhZ2dBQU9BOEFBQUFBQUFEQVJBQUE2WUlBQURnUEFBQUFBQUFBd0VRQUFEcURBQUE0RHdBQUFBQUFBTUJFQUFDRGd3QUFPQThBQUFBQUFBREFSQUFBeklNQUFEZ1BBQUFBQUFBQXdFUUFBQmVFQUFBNER3QUFBQUFBQU1CRUFBQm1oQUFBT0E4QUFBQUFBQURBUkFBQXM0UUFBRGdQQUFBQUFBQUF3RVFBQVAyRUFBQTREd0FBQUFBQUFNQkVBQUJIaFFBQU1BWUFBQUFBQUFEQVJBQUFYSVVBQURnUEFBQUFBQUFBd0VRQUFLU0ZBQUF3QmdBQUFBQUFBTUJFQUFDNWhRQUFPQThBQUFBQUFBREFSQUFBQVlZQUFEZ1BBQUFBQUFBQXdFUUFBRWVIQUFDNENBQUFBQUFBQUdSRkFBQlpod0FBQUFBQUFBRUFBQURRQ0FBQUFnUUFBSmhFQUFCb2h3QUF3RVFBQUl5WUFBRG9DQUFBQUFBQUFKaEVBQUNlbUFBQXdFUUFBTldhQUFEb0NBQUFBQUFBQU1CRUFBRDhtZ0FBNkFnQUFBQUFBQURBUkFBQWhMd0FBT2dJQUFBQUFBQUFaRVVBQU52REFBQUFBQUFBQVFBQUFKZ0ZBQUFBQUFBQVpFVUFBSnpEQUFBQUFBQUFBUUFBQUpnRkFBQUFBQUFBbUVRQUFIM0RBQUNZUkFBQVhzTUFBSmhFQUFBL3d3QUFtRVFBQUNEREFBQ1lSQUFBQWNNQUFKaEVBQURpd2dBQW1FUUFBTVBDQUFDWVJBQUFwTUlBQUpoRUFBQ0Z3Z0FBbUVRQUFHYkNBQUNZUkFBQVI4SUFBSmhFQUFBb3dnQUF3RVFBQUNqUEFBREFDUUFBQUFBQUFKaEVBQUFXendBQXdFUUFBRkxQQUFEQUNRQUFBQUFBQUpoRUFBQjh6d0FBbUVRQUFLM1BBQUJrUlFBQTNzOEFBQUFBQUFBQkFBQUFzQWtBQUFQMC8vOWtSUUFBRGRBQUFBQUFBQUFCQUFBQXlBa0FBQVAwLy85a1JRQUFQTkFBQUFBQUFBQUJBQUFBc0FrQUFBUDAvLzlrUlFBQWE5QUFBQUFBQUFBQkFBQUF5QWtBQUFQMC8vOWtSUUFBbXRBQUFBTUFBQUFDQUFBQTZBa0FBQUlBQUFBWUNnQUFBZ2dBQUF3QUFBQUFBQUFBNkFrQUFCY0FBQUFZQUFBQTlQLy8vL1QvLy8vb0NRQUFHUUFBQUJvQUFBREFSQUFBeXRBQUFPQUpBQUFBQUFBQXdFUUFBT1BRQUFEWUNRQUFBQUFBQU1CRUFBQWkwUUFBNEFrQUFBQUFBQURBUkFBQU90RUFBTmdKQUFBQUFBQUF3RVFBQUZMUkFBRGdDZ0FBQUFBQUFNQkVBQUJtMFFBQU1BOEFBQUFBQUFEQVJBQUFmTkVBQU9BS0FBQUFBQUFBWkVVQUFMYlJBQUFBQUFBQUFnQUFBT0FLQUFBQ0FBQUFJQXNBQUFBQUFBQmtSUUFBK3RFQUFBQUFBQUFCQUFBQU9Bc0FBQUFBQUFDWVJBQUFFTklBQUdSRkFBQXAwZ0FBQUFBQUFBSUFBQURnQ2dBQUFnQUFBR0FMQUFBQUFBQUFaRVVBQUczU0FBQUFBQUFBQVFBQUFEZ0xBQUFBQUFBQVpFVUFBSmJTQUFBQUFBQUFBZ0FBQU9BS0FBQUNBQUFBbUFzQUFBQUFBQUJrUlFBQTJ0SUFBQUFBQUFBQkFBQUFzQXNBQUFBQUFBQ1lSQUFBOE5JQUFHUkZBQUFKMHdBQUFBQUFBQUlBQUFEZ0NnQUFBZ0FBQU5nTEFBQUFBQUFBWkVVQUFFM1RBQUFBQUFBQUFRQUFBTEFMQUFBQUFBQUFaRVVBQUtQVUFBQUFBQUFBQXdBQUFPQUtBQUFDQUFBQUdBd0FBQUlBQUFBZ0RBQUFBQWdBQUpoRUFBQUsxUUFBbUVRQUFPalVBQUJrUlFBQUhkVUFBQUFBQUFBREFBQUE0QW9BQUFJQUFBQVlEQUFBQWdBQUFGQU1BQUFBQ0FBQW1FUUFBR0xWQUFCa1JRQUFoTlVBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUI0REFBQUFBZ0FBSmhFQUFESjFRQUFaRVVBQU43VkFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQWVBd0FBQUFJQUFCa1JRQUFJOVlBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQURBREFBQUFnQUFBSmhFQUFBLzFnQUFaRVVBQUZUV0FBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQXdBd0FBQUlBQUFCa1JRQUFjTllBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQURBREFBQUFnQUFBR1JGQUFDTTFnQUFBQUFBQUFJQUFBRGdDZ0FBQWdBQUFNQU1BQUFDQUFBQVpFVUFBTGZXQUFBQUFBQUFBZ0FBQU9BS0FBQUNBQUFBU0EwQUFBQUFBQUNZUkFBQS9kWUFBR1JGQUFBaDF3QUFBQUFBQUFJQUFBRGdDZ0FBQWdBQUFIQU5BQUFBQUFBQW1FUUFBR2ZYQUFCa1JRQUFodGNBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUNZRFFBQUFBQUFBSmhFQUFETTF3QUFaRVVBQU9YWEFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQXdBMEFBQUFBQUFDWVJBQUFLOWdBQUdSRkFBQkUyQUFBQUFBQUFBSUFBQURnQ2dBQUFnQUFBT2dOQUFBQ0FBQUFtRVFBQUZuWUFBQmtSUUFBOE5nQUFBQUFBQUFDQUFBQTRBb0FBQUlBQUFEb0RRQUFBZ0FBQU1CRUFBQngyQUFBSUE0QUFBQUFBQUJrUlFBQWxOZ0FBQUFBQUFBQ0FBQUE0QW9BQUFJQUFBQkFEZ0FBQWdBQUFKaEVBQUMzMkFBQXdFUUFBTTdZQUFBZ0RnQUFBQUFBQUdSRkFBQUYyUUFBQUFBQUFBSUFBQURnQ2dBQUFnQUFBRUFPQUFBQ0FBQUFaRVVBQUNmWkFBQUFBQUFBQWdBQUFPQUtBQUFDQUFBQVFBNEFBQUlBQUFCa1JRQUFTZGtBQUFBQUFBQUNBQUFBNEFvQUFBSUFBQUJBRGdBQUFnQUFBTUJFQUFCczJRQUE0QW9BQUFBQUFBQmtSUUFBZ3RrQUFBQUFBQUFDQUFBQTRBb0FBQUlBQUFEb0RnQUFBZ0FBQUpoRUFBQ1UyUUFBWkVVQUFLblpBQUFBQUFBQUFnQUFBT0FLQUFBQ0FBQUE2QTRBQUFJQUFBREFSQUFBeHRrQUFPQUtBQUFBQUFBQXdFUUFBTnZaQUFEZ0NnQUFBQUFBQUpoRUFBRHcyUUFBWkVVQUFBbmFBQUFBQUFBQUFRQUFBREFQQUFBQUFBQUF3RVFBQURUYUFBQmdEd0FBQUFBQUFKaEVBQURjMmdBQXdFUUFBRHpiQUFCNER3QUFBQUFBQU1CRUFBRHAyZ0FBaUE4QUFBQUFBQUNZUkFBQUN0c0FBTUJFQUFBWDJ3QUFhQThBQUFBQUFBREFSQUFBSHR3QUFHQVBBQUFBQUFBQXdFUUFBQzdjQUFDZ0R3QUFBQUFBQU1CRUFBQmozQUFBZUE4QUFBQUFBQURBUkFBQVA5d0FBTUFQQUFBQUFBQUF3RVFBQUlYY0FBQjREd0FBQUFBQUFCQkZBQUN0M0FBQUVFVUFBSy9jQUFBUVJRQUFzdHdBQUJCRkFBQzAzQUFBRUVVQUFMYmNBQUFRUlFBQXVOd0FBQkJGQUFDNjNBQUFFRVVBQUx6Y0FBQVFSUUFBdnR3QUFCQkZBQURBM0FBQUVFVUFBSlRTQUFBUVJRQUF3dHdBQUJCRkFBREUzQUFBRUVVQUFNYmNBQURBUkFBQXlOd0FBSGdQQUFBQUFBQUF3RVFBQU9uY0FBQm9Ed0FBQUFBQUFBQUFBQUJJQUFBQUFRQUFBQUlBQUFBQkFBQUFBUUFBQUFJQUFBQURBQUFBQUFBQUFGZ0FBQUFEQUFBQUJBQUFBQUVBQUFEUUVBQUFKQUVBQURnQkFBRGtFQUFBT0FBQUFBQUFBQUJ3QUFBQUJRQUFBQVlBQUFESS8vLy95UC8vLzNBQUFBQUhBQUFBQ0FBQUFBQUFBQUJnQUFBQUNRQUFBQW9BQUFBQkFBQUFCQUFBQUFFQUFBQUJBQUFBQWdBQUFBTUFBQUFGQUFBQUJBQUFBQVVBQUFBQkFBQUFCZ0FBQUFJQUFBQUFBQUFBZ0FBQUFBc0FBQUFNQUFBQUFnQUFBQU1BQUFBTkFBQUFCQUFBQUFBQUFBQ1FBQUFBRGdBQUFBOEFBQUFGQUFBQUJnQUFBQTBBQUFBSEFBQUFBQUFBQUtBQUFBQUxBQUFBRUFBQUFBZ0FBQUFEQUFBQURRQUFBQWtBQUFCQUFBQUFBQUFBQUVBQkFBQVJBQUFBRWdBQUFEZ0FBQUQ0Ly8vL1FBRUFBQk1BQUFBVUFBQUF3UC8vLzhELy8vOUFBUUFBRlFBQUFCWUFBQUNZRVFBQTVBQUFBTHdBQUFEUUFBQUFKQUVBQURnQkFBQU1BUUFBK0FBQUFNQVJBQUNzRVFBQUFBQUFBSmdFQUFBbEFBQUFKZ0FBQUNjQUFBQURBQUFBS0FBQUFBQUFBQUNJQkFBQUtRQUFBQ29BQUFBckFBQUFBd0FBQUN3QUFBQUFBQUFBZUFRQUFDMEFBQUF1QUFBQUx3QUFBQU1BQUFBd0FBQUFBQUFBQUdnRUFBQXhBQUFBTWdBQUFBb0FBQUFMQUFBQURRQUFBQXdBQUFBQUFBQUFXQVFBQURNQUFBQTBBQUFBTlFBQUFBTUFBQUEyQUFBQUFBQUFBRWdFQUFBTEFBQUFOd0FBQUEwQUFBQU9BQUFBT0FBQUFBOEFBQUFBQUFBQU9BUUFBRGtBQUFBNkFBQUFPd0FBQUFNQUFBQThBQUFBQUFBQUFDZ0VBQUE5QUFBQVBnQUFBQkFBQUFBUkFBQUFQd0FBQUJJQUFBQUFBQUFBR0FRQUFFQUFBQUJCQUFBQVFnQUFBQU1BQUFCREFBQUFBQUFBQUFnRUFBQUxBQUFBUkFBQUFCTUFBQUFVQUFBQVJRQUFBQlVBQUFBQUFBQUErQU1BQUVZQUFBQkhBQUFBU0FBQUFBTUFBQUJKQUFBQUFBQUFBT2dEQUFCS0FBQUFTd0FBQUJZQUFBQVhBQUFBVEFBQUFCZ0FBQUFBQUFBQTJBTUFBRTBBQUFCT0FBQUFUd0FBQUFNQUFBQlFBQUFBQUFBQUFNZ0RBQUFMQUFBQVVRQUFBQmtBQUFBREFBQUFEUUFBQUJvQUFBQUFBQUFBdUFNQUFGSUFBQUJUQUFBQVZBQUFBQU1BQUFCVkFBQUFBQUFBQUtnREFBQUxBQUFBVmdBQUFCc0FBQUFEQUFBQURRQUFBQndBQUFBQUFBQUFtQU1BQUZjQUFBQllBQUFBV1FBQUFBTUFBQUJhQUFBQUFBQUFBSWdEQUFCYkFBQUFYQUFBQUIwQUFBQWVBQUFBWFFBQUFCOEFBQUFBQUFBQWVBTUFBRjRBQUFCZkFBQUFZQUFBQUFNQUFBQmhBQUFBQUFBQUFHZ0RBQUFMQUFBQVlnQUFBQ0FBQUFBaEFBQUFEUUFBQUNJQUFBQUFBQUFBV0FNQUFHTUFBQUJrQUFBQVpRQUFBQU1BQUFCbUFBQUFBQUFBQUVnREFBQm5BQUFBYUFBQUFDTUFBQUFrQUFBQURRQUFBQ1VBQUFBQUFBQUFPQU1BQUdrQUFBQnFBQUFBYXdBQUFBTUFBQUJzQUFBQUFBQUFBQ2dEQUFBTEFBQUFiUUFBQUNZQUFBQURBQUFBRFFBQUFDY0FBQUFBQUFBQUdBTUFBRzRBQUFCdkFBQUFjQUFBQUFNQUFBQnhBQUFBQUFBQUFBZ0RBQUFMQUFBQWNnQUFBQ2dBQUFBREFBQUFEUUFBQUNrQUFBQUFBQUFBK0FJQUFITUFBQUIwQUFBQWRRQUFBQU1BQUFCMkFBQUFBQUFBQU9nQ0FBQUxBQUFBZHdBQUFDb0FBQUFyQUFBQURRQUFBQ3dBQUFBQUFBQUEyQUlBQUhnQUFBQjVBQUFBZWdBQUFBTUFBQUI3QUFBQUFBQUFBTWdDQUFCOEFBQUFmUUFBQUMwQUFBQXVBQUFBZmdBQUFDOEFBQUFBQUFBQXVBSUFBSDhBQUFDQUFBQUFnUUFBQUFNQUFBQ0NBQUFBQUFBQUFLZ0NBQUNEQUFBQWhBQUFBREFBQUFBeEFBQUFEUUFBQURJQUFBQUFBQUFBbUFJQUFJVUFBQUNHQUFBQWh3QUFBQU1BQUFDSUFBQUFBQUFBQUlnQ0FBQ0pBQUFBaWdBQUFETUFBQUEwQUFBQURRQUFBRFVBQUFBQUFBQUFlQUlBQUlzQUFBQ01BQUFBalFBQUFBTUFBQUNPQUFBQUFBQUFBR2dDQUFDUEFBQUFrQUFBQURZQUFBQTNBQUFBRFFBQUFEZ0FBQUFBQUFBQVdBSUFBSkVBQUFDU0FBQUFrd0FBQUFNQUFBQ1VBQUFBQUFBQUFFZ0NBQUNWQUFBQWxnQUFBRGtBQUFBREFBQUFEUUFBQURvQUFBQUFBQUFBT0FJQUFKY0FBQUNZQUFBQW1RQUFBQU1BQUFDYUFBQUFBQUFBQUNnQ0FBQUxBQUFBbXdBQUFEc0FBQUFEQUFBQURRQUFBRHdBQUFBQUFBQUFHQUlBQUp3QUFBQ2RBQUFBbmdBQUFBTUFBQUNmQUFBQUFBQUFBQWdDQUFBTEFBQUFvQUFBQUQwQUFBQURBQUFBRFFBQUFENEFBQUFBQUFBQStBRUFBS0VBQUFDaUFBQUFvd0FBQUFNQUFBQ2tBQUFBQUFBQUFPZ0JBQUNsQUFBQXBnQUFBRDhBQUFBREFBQUFEUUFBQUVBQUFBQUFBQUFBMkFFQUFLY0FBQUNvQUFBQXFRQUFBQU1BQUFDcUFBQUFBQUFBQUlBQkFBQ3JBQUFBckFBQUFFRUFBQUJDQUFBQURRQUFBRU1BQUFBQUFBQUFjQUVBQUswQUFBQ3VBQUFBcndBQUFBTUFBQUN3QUFBQUFBQUFBR0FCQUFDeEFBQUFzZ0FBQUVRQUFBQkZBQUFBRFFBQUFFWUFBQUFBQUFBQVVBRUFBTE1BQUFDMEFBQUF0UUFBQUFNQUFBQzJBQUFBQUFBQUFNZ0JBQUMzQUFBQXVBQUFBTGtBQUFBREFBQUF1Z0FBQUFBQUFBQzRBUUFBdXdBQUFMd0FBQUFHQUFBQVJ3QUFBRWdBQUFBQUFBQUFxQUVBQUwwQUFBQytBQUFBdndBQUFBTUFBQURBQUFBQUFBQUFBSkFCQUFEQkFBQUF3Z0FBQUFjQUFBQkpBQUFBU2dBQUFLTmRBQUFBQUFBQXFBUUFBTU1BQUFERUFBQUF4UUFBQUFNQUFBREdBQUFBQUFBQUFMZ0VBQURIQUFBQXlBQUFBTWtBQUFBREFBQUF5Z0FBQUFNQUFBQUVBQUFBQlFBQUFBWUFBQUNBQlFBQU9CQUFBQUFGQUFEd0R3QUFBQVVBQUhBRkFBQUFCUUFBZ0FVQUFEQVFBQUFBQlFBQWVBVUFBQUFGQUFCNEJRQUFBQVVBQURnUUFBQjRCUUFBS0FVQUFPZ0VBQURnQkFBQThBOEFBRGdGQUFBQUFBQUFvQVVBQU1zQUFBRE1BQUFBelFBQUFBTUFBQURPQUFBQUFBQUFBTEFGQUFEUEFBQUEwQUFBQU5FQUFBQURBQUFBMGdBQUFBQUFBQUFBQmdBQTB3QUFBTlFBQUFEVkFBQUFBd0FBQU5ZQUFBQUFBQUFBNkFVQUFOY0FBQURZQUFBQTJRQUFBQU1BQUFEYUFBQUFBQUFBQUJBR0FBRGJBQUFBM0FBQUFOMEFBQUFEQUFBQTNnQUFBQUFBQUFESUJRQUEzd0FBQU9BQUFBQUFBQUFBSUFZQUFPRUFBQURpQUFBQUFRQUFBQUlBQUFBQUFBQUFPQVlBQU9FQUFBRGpBQUFBQXdBQUFBUUFBQUFBQUFBQVNBWUFBT0VBQUFEa0FBQUFCUUFBQUFZQUFBQUFBQUFBV0FZQUFPRUFBQURsQUFBQUJ3QUFBQWdBQUFBQUFBQUFhQVlBQU9FQUFBRG1BQUFBQ1FBQUFBb0FBQUFBQUFBQWVBWUFBT0VBQUFEbkFBQUFDd0FBQUF3QUFBQUFBQUFBaUFZQUFPRUFBQURvQUFBQURRQUFBQTRBQUFBQUFBQUFtQVlBQU9FQUFBRHBBQUFBRHdBQUFCQUFBQUFBQUFBQXFBWUFBT0VBQUFEcUFBQUFFUUFBQUJJQUFBQUFBQUFBdUFZQUFPRUFBQURyQUFBQUV3QUFBQlFBQUFBQUFBQUF5QVlBQU9FQUFBRHNBQUFBRlFBQUFCWUFBQUFBQUFBQTJBWUFBT0VBQUFEdEFBQUFGd0FBQUJnQUFBQUFBQUFBNkFZQUFPRUFBQUR1QUFBQUdRQUFBQm9BQUFBQUFBQUFBUUFBQUFJQUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUFBQUFBUGdHQUFEaEFBQUE3d0FBQUJzQUFBQWNBQUFBQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFBQUFBQUlCd0FBNFFBQUFQQUFBQUFkQUFBQUhnQUFBQUFBQUFBWUJ3QUE0UUFBQVBFQUFBQWZBQUFBSUFBQUFBQUFBQUNZQ0FBQThnQUFBUE1BQUFEMEFBQUFBd0FBQVBVQUFBQUFBQUFBaUFnQUFQWUFBQUQzQUFBQStBQUFBQU1BQUFENUFBQUFBQUFBQUhnSUFBRGhBQUFBK2dBQUFDRUFBQUFpQUFBQUFBQUFBR2dJQUFEN0FBQUEvQUFBQVAwQUFBQURBQUFBL2dBQUFBQUFBQUJZQ0FBQTRRQUFBUDhBQUFBakFBQUFKQUFBQUFBQUFBQklDQUFBQUFFQUFBRUJBQUFDQVFBQUF3QUFBQU1CQUFBQUFBQUFPQWdBQUFRQkFBQUZBUUFBQmdFQUFBTUFBQUFIQVFBQUFBQUFBQ2dJQUFBSUFRQUFDUUVBQUFvQkFBQURBQUFBQ3dFQUFBQUFBQUFZQ0FBQURBRUFBQTBCQUFBT0FRQUFBd0FBQUE4QkFBQUFBQUFBQ0FnQUFCQUJBQUFSQVFBQUVnRUFBQU1BQUFBVEFRQUFBQUFBQVBnSEFBQVVBUUFBRlFFQUFCWUJBQUFEQUFBQUZ3RUFBQUFBQUFEb0J3QUFHQUVBQUJrQkFBQWFBUUFBQXdBQUFCc0JBQUFBQUFBQTJBY0FBQndCQUFBZEFRQUFIZ0VBQUFNQUFBQWZBUUFBQUFBQUFNZ0hBQUFnQVFBQUlRRUFBQ0lCQUFBREFBQUFJd0VBQUFBQUFBQzRCd0FBSkFFQUFDVUJBQUFtQVFBQUF3QUFBQ2NCQUFBQUFBQUFxQWNBQUNnQkFBQXBBUUFBS2dFQUFBTUFBQUFyQVFBQUFBQUFBSmdIQUFBc0FRQUFMUUVBQUM0QkFBQURBQUFBTHdFQUFBQUFBQUNJQndBQTRRQUFBREFCQUFBbEFBQUFKZ0FBQUFBQUFBQjRCd0FBTVFFQUFESUJBQUF6QVFBQUF3QUFBRFFCQUFBQUFBQUFhQWNBQU9FQUFBQTFBUUFBSndBQUFDZ0FBQUFBQUFBQVdBY0FBRFlCQUFBM0FRQUFPQUVBQUFNQUFBQTVBUUFBQUFBQUFFZ0hBQUE2QVFBQU93RUFBRHdCQUFBREFBQUFQUUVBQUFBQUFBQTRCd0FBUGdFQUFEOEJBQUJBQVFBQUF3QUFBRUVCQUFBQUFBQUFLQWNBQUVJQkFBQkRBUUFBUkFFQUFBTUFBQUJGQVFBQUFRQUFBQUVBQUFBQkFBQUFBZ0FBQUFnQUFBQUNBQUFBUmdFQUFBSUFBQUJMQUFBQUFBQUFBQUFBQUFCYmhnQUFBQUFBQUFFQUFBQUNBQUFBQkFBQUFMc0xBQUNLaGdBQUJ3QUFBSUVBQUFBck53RUFCZ0FBQUFBQUFBQmpoZ0FBQndBQUFHUUFBQUFyTndFQUFBQUFBS2dJQUFCSEFRQUFTQUVBQUFRQUFBQUZBQUFBQUFBQUFMZ0lBQUJKQVFBQVNnRUFBQU1BQUFBREFBQUFBUUFBQUV3QUFBQUFBQUFBMkFnQUFFc0JBQUJNQVFBQVRRRUFBQU1BQUFBNTd3QUFpd1FCQUpNRUFRQ3pCQUVBTXdVQkFETUhBUUFBQUFBQU9lOEFBT1A1QUFEcitRQUFDL29BQUl2NkFBQ0wvQUFBQUFBQUFEbnZBQUE3N3dBQVErOEFBR1B2QUFEajd3QUE0L0VBQUFBQUFBQUFBQUFBQUFBQUFETVBBUUJURHdFQTB3OEJBTk1SQVFBQUFBQUFBQUFBQU5NWkFRRHpHUUVBY3hvQkFITWNBUUFBQUFBQUFBQUFBSE1rQVFDVEpBRUFFeVVCQUJNbkFRQUFBQUFBOEFnQUFFc0JBQUJPQVFBQVR3RUFBQVFBQUFBQUFBQUFHZ0FBQUFvQUFBQUJBQUFBQUFBQUFBQUpBQUJMQVFBQVVBRUFBRkVCQUFBRkFBQUEvLy8vL3dJQUFBQUNBQUFBQVFBQUFQLy8vLzhDQUFBQUFRQUFBQUVBQUFBZEFBQUFIZ0FBQUI4QUFBQWdBQUFBSVFBQUFDRUFBQUFpQUFBQUlnQUFBQ01BQUFBakFBQUFKQUFBQUNRQUFBQWxBQUFBS0FBQUFDMEFBQUF6QUFBQU9RQUFBRUFBQUFCSUFBQUF4UUFBQUxrQUFBREpBQUFBeFFBQUFMa0FBQURKQUFBQWJnQUFBSm9BQUFCNkFBQUFpUUFBQUlzQUFBQ05BQUFBblFBQUFHc0FBQUNMQUFBQWZnQUFBR3NBQUFDTEFBQUFmZ0FBQUQ4QUFBQ1lBQUFBbUFBQUFHOEFBQUNOQUFBQW1RQUFBRzhBQUFCYkFBQUFxd0FBQUlZQUFBQ05BQUFBZVFBQUFJd0FBQUE5QUFBQW1nQUFBSGtBQUFDTUFBQUFQUUFBQUpvQUFBQnZBQUFBYndBQUFIMEFBQUJ1QUFBQWJnQUFBRjRBQUFCOEFBQUFiQUFBQUh3QUFBQnJBQUFBZlFBQUFJMEFBQUN6QUFBQW1RQUFBSDBBQUFCckFBQUFmUUFBQUkwQUFBQ3pBQUFBbVFBQUFIMEFBQUJyQUFBQWZRQUFBSTBBQUFDekFBQUFtUUFBQUgwQUFBQ01BQUFBaXdBQUFMWUFBQUMyQUFBQW1BQUFBSWdBQUFDWUFBQUFpQUFBQUprQUFBQ0lBQUFBaXdBQUFHOEFBQUNJQUFBQWl3QUFBRzhBQUFDYkFBQUFtZ0FBQUlzQUFBQ1pBQUFBaXdBQUFIc0FBQUI3QUFBQVB3QUFBSmtBQUFDbUFBQUF0d0FBQUl3QUFBQ0lBQUFBbVFBQUFKb0FBQUNtQUFBQXR3QUFBSXdBQUFDSUFBQUFtUUFBQUpvQUFBQ21BQUFBdHdBQUFJd0FBQUNJQUFBQW1RQUFBSm9BQUFDcUFBQUFtUUFBQUhzQUFBQjdBQUFBYXdBQUFIa0FBQUJyQUFBQWVRQUFBS2NBQUFDWEFBQUF0d0FBQUl3QUFBQ1hBQUFBdHdBQUFJd0FBQUNxQUFBQW1nQUFBSXNBQUFDWkFBQUFpd0FBQUhzQUFBQjdBQUFBUHdBQUFId0FBQUNtQUFBQXR3QUFBSXdBQUFDSUFBQUFtUUFBQUpvQUFBQ21BQUFBdHdBQUFJd0FBQUNJQUFBQW1RQUFBSm9BQUFDbUFBQUF0d0FBQUl3QUFBQ0lBQUFBbVFBQUFKb0FBQUNxQUFBQW1RQUFBSW9BQUFDS0FBQUFlZ0FBQUhrQUFBQjZBQUFBZVFBQUFLY0FBQUNYQUFBQXR3QUFBSXdBQUFDWEFBQUF0d0FBQUl3QUFBQ05BQUFBYndBQUFJd0FBQUNNQUFBQWpBQUFBSXdBQUFDS0FBQUFtUUFBQUlnQUFBQ25BQUFBbUFBQUFKZ0FBQUJyQUFBQXB3QUFBRnNBQUFCNkFBQUFhd0FBQUtjQUFBQnJBQUFBcHdBQUFGc0FBQUJyQUFBQWF3QUFBS2NBQUFDWkFBQUFtUUFBQUprQUFBRElBQUFBdVFBQUFLQUFBQUNhQUFBQW1nQUFBSm9BQUFDTUFBQUFYQUFBQUlrQUFBQ0tBQUFBakFBQUFKZ0FBQUNLQUFBQWl3QUFBSmtBQUFCS0FBQUFsUUFBQUZ3QUFBQ0xBQUFBYXdBQUFIb0FBQUNZQUFBQWpBQUFBTE1BQUFDbUFBQUF0Z0FBQUl3QUFBRGpBQUFBZWdBQUFNVUFBQUNhQUFBQXhBQUFBTVFBQUFDbkFBQUFtZ0FBQUpnQUFBQ25BQUFBdGdBQUFMWUFBQUNHQUFBQWxRQUFBSWdBQUFDWkFBQUFlUUFBQUlnQUFBQ0pBQUFBcVFBQUFNSUFBQUNtQUFBQXB3QUFBSm9BQUFDbkFBQUFpUUFBQUxZQUFBQ2FBQUFBeEFBQUFLY0FBQUNuQUFBQW1nQUFBSmdBQUFDbkFBQUF0Z0FBQUxZQUFBQ0dBQUFBbFFBQUFJZ0FBQUNaQUFBQWVRQUFBSWdBQUFCNkFBQUFxUUFBQU5BQUFBQ21BQUFBcHdBQUFKb0FBQUNZQUFBQXB3QUFBTFlBQUFCdUFBQUFiZ0FBQUh3QUFBQjlBQUFBakFBQUFKa0FBQUI5QUFBQWZ3QUFBSXdBQUFCdEFBQUFid0FBQUk4QUFBQi9BQUFBYndBQUFFOEFBQUJzQUFBQWV3QUFBRDhBQUFCOUFBQUFiZ0FBQUY0QUFBQnVBQUFBWHdBQUFFOEFBQUI5QUFBQWJ3QUFBRzRBQUFCT0FBQUFiZ0FBQUc4QUFBQnZBQUFBWHdBQUFGNEFBQUJzQUFBQWV3QUFBR3dBQUFCOUFBQUFiZ0FBQUh3QUFBQnVBQUFBWHdBQUFGNEFBQUI5QUFBQWJ3QUFBRzhBQUFCUEFBQUFmUUFBQUg0QUFBQnZBQUFBYndBQUFFOEFBQUJzQUFBQWV3QUFBRjBBQUFDWkFBQUFpZ0FBQUlvQUFBQjhBQUFBaWdBQUFGNEFBQURnQUFBQXB3QUFBSG9BQUFCZUFBQUFpZ0FBQUxZQUFBQ2FBQUFBbFFBQUFHc0FBQUNuQUFBQW1nQUFBSlVBQUFCY0FBQUFwd0FBQUpvQUFBQzRBQUFBbWdBQUFMY0FBQUM0QUFBQW1nQUFBSXNBQUFDYUFBQUFtZ0FBQUpvQUFBQ0xBQUFBbWdBQUFKb0FBQUNNQUFBQXhnQUFBS2tBQUFER0FBQUFsUUFBQUlZQUFBQUFBQUFBRUFrQUFFc0JBQUJTQVFBQVV3RUFBQVlBQUFBQUFBQUFBQUFBQUNBQUFBQWFBQUFBRlFBQUFCRUFBQUFOQUFBQUNRQUFBQVVBQUFBQ0FBQUFBQUFBQVA3Ly8vLzcvLy8vOS8vLy8vUC8vLy92Ly8vLzYvLy8vK2IvLy8vZy8vLy81di8vLyt2Ly8vL3YvLy8vOC8vLy8vZi8vLy83Ly8vLy92Ly8vd0FBQUFBQ0FBQUFCUUFBQUFrQUFBQU5BQUFBRVFBQUFCVUFBQUFhQUFBQUlBQUFBQUR3Ly8rYStmLy9jdnovLzRyOS8vOGUvdi8vZXY3Ly84WCsvLzhBLy8vL3hmNy8vM3IrLy84ZS92Ly9pdjMvLzNMOC8vK2ErZi8vQVBELy93QUFBQUFEQUFBQUF3QUFBQUlBQUFBQUFBQUFBd0FBQUFRQUFBQUVBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUVBQUFBQ0FBQUFBQUFBQUFNQUFBQUJBQUFBQXdBQUFBSUFBQUFEQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUFBQUFJQUFBQUJBQUFBQXdBQUFBQUFBQUFEQUFBQUFRQUFBQU1BQUFBQ0FBQUFBZ0FBd0FNQUFNQUVBQURBQlFBQXdBWUFBTUFIQUFEQUNBQUF3QWtBQU1BS0FBREFDd0FBd0F3QUFNQU5BQURBRGdBQXdBOEFBTUFRQUFEQUVRQUF3QklBQU1BVEFBREFGQUFBd0JVQUFNQVdBQURBRndBQXdCZ0FBTUFaQUFEQUdnQUF3QnNBQU1BY0FBREFIUUFBd0I0QUFNQWZBQURBQUFBQXN3RUFBTU1DQUFEREF3QUF3d1FBQU1NRkFBRERCZ0FBd3djQUFNTUlBQUREQ1FBQXd3b0FBTU1MQUFERERBQUF3dzBBQU5NT0FBREREd0FBd3dBQURMc0JBQXpEQWdBTXd3TUFETU1FQUF6VGtDY0FBQlFBQUFCRExsVlVSaTA0QUFBQUFBQUFBQUFBQUFBQUFONFNCSlVBQUFBQS8vLy8vLy8vLy8vLy8vLy9kQ2NBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdDY0FBQVVBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQUFBSUFBQUFHeThCQUFBRUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFyLy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQamlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3Q2NBQURncEFBQUpBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQ0FBQUFDTXpBUUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXVDa0FBQVVBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQW9BQUFBSUFBQUFLemNCQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQVAvLy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXpFWUFBTGdzQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQWdBQUFBTUFBQUFFQUFBQUJRQUFBQVlBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFBQUFFUUFBQUJJQUFBQVRBQUFBRkFBQUFCVUFBQUFXQUFBQUZ3QUFBQmdBQUFBWkFBQUFHZ0FBQUJzQUFBQWNBQUFBSFFBQUFCNEFBQUFmQUFBQUlBQUFBQ0VBQUFBaUFBQUFJd0FBQUNRQUFBQWxBQUFBSmdBQUFDY0FBQUFvQUFBQUtRQUFBQ29BQUFBckFBQUFMQUFBQUMwQUFBQXVBQUFBTHdBQUFEQUFBQUF4QUFBQU1nQUFBRE1BQUFBMEFBQUFOUUFBQURZQUFBQTNBQUFBT0FBQUFEa0FBQUE2QUFBQU93QUFBRHdBQUFBOUFBQUFQZ0FBQUQ4QUFBQkFBQUFBUVFBQUFFSUFBQUJEQUFBQVJBQUFBRVVBQUFCR0FBQUFSd0FBQUVnQUFBQkpBQUFBU2dBQUFFc0FBQUJNQUFBQVRRQUFBRTRBQUFCUEFBQUFVQUFBQUZFQUFBQlNBQUFBVXdBQUFGUUFBQUJWQUFBQVZnQUFBRmNBQUFCWUFBQUFXUUFBQUZvQUFBQmJBQUFBWEFBQUFGMEFBQUJlQUFBQVh3QUFBR0FBQUFCQkFBQUFRZ0FBQUVNQUFBQkVBQUFBUlFBQUFFWUFBQUJIQUFBQVNBQUFBRWtBQUFCS0FBQUFTd0FBQUV3QUFBQk5BQUFBVGdBQUFFOEFBQUJRQUFBQVVRQUFBRklBQUFCVEFBQUFWQUFBQUZVQUFBQldBQUFBVndBQUFGZ0FBQUJaQUFBQVdnQUFBSHNBQUFCOEFBQUFmUUFBQUg0QUFBQi9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM4TWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFJQUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFKUUFBQUNZQUFBQW5BQUFBS0FBQUFDa0FBQUFxQUFBQUt3QUFBQ3dBQUFBdEFBQUFMZ0FBQUM4QUFBQXdBQUFBTVFBQUFESUFBQUF6QUFBQU5BQUFBRFVBQUFBMkFBQUFOd0FBQURnQUFBQTVBQUFBT2dBQUFEc0FBQUE4QUFBQVBRQUFBRDRBQUFBL0FBQUFRQUFBQUdFQUFBQmlBQUFBWXdBQUFHUUFBQUJsQUFBQVpnQUFBR2NBQUFCb0FBQUFhUUFBQUdvQUFBQnJBQUFBYkFBQUFHMEFBQUJ1QUFBQWJ3QUFBSEFBQUFCeEFBQUFjZ0FBQUhNQUFBQjBBQUFBZFFBQUFIWUFBQUIzQUFBQWVBQUFBSGtBQUFCNkFBQUFXd0FBQUZ3QUFBQmRBQUFBWGdBQUFGOEFBQUJnQUFBQVlRQUFBR0lBQUFCakFBQUFaQUFBQUdVQUFBQm1BQUFBWndBQUFHZ0FBQUJwQUFBQWFnQUFBR3NBQUFCc0FBQUFiUUFBQUc0QUFBQnZBQUFBY0FBQUFIRUFBQUJ5QUFBQWN3QUFBSFFBQUFCMUFBQUFkZ0FBQUhjQUFBQjRBQUFBZVFBQUFIb0FBQUI3QUFBQWZBQUFBSDBBQUFCK0FBQUFmd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dBQUFHUUFBQURvQXdBQUVDY0FBS0NHQVFCQVFnOEFnSmFZQUFEaDlRVmZjSWtBL3drdkR3QUFBQURBQ1FBQVZBRUFBRlVCQUFBQUFBQUEyQWtBQUZZQkFBQlhBUUFBQVFBQUFBUUFBQUFDQUFBQUF3QUFBQUlBQUFBREFBQUFCUUFBQUFvQUFBQUZBQUFBQmdBQUFBWUFBQUFIQUFBQUFBQUFBT0FKQUFCWUFRQUFXUUVBQUFjQUFBQU1BQUFBQXdBQUFBUUFBQUFMQUFBQURBQUFBQTBBQUFBTkFBQUFEZ0FBQUFnQUFBQU9BQUFBQ1FBQUFBZ0FBQUFBQUFBQTZBa0FBQmNBQUFBWUFBQUErUC8vLy9qLy8vL29DUUFBR1FBQUFCb0FBQUNBTndBQWxEY0FBQWdBQUFBQUFBQUFBQW9BQUZvQkFBQmJBUUFBK1AvLy8vai8vLzhBQ2dBQVhBRUFBRjBCQUFDd053QUF4RGNBQUJ3QUFBQXdBQUFBQkFBQUFBQUFBQUF3Q2dBQVhnRUFBRjhCQUFEOC8vLy8vUC8vL3pBS0FBQmdBUUFBWVFFQUFPZzNBQUQ4TndBQURBQUFBQUFBQUFCSUNnQUFHd0FBQUJ3QUFBQUVBQUFBK1AvLy8wZ0tBQUFkQUFBQUhnQUFBUFQvLy8vMC8vLy9TQW9BQUI4QUFBQWdBQUFBR0RnQUFIUUtBQUNJQ2dBQUhBQUFBREFBQUFCQU9BQUFMRGdBQUFBQUFBQ1FDZ0FBWWdFQUFHTUJBQUFJQUFBQURBQUFBQU1BQUFBRUFBQUFEd0FBQUF3QUFBQU5BQUFBRFFBQUFBNEFBQUFJQUFBQUR3QUFBQW9BQUFBQUFBQUFvQW9BQUdRQkFBQmxBUUFBQ1FBQUFBUUFBQUFDQUFBQUF3QUFBQkFBQUFBREFBQUFCUUFBQUFvQUFBQUZBQUFBQmdBQUFCQUFBQUFMQUFBQUFBQUFBTEFLQUFCbUFRQUFad0VBQUFvQUFBQU1BQUFBQXdBQUFBUUFBQUFMQUFBQURBQUFBQTBBQUFBUkFBQUFFZ0FBQUF3QUFBQU9BQUFBQ1FBQUFBQUFBQURBQ2dBQWFBRUFBR2tCQUFBTEFBQUFCQUFBQUFJQUFBQURBQUFBQWdBQUFBTUFBQUFGQUFBQUV3QUFBQlFBQUFBTkFBQUFCZ0FBQUFjQUFBQUFBQUFBMEFvQUFHb0JBQUJyQVFBQWJBRUFBQUVBQUFBRkFBQUFFUUFBQUFBQUFBRHdDZ0FBYlFFQUFHNEJBQUJzQVFBQUFnQUFBQVlBQUFBU0FBQUFBQUFBQUFBTEFBQnZBUUFBY0FFQUFHd0JBQUFCQUFBQUFnQUFBQU1BQUFBRUFBQUFCUUFBQUFZQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQUFBQUFCQUN3QUFjUUVBQUhJQkFBQnNBUUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFBQUFBQWVBc0FBSE1CQUFCMEFRQUFiQUVBQUFNQUFBQUVBQUFBRndBQUFBVUFBQUFZQUFBQUFRQUFBQUlBQUFBR0FBQUFBQUFBQUxnTEFBQjFBUUFBZGdFQUFHd0JBQUFIQUFBQUNBQUFBQmtBQUFBSkFBQUFHZ0FBQUFNQUFBQUVBQUFBQ2dBQUFBQUFBQUR3Q3dBQWR3RUFBSGdCQUFCc0FRQUFGUUFBQUJzQUFBQWNBQUFBSFFBQUFCNEFBQUFmQUFBQUFRQUFBUGovLy8vd0N3QUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQUFBQUFBb0RBQUFlUUVBQUhvQkFBQnNBUUFBSFFBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFBZ0FBQVBqLy8vOG9EQUFBSGdBQUFCOEFBQUFnQUFBQUlRQUFBQ0lBQUFBakFBQUFKQUFBQUNVQUFBQklBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFBQUFBQUNVQUFBQnRBQUFBTHdBQUFDVUFBQUJrQUFBQUx3QUFBQ1VBQUFCNUFBQUFBQUFBQUNVQUFBQkpBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFJQUFBQUNVQUFBQndBQUFBQUFBQUFDVUFBQUJoQUFBQUlBQUFBQ1VBQUFCaUFBQUFJQUFBQUNVQUFBQmtBQUFBSUFBQUFDVUFBQUJJQUFBQU9nQUFBQ1VBQUFCTkFBQUFPZ0FBQUNVQUFBQlRBQUFBSUFBQUFDVUFBQUJaQUFBQUFBQUFBRUVBQUFCTkFBQUFBQUFBQUZBQUFBQk5BQUFBQUFBQUFFb0FBQUJoQUFBQWJnQUFBSFVBQUFCaEFBQUFjZ0FBQUhrQUFBQUFBQUFBUmdBQUFHVUFBQUJpQUFBQWNnQUFBSFVBQUFCaEFBQUFjZ0FBQUhrQUFBQUFBQUFBVFFBQUFHRUFBQUJ5QUFBQVl3QUFBR2dBQUFBQUFBQUFRUUFBQUhBQUFBQnlBQUFBYVFBQUFHd0FBQUFBQUFBQVRRQUFBR0VBQUFCNUFBQUFBQUFBQUVvQUFBQjFBQUFBYmdBQUFHVUFBQUFBQUFBQVNnQUFBSFVBQUFCc0FBQUFlUUFBQUFBQUFBQkJBQUFBZFFBQUFHY0FBQUIxQUFBQWN3QUFBSFFBQUFBQUFBQUFVd0FBQUdVQUFBQndBQUFBZEFBQUFHVUFBQUJ0QUFBQVlnQUFBR1VBQUFCeUFBQUFBQUFBQUU4QUFBQmpBQUFBZEFBQUFHOEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFUZ0FBQUc4QUFBQjJBQUFBWlFBQUFHMEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFSQUFBQUdVQUFBQmpBQUFBWlFBQUFHMEFBQUJpQUFBQVpRQUFBSElBQUFBQUFBQUFTZ0FBQUdFQUFBQnVBQUFBQUFBQUFFWUFBQUJsQUFBQVlnQUFBQUFBQUFCTkFBQUFZUUFBQUhJQUFBQUFBQUFBUVFBQUFIQUFBQUJ5QUFBQUFBQUFBRW9BQUFCMUFBQUFiZ0FBQUFBQUFBQktBQUFBZFFBQUFHd0FBQUFBQUFBQVFRQUFBSFVBQUFCbkFBQUFBQUFBQUZNQUFBQmxBQUFBY0FBQUFBQUFBQUJQQUFBQVl3QUFBSFFBQUFBQUFBQUFUZ0FBQUc4QUFBQjJBQUFBQUFBQUFFUUFBQUJsQUFBQVl3QUFBQUFBQUFCVEFBQUFkUUFBQUc0QUFBQmtBQUFBWVFBQUFIa0FBQUFBQUFBQVRRQUFBRzhBQUFCdUFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFGUUFBQUIxQUFBQVpRQUFBSE1BQUFCa0FBQUFZUUFBQUhrQUFBQUFBQUFBVndBQUFHVUFBQUJrQUFBQWJnQUFBR1VBQUFCekFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFGUUFBQUJvQUFBQWRRQUFBSElBQUFCekFBQUFaQUFBQUdFQUFBQjVBQUFBQUFBQUFFWUFBQUJ5QUFBQWFRQUFBR1FBQUFCaEFBQUFlUUFBQUFBQUFBQlRBQUFBWVFBQUFIUUFBQUIxQUFBQWNnQUFBR1FBQUFCaEFBQUFlUUFBQUFBQUFBQlRBQUFBZFFBQUFHNEFBQUFBQUFBQVRRQUFBRzhBQUFCdUFBQUFBQUFBQUZRQUFBQjFBQUFBWlFBQUFBQUFBQUJYQUFBQVpRQUFBR1FBQUFBQUFBQUFWQUFBQUdnQUFBQjFBQUFBQUFBQUFFWUFBQUJ5QUFBQWFRQUFBQUFBQUFCVEFBQUFZUUFBQUhRQUFBQUFBQUFBSlFBQUFHMEFBQUF2QUFBQUpRQUFBR1FBQUFBdkFBQUFKUUFBQUhrQUFBQWxBQUFBV1FBQUFDMEFBQUFsQUFBQWJRQUFBQzBBQUFBbEFBQUFaQUFBQUNVQUFBQkpBQUFBT2dBQUFDVUFBQUJOQUFBQU9nQUFBQ1VBQUFCVEFBQUFJQUFBQUNVQUFBQndBQUFBSlFBQUFFZ0FBQUE2QUFBQUpRQUFBRTBBQUFBbEFBQUFTQUFBQURvQUFBQWxBQUFBVFFBQUFEb0FBQUFsQUFBQVV3QUFBQ1VBQUFCSUFBQUFPZ0FBQUNVQUFBQk5BQUFBT2dBQUFDVUFBQUJUQUFBQUFBQUFBRmdNQUFCN0FRQUFmQUVBQUd3QkFBQUJBQUFBQUFBQUFJQU1BQUI5QVFBQWZnRUFBR3dCQUFBQ0FBQUFBQUFBQUtBTUFBQi9BUUFBZ0FFQUFHd0JBQUFsQUFBQUpnQUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQW5BQUFBRUFBQUFCRUFBQUFBQUFBQXlBd0FBSUVCQUFDQ0FRQUFiQUVBQUNnQUFBQXBBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQ29BQUFBV0FBQUFGd0FBQUFBQUFBRG9EQUFBZ3dFQUFJUUJBQUJzQVFBQUt3QUFBQ3dBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBTFFBQUFCd0FBQUFkQUFBQUFBQUFBQWdOQUFDRkFRQUFoZ0VBQUd3QkFBQXVBQUFBTHdBQUFCNEFBQUFmQUFBQUlBQUFBQ0VBQUFBd0FBQUFJZ0FBQUNNQUFBQUFBQUFBS0EwQUFJY0JBQUNJQVFBQWJBRUFBQU1BQUFBRUFBQUFBQUFBQUZBTkFBQ0pBUUFBaWdFQUFHd0JBQUFGQUFBQUJnQUFBQUFBQUFCNERRQUFpd0VBQUl3QkFBQnNBUUFBQVFBQUFDVUFBQUFBQUFBQW9BMEFBSTBCQUFDT0FRQUFiQUVBQUFJQUFBQW1BQUFBQUFBQUFNZ05BQUNQQVFBQWtBRUFBR3dCQUFBVEFBQUFCQUFBQUNRQUFBQUFBQUFBOEEwQUFKRUJBQUNTQVFBQWJBRUFBQlFBQUFBRkFBQUFKUUFBQUFBQUFBQklEZ0FBa3dFQUFKUUJBQUJzQVFBQUF3QUFBQVFBQUFBTEFBQUFNUUFBQURJQUFBQU1BQUFBTXdBQUFBQUFBQUFRRGdBQWt3RUFBSlVCQUFCc0FRQUFBd0FBQUFRQUFBQUxBQUFBTVFBQUFESUFBQUFNQUFBQU13QUFBQUFBQUFCNERnQUFsZ0VBQUpjQkFBQnNBUUFBQlFBQUFBWUFBQUFOQUFBQU5BQUFBRFVBQUFBT0FBQUFOZ0FBQUFBQUFBQzREZ0FBbUFFQUFKa0JBQUJzQVFBQUFBQUFBTWdPQUFDYUFRQUFtd0VBQUd3QkFBQU9BQUFBRlFBQUFBOEFBQUFXQUFBQUVBQUFBQUlBQUFBWEFBQUFEd0FBQUFBQUFBQVFEd0FBbkFFQUFKMEJBQUJzQVFBQU53QUFBRGdBQUFBbUFBQUFKd0FBQUNnQUFBQUFBQUFBSUE4QUFKNEJBQUNmQVFBQWJBRUFBRGtBQUFBNkFBQUFLUUFBQUNvQUFBQXJBQUFBWmdBQUFHRUFBQUJzQUFBQWN3QUFBR1VBQUFBQUFBQUFkQUFBQUhJQUFBQjFBQUFBWlFBQUFBQUFBQUFBQUFBQTRBb0FBSk1CQUFDZ0FRQUFiQUVBQUFBQUFBRHdEZ0FBa3dFQUFLRUJBQUJzQVFBQUdBQUFBQU1BQUFBRUFBQUFCUUFBQUJFQUFBQVpBQUFBRWdBQUFCb0FBQUFUQUFBQUJnQUFBQnNBQUFBUUFBQUFBQUFBQUZnT0FBQ1RBUUFBb2dFQUFHd0JBQUFIQUFBQUNBQUFBQkVBQUFBN0FBQUFQQUFBQUJJQUFBQTlBQUFBQUFBQUFKZ09BQUNUQVFBQW93RUFBR3dCQUFBSkFBQUFDZ0FBQUJNQUFBQStBQUFBUHdBQUFCUUFBQUJBQUFBQUFBQUFBQ0FPQUFDVEFRQUFwQUVBQUd3QkFBQURBQUFBQkFBQUFBc0FBQUF4QUFBQU1nQUFBQXdBQUFBekFBQUFBQUFBQUNBTUFBQVdBQUFBRndBQUFCZ0FBQUFaQUFBQUdnQUFBQnNBQUFBY0FBQUFBQUFBQUZBTUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBa0FBQUFBQUFBQUZBUEFBQ2xBUUFBcGdFQUFFRUFBQUFFQUFBQUFBQUFBR2dQQUFDbkFRQUFxQUVBQUtrQkFBQ3FBUUFBSEFBQUFBWUFBQUFwQUFBQUJ3QUFBQUFBQUFDUUR3QUFwd0VBQUtzQkFBQ3BBUUFBcWdFQUFCd0FBQUFIQUFBQUtnQUFBQWdBQUFBQUFBQUFvQThBQUt3QkFBQ3RBUUFBUWdBQUFBQUFBQUN3RHdBQXJBRUFBSzRCQUFCQ0FBQUFBQUFBQU9BUEFBQ25BUUFBcndFQUFLa0JBQUNxQVFBQUhRQUFBQUFBQUFEUUR3QUFwd0VBQUxBQkFBQ3BBUUFBcWdFQUFCNEFBQUFBQUFBQVlCQUFBS2NCQUFDeEFRQUFxUUVBQUtvQkFBQWZBQUFBQUFBQUFIQVFBQUNuQVFBQXNnRUFBS2tCQUFDcUFRQUFIQUFBQUFnQUFBQXJBQUFBQ1FBQUFBQUFBQUFCQUFFQURBQUxBQW9BQ3dBUUFBc0FLQUFoQUJnQUN3QVVBQXNBSUFBTEFGQUFJUUFTQUFzQUR3QUxBRUFBSVFDZ0FHTUFCQUFEQUFNQUFnQUNBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FESUFJZ0FpQUNJQUlnQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQVdBRXdBVEFCTUFFd0FUQUJNQUV3QVRBQk1BRXdBVEFCTUFFd0FUQUJNQUkyQWpZQ05nSTJBallDTmdJMkFqWUNOZ0kyQVRBQk1BRXdBVEFCTUFFd0FUQUNOVUkxUWpWQ05VSTFRalZDTVVJeFFqRkNNVUl4UWpGQ01VSXhRakZDTVVJeFFqRkNNVUl4UWpGQ01VSXhRakZDTVVJeFFUQUJNQUV3QVRBQk1BRXdBaldDTllJMWdqV0NOWUkxZ2pHQ01ZSXhnakdDTVlJeGdqR0NNWUl4Z2pHQ01ZSXhnakdDTVlJeGdqR0NNWUl4Z2pHQ01ZRXdBVEFCTUFFd0FJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRTQwYUdWcFpqRXlVM1J5WldGdFVtVmhaR1Z5UlFCT05HaGxhV1l4T1ZOMGNtVmhiVkpsWVdSbGNsOXRaVzF2Y25sRkFIQnlaWEJoY21WZmNtVmhaQUJ1SUR3OUlHMWZjbVZ0WVdsdWFXNW5BSE5yYVhCZmQybDBhRzkxZEY5aFpIWmhibU5wYm1kZlptbHNaVjl3YjNNQUtuWmhiSFZsSUQ0Z01BQjJZV3gxWlNBOFBTQXdlRVpHQUhaaGJIVmxJRHc5SURCNFJrWkdSZ0IyWVd4MVpTQThQU0F3ZUVaR1JrWkdSa1pHQUcxZmNHOXphWFJwYjI0Z1BUMGdiVjlrWVhSaExuTnBlbVVvS1FCemEybHdBRzVDZVhSbGN5QStQU0F3QUdsdWMyVnlkQUI4SUFCQ2IzZzZJQUFnTFMwdExTMEtBSE5wZW1VNklBQWdJQ0FvYUdWaFpHVnlJSE5wZW1VNklBQXBDZ0IyWlhKemFXOXVPaUFBWm14aFozTTZJQUJPVTNRelgxOHlNVFZpWVhOcFkxOXpkSEpwYm1kaWRXWkpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGVGxOZk9XRnNiRzlqWVhSdmNrbGpSVVZGUlFCT1UzUXpYMTh5TVRsaVlYTnBZMTl2YzNSeWFXNW5jM1J5WldGdFNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVTVUWHpsaGJHeHZZMkYwYjNKSlkwVkZSVVVBVGpSb1pXbG1PVUp2ZUVobFlXUmxja1VBYlY5MWRXbGtYM1I1Y0dVdWMybDZaU2dwSUQwOUlERTJBR0p2ZUM1all3QndjbVZ3Wlc1a1gyaGxZV1JsY2dBb2JWOW1iR0ZuY3lBbUlINHdlREF3UmtaR1JrWkdLU0E5UFNBd0FFNDBhR1ZwWmpOQ2IzaEZBR1owZVhBZ1ltOTRJSFJ2YnlCemJXRnNiQ0FvYkdWemN5QjBhR0Z1SURnZ1lubDBaWE1wQUcxaGFtOXlJR0p5WVc1a09pQUFiV2x1YjNJZ2RtVnljMmx2YmpvZ0FHTnZiWEJoZEdsaWJHVWdZbkpoYm1Sek9pQUFUalJvWldsbU9FSnZlRjltZEhsd1JRQk5ZWGhwYlhWdElHNTFiV0psY2lCdlppQmphR2xzWkNCaWIzaGxjeUFBSUdWNFkyVmxaR1ZrTGdCT1UzUXpYMTh5TVRoaVlYTnBZMTl6ZEhKcGJtZHpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZUbE5mT1dGc2JHOWpZWFJ2Y2tsalJVVkZSUUJDYjNnZ2MybDZaU0FvQUNCaWVYUmxjeWtnYzIxaGJHeGxjaUIwYUdGdUlHaGxZV1JsY2lCemFYcGxJQ2dBSUdKNWRHVnpLUUJUWldOMWNtbDBlU0JzYVcxcGRDQm1iM0lnYldGNGFXMTFiU0J1WlhOMGFXNW5JRzltSUdKdmVHVnpJR2hoY3lCaVpXVnVJR1Y0WTJWbFpHVmtBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaak5DYjNoRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBSGR5YVhSbEFHSnBkSE5mY0dWeVgyTm9ZVzV1Wld3NklBQXNBRTQwYUdWcFpqaENiM2hmY0dsNGFVVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5d2FYaHBSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCd2NtOW1hV3hsSUhOcGVtVTZJQUJPTkdobGFXWXhOMk52Ykc5eVgzQnliMlpwYkdWZmNtRjNSUUJPTkdobGFXWXhNMk52Ykc5eVgzQnliMlpwYkdWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqRTNZMjlzYjNKZmNISnZabWxzWlY5eVlYZEZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUdOdmJHOTFjbDl3Y21sdFlYSnBaWE02SUFCMGNtRnVjMlpsY2w5amFHRnlZV04wWlhKcGMzUnBZM002SUFCdFlYUnlhWGhmWTI5bFptWnBZMmxsYm5Sek9pQUFablZzYkY5eVlXNW5aVjltYkdGbk9pQUFUalJvWldsbU1UaGpiMnh2Y2w5d2NtOW1hV3hsWDI1amJIaEZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaakU0WTI5c2IzSmZjSEp2Wm1sc1pWOXVZMng0UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQnRYMk52Ykc5eVgzQnliMlpwYkdVQVkyOXNiM1Z5WDNSNWNHVTZJQUJ1YnlCamIyeHZjaUJ3Y205bWFXeGxDZ0JPTkdobGFXWTRRbTk0WDJOdmJISkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZlkyOXNja1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWJHOWpZWFJwYjI0NklBQk9OR2hsYVdZM1FtOTRYM1Z5YkVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU4wSnZlRjkxY214RlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTQwYUdWcFpqaENiM2hmWkhKbFprVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5a2NtVm1SVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCT05HaGxhV1k0UW05NFgyUnBibVpGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNVNDBhR1ZwWmpoQ2IzaGZaR2x1WmtWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFaM0p2ZFhBZ2RIbHdaVG9nQUh3Z1ozSnZkWEFnYVdRNklBQjhJR1Z1ZEdsMGVTQkpSSE02SUFBZ0FFNDBhR1ZwWmpoQ2IzaGZaM0p3YkVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjluY25Cc1JVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ1ZFcxaVpYSWdiMllnWkdGMFlTQmllWFJsY3pvZ0FFNDBhR1ZwWmpoQ2IzaGZhV1JoZEVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwWkdGMFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ6WlhGZmNISnZabWxzWlRvZ0FITmxjVjlzWlhabGJGOXBaSGhmTURvZ0FHaHBaMmhmWW1sMFpHVndkR2c2SUFCMGQyVnNkbVZmWW1sME9pQUFZMmh5YjIxaFgzTjFZbk5oYlhCc2FXNW5YM2c2SUFCamFISnZiV0ZmYzNWaWMyRnRjR3hwYm1kZmVUb2dBR05vY205dFlWOXpZVzF3YkdWZmNHOXphWFJwYjI0NklBQnBibWwwYVdGc1gzQnlaWE5sYm5SaGRHbHZibDlrWld4aGVUb2dBRzV2ZENCd2NtVnpaVzUwQ2dCamIyNW1hV2NnVDBKVmN6b0FUalJvWldsbU9FSnZlRjloZGpGRFJRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJGMk1VTkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUdOdmJtWnBaM1Z5WVhScGIyNWZkbVZ5YzJsdmJqb2dBR2RsYm1WeVlXeGZjSEp2Wm1sc1pWOXpjR0ZqWlRvZ0FHZGxibVZ5WVd4ZmRHbGxjbDltYkdGbk9pQUFaMlZ1WlhKaGJGOXdjbTltYVd4bFgybGtZem9nQUdkbGJtVnlZV3hmY0hKdlptbHNaVjlqYjIxd1lYUnBZbWxzYVhSNVgyWnNZV2R6T2lBQVoyVnVaWEpoYkY5amIyNXpkSEpoYVc1MFgybHVaR2xqWVhSdmNsOW1iR0ZuY3pvZ0FHZGxibVZ5WVd4ZmJHVjJaV3hmYVdSak9pQUFiV2x1WDNOd1lYUnBZV3hmYzJWbmJXVnVkR0YwYVc5dVgybGtZem9nQUhCaGNtRnNiR1ZzYVhOdFgzUjVjR1U2SUFCamFISnZiV0ZmWm05eWJXRjBPaUFBWW1sMFgyUmxjSFJvWDJ4MWJXRTZJQUJpYVhSZlpHVndkR2hmWTJoeWIyMWhPaUFBWVhablgyWnlZVzFsWDNKaGRHVTZJQUJqYjI1emRHRnVkRjltY21GdFpWOXlZWFJsT2lBQWJuVnRYM1JsYlhCdmNtRnNYMnhoZVdWeWN6b2dBSFJsYlhCdmNtRnNYMmxrWDI1bGMzUmxaRG9nQUd4bGJtZDBhRjl6YVhwbE9pQUFQR0Z5Y21GNVBnb0FZWEp5WVhsZlkyOXRjR3hsZEdWdVpYTnpPaUFBVGtGTVgzVnVhWFJmZEhsd1pUb2dBRTQwYUdWcFpqaENiM2hmYUhaalEwVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKVGpSb1pXbG1PRUp2ZUY5b2RtTkRSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCeVpXWmxjbVZ1WTJVZ2QybDBhQ0IwZVhCbElDY0FKd0FnWm5KdmJTQkpSRG9nQUNCMGJ5QkpSSE02SUFCT05HaGxhV1k0UW05NFgybHlaV1pGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNVNDBhR1ZwWmpoQ2IzaGZhWEpsWmtWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFZMnhsWVc1ZllYQmxjblIxY21VNklBQXZBQ0I0SUFCdlptWnpaWFE2SUFBZ095QUFUalJvWldsbU9FSnZlRjlqYkdGd1JRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJOc1lYQkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUcxcGNuSnZjaUJoZUdsek9pQUFkbVZ5ZEdsallXd0tBR2h2Y21sNmIyNTBZV3dLQUU0MGFHVnBaamhDYjNoZmFXMXBja1VBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXBiV2x5UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQnliM1JoZEdsdmJqb2dBQ0JrWldkeVpXVnpJQ2hEUTFjcENnQk9OR2hsYVdZNFFtOTRYMmx5YjNSRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYVhKdmRFVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBWVhWNElIUjVjR1U2SUFCaGRYZ2djM1ZpZEhsd1pYTTZJQUJPTkdobGFXWTRRbTk0WDJGMWVFTkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZllYVjRRMFZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWFXMWhaMlVnZDJsa2RHZzZJQUJwYldGblpTQm9aV2xuYUhRNklBQk9OR2hsYVdZNFFtOTRYMmx6Y0dWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYVhOd1pVVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBWVhOemIyTnBZWFJwYjI1eklHWnZjaUJwZEdWdElFbEVPaUFBY0hKdmNHVnlkSGtnYVc1a1pYZzZJQUFnS0dWemMyVnVkR2xoYkRvZ0FFNDBhR1ZwWmpoQ2IzaGZhWEJ0WVVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwY0cxaFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJPTkdobGFXWTRRbTk0WDJsd1kyOUZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZmFYQmpiMFZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQVRqUm9aV2xtT0VKdmVGOXBjSEp3UlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVbE9OR2hsYVdZNFFtOTRYMmx3Y25CRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRzFwYldVQWRYSnBJQUJwZEdWdFgwbEVPaUFBYVhSbGJWOXdjbTkwWldOMGFXOXVYMmx1WkdWNE9pQUFhWFJsYlY5MGVYQmxPaUFBYVhSbGJWOXVZVzFsT2lBQVkyOXVkR1Z1ZEY5MGVYQmxPaUFBWTI5dWRHVnVkRjlsYm1OdlpHbHVaem9nQUdsMFpXMGdkWEpwSUhSNWNHVTZJQUJvYVdSa1pXNGdhWFJsYlRvZ0FFNDBhR1ZwWmpoQ2IzaGZhVzVtWlVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwYm1abFJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJPTkdobGFXWTRRbTk0WDJscGJtWkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaamhDYjNoZmFXbHVaa1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXlYMFZGUlVVQWFXeHZZeUJpYjNnZ1kyOXVkR0ZwYm5NZ0FDQnBkR1Z0Y3l3Z2QyaHBZMmdnWlhoalpXVmtjeUIwYUdVZ2MyVmpkWEpwZEhrZ2JHbHRhWFFnYjJZZ0FDQnBkR1Z0Y3k0QVRuVnRZbVZ5SUc5bUlHVjRkR1Z1ZEhNZ2FXNGdhV3h2WXlCaWIzZ2dLQUFwSUdWNFkyVmxaSE1nYzJWamRYSnBkSGtnYkdsdGFYUWdLQUJwZEdWdElFbEVPaUFBSUNCamIyNXpkSEoxWTNScGIyNGdiV1YwYUc5a09pQUFJQ0JrWVhSaFgzSmxabVZ5Wlc1alpWOXBibVJsZURvZ0FDQWdZbUZ6WlY5dlptWnpaWFE2SUFBZ0lHVjRkR1Z1ZEhNNklBQTdhVzVrWlhnOUFFNDBhR1ZwWmpoQ2IzaGZhV3h2WTBVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU9FSnZlRjlwYkc5alJVNVRYemxoYkd4dlkyRjBiM0pKVXpKZlJVVkZSUUJ0WDJsMFpXMWZTVVFnUEQwZ01IaEdSa1pHQUU0MGFHVnBaamhDYjNoZmNHbDBiVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXdhWFJ0UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQndjbVZmWkdWbWFXNWxaRG9nQUdoaGJtUnNaWEpmZEhsd1pUb2dBRzVoYldVNklBQk9OR2hsYVdZNFFtOTRYMmhrYkhKRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqaENiM2hmYUdSc2NrVk9VMTg1WVd4c2IyTmhkRzl5U1ZNeVgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VKdmVGOXRaWFJoUlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQk9VM1F6WDE4eU1qQmZYM05vWVhKbFpGOXdkSEpmWlcxd2JHRmpaVWxPTkdobGFXWTRRbTk0WDJaMGVYQkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1sOUZSVVZGQUVKdmVDQnphWHBsSUFBZ1pYaGpaV1ZrY3lCelpXTjFjbWwwZVNCc2FXMXBkQzRBVGpSb1pXbG1PRUp2ZUY5dFpYUmhSUUJwYkc5aklHSnZlQ0JqYjI1MFlXbHVaV1FnQUNCaWVYUmxjeXdnZEc5MFlXd2diV1Z0YjNKNUlITnBlbVVnZDI5MWJHUWdZbVVnQUNCaWVYUmxjeXdnWlhoalpXVmthVzVuSUhSb1pTQnpaV04xY21sMGVTQnNhVzFwZENCdlppQUFJR0o1ZEdWekFHbHNiMk1nWkdGMFlTQndiMmx1ZEdWeWN5QnZkWFFnYjJZZ1lXeHNiM2RsWkNCeVlXNW5aUUJGZUhSbGJuUWdhVzRnYVd4dll5QmliM2dnY21WbVpYSmxibU5sY3lCa1lYUmhJRzkxZEhOcFpHVWdiMllnWm1sc1pTQmliM1Z1WkhNZ0FDaHdiMmx1ZEhNZ2RHOGdabWxzWlNCd2IzTnBkR2x2YmlBQWMzVmpZMlZ6Y3dCeVpXRmtYMlJoZEdFQWFXUmhkQ0JpYjNnZ2NtVm1aWEpsYm1ObFpDQnBiaUJwY21WbUlHSnZlQ0JwY3lCdWIzUWdjSEpsYzJWdWRDQnBiaUJtYVd4bEFFbDBaVzBnWTI5dWMzUnlkV04wYVc5dUlHMWxkR2h2WkNBQUlHNXZkQ0JwYlhCc1pXMWxiblJsWkFCcFpHRjBJR0p2ZUNCamIyNTBZV2x1WldRZ0FFbDBaVzBnS0VsRVBRQXBJR2hoY3lCdWJ5QndjbTl3WlhKMGFXVnpJR0Z6YzJsbmJtVmtJSFJ2SUdsMElHbHVJR2x3YldFZ1ltOTRBRTV2Ym1WNGFYTjBhVzVuSUhCeWIzQmxjblI1SUNocGJtUmxlRDBBS1NCbWIzSWdhWFJsYlNBQUlFbEVQUUFnY21WbVpYSmxibU5sWkNCcGJpQnBjRzFoSUdKdmVBQlZibXR1YjNkdUlHVnljbTl5QUdWeWNtOXlMbU5qQUdkbGRGOWxjbkp2Y2w5emRISnBibWNBUTI5c2IzSWdjSEp2Wm1sc1pTQmtiMlZ6SUc1dmRDQmxlR2x6ZEFCRmNuSnZjaUJrZFhKcGJtY2daVzVqYjJScGJtY2diM0lnZDNKcGRHbHVaeUJ2ZFhSd2RYUWdabWxzWlFCRmJtTnZaR1Z5SUhCc2RXZHBiaUJuWlc1bGNtRjBaV1FnWVc0Z1pYSnliM0lBUkdWamIyUmxjaUJ3YkhWbmFXNGdaMlZ1WlhKaGRHVmtJR0Z1SUdWeWNtOXlBRTFsYlc5eWVTQmhiR3h2WTJGMGFXOXVJR1Z5Y205eUFGVnpZV2RsSUdWeWNtOXlBRlZ1YzNWd2NHOXlkR1ZrSUdabFlYUjFjbVVBVlc1emRYQndiM0owWldRZ1ptbHNaUzEwZVhCbEFFbHVkbUZzYVdRZ2FXNXdkWFFBU1c1d2RYUWdabWxzWlNCa2IyVnpJRzV2ZENCbGVHbHpkQUJEWVc1dWIzUWdkM0pwZEdVZ2IzVjBjSFYwSUdSaGRHRUFWVzV6ZFhCd2IzSjBaV1FnWW1sMElHUmxjSFJvQUZWdWMzVndjRzl5ZEdWa0lHbDBaVzBnWTI5dWMzUnlkV04wYVc5dUlHMWxkR2h2WkFCVmJuTjFjSEJ2Y25SbFpDQmpiMnh2Y2lCamIyNTJaWEp6YVc5dUFGVnVjM1Z3Y0c5eWRHVmtJR1JoZEdFZ2RtVnljMmx2YmdCVmJuTjFjSEJ2Y25SbFpDQnBiV0ZuWlNCMGVYQmxBRlZ1YzNWd2NHOXlkR1ZrSUdOdlpHVmpBRWx1ZG1Gc2FXUWdjR0Z5WVcxbGRHVnlJSFpoYkhWbEFGVnVjM1Z3Y0c5eWRHVmtJSEJoY21GdFpYUmxjZ0JVYUdVZ2RtVnljMmx2YmlCdlppQjBhR1VnY0dGemMyVmtJSGR5YVhSbGNpQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0FGUm9aU0IyWlhKemFXOXVJRzltSUhSb1pTQndZWE56WldRZ2NHeDFaMmx1SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1FBVG05dUxXVjRhWE4wYVc1bklHbHRZV2RsSUdOb1lXNXVaV3dnY21WbVpYSmxibU5sWkFCT1ZVeE1JR0Z5WjNWdFpXNTBJSEpsWTJWcGRtVmtBRTV2YmkxbGVHbHpkR2x1WnlCcGRHVnRJRWxFSUhKbFptVnlaVzVqWldRQVUyVmpkWEpwZEhrZ2JHbHRhWFFnWlhoalpXVmtaV1FBU1c1MllXeHBaQ0J3YVhocElHSnZlQUJKYm5aaGJHbGtJR2x0WVdkbElITnBlbVVBU1c1MllXeHBaQ0JtY21GamRHbHZibUZzSUc1MWJXSmxjZ0JYY205dVp5QjBhV3hsSUdsdFlXZGxJR05vY205dFlTQm1iM0p0WVhRQVZXNXJibTkzYmlCamIyeHZjaUJ3Y205bWFXeGxJSFI1Y0dVQVRtOGdiM0lnYVc1MllXeHBaQ0J3Y21sdFlYSjVJR2wwWlcwQVZIbHdaU0J2WmlCaGRYaHBiR2xoY25rZ2FXMWhaMlVnZFc1emNHVmphV1pwWldRQVQzWmxjbXhoZVNCcGJXRm5aU0J2ZFhSemFXUmxJRzltSUdOaGJuWmhjeUJoY21WaEFFbHVkbUZzYVdRZ2IzWmxjbXhoZVNCa1lYUmhBRWx1ZG1Gc2FXUWdZMnhsWVc0dFlYQmxjblIxY21VZ2MzQmxZMmxtYVdOaGRHbHZiZ0JKZEdWdElHaGhjeUJ1YnlCa1lYUmhBRTV2SUhCeWIzQmxjblJwWlhNZ1lYTnphV2R1WldRZ2RHOGdhWFJsYlFBbmFYQnRZU2NnWW05NElISmxabVZ5Wlc1alpYTWdZU0J1YjI0dFpYaHBjM1JwYm1jZ2NISnZjR1Z5ZEhrQVRtOTBJR0VnSjNCcFkzUW5JR2hoYm1Sc1pYSUFUbThnSjJsdVptVW5JR0p2ZUFCT2J5QW5hWEpsWmljZ1ltOTRBRTV2SUNkcGNISndKeUJpYjNnQVRtOGdKMmxwYm1ZbklHSnZlQUJPYnlBbmFXeHZZeWNnWW05NEFFNXZJQ2RwY0cxaEp5QmliM2dBVG04Z0oybHdZMjhuSUdKdmVBQk9ieUFuY0dsMGJTY2dZbTk0QUU1dklDZGhkakZESnlCaWIzZ0FUbThnSjJoMlkwTW5JR0p2ZUFCT2J5QW5hR1JzY2ljZ1ltOTRBRTV2SUNkdFpYUmhKeUJpYjNnQVRtOGdKMmxrWVhRbklHSnZlQUJPYnlBblpuUjVjQ2NnWW05NEFFMXBjM05wYm1jZ1ozSnBaQ0JwYldGblpYTUFTVzUyWVd4cFpDQm5jbWxrSUdSaGRHRUFTVzUyWVd4cFpDQmliM2dnYzJsNlpRQlZibVY0Y0dWamRHVmtJR1Z1WkNCdlppQm1hV3hsQUZWdWMzQmxZMmxtYVdWa0FEb2dBRVpwYkdVZ1pHOWxjeUJ1YjNRZ2FXNWpiSFZrWlNCaGJua2djM1Z3Y0c5eWRHVmtJR0p5WVc1a2N5NEtBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaakU1VTNSeVpXRnRVbVZoWkdWeVgyMWxiVzl5ZVVWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFhR1ZwWmw5bWFXeGxMbU5qQUVsMFpXMGdkMmwwYUNCSlJDQUFJR2hoY3lCdWJ5QmpiMjF3Y21WemMyVmtJR1JoZEdFQVoyVjBYMk52YlhCeVpYTnpaV1JmYVcxaFoyVmZaR0YwWVFCb1pXbG1YMmx0WVdkbExtTmpBR05vY205dFlWOW9YM04xWW5OaGJYQnNhVzVuQUdOb2NtOXRZVjkyWDNOMVluTmhiWEJzYVc1bkFHNTFiVjlwYm5SbGNteGxZWFpsWkY5d2FYaGxiSE5mY0dWeVgzQnNZVzVsQUhkcFpIUm9JRDQ5SURBQVlXeHNiMk1BYUdWcFoyaDBJRDQ5SURBQVltbDBYMlJsY0hSb0lENDlJREVBWW1sMFgyUmxjSFJvSUR3OUlETXlBRzFmWW1sMFgyUmxjSFJvSUR3OUlERTJBR0p3Y0NBOFBTQXlOVFVBWjJWMFgzTjBiM0poWjJWZlltbDBjMTl3WlhKZmNHbDRaV3dBYVhOZlkyaHliMjFoWDNkcGRHaGZZV3h3YUdFQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpUalJvWldsbU1UUklaV2xtVUdsNFpXeEpiV0ZuWlVWT1UxODVZV3hzYjJOaGRHOXlTVk15WDBWRlJVVUFRMkZ1SUdOMWNuSmxiblJzZVNCdmJteDVJRzFwY25KdmNpQnBiV0ZuWlhNZ2QybDBhQ0E0SUdKcGRITWdjR1Z5SUhCcGVHVnNBRU5oYmlCamRYSnlaVzUwYkhrZ2IyNXNlU0JtYVd4c0lHbHRZV2RsY3lCM2FYUm9JRGdnWW1sMGN5QndaWElnY0dsNFpXd0FabWxzYkY5U1IwSmZNVFppYVhRQWFXNWZkeUErUFNBd0FHOTJaWEpzWVhrQWFXNWZhQ0ErUFNBd0FHOTFkRjkzSUQ0OUlEQUFiM1YwWDJnZ1BqMGdNQUJQZG1WeWJHRjVJR2x0WVdkbElHOTFkSE5wWkdVZ2IyWWdjbWxuYUhRZ2IzSWdZbTkwZEc5dElHTmhiblpoY3lCaWIzSmtaWElBVDNabGNteGhlU0JwYldGblpTQnZkWFJ6YVdSbElHOW1JR3hsWm5RZ2IzSWdkRzl3SUdOaGJuWmhjeUJpYjNKa1pYSUFhR1ZwWmw5blpYUmZkbVZ5YzJsdmJnQnBhUUJvWldsbVgyZGxkRjkyWlhKemFXOXVYMjUxYldKbGNnQm9aV2xtWDJOdmJuUmxlSFJmWVd4c2IyTUFhR1ZwWmw5amIyNTBaWGgwWDJaeVpXVUFkbWxwQUdobGFXWmZZMjl1ZEdWNGRGOXlaV0ZrWDJaeWIyMWZiV1Z0YjNKNUFHbHBhV2tBYUdWcFpsOWpiMjUwWlhoMFgyZGxkRjl1ZFcxaVpYSmZiMlpmZEc5d1gyeGxkbVZzWDJsdFlXZGxjd0JwYVdrQWFHVnBabDlxYzE5amIyNTBaWGgwWDJkbGRGOXNhWE4wWDI5bVgzUnZjRjlzWlhabGJGOXBiV0ZuWlY5SlJITUFhR1ZwWmw5cWMxOWpiMjUwWlhoMFgyZGxkRjlwYldGblpWOW9ZVzVrYkdVQWFHVnBabDlxYzE5a1pXTnZaR1ZmYVcxaFoyVUFhV2xwYVdrQWFHVnBabDlwYldGblpWOW9ZVzVrYkdWZmNtVnNaV0Z6WlFCb1pXbG1YMlZ5Y205eVgyTnZaR1VBYUdWcFpsOWxjbkp2Y2w5UGF3Qm9aV2xtWDJWeWNtOXlYMGx1Y0hWMFgyUnZaWE5mYm05MFgyVjRhWE4wQUdobGFXWmZaWEp5YjNKZlNXNTJZV3hwWkY5cGJuQjFkQUJvWldsbVgyVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyWnBiR1YwZVhCbEFHaGxhV1pmWlhKeWIzSmZWVzV6ZFhCd2IzSjBaV1JmWm1WaGRIVnlaUUJvWldsbVgyVnljbTl5WDFWellXZGxYMlZ5Y205eUFHaGxhV1pmWlhKeWIzSmZUV1Z0YjNKNVgyRnNiRzlqWVhScGIyNWZaWEp5YjNJQWFHVnBabDlsY25KdmNsOUVaV052WkdWeVgzQnNkV2RwYmw5bGNuSnZjZ0JvWldsbVgyVnljbTl5WDBWdVkyOWtaWEpmY0d4MVoybHVYMlZ5Y205eUFHaGxhV1pmWlhKeWIzSmZSVzVqYjJScGJtZGZaWEp5YjNJQWFHVnBabDlsY25KdmNsOURiMnh2Y2w5d2NtOW1hV3hsWDJSdlpYTmZibTkwWDJWNGFYTjBBR2hsYVdaZmMzVmlaWEp5YjNKZlkyOWtaUUJvWldsbVgzTjFZbVZ5Y205eVgxVnVjM0JsWTJsbWFXVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlEyRnVibTkwWDNkeWFYUmxYMjkxZEhCMWRGOWtZWFJoQUdobGFXWmZjM1ZpWlhKeWIzSmZSVzVrWDI5bVgyUmhkR0VBYUdWcFpsOXpkV0psY25KdmNsOUpiblpoYkdsa1gySnZlRjl6YVhwbEFHaGxhV1pmYzNWaVpYSnliM0pmVG05ZlpuUjVjRjlpYjNnQWFHVnBabDl6ZFdKbGNuSnZjbDlPYjE5cFpHRjBYMkp2ZUFCb1pXbG1YM04xWW1WeWNtOXlYMDV2WDIxbGRHRmZZbTk0QUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmYUdSc2NsOWliM2dBYUdWcFpsOXpkV0psY25KdmNsOU9iMTlvZG1ORFgySnZlQUJvWldsbVgzTjFZbVZ5Y205eVgwNXZYM0JwZEcxZlltOTRBR2hsYVdaZmMzVmlaWEp5YjNKZlRtOWZhWEJqYjE5aWIzZ0FhR1ZwWmw5emRXSmxjbkp2Y2w5T2IxOXBjRzFoWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDA1dlgybHNiMk5mWW05NEFHaGxhV1pmYzNWaVpYSnliM0pmVG05ZmFXbHVabDlpYjNnQWFHVnBabDl6ZFdKbGNuSnZjbDlPYjE5cGNISndYMkp2ZUFCb1pXbG1YM04xWW1WeWNtOXlYMDV2WDJseVpXWmZZbTk0QUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmY0dsamRGOW9ZVzVrYkdWeUFHaGxhV1pmYzNWaVpYSnliM0pmU1hCdFlWOWliM2hmY21WbVpYSmxibU5sYzE5dWIyNWxlR2x6ZEdsdVoxOXdjbTl3WlhKMGVRQm9aV2xtWDNOMVltVnljbTl5WDA1dlgzQnliM0JsY25ScFpYTmZZWE56YVdkdVpXUmZkRzlmYVhSbGJRQm9aV2xtWDNOMVltVnljbTl5WDA1dlgybDBaVzFmWkdGMFlRQm9aV2xtWDNOMVltVnljbTl5WDBsdWRtRnNhV1JmWjNKcFpGOWtZWFJoQUdobGFXWmZjM1ZpWlhKeWIzSmZUV2x6YzJsdVoxOW5jbWxrWDJsdFlXZGxjd0JvWldsbVgzTjFZbVZ5Y205eVgwNXZYMkYyTVVOZlltOTRBR2hsYVdaZmMzVmlaWEp5YjNKZlNXNTJZV3hwWkY5amJHVmhibDloY0dWeWRIVnlaUUJvWldsbVgzTjFZbVZ5Y205eVgwbHVkbUZzYVdSZmIzWmxjbXhoZVY5a1lYUmhBR2hsYVdaZmMzVmlaWEp5YjNKZlQzWmxjbXhoZVY5cGJXRm5aVjl2ZFhSemFXUmxYMjltWDJOaGJuWmhjd0JvWldsbVgzTjFZbVZ5Y205eVgwRjFlR2xzYVdGeWVWOXBiV0ZuWlY5MGVYQmxYM1Z1YzNCbFkybG1hV1ZrQUdobGFXWmZjM1ZpWlhKeWIzSmZUbTlmYjNKZmFXNTJZV3hwWkY5d2NtbHRZWEo1WDJsMFpXMEFhR1ZwWmw5emRXSmxjbkp2Y2w5T2IxOXBibVpsWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDFObFkzVnlhWFI1WDJ4cGJXbDBYMlY0WTJWbFpHVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlZXNXJibTkzYmw5amIyeHZjbDl3Y205bWFXeGxYM1I1Y0dVQWFHVnBabDl6ZFdKbGNuSnZjbDlYY205dVoxOTBhV3hsWDJsdFlXZGxYMk5vY205dFlWOW1iM0p0WVhRQWFHVnBabDl6ZFdKbGNuSnZjbDlKYm5aaGJHbGtYMlp5WVdOMGFXOXVZV3hmYm5WdFltVnlBR2hsYVdaZmMzVmlaWEp5YjNKZlNXNTJZV3hwWkY5cGJXRm5aVjl6YVhwbEFHaGxhV1pmYzNWaVpYSnliM0pmVG05dVpYaHBjM1JwYm1kZmFYUmxiVjl5WldabGNtVnVZMlZrQUdobGFXWmZjM1ZpWlhKeWIzSmZUblZzYkY5d2IybHVkR1Z5WDJGeVozVnRaVzUwQUdobGFXWmZjM1ZpWlhKeWIzSmZUbTl1WlhocGMzUnBibWRmYVcxaFoyVmZZMmhoYm01bGJGOXlaV1psY21WdVkyVmtBR2hsYVdaZmMzVmlaWEp5YjNKZlZXNXpkWEJ3YjNKMFpXUmZjR3gxWjJsdVgzWmxjbk5wYjI0QWFHVnBabDl6ZFdKbGNuSnZjbDlWYm5OMWNIQnZjblJsWkY5M2NtbDBaWEpmZG1WeWMybHZiZ0JvWldsbVgzTjFZbVZ5Y205eVgxVnVjM1Z3Y0c5eWRHVmtYM0JoY21GdFpYUmxjZ0JvWldsbVgzTjFZbVZ5Y205eVgwbHVkbUZzYVdSZmNHRnlZVzFsZEdWeVgzWmhiSFZsQUdobGFXWmZjM1ZpWlhKeWIzSmZTVzUyWVd4cFpGOXdhWGhwWDJKdmVBQm9aV2xtWDNOMVltVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyTnZaR1ZqQUdobGFXWmZjM1ZpWlhKeWIzSmZWVzV6ZFhCd2IzSjBaV1JmYVcxaFoyVmZkSGx3WlFCb1pXbG1YM04xWW1WeWNtOXlYMVZ1YzNWd2NHOXlkR1ZrWDJSaGRHRmZkbVZ5YzJsdmJnQm9aV2xtWDNOMVltVnljbTl5WDFWdWMzVndjRzl5ZEdWa1gyTnZiRzl5WDJOdmJuWmxjbk5wYjI0QWFHVnBabDl6ZFdKbGNuSnZjbDlWYm5OMWNIQnZjblJsWkY5cGRHVnRYMk52Ym5OMGNuVmpkR2x2Ymw5dFpYUm9iMlFBYUdWcFpsOXpkV0psY25KdmNsOVZibk4xY0hCdmNuUmxaRjlpYVhSZlpHVndkR2dBYUdWcFpsOWpiMjF3Y21WemMybHZibDltYjNKdFlYUUFhR1ZwWmw5amIyMXdjbVZ6YzJsdmJsOTFibVJsWm1sdVpXUUFhR1ZwWmw5amIyMXdjbVZ6YzJsdmJsOUlSVlpEQUdobGFXWmZZMjl0Y0hKbGMzTnBiMjVmUVZaREFHaGxhV1pmWTI5dGNISmxjM05wYjI1ZlNsQkZSd0JvWldsbVgyTnZiWEJ5WlhOemFXOXVYMEZXTVFCb1pXbG1YMk5vY205dFlRQm9aV2xtWDJOb2NtOXRZVjkxYm1SbFptbHVaV1FBYUdWcFpsOWphSEp2YldGZmJXOXViMk5vY205dFpRQm9aV2xtWDJOb2NtOXRZVjgwTWpBQWFHVnBabDlqYUhKdmJXRmZOREl5QUdobGFXWmZZMmh5YjIxaFh6UTBOQUJvWldsbVgyTm9jbTl0WVY5cGJuUmxjbXhsWVhabFpGOVNSMElBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVa2RDUVFCb1pXbG1YMk5vY205dFlWOXBiblJsY214bFlYWmxaRjlTVWtkSFFrSmZRa1VBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVbEpIUjBKQ1FVRmZRa1VBYUdWcFpsOWphSEp2YldGZmFXNTBaWEpzWldGMlpXUmZVbEpIUjBKQ1gweEZBR2hsYVdaZlkyaHliMjFoWDJsdWRHVnliR1ZoZG1Wa1gxSlNSMGRDUWtGQlgweEZBR2hsYVdaZlkyaHliMjFoWDJsdWRHVnliR1ZoZG1Wa1h6STBZbWwwQUdobGFXWmZZMmh5YjIxaFgybHVkR1Z5YkdWaGRtVmtYek15WW1sMEFHaGxhV1pmWTI5c2IzSnpjR0ZqWlFCb1pXbG1YMk52Ykc5eWMzQmhZMlZmZFc1a1pXWnBibVZrQUdobGFXWmZZMjlzYjNKemNHRmpaVjlaUTJKRGNnQm9aV2xtWDJOdmJHOXljM0JoWTJWZlVrZENBR2hsYVdaZlkyOXNiM0p6Y0dGalpWOXRiMjV2WTJoeWIyMWxBR2hsYVdaZlkyaGhibTVsYkFCb1pXbG1YMk5vWVc1dVpXeGZXUUJvWldsbVgyTm9ZVzV1Wld4ZlEzSUFhR1ZwWmw5amFHRnVibVZzWDBOaUFHaGxhV1pmWTJoaGJtNWxiRjlTQUdobGFXWmZZMmhoYm01bGJGOUhBR2hsYVdaZlkyaGhibTVsYkY5Q0FHaGxhV1pmWTJoaGJtNWxiRjlCYkhCb1lRQm9aV2xtWDJOb1lXNXVaV3hmYVc1MFpYSnNaV0YyWldRQWFHVnBabDlqYjI1MFpYaDBBSFlBZG1rQWFHVnBabDlwYldGblpWOW9ZVzVrYkdVQWFHVnBabDlwYldGblpRQm9aV2xtWDJWeWNtOXlBR2tBWTI5a1pRQjJhV2xwQUhOMVltTnZaR1VBTVRCb1pXbG1YMlZ5Y205eUFGQkxNVEJvWldsbVgybHRZV2RsQUZBeE1HaGxhV1pmYVcxaFoyVUFNVEJvWldsbVgybHRZV2RsQUZCTE1UZG9aV2xtWDJsdFlXZGxYMmhoYm1Sc1pRQlFNVGRvWldsbVgybHRZV2RsWDJoaGJtUnNaUUF4TjJobGFXWmZhVzFoWjJWZmFHRnVaR3hsQUZCTE1USm9aV2xtWDJOdmJuUmxlSFFBVURFeWFHVnBabDlqYjI1MFpYaDBBREV5YUdWcFpsOWpiMjUwWlhoMEFERXlhR1ZwWmw5amFHRnVibVZzQURFMWFHVnBabDlqYjJ4dmNuTndZV05sQURFeGFHVnBabDlqYUhKdmJXRUFNak5vWldsbVgyTnZiWEJ5WlhOemFXOXVYMlp2Y20xaGRBQXhPR2hsYVdaZmMzVmlaWEp5YjNKZlkyOWtaUUF4TldobGFXWmZaWEp5YjNKZlkyOWtaUUJPTVRCbGJYTmpjbWx3ZEdWdU0zWmhiRVVBYVhOZmNISnBiV0Z5ZVFCMGFIVnRZbTVoYVd4ekFIZHBaSFJvQUdobGFXZG9kQUJqYUhKdmJXRUFZMjlzYjNKemNHRmpaUUJvWldsbVgybHRZV2RsWDJkbGRGOWphSEp2YldGZlptOXliV0YwS0dsdFlXZGxLU0E5UFNCb1pXbG1YMk5vY205dFlWOXBiblJsY214bFlYWmxaRjh5TkdKcGRBQXVMMmhsYVdaZlpXMXpZM0pwY0hSbGJpNW9BR2hsYVdaZmFXMWhaMlZmWjJWMFgyTm9jbTl0WVY5bWIzSnRZWFFvYVcxaFoyVXBJRDA5SUdobGFXWmZZMmh5YjIxaFgyMXZibTlqYUhKdmJXVUFaR0YwWVFCT1UzUXpYMTh5TVRKaVlYTnBZMTl6ZEhKcGJtZEpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGVGxOZk9XRnNiRzlqWVhSdmNrbGpSVVZGUlFCT1UzUXpYMTh5TWpGZlgySmhjMmxqWDNOMGNtbHVaMTlqYjIxdGIyNUpUR0l4UlVWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVTQwYUdWcFpqRXhTR1ZwWmtOdmJuUmxlSFJGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERXVNVEF1TUFCVGRXTmpaWE56QUV4bGMzTWdkR2hoYmlBNElHSjVkR1Z6SUc5bUlHUmhkR0VBUjNKcFpDQnBiV0ZuWlNCa1lYUmhJR2x1WTI5dGNHeGxkR1VBQ2dCUGRtVnliR0Y1SUdsdFlXZGxJR1JoZEdFZ2FXNWpiMjF3YkdWMFpRQlBkbVZ5YkdGNUlHbHRZV2RsSUdSaGRHRWdkbVZ5YzJsdmJpQUFJR2x6SUc1dmRDQnBiWEJzWlcxbGJuUmxaQ0I1WlhRQWVBQnBiV0ZuWlY5cGJtUmxlQ0E4SUcxZmIyWm1jMlYwY3k1emFYcGxLQ2tBYUdWcFpsOWpiMjUwWlhoMExtTmpBR2RsZEY5dlptWnpaWFFBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtT0VobGFXWkdhV3hsUlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQm9kbU14QUdkeWFXUUFhV1JsYmdCcGIzWnNBR0YyTURFQUozQnBkRzBuSUdKdmVDQnlaV1psY21WdVkyVnpJR0VnYm05dUxXVjRhWE4wYVc1bklHbHRZV2RsQUVsdFlXZGxJSE5wZW1VZ0FDQmxlR05sWldSeklIUm9aU0J0WVhocGJYVnRJR2x0WVdkbElITnBlbVVnQUZSdmJ5QnRZVzU1SUhSb2RXMWlibUZwYkNCeVpXWmxjbVZ1WTJWekFGUm9kVzFpYm1GcGJDQnlaV1psY21WdVkyVnpJR0VnYm05dUxXVjRhWE4wYVc1bklHbHRZV2RsQUZSb2RXMWlibUZwYkNCeVpXWmxjbVZ1WTJWeklHRnViM1JvWlhJZ2RHaDFiV0p1WVdsc0FGSmxZM1Z5YzJsMlpTQjBhSFZ0WW01aGFXd2dhVzFoWjJVZ1pHVjBaV04wWldRQVRtOGdZWFY0UXlCd2NtOXdaWEowZVNCbWIzSWdhVzFoWjJVZ0FGUnZieUJ0WVc1NUlHRjFlR2xzYVdGeWVTQnBiV0ZuWlNCeVpXWmxjbVZ1WTJWekFIVnlianB0Y0dWbk9tRjJZem95TURFMU9tRjFlR2xrT2pFQWRYSnVPbTF3WldjNmFHVjJZem95TURFMU9tRjFlR2xrT2pFQWRYSnVPbTF3WldjNmJYQmxaMEk2WTJsamNEcHplWE4wWlcxek9tRjFlR2xzYVdGeWVUcGhiSEJvWVFCT2IyNHRaWGhwYzNScGJtY2dZV3h3YUdFZ2FXMWhaMlVnY21WbVpYSmxibU5sWkFCU1pXTjFjbk5wZG1VZ1lXeHdhR0VnYVcxaFoyVWdaR1YwWldOMFpXUUFkWEp1T20xd1pXYzZhR1YyWXpveU1ERTFPbUYxZUdsa09qSUFkWEp1T20xd1pXYzZiWEJsWjBJNlkybGpjRHB6ZVhOMFpXMXpPbUYxZUdsc2FXRnllVHBrWlhCMGFBQk9iMjR0WlhocGMzUnBibWNnWkdWd2RHZ2dhVzFoWjJVZ2NtVm1aWEpsYm1ObFpBQlNaV04xY25OcGRtVWdaR1Z3ZEdnZ2FXMWhaMlVnWkdWMFpXTjBaV1FBVG05dUxXVjRhWE4wYVc1bklHRjFlQ0JwYldGblpTQnlaV1psY21WdVkyVmtBRkpsWTNWeWMybDJaU0JoZFhnZ2FXMWhaMlVnWkdWMFpXTjBaV1FBVG04Z2FIWmpReUJ3Y205d1pYSjBlU0JwYmlCb2RtTXhJSFI1Y0dVZ2FXMWhaMlVBVFdWMFlXUmhkR0VnYm05MElHTnZjbkpsWTNSc2VTQmhjM05wWjI1bFpDQjBieUJwYldGblpRQk5aWFJoWkdGMFlTQmhjM05wWjI1bFpDQjBieUJ1YjI0dFpYaHBjM1JwYm1jZ2FXMWhaMlVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSlRqUm9aV2xtTVROSmJXRm5aVTFsZEdGa1lYUmhSVTVUWHpsaGJHeHZZMkYwYjNKSlV6SmZSVVZGUlFCT05HaGxhV1l6TmxORlNVMWxjM05oWjJWZlpHVndkR2hmY21Wd2NtVnpaVzUwWVhScGIyNWZhVzVtYjBVQU16Qm9aV2xtWDJSbGNIUm9YM0psY0hKbGMyVnVkR0YwYVc5dVgybHVabThBVGpSb1pXbG1NVEJUUlVsTlpYTnpZV2RsUlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVbE9OR2hsYVdZeE1VaGxhV1pEYjI1MFpYaDBOVWx0WVdkbFJVNVRYemxoYkd4dlkyRjBiM0pKVXpOZlJVVkZSUUJwYldkcGJtWnZBR1JsWTI5a1pWOXBiV0ZuWlY5d2JHRnVZWElBYVcxblgzZHBaSFJvSUQ0OUlEQUFhVzFuWDJobGFXZG9kQ0ErUFNBd0FFNXZJR2x5WldZZ1ltOTRJR0YyWVdsc1lXSnNaU3dnWW5WMElHNWxaV1JsWkNCbWIzSWdhVzkyYkNCcGJXRm5aUUJPZFcxaVpYSWdiMllnYVcxaFoyVWdiMlptYzJWMGN5QmtiMlZ6SUc1dmRDQnRZWFJqYUNCMGFHVWdiblZ0WW1WeUlHOW1JR2x0WVdkbElISmxabVZ5Wlc1alpYTUFUbThnYVhKbFppQmliM2dnWVhaaGFXeGhZbXhsTENCaWRYUWdibVZsWkdWa0lHWnZjaUJwWkdWdUlHbHRZV2RsQUNkcFpHVnVKeUJwYldGblpTQjNhWFJvSUcxdmNtVWdkR2hoYmlCdmJtVWdjbVZtWlhKbGJtTmxJR2x0WVdkbEFFNXZJR2x5WldZZ1ltOTRJR0YyWVdsc1lXSnNaU3dnWW5WMElHNWxaV1JsWkNCbWIzSWdaM0pwWkNCcGJXRm5aUUJ0WDNKdmQzTWdQRDBnTWpVMkFHZGxkRjl5YjNkekFHMWZZMjlzZFcxdWN5QThQU0F5TlRZQVoyVjBYMk52YkhWdGJuTUFWR2xzWldRZ2FXMWhaMlVnZDJsMGFDQUFQUUFnZEdsc1pYTXNJR0oxZENCdmJteDVJQUFnZEdsc1pTQnBiV0ZuWlhNZ2FXNGdabWxzWlFCVWFXeGxJR2x0WVdkbElFbEVQUUFnYVhNZ2JtOTBJR0VnY0hKdmNHVnlJR2x0WVdkbExnQWhhVzFoWjJWZmNtVm1aWEpsYm1ObGN5NWxiWEIwZVNncEFHUmxZMjlrWlY5bWRXeHNYMmR5YVdSZmFXMWhaMlVBVG04Z2NHbDRhU0JwYm1admNtMWhkR2x2YmlCbWIzSWdiSFZ0WVNCamFHRnVibVZzTGdCRWFXWm1aWEpsYm5RZ2JuVnRZbVZ5SUc5bUlHSnBkSE1nY0dWeUlIQnBlR1ZzSUdsdUlHVmhZMmdnWTJoaGJtNWxiQzRBVlc1bGVHbHpkR2x1WnlCbmNtbGtJR2x0WVdkbElISmxabVZ5Wlc1alpXUUFjM0pqWDNkcFpIUm9JRDQ5SURBQVpHVmpiMlJsWDJGdVpGOXdZWE4wWlY5MGFXeGxYMmx0WVdkbEFITnlZMTlvWldsbmFIUWdQajBnTUFCSmJXRm5aU0IwYVd4bElHaGhjeUJrYVdabVpYSmxiblFnWTJoeWIyMWhJR1p2Y20xaGRDQjBhR0Z1SUdOdmJXSnBibVZrSUdsdFlXZGxBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1U0MGFHVnBaak0yVTBWSlRXVnpjMkZuWlY5a1pYQjBhRjl5WlhCeVpYTmxiblJoZEdsdmJsOXBibVp2UlU1VFh6bGhiR3h2WTJGMGIzSkpVekpmUlVWRlJRQlRkV05qWlhOekFIZGhiblJmWVd4d2FHRWdKaVlnSVdoaGMxOWhiSEJvWVFCb1pXbG1YMk52Ykc5eVkyOXVkbVZ5YzJsdmJpNWpZd0JqYjI1MlpYSjBYMk52Ykc5eWMzQmhZMlVBTVRoUGNGOVNSMEpmZEc5ZlVrZENNalJmTXpJQVRqUm9aV2xtTWpSRGIyeHZja052Ym5abGNuTnBiMjVQY0dWeVlYUnBiMjVGQURJd1QzQmZXVU5pUTNJME1qQmZkRzlmVWtkQ01qUUFNakJQY0Y5WlEySkRjalF5TUY5MGIxOVNSMEl6TWdBeU5VOXdYMUpIUWw5SVJGSmZkRzlmVWxKSFIwSkNZV0ZmUWtVQU1qRlBjRjlTUjBKZmRHOWZVbEpIUjBKQ1lXRmZRa1VBTWpWUGNGOVNVa2RIUWtKaFlWOUNSVjkwYjE5U1IwSmZTRVJTQURJM1QzQmZVbEpIUjBKQ1lXRmZjM2RoY0Y5bGJtUnBZVzV1WlhOekFERTVUM0JmYlc5dWIxOTBiMTlaUTJKRGNqUXlNQUF4T1U5d1gyMXZibTlmZEc5ZlVrZENNalJmTXpJQU1qQlBjRjlTUjBJeU5GOHpNbDkwYjE5WlEySkRjZ0IwWVhKblpYUmZjM1JoZEdVdWJtTnNlRjl3Y205bWFXeGxBSFJoY21kbGRGOXpkR0YwWlM1dVkyeDRYM0J5YjJacGJHVXRQbWRsZEY5dFlYUnlhWGhmWTI5bFptWnBZMmxsYm5SektDa2dQVDBnTUFBeU4wOXdYMUpIUWpJMFh6TXlYM1J2WDFsRFlrTnlORFEwWDBkQ1VnQXhPVTl3WDJSeWIzQmZZV3h3YUdGZmNHeGhibVVBTVRaUGNGOTBiMTlvWkhKZmNHeGhibVZ6QURFMlQzQmZkRzlmYzJSeVgzQnNZVzVsY3dBeU4wOXdYMUpTUjBkQ1FuaDRYMGhFVWw5MGIxOVpRMkpEY2pReU1BQXlNMDl3WDFsRFlrTnlOREl3WDNSdlgxSlNSMGRDUW1GaEFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEkzVDNCZlVsSkhSMEpDZUhoZlNFUlNYM1J2WDFsRFlrTnlOREl3VGxOZk9XRnNiRzlqWVhSdmNrbFRNVjlGUlVWRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUyVDNCZmRHOWZjMlJ5WDNCc1lXNWxjMDVUWHpsaGJHeHZZMkYwYjNKSlV6RmZSVVZGUlFCT1UzUXpYMTh5TWpCZlgzTm9ZWEpsWkY5d2RISmZaVzF3YkdGalpVa3hOazl3WDNSdlgyaGtjbDl3YkdGdVpYTk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1UbFBjRjlrY205d1gyRnNjR2hoWDNCc1lXNWxUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQURFMVQzQmZVa2RDWDNSdlgxbERZa055U1hSRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUxVDNCZlVrZENYM1J2WDFsRFlrTnlTWFJGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERTFUM0JmVWtkQ1gzUnZYMWxEWWtOeVNXaEZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFMVQzQmZVa2RDWDNSdlgxbERZa055U1doRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJM1QzQmZVa2RDTWpSZk16SmZkRzlmV1VOaVEzSTBORFJmUjBKU1RsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJd1QzQmZVa2RDTWpSZk16SmZkRzlmV1VOaVEzSk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1qVlBjRjlTVWtkSFFrSmhZVjlDUlY5MGIxOVNSMEpmU0VSU1RsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RJM1QzQmZVbEpIUjBKQ1lXRmZjM2RoY0Y5bGJtUnBZVzV1WlhOelRsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFNVQzQmZiVzl1YjE5MGIxOVNSMEl5TkY4ek1rNVRYemxoYkd4dlkyRjBiM0pKVXpGZlJVVkZSUUJPVTNRelgxOHlNakJmWDNOb1lYSmxaRjl3ZEhKZlpXMXdiR0ZqWlVreE9VOXdYMjF2Ym05ZmRHOWZXVU5pUTNJME1qQk9VMTg1WVd4c2IyTmhkRzl5U1ZNeFgwVkZSVVVBVGxOME0xOWZNakl3WDE5emFHRnlaV1JmY0hSeVgyVnRjR3hoWTJWSk1qRlBjRjlTUjBKZmRHOWZVbEpIUjBKQ1lXRmZRa1ZPVTE4NVlXeHNiMk5oZEc5eVNWTXhYMFZGUlVVQVRsTjBNMTlmTWpJd1gxOXphR0Z5WldSZmNIUnlYMlZ0Y0d4aFkyVkpNalZQY0Y5U1IwSmZTRVJTWDNSdlgxSlNSMGRDUW1GaFgwSkZUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQUU1VGRETmZYekl5TUY5ZmMyaGhjbVZrWDNCMGNsOWxiWEJzWVdObFNUSXpUM0JmV1VOaVEzSTBNakJmZEc5ZlVsSkhSMEpDWVdGT1UxODVZV3hzYjJOaGRHOXlTVk14WDBWRlJVVUFUbE4wTTE5Zk1qSXdYMTl6YUdGeVpXUmZjSFJ5WDJWdGNHeGhZMlZKTWpCUGNGOVpRMkpEY2pReU1GOTBiMTlTUjBJek1rNVRYemxoYkd4dlkyRjBiM0pKVXpGZlJVVkZSUUJPVTNRelgxOHlNakJmWDNOb1lYSmxaRjl3ZEhKZlpXMXdiR0ZqWlVreU1FOXdYMWxEWWtOeU5ESXdYM1J2WDFKSFFqSTBUbE5mT1dGc2JHOWpZWFJ2Y2tsVE1WOUZSVVZGQURFMVQzQmZXVU5pUTNKZmRHOWZVa2RDU1doRkFFNVRkRE5mWHpJeU1GOWZjMmhoY21Wa1gzQjBjbDlsYlhCc1lXTmxTVEUxVDNCZldVTmlRM0pmZEc5ZlVrZENTV2hGVGxOZk9XRnNiRzlqWVhSdmNrbFRNbDlGUlVWRkFERTFUM0JmV1VOaVEzSmZkRzlmVWtkQ1NYUkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFMVQzQmZXVU5pUTNKZmRHOWZVa2RDU1hSRlRsTmZPV0ZzYkc5allYUnZja2xUTWw5RlJVVkZBRTVUZEROZlh6SXlNRjlmYzJoaGNtVmtYM0IwY2w5bGJYQnNZV05sU1RFNFQzQmZVa2RDWDNSdlgxSkhRakkwWHpNeVRsTmZPV0ZzYkc5allYUnZja2xUTVY5RlJVVkZBQ0ZqYUdGdWJtVnNjeTVsYlhCMGVTZ3BBRk4xWTJObGMzTUFRMkZ1Ym05MElHRnNiRzlqWVhSbElHMWxiVzl5ZVNCbWIzSWdhVzFoWjJVZ2NHeGhibVVBUTJoaGJtNWxiSE1nZDJsMGFDQmthV1ptWlhKbGJuUWdiblZ0WW1WeUlHOW1JR0pwZEhNZ2NHVnlJSEJwZUdWc0lHRnlaU0J1YjNRZ2MzVndjRzl5ZEdWa0FHeHBZbVJsTWpZMUlFaEZWa01nWkdWamIyUmxjZ0FzSUhabGNuTnBiMjRnQURFdU1DNHlBR1JsTWpZMUxtTmpBR1JsTWpZMVgzTmxkRjl3WVhKaGJXVjBaWEpmWW05dmJBQmphR0Z1Ym1Wc1BqMHdJQ1ltSUdOb1lXNXVaV3dnUEQwZ01nQmtaVEkyTlY5blpYUmZhVzFoWjJWZmNHeGhibVVBTVRWa1pXTnZaR1Z5WDJOdmJuUmxlSFFBTVRKaVlYTmxYMk52Ym5SbGVIUUFNVEZsY25KdmNsOXhkV1YxWlFCMGFISmxZV1JmWTI5dWRHVjRkSE05UFU1VlRFd0FaR1ZqWTNSNExtTmpBR0ZzYkc5allYUmxYM1JvY21WaFpGOWpiMjUwWlhoMGN3QmtaV052WkdWZmMyeHBZMlZmZFc1cGRGOXdZWEpoYkd4bGJBQnBiV2N0UG01MWJWOTBhSEpsWVdSelgyRmpkR2wyWlNncElEMDlJREFBWkdWamIyUmxYM05zYVdObFgzVnVhWFJmZEdsc1pYTUFiaUE4SUc1VWFISmxZV1JEYjI1MFpYaDBjd0F1TDJSbFkyTjBlQzVvQUdkbGRGOTBhSEpsWVdSZlkyOXVkR1Y0ZEFCa1pXTnZaR1ZmYzJ4cFkyVmZkVzVwZEY5WFVGQUFVRkJUSUNWa0lHaGhjeUJ1YjNRZ1ltVmxiaUJ5WldGa0NnQndjbTlqWlhOelgzTnNhV05sWDNObFoyMWxiblJmYUdWaFpHVnlBR2hrY2kwK2JuVnRYM0psWmw5cFpIaGZiREJmWVdOMGFYWmxJRHc5SURFMkFHTnZibk4wY25WamRGOXlaV1psY21WdVkyVmZjR2xqZEhWeVpWOXNhWE4wY3dCb1pISXRQbTUxYlY5eVpXWmZhV1I0WDJ3eFgyRmpkR2wyWlNBOFBTQXhOZ0JqZEhndFBtUndZaTVvWVhOZlpuSmxaVjlrY0dKZmNHbGpkSFZ5WlNoMGNuVmxLUUJuWlc1bGNtRjBaVjkxYm1GMllXbHNZV0pzWlY5eVpXWmxjbVZ1WTJWZmNHbGpkSFZ5WlFCcFpIZytQVEFBYm1Gc0FHUmxZMjlrWlFCbVlXeHNZbUZqYXkxa1kzUXVZMk1BZEhKaGJuTm1iM0p0WDNOcmFYQmZPRjltWVd4c1ltRmphd0IwY21GdWMyWnZjbTFmYzJ0cGNGOHhObDltWVd4c1ltRmphd0JBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGcGFXRlZTVGtsRFBUWXVKaDhXRFFUODgrcmgydExLdzcyM3NxNnJxS2FtV2xkUVJqa3JHUW4zNTlYSHVyQ3BwcWFwc0xySDFlZjNDUmtyT1VaUVYxcGFVa011RnZ6aHlyZXJwcWl5dzlyekRTWTlUbGhhVlVrMkh3VHEwcjJ1cGxsTE1oTHV6clducDdYTzdoSXlTMWxaU3pJUzdzNjFwNmUxenU0U01rdFpXRU1mODhxdXByTFMvQ1pKV2xVOUZ1ckRxNmEzMmdRdVRscFNOZzNodmFoWE9RblZzS2E2NXhsR1dsQXI5OGVwcWNmM0sxQmFSaG5udXFhdzFRazVWMVV1ODcybXQrb21VbGcyL01PbXN1RWZUbG85Qk1xb3J0b1dTVnBERGRLclV5VGNyYTNjSkZOVEpOeXRyZHdrVTFNazNLMnQzQ1JUVXlUY3JhM2NKRk5TRnNxbXd3MU9WUi9TcHIwRVNWZ20ycWkzL0VOYUx1R3Jzdk05V2picXJsQUp1cW5uT1ZvcjFhYkhHVmRHOTdDdzkwWlhHY2VtMVN0YU9lZXB1Z2xRVHZ5dXR3MVZRK3Fvd3g5YU50cW0waTVhSnNxbTRUMVlGcjJyODBsU0JMSkw3cWZPTWxrU3RiVVNXVExPcCs1TFMrNm56akpaRXJXMUVsa3l6cWZ1UzBuaHB1cE9ROXFtODFJOTBxajhWVGJLcXdSWUxzT3VEVm9tdmJJV1doKzNSdFdwQ1ZvWnNNYzVVT2VtOTFjcnVyb3JWL2VtNTFBNXg3QVpXZ21wMVVaRHlySW1WZXFtQkZvTnFPRlNMcmZEUFVuU3JoOVk4NmI4V2hhcjJrNDJ2VURBd0VCQXdNQkFRTURBUUVEQXdFQkF3TUJBUU1EQVFFREF3RUJBd01CQVBiZlNVaCtvODFyOHBoWlYyckkyUTczS1RpYXI2bG9FcGcxWTRhNHVTY001c09kYTk2a3JScnJWVndtbUdWREh4MUFacGdsWDFicEdLNm4zV3Vld09UYXIvRmpTdzFJTnBpWkRzdXBhNGJkSkg2WVdUcjNhV3ZPdVBTNm9CRlhLTXFjU1M3WHVXYzdPV2U2MVN4S25NaktuRWt1MTdsbk96bG51dFVzU3B6SXVwaVkycGg4OXFCWkRxdzFKcmdST3N2eFN0L05WdmVwWXcrRmF5dHBhMGl1bU9SbXBSZ213VVBlNlYrZkhXdFhWV3NmblY3cjNVTEFKUnFrWk9hWXJKcWhKL0wxYTB1RlZzZzA5cGpZV3JsTHF5bHJEODA2ckh5Nm1Rd1MzV05va3JWUGMzRk90SkNTdFU5emNVNjBrSksxVDNOeFRyU1FrclZQYzNGT3RKQit5V3NNRU5xaFMydXBKcGtQejBsV3JMZzI5V3JjV0pxNVl5dnc5cGs3aEdicGFzQ3NKeDFlcE9mZlZVS1pHNStkR3BsRFY5em1wVjhjSks3QmF1aGtXdzFXbVNkcjhMckphcmpiejRVT29XTDBmRGNwU3BrN1NCQ2EzV3FzOTZoTE9TNmRadFRMdTdqSzFXYWRMemhJU3prdW5XYlV5N3U0eXRWbW5TODRTRGRvOXNsaW1WYmMyNFFRVzBrT3VXcVpTdlM3cS9CL0tTYXRhcUU3REp2TUo1eXZIUnJCWHBscXBVTG81MVJuMzl4blZPYnBRcVZxbVY3Qkd4eXZuQ1FUekZ1RW0wamJEUTdkT3JsV29XcVphcGxpclVySkp2VDNLTHRvZjZnMzhLSGRwWkhSb0pqRXBQVDB3QUdaaGJHeGlZV05yTFcxdmRHbHZiaTVqWXdCd2RYUmZkVzUzWldsbmFIUmxaRjl3Y21Wa1h6aGZabUZzYkdKaFkyc0FiRzluTWxkRVBqMHhBSEIxZEY5M1pXbG5hSFJsWkY5d2NtVmtYemhmWm1Gc2JHSmhZMnNBY0hWMFgzZGxhV2RvZEdWa1gySnBjSEpsWkY4NFgyWmhiR3hpWVdOckFIQjFkRjkzWldsbmFIUmxaRjl3Y21Wa1gyRjJaMTg0WDJaaGJHeGlZV05yQUhCMWRGOTFibmRsYVdkb2RHVmtYM0J5WldSZk1UWmZabUZzYkdKaFkyc0FjSFYwWDNkbGFXZG9kR1ZrWDNCeVpXUmZNVFpmWm1Gc2JHSmhZMnNBY0hWMFgzZGxhV2RvZEdWa1gySnBjSEpsWkY4eE5sOW1ZV3hzWW1GamF3QndkWFJmZDJWcFoyaDBaV1JmY0hKbFpGOWhkbWRmTVRaZlptRnNiR0poWTJzQUlYSmxiM0prWlhKZmIzVjBjSFYwWDNGMVpYVmxMbVZ0Y0hSNUtDa0FaSEJpTG1OakFHOTFkSEIxZEY5dVpYaDBYM0JwWTNSMWNtVmZhVzVmY21WdmNtUmxjbDlpZFdabVpYSUFibVYzWDJsdFlXZGxBR2x0WnkwK2MzQnpMa0pwZEVSbGNIUm9YMWtnUGowZ09DQW1KaUJwYldjdFBuTndjeTVDYVhSRVpYQjBhRjlaSUR3OUlERTJBR2x0WVdkbExtTmpBR1JsTWpZMVgybHRZV2RsWDJkbGRGOWlkV1ptWlhJQWFXMW5MVDV6Y0hNdVFtbDBSR1Z3ZEdoZlF5QStQU0E0SUNZbUlHbHRaeTArYzNCekxrSnBkRVJsY0hSb1gwTWdQRDBnTVRZQWMzQnpBR0ZzYkc5algybHRZV2RsQUdacGNuTjBJQ1VnTWlBOVBTQXdBR052Y0hsZmJHbHVaWE5mWm5KdmJRQmxibVFnSlNBeUlEMDlJREFBYmxSb2NtVmhaSE5TZFc1dWFXNW5JRDQ5SURBQWRHaHlaV0ZrWDJacGJtbHphR1Z6QUM0dmFXMWhaMlV1YUFCd1pXNWthVzVuWDJsdWNIVjBYMDVCVENBOVBTQk9WVXhNQUc1aGJDMXdZWEp6WlhJdVkyTUFjSFZ6YUY5T1FVd0FMUzB0TFMwdExTMHRMU0JRVUZNZ2NtRnVaMlV0WlhoMFpXNXphVzl1SUMwdExTMHRMUzB0TFMwS0FHeHZaekpmYldGNFgzUnlZVzV6Wm05eWJWOXphMmx3WDJKc2IyTnJYM05wZW1VZ0lDQWdJQ0E2SUNWa0NnQmpjbTl6YzE5amIyMXdiMjVsYm5SZmNISmxaR2xqZEdsdmJsOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FZMmh5YjIxaFgzRndYMjltWm5ObGRGOXNhWE4wWDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSURvZ0pXUUtBR1JwWm1aZlkzVmZZMmh5YjIxaFgzRndYMjltWm5ObGRGOWtaWEIwYUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0JqYUhKdmJXRmZjWEJmYjJabWMyVjBYMnhwYzNSZmJHVnVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BWTJKZmNYQmZiMlptYzJWMFgyeHBjM1JiSldSZElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamNsOXhjRjl2Wm1aelpYUmZiR2x6ZEZzbFpGMGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHeHZaekpmYzJGdlgyOW1abk5sZEY5elkyRnNaVjlzZFcxaElDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQnNiMmN5WDNOaGIxOXZabVp6WlhSZmMyTmhiR1ZmWTJoeWIyMWhJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FkR2xzWlZnK1BUQWdKaVlnZEdsc1pWaytQVEFBY0hCekxtTmpBSE5sZEY5a1pYSnBkbVZrWDNaaGJIVmxjd0F0TFMwdExTMHRMUzB0TFMwdExTMHRMU0JRVUZNZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0FIQnBZMTl3WVhKaGJXVjBaWEpmYzJWMFgybGtJQ0FnSUNBZ0lEb2dKV1FLQUhObGNWOXdZWEpoYldWMFpYSmZjMlYwWDJsa0lDQWdJQ0FnSURvZ0pXUUtBR1JsY0dWdVpHVnVkRjl6YkdsalpWOXpaV2R0Wlc1MGMxOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FjMmxuYmw5a1lYUmhYMmhwWkdsdVoxOW1iR0ZuSUNBZ0lDQWdPaUFsWkFvQVkyRmlZV05mYVc1cGRGOXdjbVZ6Wlc1MFgyWnNZV2NnSUNBZ09pQWxaQW9BYm5WdFgzSmxabDlwWkhoZmJEQmZaR1ZtWVhWc2RGOWhZM1JwZG1VZ09pQWxaQW9BYm5WdFgzSmxabDlwWkhoZmJERmZaR1ZtWVhWc2RGOWhZM1JwZG1VZ09pQWxaQW9BY0dsalgybHVhWFJmY1hBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FZMjl1YzNSeVlXbHVaV1JmYVc1MGNtRmZjSEpsWkY5bWJHRm5PaUFsWkFvQWRISmhibk5tYjNKdFgzTnJhWEJmWlc1aFlteGxaRjltYkdGbk9pQWxaQW9BWTNWZmNYQmZaR1ZzZEdGZlpXNWhZbXhsWkY5bWJHRm5JQ0FnT2lBbFpBb0FaR2xtWmw5amRWOXhjRjlrWld4MFlWOWtaWEIwYUNBZ0lDQWdPaUFsWkFvQWNHbGpYMk5pWDNGd1gyOW1abk5sZENBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCd2FXTmZZM0pmY1hCZmIyWm1jMlYwSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUhCd2MxOXpiR2xqWlY5amFISnZiV0ZmY1hCZmIyWm1jMlYwYzE5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWQyVnBaMmgwWldSZmNISmxaRjltYkdGbklDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCM1pXbG5hSFJsWkY5aWFYQnlaV1JmWm14aFp5QWdJQ0FnSUNBZ0lEb2dKV1FLQUc5MWRIQjFkRjltYkdGblgzQnlaWE5sYm5SZlpteGhaeUFnSUNBZ09pQWxaQW9BZEhKaGJuTnhkV0Z1ZEY5aWVYQmhjM05mWlc1aFlteGxYMlpzWVdjNklDVmtDZ0IwYVd4bGMxOWxibUZpYkdWa1gyWnNZV2NnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBR1Z1ZEhKdmNIbGZZMjlrYVc1blgzTjVibU5mWlc1aFlteGxaRjltYkdGbk9pQWxaQW9BYm5WdFgzUnBiR1ZmWTI5c2RXMXVjeUFnSUNBNklDVmtDZ0J1ZFcxZmRHbHNaVjl5YjNkeklDQWdJQ0FnSURvZ0pXUUtBSFZ1YVdadmNtMWZjM0JoWTJsdVoxOW1iR0ZuT2lBbFpBb0FkR2xzWlNCamIyeDFiVzRnWW05MWJtUmhjbWxsY3pvZ0FIUnBiR1VnY205M0lHSnZkVzVrWVhKcFpYTTZJQUFxSldRZ0FHeHZiM0JmWm1sc2RHVnlYMkZqY205emMxOTBhV3hsYzE5bGJtRmliR1ZrWDJac1lXY2dPaUFsWkFvQWNIQnpYMnh2YjNCZlptbHNkR1Z5WDJGamNtOXpjMTl6YkdsalpYTmZaVzVoWW14bFpGOW1iR0ZuT2lBbFpBb0FaR1ZpYkc5amEybHVaMTltYVd4MFpYSmZZMjl1ZEhKdmJGOXdjbVZ6Wlc1MFgyWnNZV2M2SUNWa0NnQmtaV0pzYjJOcmFXNW5YMlpwYkhSbGNsOXZkbVZ5Y21sa1pWOWxibUZpYkdWa1gyWnNZV2M2SUNWa0NnQndhV05mWkdsellXSnNaVjlrWldKc2IyTnJhVzVuWDJacGJIUmxjbDltYkdGbk9pQWxaQW9BWW1WMFlWOXZabVp6WlhRNklDQWxaQW9BZEdOZmIyWm1jMlYwT2lBZ0lDQWxaQW9BY0dsalgzTmpZV3hwYm1kZmJHbHpkRjlrWVhSaFgzQnlaWE5sYm5SZlpteGhaem9nSldRS0FHeHBjM1J6WDIxdlpHbG1hV05oZEdsdmJsOXdjbVZ6Wlc1MFgyWnNZV2M2SUNWa0NnQnNiMmN5WDNCaGNtRnNiR1ZzWDIxbGNtZGxYMnhsZG1Wc0lDQWdJQ0FnT2lBbFpBb0FiblZ0WDJWNGRISmhYM05zYVdObFgyaGxZV1JsY2w5aWFYUnpJQ0FnSURvZ0pXUUtBSE5zYVdObFgzTmxaMjFsYm5SZmFHVmhaR1Z5WDJWNGRHVnVjMmx2Ymw5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWNIQnpYMlY0ZEdWdWMybHZibDltYkdGbklDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWNIQnpYM0poYm1kbFgyVjRkR1Z1YzJsdmJsOW1iR0ZuSUNBZ0lDQWdPaUFsWkFvQWNIQnpYMjExYkhScGJHRjVaWEpmWlhoMFpXNXphVzl1WDJac1lXY2dPaUFsWkFvQWNIQnpYMlY0ZEdWdWMybHZibDgyWW1sMGN5QWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQVRHOW5NazFwYmtOMVVYQkVaV3gwWVZOcGVtVWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQVRHOW5NazFwYmtOMVEyaHliMjFoVVhCUFptWnpaWFJUYVhwbElDaFNSWGgwS1NBNklDVmtDZ0JNYjJjeVRXRjRWSEpoYm5ObWIzSnRVMnRwY0ZOcGVtVWdJQ0FnS0ZKRmVIUXBJRG9nSldRS0FITmhieTBsWkFBeE5YUm9jbVZoWkY5MFlYTnJYM05oYndBeE1YUm9jbVZoWkY5MFlYTnJBRk5GU1NCa1pXTnZaR1ZrSUhCcFkzUjFjbVVnVFVRMUlHMXBjMjFoZEdOb0lDaFFUME05SldRcENnQlRSVWtnWkdWamIyUmxaQ0J3YVdOMGRYSmxJR2hoYzJnNklDVXdOSGdzSUdSbFkyOWtaV1FnY0dsamRIVnlaVG9nSlRBMGVDQW9VRTlEUFNWa0tRb0FjMnhwWTJVdGMyVm5iV1Z1ZEMwbFpEc2xaQUJwYm1sMFZIbHdaU0ErUFNBd0lDWW1JR2x1YVhSVWVYQmxJRHc5SURJQWMyeHBZMlV1WTJNQWFXNXBkR2xoYkdsNlpWOURRVUpCUTE5dGIyUmxiSE1BWkdWamIyUmxYM0JoY25SZmJXOWtaUUFBQVFJQ0FnSURCUWNJQ2d3TkR4RVNFeFFWRmhjWEdCZ1pHUm9iR3h3Y0hSMGVIM0psWVdSZlkyOWthVzVuWDNWdWFYUUFVSEpsWkUxdlpHVWdQVDBnWTNWUWNtVmtUVzlrWlFCeVpXRmtYM1J5WVc1elptOXliVjkwY21WbEFHTnZiblJsZUhRZ1BqMGdNQ0FtSmlCamIyNTBaWGgwSUR3OUlESUFaR1ZqYjJSbFgzTndiR2wwWDNSeVlXNXpabTl5YlY5bWJHRm5BQ0VvZEhKaFptOUVaWEIwYUQwOU1DQW1KaUJzYjJjeVZISmhabTlUYVhwbFBUMHlLUUJqWW1aZlkySWdJVDBnTFRFQWNtVmhaRjkwY21GdWMyWnZjbTFmZFc1cGRBQmpZbVpmWTNJZ0lUMGdMVEVBWTJKbVgyeDFiV0VnSVQwZ0xURUFlRHh6Y0hNdVVHbGpWMmxrZEdoSmJrMXBibEJWY3dCelpYUmZTVzUwY21GUWNtVmtUVzlrWlVNQWVUeHpjSE11VUdsalNHVnBaMmgwU1c1TmFXNVFWWE1BYVdSNFBHbHVkSEpoVUhKbFpFMXZaR1ZETG1SaGRHRmZjMmw2WlFBeU5YUm9jbVZoWkY5MFlYTnJYM05zYVdObFgzTmxaMjFsYm5RQVkzUmlMWEp2ZHkwbFpBQXhPWFJvY21WaFpGOTBZWE5yWDJOMFlsOXliM2NBY0hCekxUNXdjSE5mY21WaFpBQmtkVzF3WDNOc2FXTmxYM05sWjIxbGJuUmZhR1ZoWkdWeUFITndjeTArYzNCelgzSmxZV1FBTFMwdExTMHRMUzB0TFMwdExTMHRMUzBnVTB4SlEwVWdMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtBR1pwY25OMFgzTnNhV05sWDNObFoyMWxiblJmYVc1ZmNHbGpYMlpzWVdjZ0lDQWdJQ0E2SUNWa0NnQnViMTl2ZFhSd2RYUmZiMlpmY0hKcGIzSmZjR2xqYzE5bWJHRm5JQ0FnSUNBZ0lDQWdPaUFsWkFvQWMyeHBZMlZmY0dsalgzQmhjbUZ0WlhSbGNsOXpaWFJmYVdRZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdSbGNHVnVaR1Z1ZEY5emJHbGpaVjl6WldkdFpXNTBYMlpzWVdjZ0lDQWdJQ0FnSUNBNklDVmtDZ0J6YkdsalpWOXpaV2R0Wlc1MFgyRmtaSEpsYzNNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FjMnhwWTJWZmRIbHdaU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldNS0FIQnBZMTl2ZFhSd2RYUmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamIyeHZkWEpmY0d4aGJtVmZhV1FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BYzJ4cFkyVmZjR2xqWDI5eVpHVnlYMk51ZEY5c2MySWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSE5vYjNKMFgzUmxjbTFmY21WbVgzQnBZMTl6WlhSZmMzQnpYMlpzWVdjZ0lDQWdJQ0E2SUNWa0NnQnphRzl5ZEY5MFpYSnRYM0psWmw5d2FXTmZjMlYwWDJsa2VDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWJuVnRYMnh2Ym1kZmRHVnliVjl6Y0hNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQnVkVzFmYkc5dVoxOTBaWEp0WDNCcFkzTWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSE5zYVdObFgzUmxiWEJ2Y21Gc1gyMTJjRjlsYm1GaWJHVmtYMlpzWVdjZ09pQWxaQW9BYzJ4cFkyVmZjMkZ2WDJ4MWJXRmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCemJHbGpaVjl6WVc5ZlkyaHliMjFoWDJac1lXY2dJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHNTFiVjl5WldaZmFXUjRYMkZqZEdsMlpWOXZkbVZ5Y21sa1pWOW1iR0ZuSURvZ0pXUUtBQ2htY205dElGQlFVeWtBYm5WdFgzSmxabDlwWkhoZmJEQmZZV04wYVhabElDQWdJQ0FnSUNBZ0lEb2dKV1FnSlhNS0FHNTFiVjl5WldaZmFXUjRYMnd4WDJGamRHbDJaU0FnSUNBZ0lDQWdJQ0E2SUNWa0lDVnpDZ0J5WldaZmNHbGpYMnhwYzNSZmJXOWthV1pwWTJGMGFXOXVYMlpzWVdkZmJEQWdPaUFsWkFvQUlDQWxaRG9nSldRS0FISmxabDl3YVdOZmJHbHpkRjl0YjJScFptbGpZWFJwYjI1ZlpteGhaMTlzTVNBNklDVmtDZ0J0ZG1SZmJERmZlbVZ5YjE5bWJHRm5JQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BWTJGaVlXTmZhVzVwZEY5bWJHRm5JQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdOdmJHeHZZMkYwWldSZlpuSnZiVjlzTUY5bWJHRm5JQ0FnSUNBZ0lDQTZJQ1ZrQ2dCamIyeHNiMk5oZEdWa1gzSmxabDlwWkhnZ0lDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWJIVnRZVjlzYjJjeVgzZGxhV2RvZEY5a1pXNXZiU0FnSUNBZ0lDQWdJRG9nSldRS0FFTm9jbTl0WVV4dlp6SlhaV2xuYUhSRVpXNXZiU0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQk1kVzFoVjJWcFoyaDBYMHdsWkZzbFpGMGdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FiSFZ0WVY5dlptWnpaWFJmYkNWa1d5VmtYU0FnSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBRU5vY205dFlWZGxhV2RvZEY5TUpXUmJKV1JkV3lWa1hTQWdJQ0FnSUNBZ09pQWxaQW9BUTJoeWIyMWhUMlptYzJWMFgwd2xaRnNsWkYxYkpXUmRJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCbWFYWmxYMjFwYm5WelgyMWhlRjl1ZFcxZmJXVnlaMlZmWTJGdVpDQWdPaUFsWkFvQWMyeHBZMlZmY1hCZlpHVnNkR0VnSUNBZ0lDQWdJQ0E2SUNWa0NnQnpiR2xqWlY5allsOXhjRjl2Wm1aelpYUWdJQ0FnSURvZ0pXUUtBSE5zYVdObFgyTnlYM0Z3WDI5bVpuTmxkQ0FnSUNBZ09pQWxaQW9BWkdWaWJHOWphMmx1WjE5bWFXeDBaWEpmYjNabGNuSnBaR1ZmWm14aFp5QTZJQ1ZrQ2dBb2IzWmxjbkpwWkdVcEFDaG1jbTl0SUhCd2N5a0FjMnhwWTJWZlpHVmliRzlqYTJsdVoxOW1hV3gwWlhKZlpHbHpZV0pzWldSZlpteGhaeUE2SUNWa0lDVnpDZ0J6YkdsalpWOWlaWFJoWDI5bVpuTmxkQ0FnT2lBbFpBb0FjMnhwWTJWZmRHTmZiMlptYzJWMElDQWdJRG9nSldRS0FITnNhV05sWDJ4dmIzQmZabWxzZEdWeVgyRmpjbTl6YzE5emJHbGpaWE5mWlc1aFlteGxaRjltYkdGbklEb2dKV1FLQUc1MWJWOWxiblJ5ZVY5d2IybHVkRjl2Wm1aelpYUnpJQ0FnSURvZ0pXUUtBRzltWm5ObGRGOXNaVzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHVnVkSEo1SUhCdmFXNTBJRnNsYVYwZ09pQWxaQW9BQUFFRUJRSURCQVVHQmdnSUJ3Y0lZMk4wZUVsa2VFeHZiMnQxY0Z0c2IyY3lkeTB5WFZ0alNXUjRYVnR6WTJGdVNXUjRYVnR3Y21WMlEzTmlabDFiZUVNcktIbERQRHhzYjJjeWR5bGRJRDA5SUdOMGVFbGtlRWx1WXdCaGJHeHZZMTloYm1SZmFXNXBkRjl6YVdkdWFXWnBZMkZ1ZEY5amIyVm1abDlqZEhoSlpIaGZiRzl2YTNWd1ZHRmliR1VBY21WbVBEY0FjM0J6TG1OakFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVSQVJFQkVTRVJJU0VSSVZFeFFWRkJNVkdCWVdHQmdXRmhnWkdSc2VHeGtaSFI4akl4OGRKQ2tzS1NRdk5qWXZRVVpCV0ZoekVCQVFFQkFRRUJBUUVCRVJFUkVSRWhJU0VoSVNGQlFVRkJRVUZCZ1lHQmdZR0JnWUdSa1pHUmtaR1J3Y0hCd2NIQ0VoSVNFaEtTa3BLVFkyTmtkSFcyWnBiR3hmYzJOaGJHbHVaMTltWVdOMGIzSUFjMk5oYkdsdVoxOXNhWE4wWDNCeVpXUmZiV0YwY21sNFgybGtYMlJsYkhSaFBUMHhBSEpsWVdSZmMyTmhiR2x1WjE5c2FYTjBBQzB0TFMwdExTMHRMUzB0TFMwdExTMHRJRk5RVXlBdExTMHRMUzB0TFMwdExTMHRMUzB0TFFvQWRtbGtaVzlmY0dGeVlXMWxkR1Z5WDNObGRGOXBaQ0FnT2lBbFpBb0FjM0J6WDIxaGVGOXpkV0pmYkdGNVpYSnpJQ0FnSUNBZ09pQWxaQW9BYzNCelgzUmxiWEJ2Y21Gc1gybGtYMjVsYzNScGJtZGZabXhoWnlBNklDVmtDZ0J6WlhGZmNHRnlZVzFsZEdWeVgzTmxkRjlwWkNBZ0lDQTZJQ1ZrQ2dBME9qUTZOQUIxYm10dWIzZHVBRzF2Ym05amFISnZiV1VBTkRveU9qQUFORG95T2pJQVkyaHliMjFoWDJadmNtMWhkRjlwWkdNZ0lDQWdJQ0FnT2lBbFpDQW9KWE1wQ2dCelpYQmhjbUYwWlY5amIyeHZkWEpmY0d4aGJtVmZabXhoWnlBNklDVmtDZ0J3YVdOZmQybGtkR2hmYVc1ZmJIVnRZVjl6WVcxd2JHVnpJQ0E2SUNWa0NnQndhV05mYUdWcFoyaDBYMmx1WDJ4MWJXRmZjMkZ0Y0d4bGN5QTZJQ1ZrQ2dCamIyNW1iM0p0WVc1alpWOTNhVzVrYjNkZlpteGhaeUFnSUNBNklDVmtDZ0JqYjI1bVgzZHBibDlzWldaMFgyOW1abk5sZENBZ09pQWxaQW9BWTI5dVpsOTNhVzVmY21sbmFIUmZiMlptYzJWMElEb2dKV1FLQUdOdmJtWmZkMmx1WDNSdmNGOXZabVp6WlhRZ0lDQTZJQ1ZrQ2dCamIyNW1YM2RwYmw5aWIzUjBiMjFmYjJabWMyVjBPaUFsWkFvQVltbDBYMlJsY0hSb1gyeDFiV0VnSUNBNklDVmtDZ0JpYVhSZlpHVndkR2hmWTJoeWIyMWhJRG9nSldRS0FHeHZaekpmYldGNFgzQnBZMTl2Y21SbGNsOWpiblJmYkhOaUlEb2dKV1FLQUhOd2MxOXpkV0pmYkdGNVpYSmZiM0prWlhKcGJtZGZhVzVtYjE5d2NtVnpaVzUwWDJac1lXY2dPaUFsWkFvQWJHOW5NbDl0YVc1ZmJIVnRZVjlqYjJScGJtZGZZbXh2WTJ0ZmMybDZaU0E2SUNWa0NnQnNiMmN5WDJScFptWmZiV0Y0WDIxcGJsOXNkVzFoWDJOdlpHbHVaMTlpYkc5amExOXphWHBsSURvZ0pXUUtBR3h2WnpKZmJXbHVYM1J5WVc1elptOXliVjlpYkc5amExOXphWHBsSUNBZ09pQWxaQW9BYkc5bk1sOWthV1ptWDIxaGVGOXRhVzVmZEhKaGJuTm1iM0p0WDJKc2IyTnJYM05wZW1VZ09pQWxaQW9BYldGNFgzUnlZVzV6Wm05eWJWOW9hV1Z5WVhKamFIbGZaR1Z3ZEdoZmFXNTBaWElnT2lBbFpBb0FiV0Y0WDNSeVlXNXpabTl5YlY5b2FXVnlZWEpqYUhsZlpHVndkR2hmYVc1MGNtRWdPaUFsWkFvQWMyTmhiR2x1WjE5c2FYTjBYMlZ1WVdKc1pWOW1iR0ZuSURvZ0pXUUtBRXhoZVdWeUlDVmtDZ0FnSUhOd2MxOXRZWGhmWkdWalgzQnBZMTlpZFdabVpYSnBibWNnSUNBZ0lDQTZJQ1ZrQ2dBZ0lITndjMTl0WVhoZmJuVnRYM0psYjNKa1pYSmZjR2xqY3lBZ0lDQWdJQ0E2SUNWa0NnQWdJSE53YzE5dFlYaGZiR0YwWlc1amVWOXBibU55WldGelpWOXdiSFZ6TVNBNklDVmtDZ0J6Y0hOZmMyTmhiR2x1WjE5c2FYTjBYMlJoZEdGZmNISmxjMlZ1ZEY5bWJHRm5JRG9nSldRS0FITmpZV3hwYm1jZ2JHbHpkQ0JzYjJkbmFXNW5JRzkxZEhCMWRDQnViM1FnYVcxd2JHVnRaVzUwWldRQVlXMXdYMlZ1WVdKc1pXUmZabXhoWnlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BYzJGdGNHeGxYMkZrWVhCMGFYWmxYMjltWm5ObGRGOWxibUZpYkdWa1gyWnNZV2NnT2lBbFpBb0FjR050WDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdPaUFsWkFvQWNHTnRYM05oYlhCc1pWOWlhWFJmWkdWd2RHaGZiSFZ0WVNBZ0lDQWdPaUFsWkFvQWNHTnRYM05oYlhCc1pWOWlhWFJmWkdWd2RHaGZZMmh5YjIxaElDQWdPaUFsWkFvQWJHOW5NbDl0YVc1ZmNHTnRYMngxYldGZlkyOWthVzVuWDJKc2IyTnJYM05wZW1VZ09pQWxaQW9BYkc5bk1sOWthV1ptWDIxaGVGOXRhVzVmY0dOdFgyeDFiV0ZmWTI5a2FXNW5YMkpzYjJOclgzTnBlbVVnT2lBbFpBb0FjR050WDJ4dmIzQmZabWxzZEdWeVgyUnBjMkZpYkdWZlpteGhaeUFnT2lBbFpBb0FiblZ0WDNOb2IzSjBYM1JsY20xZmNtVm1YM0JwWTE5elpYUnpJRG9nSldRS0FHeHZibWRmZEdWeWJWOXlaV1pmY0dsamMxOXdjbVZ6Wlc1MFgyWnNZV2NnT2lBbFpBb0FjbVZtWDNCcFkxOXpaWFJiSUNVeVpDQmRPaUFBYm5WdFgyeHZibWRmZEdWeWJWOXlaV1pmY0dsamMxOXpjSE1nT2lBbFpBb0FiSFJmY21WbVgzQnBZMTl3YjJOZmJITmlYM053YzFzbFpGMGdPaUFsWkNBZ0lDaDFjMlZrWDJKNVgyTjFjbkpmY0dsalgyeDBYM053YzE5bWJHRm5QU1ZrS1FvQWMzQnpYM1JsYlhCdmNtRnNYMjEyY0Y5bGJtRmliR1ZrWDJac1lXY2dJQ0FnSUNBNklDVmtDZ0J6ZEhKdmJtZGZhVzUwY21GZmMyMXZiM1JvYVc1blgyVnVZV0pzWlY5bWJHRm5JRG9nSldRS0FIWjFhVjl3WVhKaGJXVjBaWEp6WDNCeVpYTmxiblJmWm14aFp5QWdJQ0FnSUNBZ09pQWxaQW9BYzNCelgyVjRkR1Z1YzJsdmJsOXdjbVZ6Wlc1MFgyWnNZV2NnSUNBZ09pQWxaQW9BYzNCelgzSmhibWRsWDJWNGRHVnVjMmx2Ymw5bWJHRm5JQ0FnSUNBZ09pQWxaQW9BYzNCelgyMTFiSFJwYkdGNVpYSmZaWGgwWlc1emFXOXVYMlpzWVdjZ09pQWxaQW9BYzNCelgyVjRkR1Z1YzJsdmJsODJZbWwwY3lBZ0lDQWdJQ0FnSUNBZ09pQWxaQW9BUTNSaVUybDZaVmtnSUNBZ0lEb2dKV1FLQUUxcGJrTmlVMmw2WlZrZ0lDQTZJQ1ZrQ2dCTllYaERZbE5wZW1WWklDQWdPaUFsWkFvQVRXbHVWRUpUYVhwbFdTQWdJRG9nSldRS0FFMWhlRlJDVTJsNlpWa2dJQ0E2SUNWa0NnQlFhV05YYVdSMGFFbHVRM1JpYzFrZ0lDQWdJQ0FnSUNBNklDVmtDZ0JRYVdOSVpXbG5hSFJKYmtOMFluTlpJQ0FnSUNBZ0lDQTZJQ1ZrQ2dCVGRXSlhhV1IwYUVNZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQlRkV0pJWldsbmFIUkRJQ0FnSUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMU0JUVUZNdGNtRnVaMlV0WlhoMFpXNXphVzl1SUMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q2dCMGNtRnVjMlp2Y20xZmMydHBjRjl5YjNSaGRHbHZibDlsYm1GaWJHVmtYMlpzWVdjZ0lDQWdPaUFsWkFvQWRISmhibk5tYjNKdFgzTnJhWEJmWTI5dWRHVjRkRjlsYm1GaWJHVmtYMlpzWVdjZ0lDQWdJRG9nSldRS0FHbHRjR3hwWTJsMFgzSmtjR050WDJWdVlXSnNaV1JmWm14aFp5QWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQmxlSEJzYVdOcGRGOXlaSEJqYlY5bGJtRmliR1ZrWDJac1lXY2dJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FaWGgwWlc1a1pXUmZjSEpsWTJsemFXOXVYM0J5YjJObGMzTnBibWRmWm14aFp5QWdJQ0FnSURvZ0pXUUtBR2x1ZEhKaFgzTnRiMjkwYUdsdVoxOWthWE5oWW14bFpGOW1iR0ZuSUNBZ0lDQWdJQ0FnSUNBNklDVmtDZ0JvYVdkb1gzQnlaV05wYzJsdmJsOXZabVp6WlhSelgyVnVZV0pzWldSZlpteGhaeUFnSUNBZ09pQWxaQW9BY0dWeWMybHpkR1Z1ZEY5eWFXTmxYMkZrWVhCMFlYUnBiMjVmWlc1aFlteGxaRjltYkdGbklEb2dKV1FLQUdOaFltRmpYMko1Y0dGemMxOWhiR2xuYm0xbGJuUmZaVzVoWW14bFpGOW1iR0ZuSUNBZ0lDQTZJQ1ZrQ2dCMGNtRnVjMlp2Y20wdVkyTUFNQUJ6WTJGc1pWOWpiMlZtWm1samFXVnVkSE5mYVc1MFpYSnVZV3dBY21Sd1kyMU5iMlJsUFQwd0FFVlNVam9nQUVsT1JrODZJQUIyY0hNdVkyTUFZV3hzYjJOaGRHOXlQRlErT2pwaGJHeHZZMkYwWlNoemFYcGxYM1FnYmlrZ0oyNG5JR1Y0WTJWbFpITWdiV0Y0YVcxMWJTQnpkWEJ3YjNKMFpXUWdjMmw2WlFCbWFYSnpkRXhoZVdWeVVtVmhaQ0E4SUUxQldGOVVSVTFRVDFKQlRGOVRWVUpNUVZsRlVsTUFjbVZoWkFBdExTMHRMUzB0TFMwdExTMHRMUzB0TFNCV1VGTWdMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtBSFpwWkdWdlgzQmhjbUZ0WlhSbGNsOXpaWFJmYVdRZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbFpBb0FkbkJ6WDIxaGVGOXNZWGxsY25NZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNWa0NnQjJjSE5mYldGNFgzTjFZbDlzWVhsbGNuTWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FIWndjMTkwWlcxd2IzSmhiRjlwWkY5dVpYTjBhVzVuWDJac1lXY2dJQ0FnSUNBZ0lDQWdPaUFsWkFvQUlDQlFjbTltYVd4bEwxUnBaWEl2VEdWMlpXd2dXMHhoZVdWeUlDVmtYUW9BZG5CelgzTjFZbDlzWVhsbGNsOXZjbVJsY21sdVoxOXBibVp2WDNCeVpYTmxiblJmWm14aFp5QTZJQ1ZrQ2dCc1lYbGxjaUFsWkRvZ2RuQnpYMjFoZUY5a1pXTmZjR2xqWDJKMVptWmxjbWx1WnlBOUlDVmtDZ0FnSUNBZ0lDQWdJQ0IyY0hOZmJXRjRYMjUxYlY5eVpXOXlaR1Z5WDNCcFkzTWdJRDBnSldRS0FDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJHRjBaVzVqZVY5cGJtTnlaV0Z6WlNBZ1BTQWxaQW9BYkdGNVpYSWdLR0ZzYkNrNklIWndjMTl0WVhoZlpHVmpYM0JwWTE5aWRXWm1aWEpwYm1jZ1BTQWxaQW9BSUNBZ0lDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJuVnRYM0psYjNKa1pYSmZjR2xqY3lBZ1BTQWxaQW9BSUNBZ0lDQWdJQ0FnSUNBZ0lIWndjMTl0WVhoZmJHRjBaVzVqZVY5cGJtTnlaV0Z6WlNBZ1BTQWxaQW9BZG5CelgyMWhlRjlzWVhsbGNsOXBaQ0FnSUQwZ0pXUUtBSFp3YzE5dWRXMWZiR0Y1WlhKZmMyVjBjeUE5SUNWa0NnQjJjSE5mZEdsdGFXNW5YMmx1Wm05ZmNISmxjMlZ1ZEY5bWJHRm5JRDBnSldRS0FHeGhlV1Z5WDJsa1gybHVZMngxWkdWa1gyWnNZV2RiSldSZFd5VmtYU0E5SUNWa0NnQjJjSE5mYm5WdFgzVnVhWFJ6WDJsdVgzUnBZMnNnUFNBbFpBb0FkbkJ6WDNScGJXVmZjMk5oYkdVZ0lDQWdJQ0FnSUQwZ0pXUUtBSFp3YzE5d2IyTmZjSEp2Y0c5eWRHbHZibUZzWDNSdlgzUnBiV2x1WjE5bWJHRm5JRDBnSldRS0FIWndjMTl1ZFcxZmRHbGphM05mY0c5algyUnBabVpmYjI1bElEMGdKV1FLQUhad2MxOXVkVzFmYUhKa1gzQmhjbUZ0WlhSbGNuTWdJQ0FnSUQwZ0pXUUtBR2h5WkY5c1lYbGxjbDl6WlhSZmFXUjRXeVZrWFNBOUlDVmtDZ0IyY0hOZlpYaDBaVzV6YVc5dVgyWnNZV2NnUFNBbFpBb0FaMlZ1WlhKaGJBQnpkV0pmYkdGNVpYSUFJQ0FsYzE5d2NtOW1hV3hsWDNOd1lXTmxJQ0FnSUNBNklDVmtDZ0FnSUNWelgzUnBaWEpmWm14aFp5QWdJQ0FnSUNBZ0lEb2dKV1FLQUNoMWJtdHViM2R1S1FCR2IzSnRZWFJTWVc1blpVVjRkR1Z1YzJsdmJuTUFUV0ZwYmxOMGFXeHNVR2xqZEhWeVpRQk5ZV2x1TVRBQVRXRnBiZ0FnSUNWelgzQnliMlpwYkdWZmFXUmpJQ0FnSUNBZ0lEb2dKWE1LQUNBZ0pYTmZjSEp2Wm1sc1pWOWpiMjF3WVhScFltbHNhWFI1WDJac1lXZHpPaUFBS2dvQUlDQWdJQ1Z6WDNCeWIyZHlaWE56YVhabFgzTnZkWEpqWlY5bWJHRm5JRG9nSldRS0FDQWdJQ0FsYzE5cGJuUmxjbXhoWTJWa1gzTnZkWEpqWlY5bWJHRm5JRG9nSldRS0FDQWdJQ0FsYzE5dWIyNWZjR0ZqYTJWa1gyTnZibk4wY21GcGJuUmZabXhoWnlBNklDVmtDZ0FnSUNBZ0pYTmZabkpoYldWZmIyNXNlVjlqYjI1emRISmhhVzUwWDJac1lXY2dPaUFsWkFvQUtpd0FLaVZrQUNBZ0pYTmZiR1YyWld4ZmFXUmpJQ0FnSUNBZ0lDQWdPaUFsWkNBb0pUUXVNbVlwQ2dCMWJuTndaV05wWm1sbFpBQk5RVU1BVTBWRFFVMEFUbFJUUXdCUVFVd0FZMjl0Y0c5dVpXNTBBQzB0TFMwdExTMHRMUzB0TFMwdExTMHRJRlpWU1NBdExTMHRMUzB0TFMwdExTMHRMUzB0TFFvQWMyRnRjR3hsSUdGemNHVmpkQ0J5WVhScGJ5QWdJQ0FnSUNBZ09pQWxaRG9sWkFvQWIzWmxjbk5qWVc1ZmFXNW1iMTl3Y21WelpXNTBYMlpzWVdjZ09pQWxaQW9BYjNabGNuTmpZVzVmWVhCd2NtOXdjbWxoZEdWZlpteGhaeUFnT2lBbFpBb0FkbWxrWlc5ZmMybG5ibUZzWDNSNWNHVmZjSEpsYzJWdWRGOW1iR0ZuT2lBbFpBb0FJQ0IyYVdSbGIxOW1iM0p0WVhRZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBbGN3b0FJQ0IyYVdSbGIxOW1kV3hzWDNKaGJtZGxYMlpzWVdjZ0lDQWdJQ0FnT2lBbFpBb0FJQ0JqYjJ4dmRYSmZaR1Z6WTNKcGNIUnBiMjVmY0hKbGMyVnVkRjltYkdGbklEb2dKV1FLQUNBZ1kyOXNiM1Z5WDNCeWFXMWhjbWxsY3lBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUNBZ2RISmhibk5tWlhKZlkyaGhjbUZqZEdWeWFYTjBhV056SUNBZ0lEb2dKV1FLQUNBZ2JXRjBjbWw0WDJOdlpXWm1jeUFnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dKV1FLQUdOb2NtOXRZVjlzYjJOZmFXNW1iMTl3Y21WelpXNTBYMlpzWVdjNklDVmtDZ0FnSUdOb2NtOXRZVjl6WVcxd2JHVmZiRzlqWDNSNWNHVmZkRzl3WDJacFpXeGtJQ0FnT2lBbFpBb0FJQ0JqYUhKdmJXRmZjMkZ0Y0d4bFgyeHZZMTkwZVhCbFgySnZkSFJ2YlY5bWFXVnNaRG9nSldRS0FHNWxkWFJ5WVd4ZlkyaHliMjFoWDJsdVpHbGpZWFJwYjI1ZlpteGhaem9nSldRS0FHWnBaV3hrWDNObGNWOW1iR0ZuSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FHWnlZVzFsWDJacFpXeGtYMmx1Wm05ZmNISmxjMlZ1ZEY5bWJHRm5JRG9nSldRS0FHUmxabUYxYkhSZlpHbHpjR3hoZVY5M2FXNWtiM2RmWm14aFp5QWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDJ4bFpuUmZiMlptYzJWMElDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDNKcFoyaDBYMjltWm5ObGRDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDNSdmNGOXZabVp6WlhRZ0lDQWdJRG9nSldRS0FDQWdaR1ZtWDJScGMzQmZkMmx1WDJKdmRIUnZiVjl2Wm1aelpYUWdJRG9nSldRS0FIWjFhVjkwYVcxcGJtZGZhVzVtYjE5d2NtVnpaVzUwWDJac1lXY2dJRG9nSldRS0FDQWdkblZwWDI1MWJWOTFibWwwYzE5cGJsOTBhV05ySUNBZ0lDQWdJRG9nSldRS0FDQWdkblZwWDNScGJXVmZjMk5oYkdVZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nSldRS0FIWjFhVjl3YjJOZmNISnZjRzl5ZEdsdmJtRnNYM1J2WDNScGJXbHVaMTltYkdGbklEb2dKV1FLQUhaMWFWOXVkVzFmZEdsamEzTmZjRzlqWDJScFptWmZiMjVsSUNBZ0lDQWdJQ0FnSURvZ0pXUUtBSFoxYVY5b2NtUmZjR0Z5WVcxbGRHVnljMTl3Y21WelpXNTBYMlpzWVdjZ09pQWxaQW9BWW1sMGMzUnlaV0Z0WDNKbGMzUnlhV04wYVc5dVgyWnNZV2NnSUNBZ0lDQWdJQ0E2SUNWa0NnQWdJSFJwYkdWelgyWnBlR1ZrWDNOMGNuVmpkSFZ5WlY5bWJHRm5JQ0FnSUNBZ0lEb2dKV1FLQUNBZ2JXOTBhVzl1WDNabFkzUnZjbk5mYjNabGNsOXdhV05mWW05MWJtUmhjbWxsYzE5bWJHRm5JRG9nSldRS0FDQWdjbVZ6ZEhKcFkzUmxaRjl5WldaZmNHbGpYMnhwYzNSelgyWnNZV2NnSUNBZ09pQWxaQW9BSUNCdGFXNWZjM0JoZEdsaGJGOXpaV2R0Wlc1MFlYUnBiMjVmYVdSaklDQWdJQ0E2SUNWa0NnQWdJRzFoZUY5aWVYUmxjMTl3WlhKZmNHbGpYMlJsYm05dElDQWdJQ0FnSUNBZ0lEb2dKV1FLQUNBZ2JXRjRYMkpwZEhOZmNHVnlYMjFwYmw5amRWOWtaVzV2YlNBZ0lDQWdJQ0FnT2lBbFpBb0FJQ0JzYjJjeVgyMWhlRjl0ZGw5c1pXNW5kR2hmYUc5eWFYcHZiblJoYkNBZ0lDQTZJQ1ZrQ2dBZ0lHeHZaekpmYldGNFgyMTJYMnhsYm1kMGFGOTJaWEowYVdOaGJDQWdJQ0FnSURvZ0pXUUtBR0pwZEhOMGNtVmhiUzVqWXdCMllXeDFaVDR3QUdkbGRGOTFkbXhqQUlDdzBQQ0FwOFhqZ0o2NzJIdVdzczEwanFuRGI0ZWd1V21BbUs5a2VwQ21YM1NKbmxwdWdwWlZhSHVPVVdOMWgwMWViNEJKV1dsNlJWVmtkRUpRWDI0K1RGcG9PMGhXWXpoRlVWNDFRVTFaTXo1SlZUQTdSVkF1T0VKTUt6VS9TQ2t5TzBVbk1EaEJKUzAyUGlNck16c2hLVEE0SUNjdU5SNGxLeklkSXlrd0d5RW5MUm9mSlNzWUhpTXBGeHdoSnhZYklDVVZHaDRqRkJnZElSTVhHeDhTRmhvZUVSVVpIQkFVRnhzUEV4WVpEaElWR0E0UkZCY05FQk1XREE4U0ZRd09FUlFMRGhBVEN3MFBFZ29NRHhFS0RBNFFDUXNORHdrTERBNElDZ3dPQ0FrTERRY0pDd3dIQ1FvTUJ3Z0tDd1lJQ1FzR0J3a0tCZ2NJQ1FJQ0FnSUdCUVFFQXdNREF3SUNBZ0lDQWdJQ0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFRSUNCQVFGQmdjSUNRa0xDd3dORFE4UEVCQVNFaE1URlJVV0ZoY1lHQmthR2hzYkhCMGRIaDRlSHlBZ0lTRWhJaUlqSXlNa0pDUWxKU1VtSmo4QkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZCVVdGeGdaR2hzY0hSNGZJQ0VpSXlRbEppY29LU29yTEMwdUx6QXhNak0wTlRZM09EazZPenc5UGo0L1kyRmlZV011WTJNQWJHVnVaM1JvSUQ0OUlEQUFhVzVwZEY5RFFVSkJRMTlrWldOdlpHVnlBQ1Z3SUdNbmRHOXlJRDBnSlhBS0FDVndJR1JsYzNSeWRXTjBiM0lLQUcxbWNtVmxJQ1Z3Q2dBbGNDQnBibWwwQ2dBcWNtVm1ZMjUwUGpFQVkyOXVkR1Y0ZEcxdlpHVnNMbU5qQUdSbFkyOTFjR3hsWDI5eVgyRnNiRzlqWDNkcGRHaGZaVzF3ZEhsZlpHRjBZUUFsY0NBb1lXeHNiMk1wQ2dCdGIyUmxiRnRwWFM1emRHRjBaU0E4UFNBMk1nQnpaWFJmYVc1cGRGWmhiSFZsQUNWd0lISmxiR1ZoYzJVZ0pYQUtBQ1Z3SUdSbFkyOTFjR3hsSUNnbGNDa0tBSEpsWm1OdWRBQmtaV052ZFhCc1pRQWxjQ0JoYzNOcFoyNGdQU0FsY0FvQVpHVmliRzlqYXkwbFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUVCQVFFQkFRRUNBZ0lDQXdNREF3UUVCQVVGQmdZSENBa0tDdzBPRUJJVUZoZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUJnY0lDUW9MREEwT0R4QVJFaFFXR0JvY0hpQWlKQ1lvS2l3dU1ESTBOamc2UEQ1QWNtVm1VR2xqVVRBOVBYSmxabEJwWTFFeEFHUmxZbXh2WTJzdVkyTUFaR1Z5YVhabFgySnZkVzVrWVhKNVUzUnlaVzVuZEdnQU1qWjBhSEpsWVdSZmRHRnphMTlrWldKc2IyTnJYME5VUWxKdmR3QnBiblJ5WVhCeVpXUXVZMk1BYVc1MGNtRlFjbVZrVFc5a1pUd3pOUUJwYm5SeVlWOXdjbVZrYVdOMGFXOXVYMkZ1WjNWc1lYSUFhVzUwY21GUWNtVmtUVzlrWlQ0OU1nQnBiblJ5WVY5d2NtVmthV04wYVc5dVgzTmhiWEJzWlY5bWFXeDBaWEpwYm1jQWMyaGtjaTArYzJ4cFkyVmZkSGx3WlNBOVBTQlRURWxEUlY5VVdWQkZYMElBYlc5MGFXOXVMbU5qQUdkbGJtVnlZWFJsWDJsdWRHVnlYM0J5WldScFkzUnBiMjVmYzJGdGNHeGxjd0J0WTE5amFISnZiV0VBZFc1cGRGZ2dQajBnTUNBbUppQjFibWwwV0NBOElIZHBaSFJvWDJsdVgzVnVhWFJ6QUM0dUwyeHBZbVJsTWpZMUwybHRZV2RsTG1nQVoyVjBBSFZ1YVhSWklENDlJREFnSmlZZ2RXNXBkRmtnUENCb1pXbG5hSFJmYVc1ZmRXNXBkSE1BWTNSNExUNW9ZWE5mYVcxaFoyVW9ZMjlzVUdsaktRQmtaWEpwZG1WZlkyOXNiRzlqWVhSbFpGOXRiM1JwYjI1ZmRtVmpkRzl5Y3dCa1pYSnBkbVZmWTI5dFltbHVaV1JmWW1sd2NtVmthV04wYVhabFgyMWxjbWRwYm1kZlkyRnVaR2xrWVhSbGN3QnlaV1pRYVdOTWFYTjBQajB3QUdSbGNtbDJaVjl6Y0dGMGFXRnNYMngxYldGZmRtVmpkRzl5WDNCeVpXUnBZM1JwYjI0QWJuVnRUVlpRUTJGdVpFeFlQVDB5QUdacGJHeGZiSFZ0WVY5dGIzUnBiMjVmZG1WamRHOXlYM0J5WldScFkzUnZjbk1BVWtsa2VENDlNQUJ5Wldad2FXTXVZMk1BY21WaFpGOXphRzl5ZEY5MFpYSnRYM0psWmw5d2FXTmZjMlYwQUZKSlpIZ2dQajBnTUNBbUppQlNTV1I0SUR3Z2MyVjBjeTV6YVhwbEtDa0FhajQ5TUNBbUppQnFJRHdnVFVGWVgwNVZUVjlTUlVaZlVFbERVd0FxSldRbFl5QUFLaVZ6Q2dCMmIybGtBR0p2YjJ3QVkyaGhjZ0J6YVdkdVpXUWdZMmhoY2dCMWJuTnBaMjVsWkNCamFHRnlBSE5vYjNKMEFIVnVjMmxuYm1Wa0lITm9iM0owQUdsdWRBQjFibk5wWjI1bFpDQnBiblFBYkc5dVp3QjFibk5wWjI1bFpDQnNiMjVuQUdac2IyRjBBR1J2ZFdKc1pRQnpkR1E2T25OMGNtbHVad0J6ZEdRNk9tSmhjMmxqWDNOMGNtbHVaengxYm5OcFoyNWxaQ0JqYUdGeVBnQnpkR1E2T25kemRISnBibWNBWlcxelkzSnBjSFJsYmpvNmRtRnNBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHTm9ZWEkrQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQSE5wWjI1bFpDQmphR0Z5UGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkengxYm5OcFoyNWxaQ0JqYUdGeVBnQmxiWE5qY21sd2RHVnVPanB0WlcxdmNubGZkbWxsZHp4emFHOXlkRDRBWlcxelkzSnBjSFJsYmpvNmJXVnRiM0o1WDNacFpYYzhkVzV6YVdkdVpXUWdjMmh2Y25RK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEdsdWRENEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGRXNXphV2R1WldRZ2FXNTBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eHNiMjVuUGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkengxYm5OcFoyNWxaQ0JzYjI1blBnQmxiWE5qY21sd2RHVnVPanB0WlcxdmNubGZkbWxsZHp4cGJuUTRYM1ErQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQSFZwYm5RNFgzUStBR1Z0YzJOeWFYQjBaVzQ2T20xbGJXOXllVjkyYVdWM1BHbHVkREUyWDNRK0FHVnRjMk55YVhCMFpXNDZPbTFsYlc5eWVWOTJhV1YzUEhWcGJuUXhObDkwUGdCbGJYTmpjbWx3ZEdWdU9qcHRaVzF2Y25sZmRtbGxkenhwYm5Rek1sOTBQZ0JsYlhOamNtbHdkR1Z1T2pwdFpXMXZjbmxmZG1sbGR6eDFhVzUwTXpKZmRENEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOFpteHZZWFErQUdWdGMyTnlhWEIwWlc0Nk9tMWxiVzl5ZVY5MmFXVjNQR1J2ZFdKc1pUNEFaVzF6WTNKcGNIUmxiam82YldWdGIzSjVYM1pwWlhjOGJHOXVaeUJrYjNWaWJHVStBRTR4TUdWdGMyTnlhWEIwWlc0eE1XMWxiVzl5ZVY5MmFXVjNTV1ZGUlFCT01UQmxiWE5qY21sd2RHVnVNVEZ0WlcxdmNubGZkbWxsZDBsa1JVVUFUakV3WlcxelkzSnBjSFJsYmpFeGJXVnRiM0o1WDNacFpYZEpaa1ZGQUU0eE1HVnRjMk55YVhCMFpXNHhNVzFsYlc5eWVWOTJhV1YzU1cxRlJRQk9NVEJsYlhOamNtbHdkR1Z1TVRGdFpXMXZjbmxmZG1sbGQwbHNSVVVBVGpFd1pXMXpZM0pwY0hSbGJqRXhiV1Z0YjNKNVgzWnBaWGRKYWtWRkFFNHhNR1Z0YzJOeWFYQjBaVzR4TVcxbGJXOXllVjkyYVdWM1NXbEZSUUJPTVRCbGJYTmpjbWx3ZEdWdU1URnRaVzF2Y25sZmRtbGxkMGwwUlVVQVRqRXdaVzF6WTNKcGNIUmxiakV4YldWdGIzSjVYM1pwWlhkSmMwVkZBRTR4TUdWdGMyTnlhWEIwWlc0eE1XMWxiVzl5ZVY5MmFXVjNTV2hGUlFCT01UQmxiWE5qY21sd2RHVnVNVEZ0WlcxdmNubGZkbWxsZDBsaFJVVUFUakV3WlcxelkzSnBjSFJsYmpFeGJXVnRiM0o1WDNacFpYZEpZMFZGQUU1VGRETmZYekl4TW1KaGMybGpYM04wY21sdVowbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZPVTE4NVlXeHNiMk5oZEc5eVNYZEZSVVZGQUU1VGRETmZYekl4TW1KaGMybGpYM04wY21sdVowbG9UbE5mTVRGamFHRnlYM1J5WVdsMGMwbG9SVVZPVTE4NVlXeHNiMk5oZEc5eVNXaEZSVVZGQUJFQUNnQVJFUkVBQUFBQUJRQUFBQUFBQUFrQUFBQUFDd0FBQUFBQUFBQUFFUUFQQ2hFUkVRTUtCd0FCRXdrTEN3QUFDUVlMQUFBTEFBWVJBQUFBRVJFUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzQUFBQUFBQUFBQUJFQUNnb1JFUkVBQ2dBQUFnQUpDd0FBQUFrQUN3QUFDd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBQUFBQUFBQUFNQUFBQUFBd0FBQUFBQ1F3QUFBQUFBQXdBQUF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQURRQUFBQVFOQUFBQUFBa09BQUFBQUFBT0FBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQThBQUFBQUR3QUFBQUFKRUFBQUFBQUFFQUFBRUFBQUVnQUFBQklTRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTQUFBQUVoSVNBQUFBQUFBQUNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN3QUFBQUFBQUFBQUFBQUFDZ0FBQUFBS0FBQUFBQWtMQUFBQUFBQUxBQUFMQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUF3QUFBQUFEQUFBQUFBSkRBQUFBQUFBREFBQURBQUFMU3NnSUNBd1dEQjRBQ2h1ZFd4c0tRQXRNRmdyTUZnZ01GZ3RNSGdyTUhnZ01IZ0FhVzVtQUVsT1JnQk9RVTRBTURFeU16UTFOamM0T1VGQ1EwUkZSaTRBVkNFaUdRMEJBZ01SU3h3TUVBUUxIUkllSjJodWIzQnhZaUFGQmc4VEZCVWFDQllIS0NRWEdBa0tEaHNmSlNPRGduMG1LaXM4UFQ0L1EwZEtUVmhaV2x0Y1hWNWZZR0ZqWkdWbVoybHFhMnh5YzNSNWVudDhBRWxzYkdWbllXd2dZbmwwWlNCelpYRjFaVzVqWlFCRWIyMWhhVzRnWlhKeWIzSUFVbVZ6ZFd4MElHNXZkQ0J5WlhCeVpYTmxiblJoWW14bEFFNXZkQ0JoSUhSMGVRQlFaWEp0YVhOemFXOXVJR1JsYm1sbFpBQlBjR1Z5WVhScGIyNGdibTkwSUhCbGNtMXBkSFJsWkFCT2J5QnpkV05vSUdacGJHVWdiM0lnWkdseVpXTjBiM0o1QUU1dklITjFZMmdnY0hKdlkyVnpjd0JHYVd4bElHVjRhWE4wY3dCV1lXeDFaU0IwYjI4Z2JHRnlaMlVnWm05eUlHUmhkR0VnZEhsd1pRQk9ieUJ6Y0dGalpTQnNaV1owSUc5dUlHUmxkbWxqWlFCUGRYUWdiMllnYldWdGIzSjVBRkpsYzI5MWNtTmxJR0oxYzNrQVNXNTBaWEp5ZFhCMFpXUWdjM2x6ZEdWdElHTmhiR3dBVW1WemIzVnlZMlVnZEdWdGNHOXlZWEpwYkhrZ2RXNWhkbUZwYkdGaWJHVUFTVzUyWVd4cFpDQnpaV1ZyQUVOeWIzTnpMV1JsZG1salpTQnNhVzVyQUZKbFlXUXRiMjVzZVNCbWFXeGxJSE41YzNSbGJRQkVhWEpsWTNSdmNua2dibTkwSUdWdGNIUjVBRU52Ym01bFkzUnBiMjRnY21WelpYUWdZbmtnY0dWbGNnQlBjR1Z5WVhScGIyNGdkR2x0WldRZ2IzVjBBRU52Ym01bFkzUnBiMjRnY21WbWRYTmxaQUJJYjNOMElHbHpJR1J2ZDI0QVNHOXpkQ0JwY3lCMWJuSmxZV05vWVdKc1pRQkJaR1J5WlhOeklHbHVJSFZ6WlFCQ2NtOXJaVzRnY0dsd1pRQkpMMDhnWlhKeWIzSUFUbThnYzNWamFDQmtaWFpwWTJVZ2IzSWdZV1JrY21WemN3QkNiRzlqYXlCa1pYWnBZMlVnY21WeGRXbHlaV1FBVG04Z2MzVmphQ0JrWlhacFkyVUFUbTkwSUdFZ1pHbHlaV04wYjNKNUFFbHpJR0VnWkdseVpXTjBiM0o1QUZSbGVIUWdabWxzWlNCaWRYTjVBRVY0WldNZ1ptOXliV0YwSUdWeWNtOXlBRWx1ZG1Gc2FXUWdZWEpuZFcxbGJuUUFRWEpuZFcxbGJuUWdiR2x6ZENCMGIyOGdiRzl1WndCVGVXMWliMnhwWXlCc2FXNXJJR3h2YjNBQVJtbHNaVzVoYldVZ2RHOXZJR3h2Ym1jQVZHOXZJRzFoYm5rZ2IzQmxiaUJtYVd4bGN5QnBiaUJ6ZVhOMFpXMEFUbThnWm1sc1pTQmtaWE5qY21sd2RHOXljeUJoZG1GcGJHRmliR1VBUW1Ga0lHWnBiR1VnWkdWelkzSnBjSFJ2Y2dCT2J5QmphR2xzWkNCd2NtOWpaWE56QUVKaFpDQmhaR1J5WlhOekFFWnBiR1VnZEc5dklHeGhjbWRsQUZSdmJ5QnRZVzU1SUd4cGJtdHpBRTV2SUd4dlkydHpJR0YyWVdsc1lXSnNaUUJTWlhOdmRYSmpaU0JrWldGa2JHOWpheUIzYjNWc1pDQnZZMk4xY2dCVGRHRjBaU0J1YjNRZ2NtVmpiM1psY21GaWJHVUFVSEpsZG1sdmRYTWdiM2R1WlhJZ1pHbGxaQUJQY0dWeVlYUnBiMjRnWTJGdVkyVnNaV1FBUm5WdVkzUnBiMjRnYm05MElHbHRjR3hsYldWdWRHVmtBRTV2SUcxbGMzTmhaMlVnYjJZZ1pHVnphWEpsWkNCMGVYQmxBRWxrWlc1MGFXWnBaWElnY21WdGIzWmxaQUJFWlhacFkyVWdibTkwSUdFZ2MzUnlaV0Z0QUU1dklHUmhkR0VnWVhaaGFXeGhZbXhsQUVSbGRtbGpaU0IwYVcxbGIzVjBBRTkxZENCdlppQnpkSEpsWVcxeklISmxjMjkxY21ObGN3Qk1hVzVySUdoaGN5QmlaV1Z1SUhObGRtVnlaV1FBVUhKdmRHOWpiMndnWlhKeWIzSUFRbUZrSUcxbGMzTmhaMlVBUm1sc1pTQmtaWE5qY21sd2RHOXlJR2x1SUdKaFpDQnpkR0YwWlFCT2IzUWdZU0J6YjJOclpYUUFSR1Z6ZEdsdVlYUnBiMjRnWVdSa2NtVnpjeUJ5WlhGMWFYSmxaQUJOWlhOellXZGxJSFJ2YnlCc1lYSm5aUUJRY205MGIyTnZiQ0IzY205dVp5QjBlWEJsSUdadmNpQnpiMk5yWlhRQVVISnZkRzlqYjJ3Z2JtOTBJR0YyWVdsc1lXSnNaUUJRY205MGIyTnZiQ0J1YjNRZ2MzVndjRzl5ZEdWa0FGTnZZMnRsZENCMGVYQmxJRzV2ZENCemRYQndiM0owWldRQVRtOTBJSE4xY0hCdmNuUmxaQUJRY205MGIyTnZiQ0JtWVcxcGJIa2dibTkwSUhOMWNIQnZjblJsWkFCQlpHUnlaWE56SUdaaGJXbHNlU0J1YjNRZ2MzVndjRzl5ZEdWa0lHSjVJSEJ5YjNSdlkyOXNBRUZrWkhKbGMzTWdibTkwSUdGMllXbHNZV0pzWlFCT1pYUjNiM0pySUdseklHUnZkMjRBVG1WMGQyOXlheUIxYm5KbFlXTm9ZV0pzWlFCRGIyNXVaV04wYVc5dUlISmxjMlYwSUdKNUlHNWxkSGR2Y21zQVEyOXVibVZqZEdsdmJpQmhZbTl5ZEdWa0FFNXZJR0oxWm1abGNpQnpjR0ZqWlNCaGRtRnBiR0ZpYkdVQVUyOWphMlYwSUdseklHTnZibTVsWTNSbFpBQlRiMk5yWlhRZ2JtOTBJR052Ym01bFkzUmxaQUJEWVc1dWIzUWdjMlZ1WkNCaFpuUmxjaUJ6YjJOclpYUWdjMmgxZEdSdmQyNEFUM0JsY21GMGFXOXVJR0ZzY21WaFpIa2dhVzRnY0hKdlozSmxjM01BVDNCbGNtRjBhVzl1SUdsdUlIQnliMmR5WlhOekFGTjBZV3hsSUdacGJHVWdhR0Z1Wkd4bEFGSmxiVzkwWlNCSkwwOGdaWEp5YjNJQVVYVnZkR0VnWlhoalpXVmtaV1FBVG04Z2JXVmthWFZ0SUdadmRXNWtBRmR5YjI1bklHMWxaR2wxYlNCMGVYQmxBRTV2SUdWeWNtOXlJR2x1Wm05eWJXRjBhVzl1QUFELy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9BQUVDQXdRRkJnY0lDZi8vLy8vLy8vOEtDd3dORGc4UUVSSVRGQlVXRnhnWkdoc2NIUjRmSUNFaUkvLy8vLy8vL3dvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vd0FCQWdRSEF3WUZBR2x1Wm1sdWFYUjVBRzVoYmdCTVExOUJURXdBVEVOZlExUlpVRVVBQUFBQVRFTmZUbFZOUlZKSlF3QUFURU5mVkVsTlJRQUFBQUFBVEVOZlEwOU1URUZVUlFBQVRFTmZUVTlPUlZSQlVsa0FURU5mVFVWVFUwRkhSVk1BVEVGT1J3QkRMbFZVUmkwNEFGQlBVMGxZQUUxVlUweGZURTlEVUVGVVNBQk9VM1F6WDE4eU9HbHZjMTlpWVhObFJRQk9VM1F6WDE4eU9XSmhjMmxqWDJsdmMwbGpUbE5mTVRGamFHRnlYM1J5WVdsMGMwbGpSVVZGUlFCT1UzUXpYMTh5T1dKaGMybGpYMmx2YzBsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSUUJPVTNRelgxOHlNVFZpWVhOcFkxOXpkSEpsWVcxaWRXWkpZMDVUWHpFeFkyaGhjbDkwY21GcGRITkpZMFZGUlVVQVRsTjBNMTlmTWpFMVltRnphV05mYzNSeVpXRnRZblZtU1hkT1UxOHhNV05vWVhKZmRISmhhWFJ6U1hkRlJVVkZBRTVUZEROZlh6SXhNMkpoYzJsalgybHpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZSVVVBVGxOME0xOWZNakV6WW1GemFXTmZhWE4wY21WaGJVbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZGUlFCT1UzUXpYMTh5TVROaVlYTnBZMTl2YzNSeVpXRnRTV05PVTE4eE1XTm9ZWEpmZEhKaGFYUnpTV05GUlVWRkFFNVRkRE5mWHpJeE0ySmhjMmxqWDI5emRISmxZVzFKZDA1VFh6RXhZMmhoY2w5MGNtRnBkSE5KZDBWRlJVVUFUbE4wTTE5Zk1qRTBZbUZ6YVdOZmFXOXpkSEpsWVcxSlkwNVRYekV4WTJoaGNsOTBjbUZwZEhOSlkwVkZSVVVBVGxOME0xOWZNakV4WDE5emRHUnZkWFJpZFdaSmQwVkZBRTVUZEROZlh6SXhNVjlmYzNSa2IzVjBZblZtU1dORlJRQjFibk4xY0hCdmNuUmxaQ0JzYjJOaGJHVWdabTl5SUhOMFlXNWtZWEprSUdsdWNIVjBBRTVUZEROZlh6SXhNRjlmYzNSa2FXNWlkV1pKZDBWRkFFNVRkRE5mWHpJeE1GOWZjM1JrYVc1aWRXWkpZMFZGQUU1VGRETmZYekkzWTI5c2JHRjBaVWxqUlVVQVRsTjBNMTlmTWpac2IyTmhiR1UxWm1GalpYUkZBRTVUZEROZlh6STNZMjlzYkdGMFpVbDNSVVVBTURFeU16UTFOamM0T1dGaVkyUmxaa0ZDUTBSRlJuaFlLeTF3VUdsSmJrNEFKWEFBUXdCT1UzUXpYMTh5TjI1MWJWOW5aWFJKWTA1VFh6RTVhWE4wY21WaGJXSjFabDlwZEdWeVlYUnZja2xqVGxOZk1URmphR0Z5WDNSeVlXbDBjMGxqUlVWRlJVVkZBRTVUZEROZlh6STVYMTl1ZFcxZloyVjBTV05GUlFCT1UzUXpYMTh5TVRSZlgyNTFiVjluWlhSZlltRnpaVVVBVGxOME0xOWZNamR1ZFcxZloyVjBTWGRPVTE4eE9XbHpkSEpsWVcxaWRXWmZhWFJsY21GMGIzSkpkMDVUWHpFeFkyaGhjbDkwY21GcGRITkpkMFZGUlVWRlJRQk9VM1F6WDE4eU9WOWZiblZ0WDJkbGRFbDNSVVVBSlhBQUFBQUFUQUJzYkFBbEFBQUFBQUJzQUU1VGRETmZYekkzYm5WdFgzQjFkRWxqVGxOZk1UbHZjM1J5WldGdFluVm1YMmwwWlhKaGRHOXlTV05PVTE4eE1XTm9ZWEpmZEhKaGFYUnpTV05GUlVWRlJVVUFUbE4wTTE5Zk1qbGZYMjUxYlY5d2RYUkpZMFZGQUU1VGRETmZYekl4TkY5ZmJuVnRYM0IxZEY5aVlYTmxSUUJPVTNRelgxOHlOMjUxYlY5d2RYUkpkMDVUWHpFNWIzTjBjbVZoYldKMVpsOXBkR1Z5WVhSdmNrbDNUbE5mTVRGamFHRnlYM1J5WVdsMGMwbDNSVVZGUlVWRkFFNVRkRE5mWHpJNVgxOXVkVzFmY0hWMFNYZEZSUUFsU0RvbFRUb2xVd0FsYlM4bFpDOGxlUUFsU1RvbFRUb2xVeUFsY0FBbFlTQWxZaUFsWkNBbFNEb2xUVG9sVXlBbFdRQkJUUUJRVFFCS1lXNTFZWEo1QUVabFluSjFZWEo1QUUxaGNtTm9BRUZ3Y21sc0FFMWhlUUJLZFc1bEFFcDFiSGtBUVhWbmRYTjBBRk5sY0hSbGJXSmxjZ0JQWTNSdlltVnlBRTV2ZG1WdFltVnlBRVJsWTJWdFltVnlBRXBoYmdCR1pXSUFUV0Z5QUVGd2NnQktkVzRBU25Wc0FFRjFad0JUWlhBQVQyTjBBRTV2ZGdCRVpXTUFVM1Z1WkdGNUFFMXZibVJoZVFCVWRXVnpaR0Y1QUZkbFpHNWxjMlJoZVFCVWFIVnljMlJoZVFCR2NtbGtZWGtBVTJGMGRYSmtZWGtBVTNWdUFFMXZiZ0JVZFdVQVYyVmtBRlJvZFFCR2Nta0FVMkYwQUNWdEx5VmtMeVY1SlZrdEpXMHRKV1FsU1RvbFRUb2xVeUFsY0NWSU9pVk5KVWc2SlUwNkpWTWxTRG9sVFRvbFUwNVRkRE5mWHpJNGRHbHRaVjluWlhSSlkwNVRYekU1YVhOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsalRsTmZNVEZqYUdGeVgzUnlZV2wwYzBsalJVVkZSVVZGQUU1VGRETmZYekl5TUY5ZmRHbHRaVjluWlhSZlkxOXpkRzl5WVdkbFNXTkZSUUJPVTNRelgxOHlPWFJwYldWZlltRnpaVVVBVGxOME0xOWZNamgwYVcxbFgyZGxkRWwzVGxOZk1UbHBjM1J5WldGdFluVm1YMmwwWlhKaGRHOXlTWGRPVTE4eE1XTm9ZWEpmZEhKaGFYUnpTWGRGUlVWRlJVVUFUbE4wTTE5Zk1qSXdYMTkwYVcxbFgyZGxkRjlqWDNOMGIzSmhaMlZKZDBWRkFFNVRkRE5mWHpJNGRHbHRaVjl3ZFhSSlkwNVRYekU1YjNOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsalRsTmZNVEZqYUdGeVgzUnlZV2wwYzBsalJVVkZSVVZGQUU1VGRETmZYekl4TUY5ZmRHbHRaVjl3ZFhSRkFFNVRkRE5mWHpJNGRHbHRaVjl3ZFhSSmQwNVRYekU1YjNOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSVVZGQUU1VGRETmZYekl4TUcxdmJtVjVjSFZ1WTNSSlkweGlNRVZGUlFCT1UzUXpYMTh5TVRCdGIyNWxlVjlpWVhObFJRQk9VM1F6WDE4eU1UQnRiMjVsZVhCMWJtTjBTV05NWWpGRlJVVUFUbE4wTTE5Zk1qRXdiVzl1Wlhsd2RXNWpkRWwzVEdJd1JVVkZBRTVUZEROZlh6SXhNRzF2Ym1WNWNIVnVZM1JKZDB4aU1VVkZSUUF3TVRJek5EVTJOemc1QUNWTVpnQk9VM1F6WDE4eU9XMXZibVY1WDJkbGRFbGpUbE5mTVRscGMzUnlaV0Z0WW5WbVgybDBaWEpoZEc5eVNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVVZGUlVVQVRsTjBNMTlmTWpFeFgxOXRiMjVsZVY5blpYUkpZMFZGQURBeE1qTTBOVFkzT0RrQVRsTjBNMTlmTWpsdGIyNWxlVjluWlhSSmQwNVRYekU1YVhOMGNtVmhiV0oxWmw5cGRHVnlZWFJ2Y2tsM1RsTmZNVEZqYUdGeVgzUnlZV2wwYzBsM1JVVkZSVVZGQUU1VGRETmZYekl4TVY5ZmJXOXVaWGxmWjJWMFNYZEZSUUFsTGpCTVpnQk9VM1F6WDE4eU9XMXZibVY1WDNCMWRFbGpUbE5mTVRsdmMzUnlaV0Z0WW5WbVgybDBaWEpoZEc5eVNXTk9VMTh4TVdOb1lYSmZkSEpoYVhSelNXTkZSVVZGUlVVQVRsTjBNMTlmTWpFeFgxOXRiMjVsZVY5d2RYUkpZMFZGQUU1VGRETmZYekk1Ylc5dVpYbGZjSFYwU1hkT1UxOHhPVzl6ZEhKbFlXMWlkV1pmYVhSbGNtRjBiM0pKZDA1VFh6RXhZMmhoY2w5MGNtRnBkSE5KZDBWRlJVVkZSUUJPVTNRelgxOHlNVEZmWDIxdmJtVjVYM0IxZEVsM1JVVUFUbE4wTTE5Zk1qaHRaWE56WVdkbGMwbGpSVVVBVGxOME0xOWZNakV6YldWemMyRm5aWE5mWW1GelpVVUFUbE4wTTE5Zk1qRTNYMTkzYVdSbGJsOW1jbTl0WDNWMFpqaEpUR296TWtWRlJRQk9VM1F6WDE4eU4yTnZaR1ZqZG5SSlJHbGpNVEZmWDIxaWMzUmhkR1ZmZEVWRkFFNVRkRE5mWHpJeE1tTnZaR1ZqZG5SZlltRnpaVVVBVGxOME0xOWZNakUyWDE5dVlYSnliM2RmZEc5ZmRYUm1PRWxNYWpNeVJVVkZBRTVUZEROZlh6STRiV1Z6YzJGblpYTkpkMFZGQUU1VGRETmZYekkzWTI5a1pXTjJkRWxqWXpFeFgxOXRZbk4wWVhSbFgzUkZSUUJPVTNRelgxOHlOMk52WkdWamRuUkpkMk14TVY5ZmJXSnpkR0YwWlY5MFJVVUFUbE4wTTE5Zk1qZGpiMlJsWTNaMFNVUnpZekV4WDE5dFluTjBZWFJsWDNSRlJRQk9VM1F6WDE4eU5teHZZMkZzWlRWZlgybHRjRVVBVGxOME0xOWZNalZqZEhsd1pVbGpSVVVBVGxOME0xOWZNakV3WTNSNWNHVmZZbUZ6WlVVQVRsTjBNMTlmTWpWamRIbHdaVWwzUlVVQVptRnNjMlVBZEhKMVpRQk9VM1F6WDE4eU9HNTFiWEIxYm1OMFNXTkZSUUJPVTNRelgxOHlPRzUxYlhCMWJtTjBTWGRGUlFCT1UzUXpYMTh5TVRSZlgzTm9ZWEpsWkY5amIzVnVkRVVBVGxOME0xOWZNakU1WDE5emFHRnlaV1JmZDJWaGExOWpiM1Z1ZEVVQVltRmtYM2RsWVd0ZmNIUnlBRTVUZEROZlh6SXhNbUpoWkY5M1pXRnJYM0IwY2tVQWRHVnliV2x1WVhScGJtY2dkMmwwYUNBbGN5QmxlR05sY0hScGIyNGdiMllnZEhsd1pTQWxjem9nSlhNQWRHVnliV2x1WVhScGJtY2dkMmwwYUNBbGN5QmxlR05sY0hScGIyNGdiMllnZEhsd1pTQWxjd0IwWlhKdGFXNWhkR2x1WnlCM2FYUm9JQ1Z6SUdadmNtVnBaMjRnWlhoalpYQjBhVzl1QUhSbGNtMXBibUYwYVc1bkFIVnVZMkYxWjJoMEFGTjBPV1Y0WTJWd2RHbHZiZ0JPTVRCZlgyTjRlR0ZpYVhZeE1UWmZYM05vYVcxZmRIbHdaVjlwYm1adlJRQlRkRGwwZVhCbFgybHVabThBVGpFd1gxOWplSGhoWW1sMk1USXdYMTl6YVY5amJHRnpjMTkwZVhCbFgybHVabTlGQUU0eE1GOWZZM2g0WVdKcGRqRXhOMTlmWTJ4aGMzTmZkSGx3WlY5cGJtWnZSUUJ3ZEdoeVpXRmtYMjl1WTJVZ1ptRnBiSFZ5WlNCcGJpQmZYMk40WVY5blpYUmZaMnh2WW1Gc2MxOW1ZWE4wS0NrQVkyRnVibTkwSUdOeVpXRjBaU0J3ZEdoeVpXRmtJR3RsZVNCbWIzSWdYMTlqZUdGZloyVjBYMmRzYjJKaGJITW9LUUJqWVc1dWIzUWdlbVZ5YnlCdmRYUWdkR2h5WldGa0lIWmhiSFZsSUdadmNpQmZYMk40WVY5blpYUmZaMnh2WW1Gc2N5Z3BBSFJsY20xcGJtRjBaVjlvWVc1a2JHVnlJSFZ1Wlhod1pXTjBaV1JzZVNCeVpYUjFjbTVsWkFCVGRERXhiRzluYVdOZlpYSnliM0lBVTNReE1teGxibWQwYUY5bGNuSnZjZ0JPTVRCZlgyTjRlR0ZpYVhZeE1UbGZYM0J2YVc1MFpYSmZkSGx3WlY5cGJtWnZSUUJPTVRCZlgyTjRlR0ZpYVhZeE1UZGZYM0JpWVhObFgzUjVjR1ZmYVc1bWIwVUFUakV3WDE5amVIaGhZbWwyTVRJelgxOW1kVzVrWVcxbGJuUmhiRjkwZVhCbFgybHVabTlGQUhZQVJHNEFZZ0JqQUdnQVlRQnpBSFFBYVFCcUFHMEFaZ0JrQUU0eE1GOWZZM2g0WVdKcGRqRXhObDlmWlc1MWJWOTBlWEJsWDJsdVptOUZBRTR4TUY5ZlkzaDRZV0pwZGpFeU1WOWZkbTFwWDJOc1lYTnpYM1I1Y0dWZmFXNW1iMFU9Iiksc3RhdGljSW5pdDpmdW5jdGlvbigpe3lBLmlzV2luZG93cz0hIXByb2Nlc3MucGxhdGZvcm0ubWF0Y2goL153aW4vKX0sbW91bnQ6ZnVuY3Rpb24oQSl7cmV0dXJuIGgobykseUEuY3JlYXRlTm9kZShudWxsLCIvIix5QS5nZXRNb2RlKEEub3B0cy5yb290KSwwKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihBLGUscixpKXtpZighRUEuaXNEaXIocikmJiFFQS5pc0ZpbGUocikmJiFFQS5pc0xpbmsocikpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTt2YXIgZj1FQS5jcmVhdGVOb2RlKEEsZSxyKTtyZXR1cm4gZi5ub2RlX29wcz15QS5ub2RlX29wcyxmLnN0cmVhbV9vcHM9eUEuc3RyZWFtX29wcyxmfSxnZXRNb2RlOmZ1bmN0aW9uKEEpe3ZhciBlO3RyeXtlPXVyLmxzdGF0U3luYyhBKSx5QS5pc1dpbmRvd3MmJihlLm1vZGU9ZS5tb2RlfCgxNDYmZS5tb2RlKT4+MSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfXJldHVybiBlLm1vZGV9LHJlYWxQYXRoOmZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1bXTtBLnBhcmVudCE9PUE7KWUucHVzaChBLm5hbWUpLEE9QS5wYXJlbnQ7cmV0dXJuIGUucHVzaChBLm1vdW50Lm9wdHMucm9vdCksZS5yZXZlcnNlKCksbUEuam9pbi5hcHBseShudWxsLGUpfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcDp7MDoiciIsMToicisiLDI6InIrIiw2NDoiciIsNjU6InIrIiw2NjoicisiLDEyOToicngrIiwxOTM6InJ4KyIsNTE0OiJ3KyIsNTc3OiJ3Iiw1Nzg6IncrIiw3MDU6Ind4Iiw3MDY6Ind4KyIsMTAyNDoiYSIsMTAyNToiYSIsMTAyNjoiYSsiLDEwODk6ImEiLDEwOTA6ImErIiwxMTUzOiJheCIsMTE1NDoiYXgrIiwxMjE3OiJheCIsMTIxODoiYXgrIiw0MDk2OiJycyIsNDA5ODoicnMrIn0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6ZnVuY3Rpb24oQSl7aWYoQSY9LTIwOTcxNTMsQSY9LTIwNDksQSY9LTMyNzY5LChBJj0tNTI0Mjg5KWluIHlBLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nTWFwKXJldHVybiB5QS5mbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcFtBXTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpfSxub2RlX29wczp7Z2V0YXR0cjpmdW5jdGlvbihBKXt2YXIgZSxyPXlBLnJlYWxQYXRoKEEpO3RyeXtlPXVyLmxzdGF0U3luYyhyKX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIHlBLmlzV2luZG93cyYmIWUuYmxrc2l6ZSYmKGUuYmxrc2l6ZT00MDk2KSx5QS5pc1dpbmRvd3MmJiFlLmJsb2NrcyYmKGUuYmxvY2tzPShlLnNpemUrZS5ibGtzaXplLTEpL2UuYmxrc2l6ZXwwKSx7ZGV2OmUuZGV2LGlubzplLmlubyxtb2RlOmUubW9kZSxubGluazplLm5saW5rLHVpZDplLnVpZCxnaWQ6ZS5naWQscmRldjplLnJkZXYsc2l6ZTplLnNpemUsYXRpbWU6ZS5hdGltZSxtdGltZTplLm10aW1lLGN0aW1lOmUuY3RpbWUsYmxrc2l6ZTplLmJsa3NpemUsYmxvY2tzOmUuYmxvY2tzfX0sc2V0YXR0cjpmdW5jdGlvbihBLGUpe3ZhciByPXlBLnJlYWxQYXRoKEEpO3RyeXtpZih2b2lkIDAhPT1lLm1vZGUmJih1ci5jaG1vZFN5bmMocixlLm1vZGUpLEEubW9kZT1lLm1vZGUpLHZvaWQgMCE9PWUudGltZXN0YW1wKXt2YXIgaT1uZXcgRGF0ZShlLnRpbWVzdGFtcCk7dXIudXRpbWVzU3luYyhyLGksaSl9dm9pZCAwIT09ZS5zaXplJiZ1ci50cnVuY2F0ZVN5bmMocixlLnNpemUpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LGxvb2t1cDpmdW5jdGlvbihBLGUpe3ZhciByPW1BLmpvaW4yKHlBLnJlYWxQYXRoKEEpLGUpLGk9eUEuZ2V0TW9kZShyKTtyZXR1cm4geUEuY3JlYXRlTm9kZShBLGUsaSl9LG1rbm9kOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPXlBLmNyZWF0ZU5vZGUoQSxlLHIsaSksbj15QS5yZWFsUGF0aChmKTt0cnl7RUEuaXNEaXIoZi5tb2RlKT91ci5ta2RpclN5bmMobixmLm1vZGUpOnVyLndyaXRlRmlsZVN5bmMobiwiIix7bW9kZTpmLm1vZGV9KX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIGZ9LHJlbmFtZTpmdW5jdGlvbihBLGUscil7dmFyIGk9eUEucmVhbFBhdGgoQSksZj1tQS5qb2luMih5QS5yZWFsUGF0aChlKSxyKTt0cnl7dXIucmVuYW1lU3luYyhpLGYpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHVubGluazpmdW5jdGlvbihBLGUpe3ZhciByPW1BLmpvaW4yKHlBLnJlYWxQYXRoKEEpLGUpO3RyeXt1ci51bmxpbmtTeW5jKHIpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHJtZGlyOmZ1bmN0aW9uKEEsZSl7dmFyIHI9bUEuam9pbjIoeUEucmVhbFBhdGgoQSksZSk7dHJ5e3VyLnJtZGlyU3luYyhyKX1jYXRjaChBKXtpZighQS5jb2RlKXRocm93IEE7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9fSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPXlBLnJlYWxQYXRoKEEpO3RyeXtyZXR1cm4gdXIucmVhZGRpclN5bmMoZSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0sc3ltbGluazpmdW5jdGlvbihBLGUscil7dmFyIGk9bUEuam9pbjIoeUEucmVhbFBhdGgoQSksZSk7dHJ5e3VyLnN5bWxpbmtTeW5jKHIsaSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7dmFyIGU9eUEucmVhbFBhdGgoQSk7dHJ5e3JldHVybiBlPXVyLnJlYWRsaW5rU3luYyhlKSxlPWJyLnJlbGF0aXZlKGJyLnJlc29sdmUoQS5tb3VudC5vcHRzLnJvb3QpLGUpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19fSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKEEpe3ZhciBlPXlBLnJlYWxQYXRoKEEubm9kZSk7dHJ5e0VBLmlzRmlsZShBLm5vZGUubW9kZSkmJihBLm5mZD11ci5vcGVuU3luYyhlLHlBLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKEEuZmxhZ3MpKSl9Y2F0Y2goQSl7aWYoIUEuY29kZSl0aHJvdyBBO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBW0EuY29kZV0pfX0sY2xvc2U6ZnVuY3Rpb24oQSl7dHJ5e0VBLmlzRmlsZShBLm5vZGUubW9kZSkmJkEubmZkJiZ1ci5jbG9zZVN5bmMoQS5uZmQpfWNhdGNoKEEpe2lmKCFBLmNvZGUpdGhyb3cgQTt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX19LHJlYWQ6ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZigwPT09aSlyZXR1cm4gMDt2YXIgbix0PW5ldyBCdWZmZXIoaSk7dHJ5e249dXIucmVhZFN5bmMoQS5uZmQsdCwwLGksZil9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9aWYoMDxuKWZvcih2YXIgbz0wO288bjtvKyspZVtyK29dPXRbb107cmV0dXJuIG59LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG4sdD1uZXcgQnVmZmVyKGUuc3ViYXJyYXkocixyK2kpKTt0cnl7bj11ci53cml0ZVN5bmMoQS5uZmQsdCwwLGksZil9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEFbQS5jb2RlXSl9cmV0dXJuIG59LGxsc2VlazpmdW5jdGlvbihBLGUscil7dmFyIGk9ZTtpZigxPT09cilpKz1BLnBvc2l0aW9uO2Vsc2UgaWYoMj09PXImJkVBLmlzRmlsZShBLm5vZGUubW9kZSkpdHJ5e2krPXVyLmZzdGF0U3luYyhBLm5mZCkuc2l6ZX1jYXRjaChBKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQVtBLmNvZGVdKX1pZihpPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtyZXR1cm4gaX19fSxCQT17RElSX01PREU6MTY4OTUsRklMRV9NT0RFOjMzMjc5LHJlYWRlcjpudWxsLG1vdW50OmZ1bmN0aW9uKEEpe2gobCksQkEucmVhZGVyfHwoQkEucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYyk7dmFyIG49QkEuY3JlYXRlTm9kZShudWxsLCIvIixCQS5ESVJfTU9ERSwwKSx0PXt9O2Z1bmN0aW9uIGkoQSl7Zm9yKHZhciBlPUEuc3BsaXQoIi8iKSxyPW4saT0wO2k8ZS5sZW5ndGgtMTtpKyspe3ZhciBmPWUuc2xpY2UoMCxpKzEpLmpvaW4oIi8iKTt0W2ZdfHwodFtmXT1CQS5jcmVhdGVOb2RlKHIsZVtpXSxCQS5ESVJfTU9ERSwwKSkscj10W2ZdfXJldHVybiByfWZ1bmN0aW9uIGYoQSl7dmFyIGU9QS5zcGxpdCgiLyIpO3JldHVybiBlW2UubGVuZ3RoLTFdfXJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKEEub3B0cy5maWxlc3x8W10sZnVuY3Rpb24oQSl7QkEuY3JlYXRlTm9kZShpKEEubmFtZSksZihBLm5hbWUpLEJBLkZJTEVfTU9ERSwwLEEsQS5sYXN0TW9kaWZpZWREYXRlKX0pLChBLm9wdHMuYmxvYnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe0JBLmNyZWF0ZU5vZGUoaShBLm5hbWUpLGYoQS5uYW1lKSxCQS5GSUxFX01PREUsMCxBLmRhdGEpfSksKEEub3B0cy5wYWNrYWdlc3x8W10pLmZvckVhY2goZnVuY3Rpb24ocil7ci5tZXRhZGF0YS5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPUEuZmlsZW5hbWUuc3Vic3RyKDEpO0JBLmNyZWF0ZU5vZGUoaShlKSxmKGUpLEJBLkZJTEVfTU9ERSwwLHIuYmxvYi5zbGljZShBLnN0YXJ0LEEuZW5kKSl9KX0pLG59LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0PUVBLmNyZWF0ZU5vZGUoQSxlLHIpO3JldHVybiB0Lm1vZGU9cix0Lm5vZGVfb3BzPUJBLm5vZGVfb3BzLHQuc3RyZWFtX29wcz1CQS5zdHJlYW1fb3BzLHQudGltZXN0YW1wPShufHxuZXcgRGF0ZSkuZ2V0VGltZSgpLGgoQkEuRklMRV9NT0RFIT09QkEuRElSX01PREUpLHI9PT1CQS5GSUxFX01PREU/KHQuc2l6ZT1mLnNpemUsdC5jb250ZW50cz1mKToodC5zaXplPTQwOTYsdC5jb250ZW50cz17fSksQSYmKEEuY29udGVudHNbZV09dCksdH0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oQSl7cmV0dXJue2RldjoxLGlubzp2b2lkIDAsbW9kZTpBLm1vZGUsbmxpbms6MSx1aWQ6MCxnaWQ6MCxyZGV2OnZvaWQgMCxzaXplOkEuc2l6ZSxhdGltZTpuZXcgRGF0ZShBLnRpbWVzdGFtcCksbXRpbWU6bmV3IERhdGUoQS50aW1lc3RhbXApLGN0aW1lOm5ldyBEYXRlKEEudGltZXN0YW1wKSxibGtzaXplOjQwOTYsYmxvY2tzOk1hdGguY2VpbChBLnNpemUvNDA5Nil9fSxzZXRhdHRyOmZ1bmN0aW9uKEEsZSl7dm9pZCAwIT09ZS5tb2RlJiYoQS5tb2RlPWUubW9kZSksdm9pZCAwIT09ZS50aW1lc3RhbXAmJihBLnRpbWVzdGFtcD1lLnRpbWVzdGFtcCl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT0VOVCl9LG1rbm9kOmZ1bmN0aW9uKEEsZSxyLGkpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scmVuYW1lOmZ1bmN0aW9uKEEsZSxyKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSl9LHVubGluazpmdW5jdGlvbihBLGUpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scm1kaXI6ZnVuY3Rpb24oQSxlKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSl9LHJlYWRkaXI6ZnVuY3Rpb24oQSl7dmFyIGU9WyIuIiwiLi4iXTtmb3IodmFyIHIgaW4gQS5jb250ZW50cylBLmNvbnRlbnRzLmhhc093blByb3BlcnR5KHIpJiZlLnB1c2gocik7cmV0dXJuIGV9LHN5bWxpbms6ZnVuY3Rpb24oQSxlLHIpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKX0scmVhZGxpbms6ZnVuY3Rpb24oQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pfX0sc3RyZWFtX29wczp7cmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKGY+PUEubm9kZS5zaXplKXJldHVybiAwO3ZhciBuPUEubm9kZS5jb250ZW50cy5zbGljZShmLGYraSksdD1CQS5yZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIobik7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpLHIpLG4uc2l6ZX0sd3JpdGU6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pfSxsbHNlZWs6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPWU7aWYoMT09PXI/aSs9QS5wb3NpdGlvbjoyPT09ciYmRUEuaXNGaWxlKEEubm9kZS5tb2RlKSYmKGkrPUEubm9kZS5zaXplKSxpPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtyZXR1cm4gaX19fTtSKz0xNixSKz0xNixSKz0xNjt2YXIgRUE9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczpbbnVsbF0sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsdHJhY2tpbmdEZWxlZ2F0ZTp7fSx0cmFja2luZzp7b3BlbkZsYWdzOntSRUFEOjEsV1JJVEU6Mn19LEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxoYW5kbGVGU0Vycm9yOmZ1bmN0aW9uKEEpe2lmKCEoQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3IpKXRocm93IEErIiA6ICIrcCgpO3JldHVybiB3QShBLmVycm5vKX0sbG9va3VwUGF0aDpmdW5jdGlvbihBLGUpe2lmKGU9ZXx8e30sIShBPW1BLnJlc29sdmUoRUEuY3dkKCksQSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHI9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2Zvcih2YXIgaSBpbiByKXZvaWQgMD09PWVbaV0mJihlW2ldPXJbaV0pO2lmKDg8ZS5yZWN1cnNlX2NvdW50KXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVMT09QKTtmb3IodmFyIGY9bUEubm9ybWFsaXplQXJyYXkoQS5zcGxpdCgiLyIpLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4hIUF9KSwhMSksbj1FQS5yb290LHQ9Ii8iLG89MDtvPGYubGVuZ3RoO28rKyl7dmFyIGE9bz09PWYubGVuZ3RoLTE7aWYoYSYmZS5wYXJlbnQpYnJlYWs7aWYobj1FQS5sb29rdXBOb2RlKG4sZltvXSksdD1tQS5qb2luMih0LGZbb10pLEVBLmlzTW91bnRwb2ludChuKSYmKCFhfHxhJiZlLmZvbGxvd19tb3VudCkmJihuPW4ubW91bnRlZC5yb290KSwhYXx8ZS5mb2xsb3cpZm9yKHZhciBjPTA7RUEuaXNMaW5rKG4ubW9kZSk7KXt2YXIgbD1FQS5yZWFkbGluayh0KTtpZih0PW1BLnJlc29sdmUobUEuZGlybmFtZSh0KSxsKSxuPUVBLmxvb2t1cFBhdGgodCx7cmVjdXJzZV9jb3VudDplLnJlY3Vyc2VfY291bnR9KS5ub2RlLDQwPGMrKyl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTE9PUCl9fXJldHVybntwYXRoOnQsbm9kZTpufX0sZ2V0UGF0aDpmdW5jdGlvbihBKXtmb3IodmFyIGU7Oyl7aWYoRUEuaXNSb290KEEpKXt2YXIgcj1BLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGU/Ii8iIT09cltyLmxlbmd0aC0xXT9yKyIvIitlOnIrZTpyfWU9ZT9BLm5hbWUrIi8iK2U6QS5uYW1lLEE9QS5wYXJlbnR9fSxoYXNoTmFtZTpmdW5jdGlvbihBLGUpe2Zvcih2YXIgcj0wLGk9MDtpPGUubGVuZ3RoO2krKylyPShyPDw1KS1yK2UuY2hhckNvZGVBdChpKXwwO3JldHVybihBK3I+Pj4wKSVFQS5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZTpmdW5jdGlvbihBKXt2YXIgZT1FQS5oYXNoTmFtZShBLnBhcmVudC5pZCxBLm5hbWUpO0EubmFtZV9uZXh0PUVBLm5hbWVUYWJsZVtlXSxFQS5uYW1lVGFibGVbZV09QX0saGFzaFJlbW92ZU5vZGU6ZnVuY3Rpb24oQSl7dmFyIGU9RUEuaGFzaE5hbWUoQS5wYXJlbnQuaWQsQS5uYW1lKTtpZihFQS5uYW1lVGFibGVbZV09PT1BKUVBLm5hbWVUYWJsZVtlXT1BLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgcj1FQS5uYW1lVGFibGVbZV07cjspe2lmKHIubmFtZV9uZXh0PT09QSl7ci5uYW1lX25leHQ9QS5uYW1lX25leHQ7YnJlYWt9cj1yLm5hbWVfbmV4dH19LGxvb2t1cE5vZGU6ZnVuY3Rpb24oQSxlKXt2YXIgcj1FQS5tYXlMb29rdXAoQSk7aWYocil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihyLEEpO2Zvcih2YXIgaT1FQS5oYXNoTmFtZShBLmlkLGUpLGY9RUEubmFtZVRhYmxlW2ldO2Y7Zj1mLm5hbWVfbmV4dCl7dmFyIG49Zi5uYW1lO2lmKGYucGFyZW50LmlkPT09QS5pZCYmbj09PWUpcmV0dXJuIGZ9cmV0dXJuIEVBLmxvb2t1cChBLGUpfSxjcmVhdGVOb2RlOmZ1bmN0aW9uKEEsZSxyLGkpe2lmKCFFQS5GU05vZGUpe0VBLkZTTm9kZT1mdW5jdGlvbihBLGUscixpKXtBPUF8fHRoaXMsdGhpcy5wYXJlbnQ9QSx0aGlzLm1vdW50PUEubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD1FQS5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9ZSx0aGlzLm1vZGU9cix0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9aX0sRUEuRlNOb2RlLnByb3RvdHlwZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhFQS5GU05vZGUucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihBKXtBP3RoaXMubW9kZXw9MzY1OnRoaXMubW9kZSY9LTM2Nn19LHdyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTQ2PT0oMTQ2JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihBKXtBP3RoaXMubW9kZXw9MTQ2OnRoaXMubW9kZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuaXNEaXIodGhpcy5tb2RlKX19LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuaXNDaHJkZXYodGhpcy5tb2RlKX19fSl9dmFyIGY9bmV3IEVBLkZTTm9kZShBLGUscixpKTtyZXR1cm4gRUEuaGFzaEFkZE5vZGUoZiksZn0sZGVzdHJveU5vZGU6ZnVuY3Rpb24oQSl7RUEuaGFzaFJlbW92ZU5vZGUoQSl9LGlzUm9vdDpmdW5jdGlvbihBKXtyZXR1cm4gQT09PUEucGFyZW50fSxpc01vdW50cG9pbnQ6ZnVuY3Rpb24oQSl7cmV0dXJuISFBLm1vdW50ZWR9LGlzRmlsZTpmdW5jdGlvbihBKXtyZXR1cm4gMzI3Njg9PSg2MTQ0MCZBKX0saXNEaXI6ZnVuY3Rpb24oQSl7cmV0dXJuIDE2Mzg0PT0oNjE0NDAmQSl9LGlzTGluazpmdW5jdGlvbihBKXtyZXR1cm4gNDA5NjA9PSg2MTQ0MCZBKX0saXNDaHJkZXY6ZnVuY3Rpb24oQSl7cmV0dXJuIDgxOTI9PSg2MTQ0MCZBKX0saXNCbGtkZXY6ZnVuY3Rpb24oQSl7cmV0dXJuIDI0NTc2PT0oNjE0NDAmQSl9LGlzRklGTzpmdW5jdGlvbihBKXtyZXR1cm4gNDA5Nj09KDYxNDQwJkEpfSxpc1NvY2tldDpmdW5jdGlvbihBKXtyZXR1cm4gNDkxNTI9PSg0OTE1MiZBKX0sZmxhZ01vZGVzOntyOjAscnM6MTA1MjY3MiwicisiOjIsdzo1Nzcsd3g6NzA1LHh3OjcwNSwidysiOjU3OCwid3grIjo3MDYsInh3KyI6NzA2LGE6MTA4OSxheDoxMjE3LHhhOjEyMTcsImErIjoxMDkwLCJheCsiOjEyMTgsInhhKyI6MTIxOH0sbW9kZVN0cmluZ1RvRmxhZ3M6ZnVuY3Rpb24oQSl7dmFyIGU9RUEuZmxhZ01vZGVzW0FdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAiK0EpO3JldHVybiBlfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZzpmdW5jdGlvbihBKXt2YXIgZT1bInIiLCJ3IiwicnciXVszJkFdO3JldHVybiA1MTImQSYmKGUrPSJ3IiksZX0sbm9kZVBlcm1pc3Npb25zOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIEVBLmlnbm9yZVBlcm1pc3Npb25zfHwoLTE9PT1lLmluZGV4T2YoInIiKXx8MjkyJkEubW9kZSkmJigtMT09PWUuaW5kZXhPZigidyIpfHwxNDYmQS5tb2RlKSYmKC0xPT09ZS5pbmRleE9mKCJ4Iil8fDczJkEubW9kZSk/MDpoQS5FQUNDRVN9LG1heUxvb2t1cDpmdW5jdGlvbihBKXt2YXIgZT1FQS5ub2RlUGVybWlzc2lvbnMoQSwieCIpO3JldHVybiBlfHwoQS5ub2RlX29wcy5sb29rdXA/MDpoQS5FQUNDRVMpfSxtYXlDcmVhdGU6ZnVuY3Rpb24oQSxlKXt0cnl7RUEubG9va3VwTm9kZShBLGUpO3JldHVybiBoQS5FRVhJU1R9Y2F0Y2goQSl7fXJldHVybiBFQS5ub2RlUGVybWlzc2lvbnMoQSwid3giKX0sbWF5RGVsZXRlOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaTt0cnl7aT1FQS5sb29rdXBOb2RlKEEsZSl9Y2F0Y2goQSl7cmV0dXJuIEEuZXJybm99dmFyIGY9RUEubm9kZVBlcm1pc3Npb25zKEEsInd4Iik7aWYoZilyZXR1cm4gZjtpZihyKXtpZighRUEuaXNEaXIoaS5tb2RlKSlyZXR1cm4gaEEuRU5PVERJUjtpZihFQS5pc1Jvb3QoaSl8fEVBLmdldFBhdGgoaSk9PT1FQS5jd2QoKSlyZXR1cm4gaEEuRUJVU1l9ZWxzZSBpZihFQS5pc0RpcihpLm1vZGUpKXJldHVybiBoQS5FSVNESVI7cmV0dXJuIDB9LG1heU9wZW46ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQT9FQS5pc0xpbmsoQS5tb2RlKT9oQS5FTE9PUDpFQS5pc0RpcihBLm1vZGUpJiYoInIiIT09RUEuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSl8fDUxMiZlKT9oQS5FSVNESVI6RUEubm9kZVBlcm1pc3Npb25zKEEsRUEuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSkpOmhBLkVOT0VOVH0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkOmZ1bmN0aW9uKEEsZSl7QT1BfHwwLGU9ZXx8RUEuTUFYX09QRU5fRkRTO2Zvcih2YXIgcj1BO3I8PWU7cisrKWlmKCFFQS5zdHJlYW1zW3JdKXJldHVybiByO3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVNRklMRSl9LGdldFN0cmVhbTpmdW5jdGlvbihBKXtyZXR1cm4gRUEuc3RyZWFtc1tBXX0sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKEEsZSxyKXtFQS5GU1N0cmVhbXx8KEVBLkZTU3RyZWFtPWZ1bmN0aW9uKCl7fSxFQS5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRUEuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LHNldDpmdW5jdGlvbihBKXt0aGlzLm5vZGU9QX19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fX0pKTt2YXIgaT1uZXcgRUEuRlNTdHJlYW07Zm9yKHZhciBmIGluIEEpaVtmXT1BW2ZdO0E9aTt2YXIgbj1FQS5uZXh0ZmQoZSxyKTtyZXR1cm4gQS5mZD1uLEVBLnN0cmVhbXNbbl09QX0sY2xvc2VTdHJlYW06ZnVuY3Rpb24oQSl7RUEuc3RyZWFtc1tBXT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihBKXt2YXIgZT1FQS5nZXREZXZpY2UoQS5ub2RlLnJkZXYpO0Euc3RyZWFtX29wcz1lLnN0cmVhbV9vcHMsQS5zdHJlYW1fb3BzLm9wZW4mJkEuc3RyZWFtX29wcy5vcGVuKEEpfSxsbHNlZWs6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpfX0sbWFqb3I6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+Pjh9LG1pbm9yOmZ1bmN0aW9uKEEpe3JldHVybiAyNTUmQX0sbWFrZWRldjpmdW5jdGlvbihBLGUpe3JldHVybiBBPDw4fGV9LHJlZ2lzdGVyRGV2aWNlOmZ1bmN0aW9uKEEsZSl7RUEuZGV2aWNlc1tBXT17c3RyZWFtX29wczplfX0sZ2V0RGV2aWNlOmZ1bmN0aW9uKEEpe3JldHVybiBFQS5kZXZpY2VzW0FdfSxnZXRNb3VudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBlPVtdLHI9W0FdO3IubGVuZ3RoOyl7dmFyIGk9ci5wb3AoKTtlLnB1c2goaSksci5wdXNoLmFwcGx5KHIsaS5tb3VudHMpfXJldHVybiBlfSxzeW5jZnM6ZnVuY3Rpb24oZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPSExKSxFQS5zeW5jRlNSZXF1ZXN0cysrLDE8RUEuc3luY0ZTUmVxdWVzdHMmJmNvbnNvbGUubG9nKCJ3YXJuaW5nOiAiK0VBLnN5bmNGU1JlcXVlc3RzKyIgRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29yayIpO3ZhciBpPUVBLmdldE1vdW50cyhFQS5yb290Lm1vdW50KSxmPTA7ZnVuY3Rpb24gbihBKXtyZXR1cm4gaCgwPEVBLnN5bmNGU1JlcXVlc3RzKSxFQS5zeW5jRlNSZXF1ZXN0cy0tLHIoQSl9ZnVuY3Rpb24gdChBKXtpZihBKXJldHVybiB0LmVycm9yZWQ/dm9pZCAwOih0LmVycm9yZWQ9ITAsbihBKSk7KytmPj1pLmxlbmd0aCYmbihudWxsKX1pLmZvckVhY2goZnVuY3Rpb24oQSl7aWYoIUEudHlwZS5zeW5jZnMpcmV0dXJuIHQobnVsbCk7QS50eXBlLnN5bmNmcyhBLGUsdCl9KX0sbW91bnQ6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY9Ii8iPT09cixuPSFyO2lmKGYmJkVBLnJvb3QpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO2lmKCFmJiYhbil7dmFyIHQ9RUEubG9va3VwUGF0aChyLHtmb2xsb3dfbW91bnQ6ITF9KTtpZihyPXQucGF0aCxpPXQubm9kZSxFQS5pc01vdW50cG9pbnQoaSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO2lmKCFFQS5pc0RpcihpLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RESVIpfXZhciBvPXt0eXBlOkEsb3B0czplLG1vdW50cG9pbnQ6cixtb3VudHM6W119LGE9QS5tb3VudChvKTtyZXR1cm4oYS5tb3VudD1vKS5yb290PWEsZj9FQS5yb290PWE6aSYmKGkubW91bnRlZD1vLGkubW91bnQmJmkubW91bnQubW91bnRzLnB1c2gobykpLGF9LHVubW91bnQ6ZnVuY3Rpb24oQSl7dmFyIGU9RUEubG9va3VwUGF0aChBLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighRUEuaXNNb3VudHBvaW50KGUubm9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTt2YXIgcj1lLm5vZGUsaT1yLm1vdW50ZWQsZj1FQS5nZXRNb3VudHMoaSk7T2JqZWN0LmtleXMoRUEubmFtZVRhYmxlKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1FQS5uYW1lVGFibGVbQV07ZTspe3ZhciByPWUubmFtZV9uZXh0Oy0xIT09Zi5pbmRleE9mKGUubW91bnQpJiZFQS5kZXN0cm95Tm9kZShlKSxlPXJ9fSksci5tb3VudGVkPW51bGw7dmFyIG49ci5tb3VudC5tb3VudHMuaW5kZXhPZihpKTtoKC0xIT09biksci5tb3VudC5tb3VudHMuc3BsaWNlKG4sMSl9LGxvb2t1cDpmdW5jdGlvbihBLGUpe3JldHVybiBBLm5vZGVfb3BzLmxvb2t1cChBLGUpfSxta25vZDpmdW5jdGlvbihBLGUscil7dmFyIGk9RUEubG9va3VwUGF0aChBLHtwYXJlbnQ6ITB9KS5ub2RlLGY9bUEuYmFzZW5hbWUoQSk7aWYoIWZ8fCIuIj09PWZ8fCIuLiI9PT1mKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIG49RUEubWF5Q3JlYXRlKGksZik7aWYobil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihuKTtpZighaS5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIGkubm9kZV9vcHMubWtub2QoaSxmLGUscil9LGNyZWF0ZTpmdW5jdGlvbihBLGUpe3JldHVybiBlPXZvaWQgMCE9PWU/ZTo0MzgsZSY9NDA5NSxlfD0zMjc2OCxFQS5ta25vZChBLGUsMCl9LG1rZGlyOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGU9dm9pZCAwIT09ZT9lOjUxMSxlJj0xMDIzLGV8PTE2Mzg0LEVBLm1rbm9kKEEsZSwwKX0sbWtkaXJUcmVlOmZ1bmN0aW9uKEEsZSl7Zm9yKHZhciByPUEuc3BsaXQoIi8iKSxpPSIiLGY9MDtmPHIubGVuZ3RoOysrZilpZihyW2ZdKXtpKz0iLyIrcltmXTt0cnl7RUEubWtkaXIoaSxlKX1jYXRjaChBKXtpZihBLmVycm5vIT1oQS5FRVhJU1QpdGhyb3cgQX19fSxta2RldjpmdW5jdGlvbihBLGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPWUsZT00MzgpLGV8PTgxOTIsRUEubWtub2QoQSxlLHIpfSxzeW1saW5rOmZ1bmN0aW9uKEEsZSl7aWYoIW1BLnJlc29sdmUoQSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTt2YXIgcj1FQS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGU7aWYoIXIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTt2YXIgaT1tQS5iYXNlbmFtZShlKSxmPUVBLm1heUNyZWF0ZShyLGkpO2lmKGYpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoZik7aWYoIXIubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIHIubm9kZV9vcHMuc3ltbGluayhyLGksQSl9LHJlbmFtZTpmdW5jdGlvbihlLHIpe3ZhciBBLGksZj1tQS5kaXJuYW1lKGUpLG49bUEuZGlybmFtZShyKSx0PW1BLmJhc2VuYW1lKGUpLG89bUEuYmFzZW5hbWUocik7dHJ5e0E9RUEubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KS5ub2RlLGk9RUEubG9va3VwUGF0aChyLHtwYXJlbnQ6ITB9KS5ub2RlfWNhdGNoKEEpe3Rocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKX1pZighQXx8IWkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTtpZihBLm1vdW50IT09aS5tb3VudCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FWERFVik7dmFyIGEsYz1FQS5sb29rdXBOb2RlKEEsdCksbD1tQS5yZWxhdGl2ZShlLG4pO2lmKCIuIiE9PWwuY2hhckF0KDApKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7aWYoIi4iIT09KGw9bUEucmVsYXRpdmUocixmKSkuY2hhckF0KDApKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RFTVBUWSk7dHJ5e2E9RUEubG9va3VwTm9kZShpLG8pfWNhdGNoKEEpe31pZihjIT09YSl7dmFyIHU9RUEuaXNEaXIoYy5tb2RlKSxiPUVBLm1heURlbGV0ZShBLHQsdSk7aWYoYil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihiKTtpZihiPWE/RUEubWF5RGVsZXRlKGksbyx1KTpFQS5tYXlDcmVhdGUoaSxvKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihiKTtpZighQS5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pO2lmKEVBLmlzTW91bnRwb2ludChjKXx8YSYmRUEuaXNNb3VudHBvaW50KGEpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKTtpZihpIT09QSYmKGI9RUEubm9kZVBlcm1pc3Npb25zKEEsInciKSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoYik7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUud2lsbE1vdmVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLndpbGxNb3ZlUGF0aChlLHIpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsTW92ZVBhdGgnXSgnIitlKyInLCAnIityKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrQS5tZXNzYWdlKX1FQS5oYXNoUmVtb3ZlTm9kZShjKTt0cnl7QS5ub2RlX29wcy5yZW5hbWUoYyxpLG8pfWNhdGNoKEEpe3Rocm93IEF9ZmluYWxseXtFQS5oYXNoQWRkTm9kZShjKX10cnl7RUEudHJhY2tpbmdEZWxlZ2F0ZS5vbk1vdmVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uTW92ZVBhdGgoZSxyKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25Nb3ZlUGF0aCddKCciK2UrIicsICciK3IrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitBLm1lc3NhZ2UpfX19LHJtZGlyOmZ1bmN0aW9uKGUpe3ZhciBBPUVBLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxyPW1BLmJhc2VuYW1lKGUpLGk9RUEubG9va3VwTm9kZShBLHIpLGY9RUEubWF5RGVsZXRlKEEsciwhMCk7aWYoZil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihmKTtpZighQS5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7aWYoRUEuaXNNb3VudHBvaW50KGkpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCVVNZKTt0cnl7RUEudHJhY2tpbmdEZWxlZ2F0ZS53aWxsRGVsZXRlUGF0aCYmRUEudHJhY2tpbmdEZWxlZ2F0ZS53aWxsRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnd2lsbERlbGV0ZVBhdGgnXSgnIitlKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrQS5tZXNzYWdlKX1BLm5vZGVfb3BzLnJtZGlyKEEsciksRUEuZGVzdHJveU5vZGUoaSk7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUub25EZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJyIrZSsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9fSxyZWFkZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTtpZighZS5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RESVIpO3JldHVybiBlLm5vZGVfb3BzLnJlYWRkaXIoZSl9LHVubGluazpmdW5jdGlvbihlKXt2YXIgQT1FQS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGUscj1tQS5iYXNlbmFtZShlKSxpPUVBLmxvb2t1cE5vZGUoQSxyKSxmPUVBLm1heURlbGV0ZShBLHIsITEpO2lmKGYpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoZik7aWYoIUEubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKTtpZihFQS5pc01vdW50cG9pbnQoaSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJVU1kpO3RyeXtFQS50cmFja2luZ0RlbGVnYXRlLndpbGxEZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLndpbGxEZWxldGVQYXRoKGUpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCciK2UrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitBLm1lc3NhZ2UpfUEubm9kZV9vcHMudW5saW5rKEEsciksRUEuZGVzdHJveU5vZGUoaSk7dHJ5e0VBLnRyYWNraW5nRGVsZWdhdGUub25EZWxldGVQYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uRGVsZXRlUGF0aChlKX1jYXRjaChBKXtjb25zb2xlLmxvZygiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJyIrZSsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9fSxyZWFkbGluazpmdW5jdGlvbihBKXt2YXIgZT1FQS5sb29rdXBQYXRoKEEpLm5vZGU7aWYoIWUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PRU5UKTtpZighZS5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO3JldHVybiBtQS5yZXNvbHZlKEVBLmdldFBhdGgoZS5wYXJlbnQpLGUubm9kZV9vcHMucmVhZGxpbmsoZSkpfSxzdGF0OmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6IWV9KS5ub2RlO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT0VOVCk7aWYoIXIubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7cmV0dXJuIHIubm9kZV9vcHMuZ2V0YXR0cihyKX0sbHN0YXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEVBLnN0YXQoQSwhMCl9LGNobW9kOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaTsic3RyaW5nIj09dHlwZW9mIEE/aT1FQS5sb29rdXBQYXRoKEEse2ZvbGxvdzohcn0pLm5vZGU6aT1BO2lmKCFpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVBFUk0pO2kubm9kZV9vcHMuc2V0YXR0cihpLHttb2RlOjQwOTUmZXwtNDA5NiZpLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kOmZ1bmN0aW9uKEEsZSl7RUEuY2htb2QoQSxlLCEwKX0sZmNobW9kOmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEuZ2V0U3RyZWFtKEEpO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtFQS5jaG1vZChyLm5vZGUsZSl9LGNob3duOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmOyJzdHJpbmciPT10eXBlb2YgQT9mPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiFpfSkubm9kZTpmPUE7aWYoIWYubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FUEVSTSk7Zi5ub2RlX29wcy5zZXRhdHRyKGYse3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bjpmdW5jdGlvbihBLGUscil7RUEuY2hvd24oQSxlLHIsITApfSxmY2hvd246ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUVBLmdldFN0cmVhbShBKTtpZighaSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7RUEuY2hvd24oaS5ub2RlLGUscil9LHRydW5jYXRlOmZ1bmN0aW9uKEEsZSl7aWYoZTwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIHI7InN0cmluZyI9PXR5cGVvZiBBP3I9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6ITB9KS5ub2RlOnI9QTtpZighci5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVQRVJNKTtpZihFQS5pc0RpcihyLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJU0RJUik7aWYoIUVBLmlzRmlsZShyLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7dmFyIGk9RUEubm9kZVBlcm1pc3Npb25zKHIsInciKTtpZihpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGkpO3Iubm9kZV9vcHMuc2V0YXR0cihyLHtzaXplOmUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOmZ1bmN0aW9uKEEsZSl7dmFyIHI9RUEuZ2V0U3RyZWFtKEEpO2lmKCFyKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtpZigwPT0oMjA5NzE1NSZyLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO0VBLnRydW5jYXRlKHIubm9kZSxlKX0sdXRpbWU6ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTtpLm5vZGVfb3BzLnNldGF0dHIoaSx7dGltZXN0YW1wOk1hdGgubWF4KGUscil9KX0sb3BlbjpmdW5jdGlvbihlLEEscixpLGYpe2lmKCIiPT09ZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO3ZhciBuO2lmKHI9dm9pZCAwPT09cj80Mzg6cixyPTY0JihBPSJzdHJpbmciPT10eXBlb2YgQT9FQS5tb2RlU3RyaW5nVG9GbGFncyhBKTpBKT80MDk1JnJ8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIGUpbj1lO2Vsc2V7ZT1tQS5ub3JtYWxpemUoZSk7dHJ5e249RUEubG9va3VwUGF0aChlLHtmb2xsb3c6ISgxMzEwNzImQSl9KS5ub2RlfWNhdGNoKEEpe319dmFyIHQ9ITE7aWYoNjQmQSlpZihuKXtpZigxMjgmQSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FRVhJU1QpfWVsc2Ugbj1FQS5ta25vZChlLHIsMCksdD0hMDtpZighbil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO2lmKEVBLmlzQ2hyZGV2KG4ubW9kZSkmJihBJj0tNTEzKSw2NTUzNiZBJiYhRUEuaXNEaXIobi5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9URElSKTtpZighdCl7dmFyIG89RUEubWF5T3BlbihuLEEpO2lmKG8pdGhyb3cgbmV3IEVBLkVycm5vRXJyb3Iobyl9NTEyJkEmJkVBLnRydW5jYXRlKG4sMCksQSY9LTY0MTt2YXIgYT1FQS5jcmVhdGVTdHJlYW0oe25vZGU6bixwYXRoOkVBLmdldFBhdGgobiksZmxhZ3M6QSxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6bi5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSxpLGYpO2Euc3RyZWFtX29wcy5vcGVuJiZhLnN0cmVhbV9vcHMub3BlbihhKSwhZC5sb2dSZWFkRmlsZXN8fDEmQXx8KEVBLnJlYWRGaWxlc3x8KEVBLnJlYWRGaWxlcz17fSksZSBpbiBFQS5yZWFkRmlsZXN8fChFQS5yZWFkRmlsZXNbZV09MSxkLnByaW50RXJyKCJyZWFkIGZpbGU6ICIrZSkpKTt0cnl7aWYoRUEudHJhY2tpbmdEZWxlZ2F0ZS5vbk9wZW5GaWxlKXt2YXIgYz0wOzEhPSgyMDk3MTU1JkEpJiYoY3w9RUEudHJhY2tpbmcub3BlbkZsYWdzLlJFQUQpLDAhPSgyMDk3MTU1JkEpJiYoY3w9RUEudHJhY2tpbmcub3BlbkZsYWdzLldSSVRFKSxFQS50cmFja2luZ0RlbGVnYXRlLm9uT3BlbkZpbGUoZSxjKX19Y2F0Y2goQSl7Y29uc29sZS5sb2coIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uT3BlbkZpbGUnXSgnIitlKyInLCBmbGFncykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9cmV0dXJuIGF9LGNsb3NlOmZ1bmN0aW9uKEEpe0EuZ2V0ZGVudHMmJihBLmdldGRlbnRzPW51bGwpO3RyeXtBLnN0cmVhbV9vcHMuY2xvc2UmJkEuc3RyZWFtX29wcy5jbG9zZShBKX1jYXRjaChBKXt0aHJvdyBBfWZpbmFsbHl7RUEuY2xvc2VTdHJlYW0oQS5mZCl9fSxsbHNlZWs6ZnVuY3Rpb24oQSxlLHIpe2lmKCFBLnNlZWthYmxlfHwhQS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpO3JldHVybiBBLnBvc2l0aW9uPUEuc3RyZWFtX29wcy5sbHNlZWsoQSxlLHIpLEEudW5nb3R0ZW49W10sQS5wb3NpdGlvbn0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2lmKGk8MHx8ZjwwKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJTlZBTCk7aWYoMT09KDIwOTcxNTUmQS5mbGFncykpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJBREYpO2lmKEVBLmlzRGlyKEEubm9kZS5tb2RlKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSVNESVIpO2lmKCFBLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpO3ZhciBuPSEwO2lmKHZvaWQgMD09PWYpZj1BLnBvc2l0aW9uLG49ITE7ZWxzZSBpZighQS5zZWVrYWJsZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FU1BJUEUpO3ZhciB0PUEuc3RyZWFtX29wcy5yZWFkKEEsZSxyLGksZik7cmV0dXJuIG58fChBLnBvc2l0aW9uKz10KSx0fSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYsbil7aWYoaTwwfHxmPDApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtpZigwPT0oMjA5NzE1NSZBLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7aWYoRUEuaXNEaXIoQS5ub2RlLm1vZGUpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVJU0RJUik7aWYoIUEuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU5WQUwpOzEwMjQmQS5mbGFncyYmRUEubGxzZWVrKEEsMCwyKTt2YXIgdD0hMDtpZih2b2lkIDA9PT1mKWY9QS5wb3NpdGlvbix0PSExO2Vsc2UgaWYoIUEuc2Vla2FibGUpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRVNQSVBFKTt2YXIgbz1BLnN0cmVhbV9vcHMud3JpdGUoQSxlLHIsaSxmLG4pO3R8fChBLnBvc2l0aW9uKz1vKTt0cnl7QS5wYXRoJiZFQS50cmFja2luZ0RlbGVnYXRlLm9uV3JpdGVUb0ZpbGUmJkVBLnRyYWNraW5nRGVsZWdhdGUub25Xcml0ZVRvRmlsZShBLnBhdGgpfWNhdGNoKEEpe2NvbnNvbGUubG9nKCJGUy50cmFja2luZ0RlbGVnYXRlWydvbldyaXRlVG9GaWxlJ10oJyIrcGF0aCsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK0EubWVzc2FnZSl9cmV0dXJuIG99LGFsbG9jYXRlOmZ1bmN0aW9uKEEsZSxyKXtpZihlPDB8fHI8PTApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlOVkFMKTtpZigwPT0oMjA5NzE1NSZBLmZsYWdzKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7aWYoIUVBLmlzRmlsZShBLm5vZGUubW9kZSkmJiFFQS5pc0RpcihBLm5vZGUubW9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PREVWKTtpZighQS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVPUE5PVFNVUFApO0Euc3RyZWFtX29wcy5hbGxvY2F0ZShBLGUscil9LG1tYXA6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7aWYoMT09KDIwOTcxNTUmQS5mbGFncykpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUFDQ0VTKTtpZighQS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PREVWKTtyZXR1cm4gQS5zdHJlYW1fb3BzLm1tYXAoQSxlLHIsaSxmLG4sdCl9LG1zeW5jOmZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIEEmJkEuc3RyZWFtX29wcy5tc3luYz9BLnN0cmVhbV9vcHMubXN5bmMoQSxlLHIsaSxmKTowfSxtdW5tYXA6ZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGlvY3RsOmZ1bmN0aW9uKEEsZSxyKXtpZighQS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVOT1RUWSk7cmV0dXJuIEEuc3RyZWFtX29wcy5pb2N0bChBLGUscil9LHJlYWRGaWxlOmZ1bmN0aW9uKEEsZSl7aWYoKGU9ZXx8e30pLmZsYWdzPWUuZmxhZ3N8fCJyIixlLmVuY29kaW5nPWUuZW5jb2Rpbmd8fCJiaW5hcnkiLCJ1dGY4IiE9PWUuZW5jb2RpbmcmJiJiaW5hcnkiIT09ZS5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSAiJytlLmVuY29kaW5nKyciJyk7dmFyIHIsaT1FQS5vcGVuKEEsZS5mbGFncyksZj1FQS5zdGF0KEEpLnNpemUsbj1uZXcgVWludDhBcnJheShmKTtyZXR1cm4gRUEucmVhZChpLG4sMCxmLDApLCJ1dGY4Ij09PWUuZW5jb2Rpbmc/cj1jKG4sMCk6ImJpbmFyeSI9PT1lLmVuY29kaW5nJiYocj1uKSxFQS5jbG9zZShpKSxyfSx3cml0ZUZpbGU6ZnVuY3Rpb24oQSxlLHIpe2lmKChyPXJ8fHt9KS5mbGFncz1yLmZsYWdzfHwidyIsci5lbmNvZGluZz1yLmVuY29kaW5nfHwidXRmOCIsInV0ZjgiIT09ci5lbmNvZGluZyYmImJpbmFyeSIhPT1yLmVuY29kaW5nKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmNvZGluZyB0eXBlICInK3IuZW5jb2RpbmcrJyInKTt2YXIgaT1FQS5vcGVuKEEsci5mbGFncyxyLm1vZGUpO2lmKCJ1dGY4Ij09PXIuZW5jb2Rpbmcpe3ZhciBmPW5ldyBVaW50OEFycmF5KFooZSkrMSksbj1iKGUsZiwwLGYubGVuZ3RoKTtFQS53cml0ZShpLGYsMCxuLDAsci5jYW5Pd24pfWVsc2UiYmluYXJ5Ij09PXIuZW5jb2RpbmcmJkVBLndyaXRlKGksZSwwLGUubGVuZ3RoLDAsci5jYW5Pd24pO0VBLmNsb3NlKGkpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4gRUEuY3VycmVudFBhdGh9LGNoZGlyOmZ1bmN0aW9uKEEpe3ZhciBlPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWUubm9kZSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FTk9FTlQpO2lmKCFFQS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRU5PVERJUik7dmFyIHI9RUEubm9kZVBlcm1pc3Npb25zKGUubm9kZSwieCIpO2lmKHIpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3Iocik7RUEuY3VycmVudFBhdGg9ZS5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6ZnVuY3Rpb24oKXtFQS5ta2RpcigiL3RtcCIpLEVBLm1rZGlyKCIvaG9tZSIpLEVBLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlczpmdW5jdGlvbigpe3ZhciBBO2lmKEVBLm1rZGlyKCIvZGV2IiksRUEucmVnaXN0ZXJEZXZpY2UoRUEubWFrZWRldigxLDMpLHtyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHdyaXRlOmZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIGl9fSksRUEubWtkZXYoIi9kZXYvbnVsbCIsRUEubWFrZWRldigxLDMpKSxnQS5yZWdpc3RlcihFQS5tYWtlZGV2KDUsMCksZ0EuZGVmYXVsdF90dHlfb3BzKSxnQS5yZWdpc3RlcihFQS5tYWtlZGV2KDYsMCksZ0EuZGVmYXVsdF90dHkxX29wcyksRUEubWtkZXYoIi9kZXYvdHR5IixFQS5tYWtlZGV2KDUsMCkpLEVBLm1rZGV2KCIvZGV2L3R0eTEiLEVBLm1ha2VkZXYoNiwwKSksInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pe3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO0E9ZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlWzBdfX1lbHNlIEE9bz9mdW5jdGlvbigpe3JldHVybiByZXF1aXJlKCJjcnlwdG8iKS5yYW5kb21CeXRlcygxKVswXX06ZnVuY3Rpb24oKXtyZXR1cm4gMjU2Kk1hdGgucmFuZG9tKCl8MH07RUEuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixBKSxFQS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixBKSxFQS5ta2RpcigiL2Rldi9zaG0iKSxFQS5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllczpmdW5jdGlvbigpe0VBLm1rZGlyKCIvcHJvYyIpLEVBLm1rZGlyKCIvcHJvYy9zZWxmIiksRUEubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxFQS5tb3VudCh7bW91bnQ6ZnVuY3Rpb24oKXt2YXIgQT1FQS5jcmVhdGVOb2RlKCIvcHJvYy9zZWxmIiwiZmQiLDE2ODk1LDczKTtyZXR1cm4gQS5ub2RlX29wcz17bG9va3VwOmZ1bmN0aW9uKEEsZSl7dmFyIHI9K2UsaT1FQS5nZXRTdHJlYW0ocik7aWYoIWkpdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUJBREYpO3ZhciBmPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazpmdW5jdGlvbigpe3JldHVybiBpLnBhdGh9fX07cmV0dXJuIGYucGFyZW50PWZ9fSxBfX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOmZ1bmN0aW9uKCl7ZC5zdGRpbj9FQS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZC5zdGRpbik6RUEuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksZC5zdGRvdXQ/RUEuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGQuc3Rkb3V0KTpFQS5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZC5zdGRlcnI/RUEuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGQuc3RkZXJyKTpFQS5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpO3ZhciBBPUVBLm9wZW4oIi9kZXYvc3RkaW4iLCJyIik7aCgwPT09QS5mZCwiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGluICgiK0EuZmQrIikiKTt2YXIgZT1FQS5vcGVuKCIvZGV2L3N0ZG91dCIsInciKTtoKDE9PT1lLmZkLCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0ICgiK2UuZmQrIikiKTt2YXIgcj1FQS5vcGVuKCIvZGV2L3N0ZGVyciIsInciKTtoKDI9PT1yLmZkLCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkZXJyICgiK3IuZmQrIikiKX0sZW5zdXJlRXJybm9FcnJvcjpmdW5jdGlvbigpe0VBLkVycm5vRXJyb3J8fChFQS5FcnJub0Vycm9yPWZ1bmN0aW9uKEEsZSl7dGhpcy5ub2RlPWUsdGhpcy5zZXRFcnJubz1mdW5jdGlvbihBKXtmb3IodmFyIGUgaW4gdGhpcy5lcnJubz1BLGhBKWlmKGhBW2VdPT09QSl7dGhpcy5jb2RlPWU7YnJlYWt9fSx0aGlzLnNldEVycm5vKEEpLHRoaXMubWVzc2FnZT12QVtBXSx0aGlzLnN0YWNrJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZToobmV3IEVycm9yKS5zdGFja30pfSxFQS5FcnJub0Vycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IsRUEuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3I9RUEuRXJybm9FcnJvcixbaEEuRU5PRU5UXS5mb3JFYWNoKGZ1bmN0aW9uKEEpe0VBLmdlbmVyaWNFcnJvcnNbQV09bmV3IEVBLkVycm5vRXJyb3IoQSksRUEuZ2VuZXJpY0Vycm9yc1tBXS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSl9LHN0YXRpY0luaXQ6ZnVuY3Rpb24oKXtFQS5lbnN1cmVFcnJub0Vycm9yKCksRUEubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxFQS5tb3VudChaQSx7fSwiLyIpLEVBLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLEVBLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksRUEuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksRUEuZmlsZXN5c3RlbXM9e01FTUZTOlpBLElEQkZTOnBBLE5PREVGUzp5QSxXT1JLRVJGUzpCQX19LGluaXQ6ZnVuY3Rpb24oQSxlLHIpe2goIUVBLmluaXQuaW5pdGlhbGl6ZWQsIkZTLmluaXQgd2FzIHByZXZpb3VzbHkgY2FsbGVkLiBJZiB5b3Ugd2FudCB0byBpbml0aWFsaXplIGxhdGVyIHdpdGggY3VzdG9tIHBhcmFtZXRlcnMsIHJlbW92ZSBhbnkgZWFybGllciBjYWxscyAobm90ZSB0aGF0IG9uZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSkiKSxFQS5pbml0LmluaXRpYWxpemVkPSEwLEVBLmVuc3VyZUVycm5vRXJyb3IoKSxkLnN0ZGluPUF8fGQuc3RkaW4sZC5zdGRvdXQ9ZXx8ZC5zdGRvdXQsZC5zdGRlcnI9cnx8ZC5zdGRlcnIsRUEuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9LHF1aXQ6ZnVuY3Rpb24oKXtFQS5pbml0LmluaXRpYWxpemVkPSExO3ZhciBBPWQuX2ZmbHVzaDtBJiZBKDApO2Zvcih2YXIgZT0wO2U8RUEuc3RyZWFtcy5sZW5ndGg7ZSsrKXt2YXIgcj1FQS5zdHJlYW1zW2VdO3ImJkVBLmNsb3NlKHIpfX0sZ2V0TW9kZTpmdW5jdGlvbihBLGUpe3ZhciByPTA7cmV0dXJuIEEmJihyfD0zNjUpLGUmJihyfD0xNDYpLHJ9LGpvaW5QYXRoOmZ1bmN0aW9uKEEsZSl7dmFyIHI9bUEuam9pbi5hcHBseShudWxsLEEpO3JldHVybiBlJiYiLyI9PXJbMF0mJihyPXIuc3Vic3RyKDEpKSxyfSxhYnNvbHV0ZVBhdGg6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gbUEucmVzb2x2ZShlLEEpfSxzdGFuZGFyZGl6ZVBhdGg6ZnVuY3Rpb24oQSl7cmV0dXJuIG1BLm5vcm1hbGl6ZShBKX0sZmluZE9iamVjdDpmdW5jdGlvbihBLGUpe3ZhciByPUVBLmFuYWx5emVQYXRoKEEsZSk7cmV0dXJuIHIuZXhpc3RzP3Iub2JqZWN0Oih3QShyLmVycm9yKSxudWxsKX0sYW5hbHl6ZVBhdGg6ZnVuY3Rpb24oQSxlKXt0cnl7QT0oaT1FQS5sb29rdXBQYXRoKEEse2ZvbGxvdzohZX0pKS5wYXRofWNhdGNoKEEpe312YXIgcj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBpPUVBLmxvb2t1cFBhdGgoQSx7cGFyZW50OiEwfSk7ci5wYXJlbnRFeGlzdHM9ITAsci5wYXJlbnRQYXRoPWkucGF0aCxyLnBhcmVudE9iamVjdD1pLm5vZGUsci5uYW1lPW1BLmJhc2VuYW1lKEEpLGk9RUEubG9va3VwUGF0aChBLHtmb2xsb3c6IWV9KSxyLmV4aXN0cz0hMCxyLnBhdGg9aS5wYXRoLHIub2JqZWN0PWkubm9kZSxyLm5hbWU9aS5ub2RlLm5hbWUsci5pc1Jvb3Q9Ii8iPT09aS5wYXRofWNhdGNoKEEpe3IuZXJyb3I9QS5lcnJub31yZXR1cm4gcn0sY3JlYXRlRm9sZGVyOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksbj1FQS5nZXRNb2RlKHIsaSk7cmV0dXJuIEVBLm1rZGlyKGYsbil9LGNyZWF0ZVBhdGg6ZnVuY3Rpb24oQSxlLHIsaSl7QT0ic3RyaW5nIj09dHlwZW9mIEE/QTpFQS5nZXRQYXRoKEEpO2Zvcih2YXIgZj1lLnNwbGl0KCIvIikucmV2ZXJzZSgpO2YubGVuZ3RoOyl7dmFyIG49Zi5wb3AoKTtpZihuKXt2YXIgdD1tQS5qb2luMihBLG4pO3RyeXtFQS5ta2Rpcih0KX1jYXRjaChBKXt9QT10fX1yZXR1cm4gdH0sY3JlYXRlRmlsZTpmdW5jdGlvbihBLGUscixpLGYpe3ZhciBuPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksdD1FQS5nZXRNb2RlKGksZik7cmV0dXJuIEVBLmNyZWF0ZShuLHQpfSxjcmVhdGVEYXRhRmlsZTpmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQ9ZT9tQS5qb2luMigic3RyaW5nIj09dHlwZW9mIEE/QTpFQS5nZXRQYXRoKEEpLGUpOkEsbz1FQS5nZXRNb2RlKGksZiksYT1FQS5jcmVhdGUodCxvKTtpZihyKXtpZigic3RyaW5nIj09dHlwZW9mIHIpe2Zvcih2YXIgYz1uZXcgQXJyYXkoci5sZW5ndGgpLGw9MCx1PXIubGVuZ3RoO2w8dTsrK2wpY1tsXT1yLmNoYXJDb2RlQXQobCk7cj1jfUVBLmNobW9kKGEsMTQ2fG8pO3ZhciBiPUVBLm9wZW4oYSwidyIpO0VBLndyaXRlKGIsciwwLHIubGVuZ3RoLDAsbiksRUEuY2xvc2UoYiksRUEuY2htb2QoYSxvKX1yZXR1cm4gYX0sY3JlYXRlRGV2aWNlOmZ1bmN0aW9uKEEsZSxhLHQpe3ZhciByPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSksaT1FQS5nZXRNb2RlKCEhYSwhIXQpO0VBLmNyZWF0ZURldmljZS5tYWpvcnx8KEVBLmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGY9RUEubWFrZWRldihFQS5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gRUEucmVnaXN0ZXJEZXZpY2UoZix7b3BlbjpmdW5jdGlvbihBKXtBLnNlZWthYmxlPSExfSxjbG9zZTpmdW5jdGlvbihBKXt0JiZ0LmJ1ZmZlciYmdC5idWZmZXIubGVuZ3RoJiZ0KDEwKX0scmVhZDpmdW5jdGlvbihBLGUscixpLGYpe2Zvcih2YXIgbj0wLHQ9MDt0PGk7dCsrKXt2YXIgbzt0cnl7bz1hKCl9Y2F0Y2goQSl7dGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaEEuRUlPKX1pZih2b2lkIDA9PT1vJiYwPT09bil0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQUdBSU4pO2lmKG51bGw9PW8pYnJlYWs7bisrLGVbcit0XT1vfXJldHVybiBuJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufSx3cml0ZTpmdW5jdGlvbihBLGUscixpLGYpe2Zvcih2YXIgbj0wO248aTtuKyspdHJ5e3QoZVtyK25dKX1jYXRjaChBKXt0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pfXJldHVybiBpJiYoQS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxufX0pLEVBLm1rZGV2KHIsaSxmKX0sY3JlYXRlTGluazpmdW5jdGlvbihBLGUscixpLGYpe3ZhciBuPW1BLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgQT9BOkVBLmdldFBhdGgoQSksZSk7cmV0dXJuIEVBLnN5bWxpbmsocixuKX0sZm9yY2VMb2FkRmlsZTpmdW5jdGlvbihBKXtpZihBLmlzRGV2aWNlfHxBLmlzRm9sZGVyfHxBLmxpbmt8fEEuY29udGVudHMpcmV0dXJuITA7dmFyIGU9ITA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCl0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKCFkLnJlYWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKTt0cnl7QS5jb250ZW50cz1kcihkLnJlYWQoQS51cmwpLCEwKSxBLnVzZWRCeXRlcz1BLmNvbnRlbnRzLmxlbmd0aH1jYXRjaChBKXtlPSExfXJldHVybiBlfHx3QShoQS5FSU8pLGV9LGNyZWF0ZUxhenlGaWxlOmZ1bmN0aW9uKEEsZSxvLHIsaSl7ZnVuY3Rpb24gZigpe3RoaXMubGVuZ3RoS25vd249ITEsdGhpcy5jaHVua3M9W119aWYoZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEEpe2lmKCEoQT50aGlzLmxlbmd0aC0xfHxBPDApKXt2YXIgZT1BJXRoaXMuY2h1bmtTaXplLHI9QS90aGlzLmNodW5rU2l6ZXwwO3JldHVybiB0aGlzLmdldHRlcihyKVtlXX19LGYucHJvdG90eXBlLnNldERhdGFHZXR0ZXI9ZnVuY3Rpb24oQSl7dGhpcy5nZXR0ZXI9QX0sZi5wcm90b3R5cGUuY2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5vcGVuKCJIRUFEIixvLCExKSxBLnNlbmQobnVsbCksISgyMDA8PUEuc3RhdHVzJiZBLnN0YXR1czwzMDB8fDMwND09PUEuc3RhdHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIitvKyIuIFN0YXR1czogIitBLnN0YXR1cyk7dmFyIGUsaT1OdW1iZXIoQS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSkscj0oZT1BLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09ZSxmPShlPUEuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJiJnemlwIj09PWUsbj0xMDQ4NTc2O3J8fChuPWkpO3ZhciB0PXRoaXM7dC5zZXREYXRhR2V0dGVyKGZ1bmN0aW9uKEEpe3ZhciBlPUEqbixyPShBKzEpKm4tMTtpZihyPU1hdGgubWluKHIsaS0xKSx2b2lkIDA9PT10LmNodW5rc1tBXSYmKHQuY2h1bmtzW0FdPWZ1bmN0aW9uKEEsZSl7aWYoZTxBKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCByYW5nZSAoIitBKyIsICIrZSsiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIik7aWYoaS0xPGUpdGhyb3cgbmV3IEVycm9yKCJvbmx5ICIraSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoci5vcGVuKCJHRVQiLG8sITEpLGkhPT1uJiZyLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwiYnl0ZXM9IitBKyItIitlKSwidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSxyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLHIuc2VuZChudWxsKSwhKDIwMDw9ci5zdGF0dXMmJnIuc3RhdHVzPDMwMHx8MzA0PT09ci5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK28rIi4gU3RhdHVzOiAiK3Iuc3RhdHVzKTtyZXR1cm4gdm9pZCAwIT09ci5yZXNwb25zZT9uZXcgVWludDhBcnJheShyLnJlc3BvbnNlfHxbXSk6ZHIoci5yZXNwb25zZVRleHR8fCIiLCEwKX0oZSxyKSksdm9pZCAwPT09dC5jaHVua3NbQV0pdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIHQuY2h1bmtzW0FdfSksIWYmJml8fChuPWk9MSxpPXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxuPWksY29uc29sZS5sb2coIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9aSx0aGlzLl9jaHVua1NpemU9bix0aGlzLmxlbmd0aEtub3duPSEwfSwidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0KXtpZighbCl0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgbj1uZXcgZjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofX0sY2h1bmtTaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19fSk7dmFyIHQ9e2lzRGV2aWNlOiExLGNvbnRlbnRzOm59fWVsc2UgdD17aXNEZXZpY2U6ITEsdXJsOm99O3ZhciBhPUVBLmNyZWF0ZUZpbGUoQSxlLHQscixpKTt0LmNvbnRlbnRzP2EuY29udGVudHM9dC5jb250ZW50czp0LnVybCYmKGEuY29udGVudHM9bnVsbCxhLnVybD10LnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBjPXt9O3JldHVybiBPYmplY3Qua2V5cyhhLnN0cmVhbV9vcHMpLmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIGU9YS5zdHJlYW1fb3BzW0FdO2NbQV09ZnVuY3Rpb24oKXtpZighRUEuZm9yY2VMb2FkRmlsZShhKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pO3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KSxjLnJlYWQ9ZnVuY3Rpb24oQSxlLHIsaSxmKXtpZighRUEuZm9yY2VMb2FkRmlsZShhKSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FSU8pO3ZhciBuPUEubm9kZS5jb250ZW50cztpZihmPj1uLmxlbmd0aClyZXR1cm4gMDt2YXIgdD1NYXRoLm1pbihuLmxlbmd0aC1mLGkpO2lmKGgoMDw9dCksbi5zbGljZSlmb3IodmFyIG89MDtvPHQ7bysrKWVbcitvXT1uW2Yrb107ZWxzZSBmb3Iobz0wO288dDtvKyspZVtyK29dPW4uZ2V0KGYrbyk7cmV0dXJuIHR9LGEuc3RyZWFtX29wcz1jLGF9LGNyZWF0ZVByZWxvYWRlZEZpbGU6ZnVuY3Rpb24oZixuLEEsdCxvLGEsYyxsLHUsYil7QnJvd3Nlci5pbml0KCk7dmFyIHM9bj9tQS5yZXNvbHZlKG1BLmpvaW4yKGYsbikpOmY7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiByKEEpe2ImJmIoKSxsfHxFQS5jcmVhdGVEYXRhRmlsZShmLG4sQSx0LG8sdSksYSYmYSgpLHVBKCl9dmFyIGk9ITE7ZC5wcmVsb2FkUGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKEEpe2l8fEEuY2FuSGFuZGxlKHMpJiYoQS5oYW5kbGUoZSxzLHIsZnVuY3Rpb24oKXtjJiZjKCksdUEoKX0pLGk9ITApfSksaXx8cihlKX1sQSgpLCJzdHJpbmciPT10eXBlb2YgQT9Ccm93c2VyLmFzeW5jTG9hZChBLGZ1bmN0aW9uKEEpe2UoQSl9LGMpOmUoQSl9LGluZGV4ZWREQjpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREJ9LERCX05BTUU6ZnVuY3Rpb24oKXtyZXR1cm4iRU1fRlNfIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9LERCX1ZFUlNJT046MjAsREJfU1RPUkVfTkFNRToiRklMRV9EQVRBIixzYXZlRmlsZXNUb0RCOmZ1bmN0aW9uKGUsbyxhKXtvPW98fGZ1bmN0aW9uKCl7fSxhPWF8fGZ1bmN0aW9uKCl7fTt2YXIgQT1FQS5pbmRleGVkREIoKTt0cnl7dmFyIGM9QS5vcGVuKEVBLkRCX05BTUUoKSxFQS5EQl9WRVJTSU9OKX1jYXRjaChBKXtyZXR1cm4gYShBKX1jLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbigpe2NvbnNvbGUubG9nKCJjcmVhdGluZyBkYiIpLGMucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEVBLkRCX1NUT1JFX05BTUUpfSxjLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBBPWMucmVzdWx0LnRyYW5zYWN0aW9uKFtFQS5EQl9TVE9SRV9OQU1FXSwicmVhZHdyaXRlIikscj1BLm9iamVjdFN0b3JlKEVBLkRCX1NUT1JFX05BTUUpLGk9MCxmPTAsbj1lLmxlbmd0aDtmdW5jdGlvbiB0KCl7KDA9PWY/bzphKSgpfWUuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgZT1yLnB1dChFQS5hbmFseXplUGF0aChBKS5vYmplY3QuY29udGVudHMsQSk7ZS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXsrK2krZj09biYmdCgpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXtpKyArK2Y9PW4mJnQoKX19KSxBLm9uZXJyb3I9YX0sYy5vbmVycm9yPWF9LGxvYWRGaWxlc0Zyb21EQjpmdW5jdGlvbihvLGEsYyl7YT1hfHxmdW5jdGlvbigpe30sYz1jfHxmdW5jdGlvbigpe307dmFyIEE9RUEuaW5kZXhlZERCKCk7dHJ5e3ZhciBsPUEub3BlbihFQS5EQl9OQU1FKCksRUEuREJfVkVSU0lPTil9Y2F0Y2goQSl7cmV0dXJuIGMoQSl9bC5vbnVwZ3JhZGVuZWVkZWQ9YyxsLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBBPWwucmVzdWx0O3RyeXt2YXIgZT1BLnRyYW5zYWN0aW9uKFtFQS5EQl9TVE9SRV9OQU1FXSwicmVhZG9ubHkiKX1jYXRjaChBKXtyZXR1cm4gdm9pZCBjKEEpfXZhciByPWUub2JqZWN0U3RvcmUoRUEuREJfU1RPUkVfTkFNRSksaT0wLGY9MCxuPW8ubGVuZ3RoO2Z1bmN0aW9uIHQoKXsoMD09Zj9hOmMpKCl9by5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBlPXIuZ2V0KEEpO2Uub25zdWNjZXNzPWZ1bmN0aW9uKCl7RUEuYW5hbHl6ZVBhdGgoQSkuZXhpc3RzJiZFQS51bmxpbmsoQSksRUEuY3JlYXRlRGF0YUZpbGUobUEuZGlybmFtZShBKSxtQS5iYXNlbmFtZShBKSxlLnJlc3VsdCwhMCwhMCwhMCksKytpK2Y9PW4mJnQoKX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7aSsgKytmPT1uJiZ0KCl9fSksZS5vbmVycm9yPWN9LGwub25lcnJvcj1jfX0sWEE9e0RFRkFVTFRfUE9MTE1BU0s6NSxtYXBwaW5nczp7fSx1bWFzazo1MTEsY2FsY3VsYXRlQXQ6ZnVuY3Rpb24oQSxlKXtpZigiLyIhPT1lWzBdKXt2YXIgcjtpZigtMTAwPT09QSlyPUVBLmN3ZCgpO2Vsc2V7dmFyIGk9RUEuZ2V0U3RyZWFtKEEpO2lmKCFpKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtyPWkucGF0aH1lPW1BLmpvaW4yKHIsZSl9cmV0dXJuIGV9LGRvU3RhdDpmdW5jdGlvbihBLGUscil7dHJ5e3ZhciBpPUEoZSl9Y2F0Y2goQSl7aWYoQSYmQS5ub2RlJiZtQS5ub3JtYWxpemUoZSkhPT1tQS5ub3JtYWxpemUoRUEuZ2V0UGF0aChBLm5vZGUpKSlyZXR1cm4taEEuRU5PVERJUjt0aHJvdyBBfXJldHVybiBJW3I+PjJdPWkuZGV2LElbcis0Pj4yXT0wLElbcis4Pj4yXT1pLmlubyxJW3IrMTI+PjJdPWkubW9kZSxJW3IrMTY+PjJdPWkubmxpbmssSVtyKzIwPj4yXT1pLnVpZCxJW3IrMjQ+PjJdPWkuZ2lkLElbcisyOD4+Ml09aS5yZGV2LElbciszMj4+Ml09MCxJW3IrMzY+PjJdPWkuc2l6ZSxJW3IrNDA+PjJdPTQwOTYsSVtyKzQ0Pj4yXT1pLmJsb2NrcyxJW3IrNDg+PjJdPWkuYXRpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis1Mj4+Ml09MCxJW3IrNTY+PjJdPWkubXRpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis2MD4+Ml09MCxJW3IrNjQ+PjJdPWkuY3RpbWUuZ2V0VGltZSgpLzFlM3wwLElbcis2OD4+Ml09MCxJW3IrNzI+PjJdPWkuaW5vLDB9LGRvTXN5bmM6ZnVuY3Rpb24oQSxlLHIsaSl7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoRS5zdWJhcnJheShBLEErcikpO0VBLm1zeW5jKGUsZiwwLHIsaSl9LGRvTWtkaXI6ZnVuY3Rpb24oQSxlKXtyZXR1cm4iLyI9PT0oQT1tQS5ub3JtYWxpemUoQSkpW0EubGVuZ3RoLTFdJiYoQT1BLnN1YnN0cigwLEEubGVuZ3RoLTEpKSxFQS5ta2RpcihBLGUsMCksMH0sZG9Na25vZDpmdW5jdGlvbihBLGUscil7c3dpdGNoKDYxNDQwJmUpe2Nhc2UgMzI3Njg6Y2FzZSA4MTkyOmNhc2UgMjQ1NzY6Y2FzZSA0MDk2OmNhc2UgNDkxNTI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4taEEuRUlOVkFMfXJldHVybiBFQS5ta25vZChBLGUsciksMH0sZG9SZWFkbGluazpmdW5jdGlvbihBLGUscil7aWYocjw9MClyZXR1cm4taEEuRUlOVkFMO3ZhciBpPUVBLnJlYWRsaW5rKEEpLGY9TWF0aC5taW4ocixaKGkpKSxuPUJbZStmXTtyZXR1cm4gcyhpLGUscisxKSxCW2UrZl09bixmfSxkb0FjY2VzczpmdW5jdGlvbihBLGUpe2lmKC04JmUpcmV0dXJuLWhBLkVJTlZBTDt2YXIgcjtyPUVBLmxvb2t1cFBhdGgoQSx7Zm9sbG93OiEwfSkubm9kZTt2YXIgaT0iIjtyZXR1cm4gNCZlJiYoaSs9InIiKSwyJmUmJihpKz0idyIpLDEmZSYmKGkrPSJ4IiksaSYmRUEubm9kZVBlcm1pc3Npb25zKHIsaSk/LWhBLkVBQ0NFUzowfSxkb0R1cDpmdW5jdGlvbihBLGUscil7dmFyIGk9RUEuZ2V0U3RyZWFtKHIpO3JldHVybiBpJiZFQS5jbG9zZShpKSxFQS5vcGVuKEEsZSwwLHIscikuZmR9LGRvUmVhZHY6ZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKHZhciBmPTAsbj0wO248cjtuKyspe3ZhciB0PUlbZSs4Km4+PjJdLG89SVtlKyg4Km4rNCk+PjJdLGE9RUEucmVhZChBLEIsdCxvLGkpO2lmKGE8MClyZXR1cm4tMTtpZihmKz1hLGE8bylicmVha31yZXR1cm4gZn0sZG9Xcml0ZXY6ZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKHZhciBmPTAsbj0wO248cjtuKyspe3ZhciB0PUlbZSs4Km4+PjJdLG89SVtlKyg4Km4rNCk+PjJdLGE9RUEud3JpdGUoQSxCLHQsbyxpKTtpZihhPDApcmV0dXJuLTE7Zis9YX1yZXR1cm4gZn0sdmFyYXJnczowLGdldDpmdW5jdGlvbihBKXtyZXR1cm4gWEEudmFyYXJncys9NCxJW1hBLnZhcmFyZ3MtND4+Ml19LGdldFN0cjpmdW5jdGlvbigpe3JldHVybiBnKFhBLmdldCgpKX0sZ2V0U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKCl7dmFyIEE9RUEuZ2V0U3RyZWFtKFhBLmdldCgpKTtpZighQSl0aHJvdyBuZXcgRUEuRXJybm9FcnJvcihoQS5FQkFERik7cmV0dXJuIEF9LGdldFNvY2tldEZyb21GRDpmdW5jdGlvbigpe3ZhciBBPVNPQ0tGUy5nZXRTb2NrZXQoWEEuZ2V0KCkpO2lmKCFBKXRocm93IG5ldyBFQS5FcnJub0Vycm9yKGhBLkVCQURGKTtyZXR1cm4gQX0sZ2V0U29ja2V0QWRkcmVzczpmdW5jdGlvbihBKXt2YXIgZT1YQS5nZXQoKSxyPVhBLmdldCgpO2lmKEEmJjA9PT1lKXJldHVybiBudWxsO3ZhciBpPV9fcmVhZF9zb2NrYWRkcihlLHIpO2lmKGkuZXJybm8pdGhyb3cgbmV3IEVBLkVycm5vRXJyb3IoaS5lcnJubyk7cmV0dXJuIGkuYWRkcj1ETlMubG9va3VwX2FkZHIoaS5hZGRyKXx8aS5hZGRyLGl9LGdldDY0OmZ1bmN0aW9uKCl7dmFyIEE9WEEuZ2V0KCksZT1YQS5nZXQoKTtyZXR1cm4gaCgwPD1BPzA9PT1lOi0xPT09ZSksQX0sZ2V0WmVybzpmdW5jdGlvbigpe2goMD09PVhBLmdldCgpKX19O3ZhciBXQT1hKFs4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwXSwiaTgiLHYpO3ZhciBJQT17fTtmdW5jdGlvbiBDQShBKXtmb3IoO0EubGVuZ3RoOyl7dmFyIGU9QS5wb3AoKTtBLnBvcCgpKGUpfX1mdW5jdGlvbiBHQShBKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoQ1tBPj4yXSl9dmFyIFZBPXt9LEZBPXt9LFJBPXt9LE5BPTQ4LF9BPTU3O2Z1bmN0aW9uIFlBKEEpe2lmKHZvaWQgMD09PUEpcmV0dXJuIl91bmtub3duIjt2YXIgZT0oQT1BLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpKS5jaGFyQ29kZUF0KDApO3JldHVybiBOQTw9ZSYmZTw9X0E/Il8iK0E6QX1mdW5jdGlvbiBRQShBLGUpe3JldHVybiBBPVlBKEEpLG5ldyBGdW5jdGlvbigiYm9keSIsInJldHVybiBmdW5jdGlvbiAiK0ErJygpIHtcXG4gICAgInVzZSBzdHJpY3QiOyAgICByZXR1cm4gYm9keS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xcbn07XFxuJykoZSl9ZnVuY3Rpb24gREEoQSxyKXt2YXIgZT1RQShyLGZ1bmN0aW9uKEEpe3RoaXMubmFtZT1yLHRoaXMubWVzc2FnZT1BO3ZhciBlPW5ldyBFcnJvcihBKS5zdGFjazt2b2lkIDAhPT1lJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrIlxcbiIrZS5yZXBsYWNlKC9eRXJyb3IoOlteXFxuXSopP1xcbi8sIiIpKX0pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEEucHJvdG90eXBlKSwoZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMubWVzc2FnZT90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxlfXZhciBKQT12b2lkIDA7ZnVuY3Rpb24gTUEoQSl7dGhyb3cgbmV3IEpBKEEpfWZ1bmN0aW9uIFRBKGksZSxmKXtmdW5jdGlvbiByKEEpe3ZhciBlPWYoQSk7ZS5sZW5ndGghPT1pLmxlbmd0aCYmTUEoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIHI9MDtyPGkubGVuZ3RoOysrcil4QShpW3JdLGVbcl0pfWkuZm9yRWFjaChmdW5jdGlvbihBKXtSQVtBXT1lfSk7dmFyIG49bmV3IEFycmF5KGUubGVuZ3RoKSx0PVtdLG89MDtlLmZvckVhY2goZnVuY3Rpb24oQSxlKXtGQS5oYXNPd25Qcm9wZXJ0eShBKT9uW2VdPUZBW0FdOih0LnB1c2goQSksVkEuaGFzT3duUHJvcGVydHkoQSl8fChWQVtBXT1bXSksVkFbQV0ucHVzaChmdW5jdGlvbigpe25bZV09RkFbQV0sKytvPT09dC5sZW5ndGgmJnIobil9KSl9KSwwPT09dC5sZW5ndGgmJnIobil9ZnVuY3Rpb24gVUEoQSl7c3dpdGNoKEEpe2Nhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIDE7Y2FzZSA0OnJldHVybiAyO2Nhc2UgODpyZXR1cm4gMztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gdHlwZSBzaXplOiAiK0EpfX1mdW5jdGlvbiBTQSgpe2Zvcih2YXIgQT1uZXcgQXJyYXkoMjU2KSxlPTA7ZTwyNTY7KytlKUFbZV09U3RyaW5nLmZyb21DaGFyQ29kZShlKTtPQT1BfXZhciBPQT12b2lkIDA7ZnVuY3Rpb24gekEoQSl7Zm9yKHZhciBlPSIiLHI9QTtFW3JdOyllKz1PQVtFW3IrK11dO3JldHVybiBlfXZhciBqQT12b2lkIDA7ZnVuY3Rpb24gSEEoQSl7dGhyb3cgbmV3IGpBKEEpfWZ1bmN0aW9uIHhBKEEsZSxyKXtpZihyPXJ8fHt9LCEoImFyZ1BhY2tBZHZhbmNlImluIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTt2YXIgaT1lLm5hbWU7aWYoQXx8SEEoJ3R5cGUgIicraSsnIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyJyksRkEuaGFzT3duUHJvcGVydHkoQSkpe2lmKHIuaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47SEEoIkNhbm5vdCByZWdpc3RlciB0eXBlICciK2krIicgdHdpY2UiKX1pZihGQVtBXT1lLGRlbGV0ZSBSQVtBXSxWQS5oYXNPd25Qcm9wZXJ0eShBKSl7dmFyIGY9VkFbQV07ZGVsZXRlIFZBW0FdLGYuZm9yRWFjaChmdW5jdGlvbihBKXtBKCl9KX19ZnVuY3Rpb24gUEEoQSl7aWYoISh0aGlzIGluc3RhbmNlb2Ygb2UpKXJldHVybiExO2lmKCEoQSBpbnN0YW5jZW9mIG9lKSlyZXR1cm4hMTtmb3IodmFyIGU9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxyPXRoaXMuJCQucHRyLGk9QS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxmPUEuJCQucHRyO2UuYmFzZUNsYXNzOylyPWUudXBjYXN0KHIpLGU9ZS5iYXNlQ2xhc3M7Zm9yKDtpLmJhc2VDbGFzczspZj1pLnVwY2FzdChmKSxpPWkuYmFzZUNsYXNzO3JldHVybiBlPT09aSYmcj09PWZ9ZnVuY3Rpb24gTEEoQSl7cmV0dXJue2NvdW50OkEuY291bnQsZGVsZXRlU2NoZWR1bGVkOkEuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOkEucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOkEucHRyLHB0clR5cGU6QS5wdHJUeXBlLHNtYXJ0UHRyOkEuc21hcnRQdHIsc21hcnRQdHJUeXBlOkEuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiBLQShBKXtIQShBLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWUrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX1mdW5jdGlvbiBxQSgpe2lmKHRoaXMuJCQucHRyfHxLQSh0aGlzKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlKXJldHVybiB0aGlzLiQkLmNvdW50LnZhbHVlKz0xLHRoaXM7dmFyIEE9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykseyQkOnt2YWx1ZTpMQSh0aGlzLiQkKX19KTtyZXR1cm4gQS4kJC5jb3VudC52YWx1ZSs9MSxBLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxBfWZ1bmN0aW9uICRBKEEpe3ZhciBlPUEuJCQ7ZS5zbWFydFB0cj9lLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKGUuc21hcnRQdHIpOmUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihlLnB0cil9ZnVuY3Rpb24gQWUoKXt0aGlzLiQkLnB0cnx8S0EodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZIQSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLC0tdGhpcy4kJC5jb3VudC52YWx1ZSwwPT09dGhpcy4kJC5jb3VudC52YWx1ZSYmJEEodGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9ZnVuY3Rpb24gZWUoKXtyZXR1cm4hdGhpcy4kJC5wdHJ9dmFyIHJlPXZvaWQgMCxpZT1bXTtmdW5jdGlvbiBmZSgpe2Zvcig7aWUubGVuZ3RoOyl7dmFyIEE9aWUucG9wKCk7QS4kJC5kZWxldGVTY2hlZHVsZWQ9ITEsQS5kZWxldGUoKX19ZnVuY3Rpb24gbmUoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fEtBKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmSEEoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxpZS5wdXNoKHRoaXMpLDE9PT1pZS5sZW5ndGgmJnJlJiZyZShmZSksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQ9ITAsdGhpc31mdW5jdGlvbiB0ZSgpe29lLnByb3RvdHlwZS5pc0FsaWFzT2Y9UEEsb2UucHJvdG90eXBlLmNsb25lPXFBLG9lLnByb3RvdHlwZS5kZWxldGU9QWUsb2UucHJvdG90eXBlLmlzRGVsZXRlZD1lZSxvZS5wcm90b3R5cGUuZGVsZXRlTGF0ZXI9bmV9ZnVuY3Rpb24gb2UoKXt9dmFyIGFlPXt9O2Z1bmN0aW9uIGNlKEEsZSxyKXtpZih2b2lkIDA9PT1BW2VdLm92ZXJsb2FkVGFibGUpe3ZhciBpPUFbZV07QVtlXT1mdW5jdGlvbigpe3JldHVybiBBW2VdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoYXJndW1lbnRzLmxlbmd0aCl8fEhBKCJGdW5jdGlvbiAnIityKyInIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0cyBvbmUgb2YgKCIrQVtlXS5vdmVybG9hZFRhYmxlKyIpISIpLEFbZV0ub3ZlcmxvYWRUYWJsZVthcmd1bWVudHMubGVuZ3RoXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEFbZV0ub3ZlcmxvYWRUYWJsZT1bXSxBW2VdLm92ZXJsb2FkVGFibGVbaS5hcmdDb3VudF09aX19ZnVuY3Rpb24gbGUoQSxlLHIpe2QuaGFzT3duUHJvcGVydHkoQSk/KCh2b2lkIDA9PT1yfHx2b2lkIDAhPT1kW0FdLm92ZXJsb2FkVGFibGUmJnZvaWQgMCE9PWRbQV0ub3ZlcmxvYWRUYWJsZVtyXSkmJkhBKCJDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyIrQSsiJyB0d2ljZSIpLGNlKGQsQSxBKSxkLmhhc093blByb3BlcnR5KHIpJiZIQSgiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoIityKyIpISIpLGRbQV0ub3ZlcmxvYWRUYWJsZVtyXT1lKTooZFtBXT1lLHZvaWQgMCE9PXImJihkW0FdLm51bUFyZ3VtZW50cz1yKSl9ZnVuY3Rpb24gdWUoQSxlLHIsaSxmLG4sdCxvKXt0aGlzLm5hbWU9QSx0aGlzLmNvbnN0cnVjdG9yPWUsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1yLHRoaXMucmF3RGVzdHJ1Y3Rvcj1pLHRoaXMuYmFzZUNsYXNzPWYsdGhpcy5nZXRBY3R1YWxUeXBlPW4sdGhpcy51cGNhc3Q9dCx0aGlzLmRvd25jYXN0PW8sdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX1mdW5jdGlvbiBiZShBLGUscil7Zm9yKDtlIT09cjspZS51cGNhc3R8fEhBKCJFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICIrci5uYW1lKyIsIGdvdCBhbiBpbnN0YW5jZSBvZiAiK2UubmFtZSksQT1lLnVwY2FzdChBKSxlPWUuYmFzZUNsYXNzO3JldHVybiBBfWZ1bmN0aW9uIHNlKEEsZSl7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkhBKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO2UuJCR8fEhBKCdDYW5ub3QgcGFzcyAiJyt6ZShlKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxlLiQkLnB0cnx8SEEoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKTt2YXIgcj1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO3JldHVybiBiZShlLiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKX1mdW5jdGlvbiBkZShBLGUpe3ZhciByO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZIQSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksdGhpcy5pc1NtYXJ0UG9pbnRlcj8ocj10aGlzLnJhd0NvbnN0cnVjdG9yKCksbnVsbCE9PUEmJkEucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Iscikscik6MDtlLiQkfHxIQSgnQ2Fubm90IHBhc3MgIicremUoZSkrJyIgYXMgYSAnK3RoaXMubmFtZSksZS4kJC5wdHJ8fEhBKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksIXRoaXMuaXNDb25zdCYmZS4kJC5wdHJUeXBlLmlzQ29uc3QmJkhBKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKGUuJCQuc21hcnRQdHJUeXBlP2UuJCQuc21hcnRQdHJUeXBlLm5hbWU6ZS4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO3ZhciBpPWUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7aWYocj1iZShlLiQkLnB0cixpLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaCh2b2lkIDA9PT1lLiQkLnNtYXJ0UHRyJiZIQSgiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDplLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/cj1lLiQkLnNtYXJ0UHRyOkhBKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrKGUuJCQuc21hcnRQdHJUeXBlP2UuJCQuc21hcnRQdHJUeXBlLm5hbWU6ZS4kJC5wdHJUeXBlLm5hbWUpKyIgdG8gcGFyYW1ldGVyIHR5cGUgIit0aGlzLm5hbWUpO2JyZWFrO2Nhc2UgMTpyPWUuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKGUuJCQuc21hcnRQdHJUeXBlPT09dGhpcylyPWUuJCQuc21hcnRQdHI7ZWxzZXt2YXIgZj1lLmNsb25lKCk7cj10aGlzLnJhd1NoYXJlKHIsVWUoZnVuY3Rpb24oKXtmLmRlbGV0ZSgpfSkpLG51bGwhPT1BJiZBLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHIpfWJyZWFrO2RlZmF1bHQ6SEEoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiByfWZ1bmN0aW9uIGtlKEEsZSl7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkhBKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO2UuJCR8fEhBKCdDYW5ub3QgcGFzcyAiJyt6ZShlKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxlLiQkLnB0cnx8SEEoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSxlLiQkLnB0clR5cGUuaXNDb25zdCYmSEEoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIitlLiQkLnB0clR5cGUubmFtZSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgcj1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO3JldHVybiBiZShlLiQkLnB0cixyLHRoaXMucmVnaXN0ZXJlZENsYXNzKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoQT10aGlzLnJhd0dldFBvaW50ZWUoQSkpLEF9ZnVuY3Rpb24gd2UoQSl7dGhpcy5yYXdEZXN0cnVjdG9yJiZ0aGlzLnJhd0Rlc3RydWN0b3IoQSl9ZnVuY3Rpb24gdmUoQSl7bnVsbCE9PUEmJkEuZGVsZXRlKCl9ZnVuY3Rpb24gbWUoQSxlLHIpe2lmKGU9PT1yKXJldHVybiBBO2lmKHZvaWQgMD09PXIuYmFzZUNsYXNzKXJldHVybiBudWxsO3ZhciBpPW1lKEEsZSxyLmJhc2VDbGFzcyk7cmV0dXJuIG51bGw9PT1pP251bGw6ci5kb3duY2FzdChpKX1mdW5jdGlvbiBnZSgpe3JldHVybiBPYmplY3Qua2V5cyhCZSkubGVuZ3RofWZ1bmN0aW9uIFplKCl7dmFyIEE9W107Zm9yKHZhciBlIGluIEJlKUJlLmhhc093blByb3BlcnR5KGUpJiZBLnB1c2goQmVbZV0pO3JldHVybiBBfWZ1bmN0aW9uIHBlKEEpe3JlPUEsaWUubGVuZ3RoJiZyZSYmcmUoZmUpfWZ1bmN0aW9uIHllKCl7ZC5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PWdlLGQuZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz1aZSxkLmZsdXNoUGVuZGluZ0RlbGV0ZXM9ZmUsZC5zZXREZWxheUZ1bmN0aW9uPXBlfXZhciBCZT17fTtmdW5jdGlvbiBFZShBLGUpe2Zvcih2b2lkIDA9PT1lJiZIQSgicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7QS5iYXNlQ2xhc3M7KWU9QS51cGNhc3QoZSksQT1BLmJhc2VDbGFzcztyZXR1cm4gZX1mdW5jdGlvbiBYZShBLGUpe3JldHVybiBlPUVlKEEsZSksQmVbZV19ZnVuY3Rpb24gV2UoQSxlKXtyZXR1cm4gZS5wdHJUeXBlJiZlLnB0cnx8TUEoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKSwhIWUuc21hcnRQdHJUeXBlIT0hIWUuc21hcnRQdHImJk1BKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxlLmNvdW50PXt2YWx1ZToxfSxPYmplY3QuY3JlYXRlKEEseyQkOnt2YWx1ZTplfX0pfWZ1bmN0aW9uIEllKEEpe3ZhciBlPXRoaXMuZ2V0UG9pbnRlZShBKTtpZighZSlyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKEEpLG51bGw7dmFyIHI9WGUodGhpcy5yZWdpc3RlcmVkQ2xhc3MsZSk7aWYodm9pZCAwIT09cil7aWYoMD09PXIuJCQuY291bnQudmFsdWUpcmV0dXJuIHIuJCQucHRyPWUsci4kJC5zbWFydFB0cj1BLHIuY2xvbmUoKTt2YXIgaT1yLmNsb25lKCk7cmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihBKSxpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj9XZSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjplLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkF9KTpXZSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpBfSl9dmFyIG4sdD10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKGUpLG89YWVbdF07aWYoIW8pcmV0dXJuIGYuY2FsbCh0aGlzKTtuPXRoaXMuaXNDb25zdD9vLmNvbnN0UG9pbnRlclR5cGU6by5wb2ludGVyVHlwZTt2YXIgYT1tZShlLHRoaXMucmVnaXN0ZXJlZENsYXNzLG4ucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gbnVsbD09PWE/Zi5jYWxsKHRoaXMpOnRoaXMuaXNTbWFydFBvaW50ZXI/V2Uobi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bixwdHI6YSxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpBfSk6V2Uobi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bixwdHI6YX0pfWZ1bmN0aW9uIENlKCl7R2UucHJvdG90eXBlLmdldFBvaW50ZWU9aGUsR2UucHJvdG90eXBlLmRlc3RydWN0b3I9d2UsR2UucHJvdG90eXBlLmFyZ1BhY2tBZHZhbmNlPTgsR2UucHJvdG90eXBlLnJlYWRWYWx1ZUZyb21Qb2ludGVyPUdBLEdlLnByb3RvdHlwZS5kZWxldGVPYmplY3Q9dmUsR2UucHJvdG90eXBlLmZyb21XaXJlVHlwZT1JZX1mdW5jdGlvbiBHZShBLGUscixpLGYsbix0LG8sYSxjLGwpe3RoaXMubmFtZT1BLHRoaXMucmVnaXN0ZXJlZENsYXNzPWUsdGhpcy5pc1JlZmVyZW5jZT1yLHRoaXMuaXNDb25zdD1pLHRoaXMuaXNTbWFydFBvaW50ZXI9Zix0aGlzLnBvaW50ZWVUeXBlPW4sdGhpcy5zaGFyaW5nUG9saWN5PXQsdGhpcy5yYXdHZXRQb2ludGVlPW8sdGhpcy5yYXdDb25zdHJ1Y3Rvcj1hLHRoaXMucmF3U2hhcmU9Yyx0aGlzLnJhd0Rlc3RydWN0b3I9bCxmfHx2b2lkIDAhPT1lLmJhc2VDbGFzcz90aGlzLnRvV2lyZVR5cGU9ZGU6KHRoaXMudG9XaXJlVHlwZT1pP3NlOmtlLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpfWZ1bmN0aW9uIFZlKEEsZSxyKXtkLmhhc093blByb3BlcnR5KEEpfHxNQSgiUmVwbGFjaW5nIG5vbmV4aXN0YW50IHB1YmxpYyBzeW1ib2wiKSx2b2lkIDAhPT1kW0FdLm92ZXJsb2FkVGFibGUmJnZvaWQgMCE9PXI/ZFtBXS5vdmVybG9hZFRhYmxlW3JdPWU6KGRbQV09ZSxkW0FdLmFyZ0NvdW50PXIpfWZ1bmN0aW9uIEZlKGYsbil7dmFyIEE7aWYoZj16QShmKSx2b2lkIDAhPT1kWyJGVU5DVElPTl9UQUJMRV8iK2ZdKUE9ZFsiRlVOQ1RJT05fVEFCTEVfIitmXVtuXTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgRlVOQ1RJT05fVEFCTEUpQT1GVU5DVElPTl9UQUJMRVtuXTtlbHNle3ZhciBlPWQuYXNtWyJkeW5DYWxsXyIrZl07dm9pZCAwPT09ZSYmdm9pZCAwPT09KGU9ZC5hc21bImR5bkNhbGxfIitmLnJlcGxhY2UoL2YvZywiZCIpXSkmJkhBKCJObyBkeW5DYWxsIGludm9rZXIgZm9yIHNpZ25hdHVyZTogIitmKSxBPWZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1bXSxyPTE7cjxmLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTt2YXIgaT0icmV0dXJuIGZ1bmN0aW9uICIrKCJkeW5DYWxsXyIrZisiXyIrbikrIigiK2Uuam9pbigiLCAiKSsiKSB7XFxuIjtyZXR1cm4gaSs9IiAgICByZXR1cm4gZHluQ2FsbChyYXdGdW5jdGlvbiIrKGUubGVuZ3RoPyIsICI6IiIpK2Uuam9pbigiLCAiKSsiKTtcXG4iLGkrPSJ9O1xcbiIsbmV3IEZ1bmN0aW9uKCJkeW5DYWxsIiwicmF3RnVuY3Rpb24iLGkpKEEsbil9KGUpfXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBBJiZIQSgidW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlICIrZisiOiAiK24pLEF9dmFyIFJlPXZvaWQgMDtmdW5jdGlvbiBOZShBKXt2YXIgZT1XcihBKSxyPXpBKGUpO3JldHVybiBDcihlKSxyfWZ1bmN0aW9uIF9lKEEsZSl7dmFyIHI9W10saT17fTt0aHJvdyBlLmZvckVhY2goZnVuY3Rpb24gQShlKXtpW2VdfHxGQVtlXXx8KFJBW2VdP1JBW2VdLmZvckVhY2goQSk6KHIucHVzaChlKSxpW2VdPSEwKSl9KSxuZXcgUmUoQSsiOiAiK3IubWFwKE5lKS5qb2luKFsiLCAiXSkpfXZhciBZZT1bXSxRZT1be30se3ZhbHVlOnZvaWQgMH0se3ZhbHVlOm51bGx9LHt2YWx1ZTohMH0se3ZhbHVlOiExfV07ZnVuY3Rpb24gRGUoQSl7NDxBJiYwPT0tLVFlW0FdLnJlZmNvdW50JiYoUWVbQV09dm9pZCAwLFllLnB1c2goQSkpfWZ1bmN0aW9uIEplKCl7Zm9yKHZhciBBPTAsZT01O2U8UWUubGVuZ3RoOysrZSl2b2lkIDAhPT1RZVtlXSYmKytBO3JldHVybiBBfWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciBBPTU7QTxRZS5sZW5ndGg7KytBKWlmKHZvaWQgMCE9PVFlW0FdKXJldHVybiBRZVtBXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUZSgpe2QuY291bnRfZW12YWxfaGFuZGxlcz1KZSxkLmdldF9maXJzdF9lbXZhbD1NZX1mdW5jdGlvbiBVZShBKXtzd2l0Y2goQSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSBudWxsOnJldHVybiAyO2Nhc2UhMDpyZXR1cm4gMztjYXNlITE6cmV0dXJuIDQ7ZGVmYXVsdDp2YXIgZT1ZZS5sZW5ndGg/WWUucG9wKCk6UWUubGVuZ3RoO3JldHVybiBRZVtlXT17cmVmY291bnQ6MSx2YWx1ZTpBfSxlfX1mdW5jdGlvbiBTZShBLGUscil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oQSl7dmFyIGU9cj9COkU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGVbQV0pfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKEEpe3ZhciBlPXI/WDpXO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShlW0E+PjFdKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihBKXt2YXIgZT1yP0k6QztyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZVtBPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrQSl9fWZ1bmN0aW9uIE9lKEEsZSl7dmFyIHI9RkFbQV07cmV0dXJuIHZvaWQgMD09PXImJkhBKGUrIiBoYXMgdW5rbm93biB0eXBlICIrTmUoQSkpLHJ9ZnVuY3Rpb24gemUoQSl7aWYobnVsbD09PUEpcmV0dXJuIm51bGwiO3ZhciBlPXR5cGVvZiBBO3JldHVybiJvYmplY3QiPT1lfHwiYXJyYXkiPT1lfHwiZnVuY3Rpb24iPT1lP0EudG9TdHJpbmcoKToiIitBfWZ1bmN0aW9uIGplKEEsZSl7c3dpdGNoKGUpe2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEdbQT4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShWW0E+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGZsb2F0IHR5cGU6ICIrQSl9fWZ1bmN0aW9uIEhlKEEsZSl7aWYoIShBIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBBKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgcj1RQShBLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO3IucHJvdG90eXBlPUEucHJvdG90eXBlO3ZhciBpPW5ldyByLGY9QS5hcHBseShpLGUpO3JldHVybiBmIGluc3RhbmNlb2YgT2JqZWN0P2Y6aX1mdW5jdGlvbiB4ZShBLGUscixpLGYpe3ZhciBuPWUubGVuZ3RoO248MiYmSEEoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgdD1udWxsIT09ZVsxXSYmbnVsbCE9PXIsbz0hMSxhPTE7YTxlLmxlbmd0aDsrK2EpaWYobnVsbCE9PWVbYV0mJnZvaWQgMD09PWVbYV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKXtvPSEwO2JyZWFrfXZhciBjPSJ2b2lkIiE9PWVbMF0ubmFtZSxsPSIiLHU9IiI7Zm9yKGE9MDthPG4tMjsrK2EpbCs9KDAhPT1hPyIsICI6IiIpKyJhcmciK2EsdSs9KDAhPT1hPyIsICI6IiIpKyJhcmciK2ErIldpcmVkIjt2YXIgYj0icmV0dXJuIGZ1bmN0aW9uICIrWUEoQSkrIigiK2wrIikge1xcbmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAiKyhuLTIpKyIpIHtcXG50aHJvd0JpbmRpbmdFcnJvcignZnVuY3Rpb24gIitBKyIgY2FsbGVkIHdpdGggJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cywgZXhwZWN0ZWQgIisobi0yKSsiIGFyZ3MhJyk7XFxufVxcbiI7byYmKGIrPSJ2YXIgZGVzdHJ1Y3RvcnMgPSBbXTtcXG4iKTt2YXIgcz1vPyJkZXN0cnVjdG9ycyI6Im51bGwiLGQ9WyJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXSxrPVtIQSxpLGYsQ0EsZVswXSxlWzFdXTt0JiYoYis9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitzKyIsIHRoaXMpO1xcbiIpO2ZvcihhPTA7YTxuLTI7KythKWIrPSJ2YXIgYXJnIithKyJXaXJlZCA9IGFyZ1R5cGUiK2ErIi50b1dpcmVUeXBlKCIrcysiLCBhcmciK2ErIik7IC8vICIrZVthKzJdLm5hbWUrIlxcbiIsZC5wdXNoKCJhcmdUeXBlIithKSxrLnB1c2goZVthKzJdKTtpZih0JiYodT0idGhpc1dpcmVkIisoMDx1Lmxlbmd0aD8iLCAiOiIiKSt1KSxiKz0oYz8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKygwPHUubGVuZ3RoPyIsICI6IiIpK3UrIik7XFxuIixvKWIrPSJydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7XFxuIjtlbHNlIGZvcihhPXQ/MToyO2E8ZS5sZW5ndGg7KythKXt2YXIgaD0xPT09YT8idGhpc1dpcmVkIjoiYXJnIisoYS0yKSsiV2lyZWQiO251bGwhPT1lW2FdLmRlc3RydWN0b3JGdW5jdGlvbiYmKGIrPWgrIl9kdG9yKCIraCsiKTsgLy8gIitlW2FdLm5hbWUrIlxcbiIsZC5wdXNoKGgrIl9kdG9yIiksay5wdXNoKGVbYV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9cmV0dXJuIGMmJihiKz0idmFyIHJldCA9IHJldFR5cGUuZnJvbVdpcmVUeXBlKHJ2KTtcXG5yZXR1cm4gcmV0O1xcbiIpLGIrPSJ9XFxuIixkLnB1c2goYiksSGUoRnVuY3Rpb24sZCkuYXBwbHkobnVsbCxrKX1mdW5jdGlvbiBQZShBLGUpe2Zvcih2YXIgcj1bXSxpPTA7aTxBO2krKylyLnB1c2goSVsoZT4+MikraV0pO3JldHVybiByfWZ1bmN0aW9uIExlKEEsZSxyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBCW0FdfTpmdW5jdGlvbihBKXtyZXR1cm4gRVtBXX07Y2FzZSAxOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBYW0E+PjFdfTpmdW5jdGlvbihBKXtyZXR1cm4gV1tBPj4xXX07Y2FzZSAyOnJldHVybiByP2Z1bmN0aW9uKEEpe3JldHVybiBJW0E+PjJdfTpmdW5jdGlvbihBKXtyZXR1cm4gQ1tBPj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitBKX19dmFyIEtlPXt9O2Z1bmN0aW9uIHFlKEEpe3ZhciBlPUtlW0FdO3JldHVybiB2b2lkIDA9PT1lP3pBKEEpOmV9ZnVuY3Rpb24gJGUoQSl7cmV0dXJuIEF8fEhBKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK0EpLFFlW0FdLnZhbHVlfXZhciBBcj1SO2Z1bmN0aW9uIGVyKEEpe3ZhciBlLHI7ZXIuY2FsbGVkPyhyPUlbQXI+PjJdLGU9SVtyPj4yXSk6KGVyLmNhbGxlZD0hMCxyci5VU0VSPXJyLkxPR05BTUU9IndlYl91c2VyIixyci5QQVRIPSIvIixyci5QV0Q9Ii8iLHJyLkhPTUU9Ii9ob21lL3dlYl91c2VyIixyci5MQU5HPSJDLlVURi04Iixyci5fPWQudGhpc1Byb2dyYW0sZT1hKDEwMjQsImk4Iix2KSxyPWEoMjU2LCJpOCoiLHYpLElbcj4+Ml09ZSxJW0FyPj4yXT1yKTt2YXIgaT1bXSxmPTA7Zm9yKHZhciBuIGluIEEpaWYoInN0cmluZyI9PXR5cGVvZiBBW25dKXt2YXIgdD1uKyI9IitBW25dO2kucHVzaCh0KSxmKz10Lmxlbmd0aH1pZigxMDI0PGYpdGhyb3cgbmV3IEVycm9yKCJFbnZpcm9ubWVudCBzaXplIGV4Y2VlZGVkIFRPVEFMX0VOVl9TSVpFISIpO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXtyQSh0PWlbb10sZSksSVtyKzQqbz4+Ml09ZSxlKz10Lmxlbmd0aCsxfUlbcis0KmkubGVuZ3RoPj4yXT0wfVIrPTE2O3ZhciBycj17fTt2YXIgaXI9e307dmFyIGZyPTE7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuIEElND09MCYmKEElMTAwIT0wfHxBJTQwMD09MCl9ZnVuY3Rpb24gdHIoQSxlKXtmb3IodmFyIHI9MCxpPTA7aTw9ZTtyKz1BW2krK10pO3JldHVybiByfXZhciBvcj1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGFyPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZnVuY3Rpb24gY3IoQSxlKXtmb3IodmFyIHI9bmV3IERhdGUoQS5nZXRUaW1lKCkpOzA8ZTspe3ZhciBpPW5yKHIuZ2V0RnVsbFllYXIoKSksZj1yLmdldE1vbnRoKCksbj0oaT9vcjphcilbZl07aWYoIShlPm4tci5nZXREYXRlKCkpKXJldHVybiByLnNldERhdGUoci5nZXREYXRlKCkrZSkscjtlLT1uLXIuZ2V0RGF0ZSgpKzEsci5zZXREYXRlKDEpLGY8MTE/ci5zZXRNb250aChmKzEpOihyLnNldE1vbnRoKDApLHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBscihBLGUscixpKXt2YXIgZj1JW2krNDA+PjJdLG49e3RtX3NlYzpJW2k+PjJdLHRtX21pbjpJW2krND4+Ml0sdG1faG91cjpJW2krOD4+Ml0sdG1fbWRheTpJW2krMTI+PjJdLHRtX21vbjpJW2krMTY+PjJdLHRtX3llYXI6SVtpKzIwPj4yXSx0bV93ZGF5OklbaSsyND4+Ml0sdG1feWRheTpJW2krMjg+PjJdLHRtX2lzZHN0OklbaSszMj4+Ml0sdG1fZ210b2ZmOklbaSszNj4+Ml0sdG1fem9uZTpmP2coZik6IiJ9LHQ9ZyhyKSxvPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVIOiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIn07Zm9yKHZhciBhIGluIG8pdD10LnJlcGxhY2UobmV3IFJlZ0V4cChhLCJnIiksb1thXSk7dmFyIGM9WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGw9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdO2Z1bmN0aW9uIHUoQSxlLHIpe2Zvcih2YXIgaT0ibnVtYmVyIj09dHlwZW9mIEE/QS50b1N0cmluZygpOkF8fCIiO2kubGVuZ3RoPGU7KWk9clswXStpO3JldHVybiBpfWZ1bmN0aW9uIGIoQSxlKXtyZXR1cm4gdShBLGUsIjAiKX1mdW5jdGlvbiBzKEEsZSl7ZnVuY3Rpb24gcihBKXtyZXR1cm4gQTwwPy0xOjA8QT8xOjB9dmFyIGk7cmV0dXJuIDA9PT0oaT1yKEEuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKSYmMD09PShpPXIoQS5nZXRNb250aCgpLWUuZ2V0TW9udGgoKSkpJiYoaT1yKEEuZ2V0RGF0ZSgpLWUuZ2V0RGF0ZSgpKSksaX1mdW5jdGlvbiBkKEEpe3N3aXRjaChBLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKEEuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIEE7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKEEuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoQS5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShBLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIGsoQSl7dmFyIGU9Y3IobmV3IERhdGUoQS50bV95ZWFyKzE5MDAsMCwxKSxBLnRtX3lkYXkpLHI9bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsNCksaT1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkrMSwwLDQpLGY9ZChyKSxuPWQoaSk7cmV0dXJuIHMoZixlKTw9MD9zKG4sZSk8PTA/ZS5nZXRGdWxsWWVhcigpKzE6ZS5nZXRGdWxsWWVhcigpOmUuZ2V0RnVsbFllYXIoKS0xfXZhciBoPXsiJWEiOmZ1bmN0aW9uKEEpe3JldHVybiBjW0EudG1fd2RheV0uc3Vic3RyaW5nKDAsMyl9LCIlQSI6ZnVuY3Rpb24oQSl7cmV0dXJuIGNbQS50bV93ZGF5XX0sIiViIjpmdW5jdGlvbihBKXtyZXR1cm4gbFtBLnRtX21vbl0uc3Vic3RyaW5nKDAsMyl9LCIlQiI6ZnVuY3Rpb24oQSl7cmV0dXJuIGxbQS50bV9tb25dfSwiJUMiOmZ1bmN0aW9uKEEpe3JldHVybiBiKChBLnRtX3llYXIrMTkwMCkvMTAwfDAsMil9LCIlZCI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9tZGF5LDIpfSwiJWUiOmZ1bmN0aW9uKEEpe3JldHVybiB1KEEudG1fbWRheSwyLCIgIil9LCIlZyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGsoQSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlRyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGsoQSl9LCIlSCI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9ob3VyLDIpfSwiJUkiOmZ1bmN0aW9uKEEpe3ZhciBlPUEudG1faG91cjtyZXR1cm4gMD09ZT9lPTEyOjEyPGUmJihlLT0xMiksYihlLDIpfSwiJWoiOmZ1bmN0aW9uKEEpe3JldHVybiBiKEEudG1fbWRheSt0cihucihBLnRtX3llYXIrMTkwMCk/b3I6YXIsQS50bV9tb24tMSksMyl9LCIlbSI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9tb24rMSwyKX0sIiVNIjpmdW5jdGlvbihBKXtyZXR1cm4gYihBLnRtX21pbiwyKX0sIiVuIjpmdW5jdGlvbigpe3JldHVybiJcXG4ifSwiJXAiOmZ1bmN0aW9uKEEpe3JldHVybiAwPD1BLnRtX2hvdXImJkEudG1faG91cjwxMj8iQU0iOiJQTSJ9LCIlUyI6ZnVuY3Rpb24oQSl7cmV0dXJuIGIoQS50bV9zZWMsMil9LCIldCI6ZnVuY3Rpb24oKXtyZXR1cm4iXFx0In0sIiV1IjpmdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24rMSxBLnRtX21kYXksMCwwLDAsMCkuZ2V0RGF5KCl8fDd9LCIlVSI6ZnVuY3Rpb24oQSl7dmFyIGU9bmV3IERhdGUoQS50bV95ZWFyKzE5MDAsMCwxKSxyPTA9PT1lLmdldERheSgpP2U6Y3IoZSw3LWUuZ2V0RGF5KCkpLGk9bmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24sQS50bV9tZGF5KTtpZihzKHIsaSk8MCl7dmFyIGY9dHIobnIoaS5nZXRGdWxsWWVhcigpKT9vcjphcixpLmdldE1vbnRoKCktMSktMzEsbj0zMS1yLmdldERhdGUoKStmK2kuZ2V0RGF0ZSgpO3JldHVybiBiKE1hdGguY2VpbChuLzcpLDIpfXJldHVybiAwPT09cyhyLGUpPyIwMSI6IjAwIn0sIiVWIjpmdW5jdGlvbihBKXt2YXIgZSxyPW5ldyBEYXRlKEEudG1feWVhcisxOTAwLDAsNCksaT1uZXcgRGF0ZShBLnRtX3llYXIrMTkwMSwwLDQpLGY9ZChyKSxuPWQoaSksdD1jcihuZXcgRGF0ZShBLnRtX3llYXIrMTkwMCwwLDEpLEEudG1feWRheSk7cmV0dXJuIHModCxmKTwwPyI1MyI6cyhuLHQpPD0wPyIwMSI6KGU9Zi5nZXRGdWxsWWVhcigpPEEudG1feWVhcisxOTAwP0EudG1feWRheSszMi1mLmdldERhdGUoKTpBLnRtX3lkYXkrMS1mLmdldERhdGUoKSxiKE1hdGguY2VpbChlLzcpLDIpKX0sIiV3IjpmdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUoQS50bV95ZWFyKzE5MDAsQS50bV9tb24rMSxBLnRtX21kYXksMCwwLDAsMCkuZ2V0RGF5KCl9LCIlVyI6ZnVuY3Rpb24oQSl7dmFyIGU9bmV3IERhdGUoQS50bV95ZWFyLDAsMSkscj0xPT09ZS5nZXREYXkoKT9lOmNyKGUsMD09PWUuZ2V0RGF5KCk/MTo3LWUuZ2V0RGF5KCkrMSksaT1uZXcgRGF0ZShBLnRtX3llYXIrMTkwMCxBLnRtX21vbixBLnRtX21kYXkpO2lmKHMocixpKTwwKXt2YXIgZj10cihucihpLmdldEZ1bGxZZWFyKCkpP29yOmFyLGkuZ2V0TW9udGgoKS0xKS0zMSxuPTMxLXIuZ2V0RGF0ZSgpK2YraS5nZXREYXRlKCk7cmV0dXJuIGIoTWF0aC5jZWlsKG4vNyksMil9cmV0dXJuIDA9PT1zKHIsZSk/IjAxIjoiMDAifSwiJXkiOmZ1bmN0aW9uKEEpe3JldHVybihBLnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlWSI6ZnVuY3Rpb24oQSl7cmV0dXJuIEEudG1feWVhcisxOTAwfSwiJXoiOmZ1bmN0aW9uKEEpe3ZhciBlPUEudG1fZ210b2ZmLHI9MDw9ZTtyZXR1cm4gZT0oZT1NYXRoLmFicyhlKS82MCkvNjAqMTAwK2UlNjAsKHI/IisiOiItIikrU3RyaW5nKCIwMDAwIitlKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oQSl7cmV0dXJuIEEudG1fem9uZX0sIiUlIjpmdW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgYSBpbiBoKTA8PXQuaW5kZXhPZihhKSYmKHQ9dC5yZXBsYWNlKG5ldyBSZWdFeHAoYSwiZyIpLGhbYV0obikpKTt2YXIgdz1kcih0LCExKTtyZXR1cm4gdy5sZW5ndGg+ZT8wOihlQSh3LEEpLHcubGVuZ3RoLTEpfWlmKEVBLnN0YXRpY0luaXQoKSxMLnVuc2hpZnQoZnVuY3Rpb24oKXtkLm5vRlNJbml0fHxFQS5pbml0LmluaXRpYWxpemVkfHxFQS5pbml0KCl9KSxLLnB1c2goZnVuY3Rpb24oKXtFQS5pZ25vcmVQZXJtaXNzaW9ucz0hMX0pLHEucHVzaChmdW5jdGlvbigpe0VBLnF1aXQoKX0pLGQuRlNfY3JlYXRlRm9sZGVyPUVBLmNyZWF0ZUZvbGRlcixkLkZTX2NyZWF0ZVBhdGg9RUEuY3JlYXRlUGF0aCxkLkZTX2NyZWF0ZURhdGFGaWxlPUVBLmNyZWF0ZURhdGFGaWxlLGQuRlNfY3JlYXRlUHJlbG9hZGVkRmlsZT1FQS5jcmVhdGVQcmVsb2FkZWRGaWxlLGQuRlNfY3JlYXRlTGF6eUZpbGU9RUEuY3JlYXRlTGF6eUZpbGUsZC5GU19jcmVhdGVMaW5rPUVBLmNyZWF0ZUxpbmssZC5GU19jcmVhdGVEZXZpY2U9RUEuY3JlYXRlRGV2aWNlLGQuRlNfdW5saW5rPUVBLnVubGluayxMLnVuc2hpZnQoZnVuY3Rpb24oKXtnQS5pbml0KCl9KSxxLnB1c2goZnVuY3Rpb24oKXtnQS5zaHV0ZG93bigpfSksbyl7dmFyIHVyPXJlcXVpcmUoImZzIiksYnI9cmVxdWlyZSgicGF0aCIpO3lBLnN0YXRpY0luaXQoKX1KQT1kLkludGVybmFsRXJyb3I9REEoRXJyb3IsIkludGVybmFsRXJyb3IiKSxTQSgpLGpBPWQuQmluZGluZ0Vycm9yPURBKEVycm9yLCJCaW5kaW5nRXJyb3IiKSx0ZSgpLENlKCkseWUoKSxSZT1kLlVuYm91bmRUeXBlRXJyb3I9REEoRXJyb3IsIlVuYm91bmRUeXBlRXJyb3IiKSxUZSgpLGVyKHJyKSxEPWsuc3RhdGljQWxsb2MoNCksWT0oXz1rLmFsaWduTWVtb3J5KFIpKStqLFE9ay5hbGlnbk1lbW9yeShZKSxJW0Q+PjJdPVE7dmFyIHNyPSEoTj0hMCk7ZnVuY3Rpb24gZHIoQSxlLHIpe3ZhciBpPTA8cj9yOlooQSkrMSxmPW5ldyBBcnJheShpKSxuPWIoQSxmLDAsZi5sZW5ndGgpO3JldHVybiBlJiYoZi5sZW5ndGg9biksZn1mdW5jdGlvbiBrcihBKXtmb3IodmFyIGU9W10scj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgaT1BW3JdOzI1NTxpJiYoc3ImJmgoITEsIkNoYXJhY3RlciBjb2RlICIraSsiICgiK1N0cmluZy5mcm9tQ2hhckNvZGUoaSkrIikgIGF0IG9mZnNldCAiK3IrIiBub3QgaW4gMHgwMC0weEZGLiIpLGkmPTI1NSksZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpfXJldHVybiBlLmpvaW4oIiIpfXZhciBocj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLHdyPSJmdW5jdGlvbiI9PXR5cGVvZiBhdG9iP2F0b2I6ZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89IiIsYT0wO2ZvcihBPUEucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csIiIpO2U9aHIuaW5kZXhPZihBLmNoYXJBdChhKyspKTw8MnwoZj1oci5pbmRleE9mKEEuY2hhckF0KGErKykpKT4+NCxyPSgxNSZmKTw8NHwobj1oci5pbmRleE9mKEEuY2hhckF0KGErKykpKT4+MixpPSgzJm4pPDw2fCh0PWhyLmluZGV4T2YoQS5jaGFyQXQoYSsrKSkpLG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksNjQhPT1uJiYobys9U3RyaW5nLmZyb21DaGFyQ29kZShyKSksNjQhPT10JiYobys9U3RyaW5nLmZyb21DaGFyQ29kZShpKSksYTxBLmxlbmd0aDspO3JldHVybiBvfTtmdW5jdGlvbiB2cihBKXt2YXIgZT0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7aWYoU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoP0Euc3RhcnRzV2l0aChlKTowPT09QS5pbmRleE9mKGUpKXJldHVybiBmdW5jdGlvbihlKXtpZigiYm9vbGVhbiI9PXR5cGVvZiBvJiZvKXt2YXIgcjt0cnl7cj1CdWZmZXIuZnJvbShlLCJiYXNlNjQiKX1jYXRjaChBKXtyPW5ldyBCdWZmZXIoZSwiYmFzZTY0Iil9cmV0dXJuIG5ldyBVaW50OEFycmF5KHIuYnVmZmVyLHIuYnl0ZU9mZnNldCxyLmJ5dGVMZW5ndGgpfXRyeXtmb3IodmFyIEE9d3IoZSksaT1uZXcgVWludDhBcnJheShBLmxlbmd0aCksZj0wO2Y8QS5sZW5ndGg7KytmKWlbZl09QS5jaGFyQ29kZUF0KGYpO3JldHVybiBpfWNhdGNoKEEpe3Rocm93IG5ldyBFcnJvcigiQ29udmVydGluZyBiYXNlNjQgc3RyaW5nIHRvIGJ5dGVzIGZhaWxlZC4iKX19KEEuc2xpY2UoZS5sZW5ndGgpKX1kLmFzbUdsb2JhbEFyZz17TWF0aDpNYXRoLEludDhBcnJheTpJbnQ4QXJyYXksSW50MTZBcnJheTpJbnQxNkFycmF5LEludDMyQXJyYXk6SW50MzJBcnJheSxVaW50OEFycmF5OlVpbnQ4QXJyYXksVWludDE2QXJyYXk6VWludDE2QXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5LE5hTjpOYU4sSW5maW5pdHk6MS8wLGJ5dGVMZW5ndGg6Sn0sZC5hc21MaWJyYXJ5QXJnPXthYm9ydDpNcixhc3NlcnQ6aCxlbmxhcmdlTWVtb3J5OnosZ2V0VG90YWxNZW1vcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sYWJvcnRPbkNhbm5vdEdyb3dNZW1vcnk6ZnVuY3Rpb24oKXtNcigiQ2Fubm90IGVubGFyZ2UgbWVtb3J5IGFycmF5cy4gRWl0aGVyICgxKSBjb21waWxlIHdpdGggIC1zIFRPVEFMX01FTU9SWT1YICB3aXRoIFggaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgIitIKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSBidXQgcHJldmVudHMgc29tZSBvcHRpbWl6YXRpb25zLCAoMykgc2V0IE1vZHVsZS5UT1RBTF9NRU1PUlkgdG8gYSBoaWdoZXIgdmFsdWUgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMsIG9yICg0KSBpZiB5b3Ugd2FudCBtYWxsb2MgdG8gcmV0dXJuIE5VTEwgKDApIGluc3RlYWQgb2YgdGhpcyBhYm9ydCwgY29tcGlsZSB3aXRoICAtcyBBQk9SVElOR19NQUxMT0M9MCAiKX0saW52b2tlX2k6ZnVuY3Rpb24oQSl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaShBKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWk6ZnVuY3Rpb24oQSxlKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paShBLGUpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWk6ZnVuY3Rpb24oQSxlLHIpe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaShBLGUscil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWk6ZnVuY3Rpb24oQSxlLHIsaSl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaShBLGUscixpKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaShBLGUscixpLGYpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWlpaWQ6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaWlpZChBLGUscixpLGYsbil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaWlpKEEsZSxyLGksZixuKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbix0KXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaWlkKEEsZSxyLGksZixuLHQpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV9paWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3RyeXtyZXR1cm4gZC5keW5DYWxsX2lpaWlpaWkoQSxlLHIsaSxmLG4sdCl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX2lpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dHJ5e3JldHVybiBkLmR5bkNhbGxfaWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXt0cnl7cmV0dXJuIGQuZHluQ2FsbF9paWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92OmZ1bmN0aW9uKEEpe3RyeXtkLmR5bkNhbGxfdihBKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2Vfdmk6ZnVuY3Rpb24oQSxlKXt0cnl7ZC5keW5DYWxsX3ZpKEEsZSl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaTpmdW5jdGlvbihBLGUscil7dHJ5e2QuZHluQ2FsbF92aWkoQSxlLHIpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpOmZ1bmN0aW9uKEEsZSxyLGkpe3RyeXtkLmR5bkNhbGxfdmlpaShBLGUscixpKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXt0cnl7ZC5keW5DYWxsX3ZpaWlpKEEsZSxyLGksZil9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7dHJ5e2QuZHluQ2FsbF92aWlpaWkoQSxlLHIsaSxmLG4pfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaShBLGUscixpLGYsbix0KX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXt0cnl7ZC5keW5DYWxsX3ZpaWlpaWlpKEEsZSxyLGksZixuLHQsbyl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSl7dHJ5e2QuZHluQ2FsbF92aWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaWlpaShBLGUscixpLGYsbix0LG8sYSxjKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXt0cnl7ZC5keW5DYWxsX3ZpaWlpaWlpaWlpKEEsZSxyLGksZixuLHQsbyxhLGMsbCl9Y2F0Y2goQSl7aWYoIm51bWJlciIhPXR5cGVvZiBBJiYibG9uZ2ptcCIhPT1BKXRocm93IEE7ZC5zZXRUaHJldygxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYil7dHJ5e2QuZHluQ2FsbF92aWlpaWlpaWlpaWlpKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpfWNhdGNoKEEpe2lmKCJudW1iZXIiIT10eXBlb2YgQSYmImxvbmdqbXAiIT09QSl0aHJvdyBBO2Quc2V0VGhyZXcoMSwwKX19LGludm9rZV92aWlpaWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMpe3RyeXtkLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzKX1jYXRjaChBKXtpZigibnVtYmVyIiE9dHlwZW9mIEEmJiJsb25nam1wIiE9PUEpdGhyb3cgQTtkLnNldFRocmV3KDEsMCl9fSxDbGFzc0hhbmRsZTpvZSxDbGFzc0hhbmRsZV9jbG9uZTpxQSxDbGFzc0hhbmRsZV9kZWxldGU6QWUsQ2xhc3NIYW5kbGVfZGVsZXRlTGF0ZXI6bmUsQ2xhc3NIYW5kbGVfaXNBbGlhc09mOlBBLENsYXNzSGFuZGxlX2lzRGVsZXRlZDplZSxSZWdpc3RlcmVkQ2xhc3M6dWUsUmVnaXN0ZXJlZFBvaW50ZXI6R2UsUmVnaXN0ZXJlZFBvaW50ZXJfZGVsZXRlT2JqZWN0OnZlLFJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3I6d2UsUmVnaXN0ZXJlZFBvaW50ZXJfZnJvbVdpcmVUeXBlOkllLFJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWU6aGUsX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnY6ZEEsX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24oQSxlLHIsaSl7dGhyb3cgbj0hMCwiQXNzZXJ0aW9uIGZhaWxlZDogIitnKEEpKyIsIGF0OiAiK1tlP2coZSk6InVua25vd24gZmlsZW5hbWUiLHIsaT9nKGkpOiJ1bmtub3duIGZ1bmN0aW9uIl0rIiBhdCAiK3AoKX0sX19fYnVpbGRFbnZpcm9ubWVudDplcixfX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uOmZ1bmN0aW9uKEEpe3JldHVybiBHcihBKX0sX19fY3hhX2JlZ2luX2NhdGNoOmZ1bmN0aW9uKEEpe3ZhciBlPWtBLmluZm9zW0FdO3JldHVybiBlJiYhZS5jYXVnaHQmJihlLmNhdWdodD0hMCxkQS51bmNhdWdodF9leGNlcHRpb24tLSksZSYmKGUucmV0aHJvd249ITEpLGtBLmNhdWdodC5wdXNoKEEpLGtBLmFkZFJlZihrQS5kZUFkanVzdChBKSksQX0sX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2g6ZnVuY3Rpb24gQSgpe3ZhciBlPWtBLmxhc3Q7aWYoIWUpcmV0dXJuIDB8KGsuc2V0VGVtcFJldDAoMCksMCk7dmFyIHI9a0EuaW5mb3NbZV0saT1yLnR5cGU7aWYoIWkpcmV0dXJuIDB8KGsuc2V0VGVtcFJldDAoMCksZSk7dmFyIGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtkLl9fX2N4YV9pc19wb2ludGVyX3R5cGUoaSk7QS5idWZmZXJ8fChBLmJ1ZmZlcj1Hcig0KSksSVtBLmJ1ZmZlcj4+Ml09ZSxlPUEuYnVmZmVyO2Zvcih2YXIgbj0wO248Zi5sZW5ndGg7bisrKWlmKGZbbl0mJmQuX19fY3hhX2Nhbl9jYXRjaChmW25dLGksZSkpcmV0dXJuIGU9SVtlPj4yXSxyLmFkanVzdGVkPWUsMHwoay5zZXRUZW1wUmV0MChmW25dKSxlKTtyZXR1cm4gZT1JW2U+PjJdLDB8KGsuc2V0VGVtcFJldDAoaSksZSl9LF9fX2N4YV9wdXJlX3ZpcnR1YWw6ZnVuY3Rpb24oKXt0aHJvdyBuPSEwLCJQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkISJ9LF9fX2N4YV90aHJvdzpmdW5jdGlvbihBLGUscil7dGhyb3cga0EuaW5mb3NbQV09e3B0cjpBLGFkanVzdGVkOkEsdHlwZTplLGRlc3RydWN0b3I6cixyZWZjb3VudDowLGNhdWdodDohMSxyZXRocm93bjohMX0sa0EubGFzdD1BLCJ1bmNhdWdodF9leGNlcHRpb24iaW4gZEE/ZEEudW5jYXVnaHRfZXhjZXB0aW9uKys6ZEEudW5jYXVnaHRfZXhjZXB0aW9uPTEsQSsiIC0gRXhjZXB0aW9uIGNhdGNoaW5nIGlzIGRpc2FibGVkLCB0aGlzIGV4Y2VwdGlvbiBjYW5ub3QgYmUgY2F1Z2h0LiBDb21waWxlIHdpdGggLXMgRElTQUJMRV9FWENFUFRJT05fQ0FUQ0hJTkc9MCBvciBESVNBQkxFX0VYQ0VQVElPTl9DQVRDSElORz0yIHRvIGNhdGNoLiJ9LF9fX2d4eF9wZXJzb25hbGl0eV92MDpmdW5jdGlvbigpe30sX19fbG9jazpmdW5jdGlvbigpe30sX19fbWFwX2ZpbGU6ZnVuY3Rpb24oQSxlKXtyZXR1cm4gd0EoaEEuRVBFUk0pLC0xfSxfX19yZXN1bWVFeGNlcHRpb246ZnVuY3Rpb24oQSl7dGhyb3cga0EubGFzdHx8KGtBLmxhc3Q9QSksQSsiIC0gRXhjZXB0aW9uIGNhdGNoaW5nIGlzIGRpc2FibGVkLCB0aGlzIGV4Y2VwdGlvbiBjYW5ub3QgYmUgY2F1Z2h0LiBDb21waWxlIHdpdGggLXMgRElTQUJMRV9FWENFUFRJT05fQ0FUQ0hJTkc9MCBvciBESVNBQkxFX0VYQ0VQVElPTl9DQVRDSElORz0yIHRvIGNhdGNoLiJ9LF9fX3NldEVyck5vOndBLF9fX3N5c2NhbGwxNDA6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpLGk9KFhBLmdldCgpLFhBLmdldCgpKSxmPVhBLmdldCgpLG49WEEuZ2V0KCksdD1pO3JldHVybiBFQS5sbHNlZWsocix0LG4pLElbZj4+Ml09ci5wb3NpdGlvbixyLmdldGRlbnRzJiYwPT09dCYmMD09PW4mJihyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goQSl7cmV0dXJuIHZvaWQgMCE9PUVBJiZBIGluc3RhbmNlb2YgRUEuRXJybm9FcnJvcnx8TXIoQSksLUEuZXJybm99fSxfX19zeXNjYWxsMTQ1OmZ1bmN0aW9uKEEsZSl7WEEudmFyYXJncz1lO3RyeXt2YXIgcj1YQS5nZXRTdHJlYW1Gcm9tRkQoKSxpPVhBLmdldCgpLGY9WEEuZ2V0KCk7cmV0dXJuIFhBLmRvUmVhZHYocixpLGYpfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDE0NjpmdW5jdGlvbihBLGUpe1hBLnZhcmFyZ3M9ZTt0cnl7dmFyIHI9WEEuZ2V0U3RyZWFtRnJvbUZEKCksaT1YQS5nZXQoKSxmPVhBLmdldCgpO3JldHVybiBYQS5kb1dyaXRldihyLGksZil9Y2F0Y2goQSl7cmV0dXJuIHZvaWQgMCE9PUVBJiZBIGluc3RhbmNlb2YgRUEuRXJybm9FcnJvcnx8TXIoQSksLUEuZXJybm99fSxfX19zeXNjYWxsNTQ6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpLGk9WEEuZ2V0KCk7c3dpdGNoKGkpe2Nhc2UgMjE1MDU6Y2FzZSAyMTUwNjpyZXR1cm4gci50dHk/MDotaEEuRU5PVFRZO2Nhc2UgMjE1MTk6aWYoIXIudHR5KXJldHVybi1oQS5FTk9UVFk7dmFyIGY9WEEuZ2V0KCk7cmV0dXJuIElbZj4+Ml09MDtjYXNlIDIxNTIwOnJldHVybiByLnR0eT8taEEuRUlOVkFMOi1oQS5FTk9UVFk7Y2FzZSAyMTUzMTpmPVhBLmdldCgpO3JldHVybiBFQS5pb2N0bChyLGksZik7Y2FzZSAyMTUyMzpyZXR1cm4gci50dHk/MDotaEEuRU5PVFRZO2RlZmF1bHQ6TXIoImJhZCBpb2N0bCBzeXNjYWxsICIraSl9fWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDY6ZnVuY3Rpb24oQSxlKXtYQS52YXJhcmdzPWU7dHJ5e3ZhciByPVhBLmdldFN0cmVhbUZyb21GRCgpO3JldHVybiBFQS5jbG9zZShyKSwwfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fc3lzY2FsbDkxOmZ1bmN0aW9uKEEsZSl7WEEudmFyYXJncz1lO3RyeXt2YXIgcj1YQS5nZXQoKSxpPVhBLmdldCgpLGY9WEEubWFwcGluZ3Nbcl07aWYoIWYpcmV0dXJuIDA7aWYoaT09PWYubGVuKXt2YXIgbj1FQS5nZXRTdHJlYW0oZi5mZCk7WEEuZG9Nc3luYyhyLG4saSxmLmZsYWdzKSxFQS5tdW5tYXAobiksWEEubWFwcGluZ3Nbcl09bnVsbCxmLmFsbG9jYXRlZCYmQ3IoZi5tYWxsb2MpfXJldHVybiAwfWNhdGNoKEEpe3JldHVybiB2b2lkIDAhPT1FQSYmQSBpbnN0YW5jZW9mIEVBLkVycm5vRXJyb3J8fE1yKEEpLC1BLmVycm5vfX0sX19fdW5sb2NrOmZ1bmN0aW9uKCl7fSxfX2FkZERheXM6Y3IsX19hcnJheVN1bTp0cixfX2VtYmluZF9maW5hbGl6ZV92YWx1ZV9vYmplY3Q6ZnVuY3Rpb24oQSl7dmFyIGU9SUFbQV07ZGVsZXRlIElBW0FdO3ZhciBmPWUucmF3Q29uc3RydWN0b3Isbj1lLnJhd0Rlc3RydWN0b3IsdT1lLmZpZWxkcztUQShbQV0sdS5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIEEuZ2V0dGVyUmV0dXJuVHlwZX0pLmNvbmNhdCh1Lm1hcChmdW5jdGlvbihBKXtyZXR1cm4gQS5zZXR0ZXJBcmd1bWVudFR5cGV9KSksZnVuY3Rpb24oYyl7dmFyIGw9e307cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihBLGUpe3ZhciByPUEuZmllbGROYW1lLGk9Y1tlXSxmPUEuZ2V0dGVyLG49QS5nZXR0ZXJDb250ZXh0LHQ9Y1tlK3UubGVuZ3RoXSxvPUEuc2V0dGVyLGE9QS5zZXR0ZXJDb250ZXh0O2xbcl09e3JlYWQ6ZnVuY3Rpb24oQSl7cmV0dXJuIGkuZnJvbVdpcmVUeXBlKGYobixBKSl9LHdyaXRlOmZ1bmN0aW9uKEEsZSl7dmFyIHI9W107byhhLEEsdC50b1dpcmVUeXBlKHIsZSkpLENBKHIpfX19KSxbe25hbWU6ZS5uYW1lLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gbCllW3JdPWxbcl0ucmVhZChBKTtyZXR1cm4gbihBKSxlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7Zm9yKHZhciByIGluIGwpaWYoIShyIGluIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIk1pc3NpbmcgZmllbGQiKTt2YXIgaT1mKCk7Zm9yKHIgaW4gbClsW3JdLndyaXRlKGksZVtyXSk7cmV0dXJuIG51bGwhPT1BJiZBLnB1c2gobixpKSxpfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkdBLGRlc3RydWN0b3JGdW5jdGlvbjpufV19KX0sX19lbWJpbmRfcmVnaXN0ZXJfYm9vbDpmdW5jdGlvbihBLHIsaSxmLG4pe3ZhciB0PVVBKGkpO3hBKEEse25hbWU6cj16QShyKSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oQSl7cmV0dXJuISFBfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGU/ZjpufSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKEEpe3ZhciBlO2lmKDE9PT1pKWU9QjtlbHNlIGlmKDI9PT1pKWU9WDtlbHNle2lmKDQhPT1pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIrcik7ZT1JfXJldHVybiB0aGlzLmZyb21XaXJlVHlwZShlW0E+PnRdKX0sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sX19lbWJpbmRfcmVnaXN0ZXJfY2xhc3M6ZnVuY3Rpb24oYyxBLGUsbCxyLHUsaSxiLGYscyxkLG4sayl7ZD16QShkKSx1PUZlKHIsdSksYj1iJiZGZShpLGIpLHM9cyYmRmUoZixzKSxrPUZlKG4sayk7dmFyIGg9WUEoZCk7bGUoaCxmdW5jdGlvbigpe19lKCJDYW5ub3QgY29uc3RydWN0ICIrZCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIixbbF0pfSksVEEoW2MsQSxlXSxsP1tsXTpbXSxmdW5jdGlvbihBKXt2YXIgZSxyO0E9QVswXSxyPWw/KGU9QS5yZWdpc3RlcmVkQ2xhc3MpLmluc3RhbmNlUHJvdG90eXBlOm9lLnByb3RvdHlwZTt2YXIgaT1RQShoLGZ1bmN0aW9uKCl7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09Zil0aHJvdyBuZXcgakEoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIitkKTtpZih2b2lkIDA9PT1uLmNvbnN0cnVjdG9yX2JvZHkpdGhyb3cgbmV3IGpBKGQrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciBBPW4uY29uc3RydWN0b3JfYm9keVthcmd1bWVudHMubGVuZ3RoXTtpZih2b2lkIDA9PT1BKXRocm93IG5ldyBqQSgiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIitkKyIgd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RlZCAoIitPYmplY3Qua2V5cyhuLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCkrIikgcGFyYW1ldGVycyBpbnN0ZWFkISIpO3JldHVybiBBLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGY9T2JqZWN0LmNyZWF0ZShyLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6aX19KTtpLnByb3RvdHlwZT1mO3ZhciBuPW5ldyB1ZShkLGksZixrLGUsdSxiLHMpLHQ9bmV3IEdlKGQsbiwhMCwhMSwhMSksbz1uZXcgR2UoZCsiKiIsbiwhMSwhMSwhMSksYT1uZXcgR2UoZCsiIGNvbnN0KiIsbiwhMSwhMCwhMSk7cmV0dXJuIGFlW2NdPXtwb2ludGVyVHlwZTpvLGNvbnN0UG9pbnRlclR5cGU6YX0sVmUoaCxpKSxbdCxvLGFdfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX2VtdmFsOmZ1bmN0aW9uKEEsZSl7eEEoQSx7bmFtZTplPXpBKGUpLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXt2YXIgZT1RZVtBXS52YWx1ZTtyZXR1cm4gRGUoQSksZX0sdG9XaXJlVHlwZTpmdW5jdGlvbihBLGUpe3JldHVybiBVZShlKX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpHQSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxfX2VtYmluZF9yZWdpc3Rlcl9lbnVtOmZ1bmN0aW9uKEEsZSxyLGkpe3ZhciBmPVVBKHIpO2Z1bmN0aW9uIG4oKXt9ZT16QShlKSxuLnZhbHVlcz17fSx4QShBLHtuYW1lOmUsY29uc3RydWN0b3I6bixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudmFsdWVzW0FdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIGUudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6U2UoZSxmLGkpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSksbGUoZSxuKX0sX19lbWJpbmRfcmVnaXN0ZXJfZW51bV92YWx1ZTpmdW5jdGlvbihBLGUscil7dmFyIGk9T2UoQSwiZW51bSIpO2U9ekEoZSk7dmFyIGY9aS5jb25zdHJ1Y3RvcixuPU9iamVjdC5jcmVhdGUoaS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpyfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6UUEoaS5uYW1lKyJfIitlLGZ1bmN0aW9uKCl7fSl9fSk7Zi52YWx1ZXNbcl09bixmW2VdPW59LF9fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0OmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT1VQShyKTt4QShBLHtuYW1lOmU9ekEoZSksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEEpe3JldHVybiBBfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEEsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiYm9vbGVhbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3plKGUpKyciIHRvICcrdGhpcy5uYW1lKTtyZXR1cm4gZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpqZShlLGkpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uOmZ1bmN0aW9uKHIsaSxBLGUsZixuKXt2YXIgdD1QZShpLEEpO3I9ekEociksZj1GZShlLGYpLGxlKHIsZnVuY3Rpb24oKXtfZSgiQ2Fubm90IGNhbGwgIityKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLHQpfSxpLTEpLFRBKFtdLHQsZnVuY3Rpb24oQSl7dmFyIGU9W0FbMF0sbnVsbF0uY29uY2F0KEEuc2xpY2UoMSkpO3JldHVybiBWZShyLHhlKHIsZSxudWxsLGYsbiksaS0xKSxbXX0pfSxfX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyOmZ1bmN0aW9uKEEscixlLGksZil7cj16QShyKSwtMT09PWYmJihmPTQyOTQ5NjcyOTUpO3ZhciBuPVVBKGUpLHQ9ZnVuY3Rpb24oQSl7cmV0dXJuIEF9O2lmKDA9PT1pKXt2YXIgbz0zMi04KmU7dD1mdW5jdGlvbihBKXtyZXR1cm4gQTw8bz4+Pm99fXZhciBhPS0xIT1yLmluZGV4T2YoInVuc2lnbmVkIik7eEEoQSx7bmFtZTpyLGZyb21XaXJlVHlwZTp0LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJib29sZWFuIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicremUoZSkrJyIgdG8gJyt0aGlzLm5hbWUpO2lmKGU8aXx8ZjxlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Bhc3NpbmcgYSBudW1iZXIgIicremUoZSkrJyIgZnJvbSBKUyBzaWRlIHRvIEMvQysrIHNpZGUgdG8gYW4gYXJndW1lbnQgb2YgdHlwZSAiJytyKyciLCB3aGljaCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZSBbJytpKyIsICIrZisiXSEiKTtyZXR1cm4gYT9lPj4+MDowfGV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6TGUocixuLDAhPT1pKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxfX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldzpmdW5jdGlvbihBLGUscil7dmFyIGk9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XVtlXTtmdW5jdGlvbiBmKEEpe3ZhciBlPUNbQT4+PTJdLHI9Q1tBKzFdO3JldHVybiBuZXcgaShDLmJ1ZmZlcixyLGUpfXhBKEEse25hbWU6cj16QShyKSxmcm9tV2lyZVR5cGU6ZixhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LF9fZW1iaW5kX3JlZ2lzdGVyX3N0ZF9zdHJpbmc6ZnVuY3Rpb24oQSxlKXt4QShBLHtuYW1lOmU9ekEoZSksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEEpe2Zvcih2YXIgZT1DW0E+PjJdLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09U3RyaW5nLmZyb21DaGFyQ29kZShFW0ErNCtpXSk7cmV0dXJuIENyKEEpLHIuam9pbigiIil9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXtmdW5jdGlvbiByKEEsZSl7cmV0dXJuIEFbZV19dmFyIGk7ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYoZT1uZXcgVWludDhBcnJheShlKSksZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ZSBpbnN0YW5jZW9mIEludDhBcnJheT9pPXI6InN0cmluZyI9PXR5cGVvZiBlP2k9ZnVuY3Rpb24oQSxlKXtyZXR1cm4gQS5jaGFyQ29kZUF0KGUpfTpIQSgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpO3ZhciBmPWUubGVuZ3RoLG49R3IoNCtmKTtDW24+PjJdPWY7Zm9yKHZhciB0PTA7dDxmOysrdCl7dmFyIG89aShlLHQpOzI1NTxvJiYoQ3IobiksSEEoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSxFW24rNCt0XT1vfXJldHVybiBudWxsIT09QSYmQS5wdXNoKENyLG4pLG59LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6R0EsZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKEEpe0NyKEEpfX0pfSxfX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZzpmdW5jdGlvbihBLG8sZSl7dmFyIGEsYztlPXpBKGUpLDI9PT1vPyhhPWZ1bmN0aW9uKCl7cmV0dXJuIFd9LGM9MSk6ND09PW8mJihhPWZ1bmN0aW9uKCl7cmV0dXJuIEN9LGM9MikseEEoQSx7bmFtZTplLGZyb21XaXJlVHlwZTpmdW5jdGlvbihBKXtmb3IodmFyIGU9YSgpLHI9Q1tBPj4yXSxpPW5ldyBBcnJheShyKSxmPUErND4+YyxuPTA7bjxyOysrbilpW25dPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtmK25dKTtyZXR1cm4gQ3IoQSksaS5qb2luKCIiKX0sdG9XaXJlVHlwZTpmdW5jdGlvbihBLGUpe3ZhciByPWEoKSxpPWUubGVuZ3RoLGY9R3IoNCtpKm8pO0NbZj4+Ml09aTtmb3IodmFyIG49Zis0Pj5jLHQ9MDt0PGk7Kyt0KXJbbit0XT1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIG51bGwhPT1BJiZBLnB1c2goQ3IsZiksZn0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpHQSxkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oQSl7Q3IoQSl9fSl9LF9fZW1iaW5kX3JlZ2lzdGVyX3ZhbHVlX29iamVjdDpmdW5jdGlvbihBLGUscixpLGYsbil7SUFbQV09e25hbWU6ekEoZSkscmF3Q29uc3RydWN0b3I6RmUocixpKSxyYXdEZXN0cnVjdG9yOkZlKGYsbiksZmllbGRzOltdfX0sX19lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0X2ZpZWxkOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe0lBW0FdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6ekEoZSksZ2V0dGVyUmV0dXJuVHlwZTpyLGdldHRlcjpGZShpLGYpLGdldHRlckNvbnRleHQ6bixzZXR0ZXJBcmd1bWVudFR5cGU6dCxzZXR0ZXI6RmUobyxhKSxzZXR0ZXJDb250ZXh0OmN9KX0sX19lbWJpbmRfcmVnaXN0ZXJfdm9pZDpmdW5jdGlvbihBLGUpe3hBKEEse2lzVm9pZDohMCxuYW1lOmU9ekEoZSksYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oQSxlKXt9fSl9LF9fZW12YWxfZGVjcmVmOkRlLF9fZW12YWxfaW5jcmVmOmZ1bmN0aW9uKEEpezQ8QSYmKFFlW0FdLnJlZmNvdW50Kz0xKX0sX19lbXZhbF9uZXdfYXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gVWUoW10pfSxfX2VtdmFsX25ld19jc3RyaW5nOmZ1bmN0aW9uKEEpe3JldHVybiBVZShxZShBKSl9LF9fZW12YWxfbmV3X29iamVjdDpmdW5jdGlvbigpe3JldHVybiBVZSh7fSl9LF9fZW12YWxfcmVnaXN0ZXI6VWUsX19lbXZhbF9zZXRfcHJvcGVydHk6ZnVuY3Rpb24oQSxlLHIpe0E9JGUoQSksZT0kZShlKSxyPSRlKHIpLEFbZV09cn0sX19lbXZhbF90YWtlX3ZhbHVlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIFVlKChBPU9lKEEsIl9lbXZhbF90YWtlX3ZhbHVlIikpLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGUpKX0sX19pc0xlYXBZZWFyOm5yLF9hYm9ydDpmdW5jdGlvbigpe2QuYWJvcnQoKX0sX2VtYmluZF9yZXByOnplLF9lbXNjcmlwdGVuX21lbWNweV9iaWc6ZnVuY3Rpb24oQSxlLHIpe3JldHVybiBFLnNldChFLnN1YmFycmF5KGUsZStyKSxBKSxBfSxfZ2V0ZW52OmZ1bmN0aW9uIEEoZSl7cmV0dXJuIDA9PT1lPzA6KGU9ZyhlKSxyci5oYXNPd25Qcm9wZXJ0eShlKT8oQS5yZXQmJkNyKEEucmV0KSxBLnJldD1hKGRyKHJyW2VdKSwiaTgiLHQpKTowKX0sX3B0aHJlYWRfY29uZF9kZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LF9wdGhyZWFkX2NvbmRfaW5pdDpmdW5jdGlvbigpe3JldHVybiAwfSxfcHRocmVhZF9jb25kX3NpZ25hbDpmdW5jdGlvbigpe3JldHVybiAwfSxfcHRocmVhZF9jb25kX3dhaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sX3B0aHJlYWRfZ2V0c3BlY2lmaWM6ZnVuY3Rpb24oQSl7cmV0dXJuIGlyW0FdfHwwfSxfcHRocmVhZF9qb2luOmZ1bmN0aW9uKCl7fSxfcHRocmVhZF9rZXlfY3JlYXRlOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIDA9PUE/aEEuRUlOVkFMOihJW0E+PjJdPWZyLGlyW2ZyXT0wLGZyKyssMCl9LF9wdGhyZWFkX211dGV4X2Rlc3Ryb3k6ZnVuY3Rpb24oKXt9LF9wdGhyZWFkX211dGV4X2luaXQ6ZnVuY3Rpb24oKXt9LF9wdGhyZWFkX29uY2U6ZnVuY3Rpb24gQShlLHIpe0Euc2Vlbnx8KEEuc2Vlbj17fSksZSBpbiBBLnNlZW58fChkLmR5bkNhbGxfdihyKSxBLnNlZW5bZV09MSl9LF9wdGhyZWFkX3NldHNwZWNpZmljOmZ1bmN0aW9uKEEsZSl7cmV0dXJuIEEgaW4gaXI/KGlyW0FdPWUsMCk6aEEuRUlOVkFMfSxfc3RyZnRpbWU6bHIsX3N0cmZ0aW1lX2w6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIGxyKEEsZSxyLGkpfSxjb25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZTpzZSxjb3VudF9lbXZhbF9oYW5kbGVzOkplLGNyYWZ0SW52b2tlckZ1bmN0aW9uOnhlLGNyZWF0ZU5hbWVkRnVuY3Rpb246UUEsZG93bmNhc3RQb2ludGVyOm1lLGVtYmluZF9pbml0X2NoYXJDb2RlczpTQSxlbnN1cmVPdmVybG9hZFRhYmxlOmNlLGVudW1SZWFkVmFsdWVGcm9tUG9pbnRlcjpTZSxleHBvc2VQdWJsaWNTeW1ib2w6bGUsZXh0ZW5kRXJyb3I6REEsZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcjpqZSxmbHVzaFBlbmRpbmdEZWxldGVzOmZlLGdlbmVyaWNQb2ludGVyVG9XaXJlVHlwZTpkZSxnZXRCYXNlc3RQb2ludGVyOkVlLGdldEluaGVyaXRlZEluc3RhbmNlOlhlLGdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ6Z2UsZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlczpaZSxnZXRTaGlmdEZyb21TaXplOlVBLGdldFN0cmluZ09yU3ltYm9sOnFlLGdldFR5cGVOYW1lOk5lLGdldF9maXJzdF9lbXZhbDpNZSxoZWFwMzJWZWN0b3JUb0FycmF5OlBlLGluaXRfQ2xhc3NIYW5kbGU6dGUsaW5pdF9SZWdpc3RlcmVkUG9pbnRlcjpDZSxpbml0X2VtYmluZDp5ZSxpbml0X2VtdmFsOlRlLGludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlcjpMZSxtYWtlQ2xhc3NIYW5kbGU6V2UsbWFrZUxlZ2FsRnVuY3Rpb25OYW1lOllBLG5ld186SGUsbm9uQ29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGU6a2UscmVhZExhdGluMVN0cmluZzp6QSxyZWdpc3RlclR5cGU6eEEscmVwbGFjZVB1YmxpY1N5bWJvbDpWZSxyZXF1aXJlRnVuY3Rpb246RmUscmVxdWlyZUhhbmRsZTokZSxyZXF1aXJlUmVnaXN0ZXJlZFR5cGU6T2UscnVuRGVzdHJ1Y3RvcjokQSxydW5EZXN0cnVjdG9yczpDQSxzZXREZWxheUZ1bmN0aW9uOnBlLHNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyOkxBLHNpbXBsZVJlYWRWYWx1ZUZyb21Qb2ludGVyOkdBLHRocm93QmluZGluZ0Vycm9yOkhBLHRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZDpLQSx0aHJvd0ludGVybmFsRXJyb3I6TUEsdGhyb3dVbmJvdW5kVHlwZUVycm9yOl9lLHVwY2FzdFBvaW50ZXI6YmUsd2hlbkRlcGVuZGVudFR5cGVzQXJlUmVzb2x2ZWQ6VEEsRFlOQU1JQ1RPUF9QVFI6RCx0ZW1wRG91YmxlUHRyOnNBLEFCT1JUOm4sU1RBQ0tUT1A6XyxTVEFDS19NQVg6WSxjdHR6X2k4OldBfTt2YXIgbXIsZ3I9ZnVuY3Rpb24oQSxlLHIpe3ZhciBpPUEuSW50OEFycmF5LHRyPW5ldyBpKHIpLGY9QS5JbnQxNkFycmF5LG9yPW5ldyBmKHIpLG49QS5JbnQzMkFycmF5LGFyPW5ldyBuKHIpLHQ9QS5VaW50OEFycmF5LGNyPW5ldyB0KHIpLG89QS5VaW50MTZBcnJheSxscj1uZXcgbyhyKSxhPUEuVWludDMyQXJyYXksYz0obmV3IGEociksQS5GbG9hdDMyQXJyYXkpLGdBPW5ldyBjKHIpLGw9QS5GbG9hdDY0QXJyYXksUT1uZXcgbChyKSx1PUEuYnl0ZUxlbmd0aCxiPTB8ZS5EWU5BTUlDVE9QX1BUUixkPTB8ZS50ZW1wRG91YmxlUHRyLHVyPShlLkFCT1JULDB8ZS5TVEFDS1RPUCkscz0oZS5TVEFDS19NQVgsMHxlLmN0dHpfaTgpLGs9MCxoPUEuTmFOLHc9QS5JbmZpbml0eSxEPTAsdj1BLk1hdGguZmxvb3IsVj1BLk1hdGguYWJzLG09KEEuTWF0aC5zcXJ0LEEuTWF0aC5wb3csQS5NYXRoLmNvcyxBLk1hdGguc2luLEEuTWF0aC50YW4sQS5NYXRoLmFjb3MsQS5NYXRoLmFzaW4sQS5NYXRoLmF0YW4sQS5NYXRoLmF0YW4yLEEuTWF0aC5leHAsQS5NYXRoLmxvZyxBLk1hdGguY2VpbCksYnI9QS5NYXRoLmltdWwsZz0oQS5NYXRoLm1pbixBLk1hdGgubWF4LEEuTWF0aC5jbHozMiksWj1lLmFib3J0LHA9KGUuYXNzZXJ0LGUuZW5sYXJnZU1lbW9yeSkseT1lLmdldFRvdGFsTWVtb3J5LEI9ZS5hYm9ydE9uQ2Fubm90R3Jvd01lbW9yeSxFPShlLmludm9rZV9pLGUuaW52b2tlX2lpLGUuaW52b2tlX2lpaSxlLmludm9rZV9paWlpLGUuaW52b2tlX2lpaWlpLGUuaW52b2tlX2lpaWlpZCxlLmludm9rZV9paWlpaWksZS5pbnZva2VfaWlpaWlpZCxlLmludm9rZV9paWlpaWlpLGUuaW52b2tlX2lpaWlpaWlpLGUuaW52b2tlX2lpaWlpaWlpaSxlLmludm9rZV92LGUuaW52b2tlX3ZpLGUuaW52b2tlX3ZpaSxlLmludm9rZV92aWlpLGUuaW52b2tlX3ZpaWlpLGUuaW52b2tlX3ZpaWlpaSxlLmludm9rZV92aWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaSxlLmludm9rZV92aWlpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaWlpLGUuaW52b2tlX3ZpaWlpaWlpaWlpaWksZS5pbnZva2VfdmlpaWlpaWlpaWlpaWksZS5DbGFzc0hhbmRsZSxlLkNsYXNzSGFuZGxlX2Nsb25lLGUuQ2xhc3NIYW5kbGVfZGVsZXRlLGUuQ2xhc3NIYW5kbGVfZGVsZXRlTGF0ZXIsZS5DbGFzc0hhbmRsZV9pc0FsaWFzT2YsZS5DbGFzc0hhbmRsZV9pc0RlbGV0ZWQsZS5SZWdpc3RlcmVkQ2xhc3MsZS5SZWdpc3RlcmVkUG9pbnRlcixlLlJlZ2lzdGVyZWRQb2ludGVyX2RlbGV0ZU9iamVjdCxlLlJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3IsZS5SZWdpc3RlcmVkUG9pbnRlcl9mcm9tV2lyZVR5cGUsZS5SZWdpc3RlcmVkUG9pbnRlcl9nZXRQb2ludGVlLGUuX19aU3QxOHVuY2F1Z2h0X2V4Y2VwdGlvbnYpLHNyPWUuX19fYXNzZXJ0X2ZhaWwsWD0oZS5fX19idWlsZEVudmlyb25tZW50LGUuX19fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbiksVz0oZS5fX19jeGFfYmVnaW5fY2F0Y2gsZS5fX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaCxlLl9fX2N4YV9wdXJlX3ZpcnR1YWwpLEk9ZS5fX19jeGFfdGhyb3csQz0oZS5fX19neHhfcGVyc29uYWxpdHlfdjAsZS5fX19sb2NrKSxHPWUuX19fbWFwX2ZpbGUsRj0oZS5fX19yZXN1bWVFeGNlcHRpb24sZS5fX19zZXRFcnJObyksUj1lLl9fX3N5c2NhbGwxNDAsTj1lLl9fX3N5c2NhbGwxNDUsXz1lLl9fX3N5c2NhbGwxNDYsWT1lLl9fX3N5c2NhbGw1NCxKPWUuX19fc3lzY2FsbDYsTT1lLl9fX3N5c2NhbGw5MSxUPWUuX19fdW5sb2NrLFU9KGUuX19hZGREYXlzLGUuX19hcnJheVN1bSxlLl9fZW1iaW5kX2ZpbmFsaXplX3ZhbHVlX29iamVjdCksUz1lLl9fZW1iaW5kX3JlZ2lzdGVyX2Jvb2wsTz1lLl9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzLHo9ZS5fX2VtYmluZF9yZWdpc3Rlcl9lbXZhbCxqPWUuX19lbWJpbmRfcmVnaXN0ZXJfZW51bSxIPWUuX19lbWJpbmRfcmVnaXN0ZXJfZW51bV92YWx1ZSx4PWUuX19lbWJpbmRfcmVnaXN0ZXJfZmxvYXQsUD1lLl9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uLEw9ZS5fX2VtYmluZF9yZWdpc3Rlcl9pbnRlZ2VyLEs9ZS5fX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldyxxPWUuX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZywkPWUuX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3dzdHJpbmcsQUE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92YWx1ZV9vYmplY3QsZUE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92YWx1ZV9vYmplY3RfZmllbGQsckE9ZS5fX2VtYmluZF9yZWdpc3Rlcl92b2lkLGlBPWUuX19lbXZhbF9kZWNyZWYsZkE9ZS5fX2VtdmFsX2luY3JlZixuQT1lLl9fZW12YWxfbmV3X2FycmF5LHRBPWUuX19lbXZhbF9uZXdfY3N0cmluZyxvQT1lLl9fZW12YWxfbmV3X29iamVjdCxhQT0oZS5fX2VtdmFsX3JlZ2lzdGVyLGUuX19lbXZhbF9zZXRfcHJvcGVydHkpLGNBPWUuX19lbXZhbF90YWtlX3ZhbHVlLGxBPShlLl9faXNMZWFwWWVhcixlLl9hYm9ydCksdUE9KGUuX2VtYmluZF9yZXByLGUuX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyksYkE9ZS5fZ2V0ZW52LHNBPWUuX3B0aHJlYWRfY29uZF9kZXN0cm95LGRBPWUuX3B0aHJlYWRfY29uZF9pbml0LGtBPWUuX3B0aHJlYWRfY29uZF9zaWduYWwsaEE9ZS5fcHRocmVhZF9jb25kX3dhaXQsd0E9ZS5fcHRocmVhZF9nZXRzcGVjaWZpYyx2QT1lLl9wdGhyZWFkX2pvaW4sbUE9ZS5fcHRocmVhZF9rZXlfY3JlYXRlLFpBPWUuX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSxwQT1lLl9wdGhyZWFkX211dGV4X2luaXQseUE9ZS5fcHRocmVhZF9vbmNlLEJBPWUuX3B0aHJlYWRfc2V0c3BlY2lmaWMsRUE9KGUuX3N0cmZ0aW1lLGUuX3N0cmZ0aW1lX2wpO2UuY29uc3ROb1NtYXJ0UHRyUmF3UG9pbnRlclRvV2lyZVR5cGUsZS5jb3VudF9lbXZhbF9oYW5kbGVzLGUuY3JhZnRJbnZva2VyRnVuY3Rpb24sZS5jcmVhdGVOYW1lZEZ1bmN0aW9uLGUuZG93bmNhc3RQb2ludGVyLGUuZW1iaW5kX2luaXRfY2hhckNvZGVzLGUuZW5zdXJlT3ZlcmxvYWRUYWJsZSxlLmVudW1SZWFkVmFsdWVGcm9tUG9pbnRlcixlLmV4cG9zZVB1YmxpY1N5bWJvbCxlLmV4dGVuZEVycm9yLGUuZmxvYXRSZWFkVmFsdWVGcm9tUG9pbnRlcixlLmZsdXNoUGVuZGluZ0RlbGV0ZXMsZS5nZW5lcmljUG9pbnRlclRvV2lyZVR5cGUsZS5nZXRCYXNlc3RQb2ludGVyLGUuZ2V0SW5oZXJpdGVkSW5zdGFuY2UsZS5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50LGUuZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcyxlLmdldFNoaWZ0RnJvbVNpemUsZS5nZXRTdHJpbmdPclN5bWJvbCxlLmdldFR5cGVOYW1lLGUuZ2V0X2ZpcnN0X2VtdmFsLGUuaGVhcDMyVmVjdG9yVG9BcnJheSxlLmluaXRfQ2xhc3NIYW5kbGUsZS5pbml0X1JlZ2lzdGVyZWRQb2ludGVyLGUuaW5pdF9lbWJpbmQsZS5pbml0X2VtdmFsLGUuaW50ZWdlclJlYWRWYWx1ZUZyb21Qb2ludGVyLGUubWFrZUNsYXNzSGFuZGxlLGUubWFrZUxlZ2FsRnVuY3Rpb25OYW1lLGUubmV3XyxlLm5vbkNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlLGUucmVhZExhdGluMVN0cmluZyxlLnJlZ2lzdGVyVHlwZSxlLnJlcGxhY2VQdWJsaWNTeW1ib2wsZS5yZXF1aXJlRnVuY3Rpb24sZS5yZXF1aXJlSGFuZGxlLGUucmVxdWlyZVJlZ2lzdGVyZWRUeXBlLGUucnVuRGVzdHJ1Y3RvcixlLnJ1bkRlc3RydWN0b3JzLGUuc2V0RGVsYXlGdW5jdGlvbixlLnNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyLGUuc2ltcGxlUmVhZFZhbHVlRnJvbVBvaW50ZXIsZS50aHJvd0JpbmRpbmdFcnJvcixlLnRocm93SW5zdGFuY2VBbHJlYWR5RGVsZXRlZCxlLnRocm93SW50ZXJuYWxFcnJvcixlLnRocm93VW5ib3VuZFR5cGVFcnJvcixlLnVwY2FzdFBvaW50ZXIsZS53aGVuRGVwZW5kZW50VHlwZXNBcmVSZXNvbHZlZDtmdW5jdGlvbiBYQShBKXthclsoQXw9MCk+PjJdPTQyMzIsKEE9MHxhcltBKzI0Pj4yXSkmJm11KEEpfWZ1bmN0aW9uIFdBKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYT0wO249KEF8PTApKzR8MCx0PUErOHwwLG89QSsxMnwwLHRyW0ErMjQ+PjBdPTAsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLGFyW0ErMTI+PjJdPTAsYXJbKGE9QSsxNnwwKT4+Ml09cixhclthKzQ+PjJdPWksYT0wfGFyW2U+PjJdLChpPXI9MHxhcltlKzQ+PjJdKT8oYnUocikscj0wfGFyW24+PjJdLGFyW0E+PjJdPWEsYXJbbj4+Ml09aSwwfHImJmR1KHIpKTooYXJbQT4+Ml09YSxhcltuPj4yXT1pKSwoYXJbdD4+Ml09ZikmJihhcltvPj4yXT0xKygwfGFyW2YrMTI+PjJdKSl9ZnVuY3Rpb24gSUEoQSl7dmFyIGUscixpLGYsbj0wO3JldHVybiB1cj0oZj11cikrMTZ8MCxlPWYsMHxDQShBfD0wLDEsMCk/KHI9MHxhcltBPj4yXSwobj0wPT0oMHwoaT0wfGFyW0ErND4+Ml0pKSl8fGJ1KGkpLEE9MHx4Yls2MyZhclsxNisoMHxhcltyPj4yXSk+PjJdXShyLGUsMSk/MHx0cltlPj4wXTooR0EoQSksMCksbnx8ZHUoaSksdXI9ZiwwfChuPUEpKToodXI9Ziwobj0wKXxuKX1mdW5jdGlvbiBDQShBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoKDB8KHJ8PTApKTwwJiZzcig1NTczOSw0NzM4MiwyOTAsMTg2ODcpLGE9MHxhclsoaT1jPUErMTZ8MCk+PjJdLCEoKDB8KGk9MHxhcltpKzQ+PjJdKSk8KDB8cil8KDB8aSk9PSgwfHIpJmE+Pj4wPGU+Pj4wKSl7Zj0wfGFyW0ErOD4+Ml07ZG97aWYoZil7aWYoMHxDQShmLGUscikpe2Y9MHxhclsoaT1jKT4+Ml0saT0wfGFyW2krND4+Ml07YnJlYWt9cmV0dXJuKGM9MCl8Y31mPWF9d2hpbGUoMCk7cmV0dXJuIGE9MHxvYigwfGYsMHxpLDB8ZSwwfHIpLGFyW2M+PjJdPWEsYXJbYys0Pj4yXT1ELDB8KGM9MSl9aWYoMDwoMHxpKXwwPT0oMHxpKSYwPGE+Pj4wKXtmPTB8YXJbQSs4Pj4yXTtkb3tpZihmKXtmb3IoOzspe2lmKHI9MHxhclsobj1lPWYrMTZ8MCk+PjJdLCgwfChuPTB8YXJbbis0Pj4yXSkpPCgwfGkpfCgwfG4pPT0oMHxpKSZyPj4+MDxhPj4+MCl7aT03O2JyZWFrfWlmKHI9MHxvYigwfHIsMHxuLDB8YSwwfGkpLGFyWyhuPWUpPj4yXT1yLGFyW24rND4+Ml09RCwhKGY9MHxhcltmKzg+PjJdKSl7aT05O2JyZWFrfX1pZig3PT0oMHxpKSlzcigxODcwMCw0NzM4MiwzMjcsMTg3MTcpO2Vsc2UgaWYoOT09KDB8aSkpe3Q9MHxhclsobz1jKT4+Ml0sbz0wfGFyW28rND4+Ml07YnJlYWt9fWVsc2UgdD1hLG89aX13aGlsZSgwKTtuPTB8YXJbQT4+Ml0sYT0wfGFyW24+PjJdLHI9MHxhclthKzIwPj4yXSxhPTB8dGIoMHwoYT0wfGpiWzEyNyZhclthKzg+PjJdXShuKSksMHxELDB8dCwwfG8pLHhiWzYzJnJdKG4sYSxEKSxhcltjPj4yXT0wLGFyW2MrND4+Ml09MH1yZXR1cm4gdHJbQSsyND4+MF09MSwoYz0wKXxjfWZ1bmN0aW9uIEdBKEEpe3ZhciBlPTA7YXJbKGU9KEF8PTApKzE2fDApPj4yXT0wLChlPShhcltlKzQ+PjJdPTApfGFyW0ErOD4+Ml0pJiZHQShlKSx0clsoZT1BKzI0fDApPj4wXT0xfWZ1bmN0aW9uIFZBKEEpe3ZhciBlLHIsaSxmLG49MDtyZXR1cm4gdXI9KGY9dXIpKzE2fDAsZT1mLDB8Q0EoQXw9MCwyLDApPyhyPTB8YXJbQT4+Ml0sKG49MD09KDB8KGk9MHxhcltBKzQ+PjJdKSkpfHxidShpKSxBPTB8eGJbNjMmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ocixlLDIpPzY1NTM1JigoMHxjcltlPj4wXSk8PDh8MHxjcltlKzE+PjBdKTooR0EoQSksMCksbnx8ZHUoaSksdXI9ZiwwfChuPUEpKToodXI9Ziwobj0wKXxuKX1mdW5jdGlvbiBGQShBKXt2YXIgZSxyLGksZixuPTA7cmV0dXJuIHVyPShmPXVyKSsxNnwwLGU9ZiwwfENBKEF8PTAsNCwwKT8ocj0wfGFyW0E+PjJdLChuPTA9PSgwfChpPTB8YXJbQSs0Pj4yXSkpKXx8YnUoaSksQT0wfHhiWzYzJmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIsZSw0KT8oMHxjcltlKzE+PjBdKTw8MTZ8KDB8Y3JbZT4+MF0pPDwyNHwoMHxjcltlKzI+PjBdKTw8OHwwfGNyW2UrMz4+MF06KEdBKEEpLDApLG58fGR1KGkpLHVyPWYsMHwobj1BKSk6KHVyPWYsKG49MCl8bil9ZnVuY3Rpb24gUkEoQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MDt1cj0oZj11cikrMTZ8MCxyPShpPWYpKzEyfDAsYXJbaT4+Ml09MCxhcltpKzQ+PjJdPTAsYT1lKzE2fChhcltpKzg+PjJdPTApO0E6ZG97aWYoMD09KDB8YXJbYT4+Ml0pJjA9PSgwfGFyW2ErND4+Ml0pKWFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MDtlbHNle3Q9ZSs0fDA7ZTpmb3IoOzspe2lmKCEoMHxDQShlLDEsMCkpKXtuPTU7YnJlYWt9c3dpdGNoKG49MHxhcltlPj4yXSwoYT0wPT0oMHwobz0wfGFyW3Q+PjJdKSkpfHxidShvKSxuPTB8eGJbNjMmYXJbMTYrKDB8YXJbbj4+Ml0pPj4yXV0obixyLDEpPyhuPTB8dHJbcj4+MF0pPDwyND4+MjQ/KF91KGksbiksMCk6MjooR0EoZSksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLDEpLGF8fGR1KG8pLDMmbil7Y2FzZSAwOmJyZWFrO2Nhc2UgMjpuPTE1O2JyZWFrIGU7ZGVmYXVsdDpicmVhayBBfX1pZig1PT0oMHxuKSl7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfWlmKDE1PT0oMHxuKSl7YXJbQT4+Ml09YXJbaT4+Ml0sYXJbQSs0Pj4yXT1hcltpKzQ+PjJdLGFyW0ErOD4+Ml09YXJbaSs4Pj4yXSxhcltpPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTA7YnJlYWt9fX13aGlsZSgwKTt1cj0oMDw9KDB8dHJbaSsxMT4+MF0pfHx2dSgwfGFyW2k+PjJdKSxmKX1mdW5jdGlvbiBOQShBLGUscil7ZXw9MCxyfD0wO3ZhciBpPTA7cmV0dXJuIGk9MHxhclsoQXw9MCk+PjJdLHI9MHx0YigwfChpPTB8amJbMTI3JmFyWzgrKDB8YXJbaT4+Ml0pPj4yXV0oaSkpLDB8RCwwfGUsMHxyKSxlPTB8YXJbQT4+Ml0sMHx4Yls2MyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlLHIsRCl9ZnVuY3Rpb24gX0EoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO2Zvcih2YXIgaT0wLGY9MCxuPTA7Oyl7aWYoZj0wfGFyWyhuPWk9QSsxNnwwKT4+Ml0sKDB8KG49MHxhcltuKzQ+PjJdKSk8KDB8cil8KDB8bik9PSgwfHIpJmY+Pj4wPGU+Pj4wKXtBPTM7YnJlYWt9aWYoZj0wfG9iKDB8ZiwwfG4sMHxlLDB8ciksYXJbKG49aSk+PjJdPWYsYXJbbis0Pj4yXT1ELCEoQT0wfGFyW0ErOD4+Ml0pKXtBPTU7YnJlYWt9fWlmKDM9PSgwfEEpKXNyKDE4NzAwLDQ3MzgyLDMyNywxODcxNyk7ZWxzZSBpZig1PT0oMHxBKSlyZXR1cm59ZnVuY3Rpb24gWUEoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7cmV0dXJuIGFyWyhBfD0wKT4+Ml09ZSxhcltBKzQ+PjJdPXIsYXJbKGk9QSs4fDApPj4yXT1yLGFyWyhhPWM9QSsxNnwwKT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbKGE9QSsyNHwwKT4+Ml09MCxyPyhmPWUrMXwwLGFyW0E+PjJdPWYsbj0wfGNyW2U+PjBdLG89cistMXwwLGFyW2k+PjJdPW8sbj0wfGRiKDB8biwwLDU2KSx0PUQsYXJbKGw9Yyk+PjJdPW4sYXJbbCs0Pj4yXT10LG8/KG89ZSsyfDAsYXJbQT4+Ml09byxmPTB8Y3JbZj4+MF0sbD1yKy0yfDAsYXJbaT4+Ml09bCxmPTB8ZGIoMHxmLDAsNDgpLGZ8PW4sbj10fEQsYXJbKHQ9Yyk+PjJdPWYsYXJbdCs0Pj4yXT1uLGw/KHQ9ZSszfDAsYXJbQT4+Ml09dCxvPTB8Y3Jbbz4+MF0sbD1yKy0zfDAsYXJbaT4+Ml09bCxvPTB8ZGIoMHxvLDAsNDApLG98PWYsZj1ufEQsYXJbKG49Yyk+PjJdPW8sYXJbbis0Pj4yXT1mLGw/KG49ZSs0fDAsYXJbQT4+Ml09bix0PTB8Y3JbdD4+MF0sbD1yKy00fDAsYXJbaT4+Ml09bCxmfD10LGFyWyh0PWMpPj4yXT1vLGFyW3QrND4+Ml09ZixsPyh0PWUrNXwwLGFyW0E+PjJdPXQsbj0wfGNyW24+PjBdLGw9cistNXwwLGFyW2k+PjJdPWwsbj0wfGRiKDB8biwwLDI0KSxufD1vLGZ8PUQsYXJbKG89Yyk+PjJdPW4sYXJbbys0Pj4yXT1mLGw/KG89ZSs2fDAsYXJbQT4+Ml09byx0PTB8Y3JbdD4+MF0sbD1yKy02fDAsYXJbaT4+Ml09bCxufD10PTB8ZGIoMHx0LDAsMTYpLGZ8PUQsYXJbKHQ9Yyk+PjJdPW4sYXJbdCs0Pj4yXT1mLGw/KHQ9ZSs3fDAsYXJbQT4+Ml09dCxvPTB8Y3Jbbz4+MF0sbD1yKy03fDAsYXJbaT4+Ml09bCxufD1vPTB8ZGIoMHxvLDAsOCksZnw9RCxhclsobz1jKT4+Ml09bixhcltvKzQ+PjJdPWYsbD1sPyhhcltBPj4yXT1lKzgsZT0wfGNyW3Q+PjBdLGFyW2k+PjJdPXIrLTgsYXJbKGw9Yyk+PjJdPW58ZSxhcltsKzQ+PjJdPWYsNjQtKGw9MCl8MCk6NjQtKGw9OCl8MCx2b2lkKGFyW2E+PjJdPWwpKToobD02NC0obD0xNil8MCx2b2lkKGFyW2E+PjJdPWwpKSk6KGw9NjQtKGw9MjQpfDAsdm9pZChhclthPj4yXT1sKSkpOihsPTY0LShsPTMyKXwwLHZvaWQoYXJbYT4+Ml09bCkpKToobD02NC0obD00MCl8MCx2b2lkKGFyW2E+PjJdPWwpKSk6KGw9NjQtKGw9NDgpfDAsdm9pZChhclthPj4yXT1sKSkpOihsPTY0LShsPTU2KXwwLHZvaWQoYXJbYT4+Ml09bCkpKTooYz0oYz02NCktY3wwLHZvaWQoYXJbYT4+Ml09YykpfWZ1bmN0aW9uIFFBKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzI0fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErOHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzE2fDAsZj0wfGFyW24+PjJdO2Rve2lmKCFmKWJyZWFrIEE7Yz0wfGFyW0E+PjJdLGFyW0E+PjJdPWMrMSxjPTB8Y3JbYz4+MF0sZj1mKy0xfDAsYXJbbj4+Ml09ZixjPTB8ZGIoMHxjLDAsMHwoaT1pKy04fDApKSxhPWFyWyhsPXQpKzQ+PjJdfEQsYXJbKG89dCk+PjJdPWFyW2w+PjJdfGMsYXJbbys0Pj4yXT1hfXdoaWxlKDc8KDB8aSkpfX13aGlsZSgwKTtpPTY0LWl8MCxhcltyPj4yXT1pfXJldHVybiBsPTB8c2IoMHwobz0wfGFyWyhhPWM9QSsxNnwwKT4+Ml0pLDB8KGE9MHxhclthKzQ+PjJdKSw2NC1lfDApLGE9MHxkYigwfG8sMHxhLDB8ZSksYXJbYz4+Ml09YSxhcltjKzQ+PjJdPUQsYXJbcj4+Ml09aS1lLDB8bH1mdW5jdGlvbiBEQShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtmb3IoYz0oQXw9MCkrOHwwLGk9QSsxNnwwLGY9KGw9MCl8YXJbKHI9QSsyNHwwKT4+Ml07Oyl7aWYoKDB8Zik8MSl7Zj02NC1mfDA7QTpkb3tpZig3PCgwfGYpKXtuPTB8YXJbYz4+Ml07ZG97aWYoIW4pYnJlYWsgQTt1PTB8YXJbQT4+Ml0sYXJbQT4+Ml09dSsxLHU9MHxjclt1Pj4wXSxuPW4rLTF8MCxhcltjPj4yXT1uLHU9MHxkYigwfHUsMCwwfChmPWYrLTh8MCkpLHQ9YXJbKGI9aSkrND4+Ml18RCxhclsobz1pKT4+Ml09YXJbYj4+Ml18dSxhcltvKzQ+PjJdPXR9d2hpbGUoNzwoMHxmKSl9fXdoaWxlKDApO289NjQtZnwwLGFyW3I+PjJdPW99ZWxzZSBvPWY7aWYodD0wfGRiKDB8KGI9MHxhclsodT1pKT4+Ml0pLDB8KHU9MHxhclt1KzQ+PjJdKSwxKSxuPUQsYXJbKGY9aSk+PjJdPXQsYXJbZis0Pj4yXT1uLGY9bystMXwwLGFyW3I+PjJdPWYsISgtMTwoMHx1KXwtMT09KDB8dSkmNDI5NDk2NzI5NTxiPj4+MCkpYnJlYWs7aWYoMTk8KDB8bCkpe2Y9MCxhPTIwO2JyZWFrfWw9bCsxfDB9aWYoMjA9PSgwfGEpKXJldHVybiAwfGY7aWYoIWwpcmV0dXJuKGFyW2U+PjJdPTApfChiPTEpO2lmKCgwfG8pPD0oMHxsKSl7Zj02NS1vfDA7QTpkb3tpZig3PCgwfGYpKXtvPTB8YXJbYz4+Ml07ZG97aWYoIW8pYnJlYWsgQTtiPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YisxLGI9MHxjcltiPj4wXSxvPW8rLTF8MCxhcltjPj4yXT1vLHR8PWI9MHxkYigwfGIsMCwwfChmPWYrLTh8MCkpLG58PUQsYXJbKGI9aSk+PjJdPXQsYXJbYis0Pj4yXT1ufXdoaWxlKDc8KDB8ZikpfX13aGlsZSgwKTtmPTY0LWZ8MCxhcltyPj4yXT1mfXJldHVybiBiPTB8c2IoMHx0LDB8biw2NC1sfDApLGM9MHxkYigwfHQsMHxuLDB8bCksYXJbKHU9aSk+PjJdPWMsYXJbdSs0Pj4yXT1ELGFyW3I+PjJdPWYtbCxiPWIrKDE8PGwpfDAsYXJbZT4+Ml09YistMSwxPCgwfGIpPzB8KGI9MSk6KHNyKDE4NzQ5LDQ3MzgyLDQyNyw0NzQwMyksMCl9ZnVuY3Rpb24gSkEoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKCgwfCh0PTB8YXJbKHI9KEF8PTApKzEyfDApPj4yXSkpIT0oKG89dT0wfGFyWyhpPUErNHwwKT4+Ml0pLShuPWY9MHxhcltBPj4yXSl8MCkpcmV0dXJuIGFyW3I+PjJdPXQrMSx2b2lkKHRyW24rdD4+MF09ZSk7KDB8byk9PSgwfCh0PTB8YXJbKHU9QSs4fDApPj4yXSkpPygoMHwodD0obD10LWZ8MCkrMXwwKSk8MCYmemwoKSxvPWw8PDEsYz0obz1sPj4+MDwxMDczNzQxODIzP28+Pj4wPHQ+Pj4wP3Q6bzoyMTQ3NDgzNjQ3KT8wfGh1KG8pOjAsdHJbKGE9YytsfDApPj4wXT1lLHQ9YSsoMC1sKXwwLDA8KDB8bCkmJmhiKDB8dCwwfG4sMHxsKSxhcltBPj4yXT10LGFyW2k+PjJdPWErMSxhclt1Pj4yXT1jK28sMHxmJiZ2dShuKSk6KHRyW28+PjBdPWUsYXJbaT4+Ml09MSsoMHxhcltpPj4yXSkpLGFyW3I+PjJdPTErKDB8YXJbcj4+Ml0pfWZ1bmN0aW9uIE1BKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wO3Q9KG49MHxhclsoaT0oQXw9MCkrMTJ8MCk+PjJdKSsyfDAsZj0wfGFyW0E+PjJdLChyPSgwfGFyW0ErND4+Ml0pLWZ8MCk+Pj4wPHQ+Pj4wPyhUQShBLHQtcnwwKSx0PUEsbj0wfGFyW2k+PjJdLGY9MHxhcltBPj4yXSk6dD1BLGFyW2k+PjJdPW4rMSx0cltmK24+PjBdPSg2NTUzNSZlKT4+PjgsQT0wfGFyW2k+PjJdLGFyW2k+PjJdPUErMSx0clsoMHxhclt0Pj4yXSkrQT4+MF09ZX1mdW5jdGlvbiBUQShBLGUpe3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MDtpZigoZXw9MCk+Pj4wPD0oKHQ9MHxhclsocj0oQXw9MCkrOHwwKT4+Ml0pLShmPTB8YXJbKGk9QSs0fDApPj4yXSl8MCk+Pj4wKWZvcig7Zj0xKygodHJbZj4+MF09MCl8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09ZiwwIT0oMHwoZT1lKy0xfDApKTspO2Vsc2V7Zm9yKCgwfChmPShvPWYtKG49MHxhcltBPj4yXSl8MCkrZXwwKSk8MCYmemwoKSxhPSh0PXQtbnwwKTw8MSxhPShuPShmPXQ+Pj4wPDEwNzM3NDE4MjM/YT4+PjA8Zj4+PjA/ZjphOjIxNDc0ODM2NDcpPzB8aHUoZik6MCkrb3wwLG89bitmfDAsZj10PWE7dD1mPXQrMXwodHJbZj4+MF09MCksMCE9KDB8KGU9ZSstMXwwKSk7KTtlPTB8YXJbQT4+Ml0sZj1hKygwLShuPSgwfGFyW2k+PjJdKS1lfDApKXwwLDA8KDB8bikmJmhiKDB8ZiwwfGUsMHxuKSxhcltBPj4yXT1mLGFyW2k+PjJdPXQsYXJbcj4+Ml09byxlJiZ2dShlKX19ZnVuY3Rpb24gVUEoQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTA7dD0obj0wfGFyWyhpPShBfD0wKSsxMnwwKT4+Ml0pKzR8MCxmPTB8YXJbQT4+Ml0sKHI9KDB8YXJbQSs0Pj4yXSktZnwwKT4+PjA8dD4+PjA/KFRBKEEsdC1yfDApLHQ9QSxuPTB8YXJbaT4+Ml0sZj0wfGFyW0E+PjJdKTp0PUEsYXJbaT4+Ml09bisxLHRyW2Yrbj4+MF09ZT4+PjI0LEE9MHxhcltpPj4yXSxhcltpPj4yXT1BKzEsdHJbKDB8YXJbdD4+Ml0pK0E+PjBdPWU+Pj4xNixBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1lPj4+OCxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1lfWZ1bmN0aW9uIFNBKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MDtzd2l0Y2goMHwoZXw9MCkpe2Nhc2UgMTpyZXR1cm4gaT4+PjA8MHwwPT0oMHxpKSZyPj4+MDwyNTZ8fHNyKDE4NzYwLDQ3MzgyLDU0MywxOTU2Myksdm9pZCBKQShBLDI1NSZyKTtjYXNlIDI6cmV0dXJuIGk+Pj4wPDB8MD09KDB8aSkmcj4+PjA8NjU1MzZ8fHNyKDE4Nzc0LDQ3MzgyLDU0NywxOTU2MyksaT0obj0wfGFyWyh0PUErMTJ8MCk+PjJdKSsyfDAsZT0wfGFyW0E+PjJdLChmPSgwfGFyW0ErND4+Ml0pLWV8MCk+Pj4wPGk+Pj4wPyhUQShBLGktZnwwKSxmPUEsaT0wfGFyW3Q+PjJdLGU9MHxhcltBPj4yXSk6KGY9QSxpPW4pLGFyW3Q+PjJdPWkrMSx0cltlK2k+PjBdPSg2NTUzNSZyKT4+PjgsQT0wfGFyW3Q+PjJdLGFyW3Q+PjJdPUErMSx2b2lkKHRyWygwfGFyW2Y+PjJdKStBPj4wXT1yKTtjYXNlIDQ6cmV0dXJuIGk+Pj4wPDF8MT09KDB8aSkmcj4+PjA8MHx8c3IoMTg3OTAsNDczODIsNTUxLDE5NTYzKSxpPShuPTB8YXJbKHQ9QSsxMnwwKT4+Ml0pKzR8MCxlPTB8YXJbQT4+Ml0sKGY9KDB8YXJbQSs0Pj4yXSktZXwwKT4+PjA8aT4+PjA/KFRBKEEsaS1mfDApLGY9QSxpPTB8YXJbdD4+Ml0sZT0wfGFyW0E+PjJdKTooZj1BLGk9biksYXJbdD4+Ml09aSsxLHRyW2UraT4+MF09cj4+PjI0LEE9MHxhclt0Pj4yXSxhclt0Pj4yXT1BKzEsdHJbKDB8YXJbZj4+Ml0pK0E+PjBdPXI+Pj4xNixBPTB8YXJbdD4+Ml0sYXJbdD4+Ml09QSsxLHRyWygwfGFyW2Y+PjJdKStBPj4wXT1yPj4+OCxBPTB8YXJbdD4+Ml0sYXJbdD4+Ml09QSsxLHZvaWQodHJbKDB8YXJbZj4+Ml0pK0E+PjBdPXIpO2Nhc2UgODpyZXR1cm4gdm9pZCBmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MDt0PShuPTB8YXJbKGk9KEF8PTApKzEyfDApPj4yXSkrOHwwLGY9MHxhcltBPj4yXSwobz0oMHxhcltBKzQ+PjJdKS1mfDApPj4+MDx0Pj4+MD8oVEEoQSx0LW98MCksdD1BLG49MHxhcltpPj4yXSxmPTB8YXJbQT4+Ml0pOnQ9QSxBPTB8c2IoMHxlLDB8ciw1NiksYXJbaT4+Ml09bisxLHRyW2Yrbj4+MF09QSxBPTB8c2IoMHxlLDB8ciw0OCksbz0wfGFyW2k+PjJdLGFyW2k+PjJdPW8rMSx0clsoMHxhclt0Pj4yXSkrbz4+MF09QSxvPTB8c2IoMHxlLDB8ciw0MCksQT0wfGFyW2k+PjJdLGFyW2k+PjJdPUErMSx0clsoMHxhclt0Pj4yXSkrQT4+MF09byxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLEE9MHxzYigwfGUsMHwodHJbKDB8YXJbdD4+Ml0pK0E+PjBdPXIpLDI0KSxvPTB8YXJbaT4+Ml0sYXJbaT4+Ml09bysxLHRyWygwfGFyW3Q+PjJdKStvPj4wXT1BLG89MHxzYigwfGUsMHxyLDE2KSxBPTB8YXJbaT4+Ml0sYXJbaT4+Ml09QSsxLHRyWygwfGFyW3Q+PjJdKStBPj4wXT1vLEE9MHxzYigwfGUsMHxyLDgpLHI9MHxhcltpPj4yXSxhcltpPj4yXT1yKzEsdHJbKDB8YXJbdD4+Ml0pK3I+PjBdPUEscj0wfGFyW2k+PjJdLGFyW2k+PjJdPXIrMSx0clsoMHxhclt0Pj4yXSkrcj4+MF09ZX0oQSxyLGkpO2RlZmF1bHQ6c3IoNTU3MzksNDczODIsNTU4LDE5NTYzKX19ZnVuY3Rpb24gT0EoQSxlKXt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKGE9KEF8PTApKzEyfDAsbj0wfHRyWyh0PShlfD0wKSsxMXwwKT4+MF0scj0wfGFyWyhvPWUrNHwwKT4+Ml0saT0xKygwfGFyW2E+PjJdKSsobjw8MjQ+PjI0PDA/cjoyNTUmbil8MCwoZj0oMHxhcltBKzQ+PjJdKS0oMHxhcltBPj4yXSl8MCk+Pj4wPGk+Pj4wPyhUQShBLGktZnwwKSxmPTB8dHJbdD4+MF0scj0wfGFyW28+PjJdKTpmPW4sISgwfChmPDwyND4+MjQ8MD9yOjI1NSZmKSkpcmV0dXJuIHQ9QSxlPShvPTB8YXJbYT4+Ml0pKzF8MCxhclthPj4yXT1lLGE9MHxhclt0Pj4yXSx2b2lkKHRyWyhhPWErb3wwKT4+MF09MCk7Zm9yKGk9MCxyPWY7Zj0wfHRyWyhyPDwyND4+MjQ8MD8wfGFyW2U+PjJdOmUpK2k+PjBdLG49MHxhclthPj4yXSxhclthPj4yXT1uKzEsdHJbKDB8YXJbQT4+Ml0pK24+PjBdPWYsKGk9aSsxfDApPj4+MDwoKHI9MHx0clt0Pj4wXSk8PDI0Pj4yNDwwPzB8YXJbbz4+Ml06MjU1JnIpPj4+MDspO3Q9KG89MHxhclthPj4yXSkrMXwwLGFyW2E+PjJdPXQsYT0wfGFyW0E+PjJdLHRyWyhhPWErb3wwKT4+MF09MH1mdW5jdGlvbiB6QShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wO2E9MHxhclsoZj0oQXw9MCkrMTJ8MCk+PjJdLGk9KHQ9MHxhclsobj1lKzR8MCk+PjJdKS0obz0wfGFyW2U+PjJdKSthfDAsYz0wfGFyW0E+PjJdLChyPSgwfGFyW0ErND4+Ml0pLWN8MCk+Pj4wPGk+Pj4wJiYoVEEoQSxpLXJ8MCksYz0wfGFyW0E+PjJdLGE9MHxhcltmPj4yXSxvPTB8YXJbZT4+Ml0sdD0wfGFyW24+PjJdKSxoYihjK2F8MCwwfG8sdC1vfDApLGFyW2Y+PjJdPSgwfGFyW24+PjJdKS0oMHxhcltlPj4yXSkrKDB8YXJbZj4+Ml0pfWZ1bmN0aW9uIGpBKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTA7KDB8KG89MHxhclsodD0oQXw9MCkrMTJ8MCk+PjJdKSkhPSgocj0wfGFyWyhmPUErNHwwKT4+Ml0pLShpPTB8YXJbQT4+Ml0pfDApJiZzcigxODgxMCw0NzM4Miw2MTAsMTg4MzgpLChuPW8rZXwwKT4+PjA8PW8+Pj4wP24+Pj4wPG8+Pj4wJiYoMHxyKSE9KDB8KGE9aStufDApKSYmKGFyW2Y+PjJdPWEpOihUQShBLGUpLG89MHxhclt0Pj4yXSksYXJbdD4+Ml09bytlfWZ1bmN0aW9uIEhBKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihiPTB8V2UoZiwxODg2NSw1KSx4QShsLGUpLFdlKDB8V2UoYiwodT0oYT0wfHRyWyhjPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYSksMTg4NzEsNyksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UoZiwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDE4ODc5LDYpLGI9MHxXZSgwfEtmKHUsMHxhclsoYj1lKzh8MCk+PjJdLDB8YXJbYis0Pj4yXSksMTg4ODYsMTcpLFdlKDB8TGYoYiwwfGFyW2UrMTY+PjJdKSwxODkwNCwyKSwwfHRyW2UrMzY+PjBdKXtpZigwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UoZiwxODkwNyw5KSxsPTB8V2UoMHxQZihsLDB8Y3JbZSszNz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UobCwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO3U9KGI9MHxXZShsLDE4OTE3LDcpKSsoMHxhclsoMHxhcltiPj4yXSktMTI+PjJdKSs0fDAsYXJbdT4+Ml09LTc1JmFyW3U+PjJdfDgsV2UoMHxMZihiLDB8YXJbZSs0MD4+Ml0pLDMwMDg2LDEpfWlmKEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfWZ1bmN0aW9uIFhlKEEsZSl7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTA7RXUocj0oQXw9MCkrMzJ8MCxlfD0wKSw4Jih0PShhclsobz1BKzQ0fDApPj4yXT0wKXxhclsoaT1BKzQ4fDApPj4yXSl8MCYmKGU9KGU9MHx0clsxMStyPj4wXSk8PDI0Pj4yNDwwPyhuPWY9ZT0wfGFyW3I+PjJdKSsoMHxhcltBKzM2Pj4yXSl8MDoobj1mPXIpKygyNTUmZSl8MCxhcltvPj4yXT1lLGFyW0ErOD4+Ml09ZixhcltBKzEyPj4yXT1uLGFyW0ErMTY+PjJdPWUpLDE2JnQmJihvPShlPShlPTB8dHJbKGY9MTErcnwwKT4+MF0pPDwyND4+MjQ8MD8odD0wfGFyW0ErMzY+PjJdLGFyW28+PjJdPSgwfGFyW3I+PjJdKSt0LCgyMTQ3NDgzNjQ3JmFyW0ErNDA+PjJdKS0xfDApOih0PTI1NSZlLGFyW28+PjJdPXIrdCwxMCksdCksVnUocixlLDApLChlPTB8dHJbZj4+MF0pPDwyND4+MjQ8MD8odD1mPTB8YXJbcj4+Ml0sbj0wfGFyW0ErMzY+PjJdKToobj0yNTUmZSxmPXQ9ciksYXJbKGU9QSsyNHwwKT4+Ml09ZixhcltBKzIwPj4yXT1mLGFyW0ErMjg+PjJdPXQrbiwzJmFyW2k+PjJdJiYoYXJbZT4+Ml09ZitvKSl9ZnVuY3Rpb24gV2UoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MDtyZXR1cm4gdXI9KGE9dXIpKzE2fDAsbj1hKzEyfDAsbD0obz1hKSs4fDAsemYobyxBfD0wKSwwfHRyW28+PjBdPyhjPSgwfGFyW0E+PjJdKS0xMnwwLGFyW2w+PjJdPWFyW0ErKDB8YXJbYz4+Ml0pKzI0Pj4yXSxjPUErKDB8YXJbYz4+Ml0pfDAsdD0wfGFyW2MrND4+Ml0sZj1lK3J8MCwtMT09KDB8KHI9MHxhclsoaT1jKzc2fDApPj4yXSkpJiYoVGYobixjKSxyPTB8dW4obiw1OTIzMikscj0wfEhiWzMxJmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIsMzIpLGJuKG4pLHI9cjw8MjQ+PjI0LGFyW2k+PjJdPXIpLGFyW24+PjJdPWFyW2w+PjJdLHVyPSgwfFBBKG4sZSwzMj09KDE3NiZ0fDApP2Y6ZSxmLGMsMjU1JnIpfHxEZihsPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW2wrMTY+PjJdKSxqZihvKSxhKSwwfEEpOihqZihvKSx1cj1hLDB8QSl9ZnVuY3Rpb24geEEoQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhPTA7aWYodXI9KG89dXIpKzE2MHwwLG49bysxMzZ8MCx0PW8sMTk3MDYyODk2NCE9KDB8KGE9MHxhclsoZXw9MCkrMjA+PjJdKSkpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx0cltBKzExPj4wXT00LHRyW0ErND4+MF09MCx0cltBPj4wXT1hPj4+MjQsdHJbQSsxPj4wXT1hPj4+MTYsdHJbQSsyPj4wXT1hPj4+OCx0cltBKzM+PjBdPWEsdm9pZCh1cj1vKTtpPXQrNTZ8MCxmPXQrNHwwLGFyW3Q+PjJdPTI5MixhcltpPj4yXT0zMTIsSmYodCs1NnwwLGYpLGFyW3QrMTI4Pj4yXT0wLGFyW3QrMTMyPj4yXT0tMSxhclt0Pj4yXT00MzA0LGFyW2k+PjJdPTQzMjQsU2YoZiksYXJbZj4+Ml09NDM0MCxhclsocj10KzM2fDApPj4yXT0wLGFyWzQrcj4+Ml09MCxhcls4K3I+PjJdPTAsYXJbMTIrcj4+Ml09MCxhclt0KzUyPj4yXT0xNixhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsWGUoZixuKSwoMHx0clsxMStuPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksYT10KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzR8MCxhclthPj4yXT0tNzUmYXJbYT4+Ml18OCxhclt0KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzc2Pj4yXT00OCxhclt0KygwfGFyWygwfGFyW3Q+PjJdKS0xMj4+Ml0pKzEyPj4yXT0yLGU9ZSsyNHwwLGE9MDtkb3tzd2l0Y2goMHxhKXtjYXNlIDQ6Y2FzZSA2OmNhc2UgODpjYXNlIDEwOnRyW24+PjBdPTQ1LFdlKHQsbiwxKX1QZih0LDB8Y3JbKDB8YXJbZT4+Ml0pK2E+PjBdKSxhPWErMXwwfXdoaWxlKCgwfGEpPDE2KTtJZShBLGYpLGFyW3Q+PjJdPTQzMDQsYXJbaT4+Ml09NDMyNCxhcltmPj4yXT00MzQwLCgwfHRyWzExK3I+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxrZihmKSxHZigpLGJmKGkpLHVyPW99ZnVuY3Rpb24gSWUoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MCxuPTA7aWYoMTYmKHI9MHxhclsoZXw9MCkrNDg+PjJdKXwwKXtpZigoaT0wfGFyWyhyPWUrNDR8MCk+PjJdKT4+PjA8KGY9MHxhcltlKzI0Pj4yXSk+Pj4wJiYoaT1hcltyPj4yXT1mKSxyPTB8YXJbZSsyMD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT1pLXJ8KGFyW0ErOD4+Ml09MCkpPj4+MCYmcHUoKSxlPj4+MDwxMT90cltBKzExPj4wXT1lOihmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZiksKDB8cikhPSgwfGkpKXtmb3IoZj1BO3RyW2Y+PjBdPTB8dHJbcj4+MF0sKDB8KHI9cisxfDApKSE9KDB8aSk7KWY9ZisxfDA7QT1BK2V8MH10cltBPj4wXT0wfWVsc2V7aWYoISg4JnIpKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKGFyW0ErOD4+Ml09MCk7aWYocj0wfGFyW2UrOD4+Ml0sZj0wfGFyW2UrMTY+PjJdLGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KGU9Zi1yfChhcltBKzg+PjJdPTApKT4+PjAmJnB1KCksZT4+PjA8MTE/dHJbQSsxMT4+MF09ZToobj0wfGh1KGk9ZSsxNiYtMTYpLGFyW0E+PjJdPW4sYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxpLGFyW0ErND4+Ml09ZSxBPW4pLCgwfHIpIT0oMHxmKSl7Zm9yKGk9QTt0cltpPj4wXT0wfHRyW3I+PjBdLCgwfChyPXIrMXwwKSkhPSgwfGYpOylpPWkrMXwwO0E9QStlfDB9dHJbQT4+MF09MH19ZnVuY3Rpb24gUEEoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShhPXVyKSsxNnwwLG89YSwhKGI9MHxhclsoQXw9MCk+PjJdKSlyZXR1cm4gdXI9YSwoYj0wKXxiO2lmKGw9KDB8KGw9aS0oYz1lKXwwKSk8KDB8KHU9MHxhclsodD1mKzEyfDApPj4yXSkpP3UtbHwwOjAsMDwoMHwoZj0odT1yKS1jfDApKSYmKDB8eGJbNjMmYXJbNDgrKDB8YXJbYj4+Ml0pPj4yXV0oYixlLGYpKSE9KDB8ZikpcmV0dXJuIGFyW0E+PjJdPTAsdXI9YSwoYj0wKXxiO2Rve2lmKDA8KDB8bCkpe2lmKGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGM9bD4+PihhcltvKzg+PjJdPTApPDExPyh0clsoZT1vKzExfDApPj4wXT1sLGY9byk6KGY9MHxodShlPWwrMTYmLTE2KSxhcltvPj4yXT1mLGFyW28rOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltvKzQ+PjJdPWwsZT1vKzExfDAsbyksdmIoMHxmLDB8biwwfGwpLCgodHJbZitsPj4wXT0wKXx4Yls2MyZhcls0OCsoMHxhcltiPj4yXSk+PjJdXShiLCgwfHRyW2U+PjBdKTwwPzB8YXJbYz4+Ml06byxsKSkhPSgwfGwpKXJldHVybigoYXJbQT4+Ml09MCl8dHJbZT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pLHVyPWEsKGI9MCl8YjsoMHx0cltlPj4wXSk8MCYmdnUoMHxhcltjPj4yXSk7YnJlYWt9fXdoaWxlKDApO3JldHVybiAwPCgwfChpPWktdXwwKSkmJigwfHhiWzYzJmFyWzQ4KygwfGFyW2I+PjJdKT4+Ml1dKGIscixpKSkhPSgwfGkpPyhhcltBPj4yXT0wLHVyPWEsKGI9MCl8Yik6KGFyW3Q+PjJdPTAsdXI9YSwwfGIpfWZ1bmN0aW9uIExBKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYztpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSEEoZixlLHIpLFdlKG4sKGM9KGU9MHx0clsocj0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsYz8wfGFyWzQrZj4+Ml06MjU1JmUpLCgwfHRyW3I+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX1mdW5jdGlvbiBLQShBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhPTAsYz0wLGw9MDtjPTB8dHJbKGY9KGV8PTApKzM2fDApPj4wXT8xMjo4LGw9MTk3MDYyODk2ND09KDB8YXJbKG89ZSsyMHwwKT4+Ml0pPzE2fGM6YyxhPSgwfGFyWyhuPXIrNHwwKT4+Ml0pLWktYy0oMHxhcltyPj4yXSkrbHwwLGFyWyh0PXIrMTJ8MCk+PjJdPWksZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MDsoMHwoZXw9MCkpPD0tMSYmc3IoMTg4NDMsNDczODIsNjE4LDE4ODU1KSxlJiYobj0wfGFyWyhmPUErNHwwKT4+Ml0sYT1jPTB8YXJbQT4+Ml0sKGk9KHI9KG89biktY3wwKStlfDApPj4+MDw9cj4+PjA/aT4+PjA8cj4+PjAmJigwfG8pIT0oMHwodD1hK2l8MCkpP2FyW2Y+PjJdPXQ6dD1uOihUQShBLGUpLGM9YT0wfGFyW0E+PjJdLHQ9MHxhcltmPj4yXSksKHQ9dC1jLWV8MCk+Pj4wPD0obz0wfGFyW0ErMTI+PjJdKT4+PjB8fHdiKChBPWErb3wwKStlfDAsMHxBLHQtb3wwKSl9KHIsbC1jfDApLFVBKHIsYSksVUEociwwfGFyW28+PjJdKTtkb3tpZigxOTcwNjI4OTY0PT0oMHxhcltvPj4yXSkpe2lmKGk9ZSsyNHwwLDE2PT0oKDB8YXJbZSsyOD4+Ml0pLSgwfGFyW2k+PjJdKXwwKSl7ekEocixpKTticmVha31zcigxOTA3OSwxOTEwNCwzMDksMTkxMTEpfX13aGlsZSgwKTtkb3tpZigwfHRyW2Y+PjBdKXtpZigoaT0wfGFyW2UrNDA+PjJdKT4+PjA8MTY3NzcyMTYpe1VBKHIsY3JbZSszNz4+MF08PDI0fGkpO2JyZWFrfXNyKDE5MTI2LDE5MTA0LDMxNCwxOTExMSl9fXdoaWxlKDApO2FyW3Q+PjJdPSgwfGFyW24+PjJdKS0oMHxhcltyPj4yXSksYz0wfGFyWyhhPTU2NTkyKSs0Pj4yXSxhclsobD1BKT4+Ml09YXJbYT4+Ml0sYXJbbCs0Pj4yXT1jLHl1KEErOHwwLDU2NjAwKX1mdW5jdGlvbiBDZShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBxQShBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzE2fDAsZj1pLG49MHxGQShyfD0wKSx0cltlKzM3Pj4wXT1uPj4+MjQsYXJbZSs0MD4+Ml09MTY3NzcyMTUmbix0cltlKzM2Pj4wXT0xLGFyWyhlPWUrMTZ8MCk+PjJdPTQrKDB8YXJbZT4+Ml0pLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIGY9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG49QSk+PjJdPWFyW3I+PjJdLGFyW24rND4+Ml09Zix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1pKTthcltmPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsb28oQSwyLDEwMCxmKSx1cj0oMDw9KDB8dHJbZisxMT4+MF0pfHx2dSgwfGFyW2Y+PjJdKSxpKX1mdW5jdGlvbiAkQShBLGUscixpKXt2YXIgZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGPTAsUj0wLE49MCxfPTAsWT0wO3VyPShWPXVyKSsyMDh8MCxOPShyfD0wKSsxNnwwLGM9cisyNHwwLGw9NCsoVz1WKzE4NHwwKXwwLHU9KGV8PTApKzQ0fDAsYj1lKzQ4fDAsaz0xMisoQz0oST1WKSsyNHwwKXwwLGg9NCtDfDAsdz1zPTY0K0N8MCx2PTEzNitDfDAsbT0xNDArQ3wwLFo9NjArQ3wwLHA9MTErKFg9VisxOTJ8MCl8MCx5PWQ9OCtDfDAsQj0xMSsoRz1WKzE2OHwwKXwwLEU9MTErKGc9NDQrQ3wwKXwwLGY9ZSs1MnwwLG49LTEhPSgwfChpfD0wKSksbz0xMSsodD1JKzh8MCl8MCxhPShBfD0wKSs4fDAsZT0wO0E6Zm9yKDshKDA9PSgwfGFyWyhSPU4pPj4yXSkmMD09KDB8YXJbUis0Pj4yXSl8fDB8dHJbYz4+MF0pOyl7YXJbVz4+Ml09MCxhcltsPj4yXT0wLEFlKEkscixXKTtkb3tpZigoMHxhcltJPj4yXSk9PSgwfGFyWzE0MTQ4XSkpe2lmKChSPUY9MHxhcltiPj4yXSktKDB8YXJbdT4+Ml0pPj4zPj4+MDw9MmU0KXtSPj4+MDwoMHxhcltmPj4yXSk+Pj4wPyhhcltGPj4yXT1hcltXPj4yXSxhcltSKzQ+PjJdPWFyW2w+PjJdLGFyW1c+PjJdPTAsYXJbbD4+Ml09MCxhcltiPj4yXT1SKzgpOmVlKHUsVyksUj0obiYoMHwoZT1lKzF8MCkpPT0oMHxpKSk8PDMxPj4zMTticmVha31hcltkPj4yXT00NTI0LGFyW0M+PjJdPTE4OCxhcltzPj4yXT0yMDgsYXJbaD4+Ml09MCxKZih3LGspLGFyW3Y+PjJdPTAsYXJbbT4+Ml09LTEsYXJbQz4+Ml09NDUwNCxhcltzPj4yXT00NTQ0LGFyW2Q+PjJdPTQ1MjQsU2YoayksYXJbaz4+Ml09NDM0MCxhcltnPj4yXT0wLGFyWzQrZz4+Ml09MCxhcls4K2c+PjJdPTAsYXJbMTIrZz4+Ml09MCxhcltaPj4yXT0yNCxhcltYPj4yXT0wLGFyWzQrWD4+Ml09MCxhcls4K1g+PjJdPTAsWGUoayxYKSwoMHx0cltwPj4wXSk8MCYmdnUoMHxhcltYPj4yXSksV2UoMHxMZigwfFdlKHksMTkyNzMsMzApLDJlNCksMTkzMDQsMTApLEllKEcsayksb28oQSw2LDFlMyxHKSwoMHx0cltCPj4wXSk8MCYmdnUoMHxhcltHPj4yXSksYXJbQz4+Ml09NDUwNCxhcltzPj4yXT00NTQ0LGFyW3k+PjJdPTQ1MjQsYXJbaz4+Ml09NDM0MCwoMHx0cltFPj4wXSk8MCYmdnUoMHxhcltnPj4yXSksa2YoayksX2YoKSxiZihzKSxSPTF9ZWxzZSBGPTB8YXJbKFk9SSkrND4+Ml0sYXJbKFI9QSk+PjJdPWFyW1k+PjJdLGFyW1IrND4+Ml09RixhclthPj4yXT1hclt0Pj4yXSxhcls0K2E+PjJdPWFyWzQrdD4+Ml0sYXJbOCthPj4yXT1hcls4K3Q+PjJdLGFyW3Q+PjJdPTAsYXJbNCt0Pj4yXT0wLGFyWzgrdD4+Ml09MCxSPTF9d2hpbGUoMCk7c3dpdGNoKCgwfHRyW28+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSwwfChGPTB8YXJbbD4+Ml0pJiZkdShGKSwzJlIpe2Nhc2UgMDpicmVhaztjYXNlIDM6YnJlYWsgQTtkZWZhdWx0Ol89Mjg7YnJlYWsgQX19dXI9KDI4IT0oMHxfKSYmKDB8dHJbYz4+MF0/KGFyW1g+PjJdPTAsYXJbNCtYPj4yXT0wLGFyWzgrWD4+Ml09MCxvbyhBLDIsMTAwLFgpLCgwfHRyWzExK1g+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKSk6KF89MHxhclsoTj01NjU5MikrND4+Ml0sYXJbKFk9QSk+PjJdPWFyW04+PjJdLGFyW1krND4+Ml09Xyx5dShhLDU2NjAwKSkpLFYpfWZ1bmN0aW9uIEFlKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDt1cj0oYj11cikrMzIwfDAscD1iKzIxNnwwLGw9YisxNDR8MCxhPShaPWIpKzMwNHwwLG49YisyOTJ8MCxpPWIrMjgwfDAsZj1iKzI2OHwwLHQ9YisyNTZ8MCxjPWIrMjQ4fDAsYXJbKHU9YisxNjh8MCk+PjJdPTQyNjQsbz04K3V8MCxhcls0MCt1Pj4yXT0wLGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxhclsxMitvPj4yXT0wLGFyWzE2K28+PjJdPTAsYXJbMjArbz4+Ml09MCxhclsyNCtvPj4yXT0wLG9yWzI4K28+PjFdPTAscmUobCx1LGUpO0E6ZG97aWYoMHxhcltsPj4yXSlCPTB8YXJbKHA9bCkrND4+Ml0sYXJbKHk9QSk+PjJdPWFyW3A+PjJdLGFyW3krND4+Ml09QixCPTgrbHwwLGFyWyh5PUErOHwwKT4+Ml09YXJbQj4+Ml0sYXJbeSs0Pj4yXT1hcltCKzQ+PjJdLGFyW3krOD4+Ml09YXJbQis4Pj4yXSxhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTA7ZWxzZXtpZigwfHRyW2UrMjQ+PjBdKXthcltwPj4yXT0wLGFyW3ArND4+Ml09MCxhcltwKzg+PjJdPTAsb28oQSwyLDEwMCxwKSwoMHx0cltwKzExPj4wXSk8MCYmdnUoMHxhcltwPj4yXSk7YnJlYWt9cz0wfGFyWzIwK3U+PjJdO2U6ZG97aWYoKDB8cyk8MTc2ODcxNDA4Myl7aWYoKDB8cyk8MTcxODkwOTI5Nil7aWYoKDB8cyk8MTY2ODI0NjY0Mil7aWYoKDB8cyk8MTYzNTEzNTgxMSl7c3dpdGNoKDB8cyl7Y2FzZSAxNjM1MDg4NDUxOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoOTYpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTE5NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LGQ9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1kLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1kO2JyZWFrfXpsKCl9fXdoaWxlKDApO3Y9MHxhclsodz0zNit1fDApKzQ+PjJdLGFyWyh5PXMrNTJ8MCk+PjJdPWFyW3c+PjJdLGFyW3krND4+Ml09dixhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01MjI0LGFyWyh5PXMrNzJ8MCk+PjJdPTAsYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5KzEyPj4yXT0wLGFyW3krMTY+PjJdPTAsYXJbeSsyMD4+Ml09MDticmVha31pZigoMHxzKTwxNjY4MDQ3MjE2KXtzd2l0Y2goMHxzKXtjYXNlIDE2MzUxMzU4MTE6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg5NiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NTU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7Qj0wfGh1KHcpLGFyW2s+PjJdPUIseT0oYXJbZD4+Ml09Qikrd3wwLGFyW2g+PjJdPXksaGIoMHxCLDB8diwwfHcpLGFyW2s+PjJdPXk7YnJlYWt9emwoKX19d2hpbGUoMCk7Zm9yKHc9MHxhclsoQj0zNit1fDApKzQ+PjJdLGFyWyhoPXMrNTJ8MCk+PjJdPWFyW0I+PjJdLGFyW2grND4+Ml09dyxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01NTg0LHRyW3MrNzI+PjBdPTEsdz0oaD1zKzczfDApKzIzfDA7KDB8KGg9aCsxfCh0cltoPj4wXT0wKSkpPCgwfHcpOyk7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNjY4MDQ3MjE2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTUzNzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTQwNCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTEsYXJbcys4MD4+Ml09MCxhcltzKzg0Pj4yXT0xLGFyW3MrODg+PjJdPTAsYXJbcys5Mj4+Ml09MSxhcltzKzk2Pj4yXT0wLGFyW3MrMTAwPj4yXT0xO2JyZWFrfWlmKCgwfHMpPDE2ODQ2MzExNDIpe3N3aXRjaCgwfHMpe2Nhc2UgMTY2ODI0NjY0MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDgwKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU5MTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTk0NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTA7YnJlYWt9aWYoKDB8cyk8MTY4NTIxODY2Mil7c3dpdGNoKDB8cyl7Y2FzZSAxNjg0NjMxMTQyOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTczNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01NzY0O2JyZWFrfXN3aXRjaCgwfHMpe2Nhc2UgMTY4NTIxODY2MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDcyKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU3OTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTgyNDticmVha31pZigoMHxzKTwxNzUyNTg5MTIzKXtpZigoMHxzKTwxNzM1NTUzMTMyKXtzd2l0Y2goMHxzKXtjYXNlIDE3MTg5MDkyOTY6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg5NiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00NjAwLGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ0MzYsYXJbKEI9cys3MnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MDticmVha31pZigoMHxzKTwxNzUxNDExODI2KXtzd2l0Y2goMHxzKXtjYXNlIDE3MzU1NTMxMzI6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4OCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01Njc2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU3MDQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wLGFyW3MrODA+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzUxNDExODI2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ2NTYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDY4NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTE4ODU5NTQ5MzIsYXJbKEI9cys4MHwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltCKzIwPj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE3NjgxODYyMjgpe3N3aXRjaCgwfHMpe2Nhc2UgMTc1MjU4OTEyMzpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDEyMCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NDk2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU1MjQsYXJbcys4MD4+Ml09MCxhcltzKzg0Pj4yXT0wLHRyW3MrMTA0Pj4wXT00LGFyW3MrMTA4Pj4yXT0wLGFyW3MrMTEyPj4yXT0wLGFyW3MrMTE2Pj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE3Njg1MTcyMjIpe3N3aXRjaCgwfHMpe2Nhc2UgMTc2ODE4NjIyODpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDEwNCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01NjE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTU2NDQsYXJbKEI9cys3MnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltCKzIwPj4yXT0wLGFyW0IrMjQ+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzY4NTE3MjIyOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NDgzNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT00ODY0O2JyZWFrfWlmKCgwfHMpPDE3NjkxMDQ3NDIpe2lmKDE3Njg5NzMxNjc8PSgwfHMpKXtpZigoMHxzKTwxNzY4OTc1NzEzKXtzd2l0Y2goMHxzKXtjYXNlIDE3Njg5NzMxNjc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg3MiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MDE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUwNDQ7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxNzY4OTc3MDA4OnM9MHxodSg3MiksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00OTU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ5ODQ7YnJlYWsgZTtjYXNlIDE3Njg5NzU3MTM6cz0wfGh1KDg4KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTUwNzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTEwNCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTAsYXJbcys4MD4+Ml09MDticmVhayBlO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX19aWYoKDB8cyk8MTc2ODc3ODA5OCl7c3dpdGNoKDB8cyl7Y2FzZSAxNzY4NzE0MDgzOmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoMTA0KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ3NzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDgwNCxCPXMrNzJ8MCxhcltzKzk2Pj4yXT0wLGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsdHJbQisyMD4+MF09MDticmVha31pZigoMHxzKTwxNzY4ODQyODUzKXtzd2l0Y2goMHxzKXtjYXNlIDE3Njg3NzgwOTg6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MzE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUzNDQsdHJbcys3Mj4+MF09MDticmVha31zd2l0Y2goMHxzKXtjYXNlIDE3Njg4NDI4NTM6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSgxNDQpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NDg5NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO2ZvcihoPTB8YXJbKHc9MzYrdXwwKSs0Pj4yXSxhclsoZD1zKzUyfDApPj4yXT1hclt3Pj4yXSxhcltkKzQ+PjJdPWgsYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDkyNCxhcltzKzcyPj4yXT0wLHc9KGg9ZD1zKzgwfChvcltzKzc2Pj4xXT0wKSkrNjB8MDsoMHwoaD1oKzR8KGFyW2g+PjJdPTApKSk8KDB8dyk7KTt0cltkKzYwPj4wXT0wO2JyZWFrfWlmKCgwfHMpPDE4MzUzNjU0NzMpe2lmKCgwfHMpPDE3NjkxMDczMTYpe3N3aXRjaCgwfHMpe2Nhc2UgMTc2OTEwNDc0MjpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDg4KSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTU0MzYsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NTQ2NCxhcltzKzcyPj4yXT0wLGFyW3MrNzY+PjJdPTAsYXJbcys4MD4+Ml09MDticmVha31pZigoMHxzKTwxNzY5MTczMDkzKXtzd2l0Y2goMHxzKXtjYXNlIDE3NjkxMDczMTY6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MjU2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUyODQsYXJbcys3Mj4+Ml09MDticmVha31zd2l0Y2goMHxzKXtjYXNlIDE3NjkxNzMwOTM6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01MTM2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTUxNjQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wO2JyZWFrfWlmKCgwfHMpPDE4ODU5NjAyOTcpe2lmKCgwfHMpPDE4ODU5NTkyNzcpe3N3aXRjaCgwfHMpe2Nhc2UgMTgzNTM2NTQ3MzpicmVhaztkZWZhdWx0Omc9MTMzO2JyZWFrIGV9cz0wfGh1KDcyKSxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3M+PjJdPTQ2MjgsYXJbKG09cysxNnwwKT4+Ml09NDI2NCxhclsoZD1zKzI0fDApPj4yXT1hcltvPj4yXSxhcltkKzQ+PjJdPWFyWzQrbz4+Ml0sYXJbZCs4Pj4yXT1hcls4K28+PjJdLGFyW2QrMTI+PjJdPWFyWzEyK28+PjJdLGFyWyhkPXMrNDB8MCk+PjJdPTAsYXJbKGs9cys0NHwwKT4+Ml09MCx2PShhclsoaD1zKzQ4fDApPj4yXT0wKXxhclsyNCt1Pj4yXSx3PSgwfGFyWzI4K3U+PjJdKS12fDA7ZG97aWYoMHx3KXtpZighKCgwfHcpPDApKXt5PTB8aHUodyksYXJbaz4+Ml09eSxCPShhcltkPj4yXT15KSt3fDAsYXJbaD4+Ml09QixoYigwfHksMHx2LDB8dyksYXJbaz4+Ml09QjticmVha316bCgpfX13aGlsZSgwKTt5PTB8YXJbKHY9MzYrdXwwKSs0Pj4yXSxhclsoQj1zKzUyfDApPj4yXT1hclt2Pj4yXSxhcltCKzQ+PjJdPXksYXJbcys2MD4+Ml09MCxhcltzKzY0Pj4yXT0wLGFyW3MrNjg+PjJdPTAsYXJbbT4+Ml09NDQ2ODticmVha31zd2l0Y2goMHxzKXtjYXNlIDE4ODU5NTkyNzc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4MCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT00NzE2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTQ3NDQsYXJbcys3Mj4+Ml09MDticmVha31pZigoMHxzKTwxOTcwNDMzMDU2KXtzd2l0Y2goMHxzKXtjYXNlIDE4ODU5NjAyOTc6YnJlYWs7ZGVmYXVsdDpnPTEzMzticmVhayBlfXM9MHxodSg4OCksYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzPj4yXT01OTc2LGFyWyhtPXMrMTZ8MCk+PjJdPTQyNjQsYXJbKGQ9cysyNHwwKT4+Ml09YXJbbz4+Ml0sYXJbZCs0Pj4yXT1hcls0K28+PjJdLGFyW2QrOD4+Ml09YXJbOCtvPj4yXSxhcltkKzEyPj4yXT1hclsxMitvPj4yXSxhclsoZD1zKzQwfDApPj4yXT0wLGFyWyhrPXMrNDR8MCk+PjJdPTAsdj0oYXJbKGg9cys0OHwwKT4+Ml09MCl8YXJbMjQrdT4+Ml0sdz0oMHxhclsyOCt1Pj4yXSktdnwwO2Rve2lmKDB8dyl7aWYoISgoMHx3KTwwKSl7eT0wfGh1KHcpLGFyW2s+PjJdPXksQj0oYXJbZD4+Ml09eSkrd3wwLGFyW2g+PjJdPUIsaGIoMHx5LDB8diwwfHcpLGFyW2s+PjJdPUI7YnJlYWt9emwoKX19d2hpbGUoMCk7eT0wfGFyWyh2PTM2K3V8MCkrND4+Ml0sYXJbKEI9cys1MnwwKT4+Ml09YXJbdj4+Ml0sYXJbQis0Pj4yXT15LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wLGFyW20+PjJdPTYwMDQsYXJbcys3Mj4+Ml09MCxhcltzKzc2Pj4yXT0wLGFyW3MrODA+PjJdPTA7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxOTcwNDMzMDU2OmJyZWFrO2RlZmF1bHQ6Zz0xMzM7YnJlYWsgZX1zPTB8aHUoODgpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NTg1NixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsodj0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW3Y+PjJdLGFyW0IrND4+Ml09eSxhcltzKzYwPj4yXT0wLGFyW3MrNjQ+PjJdPTAsYXJbcys2OD4+Ml09MCxhclttPj4yXT01ODg0LGFyWyhCPXMrNzJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MDticmVha313aGlsZSgwKTtpZigxMzM9PSgwfGcpKXtzPTB8aHUoNzIpLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsYXJbcz4+Ml09NjAzNixhclsobT1zKzE2fDApPj4yXT00MjY0LGFyWyhkPXMrMjR8MCk+PjJdPWFyW28+PjJdLGFyW2QrND4+Ml09YXJbNCtvPj4yXSxhcltkKzg+PjJdPWFyWzgrbz4+Ml0sYXJbZCsxMj4+Ml09YXJbMTIrbz4+Ml0sYXJbKGQ9cys0MHwwKT4+Ml09MCxhclsoaz1zKzQ0fDApPj4yXT0wLHY9KGFyWyhoPXMrNDh8MCk+PjJdPTApfGFyWzI0K3U+PjJdLHc9KDB8YXJbMjgrdT4+Ml0pLXZ8MDtkb3tpZigwfHcpe2lmKCEoKDB8dyk8MCkpe3k9MHxodSh3KSxhcltrPj4yXT15LEI9KGFyW2Q+PjJdPXkpK3d8MCxhcltoPj4yXT1CLGhiKDB8eSwwfHYsMHx3KSxhcltrPj4yXT1CO2JyZWFrfXpsKCl9fXdoaWxlKDApO3k9MHxhclsoZz0zNit1fDApKzQ+PjJdLGFyWyhCPXMrNTJ8MCk+PjJdPWFyW2c+PjJdLGFyW0IrND4+Ml09eSxhclttPj4yXT00NDA0LGFyW3MrNjA+PjJdPTAsYXJbcys2ND4+Ml09MCxhcltzKzY4Pj4yXT0wfWc9bSxkPTB8YXJbKGs9byk+PjJdLGs9MHxhcltrKzQ+PjJdLGg9MHxhclsodj0xNit1fDApPj4yXTtkb3tpZihrPj4+MDwwfDA9PSgwfGspJmQ+Pj4wPGg+Pj4wKWs9Wis2NHwwLGFyWyh3PVorOHwwKT4+Ml09NDUyNCxoPVorMTJ8MCxhcltaPj4yXT0xODgsYXJbaz4+Ml09MjA4LEpmKForNjR8KGFyW1orND4+Ml09MCksaCksYXJbWisxMzY+PjJdPTAsYXJbWisxNDA+PjJdPS0xLGFyW1o+PjJdPTQ1MDQsYXJbaz4+Ml09NDU0NCxhclt3Pj4yXT00NTI0LFNmKGgpLGFyW2g+PjJdPTQzNDAsYXJbKHc9Wis0NHwwKT4+Ml09MCxhclt3KzQ+PjJdPTAsYXJbdys4Pj4yXT0wLGFyW3crMTI+PjJdPTAsYXJbWis2MD4+Ml09MjQsYXJbcD4+Ml09MCxhcltwKzQ+PjJdPTAsYXJbcCs4Pj4yXT0wLFhlKGgscCksKDB8dHJbcCsxMT4+MF0pPDAmJnZ1KDB8YXJbcD4+Ml0pLHk9MHxXZShkPVorOHwwLDE5Mzg0LDEwKSxCPTB8V2UoMHxLZih5LDB8YXJbKEI9byk+PjJdLDB8YXJbQis0Pj4yXSksMTkzOTUsMzQpLFdlKDB8TGYoQiwwfGFyW3Y+PjJdKSwxOTQzMCw3KSxJZShhLGgpLG9vKEEsMiwxMDEsYSksKDB8dHJbMTErYT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbaz4+Ml09NDU0NCxhcltkPj4yXT00NTI0LGFyW2g+PjJdPTQzNDAsKDB8dHJbdysxMT4+MF0pPDAmJnZ1KDB8YXJbdz4+Ml0pLGtmKGgpLF9mKCksYmYoayk7ZWxzZXtpZigyMDwoMHxhcltlKzEyPj4yXSkpe2ZvcihhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxkPShhcls4K24+PjJdPTApfGh1KDY0KSxhcltuPj4yXT1kLGFyWzgrbj4+Ml09LTIxNDc0ODM1ODQsaz0xOTQzOCx3PShoPWQpKyhhcls0K24+PjJdPTYxKXwwO3RyW2g+PjBdPTB8dHJbaz4+MF0saz1rKzF8MCwoMHwoaD1oKzF8MCkpPCgwfHcpOyk7aWYodHJbZCs2MT4+MF09MCxvbyhBLDYsMWUzLG4pLDA8PSgwfHRyWzExK24+PjBdKSlicmVhazt2dSgwfGFyW24+PjJdKTticmVha31pZigwfE5BKGUsQj0wfG9iKDB8ZCwwfGssMHxoLDApLEQpKXtpZihhcltpPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsb28oQSwyLDEwMCxpKSwwPD0oMHx0clsxMStpPj4wXSkpYnJlYWs7dnUoMHxhcltpPj4yXSk7YnJlYWt9aWYoZD0wfGFyWyhrPW8pPj4yXSwoMHwoaz0wfGFyW2srND4+Ml0pKTwwKXtpZihhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsb28oQSwyLDEwMSxmKSwwPD0oMHx0clsxMStmPj4wXSkpYnJlYWs7dnUoMHxhcltmPj4yXSk7YnJlYWt9aWYoaD0wfG9iKDB8ZCwwfGssMHxhclt2Pj4yXSwwKSx3PUQsKDB8KHk9MHxhclsoQj1lKzE2fDApKzQ+PjJdKSk8KDB8dyl8KCgwfHkpPT0oMHx3KT8oMHxhcltCPj4yXSk+Pj4wPGg+Pj4wOjApKXtpZihhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSwyLDEwMSx0KSwwPD0oMHx0clsxMSt0Pj4wXSkpYnJlYWs7dnUoMHxhclt0Pj4yXSk7YnJlYWt9aWYoYXJbYz4+Ml09YXJbZT4+Ml0sZD00K2N8MCxrPTB8YXJbZSs0Pj4yXSwwfChhcltkPj4yXT1rKSYmYnUoayksV0EocCxjLGgsdyxlKSwwfChkPTB8YXJbZD4+Ml0pJiZkdShkKSxuc1sxMjcmYXJbMjArKDB8YXJbbT4+Ml0pPj4yXV0oWixtLHApLGQ9MHxhclsoaz1aKSs0Pj4yXSxhclsodj1sKT4+Ml09YXJbaz4+Ml0sYXJbdis0Pj4yXT1kLGQ9Wis4fDAsKDB8dHJbKGs9KHY9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbaz4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hcltkPj4yXSxhclt2KzQ+PjJdPWFyW2QrND4+Ml0sYXJbdis4Pj4yXT1hcltkKzg+PjJdLCgwfGFyW2w+PjJdKT09KDB8YXJbMTQxNDhdKSYmKGFyW3I+PjJdPWcsZD0wfGFyWyhCPXIrNHwwKT4+Ml0sYXJbQj4+Ml09cyxzPShkJiZkdShkKSwwKSksaz0wfGFyWyhkPXc9cCsxNnwwKT4+Ml0sMDwoMHwoZD0wfGFyW2QrND4+Ml0pKXwwPT0oMHxkKSYwPGs+Pj4wJiYoKGg9MHxhcltwKzg+PjJdKSYmKF9BKGgsayxkKSxrPTB8YXJbKGQ9dyk+PjJdLGQ9MHxhcltkKzQ+PjJdKSx5PTB8YXJbcD4+Ml0sQj0wfGFyW3k+PjJdLFo9MHxhcltCKzIwPj4yXSxCPTB8dGIoMHwoQj0wfGpiWzEyNyZhcltCKzg+PjJdXSh5KSksMHxELDB8aywwfGQpLHhiWzYzJlpdKHksQixEKSxhclsoQj13KT4+Ml09MCxhcltCKzQ+PjJdPTApLEI9MHxhclsoeT1sKSs0Pj4yXSxhclsoZD1BKT4+Ml09YXJbeT4+Ml0sYXJbZCs0Pj4yXT1CLGFyWyhkPUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbZCs0Pj4yXT1hclt2KzQ+PjJdLGFyW2QrOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwoZD0wfGFyW3ArND4+Ml0pJiZkdShkKSwhcylicmVhayBBfX13aGlsZSgwKTtkdShzKX19d2hpbGUoMCk7KDB8dHJbKHM9OCtsfDApKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSksYXJbdT4+Ml09NDI2NCx1cj0oKGQ9MHxhclsyNCt1Pj4yXSkmJigoMHxhclsocz0yOCt1fDApPj4yXSkhPSgwfGQpJiYoYXJbcz4+Ml09ZCksdnUoZCkpLGIpfWZ1bmN0aW9uIGVlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIHJlKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KG89dXIpKzIwOHwwLGs9bysxOTZ8MCxhPW8rMTg0fDAsYz1vKzI0fDAsaT1vKzQwfDAsZj1vKzEyfDAsbj1vLDB8TkEocnw9MCw4LDApKXJldHVybiBhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsb28oQSwyLDEwMCxhKSwwPD0oMHx0clthKzExPj4wXSl8fHZ1KDB8YXJbYT4+Ml0pLHZvaWQodXI9byk7cz0wfEZBKHIpLGFyWyhhPWI9ZSs4fDApPj4yXT1zLGE9KGFyW2ErND4+Ml09MCl8RkEociksYXJbKHM9ZSsyMHwwKT4+Ml09YSxhclsodD1lKzE2fDApPj4yXT04LHU9Yjtkb3tpZigxPT0oMHxhclt1Pj4yXSkmMD09KDB8YXJbdSs0Pj4yXSkpe2lmKDB8TkEociw4LDApKXJldHVybiBhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsb28oQSwyLDEwMCxjKSwwPD0oMHx0cltjKzExPj4wXSl8fHZ1KDB8YXJbYz4+Ml0pLHZvaWQodXI9byk7aWYobD0wfEZBKHIpLGM9MHxGQShyKSxhclsoYT1iKT4+Ml09YyxhclthKzQ+PjJdPWwsYXJbdD4+Ml09OCsoMHxhclt0Pj4yXSksYT02NCtpfDAsYXJbKGw9OCtpfDApPj4yXT00NTI0LGM9MTIraXwwLGFyW2k+PjJdPTE4OCxhclthPj4yXT0yMDgsSmYoNjQraXwoYXJbNCtpPj4yXT0wKSxjKSxhclsxMzYraT4+Ml09MCxhclsxNDAraT4+Ml09LTEsYXJbaT4+Ml09NDUwNCxhclthPj4yXT00NTQ0LGFyW2w+PjJdPTQ1MjQsU2YoYyksYXJbYz4+Ml09NDM0MCxhclsobD00NCtpfDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbCsxMj4+Ml09MCxhcls2MCtpPj4yXT0yNCxhcltrPj4yXT0wLGFyW2srND4+Ml09MCxhcltrKzg+PjJdPTAsWGUoYyxrKSwoMHx0cltrKzExPj4wXSk8MCYmdnUoMHxhcltrPj4yXSksdz0wfFdlKHU9OCtpfDAsMjM0MjcsOSksV2UoMHxLZih3LDB8YXJbKGg9Yik+PjJdLDB8YXJbaCs0Pj4yXSksMjM0MzcsMjQpLDI2ODQzNTQ1NTwoaD0wfGFyW2IrND4+Ml0pPj4+MHwyNjg0MzU0NTU9PSgwfGgpJjQyOTQ5NjcyOTU8KDB8YXJbYj4+Ml0pPj4+MClyZXR1cm4gSWUoZixjKSxvbyhBLDYsMWUzLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxhcltpPj4yXT00NTA0LGFyW2E+PjJdPTQ1NDQsYXJbdT4+Ml09NDUyNCxhcltjPj4yXT00MzQwLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxrZihjKSxfZigpLGJmKGEpLHZvaWQodXI9byk7YXJbaT4+Ml09NDUwNCxhclthPj4yXT00NTQ0LGFyW3U+PjJdPTQ1MjQsYXJbYz4+Ml09NDM0MCwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksa2YoYyksX2YoKSxiZihhKSxhPTB8YXJbcz4+Ml07YnJlYWt9fXdoaWxlKDApO2lmKDE5NzA2Mjg5NjQ9PSgwfGEpKXtpZigwfE5BKHIsMTYsMCkpcmV0dXJuIGFyW24+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxvbyhBLDIsMTAwLG4pLDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksdm9pZCh1cj1vKTtkb3tpZigwfENBKHIsMTYsMCkpe2lmKGI9ZSsyNHwwLDE2PD0oYz0odT0wfGFyWyhhPWUrMjh8MCk+PjJdKS0obD0wfGFyW2I+PjJdKXwwKT4+PjA/MTYhPSgwfGMpJiYoMHx1KSE9KDB8KGQ9bCsxNnwwKSkmJihhclthPj4yXT1kKTpUQShiLDE2LWN8MCksYT0wfGFyW3I+PjJdLGM9MHxhcltyKzQ+PjJdKXtidShjKSx4Yls2MyZhclsxNisoMHxhclthPj4yXSk+PjJdXShhLDB8YXJbYj4+Ml0sMTYpLGR1KGMpO2JyZWFrfXhiWzYzJmFyWzE2KygwfGFyW2E+PjJdKT4+Ml1dKGEsMHxhcltiPj4yXSwxNik7YnJlYWt9fXdoaWxlKDApO2FyW3Q+PjJdPTE2KygwfGFyW3Q+PjJdKX0wfHRyW3IrMjQ+PjBdPyhhcltrPj4yXT0wLGFyW2srND4+Ml09MCxhcltrKzg+PjJdPTAsb28oQSwyLDEwMCxrKSwoMHx0cltrKzExPj4wXSk8MCYmdnUoMHxhcltrPj4yXSkpOihoPTB8YXJbKGs9NTY1OTIpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltrPj4yXSxhclt3KzQ+PjJdPWgseXUoQSs4fDAsNTY2MDApKSx1cj1vfWZ1bmN0aW9uIGllKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wO2lmKHVyPShpPXVyKSsxNnwwLGY9aSwhKDB8TkEocnw9MCw3LDApKSlyZXR1cm4gZj0wfFZBKHIpLG9yW2UrND4+MV09ZixmPTB8VkEociksb3JbZSs2Pj4xXT1mLGY9MHxWQShyKSxvcltlKzg+PjFdPWYscj0oMjU1JigwfElBKHIpKSk+Pj43LHRyW2UrMTA+PjBdPXIscj0wfGFyWyhlPTU2NTkyKSs0Pj4yXSxhclsoZj1BKT4+Ml09YXJbZT4+Ml0sYXJbZis0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxvbyhBLDIsMTAwLGYpLHVyPSgwPD0oMHx0cltmKzExPj4wXSl8fHZ1KDB8YXJbZj4+Ml0pLGkpfWZ1bmN0aW9uIGZlKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7dXI9KHQ9dXIpKzE2fDAsbz10LG49MHxodSgzMiksYXJbNCtuPj4yXT0wLGFyWzgrbj4+Ml09MCxhcltuPj4yXT02MTIwLGE9MHxhcltlPj4yXSxhcltvPj4yXT0wLGFyWyhmPW8rNHwwKT4+Ml09MCxjPShhcltvKzg+PjJdPTApfGFyW3I+PjJdLGU9KDB8YXJbcis0Pj4yXSktY3wwLHI9Yztkb3tpZihlKXtpZighKCgwfGUpPDApKXtiPTB8aHUoZSkscz0oYXJbbz4+Ml09YikrZXwwLGFyW28rOD4+Ml09cyxoYigwfGIsMHxyLDB8ZSksbD1iLHU9YXJbZj4+Ml09czticmVha316bCgpfWVsc2Ugcz1iPXU9bD0wfXdoaWxlKDApO2lmKGFyWyhjPTEyK258MCk+PjJdPTYxNDgsYXJbMTYrbj4+Ml09YSxhclsocj0yMCtufDApPj4yXT0wLGFyWyhpPTI0K258MCk+PjJdPTAsKGFyWyhvPTI4K258MCk+PjJdPTApfChlPXUtbHwwKSYmKCgwfGUpPDAmJnpsKCksYT0wfGh1KGUpLGFyW2k+PjJdPWEsYXJbcj4+Ml09YSxhcltvPj4yXT1hK2UsMDwoMHwoZT11LWJ8MCkpJiYoaGIoMHxhLDB8YiwwfGUpLGFyW2k+PjJdPWErZSkpLCFiKXJldHVybiBzPUErNHwwLGFyW0E+PjJdPWMsYXJbcz4+Ml09bix2b2lkKHVyPXQpOygwfHMpIT0oMHxiKSYmKGFyW2Y+PjJdPWIpLHZ1KGIpLHM9QSs0fDAsYXJbQT4+Ml09YyxhcltzPj4yXT1uLHVyPXR9ZnVuY3Rpb24gbmUoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MDtpZih1cj0oYz11cikrMTYwfDAsZj1jKzEzNnwwLG89KHQ9YykrNTZ8MCxhPXQrNHwwLGFyW3Q+PjJdPTI5MixhcltvPj4yXT0zMTIsSmYodCs1NnwwLGEpLGFyW3QrMTI4Pj4yXT0wLGFyW3QrMTMyPj4yXT0tMSxhclt0Pj4yXT00MzA0LGFyW28+PjJdPTQzMjQsU2YoYSksYXJbYT4+Ml09NDM0MCxhclsobj10KzM2fDApPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsYXJbMTIrbj4+Ml09MCxhclt0KzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUoYSxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksbD0xKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPWwsKDB8KHU9MHxhcltlKzQ0Pj4yXSkpIT0oMHwoaT0wfGFyW2UrNDg+PjJdKSkpe2ZvcihiPTExK2Z8MCxzPTQrZnwwLGw9MSxlPXU7Oyl7aWYoIWwpe2lmKDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UodCwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO1dlKHQsMzAwODYsMSl9aWYodT0wfGFyW2U+PjJdLG5zWzEyNyZhcls4KygwfGFyW3U+PjJdKT4+Ml1dKGYsdSxyKSxXZSh0LChsPSh1PTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGw/MHxhcltzPj4yXToyNTUmdSksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChlPWUrOHwwKSk9PSgwfGkpKWJyZWFrO2w9MH1sPTB8YXJbcj4+Ml19aWYoYXJbcj4+Ml09KDB8bCk8MT8wOmwrLTF8MCxJZShBLGEpLGFyW3Q+PjJdPTQzMDQsYXJbbz4+Ml09NDMyNCxhclthPj4yXT00MzQwLDA8PSgwfHRyWzExK24+PjBdKSlyZXR1cm4ga2YoYSksR2YoKSxiZihvKSx2b2lkKHVyPWMpO3Z1KDB8YXJbbj4+Ml0pLGtmKGEpLEdmKCksYmYobyksdXI9Y31mdW5jdGlvbiB0ZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoYXJbKEF8PTApPj4yXT01NzA0LDB8KHI9MHxhclsoZT1BKzU2fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKGE9QSs2MHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7bz1pKy02NHwwLGFyW2E+PjJdPW8sMHwoZj0wfGFyW2krLTEyPj4yXSkmJigoMHwodD0wfGFyWyhuPWkrLTh8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksYXJbbz4+Ml09NDI2NCwwfChmPTB8YXJbaSstNDA+PjJdKSYmKCgwfGFyWyhpPWkrLTM2fDApPj4yXSkhPSgwfGYpJiYoYXJbaT4+Ml09ZiksdnUoZikpLCgwfChpPTB8YXJbYT4+Ml0pKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9aWYoYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKG49QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyh0PUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW3Q+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbdD4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbbj4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9ZnVuY3Rpb24gb2UoQSxlKXtlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MDthclsoQXw9MCk+PjJdPTQyNjQsZj1lKzh8MCxhclsoaT1BKzh8MCk+PjJdPWFyW2Y+PjJdLGFyW2krND4+Ml09YXJbZis0Pj4yXSxhcltpKzg+PjJdPWFyW2YrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZisxMj4+Ml0sZj1lKzI0fDAsYXJbKGk9QSsyNHwwKT4+Ml09MCxhclsobz1BKzI4fDApPj4yXT0wLChhcltBKzMyPj4yXT0wKXwocj0oMHxhclsobj1lKzI4fDApPj4yXSktKDB8YXJbZj4+Ml0pfDApJiYoKDB8cik8MCYmemwoKSx0PTB8aHUociksYXJbbz4+Ml09dCxhcltpPj4yXT10LGFyW0ErMzI+PjJdPXQrcixpPTB8YXJbZj4+Ml0sMDwoMHwocj0oMHxhcltuPj4yXSktaXwwKSkmJihoYigwfHQsMHxpLDB8ciksYXJbbz4+Ml09dCtyKSksdD0wfGFyWyhuPWUrMzZ8MCkrND4+Ml0sYXJbKG89QSszNnwwKT4+Ml09YXJbbj4+Ml0sYXJbbys0Pj4yXT10LGFyW0ErNDg+PjJdPWFyW2UrNDg+PjJdLEdlKEErNTJ8MCxlKzUyfDApfWZ1bmN0aW9uIGFlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MDtpPShBfD0wKSs0fDAsZj0wfGFyW0E+PjJdLDY3MTA4ODYzPChuPSh0PSgwfGFyW2k+PjJdKS1mPj42KSsxfDApPj4+MCYmemwoKSxmPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLWZ8MCk+PjUsZj1jPj42Pj4+MDwzMzU1NDQzMT9mPj4+MDxuPj4+MD9uOmY6NjcxMDg4NjM7ZG97aWYoZil7aWYoISg2NzEwODg2MzxmPj4+MCkpe249MHxodShmPDw2KTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2Ugbj0wfXdoaWxlKDApO2lmKHI9bisoZjw8Nil8MCxvZSh0PW89bisodDw8Nil8MCxlKSxhPW8rNjR8MCxlPTB8YXJbQT4+Ml0sKDB8KGY9MHxhcltpPj4yXSkpPT0oMHxlKSlmPXQsbj1jPWU7ZWxzZXtmb3Iobj1vO29lKG4rLTY0fDAsZj1mKy02NHwwKSx0PW49dCstNjR8MCwoMHxmKSE9KDB8ZSk7KTtmPXQsYz0wfGFyW0E+PjJdLG49MHxhcltpPj4yXX1pZihhcltBPj4yXT1mLGFyW2k+PjJdPWEsYXJbbD4+Ml09ciwoMHxuKSE9KDB8KGE9YykpKWZvcihvPW47bz0oZT1vKSstNjR8MCwwfChmPTB8YXJbZSstMTI+PjJdKSYmKCgwfCh0PTB8YXJbKG49ZSstOHwwKT4+Ml0pKSE9KDB8ZikmJihhcltuPj4yXT10Kyh+KCh0Ky00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSxhcltvPj4yXT00MjY0LDB8KG49MHxhcltlKy00MD4+Ml0pJiYoKDB8YXJbKGY9ZSstMzZ8MCk+PjJdKSE9KDB8bikmJihhcltmPj4yXT1uKSx2dShuKSksKDB8bykhPSgwfGEpOyk7YyYmdnUoYyl9ZnVuY3Rpb24gR2UoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MDthclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLChyPSh0PSgoYXJbQSs4Pj4yXT0wKXxhclsoZj1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCk+PjIpJiYoMTA3Mzc0MTgyMzxyPj4+MCYmemwoKSxpPTB8aHUodCksYXJbbj4+Ml09aSxhcltBPj4yXT1pLGFyW0ErOD4+Ml09aSsocjw8MiksQT0wfGFyW2U+PjJdLCgwfCh0PSgwfGFyW2Y+PjJdKS1BfDApKTw9MHx8KGhiKDB8aSwwfEEsMHx0KSxhcltuPj4yXT1pKyh0Pj4+Mjw8MikpKX1mdW5jdGlvbiBjZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wO2lmKGFyWyhBfD0wKT4+Ml09NTUyNCwwfChyPTB8YXJbKGU9QSs5MnwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhjPUErOTZ8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pOzspe2lmKGk9ZistMTZ8MCxhcltjPj4yXT1pLG89MHxhclsoYT1mKy0xMnwwKT4+Ml0pe2lmKCgwfChpPTB8YXJbKHQ9ZistOHwwKT4+Ml0pKT09KDB8bykpaT1vO2Vsc2V7Zm9yKDtmPWkrLTEyfDAsYXJbdD4+Ml09ZiwoMHwoaT0obj0wfGFyW2Y+PjJdKT8oKDB8YXJbKGk9aSstOHwwKT4+Ml0pIT0oMHxuKSYmKGFyW2k+PjJdPW4pLHZ1KG4pLDB8YXJbdD4+Ml0pOmYpKSE9KDB8byk7KTtpPTB8YXJbYT4+Ml19dnUoaSksaT0wfGFyW2M+PjJdfWlmKCgwfGkpPT0oMHxyKSlicmVhaztmPWl9cj0wfGFyW2U+PjJdfXZ1KHIpfWlmKGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhuPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhclt0Pj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW3Q+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW24+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIGxlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7cj0oQXw9MCkrNHwwLGk9MHxhcltBPj4yXSwyNjg0MzU0NTU8KGY9KG89KDB8YXJbcj4+Ml0pLWk+PjQpKzF8MCk+Pj4wJiZ6bCgpLGk9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktaXwwKT4+MyxpPWM+PjQ+Pj4wPDEzNDIxNzcyNz9pPj4+MDxmPj4+MD9mOmk6MjY4NDM1NDU1O2Rve2lmKGkpe2lmKCEoMjY4NDM1NDU1PGk+Pj4wKSl7dD0wfGh1KGk8PDQpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSB0PTB9d2hpbGUoMCk7aWYoYT10KyhpPDw0KXwwLG9yWyhuPWY9dCsobzw8NCl8MCk+PjFdPTB8b3JbZT4+MV0saT1lKzR8MCxhclt0KyhvPDw0KSsxMj4+Ml09MCxhclt0KyhvPDw0KSs0Pj4yXT1hcltpPj4yXSxjPWUrOHwwLGFyW3QrKG88PDQpKzg+PjJdPWFyW2M+PjJdLGU9ZSsxMnwwLGFyW3QrKG88PDQpKzEyPj4yXT1hcltlPj4yXSxhcltlPj4yXT0wLGFyW2M+PjJdPTAsZT1mKzE2fChhcltpPj4yXT0wKSx0PTB8YXJbQT4+Ml0sKDB8KGk9MHxhcltyPj4yXSkpPT0oMHx0KSlpPW4sZj1jPXQ7ZWxzZXtmb3IoO2k9KHU9aSkrLTE2fDAsb3JbZistMTY+PjFdPTB8b3JbaT4+MV0sYz11Ky0xMnwwLGFyWyhvPWYrLTEyfDApPj4yXT0wLGFyWyhiPWYrLTh8MCk+PjJdPTAsYXJbZistND4+Ml09MCxhcltvPj4yXT1hcltjPj4yXSxvPXUrLTh8MCxhcltiPj4yXT1hcltvPj4yXSx1PXUrLTR8MCxhcltmKy00Pj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGFyW28+PjJdPTAsbj1mPW4rLTE2fChhcltjPj4yXT0wKSwoMHxpKSE9KDB8dCk7KTtpPW4sYz0wfGFyW0E+PjJdLGY9MHxhcltyPj4yXX1pZihhcltBPj4yXT1pLGFyW3I+PjJdPWUsYXJbbD4+Ml09YSwoMHxmKSE9KDB8KEE9YykpKXthPWY7ZG97aWYoMHwoaT0wfGFyWyhlPWErLTEyfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKG89YSstOHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy0xMnwwLGFyW28+PjJdPW4sKDB8KGY9KHQ9MHxhcltuPj4yXSk/KCgwfGFyWyhmPWYrLTh8MCk+PjJdKSE9KDB8dCkmJihhcltmPj4yXT10KSx2dSh0KSwwfGFyW28+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWE9YSstMTZ8MH13aGlsZSgoMHxhKSE9KDB8QSkpfWMmJnZ1KEEpfWZ1bmN0aW9uIHVlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDM1NzkxMzk0MTwoZj0obz0oKDB8YXJbcj4+Ml0pLWl8MCkvMTJ8MCkrMXwwKT4+PjAmJnpsKCksaT0oYT0oKDB8YXJbKGM9QSs4fDApPj4yXSktaXwwKS8xMnwwKTw8MSxpPWE+Pj4wPDE3ODk1Njk3MD9pPj4+MDxmPj4+MD9mOmk6MzU3OTEzOTQxO2Rve2lmKGkpe2lmKCEoMzU3OTEzOTQxPGk+Pj4wKSl7dD0wfGh1KDEyKml8MCk7YnJlYWt9WnUoYz0wfFgoOCksNDQ1MTkpLGFyW2M+PjJdPTE3NjYwLEkoMHxjLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihuPWY9dCsoMTIqb3wwKXwwLGE9dCsoMTIqaXwwKXwwLGFyW3QrKDEyKm98MCkrOD4+Ml09MCxhcltmPj4yXT1hcltlPj4yXSxpPWUrNHwwLGFyW3QrKDEyKm98MCkrND4+Ml09YXJbaT4+Ml0sbD1lKzh8MCxhclt0KygxMipvfDApKzg+PjJdPWFyW2w+PjJdLGFyW2w+PjJdPTAsYXJbaT4+Ml09MCxvPWYrMTJ8KGFyW2U+PjJdPTApLHQ9MHxhcltBPj4yXSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfHQpKWk9bixmPWU9dDtlbHNle2Zvcig7aT0oZT1pKSstMTJ8MCxhclsobD1mKy0xMnwwKT4+Ml09MCxhclsodT1mKy04fDApPj4yXT0wLGFyW2YrLTQ+PjJdPTAsYXJbbD4+Ml09YXJbaT4+Ml0sbD1lKy04fDAsYXJbdT4+Ml09YXJbbD4+Ml0sZT1lKy00fDAsYXJbZistND4+Ml09YXJbZT4+Ml0sYXJbZT4+Ml09MCxhcltsPj4yXT0wLG49Zj1uKy0xMnwoYXJbaT4+Ml09MCksKDB8aSkhPSgwfHQpOyk7aT1uLGU9MHxhcltBPj4yXSxmPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09aSxhcltyPj4yXT1vLGFyW2M+PjJdPWEsKDB8ZikhPSgwfCh0PWUpKSlmb3IoOzB8KG49MHxhclsoZj0oaT1mKSstMTJ8MCk+PjJdKSYmKCgwfGFyWyhpPWkrLTh8MCk+PjJdKSE9KDB8bikmJihhcltpPj4yXT1uKSx2dShuKSksKDB8ZikhPSgwfHQpOyk7ZSYmdnUoZSl9ZnVuY3Rpb24gYmUoQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKGFyWyhBfD0wKT4+Ml09NTQ2NCwwfChyPTB8YXJbKGU9QSs1NnwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhhPUErNjB8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO289aSstNjR8MCxhclthPj4yXT1vLDB8KGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLGFyW28+PjJdPTQyNjQsMHwoZj0wfGFyW2krLTQwPj4yXSkmJigoMHxhclsoaT1pKy0zNnwwKT4+Ml0pIT0oMHxmKSYmKGFyW2k+PjJdPWYpLHZ1KGYpKSwoMHwoaT0wfGFyW2E+PjJdKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWlmKGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhuPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhclt0Pj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW3Q+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW24+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIHNlKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTA7YXJbKEF8PTApPj4yXT00MjY0LGY9ZSs4fDAsYXJbKGk9QSs4fDApPj4yXT1hcltmPj4yXSxhcltpKzQ+PjJdPWFyW2YrND4+Ml0sYXJbaSs4Pj4yXT1hcltmKzg+PjJdLGFyW2krMTI+PjJdPWFyW2YrMTI+PjJdLGY9ZSsyNHwwLGFyWyhpPUErMjR8MCk+PjJdPTAsYXJbKG89QSsyOHwwKT4+Ml09MCwoYXJbQSszMj4+Ml09MCl8KHI9KDB8YXJbKG49ZSsyOHwwKT4+Ml0pLSgwfGFyW2Y+PjJdKXwwKSYmKCgwfHIpPDAmJnpsKCksdD0wfGh1KHIpLGFyW28+PjJdPXQsYXJbaT4+Ml09dCxhcltBKzMyPj4yXT10K3IsaT0wfGFyW2Y+PjJdLDA8KDB8KHI9KDB8YXJbbj4+Ml0pLWl8MCkpJiYoaGIoMHx0LDB8aSwwfHIpLGFyW28+PjJdPXQrcikpLHQ9MHxhclsobj1lKzM2fDApKzQ+PjJdLGFyWyhvPUErMzZ8MCk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09dCxhcltBKzQ4Pj4yXT1hcltlKzQ4Pj4yXSxHZShBKzUyfDAsZSs1MnwwKX1mdW5jdGlvbiBkZShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aT0oQXw9MCkrNHwwLGY9MHxhcltBPj4yXSw2NzEwODg2Mzwobj0odD0oMHxhcltpPj4yXSktZj4+NikrMXwwKT4+PjAmJnpsKCksZj0oYz0oMHxhclsobD1BKzh8MCk+PjJdKS1mfDApPj41LGY9Yz4+Nj4+PjA8MzM1NTQ0MzE/Zj4+PjA8bj4+PjA/bjpmOjY3MTA4ODYzO2Rve2lmKGYpe2lmKCEoNjcxMDg4NjM8Zj4+PjApKXtuPTB8aHUoZjw8Nik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIG49MH13aGlsZSgwKTtpZihyPW4rKGY8PDYpfDAsc2UodD1vPW4rKHQ8PDYpfDAsZSksYT1vKzY0fDAsZT0wfGFyW0E+PjJdLCgwfChmPTB8YXJbaT4+Ml0pKT09KDB8ZSkpZj10LG49Yz1lO2Vsc2V7Zm9yKG49bztzZShuKy02NHwwLGY9ZistNjR8MCksdD1uPXQrLTY0fDAsKDB8ZikhPSgwfGUpOyk7Zj10LGM9MHxhcltBPj4yXSxuPTB8YXJbaT4+Ml19aWYoYXJbQT4+Ml09ZixhcltpPj4yXT1hLGFyW2w+PjJdPXIsKDB8bikhPSgwfChhPWMpKSlmb3Iobz1uO289KGU9bykrLTY0fDAsMHwoZj0wfGFyW2UrLTEyPj4yXSkmJigoMHwodD0wfGFyWyhuPWUrLTh8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksYXJbbz4+Ml09NDI2NCwwfChuPTB8YXJbZSstNDA+PjJdKSYmKCgwfGFyWyhmPWUrLTM2fDApPj4yXSkhPSgwfG4pJiYoYXJbZj4+Ml09biksdnUobikpLCgwfG8pIT0oMHxhKTspO2MmJnZ1KGMpfWZ1bmN0aW9uIGtlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIGhlKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtsPTB8YXJbKGI9KEF8PTApKzR8MCk+PjJdLHI9Zj0wfGFyW0E+PjJdLDg5NDc4NDg1PChuPShjPSgodD1sKS1mfDApLzQ4fDApKzF8MCk+Pj4wJiZ6bCgpLG89KHU9KCgwfGFyWyhpPUErOHwwKT4+Ml0pLWZ8MCkvNDh8MCk8PDEsbz11Pj4+MDw0NDczOTI0Mj9vPj4+MDxuPj4+MD9uOm86ODk0Nzg0ODU7ZG97aWYobyl7aWYoISg4OTQ3ODQ4NTxvPj4+MCkpe2E9MHxodSg0OCpvfDApO2JyZWFrfVp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCl9ZWxzZSBhPTB9d2hpbGUoMCk7aWYodT1hKyg0OCpvfDApfDAsYXJbKGY9bj1hKyg0OCpjfDApfDApPj4yXT1hcltlPj4yXSxvPWUrNHwwLGFyW2ErKDQ4KmN8MCkrND4+Ml09YXJbbz4+Ml0scz1lKzh8MCxhclthKyg0OCpjfDApKzg+PjJdPWFyW3M+PjJdLGFyW28+PjJdPTAsbz1lKzEyfChhcltzPj4yXT0wKSxhclsocz1hKyg0OCpjfDApKzEyfDApPj4yXT1hcltvPj4yXSxhcltzKzQ+PjJdPWFyW28rND4+Ml0sYXJbcys4Pj4yXT1hcltvKzg+PjJdLGFyW3MrMTI+PjJdPWFyW28rMTI+PjJdLHM9ZSsyOHwwLGFyW2ErKDQ4KmN8MCkrMjg+PjJdPWFyW3M+PjJdLG89ZSszMnwwLGFyW2ErKDQ4KmN8MCkrMzI+PjJdPWFyW28+PjJdLGFyW3M+PjJdPTAsYT1hKyg0OCpjfChhcltvPj4yXT0wKSkrMzZ8MCxjPWUrMzZ8MCxhclthPj4yXT1hcltjPj4yXSxhclthKzQ+PjJdPWFyW2MrND4+Ml0sYXJbYSs4Pj4yXT1hcltjKzg+PjJdLGE9bis0OHwwLCgwfHQpPT0oMHxyKSlvPWw7ZWxzZXtmb3IoO3Q9KGw9dCkrLTQ4fDAsYXJbbistNDg+PjJdPWFyW3Q+PjJdLHM9bCstNDR8MCxhcltuKy00ND4+Ml09YXJbcz4+Ml0sYz1sKy00MHwwLGFyW24rLTQwPj4yXT1hcltjPj4yXSxhcltzPj4yXT0wLHM9bCstMzZ8KGFyW2M+PjJdPTApLGFyWyhjPW4rLTM2fDApPj4yXT1hcltzPj4yXSxhcltjKzQ+PjJdPWFyW3MrND4+Ml0sYXJbYys4Pj4yXT1hcltzKzg+PjJdLGFyW2MrMTI+PjJdPWFyW3MrMTI+PjJdLGM9bCstMjB8MCxhcltuKy0yMD4+Ml09YXJbYz4+Ml0scz1sKy0xNnwwLGFyW24rLTE2Pj4yXT1hcltzPj4yXSxhcltjPj4yXT0wLGw9bCstMTJ8KGFyW3M+PjJdPTApLGFyWyhzPW4rLTEyfDApPj4yXT1hcltsPj4yXSxhcltzKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcys4Pj4yXT1hcltsKzg+PjJdLGY9bj1mKy00OHwwLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLG49MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8bikhPSgwfCh0PW8pKSlmb3IoOzB8KGY9MHxhcltuKy0xNj4+Ml0pJiZkdShmKSxmPTB8YXJbbistNDA+PjJdLG49bistNDh8MCwwfGYmJmR1KGYpLCgwfG4pIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIHdlKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDg5NDc4NDg1PChmPShvPSgoMHxhcltyPj4yXSktaXwwKS80OHwwKSsxfDApPj4+MCYmemwoKSxpPShhPSgoMHxhclsoYz1BKzh8MCk+PjJdKS1pfDApLzQ4fDApPDwxLGk9YT4+PjA8NDQ3MzkyNDI/aT4+PjA8Zj4+PjA/ZjppOjg5NDc4NDg1O2Rve2lmKGkpe2lmKCEoODk0Nzg0ODU8aT4+PjApKXt0PTB8aHUoNDgqaXwwKTticmVha31adShjPTB8WCg4KSw0NDUxOSksYXJbYz4+Ml09MTc2NjAsSSgwfGMsNDAxNiw0MjgpfWVsc2UgdD0wfXdoaWxlKDApO2lmKGE9dCsoNDgqaXwwKXwwLGFyWyhuPWY9dCsoNDgqb3wwKXwwKT4+Ml09YXJbZT4+Ml0sYXJbdCsoNDgqb3wwKSs0Pj4yXT1hcltlKzQ+PjJdLGk9MHxhcltlKzg+PjJdLDB8KGFyW3QrKDQ4Km98MCkrOD4+Ml09aSkmJmJ1KGkpLGw9ZSsxMnwwLGFyWyhpPXQrKDQ4Km98MCkrMTJ8MCk+PjJdPWFyW2w+PjJdLGFyW2krND4+Ml09YXJbbCs0Pj4yXSxhcltpKzg+PjJdPWFyW2wrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbdCsoNDgqb3wwKSsyOD4+Ml09YXJbZSsyOD4+Ml0saT0wfGFyW2UrMzI+PjJdLDB8KGFyW3QrKDQ4Km98MCkrMzI+PjJdPWkpJiZidShpKSxlPWUrMzZ8MCxhclsobz10Kyg0OCpvfDApKzM2fDApPj4yXT1hcltlPj4yXSxhcltvKzQ+PjJdPWFyW2UrND4+Ml0sYXJbbys4Pj4yXT1hcltlKzg+PjJdLG89Zis0OHwwLGU9MHxhcltBPj4yXSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfGUpKWk9bixmPXQ9ZTtlbHNle2Zvcig7aT0odD1pKSstNDh8MCxhcltmKy00OD4+Ml09YXJbaT4+Ml0sbD10Ky00NHwwLGFyW2YrLTQ0Pj4yXT1hcltsPj4yXSx1PXQrLTQwfDAsYXJbZistNDA+PjJdPWFyW3U+PjJdLGFyW2w+PjJdPTAsbD10Ky0zNnwoYXJbdT4+Ml09MCksYXJbKHU9ZistMzZ8MCk+PjJdPWFyW2w+PjJdLGFyW3UrND4+Ml09YXJbbCs0Pj4yXSxhclt1Kzg+PjJdPWFyW2wrOD4+Ml0sYXJbdSsxMj4+Ml09YXJbbCsxMj4+Ml0sdT10Ky0yMHwwLGFyW2YrLTIwPj4yXT1hclt1Pj4yXSxsPXQrLTE2fDAsYXJbZistMTY+PjJdPWFyW2w+PjJdLGFyW3U+PjJdPTAsdD10Ky0xMnwoYXJbbD4+Ml09MCksYXJbKGw9ZistMTJ8MCk+PjJdPWFyW3Q+PjJdLGFyW2wrND4+Ml09YXJbdCs0Pj4yXSxhcltsKzg+PjJdPWFyW3QrOD4+Ml0sbj1mPW4rLTQ4fDAsKDB8aSkhPSgwfGUpOyk7aT1uLHQ9MHxhcltBPj4yXSxmPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09aSxhcltyPj4yXT1vLGFyW2M+PjJdPWEsKDB8ZikhPSgwfChuPXQpKSlmb3IoOzB8KGk9MHxhcltmKy0xNj4+Ml0pJiZkdShpKSxpPTB8YXJbZistNDA+PjJdLGY9ZistNDh8MCwwfGkmJmR1KGkpLCgwfGYpIT0oMHxuKTspO3QmJnZ1KHQpfWZ1bmN0aW9uIHZlKEEsZSl7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKChlfD0wKT4+PjA8PSh0PTB8YXJbKGk9KEF8PTApKzh8MCk+PjJdKS0oZj1uPTB8YXJbKHU9QSs0fDApPj4yXSk+PjM+Pj4wKXJldHVybiB2YigwfG4sMCxlPDwzfDApLHZvaWQoYXJbdT4+Ml09ZisoZTw8MykpO3I9bD0wfGFyW0E+PjJdLDUzNjg3MDkxMTwobj0oYT1uLWw+PjMpK2V8MCk+Pj4wJiZ6bCgpLG89KGM9dC1sfDApPj4yLG89Yz4+Mz4+PjA8MjY4NDM1NDU1P28+Pj4wPG4+Pj4wP246bzo1MzY4NzA5MTE7ZG97aWYobyl7aWYoISg1MzY4NzA5MTE8bz4+PjApKXtjPTB8aHUobzw8Myk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZihuPWMrKGE8PDMpfDAsYz1jKyhvPDwzKXwwLHZiKDB8KHQ9biksMCxlPDwzfDApLGE9bisoZTw8Myl8MCwoMHxmKT09KDB8cikpbz1sO2Vsc2V7Zm9yKDtmPShsPWYpKy04fDAsYXJbbistOD4+Ml09YXJbZj4+Ml0sbD1sKy00fDAsYXJbbistND4+Ml09YXJbbD4+Ml0sYXJbZj4+Ml09MCx0PW49dCstOHwoYXJbbD4+Ml09MCksKDB8ZikhPSgwfHIpOyk7bz0wfGFyW0E+PjJdLGY9MHxhclt1Pj4yXX1pZihhcltBPj4yXT10LGFyW3U+PjJdPWEsYXJbaT4+Ml09YywoMHxmKSE9KDB8KHQ9bykpKWZvcig7bj0wfGFyW2YrLTQ+PjJdLGY9ZistOHwwLDB8biYmZHUobiksKDB8ZikhPSgwfHQpOyk7byYmdnUobyl9ZnVuY3Rpb24gbWUoQSxlLHIsaSxmLG4pe0F8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHk9MCxCPTAsRT0wLFg9MDt1cj0ocD11cikrMTI4fDAsdT1wKzEwOHwwLGI9cCsxMTV8MCxaPXArOTZ8MCxzPXArMTEyfDAsZz1wKzU2fDAsaz1wKzMyfDAsaD1wKzh8MCxkPXAsWD0wfGFyWyhlfD0wKT4+Ml0seT0wfGFyW1grMjQ+PjJdLEI9MHxhcltYKzI4Pj4yXTtkb3tpZigwfEVvKFgsNikpe2lmKCgwfFhvKDB8YXJbZT4+Ml0sNikpPT0oMHx5KSYmKDB8V28oMHxhcltlPj4yXSw2KSk9PSgwfEIpKWJyZWFrO3JldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApfX13aGlsZSgwKTtpZigwPT0oMHxyKSYzPGk+Pj4wKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKFg9MHxhcltlPj4yXSxhPTB8YXJbWCszMj4+Ml0sYz0wfGFyW1grMzY+PjJdLEU9MHxFbyhYLDYpPzE6MHx0bCgwfGFyWzM2KygwfGFyW2U+PjJdKT4+Ml0pLHk9MHxhcltlPj4yXSxsPTB8YXJbeSs0MD4+Ml0sKFg9MD09KDB8KG09MHxhclt5KzQ0Pj4yXSkpKXx8KGJ1KG0pLHk9MHxhcltlPj4yXSksSW8oWix5KSwwfGFyWzgrWj4+Ml18fHNyKDM0Mzc3LDMyMjQ4LDMwNjcsMzIyNzIpLHQ9MjU1JigwfFZvKDB8YXJbZT4+Ml0sMHxhclsxNisoMHxhcltaPj4yXSk+PjJdKSksdHJbcz4+MF09MHx0cltiPj4wXSx0clsxK3M+PjBdPTB8dHJbMStiPj4wXSx0clsyK3M+PjBdPTB8dHJbMitiPj4wXSxYfHxidShtKSxvPTB8YXJbZj4+Ml0sKHY9MD09KDB8KHc9MHxhcltmKzQ+PjJdKSkpfHxidSh3KSxYfHxkdShtKSxCPTE8KDB8ZnVuY3Rpb24oQSl7dmFyIGU9MDtzd2l0Y2goMHwoQXw9MCkpe2Nhc2UgMzpjYXNlIDI6Y2FzZSAxOmNhc2UgMDpjYXNlIDk5OmU9MTticmVhaztjYXNlIDE0OmNhc2UgMTI6Y2FzZSAxMDplPTM7YnJlYWs7Y2FzZSAxNTpjYXNlIDEzOmNhc2UgMTE6ZT00O2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksMjU1OTcsMTE4LDI1NjUzKX1yZXR1cm4gMHxlfShpKSk/MHx0bChpKTpFLHk9MTE9PSgxfGkpPzg6MD09KDB8bik/dDpuLGFyW2c+PjJdPTAsYXJbKG49NCtnfDApPj4yXT0wLGFyWzgrZz4+Ml09MCxhclsxMitnPj4yXT05OSxhclsxNitnPj4yXT05OSx0clsyMCtnPj4wXT0wLGFyWzI0K2c+PjJdPTgsYXJbMjgrZz4+Ml09MCxhclsoZj0zMitnfDApPj4yXT0wLGFyWzM2K2c+PjJdPTMsYXJbaz4+Ml09YSxhcls0K2s+PjJdPWMsdHJbOCtrPj4wXT0xJkUsdHJbKEU9OStrfDApPj4wXT0wfHRyW2I+PjBdLHRyW0UrMT4+MF09MHx0clsxK2I+PjBdLHRyW0UrMj4+MF09MHx0clsyK2I+PjBdLGFyWzEyK2s+PjJdPXQsYXJbMTYraz4+Ml09bCxhclsyMCtrPj4yXT1tLFh8fGJ1KG0pLGFyW2g+PjJdPXIsYXJbNCtoPj4yXT1pLHRyWzgraD4+MF09MSZCLHRyWyhyPTkraHwwKT4+MF09MHx0cltzPj4wXSx0cltyKzE+PjBdPTB8dHJbMStzPj4wXSx0cltyKzI+PjBdPTB8dHJbMitzPj4wXSxhclsxMitoPj4yXT0xMj09KC00Jml8MCkmKDB8eSk8OT8xMDp5LGFyWzE2K2g+PjJdPW8sYXJbMjAraD4+Ml09dyx2fHxidSh3KSxhcltkPj4yXT0zLGFyW3U+PjJdPWFyW2Q+PjJdLHk9MHxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wLHNBPTAsZEE9MCxrQT0wLGhBPTAsd0E9MCx2QT0wLG1BPTA7aWYodXI9KHY9dXIpKzI1NnwwLG89dis5NnwwLG1BPXYrMjMyfDAsdz12KzE2OHwwLGg9disxNTZ8MCxSPXYrODB8MCxzPXYrMTQ0fDAsZD12KzIwOHwwLGs9disxODR8MCxiPXYrMTgwfDAsYz0obD12KSsyNDR8MCx1PXYrNjR8MCxhPXYrNDh8MCxaPTB8YXJbKEF8PTApPj4yXSwoMHwobT0wfGFyWyh3QT1BKzR8MCk+PjJdKSkhPSgwfFopKWZvcig7Zz1tKy04fDAsYXJbd0E+PjJdPWcsKDB8KG09KG09MHxhclttKy00Pj4yXSk/KGR1KG0pLDB8YXJbd0E+PjJdKTpnKSkhPSgwfFopOyk7aWYoYXJbKGtBPUErMTJ8MCk+PjJdPWFyW3I+PjJdLGFyW2tBKzQ+PjJdPWFyW3IrND4+Ml0sYXJba0ErOD4+Ml09YXJbcis4Pj4yXSxhcltrQSsxMj4+Ml09YXJbcisxMj4+Ml0sbT0wfGFyWyhrQT1yKzE2fDApPj4yXSwwfChnPTB8YXJbKHQ9cisyMHwwKT4+Ml0pJiZidShnKSxhcltBKzI4Pj4yXT1tLG09MHxhclsodkE9QSszMnwwKT4+Ml0sYXJbdkE+PjJdPWcsMHxtJiZkdShtKSxhcltBKzM2Pj4yXT1hcltpPj4yXSwoMHxhcltlPj4yXSk9PSgwfGFyW3I+PjJdKSYmKDB8YXJbZSs0Pj4yXSk9PSgwfGFyW3IrND4+Ml0pJiYoMHx0cltlKzg+PjBdKT09KDB8dHJbcis4Pj4wXSkmJigwfGFyW2UrMTI+PjJdKT09KDB8YXJbcisxMj4+Ml0pKXJldHVybiB1cj12LDB8KG1BPTEpO2FyW21BPj4yXT0wLGFyWyh2QT1tQSs0fDApPj4yXT0wLHk9KGFyW21BKzg+PjJdPTApfGh1KDE2KSxhclt5KzQ+PjJdPTAsYXJbeSs4Pj4yXT0wLGFyW3k+PjJdPTY5MzIsYXJbKG09eSsxMnwwKT4+Ml09NjQ5MixhcltvPj4yXT1tLGFyWyhtPTQrb3wwKT4+Ml09eSx5PW1BKzh8MCxrZShtQSxvKSwwfChtPTB8YXJbbT4+Ml0pJiZkdShtKSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09Njk2MCxhclsobT1nKzEyfDApPj4yXT02OTg4LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MDEyLGFyWyhtPWcrMTJ8MCk+PjJdPTcwNDAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcwNjQsYXJbKG09ZysxMnwwKT4+Ml09NjUxNixhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzA5MixhclsobT1nKzEyfDApPj4yXT02NTQwLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MTIwLGFyWyhtPWcrMTJ8MCk+PjJdPTY5MDgsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcxNDgsYXJbKG09ZysxMnwwKT4+Ml09NjU2NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzE3NixhclsobT1nKzEyfDApPj4yXT02NTg4LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MjA0LGFyWyhtPWcrMTJ8MCk+PjJdPTY2NjAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTcyMzIsYXJbKG09ZysxMnwwKT4+Ml09NjY4NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzI2MCxhclsobT1nKzEyfDApPj4yXT02NjM2LGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03Mjg4LGFyWyhtPWcrMTJ8MCk+PjJdPTY2MTIsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcsKHA9MHxhclt2QT4+Ml0pPj4+MD49KDB8YXJbeT4+Ml0pPj4+MD8oa2UobUEsbyksMHwobT0wfGFyW1o+PjJdKSYmZHUobSkpOihhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArOCksZz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTczMTYsYXJbKG09ZysxMnwwKT4+Ml09NjcwOCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZywocD0wfGFyW3ZBPj4yXSk+Pj4wPj0oMHxhclt5Pj4yXSk+Pj4wPyhrZShtQSxvKSwwfChtPTB8YXJbWj4+Ml0pJiZkdShtKSk6KGFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4KSxnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzM0NCxhclsobT1nKzEyfDApPj4yXT02NzMyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLChwPTB8YXJbdkE+PjJdKT4+PjA+PSgwfGFyW3k+PjJdKT4+PjA/KGtlKG1BLG8pLDB8KG09MHxhcltaPj4yXSkmJmR1KG0pKTooYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzgpLGc9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03MzcyLGFyWyhtPWcrMTJ8MCk+PjJdPTc0MDAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcscD0wfGFyW3ZBPj4yXTtkb3tpZihwPj4+MDwoMHxhclt5Pj4yXSk+Pj4wKWFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4O2Vsc2V7aWYoa2UobUEsbyksIShtPTB8YXJbWj4+Ml0pKWJyZWFrO2R1KG0pfX13aGlsZSgwKTtnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzQyNCxhclsobT1nKzEyfDApPj4yXT03NDUyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLHA9MHxhclt2QT4+Ml07ZG97aWYocD4+PjA8KDB8YXJbeT4+Ml0pPj4+MClhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArODtlbHNle2lmKGtlKG1BLG8pLCEobT0wfGFyW1o+PjJdKSlicmVhaztkdShtKX19d2hpbGUoMCk7Zz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTc0NzYsYXJbKG09ZysxMnwwKT4+Ml09Njc1NixhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZyxwPTB8YXJbdkE+PjJdO2Rve2lmKHA+Pj4wPCgwfGFyW3k+PjJdKT4+PjApYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzg7ZWxzZXtpZihrZShtQSxvKSwhKG09MHxhcltaPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApO2c9MHxodSgxNiksYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnPj4yXT03NTA0LGFyWyhtPWcrMTJ8MCk+PjJdPTY3ODAsYXJbbz4+Ml09bSxhclsoWj00K298MCk+PjJdPWcscD0wfGFyW3ZBPj4yXTtkb3tpZihwPj4+MDwoMHxhclt5Pj4yXSk+Pj4wKWFyW3A+PjJdPW0sYXJbcCs0Pj4yXT1nLGFyW28+PjJdPTAsYXJbWj4+Ml09MCxhclt2QT4+Ml09cCs4O2Vsc2V7aWYoa2UobUEsbyksIShtPTB8YXJbWj4+Ml0pKWJyZWFrO2R1KG0pfX13aGlsZSgwKTtnPTB8aHUoMTYpLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsYXJbZz4+Ml09NzUzMixhclsobT1nKzEyfDApPj4yXT02ODMyLGFyW28+PjJdPW0sYXJbKFo9NCtvfDApPj4yXT1nLHA9MHxhclt2QT4+Ml07ZG97aWYocD4+PjA8KDB8YXJbeT4+Ml0pPj4+MClhcltwPj4yXT1tLGFyW3ArND4+Ml09ZyxhcltvPj4yXT0wLGFyW1o+PjJdPTAsYXJbdkE+PjJdPXArODtlbHNle2lmKGtlKG1BLG8pLCEobT0wfGFyW1o+PjJdKSlicmVhaztkdShtKX19d2hpbGUoMCk7Zz0wfGh1KDE2KSxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2c+PjJdPTc1NjAsYXJbKG09ZysxMnwwKT4+Ml09Njg4NCxhcltvPj4yXT1tLGFyWyhaPTQrb3wwKT4+Ml09ZyxwPTB8YXJbdkE+PjJdO2Rve2lmKHA+Pj4wPCgwfGFyW3k+PjJdKT4+PjApYXJbcD4+Ml09bSxhcltwKzQ+PjJdPWcsYXJbbz4+Ml09MCxhcltaPj4yXT0wLGFyW3ZBPj4yXT1wKzg7ZWxzZXtpZihrZShtQSxvKSwhKG09MHxhcltaPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApO2FyW3c+PjJdPTAsYXJbKG49NCt3fDApPj4yXT0wLGFyWzgrdz4+Ml09MCxhcltoPj4yXT0wLGFyWyhmPTQraHwwKT4+Ml09MCxhcls4K2g+PjJdPTAsYXJbUj4+Ml09YXJbZT4+Ml0sYXJbUis0Pj4yXT1hcltlKzQ+PjJdLGFyW1IrOD4+Ml09YXJbZSs4Pj4yXSxhcltSKzEyPj4yXT1hcltlKzEyPj4yXSxwPTB8YXJbZSsxNj4+Ml0sKEk9MD09KDB8KFc9MHxhcltlKzIwPj4yXSkpKXx8YnUoVyksQj00K298MCxYPTgrb3wwLEU9MTIrb3wwLGFyWyhlPTI4K298MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbbz4+Ml09LTEsYXJbQj4+Ml09MCxhcltYPj4yXT0wLGFyW0U+PjJdPWFyW1I+PjJdLGFyW0UrND4+Ml09YXJbUis0Pj4yXSxhcltFKzg+PjJdPWFyW1IrOD4+Ml0sYXJbRSsxMj4+Ml09YXJbUisxMj4+Ml0sZT0yOCtvfDAsZz1XO2Rve2lmKEkpZEE9MzIrb3wwLGFyW2U+PjJdPXAsYXJbZEE+PjJdPWcseT1lLGc9cD1kQTtlbHNle2lmKGJ1KFcpLG09MHxhclsoWj0zMitvfDApPj4yXSxhcltlPj4yXT1wLGFyW1o+PjJdPWcsIW0pe3k9ZSxnPXA9WjticmVha31kdShtKSx5PWUsZz1wPVp9fXdoaWxlKDApO2dBWzM2K28+PjJdPTAsZ0FbNDArbz4+Ml09MCxtPShnQVs0NCtvPj4yXT0wKXxhcltmPj4yXSxkQT04K2h8MDtkb3tpZihtPj4+MDwoMHxhcltkQT4+Ml0pPj4+MClhclttPj4yXT1hcltvPj4yXSxhclttKzQ+PjJdPWFyW0I+PjJdLGFyW20rOD4+Ml09YXJbWD4+Ml0sYXJbQj4+Ml09MCxhcltYPj4yXT0wLGFyWyhzQT1tKzEyfDApPj4yXT1hcltFPj4yXSxhcltzQSs0Pj4yXT1hcltFKzQ+PjJdLGFyW3NBKzg+PjJdPWFyW0UrOD4+Ml0sYXJbc0ErMTI+PjJdPWFyW0UrMTI+PjJdLGFyW20rMjg+PjJdPWFyW3k+PjJdLGFyW20rMzI+PjJdPWFyW2c+PjJdLGFyW2U+PjJdPTAsYkE9MzYrb3woYXJbcD4+Ml09MCksYXJbKHNBPW0rMzZ8MCk+PjJdPWFyW2JBPj4yXSxhcltzQSs0Pj4yXT1hcltiQSs0Pj4yXSxhcltzQSs4Pj4yXT1hcltiQSs4Pj4yXSxhcltmPj4yXT1tKzQ4O2Vsc2V7aWYoaGUoaCxvKSwhKG09MHxhcltwPj4yXSkpYnJlYWs7ZHUobSl9fXdoaWxlKDApOzB8KG09MHxhcltYPj4yXSkmJmR1KG0pLEl8fGR1KFcpLG09MHxhcltoPj4yXSxnPTB8YXJbZj4+Ml07QTpkb3tpZigoMHxtKT09KDB8ZykpcD0wO2Vsc2V7UD04K3d8MCxMPXIrNHwwLEs9cis4fDAscT1yKzEyfDAsJD0xNitkfDAsQUE9MjArZHwwLGVBPTE2K2t8MCxyQT0yMCtrfDAsaUE9NCtzfDAsZkE9bCs0fDAsbkE9bCs4fDAsdEE9bCsxMnwwLG9BPWwrMTZ8MCxhQT1sKzIwfDAsY0E9bCsyNHwwLHVBPWxBPWwrMjh8MCxiQT1sKzMyfDAsSD1sKzQwfDAseD1sKzQ0fDAsc0E9aj1sKzM2fDAsQz0wO2U6Zm9yKDs7KXtpZigoMHxnKT09KDB8bSkpZz0tMTtlbHNlIGZvcihwPShnLW18MCkvNDh8MCxnPS0xLFo9MDtDPSh6PTA9PSgwfFopfChGPS4zMDAwMDAwMTE5MjA5Mjg5NipnQVttKyg0OCpafDApKzM2Pj4yXSsuNjAwMDAwMDIzODQxODU3OSpnQVttKyg0OCpafDApKzQwPj4yXSsuMTAwMDAwMDAxNDkwMTE2MTIqZ0FbbSsoNDgqWnwwKSs0ND4+Ml0pPEMpP0Y6QyxnPXo/WjpnLChaPVorMXwwKT4+PjA8cD4+PjA7KTtmb3IoWj1tKyg0OCpnfDApfDAsKDB8KHA9MHxhcltuPj4yXSkpPT0oMHxhcltQPj4yXSk/d2UodyxaKTooYXJbcD4+Ml09YXJbWj4+Ml0sYXJbcCs0Pj4yXT1hclttKyg0OCpnfDApKzQ+PjJdLFo9MHxhclttKyg0OCpnfDApKzg+PjJdLDB8KGFyW3ArOD4+Ml09WikmJmJ1KFopLHo9bSsoNDgqZ3wwKSsxMnwwLGFyWyhaPXArMTJ8MCk+PjJdPWFyW3o+PjJdLGFyW1orND4+Ml09YXJbeis0Pj4yXSxhcltaKzg+PjJdPWFyW3orOD4+Ml0sYXJbWisxMj4+Ml09YXJbeisxMj4+Ml0sYXJbcCsyOD4+Ml09YXJbbSsoNDgqZ3wwKSsyOD4+Ml0sWj0wfGFyW20rKDQ4Kmd8MCkrMzI+PjJdLDB8KGFyW3ArMzI+PjJdPVopJiZidShaKSxPPW0rKDQ4Kmd8MCkrMzZ8MCxhclsoej1wKzM2fDApPj4yXT1hcltPPj4yXSxhclt6KzQ+PjJdPWFyW08rND4+Ml0sYXJbeis4Pj4yXT1hcltPKzg+PjJdLGFyW24+PjJdPTQ4KygwfGFyW24+PjJdKSkscD0wfGFyW2Y+PjJdLHk9MHxhcltoPj4yXSxhclt5Kyg0OCpnfDApPj4yXT1hcltwKy00OD4+Ml0sbT0wfGFyW3ArLTQ0Pj4yXSwwfChaPTB8YXJbcCstNDA+PjJdKSYmYnUoWiksYXJbeSsoNDgqZ3wwKSs0Pj4yXT1tLG09MHxhclsoej15Kyg0OCpnfDApKzh8MCk+PjJdLGFyW3o+PjJdPVosMHxtJiZkdShtKSxaPXArLTM2fDAsYXJbKG09eSsoNDgqZ3wwKSsxMnwwKT4+Ml09YXJbWj4+Ml0sYXJbbSs0Pj4yXT1hcltaKzQ+PjJdLGFyW20rOD4+Ml09YXJbWis4Pj4yXSxhclttKzEyPj4yXT1hcltaKzEyPj4yXSxtPTB8YXJbcCstMjA+PjJdLDB8KFo9MHxhcltwKy0xNj4+Ml0pJiZidShaKSxhclt5Kyg0OCpnfDApKzI4Pj4yXT1tLG09MHxhclsoej15Kyg0OCpnfDApKzMyfDApPj4yXSxhclt6Pj4yXT1aLDB8bSYmZHUobSksbT15Kyg0OCpnfDApKzM2fDAsZz1wKy0xMnwwLGFyW20+PjJdPWFyW2c+PjJdLGFyW20rND4+Ml09YXJbZys0Pj4yXSxhclttKzg+PjJdPWFyW2crOD4+Ml0sZz0obT0wfGFyW2Y+PjJdKSstNDh8MDthcltmPj4yXT1tKy00OCwwfChaPTB8YXJbbSstMTY+PjJdKSYmZHUoWiksMHwobT0wfGFyW20rLTQwPj4yXSkmJmR1KG0pLCgwfChtPTB8YXJbZj4+Ml0pKSE9KDB8Zyk7KTtaPTB8YXJbbj4+Ml07ZG97aWYoKDB8YXJbWistMzY+PjJdKT09KDB8YXJbcj4+Ml0pKXtpZigoMHxhcltaKy0zMj4+Ml0pIT0oMHxhcltMPj4yXSkpYnJlYWs7aWYoKDB8dHJbWistMjg+PjBdKSE9KDB8dHJbSz4+MF0pKWJyZWFrO2lmKCgwfGFyW1orLTI0Pj4yXSk9PSgwfGFyW3E+PjJdKSlicmVhayBlfX13aGlsZSgwKTtpZigoMHwobT0wfGFyW21BPj4yXSkpIT0oMHwoej0wfGFyW3ZBPj4yXSkpKXtmb3IoOzspe2lmKHA9MHxhclttPj4yXSx5PTB8YXJbOCsoMHxhcltwPj4yXSk+PjJdLGc9WistMzZ8MCxhcltkPj4yXT1hcltnPj4yXSxhcls0K2Q+PjJdPWFyW2crND4+Ml0sYXJbOCtkPj4yXT1hcltnKzg+PjJdLGFyWzEyK2Q+PjJdPWFyW2crMTI+PjJdLGFyWyQ+PjJdPWFyW1orLTIwPj4yXSxnPTB8YXJbWistMTY+PjJdLDB8KGFyW0FBPj4yXT1nKSYmYnUoZyksYXJbaz4+Ml09YXJbcj4+Ml0sYXJbNCtrPj4yXT1hcltyKzQ+PjJdLGFyWzgraz4+Ml09YXJbcis4Pj4yXSxhclsxMitrPj4yXT1hcltyKzEyPj4yXSxhcltlQT4+Ml09YXJba0E+PjJdLGc9MHxhclt0Pj4yXSwwfChhcltyQT4+Ml09ZykmJmJ1KGcpLGFyW2I+PjJdPWFyW2k+PjJdLGFyW28+PjJdPWFyW2I+PjJdLG9zWzYzJnldKHMscCxkLGssbyksMHwoZz0wfGFyW3JBPj4yXSkmJmR1KGcpLDB8KGc9MHxhcltBQT4+Ml0pJiZkdShnKSwoMHwoZz0wfGFyW3M+PjJdKSkhPSgwfChTPTB8YXJbaUE+PjJdKSkpe089bSs0fDA7ZG97aWYoKDB8KHk9cD0wfGFyW3c+PjJdKSkhPSgwfChVPVc9MHxhcltuPj4yXSkpKXtlPTB8YXJbZz4+Ml0sQj1nKzR8MCxFPWcrOHwwLFg9ZysxMnwwLFo9MDtyOmRve2Rve2lmKCgwfGFyW3ArMTI+PjJdKT09KDB8ZSkpe2lmKCgwfGFyW3ArMTY+PjJdKSE9KDB8YXJbQj4+Ml0pKWJyZWFrO2lmKCgwfHRyW3ArMjA+PjBdKSE9KDB8dHJbRT4+MF0pKWJyZWFrO2lmKFp8PVQ9KDB8YXJbcCsyND4+Ml0pPT0oMHxhcltYPj4yXSksVClicmVhayByfX13aGlsZSgwKTtwPXArNDh8MH13aGlsZSgoMHxwKSE9KDB8VykpO1p8fChoQT0xODIpfWVsc2UgaEE9MTgyO3I6ZG97aWYoMTgyPT0oMHxoQSkpe1o9KGhBPTApfGFyW2g+PjJdLHA9MHxhcltmPj4yXTtpOmRve2lmKCgwfFopIT0oMHxwKSl7VD0wfGFyW2c+PjJdLGU9Zys0fDAsQj1nKzh8MCxFPWcrMTJ8MDtmOmZvcig7Oyl7Tj1aKzEyfDA7ZG97aWYoKDB8YXJbTj4+Ml0pPT0oMHxUKSl7aWYoKDB8KFk9MHxhclsoXz1aKzE2fDApPj4yXSkpIT0oMHxhcltlPj4yXSkpYnJlYWs7aWYoKEQ9MHx0clsoUT1aKzIwfDApPj4wXSk8PDI0Pj4yNCE9KDB8dHJbQj4+MF0pKWJyZWFrO2lmKCgwfChNPTB8YXJbKEo9WisyNHwwKT4+Ml0pKT09KDB8YXJbRT4+Ml0pKWJyZWFrIGZ9fXdoaWxlKDApO2lmKCgwfChaPVorNDh8MCkpPT0oMHxwKSlicmVhayBpfWlmKFY9K2dBWyhwPWcrMjR8MCk+PjJdKyArZ0FbVystMTI+PjJdLEY9K2dBW2crMjg+PjJdKyArZ0FbVystOD4+Ml0sRz0rZ0FbZyszMj4+Ml0rICtnQVtXKy00Pj4yXSxYPVorNDB8MCxXPVorNDR8MCwhKC4zMDAwMDAwMTE5MjA5Mjg5NipnQVsoRT1aKzM2fDApPj4yXSsuNjAwMDAwMDIzODQxODU3OSpnQVtYPj4yXSsuMTAwMDAwMDAxNDkwMTE2MTIqZ0FbVz4+Ml0+LjMwMDAwMDAxMTkyMDkyODk2KlYrLjYwMDAwMDAyMzg0MTg1NzkqRisuMTAwMDAwMDAxNDkwMTE2MTIqRykpYnJlYWsgcjtCPWcrOXwwLHRyW2M+PjBdPTB8dHJbQj4+MF0sdHJbMStjPj4wXT0wfHRyW0IrMT4+MF0sdHJbMitjPj4wXT0wfHRyW0IrMj4+MF0sQj0wfGFyW2crMTY+PjJdLChSPTA9PSgwfChJPTB8YXJbZysyMD4+Ml0pKSl8fGJ1KEkpLGFyW3U+PjJdPWFyW3A+PjJdLGFyWzQrdT4+Ml09YXJbcCs0Pj4yXSxhcls4K3U+PjJdPWFyW3ArOD4+Ml0sYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAscD0oYXJbbCs4Pj4yXT0wKXxhclttPj4yXSwwfChlPTB8YXJbTz4+Ml0pJiZidShlKSx0cltvPj4wXT0wfHRyW2M+PjBdLHRyWzErbz4+MF09MHx0clsxK2M+PjBdLHRyWzIrbz4+MF09MHx0clsyK2M+PjBdLFJ8fGJ1KEkpLGFyW2w+PjJdPWFyW3U+PjJdLGFyW2wrND4+Ml09YXJbNCt1Pj4yXSxhcltsKzg+PjJdPWFyWzgrdT4+Ml0sYXJbWj4+Ml09KChVLXl8MCkvNDh8MCktMSxhcltaKzQ+PjJdPXAscD0wfGFyWyhVPVorOHwwKT4+Ml0sYXJbVT4+Ml09ZSwwfHAmJmR1KHApLGFyW04+PjJdPVQsYXJbXz4+Ml09WSx0cltRPj4wXT1ELHRyWyhVPVorMjF8MCk+PjBdPTB8dHJbbz4+MF0sdHJbVSsxPj4wXT0wfHRyWzErbz4+MF0sdHJbVSsyPj4wXT0wfHRyWzIrbz4+MF0sYXJbSj4+Ml09TSxhcltaKzI4Pj4yXT1CLHA9MHxhclsoVT1aKzMyfDApPj4yXSxhcltVPj4yXT1JLDB8cCYmZHUocCksYXJbRT4+Ml09YXJbbD4+Ml0sYXJbRSs0Pj4yXT1hcltsKzQ+PjJdLGFyW0UrOD4+Ml09YXJbbCs4Pj4yXSxSfHxkdShJKSxnQVtaKzM2Pj4yXT1WLGdBW1g+PjJdPUYsZ0FbVz4+Ml09RzticmVhayByfX13aGlsZSgwKTthcltvPj4yXT1hcltnPj4yXSxhcls0K28+PjJdPWFyW2crND4+Ml0sYXJbOCtvPj4yXT1hcltnKzg+PjJdLGFyWzEyK28+PjJdPWFyW2crMTI+PjJdLGU9MHxhcltnKzE2Pj4yXSwoRT0wPT0oMHwoQj0wfGFyW2crMjA+PjJdKSkpPyhwPVcsWj1VKTooYnUoQikscD1aPTB8YXJbbj4+Ml0seT0wfGFyW3c+PjJdKSxWPStnQVtnKzI0Pj4yXSsgK2dBW3ArLTEyPj4yXSxGPStnQVtnKzI4Pj4yXSsgK2dBW3ArLTg+PjJdLEc9K2dBW2crMzI+PjJdKyArZ0FbcCstND4+Ml0sYXJbYT4+Ml09YXJbbz4+Ml0sYXJbNCthPj4yXT1hcls0K28+PjJdLGFyWzgrYT4+Ml09YXJbOCtvPj4yXSxhclsxMithPj4yXT1hclsxMitvPj4yXSxFfHxidShCKSxhcltmQT4+Ml09MCxhcltuQT4+Ml09MCxhclt0QT4+Ml09OTksYXJbb0E+PjJdPTk5LHRyW2FBPj4wXT0wLGFyW2NBPj4yXT04LGFyW2xBPj4yXT0wLGFyW2xBKzQ+PjJdPTAsYXJbbEErOD4+Ml09MCxhcltsQSsxMj4+Ml09MCxhcltsQSsxNj4+Ml09MCxhcltsPj4yXT0oKFoteXwwKS80OHwwKS0xLHA9MHxhclttPj4yXSx5PVo9MHxhcltPPj4yXTtkb3tpZihaKXtpZihidShaKSxaPTB8YXJbbkE+PjJdLGFyW2ZBPj4yXT1wLGFyW25BPj4yXT15LCFaKWJyZWFrO2R1KFopfWVsc2UgYXJbZkE+PjJdPXAsYXJbbkE+PjJdPXl9d2hpbGUoMCk7YXJbdEE+PjJdPWFyW2E+PjJdLGFyW3RBKzQ+PjJdPWFyWzQrYT4+Ml0sYXJbdEErOD4+Ml09YXJbOCthPj4yXSxhclt0QSsxMj4+Ml09YXJbMTIrYT4+Ml0sRXx8YnUoQiksYXJbdUE+PjJdPWUsWj0wfGFyW2JBPj4yXSxhcltiQT4+Ml09QiwwfFomJmR1KFopLGdBW2o+PjJdPVYsZ0FbSD4+Ml09RixnQVt4Pj4yXT1HLFo9MHxhcltmPj4yXTtkb3tpZihaPj4+MDwoMHxhcltkQT4+Ml0pPj4+MClhcltaPj4yXT1hcltsPj4yXSxhcltaKzQ+PjJdPWFyW2ZBPj4yXSxhcltaKzg+PjJdPWFyW25BPj4yXSxhcltmQT4+Ml09MCxhcltuQT4+Ml09MCxhclsoVT1aKzEyfDApPj4yXT1hclt0QT4+Ml0sYXJbVSs0Pj4yXT1hclt0QSs0Pj4yXSxhcltVKzg+PjJdPWFyW3RBKzg+PjJdLGFyW1UrMTI+PjJdPWFyW3RBKzEyPj4yXSxhcltaKzI4Pj4yXT1hclt1QT4+Ml0sYXJbWiszMj4+Ml09YXJbYkE+PjJdLGFyW3VBPj4yXT0wLGFyW2JBPj4yXT0wLGFyWyhVPVorMzZ8MCk+PjJdPWFyW3NBPj4yXSxhcltVKzQ+PjJdPWFyW3NBKzQ+PjJdLGFyW1UrOD4+Ml09YXJbc0ErOD4+Ml0sYXJbZj4+Ml09Wis0ODtlbHNle2lmKGhlKGgsbCksIShaPTB8YXJbYkE+PjJdKSlicmVhaztkdShaKX19d2hpbGUoMCk7MHwoWj0wfGFyW25BPj4yXSkmJmR1KFopLEV8fChkdShCKSxkdShCKSl9fXdoaWxlKDApO2c9ZyszNnwwfXdoaWxlKCgwfGcpIT0oMHxTKSk7Zz0wfGFyW3M+PjJdfWlmKDB8Zyl7aWYoKDB8KFo9MHxhcltpQT4+Ml0pKSE9KDB8Zykpe2Zvcig7cD1aKy0zNnwwLGFyW2lBPj4yXT1wLCgwfChaPShaPTB8YXJbWistMTY+PjJdKT8oZHUoWiksMHxhcltpQT4+Ml0pOnApKSE9KDB8Zyk7KTtnPTB8YXJbcz4+Ml19dnUoZyl9aWYoKDB8KG09bSs4fDApKT09KDB8eikpYnJlYWs7Wj0wfGFyW24+PjJdfWc9MHxhcltmPj4yXX1pZigoMHwobT0wfGFyW2g+PjJdKSk9PSgwfGcpKXtwPTA7YnJlYWsgQX19aWYobT0oKFotKGhBPTB8YXJbdz4+Ml0pfDApLzQ4fDApLTF8MCxaPWhBLG0pZm9yKGc9MDtnPWcrMXwwLDAhPSgwfChtPTB8YXJbWisoNDgqbXwwKT4+Ml0pKTspO2Vsc2UgZz0wO209KHA9MHxhclt3QT4+Ml0pLShaPTB8YXJbQT4+Ml0pPj4zO2Rve2lmKG0+Pj4wPGc+Pj4wKXZlKEEsZy1tfDApO2Vsc2V7aWYobT4+PjA8PWc+Pj4wKWJyZWFrO2lmKCgwfHApPT0oMHwoeT1aKyhnPDwzKXwwKSkpYnJlYWs7Zm9yKFo9cDttPVorLTh8MCxhclt3QT4+Ml09bSwoWj0wfGFyW1orLTQ+PjJdKSYmKGR1KFopLG09MHxhclt3QT4+Ml0pLCgwfG0pIT0oMHx5KTspWj1tfX13aGlsZSgwKTtpZihaPTB8YXJbdz4+Ml0sMHwobT0oKCgwfGFyW24+PjJdKS1afDApLzQ4fDApLTF8MCkpZm9yKEI9ZystMXwwLGU9MDtnPUItZXwwLHA9MHxhcltBPj4yXSx5PTB8YXJbWisoNDgqbXwwKSs0Pj4yXSwwfChaPTB8YXJbWisoNDgqbXwwKSs4Pj4yXSkmJmJ1KFopLGFyW3ArKGc8PDMpPj4yXT15LGc9MHxhclsod0E9cCsoZzw8MykrNHwwKT4+Ml0sYXJbd0E+PjJdPVosMHxnJiZkdShnKSxaPTB8YXJbdz4+Ml0sbT0wfGFyW1orKDQ4Km18MCk+PjJdOyllPWUrMXwwO3A9MSxtPTB8YXJbaD4+Ml19fXdoaWxlKDApO2lmKDB8bSl7aWYoKDB8KGc9MHxhcltmPj4yXSkpIT0oMHxtKSl7Zm9yKDthcltmPj4yXT1nKy00OCwwfChaPTB8YXJbZystMTY+PjJdKSYmZHUoWiksMHwoZz0wfGFyW2crLTQwPj4yXSkmJmR1KGcpLCgwfChnPTB8YXJbZj4+Ml0pKSE9KDB8bSk7KTttPTB8YXJbaD4+Ml19dnUobSl9aWYoMHwobT0wfGFyW3c+PjJdKSl7aWYoKDB8KGc9MHxhcltuPj4yXSkpIT0oMHxtKSl7Zm9yKDthcltuPj4yXT1nKy00OCwwfChaPTB8YXJbZystMTY+PjJdKSYmZHUoWiksMHwoZz0wfGFyW2crLTQwPj4yXSkmJmR1KGcpLCgwfChnPTB8YXJbbj4+Ml0pKSE9KDB8bSk7KTttPTB8YXJbdz4+Ml19dnUobSl9aWYoMHwobT0wfGFyW21BPj4yXSkpe2lmKCgwfChnPTB8YXJbdkE+PjJdKSkhPSgwfG0pKXtmb3IoO1o9ZystOHwwLGFyW3ZBPj4yXT1aLCgwfChnPShnPTB8YXJbZystND4+Ml0pPyhkdShnKSwwfGFyW3ZBPj4yXSk6WikpIT0oMHxtKTspO209MHxhclttQT4+Ml19dnUobSl9cmV0dXJuIHVyPXYsMHwobUE9cCl9KGcsayxoLHUpLHZ8fGR1KHcpLFh8fGR1KG0pLHk/ZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7dXI9KGM9dXIpKzY0fDAsZj1jKzQ4fDAsbj1jKzQwfDAsdD1jKzMyfDAsbz1jKzh8MCxhPWMsbD0wfGFyWyhyfD0wKT4+Ml0sMHwocj11PTB8YXJbcis0Pj4yXSkmJihidSh1KSxidSh1KSksdT0wfGFyW2U+PjJdLGk9MHxhcltlKzQ+PjJdO0E6ZG97aWYoKDB8dSkhPSgwfGkpKXtmb3IoZz00K3R8MCxaPWUrMTJ8MCxwPTE2K298MCx5PWUrMjh8MCxCPTIwK298MCxFPWUrMzJ8MCx2PWUrMzZ8MCxtPTQrbnwwLGQ9bDtsPTB8YXJbdT4+Ml0sZT0wfGFyWzEyKygwfGFyW2w+PjJdKT4+Ml0sYXJbdD4+Ml09ZCxoPXIsYXJbZz4+Ml09aCwodz0wPT0oMHxyKSl8fGJ1KGgpLGFyW28+PjJdPWFyW1o+PjJdLGFyWzQrbz4+Ml09YXJbWis0Pj4yXSxhcls4K28+PjJdPWFyW1orOD4+Ml0sYXJbMTIrbz4+Ml09YXJbWisxMj4+Ml0sYXJbcD4+Ml09YXJbeT4+Ml0sYj0wfGFyW0U+PjJdLDB8KGFyW0I+PjJdPWIpJiZidShiKSxhclthPj4yXT1hclt2Pj4yXSxhcltmPj4yXT1hclthPj4yXSxvc1s2MyZlXShuLGwsdCxvLGYpLGw9MHxhcltuPj4yXSxrPTB8YXJbbT4+Ml0sYXJbbj4+Ml09MCxhclttPj4yXT0wLCF3JiYoZHUoaCksMHwoWD0wfGFyW20+PjJdKSkmJmR1KFgpLDB8KGU9MHxhcltCPj4yXSkmJmR1KGUpLDB8KGU9MHxhcltnPj4yXSkmJmR1KGUpLHM9bDspe2lmKHI9MHxhclt5Pj4yXSwoYj0wPT0oMHwoZT0wfGFyW0U+PjJdKSkpfHwoYnUoZSksYnUoZSkpLGFyW3MrNDA+PjJdPXIscj0wfGFyWyhJPXMrNDR8MCk+PjJdLGFyW0k+PjJdPWUsMHxyJiZkdShyKSxifHxkdShlKSxyPTB8YXJbKGU9ZCkrNDg+PjJdLChiPTA9PSgwfChlPTB8YXJbZSs1Mj4+Ml0pKSl8fChidShlKSxidShlKSksYXJbcys0OD4+Ml09cixyPTB8YXJbKEk9cys1MnwwKT4+Ml0sYXJbST4+Ml09ZSwwfHImJmR1KHIpLGJ8fGR1KGUpLDB8ayYmYnUoayksd3x8ZHUoaCksKDB8KHU9dSs4fDApKT09KDB8aSkpe3I9ayxXPTM0O2JyZWFrIEF9ZD1sLHI9a31hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxrJiZkdShrKX1lbHNlIFc9MzR9d2hpbGUoMCk7MzQ9PSgwfFcpJiYoYXJbQT4+Ml09bCxhcltBKzQ+PjJdPXIpLHVyPShyJiZkdShyKSxjKX0oQSxnLGUpOihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCksMHwoeT0wfGFyW2Y+PjJdKSYmZHUoeSksMHwoeT0wfGFyW2c+PjJdKSl7aWYoKDB8KEI9MHxhcltuPj4yXSkpIT0oMHx5KSl7Zm9yKDtmPUIrLTh8MCxhcltuPj4yXT1mLCgwfChCPShCPTB8YXJbQistND4+Ml0pPyhkdShCKSwwfGFyW24+PjJdKTpmKSkhPSgwfHkpOyk7eT0wfGFyW2c+PjJdfXZ1KHkpfXZ8fGR1KHcpLENvKFosMHxhcls0K1o+PjJdKSxYfHxkdShtKSx1cj1wfWZ1bmN0aW9uIGdlKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7c3dpdGNoKGdBWyhBfD0wKT4+Ml09MCxnQVsoaT1BKzR8MCk+PjJdPTAsZTw8MTY+PjE2KXtjYXNlIDEzOmNhc2UgMTI6c3dpdGNoKHI8PDE2Pj4xNil7Y2FzZSAxOmY9LjMwMDAwMDAxMTkyMDkyODk2LG49LjYwMDAwMDAyMzg0MTg1NzksdD0uMTUwMDAwMDA1OTYwNDY0NDgsbz0uMDU5OTk5OTk4NjU4ODk1NDksYT0uNjM5OTk5OTg1Njk0ODg1MyxjPS4zMzAwMDAwMTMxMTMwMjE4NSxsPS4zMTI3MDAwMDMzODU1NDM4LHU9LjMyODk5OTk5NjE4NTMwMjczO2JyZWFrO2Nhc2UgNDpmPS4yMDk5OTk5OTM0NDM0ODkwNyxuPS43MDk5OTk5Nzg1NDIzMjc5LHQ9LjE0MDAwMDAwMDU5NjA0NjQ1LG89LjA3OTk5OTk5ODIxMTg2MDY2LGE9LjY3MDAwMDAxNjY4OTMwMDUsYz0uMzMwMDAwMDEzMTEzMDIxODUsbD0uMzEwMDAwMDAyMzg0MTg1OCx1PS4zMTYwMDAwMTQ1NDM1MzMzO2JyZWFrO2Nhc2UgNTpmPS4yODk5OTk5OTE2NTUzNDk3MyxuPS42MDAwMDAwMjM4NDE4NTc5LHQ9LjE1MDAwMDAwNTk2MDQ2NDQ4LG89LjA1OTk5OTk5ODY1ODg5NTQ5LGE9LjYzOTk5OTk4NTY5NDg4NTMsYz0uMzMwMDAwMDEzMTEzMDIxODUsbD0uMzEyNzAwMDAzMzg1NTQzOCx1PS4zMjg5OTk5OTYxODUzMDI3MzticmVhaztjYXNlIDc6Y2FzZSA2OmY9LjMxMDAwMDAwMjM4NDE4NTgsbj0uNTk1MDAwMDI4NjEwMjI5NSx0PS4xNTUwMDAwMDExOTIwOTI5LG89LjA3MDAwMDAwMDI5ODAyMzIyLGE9LjYyOTk5OTk5NTIzMTYyODQsYz0uMzQwMDAwMDAzNTc2Mjc4NyxsPS4zMTI3MDAwMDMzODU1NDM4LHU9LjMyODk5OTk5NjE4NTMwMjczO2JyZWFrO2Nhc2UgODpmPS4yNDMwMDAwMDA3MTUyNTU3NCxuPS42OTE5OTk5NzE4NjY2MDc3LHQ9LjE0NDk5OTk5NTgyNzY3NDg3LG89LjA0ODk5OTk5ODcxODUwMDE0LGE9LjY4MDk5OTk5NDI3Nzk1NDEsYz0uMzE5MDAwMDA1NzIyMDQ1OSxsPS4zMTAwMDAwMDIzODQxODU4LHU9LjMxNjAwMDAxNDU0MzUzMzM7YnJlYWs7Y2FzZSA5OmY9LjE3MDAwMDAwMTc4ODEzOTM0LG49Ljc5Njk5OTk5MDk0MDA5NCx0PS4xMzA5OTk5OTcyNTgxODYzNCxvPS4wNDYwMDAwMDAwODk0MDY5NyxhPS43MDgwMDAwMDQyOTE1MzQ0LGM9LjI5MTk5OTk5NTcwODQ2NTYsbD0uMzEyNzAwMDAzMzg1NTQzOCx1PS4zMjg5OTk5OTYxODUzMDI3MzticmVhaztjYXNlIDEwOmE9bj0xLGM9bz10PWY9MCxsPS4zMzMzMzI5ODU2Mzk1NzIxNCx1PS4zMzMzMzAwMDU0MDczMzM0O2JyZWFrO2Nhc2UgMTE6Zj0uMjY0OTk5OTg1Njk0ODg1MjUsbj0uNjg5OTk5OTk3NjE1ODE0Mix0PS4xNTAwMDAwMDU5NjA0NjQ0OCxvPS4wNTk5OTk5OTg2NTg4OTU0OSxhPS42ODAwMDAwMDcxNTI1NTc0LGM9LjMxOTk5OTk5Mjg0NzQ0MjYsbD0uMzE0MDAwMDEwNDkwNDE3NSx1PS4zNTEwMDAwMTA5NjcyNTQ2NDticmVhaztjYXNlIDEyOmY9LjI2NDk5OTk4NTY5NDg4NTI1LG49LjY4OTk5OTk5NzYxNTgxNDIsdD0uMTUwMDAwMDA1OTYwNDY0NDgsbz0uMDU5OTk5OTk4NjU4ODk1NDksYT0uNjgwMDAwMDA3MTUyNTU3NCxjPS4zMTk5OTk5OTI4NDc0NDI2LGw9LjMxMjcwMDAwMzM4NTU0MzgsdT0uMzI4OTk5OTk2MTg1MzAyNzM7YnJlYWs7Y2FzZSAyMjpmPS4yOTQ5OTk5ODY4ODY5NzgxNSxuPS42MDUwMDAwMTkwNzM0ODYzLHQ9LjE1NTAwMDAwMTE5MjA5Mjksbz0uMDc2OTk5OTk5NTgyNzY3NDksYT0uNjI5OTk5OTk1MjMxNjI4NCxjPS4zNDAwMDAwMDM1NzYyNzg3LGw9LjMxMjcwMDAwMzM4NTU0MzgsdT0uMzI4OTk5OTk2MTg1MzAyNzM7YnJlYWs7ZGVmYXVsdDp1PWw9Yz1hPW89dD1uPWY9MH1oPTEtKHUrbCksYj11Kih0KihrPWMqKHM9MS0obitmKSktKGQ9MS0oYythKSkqbikrKGYqKG8qZC1jKih3PTEtKG8rdCkpKSthKih2PW4qdy1vKnMpKSksZ0FbQT4+Ml09YyooaCoobypmLXQqbikrKGwqdit1Kih0KnMtZip3KSkpL2IsZj1vKihoKihhKm4tYypmKSsobCprK3UqKGQqZi1hKnMpKSkvYjticmVhaztjYXNlIDE6Z0FbQT4+Ml09LjIxMjU5OTk5Mjc1MjA3NTIsZj0uMDcyMjAwMDAwMjg2MTAyMzticmVhaztjYXNlIDQ6Z0FbQT4+Ml09LjMwMDAwMDAxMTkyMDkyODk2LGY9LjEwOTk5OTk5OTQwMzk1MzU1O2JyZWFrO2Nhc2UgNjpjYXNlIDU6Z0FbQT4+Ml09LjI5ODk5OTk5NDk5MzIwOTg0LGY9LjExNDAwMDAwMDA1OTYwNDY0O2JyZWFrO2Nhc2UgNzpnQVtBPj4yXT0uMjExOTk5OTk3NDk2NjA0OTIsZj0uMDg2OTk5OTk3NDk2NjA0OTI7YnJlYWs7Y2FzZSAxMDpjYXNlIDk6Z0FbQT4+Ml09LjI2MjY5OTk5MTQ2NDYxNDg3LGY9LjA1OTMwMDAwMTcxMDY1MzMwNTticmVhaztkZWZhdWx0OnJldHVybn1nQVtpPj4yXT1mfWZ1bmN0aW9uIFplKEEpe3RyWyhBfD0wKT4+MF09MSxnQVtBKzQ+PjJdPTEuNDAxOTk5OTUwNDA4OTM1NSxnQVtBKzg+PjJdPS0uMzQ0MTM1OTk5Njc5NTY1NDMsZ0FbQSsxMj4+Ml09LS43MTQxMzYwMDQ0NDc5MzcsZ0FbQSsxNj4+Ml09MS43NzE5OTk5NTUxNzczMDcxfWZ1bmN0aW9uIHBlKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDt1cj0obj11cikrMTZ8MCx0PW4sdHJbKEF8PTApPj4wXT0wLGFyWyhpPUErNHwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsZ2UodCxlLHIpLGY9K2dBW3QrND4+Ml0sbz0rZ0FbdD4+Ml0sdHJbQT4+MF09MSxvPTAhPWZ8MCE9bz8oYT0xLW8sZ0FbaT4+Ml09MiphLGM9MioodT0xLWYpLGE9MipvKmEvKGw9bytmKy0xKSwyKmYqdS9sKTooZ0FbaT4+Ml09MS40MDE5OTk5NTA0MDg5MzU1LGM9MS43NzE5OTk5NTUxNzczMDcxLGE9LS43MTQxMzYwMDQ0NDc5MzcsLS4zNDQxMzU5OTk2Nzk1NjU0MyksZ0FbQSs4Pj4yXT1vLGdBW0ErMTI+PjJdPWEsZ0FbQSsxNj4+Ml09Yyx1cj1ufWZ1bmN0aW9uIHllKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Zvcih1cj0odD11cikrMTZ8MCxmPXQsaT0oYz1uPShBfD0wKSs0fCh0cltBPj4wXT0wKSkrMzZ8MDsoMHwoYz1jKzR8KGFyW2M+PjJdPTApKSk8KDB8aSk7KTtnZShmLGUsciksbz0rZ0FbZis0Pj4yXSxhPStnQVtmPj4yXSx0cltBPj4wXT0xLDAhPW98MCE9YT8oYj0odT0xLShnQVtuPj4yXT1hKSktbyxsPS1vL3UqLjUsdT0oYj0tKGdBW0ErOD4+Ml09YikpL3UqLjUsYj1iLyhzPTEtbykqLjUsYT0tYS9zKi41KTooZ0Fbbj4+Ml09LjI5ODk5OTk5NDk5MzIwOTg0LGdBW0ErOD4+Ml09LjU4NzAwMDAxMjM5Nzc2NjEsbD0tLjA4MTMxMjAwMDc1MTQ5NTM2LHU9LS40MTg2ODc5OTkyNDg1MDQ2NCxiPS0uMzMxMjYzOTg5MjEwMTI4OCxhPS0uMTY4NzM0OTk3NTEwOTEwMDMsbz0uMTE0MDAwMDAwMDU5NjA0NjQpLGdBW0ErMTI+PjJdPW8sZ0FbQSsxNj4+Ml09YSxnQVtBKzIwPj4yXT1iLGdBW0ErMjQ+PjJdPS41LGdBW0ErMjg+PjJdPS41LGdBW0ErMzI+PjJdPXUsZ0FbQSszNj4+Ml09bCx1cj10fWZ1bmN0aW9uIEJlKEEpe3RyWyhBfD0wKT4+MF09MSxnQVtBKzQ+PjJdPS4yOTg5OTk5OTQ5OTMyMDk4NCxnQVtBKzg+PjJdPS41ODcwMDAwMTIzOTc3NjYxLGdBW0ErMTI+PjJdPS4xMTQwMDAwMDAwNTk2MDQ2NCxnQVtBKzE2Pj4yXT0tLjE2ODczNDk5NzUxMDkxMDAzLGdBW0ErMjA+PjJdPS0uMzMxMjYzOTg5MjEwMTI4OCxnQVtBKzI0Pj4yXT0uNSxnQVtBKzI4Pj4yXT0uNSxnQVtBKzMyPj4yXT0tLjQxODY4Nzk5OTI0ODUwNDY0LGdBW0ErMzY+PjJdPS0uMDgxMzEyMDAwNzUxNDk1MzZ9ZnVuY3Rpb24gRWUoQSxlKXtyZXR1cm4gMHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MDt1cj0odD11cikrMTZ8MCxuPXQsYT01NDgrKEF8PTApfDAsaT0wPT0oMHxhclsocj1BKzU4MHwwKT4+Ml0pLGY9MHx0clthPj4wXTtkb3tpZihpKXtpZihmPDwyND4+MjQ9PTAmJjA9PSgwfHRyW0ErNTQ5Pj4wXSkpe2M9ODticmVha31pZigoMHxhcltBKzM3NzIxNj4+Ml0pPT0oMHxhcltBKzM3NzIyMD4+Ml0pKXJldHVybiByYShBKzM3NjE0OHwwKSx1cj0oZSYmKGFyW2U+PjJdPWFyW0ErMzc2MjAwPj4yXSksdCksKGM9MCl8YztjPTd9ZWxzZSBjPTd9d2hpbGUoMCk7Nz09KDB8YykmJmY8PDI0Pj4yND09MCYmKGM9OCk7aWYoOD09KDB8YykmJiEoMCE9KDB8dHJbQSs1NDk+PjBdKXwxXmkpKXJldHVybiB1cj0oZSYmKGFyW2U+PjJdPTEpLHQpLDB8KGM9MTMpO2lmKCEoMHxMbyhBKzM3NjE0OHwwLDApKSlyZXR1cm4gdXI9KGUmJihhcltlPj4yXT0xKSx0KSwwfChjPTkpO3RyW24+PjBdPTA7ZG97aWYoMHxhcltyPj4yXSl7aWYoYT0wfHlhKGEpKXtvPTB8VW8oQSxhKSx0cltuPj4wXT0xLGM9MjM7YnJlYWt9c3IoMzUxMjYsMzQ3MDAsMTMxNCwzNTEzMCl9ZWxzZXtpZigwfHRyW0ErNTQ5Pj4wXSYmKDB8YXJbQSszNzcyMTY+PjJdKT09KDB8YXJbQSszNzcyMjA+PjJdKSl7aWYoIWUpe289MTM7YnJlYWt9YXJbZT4+Ml09MSxvPTEzO2JyZWFrfW89MHxZbyhBLG4pLGM9MjN9fXdoaWxlKDApOzIzPT0oMHxjKSYmZSYmKGFyW2U+PjJdPTA9PSgwfG8pJjAhPSgxJnRyW24+PjBdKSYxKTtyZXR1cm4gdXI9dCwwfChjPW8pfShBfD0wLGV8PTApfWZ1bmN0aW9uIFZlKEEsZSxyLGksZixuKXtyZXR1cm4gMHxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO3VyPSh0PXVyKSsxNnwwLGQ9dCwwfGFyWzgrKEF8PTApPj4yXSYmc3IoMzY4NTYsMzY4ODIsMzc1LDM2ODk2KTt0cltBKzE+PjBdPTAsaz0wfGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShuPXVyKSsxNnwwLGk9bixmPTQwKyhBfD0wKXwwLCgwfCh0PTB8YXJbKHM9QSs0NHwwKT4+Ml0pKT09KDB8YXJbZj4+Ml0pKXtmb3IodD0wfGh1KDQ4KSx0clt0Pj4wXT0wLHRyW3QrMT4+MF09MCx0clt0KzI+PjBdPTAsYXJbKGE9dCszMnwwKT4+Ml09MCxhclsobz10KzM2fDApPj4yXT0wLGFyWyhsPXQrNDB8MCk+PjJdPTAsYz0wfGh1KDY0KSxhclthPj4yXT1jLGE9Yys2NHwwLGFyW2w+PjJdPWEsbD1jKzY0fDA7KChhcltjPj4yXT0wKXwoYz1jKzR8MCkpPCgwfGwpOyk7YXJbbz4+Ml09YSxhclsoYj10Kzh8MCk+PjJdPTAsYXJbYis0Pj4yXT0wLGFyW2IrOD4+Ml09MCxhcltiKzEyPj4yXT0wLGFyW2IrMTY+PjJdPTAsYXJbYisyMD4+Ml09MCxiPXR9ZWxzZSBiPTB8YXJbKHU9dCstNHwwKT4+Ml0sYXJbcz4+Ml09dTt0cltiPj4wXT0wLHRyW2IrMT4+MF09MCx0cltiKzI+PjBdPTAsYXJbKGw9Yis4fDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltiKzE2Pj4yXT0wLGFyWyhsPWIrMjR8MCk+PjJdPTAsdD0wfGFyWyhyPWIrMzJ8MCk+PjJdLCgwfChvPTB8YXJbKHU9YiszNnwwKT4+Ml0pKSE9KDB8dCkmJihhclt1Pj4yXT1vKyh+KChvKy00LXR8MCk+Pj4yKTw8MikpO2lmKCgwfGFyWyhhPWIrMjh8MCk+PjJdKT49KDB8ZSkpcmV0dXJuIHVyPW4sMHwocz1iKTtpZigwfChjPTB8eWMoZSkpKXJldHVybiAwfChvPTB8YXJbKHQ9YisyMHwwKT4+Ml0pJiYoaGIoMHxjLDB8bywwfGFyW2w+PjJdKSxCYyhvKSksYXJbdD4+Ml09YyxhclthPj4yXT1lLHVyPW4sMHwocz1iKTthcltpPj4yXT1iLHQ9YixvPTB8YXJbcz4+Ml07ZG97aWYoby0oMHxhcltmPj4yXSk+PjI+Pj4wPDE2KXtpZigoMHxvKT09KDB8YXJbQSs0OD4+Ml0pKXtwYShmLGkpO2JyZWFrfWFyW28+PjJdPXQsYXJbcz4+Ml09NCsoMHxhcltzPj4yXSk7YnJlYWt9QmMoMHxhcltiKzIwPj4yXSksMHwodD0wfGFyW3I+PjJdKSYmKCgwfChvPTB8YXJbdT4+Ml0pKSE9KDB8dCkmJihhclt1Pj4yXT1vKyh+KChvKy00LXR8MCk+Pj4yKTw8MikpLHZ1KHQpKSx2dShiKX13aGlsZSgwKTtyZXR1cm4gdXI9biwocz0wKXxzfShBLHIpO0E6ZG97aWYoayl7YT1rKzI4fDA7ZG97aWYoKDB8YXJbYT4+Ml0pPCgwfHIpKXtpZigwfChvPTB8eWMocikpKXswfChsPTB8YXJbKGM9aysyMHwwKT4+Ml0pJiYoaGIoMHxvLDB8bCwwfGFyW2srMjQ+PjJdKSxCYyhsKSksYXJbYz4+Ml09byxhclthPj4yXT1yO2JyZWFrfWlmKGFyW2Q+PjJdPWssbz1rLGE9QSs0MHwwLChsPTB8YXJbKGM9QSs0NHwwKT4+Ml0pLSgwfGFyW2E+PjJdKT4+Mj4+PjA8MTYpe2lmKCgwfGwpPT0oMHxhcltBKzQ4Pj4yXSkpe3BhKGEsZCk7YnJlYWsgQX1hcltsPj4yXT1vLGFyW2M+PjJdPTQrKDB8YXJbYz4+Ml0pO2JyZWFrIEF9QmMoMHxhcltrKzIwPj4yXSksMHwobz0wfGFyW2srMzI+PjJdKSYmKCgwfChjPTB8YXJbKGE9ayszNnwwKT4+Ml0pKSE9KDB8bykmJihhclthPj4yXT1jKyh+KChjKy00LW98MCk+Pj4yKTw8MikpLHZ1KG8pKSx2dShrKTticmVhayBBfW89MHxhcltrKzIwPj4yXX13aGlsZSgwKTtoYigwfG8sMHxlLDB8ciksYXJbKHM9aysyNHwwKT4+Ml09cixhclsodT1rKzh8MCk+PjJdPWksYXJbdSs0Pj4yXT1mLGFyW2srMTY+PjJdPW47ZTpkb3tpZigyPCgwfHIpKWZvcihmPWsrMzJ8MCxuPWsrMzZ8MCx1PWsrNDB8MCxvPTB8YXJbaysyMD4+Ml0saT0wLGw9cjs7KXtzd2l0Y2goKGE9MHx0clsoZT1vKzJ8MCk+PjBdKTw8MjQ+PjI0KXtjYXNlIDA6Y2FzZSAzOjA9PSgwfHRyW28+PjBdKSYmYTw8MjQ+PjI0PT0zJjA9PSgwfHRyWyhiPW8rMXwwKT4+MF0pPyhjPTB8YXJbbj4+Ml0sYT1pKzIrKGMtKDB8YXJbZj4+Ml0pPj4yKXwwLGFyW2Q+PjJdPWEsKDB8Yyk9PSgwfGFyW3U+PjJdKT9nYShmLGQpOihhcltjPj4yXT1hLGFyW24+PjJdPWMrNCksd2IoMHxlLG8rM3wwLC0zLWkrKDB8YXJbcz4+Ml0pfDApLGE9KDB8YXJbcz4+Ml0pLTF8MCxhcltzPj4yXT1hLGM9aSsxfDAsbz1iKTooYz1pLGE9bCk7YnJlYWs7ZGVmYXVsdDpjPWkrMnwwLG89ZSxhPWx9aWYoKGErLTJ8MCk8PSgwfChpPWMrMXwwKSkpYnJlYWsgZTtvPW8rMXwwLGw9YX19d2hpbGUoMCk7cmV0dXJuIG89MHxhclsoZT1BKzE2fDApPj4yXSxkPSgwfGFyW0ErMjA+PjJdKS1vfDAsYz0wfGFyWyhhPUErMjh8MCk+PjJdLGw9MHxhclsoaT1BKzMyfDApPj4yXSwoMHwoMD09KDB8ZCk/MDooZDw8OCktMXwwKSk9PShsK2N8MCk/KEVhKEErMTJ8MCksYz0wfGFyW2E+PjJdLGE9MHxhcltpPj4yXSxvPTB8YXJbZT4+Ml0pOmE9bCxhclsoMHxhcltvKygoZD1hK2N8MCk+Pj4xMDw8Mik+PjJdKSsoKDEwMjMmZCk8PDIpPj4yXT1rLGFyW2k+PjJdPWErMSxhclsoaz1BKzM2fDApPj4yXT0oMHxhcltrPj4yXSkrKDB8YXJbcz4+Ml0pLHVyPXQsKGs9MCl8a31hcltkPj4yXT0wfXdoaWxlKDApO3JldHVybiB1cj10LDB8KGs9Nyl9KChBfD0wKSs1NDh8MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTApfWZ1bmN0aW9uIEZlKEEpe3ZhciBlPTA7cmV0dXJuKDB8YXJbKEF8PTApKzM3NjIwMD4+Ml0pPD0wPyhlPTApfGU6KGU9MHxhcltBKzM3NjE5Nj4+Ml0sKGU9MHxhclsoMHxhclsoMHxhcltBKzM3NjE4ND4+Ml0pKyhlPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmUpPDwyKT4+Ml0pPyhmYShBKzM3NjE0OHwodHJbZSsxMDA+PjBdPTApKSwwfGUpOihlPTApfGUpfWZ1bmN0aW9uIFJlKEEpe3ZhciBlOzB8YXJbKEF8PTApKzM3NjIwMD4+Ml0mJihlPTB8YXJbQSszNzYxOTY+PjJdLGZhKEErMzc2MTQ4fCh0clsxMDArKDB8YXJbKDB8YXJbKDB8YXJbQSszNzYxODQ+PjJdKSsoZT4+PjEwPDwyKT4+Ml0pKygoMTAyMyZlKTw8Mik+PjJdKT4+MF09MCkpKX1mdW5jdGlvbiBOZShBLGUscil7c3dpdGNoKEF8PTAscnw9MCwwfChlfD0wKSl7Y2FzZSAwOnJldHVybiB2b2lkKHRyW0ErNTEyPj4wXT0wIT0oMHxyKSYxKTtjYXNlIDY6cmV0dXJuIHZvaWQodHJbQSs1MTQ+PjBdPTAhPSgwfHIpJjEpO2Nhc2UgNzpyZXR1cm4gdm9pZCh0cltBKzUzMj4+MF09MCE9KDB8cikmMSk7Y2FzZSA4OnJldHVybiB2b2lkKHRyW0ErNTMzPj4wXT0wIT0oMHxyKSYxKTtkZWZhdWx0OnNyKDU1NzM5LDM0NTQ4LDUwMywzNDU1Nyl9fWZ1bmN0aW9uIF9lKEEsZSl7c3dpdGNoKEF8PTAsMHwoZXw9MCkpe2Nhc2UgMDpBPUErNzJ8MDticmVhaztjYXNlIDI6Y2FzZSAxOkE9QSs4MHwwO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKGU9MCl8ZX1yZXR1cm4gMHwoZT0wfGFyW0E+PjJdKX1mdW5jdGlvbiBZZShBLGUpe3N3aXRjaChBfD0wLDB8KGV8PTApKXtjYXNlIDA6QT1BKzc2fDA7YnJlYWs7Y2FzZSAyOmNhc2UgMTpBPUErODR8MDticmVhaztkZWZhdWx0OnJldHVybihlPTApfGV9cmV0dXJuIDB8KGU9MHxhcltBPj4yXSl9ZnVuY3Rpb24gUWUoQSxlKXtzd2l0Y2goQXw9MCwwfChlfD0wKSl7Y2FzZSAwOkE9QSs1NzYwfDA7YnJlYWs7Y2FzZSAyOmNhc2UgMTpBPUErNTc2OHwwO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKGU9MCl8ZX1yZXR1cm4gMHwoZT0wfGFyW0E+PjJdKX1mdW5jdGlvbiBEZShBKXtyZXR1cm4gMHxhclsoQXw9MCkrMjA+PjJdfWZ1bmN0aW9uIEplKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZixuPTA7aWYoMzw9KGV8PTApPj4+MCYmc3IoMzQ1ODIsMzQ1NDgsNjM5LDM0NjA5KSxmPTB8YXJbQSs2MCsoZTw8Mik+PjJdLCFyKXJldHVybiAwfGY7c3dpdGNoKGk9MHxhclsoMD09KDB8ZSk/QSs0MHwwOkErNDR8MCk+PjJdLDB8ZSl7Y2FzZSAwOkE9QSs1NzYwfDAsbj03O2JyZWFrO2Nhc2UgMjpjYXNlIDE6QT1BKzU3Njh8MCxuPTc7YnJlYWs7ZGVmYXVsdDpBPTB9cmV0dXJuIDc9PSgwfG4pJiYoQT0oNysoMHxhcltBPj4yXSl8MCkvOHwwKSxuPTB8YnIoQSxpKSxhcltyPj4yXT1uLDB8Zn1mdW5jdGlvbiBNZShBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MDtpZihhclsoQXw9MCk+PjJdPTc2OTYsKDB8KHI9MHxhclsobj1BKzM3NzIxNnwwKT4+Ml0pKSE9KDB8KGk9MHxhclsodD1BKzM3NzIyMHwwKT4+Ml0pKSlmb3IoOyhmPTB8YXJbaSstND4+Ml0pJiYoVGUoZiksdnUoZiksaT0wfGFyW3Q+PjJdLHI9MHxhcltuPj4yXSksaT1pKy00fDAsKDB8cikhPSgwfChhclt0Pj4yXT1pKSk7KTswfHImJnZ1KHIpLGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYobj04KyhBfD0wKXwwLGE9MHxhclsodD1BKzEyfDApPj4yXSxvPTB8YXJbbj4+Ml0sKDB8YSkhPSgwfG8pKWZvcihsPTA7KGM9MHxhcltvKyhsPDwyKT4+Ml0pJiYoYWEoYyksdnUoYyksbz0wfGFyW24+PjJdLGE9MHxhclt0Pj4yXSksKGw9bCsxfDApPj4+MDxhLW8+PjI+Pj4wOyk7YT0wfGFyWyhpPUErMzZ8MCk+PjJdLG89MHxhclsocj1BKzQ4fDApPj4yXSxjPWErKG8+Pj4xMDw8Mil8MCxiPTB8YXJbKGY9QSs0MHwwKT4+Ml0sbz0oMHwobD1iKSk9PSgwfChlPWEpKT8oYj1BKzUyfCh1PTApLDApOih1PSgwfGFyWyhiPUErNTJ8MCk+PjJdKStvfDAsdT0oMHxhclthKyh1Pj4+MTA8PDIpPj4yXSkrKCgxMDIzJnUpPDwyKXwwLCgwfGFyW2M+PjJdKSsoKDEwMjMmbyk8PDIpfDApO0E6Zm9yKDs7KXtkb3tpZigoMHxvKT09KDB8dSkpYnJlYWsgQTtvPW8rNHwwfXdoaWxlKDQwOTYhPShvLSgwfGFyW2M+PjJdKXwwKSk7bz0wfGFyWyhjPW89Yys0fDApPj4yXX1pZihhcltiPj4yXT0wLDI8KG89bC1lPj4yKT4+PjApZm9yKDt2dSgwfGFyW2E+PjJdKSxhPTQrKDB8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09YSxvPSgwfGFyW2Y+PjJdKS1hPj4yLDI8bz4+PjA7KTtzd2l0Y2goMHxvKXtjYXNlIDE6bz01MTIscz0xNDticmVhaztjYXNlIDI6bz0xMDI0LHM9MTR9MTQ9PSgwfHMpJiYoYXJbcj4+Ml09byk7aWYobz0wfGFyW2k+PjJdLGE9MHxhcltmPj4yXSwoMHxvKSE9KDB8YSkpe2Zvcig7dnUoMHxhcltvPj4yXSksKDB8KG89bys0fDApKSE9KDB8YSk7KTtvPTB8YXJbaT4+Ml0sKDB8KGE9MHxhcltmPj4yXSkpIT0oMHxvKSYmKGFyW2Y+PjJdPWErKH4oKGErLTQtb3wwKT4+PjIpPDwyKSl9MHwobz0wfGFyW0ErMzI+PjJdKSYmdnUobyk7MHwoYz0wfGFyW0ErMjA+PjJdKSYmKCgwfChhPTB8YXJbKG89QSsyNHwwKT4+Ml0pKSE9KDB8YykmJihhcltvPj4yXT1hKyh+KChhKy00LWN8MCk+Pj4yKTw8MikpLHZ1KGMpKTtpZighKG89MHxhcltuPj4yXSkpcmV0dXJuOygwfChhPTB8YXJbdD4+Ml0pKSE9KDB8bykmJihhclt0Pj4yXT1hKyh+KChhKy00LW98MCk+Pj4yKTw8MikpO3Z1KG8pfShBKzM3NjE0OHwwKSxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO289MHxhclsoZj04KyhBfD0wKXwwKT4+Ml0sdD0wfGFyWyhpPUErMjB8MCk+PjJdLGE9bysodD4+PjEwPDwyKXwwLGw9MHxhclsobj1BKzEyfDApPj4yXSx0PSgwfChlPWwpKT09KDB8KHI9bykpPyhsPUErMjR8KGM9MCksMCk6KGM9KDB8YXJbKGw9QSsyNHwwKT4+Ml0pK3R8MCxjPSgwfGFyW28rKGM+Pj4xMDw8Mik+PjJdKSsoKDEwMjMmYyk8PDIpfDAsKDB8YXJbYT4+Ml0pKygoMTAyMyZ0KTw8Mil8MCk7QTpmb3IoOzspe2Rve2lmKCgwfHQpPT0oMHxjKSlicmVhayBBO3Q9dCs0fDB9d2hpbGUoNDA5NiE9KHQtKDB8YXJbYT4+Ml0pfDApKTt0PTB8YXJbKGE9dD1hKzR8MCk+PjJdfWlmKGFyW2w+PjJdPTAsMjwodD1lLXI+PjIpPj4+MClmb3IoO3Z1KDB8YXJbbz4+Ml0pLG89NCsoMHxhcltmPj4yXSl8MCxhcltmPj4yXT1vLHQ9KDB8YXJbbj4+Ml0pLW8+PjIsMjx0Pj4+MDspO3N3aXRjaCgwfHQpe2Nhc2UgMTp0PTUxMix1PTEzO2JyZWFrO2Nhc2UgMjp0PTEwMjQsdT0xM30xMz09KDB8dSkmJihhcltpPj4yXT10KTtpZih0PTB8YXJbZj4+Ml0sbz0wfGFyW24+PjJdLCgwfHQpIT0oMHxvKSl7Zm9yKDt2dSgwfGFyW3Q+PjJdKSwoMHwodD10KzR8MCkpIT0oMHxvKTspO3Q9MHxhcltmPj4yXSwoMHwobz0wfGFyW24+PjJdKSkhPSgwfHQpJiYoYXJbbj4+Ml09bysofigobystNC10fDApPj4+Mik8PDIpKX1pZighKHQ9MHxhcltBKzQ+PjJdKSlyZXR1cm47dnUodCl9KEErMzc1Mzk2fDApLEdhKEErMzcwOTg0fDApLEdhKEErMzY2NTg0fDApLEdhKEErMzYyMTg0fDApLEdhKEErMzU3Nzg0fDApLEdhKEErMzUzMzg0fDApLEdhKEErMzQ4OTg0fDApLEdhKEErMzQ0NTg0fDApLEdhKEErMzQwMTg0fDApLEdhKEErMzM1Nzg0fDApLEdhKEErMzMxMzg0fDApLEdhKEErMzI2OTg0fDApLEdhKEErMzIyNTg0fDApLEdhKEErMzE4MTg0fDApLEdhKEErMzEzNzg0fDApLEdhKEErMzA5Mzg0fDApLEdhKEErMzA0OTg0fDApLEdhKEErMzAwNTg0fDApLEdhKEErMjk2MTg0fDApLEdhKEErMjkxNzg0fDApLEdhKEErMjg3Mzg0fDApLEdhKEErMjgyOTg0fDApLEdhKEErMjc4NTg0fDApLEdhKEErMjc0MTg0fDApLEdhKEErMjY5Nzg0fDApLEdhKEErMjY1Mzg0fDApLEdhKEErMjYwOTg0fDApLEdhKEErMjU2NTg0fDApLEdhKEErMjUyMTg0fDApLEdhKEErMjQ3Nzg0fDApLEdhKEErMjQzMzg0fDApLEdhKEErMjM4OTg0fDApLEdhKEErMjM0NTg0fDApLEdhKEErMjMwMTg0fDApLEdhKEErMjI1Nzg0fDApLEdhKEErMjIxMzg0fDApLEdhKEErMjE2OTg0fDApLEdhKEErMjEyNTg0fDApLEdhKEErMjA4MTg0fDApLEdhKEErMjAzNzg0fDApLEdhKEErMTk5Mzg0fDApLEdhKEErMTk0OTg0fDApLEdhKEErMTkwNTg0fDApLEdhKEErMTg2MTg0fDApLEdhKEErMTgxNzg0fDApLEdhKEErMTc3Mzg0fDApLEdhKEErMTcyOTg0fDApLEdhKEErMTY4NTg0fDApLEdhKEErMTY0MTg0fDApLEdhKEErMTU5Nzg0fDApLEdhKEErMTU1Mzg0fDApLEdhKEErMTUwOTg0fDApLEdhKEErMTQ2NTg0fDApLEdhKEErMTQyMTg0fDApLEdhKEErMTM3Nzg0fDApLEdhKEErMTMzMzg0fDApLEdhKEErMTI4OTg0fDApLEdhKEErMTI0NTg0fDApLEdhKEErMTIwMTg0fDApLEdhKEErMTE1Nzg0fDApLEdhKEErMTExMzg0fDApLEdhKEErMTA2OTg0fDApLEdhKEErMTAyNTg0fDApLEdhKEErOTgxODR8MCksR2EoQSs5Mzc4NHwwKSxBYyhBKzg4NjE2fDApLEFjKEErODM0NDh8MCksQWMoQSs3ODI4MHwwKSxBYyhBKzczMTEyfDApLEFjKEErNjc5NDR8MCksQWMoQSs2Mjc3NnwwKSxBYyhBKzU3NjA4fDApLEFjKEErNTI0NDB8MCksQWMoQSs0NzI3MnwwKSxBYyhBKzQyMTA0fDApLEFjKEErMzY5MzZ8MCksQWMoQSszMTc2OHwwKSxBYyhBKzI2NjAwfDApLEFjKEErMjE0MzJ8MCksQWMoQSsxNjI2NHwwKSxBYyhBKzExMDk2fDApLGU9QSs2MDB8MCxvPUErMTEwOTZ8MDtkb3tpZigwfChyPTB8YXJbbystMTY+PjJdKSYmKCgwfGFyWyhpPW8rLTEyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLDB8KHI9MHxhcltvKy0yOD4+Ml0pJiYoKDB8KGY9MHxhclsoaT1vKy0yNHwwKT4+Ml0pKSE9KDB8cikmJihhcltpPj4yXT1mKyh+KChmKy0yLXJ8MCk+Pj4xKTw8MSkpLHZ1KHIpKSwwfChyPTB8YXJbKG49bystNjR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsodD1vKy02MHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7aT1pKy0xMnwwLGFyW3Q+PjJdPWksKGY9MHxhcltpPj4yXSkmJih2dShmKSxpPTB8YXJbdD4+Ml0pLCgwfGkpIT0oMHxyKTspO3I9MHxhcltuPj4yXX12dShyKX1vPW8rLTY1NnwwfXdoaWxlKCgwfG8pIT0oMHxlKSk7IWZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO3VyPShpPXVyKSsxNnwwLGU9aSxmPTB8YXJbKHI9MzIrKEF8PTApfDApPj4yXTtBOmRve2lmKDB8Zil7Yz1BKzE2fDAsbD1BKzI4fDAsdT1BKzM2fDAsYj1BKzQwfDAscz1BKzQ0fDAsYT1BKzQ4fDA7ZG97aWYobj0wfGFyW2M+PjJdLHQ9MHxhcltsPj4yXSxvPTB8YXJbKDB8YXJbbisodD4+PjEwPDwyKT4+Ml0pKygoMTAyMyZ0KTw8Mik+PjJdLGFyW3I+PjJdPWYrLTEsdD10KzF8MCwyMDQ3PChhcltsPj4yXT10KT4+PjAmJih2dSgwfGFyW24+PjJdKSxhcltjPj4yXT00KygwfGFyW2M+PjJdKSxhcltsPj4yXT0oMHxhcltsPj4yXSktMTAyNCksYXJbdT4+Ml09KDB8YXJbdT4+Ml0pLSgwfGFyW28rMjQ+PjJdKSwhbylicmVhayBBO2FyW2U+PjJdPW8sZj1vLG49MHxhcltzPj4yXTtkb3tpZihuLSgwfGFyW2I+PjJdKT4+Mj4+PjA8MTYpe2lmKCgwfG4pPT0oMHxhclthPj4yXSkpe3BhKGIsZSk7YnJlYWt9YXJbbj4+Ml09ZixhcltzPj4yXT00KygwfGFyW3M+PjJdKTticmVha31CYygwfGFyW28rMjA+PjJdKSwwfChmPTB8YXJbbyszMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1vKzM2fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLHZ1KG8pfXdoaWxlKDApO2Y9MHxhcltyPj4yXX13aGlsZSgwIT0oMHxmKSl9fXdoaWxlKDApO2lmKG89MHxhcltBKzg+PjJdKXthcltlPj4yXT1vLGY9byxjPUErNDB8MCxuPTB8YXJbKGE9QSs0NHwwKT4+Ml07ZG97aWYobi0oMHxhcltjPj4yXSk+PjI+Pj4wPDE2KXtpZigoMHxuKT09KDB8YXJbQSs0OD4+Ml0pKXtwYShjLGUpO2JyZWFrfWFyW24+PjJdPWYsYXJbYT4+Ml09NCsoMHxhclthPj4yXSk7YnJlYWt9QmMoMHxhcltvKzIwPj4yXSksMHwoZj0wfGFyW28rMzI+PjJdKSYmKCgwfCh0PTB8YXJbKG49byszNnwwKT4+Ml0pKSE9KDB8ZikmJihhcltuPj4yXT10Kyh+KCh0Ky00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSx2dShvKX13aGlsZSgwKTt1PWI9YX1lbHNlIGI9dT1BKzQ0fDAsYz1BKzQwfDA7aWYodD0wfGFyW3U+PjJdLG89MHxhcltjPj4yXSwoMHwoZj10KSkhPSgwfChuPW8pKSlmb3IobD0wOyhhPTB8YXJbbisobDw8Mik+PjJdKSYmKEJjKDB8YXJbYSsyMD4+Ml0pLDB8KGY9MHxhclthKzMyPj4yXSkmJigoMHwodD0wfGFyWyhuPWErMzZ8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstNC1mfDApPj4+Mik8PDIpKSx2dShmKSksdnUoYSksZj0wfGFyW3U+PjJdLG89MHxhcltjPj4yXSx0PWYpLChsPWwrMXwwKT4+PjA8dC0obj1vKT4+Mj4+PjA7KTswfG4mJigoMHxmKSE9KDB8bikmJihhcltiPj4yXT1mKyh+KChmKy00LW58MCk+Pj4yKTw8MikpLHZ1KG4pKTtmPTB8YXJbKGI9QSsxNnwwKT4+Ml0sbj0wfGFyWyh1PUErMjh8MCk+PjJdLG89Zisobj4+PjEwPDwyKXwwLHQ9MHxhclsocz1BKzIwfDApPj4yXSxuPSgwfChhPXQpKT09KDB8KGM9ZikpP2w9MDoobD0oMHxhcltyPj4yXSkrbnwwLGw9KDB8YXJbZisobD4+PjEwPDwyKT4+Ml0pKygoMTAyMyZsKTw8Mil8MCwoMHxhcltvPj4yXSkrKCgxMDIzJm4pPDwyKXwwKTtBOmZvcig7Oyl7ZG97aWYoKDB8bik9PSgwfGwpKWJyZWFrIEE7bj1uKzR8MH13aGlsZSg0MDk2IT0obi0oMHxhcltvPj4yXSl8MCkpO249MHxhclsobz1uPW8rNHwwKT4+Ml19aWYoYXJbcj4+Ml09MCwyPChuPWEtYz4+Mik+Pj4wKWZvcig7dnUoMHxhcltmPj4yXSksZj00KygwfGFyW2I+PjJdKXwwLGFyW2I+PjJdPWYsdD0wfGFyW3M+PjJdLG49dC1mPj4yLDI8bj4+PjA7KTtzd2l0Y2goMHxuKXtjYXNlIDE6bj01MTIsZD00NTticmVhaztjYXNlIDI6bj0xMDI0LGQ9NDV9NDU9PSgwfGQpJiYoYXJbdT4+Ml09bik7aWYoKDB8ZikhPSgwfHQpKXtmb3IoO3Z1KDB8YXJbZj4+Ml0pLCgwfChmPWYrNHwwKSkhPSgwfHQpOyk7Zj0wfGFyW2I+PjJdLCgwfChuPTB8YXJbcz4+Ml0pKSE9KDB8ZikmJihhcltzPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpfShmPTB8YXJbQSsxMj4+Ml0pJiZ2dShmKSx1cj1pfShBKzU0OHwwKX1mdW5jdGlvbiBUZShBKXt2YXIgZSxyLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGk9KEF8PTApKzEwNjMyfDAsKDB8KG49MHxhclsobD1BKzEwNjM2fDApPj4yXSkpIT0oMHwoZj0wfGFyW2k+PjJdKSkpe2E9MDtkb3tpZihvPTB8YXJbZisoYTw8Mik+PjJdKXtpZihCYSg1NDgrKDB8YXJbbysxNDQ+PjJdKXwwLDB8YXJbbz4+Ml0pLDB8KG49MHxhcltvKzEzNj4+Ml0pKXtpZigwfChmPTB8YXJbKHQ9bistMTZ8MCkrMTI+PjJdKSlmb3IoZj1uKygxODYyNCpmfDApfDA7a3QoZistNDR8MCksKDB8KGY9ZistMTg2MjR8MCkpIT0oMHxuKTspO211KHQpfUpuKG8rNDR8MCksdnUobyksZj0wfGFyW2k+PjJdLG49MHxhcltsPj4yXX1hPWErMXwwfXdoaWxlKGE+Pj4wPG4tZj4+Mj4+PjApfWlmKGU9QSsxMDY2NHwwLCgwfChmPTB8YXJbKHI9QSsxMDY2OHwwKT4+Ml0pKSE9KDB8KG49dD0wfGFyW2U+PjJdKSkpZm9yKGM9MCxhPW4sbz10Oyh0PTB8YXJbYSsoYzw8Mik+PjJdKT8oaXNbNTExJmFyWzQrKDB8YXJbdD4+Ml0pPj4yXV0odCksbj10PTB8YXJbZT4+Ml0sZj0wfGFyW3I+PjJdKTp0PW8sIShmLXQ+PjI+Pj4wPD0oYz1jKzF8MCk+Pj4wKTspbz1hPXQ7aWYoZj0wfGFyWyhvPUErMTA2NzZ8MCk+PjJdKXtpZigoMHwobj0wfGFyWyh0PUErMTA2ODB8MCk+PjJdKSkhPSgwfGYpKXtmb3IoO2M9bistOHwwLGt0KGFyW3Q+PjJdPWMpLCgwfChuPTB8YXJbdD4+Ml0pKSE9KDB8Zik7KTtmPTB8YXJbbz4+Ml19dnUoZiksZj0wfGFyW2U+PjJdfWVsc2UgZj1uOzB8ZiYmKCgwfChuPTB8YXJbcj4+Ml0pKSE9KDB8ZikmJihhcltyPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSwwfChmPTB8YXJbQSsxMDY0ND4+Ml0pJiYoKDB8KHQ9MHxhclsobj1BKzEwNjQ4fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKDgwKn4oKCh0Ky04MC1mfDApPj4+MCkvODB8MCl8MCkpLHZ1KGYpKSwoZj0wfGFyW2k+PjJdKSYmKCgwfChuPTB8YXJbbD4+Ml0pKSE9KDB8ZikmJihhcltsPj4yXT1uKyh+KChuKy00LWZ8MCk+Pj4yKTw8MikpLHZ1KGYpKSxhYShsPUErOHwwKX1mdW5jdGlvbiBVZShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MDtpZigwfGFyWyhpPShBfD0wKSsxMzZ8MCk+PjJdJiZzcigzNDY3OCwzNDcwMCwxNjksMzQ3MTApLG49MHx3dSgyMzA2MTQ8ZT4+PjB8NDI5NDk2NzI3OTwobj0xODYyNCplfDApPj4+MD8tMTpuKzE2fDApLGFyW24rMTI+PjJdPWUsbj1uKzE2fDAsIWUpcmV0dXJuIGFyW2k+PjJdPW4sdm9pZChhclsobj1BKzE0MHwwKT4+Ml09ZSk7Zm9yKHI9bisoMTg2MjQqZXwwKXwwLGY9bjtzdChmKzE4NTgwfDApLG89ZisxODU5MnwwLHQ9MD09KDB8KHQ9MTUmKGM9Zis0OHwwKSkpP2M6YysoMTYtdCl8MCxhclsoYT1mKzE4NTA4fDApPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsYXJbYSsxMj4+Ml09MCxhclthKzE2Pj4yXT0wLGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxhcltvKzEyPj4yXT0wLHZiKChhcltvKzE2Pj4yXT0wKXwoYXJbZisyMTEyPj4yXT10KSwwLDIwNDgpLCgwfChmPWYrMTg2MjR8MCkpIT0oMHxyKTspO2FyW2k+PjJdPW4sYXJbKGM9QSsxNDB8MCk+PjJdPWV9ZnVuY3Rpb24gU2UoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MDt2YigoZXw9MCkrNDh8MCwwLDIwNjQpLGFyW2UrMTg1MzI+PjJdPS0xLGFyW2UrMTg1MzY+PjJdPS0xLHI9MHxhcltlKzE4NTk2Pj4yXSwoMHwoQT0wfGFyWzE2KygwfGFyW2UrMTg2MDA+PjJdKT4+Ml0pKTw9MHx8KEE9KDErKCgwfChuPTB8YXJbKDB8YXJbMTAyODQrcj4+Ml0pKygoMHxhclsoMHxhclsxMDI3MityPj4yXSkrKEE8PDIpPj4yXSktMTw8Mik+PjJdKSklKDB8KHQ9MHxhcls1ODIwK3I+PjJdKSl8MCk8PChmPTB8YXJbNTgwNCtyPj4yXSkpLTF8MCxmPSgxKygoMHxuKS8oMHx0KXwwKTw8ZiktMXwwLHQ9KDB8YXJbMTI0OCtyPj4yXSktMXwwLG49KDB8YXJbMTI1MityPj4yXSktMXwwLEE9KCgwfHQpPCgwfEEpP3Q6QSk+PihpPTB8YXJbMTAzNjgrcj4+Ml0pLGk9KCgwfG4pPCgwfGYpP246Zik+PmksKDB8QSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChmPTB8YXJbMTAzNzIrcj4+Ml0pKTw9KDB8QSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8aSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGkpPj0oMHxhclsxMDM3NityPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdD0oMHxhclsxMDM2MCtyPj4yXSkrKDMqKCgwfGJyKGYsaSkpK0F8MCl8MCkrMnwwLGFyW2UrMTg1Mjg+PjJdPXRyW3Q+PjBdKX1mdW5jdGlvbiBPZShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiB6ZShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbj0wLHQ9MCxvPTA7aWYodXI9KGY9dXIpKzY1NnwwLGFyWyhuPShyPWYpKzU5MnwwKT4+Ml09MCxhclsoaT1yKzU5NnwwKT4+Ml09MCxhcltyKzYwMD4+Ml09MCxhclsodD1yKzYyOHwwKT4+Ml09MCxhclt0KzQ+PjJdPTAsYXJbdCs4Pj4yXT0wLGFyW3QrMTI+PjJdPTAsYXJbdCsxNj4+Ml09MCxvPShlPShhclt0KzIwPj4yXT0wKXxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKGw9MHxBdChyfD0wLDQpLDE1PCgwfChhcltBPj4yXT1sKSkpcmV0dXJuIDB8KHI9OCk7aWYoZXQociwyKSxsPTB8QXQociw2KSxhcltBKzQ+PjJdPWwrMSw2MjwoMHxsKSlyZXR1cm4gMHwocj04KTtpZihsPTB8QXQociwzKSxhclsodD1BKzh8MCk+PjJdPWwrMSw2PCgwfGwpKXJldHVybiAwfChyPTgpO2w9MHxBdChyLDEpLGFyW0ErMTI+PjJdPWwsZXQociwxNiksTG4oQSsxNnwwLHIsMHxhclt0Pj4yXSksbD0wfEF0KHIsMSksYXJbKG89QSs0ODR8MCk+PjJdPWwsaT0wfGFyW3Q+PjJdLGw/MDwoMHxpKSYmKGE9MCxmPTcpOihhPWkrLTF8MCxmPTcpO2Rve2lmKDc9PSgwfGYpKXtmb3IoaT1hOzspe2lmKG49MHxpdChyKSxhclsobD1BKzQ4OCsoMTIqaXwwKXwwKT4+Ml09bixuPTB8aXQociksYXJbKGY9QSs0ODgrKDEyKml8MCkrNHwwKT4+Ml09bixuPTB8aXQociksYXJbQSs0ODgrKDEyKml8MCkrOD4+Ml09biwtOTk5OTk9PSgwfGFyW2w+PjJdKSl7aT04LGY9NDg7YnJlYWt9aWYoaT1pKzF8MCwtOTk5OTk9PSgwfG4pfC05OTk5OT09KDB8YXJbZj4+Ml0pKXtpPTgsZj00ODticmVha31pZigoMHxpKT49KDB8YXJbdD4+Ml0pKXtmPTExO2JyZWFrfX1pZigxMT09KDB8Zikpe2lmKDB8YXJbbz4+Ml0pYnJlYWs7aWYoODw9KDB8YSkmJnNyKDQ0NTg3LDQ0NTEyLDE0NCw0NDYyNyksKDB8YSk8PTApYnJlYWs7Zm9yKGY9QSs0ODgrKDEyKmF8MCl8MCxuPUErNDg4KygxMiphfDApKzR8MCx0PUErNDg4KygxMiphfDApKzh8MCxpPTA7YXJbQSs0ODgrKDEyKml8MCk+PjJdPWFyW2Y+PjJdLGFyW0ErNDg4KygxMippfDApKzQ+PjJdPWFyW24+PjJdLGFyW0ErNDg4KygxMippfDApKzg+PjJdPWFyW3Q+PjJdLCgwfChpPWkrMXwwKSkhPSgwfGEpOyk7fWVsc2UgaWYoNDg9PSgwfGYpKXJldHVybiAwfGl9fXdoaWxlKDApO2lmKGE9MjU1JigwfEF0KHIsNikpLHRyWyhjPUErNTg0fDApPj4wXT1hLGE9MHxpdChyKSwtOTk5OTk9PSgwfChhclsobD1BKzU4OHwwKT4+Ml09YSkpfDEwMjM8KHQ9YSsxfDApPj4+MClyZXR1cm4gZXIoZSw4LDApLDB8KHI9OCk7aWYoYXJbbD4+Ml09dCxhPUErNTkyfDAsaT0wfGFyWyhvPUErNTk2fDApPj4yXSxuPTB8YXJbYT4+Ml0sdD4+PjA8PShmPShpLW58MCkvMTJ8MCk+Pj4wKXtpZih0Pj4+MDxmPj4+MCYmKDB8aSkhPSgwfCh1PW4rKDEyKnR8MCl8MCkpKWZvcig7aT1pKy0xMnwwLGFyW28+PjJdPWksKGY9MHxhcltpPj4yXSkmJih2dShmKSxpPTB8YXJbbz4+Ml0pLCgwfGkpIT0oMHx1KTspO31lbHNlIWZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYodD0wfGFyWyhpPTgrKEF8PTApfDApPj4yXSxuPTB8YXJbKHU9QSs0fDApPj4yXSwoKHQtKGY9bil8MCkvMTJ8MCk+Pj4wPj1lPj4+MClyZXR1cm4gdmIoMHxuLDAsMTIqZXwwKSxhclt1Pj4yXT1mKygxMiplfDApO2w9MHxhcltBPj4yXSwzNTc5MTM5NDE8KG49KGE9KG4tKHI9bCl8MCkvMTJ8MCkrZXwwKT4+PjAmJnpsKCk7bz0oYz0odC1sfDApLzEyfDApPDwxLG89Yz4+PjA8MTc4OTU2OTcwP28+Pj4wPG4+Pj4wP246bzozNTc5MTM5NDE7ZG97aWYobyl7aWYoISgzNTc5MTM5NDE8bz4+PjApKXtjPTB8aHUoMTIqb3wwKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2lmKG49YysoMTIqYXwwKXwwLGM9YysoMTIqb3wwKXwwLHZiKDB8KHQ9biksMCwxMiplfDApLGE9bisoMTIqZXwwKXwwLCgwfGYpPT0oMHxyKSlvPWw7ZWxzZXtmb3IoO2Y9KGw9ZikrLTEyfDAsYXJbbistMTI+PjJdPWFyW2Y+PjJdLGU9bCstOHwwLGFyW24rLTg+PjJdPWFyW2U+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW2Y+PjJdPTAsYXJbZT4+Ml09MCxhcltsPj4yXT0wLHQ9bj10Ky0xMnwwLCgwfGYpIT0oMHxyKTspO289MHxhcltBPj4yXSxmPTB8YXJbdT4+Ml19aWYoYXJbQT4+Ml09dCxhclt1Pj4yXT1hLGFyW2k+PjJdPWMsKDB8ZikhPSgwfCh0PW8pKSlmb3IoOzB8KG49MHxhclsoZj1mKy0xMnwwKT4+Ml0pJiZ2dShuKSwoMHxmKSE9KDB8dCk7KTtpZighbylyZXR1cm47dnUobyl9KGEsdC1mfDApO2lmKDE8KDB8YXJbbD4+Ml0pKWZvcihmPTEsbj0wfGFyW2E+PjJdLGk9MHx0cltjPj4wXTs7KXtmb3IoS24obisoMTIqZnwwKXwwLDErKDI1NSZpKXwwLDApLG49MDtvPTAhPSgwfEF0KHIsMSkpLHQ9MHxhclthPj4yXSxpPSgwfGFyW3QrKDEyKmZ8MCk+PjJdKSsobj4+PjU8PDIpfDAsdT0xPDwoMzEmbiksZT0wfGFyW2k+PjJdLGFyW2k+PjJdPW8/ZXx1OmUmfnUsaT0wfHRyW2M+PjBdLCgwfG4pPCgyNTUmaXwwKTspbj1uKzF8MDtpZighKCgwfChmPWYrMXwwKSk8KDB8YXJbbD4+Ml0pKSlicmVhaztuPXR9aWYodT0yNTUmKDB8QXQociwxKSksKHRyW0ErNjA0Pj4wXT11KTw8MjQ+PjI0JiYodT0wfEF0KHIsMzIpLGFyW0ErNjA4Pj4yXT11LHU9MHxBdChyLDMyKSxhcltBKzYxMj4+Ml09dSx1PTI1NSYoMHxBdChyLDEpKSwodHJbQSs2MTY+PjBdPXUpPDwyND4+MjQpJiYoaT0xKygwfGl0KHIpKXwwLGFyW0ErNjIwPj4yXT1pLGk9MHxpdChyKSwxMDIzPCgwfChhclsoZT1BKzYyNHwwKT4+Ml09aSkpJiZzcig1NTczOSw0NDUxMiwxODksNDQ2MjcpLGM9QSs2Mjh8MCxvPTB8YXJbKGY9QSs2MzJ8MCk+PjJdLHQ9MHxhcltjPj4yXSxpPj4+MDw9KG49by10Pj4xKT4+PjA/aT4+PjA8bj4+PjAmJigwfG8pIT0oMHwoYj10KyhpPDwxKXwwKSkmJihhcltmPj4yXT1vKyh+KChvKy0yLWJ8MCk+Pj4xKTw8MSkpOihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYoYT0wfGFyWyh0PTgrKEF8PTApfDApPj4yXSxvPTB8YXJbKGw9QSs0fDApPj4yXSxlPj4+MDw9YS1vPj4xPj4+MClyZXR1cm4gdmIoMHxvLDAsZTw8MXwwKSxhcltsPj4yXT1vKyhlPDwxKTtuPTB8YXJbQT4+Ml0sKDB8KG89KGk9KGY9by1ufDApPj4xKStlfDApKTwwJiZ6bCgpO2E9KGE9YS1ufDApPj4xPj4+MDwxMDczNzQxODIzP2E+Pj4wPG8+Pj4wP286YToyMTQ3NDgzNjQ3O2Rve2lmKGEpe2lmKCEoKDB8YSk8MCkpe2M9MHxodShhPDwxKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO3ZiKDB8KHI9YysoaTw8MSl8MCksMCxlPDwxfDApLG89cisoMC1pPDwxKXwwLDA8KDB8ZikmJmhiKDB8bywwfG4sMHxmKTtpZihhcltBPj4yXT1vLGFyW2w+PjJdPXIrKGU8PDEpLGFyW3Q+PjJdPWMrKGE8PDEpLCFuKXJldHVybjt2dShuKX0oYyxpLW58MCksaT0wfGFyW2U+PjJdKSxmPUErNjQwfDAsYT0wfGFyWyhuPUErNjQ0fDApPj4yXSxvPTB8YXJbZj4+Ml0saT4+PjA8PSh0PWEtb3wwKT4+PjA/aT4+PjA8dD4+PjAmJigwfGEpIT0oMHwocz1vK2l8MCkpJiYoYXJbbj4+Ml09cyk6KGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYodD0wfGFyWyhyPTgrKEF8PTApfDApPj4yXSxmPTB8YXJbKGk9QSs0fDApPj4yXSxlPj4+MDw9KHQtZnwwKT4+PjApe2Zvcig7dHJbZj4+MF09MCxmPTErKDB8YXJbaT4+Ml0pfDAsYXJbaT4+Ml09ZiwwIT0oMHwoZT1lKy0xfDApKTspO3JldHVybn1uPTB8YXJbQT4+Ml0sKDB8KGY9KG89Zi1ufDApK2V8MCkpPDAmJnpsKCk7YT0odD10LW58MCk8PDEsbj0oZj10Pj4+MDwxMDczNzQxODIzP2E+Pj4wPGY+Pj4wP2Y6YToyMTQ3NDgzNjQ3KT8wfGh1KGYpOjA7YT1uK298MCxvPW4rZnwwLGY9dD1hO2Zvcig7dHJbZj4+MF09MCx0PWY9dCsxfDAsZT1lKy0xfDAsMCE9KDB8ZSk7KTtlPTB8YXJbQT4+Ml0sbj0oMHxhcltpPj4yXSktZXwwLGY9YSsoMC1uKXwwLDA8KDB8bikmJmhiKDB8ZiwwfGUsMHxuKTtpZihhcltBPj4yXT1mLGFyW2k+PjJdPXQsYXJbcj4+Ml09bywhZSlyZXR1cm47dnUoZSl9KGYsaS10fDApLGk9MHxhcltlPj4yXSksMDwoMHxpKSkpcmV0dXJuIHI9NjU1MzUmKDB8aXQocikpLG9yW2FyW2M+PjJdPj4xXT1yLChyPTApfHI7cmV0dXJuIHI9MjU1JigwfEF0KHIsMSkpLHRyW0ErNjUyPj4wXT1yLChyPTApfHJ9KHIsQSs0fDAsZSkpfHwoLTE8KDB8KGU9MHxhcltBKzUyMD4+Ml0pKSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtzd2l0Y2godXI9KGg9dXIpKzIwOHwwLEk9aCsxOTJ8MCxrPWgrMTg0fDAsZD1oKzE3NnwwLFc9aCsxNjh8MCxzPWgrMTYwfDAsWD1oKzE1MnwwLGI9aCsxNDR8MCxFPWgrMTI4fDAsdT1oKzEyMHwwLEI9aCsxMTJ8MCxhPWgrMTA0fDAseT1oKzk2fDAsZj1oKzg4fDAsaT1oKzgwfDAsbz1oKzcyfDAsdD1oKzY0fDAsbj1oKzU2fDAscj1oKzQ4fDAscD1oKzQwfDAsWj1oKzMyfDAsZz1oKzI0fDAsbT1oKzE2fDAsdj1oKzh8MCxsPSh3PWgpKzIwMHwwLDB8KGV8PTApKXtjYXNlIDE6ZT0xMDE3MjticmVhaztjYXNlIDI6ZT0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1ofWlmKFBuKGM9MHxhcltlPj4yXSw0NDYzMix3KSxhclt2Pj4yXT1hcltBPj4yXSxQbihjLDQ0NjczLHYpLGFyW20+PjJdPWFyW0ErND4+Ml0sUG4oYyw0NDcxNyxtKSx2PUErOHwwLGFyW2c+PjJdPWFyW3Y+PjJdLFBuKGMsNDQ3NjEsZyksYXJbWj4+Ml09YXJbQSsxMj4+Ml0sUG4oYyw0NDgwNSxaKSxaPTB8YXJbdj4+Ml0sJG4oQSsxNnwwLDEsYyksdz1aKy0xfDAsMTwoMHxaKSlmb3IoZT0wO2FyW3A+PjJdPWUsUG4oYyw0NDg0OSxwKSwkbihBKzY4Kyg1MiplfDApfDAsMCxjKSwoMHwoZT1lKzF8MCkpIT0oMHx3KTspO2lmKHA9QSs0ODR8MCxhcltyPj4yXT1hcltwPj4yXSxQbihjLDQ0ODgyLHIpLDB8YXJbcD4+Ml0pe2lmKDA8KDB8YXJbdj4+Ml0pKWZvcihlPTA7eT0wfGFyW0ErNDg4KygxMiplfDApPj4yXSxhcltuPj4yXT1lLGFyWzQrbj4+Ml09eSxQbihjLDQ0OTI5LG4pLGFyW3Q+PjJdPWFyW0ErNDg4KygxMiplfDApKzQ+PjJdLFBuKGMsNDQ5NzEsdCksYXJbbz4+Ml09YXJbQSs0ODgrKDEyKmV8MCkrOD4+Ml0sUG4oYyw0NTAxMixvKSwoMHwoZT1lKzF8MCkpPCgwfGFyW3Y+PjJdKTspO31lbHNlIGFyW2k+PjJdPWFyW0ErNDg4Pj4yXSxQbihjLDQ1MDUzLGkpLGFyW2Y+PjJdPWFyW0ErNDkyPj4yXSxQbihjLDQ1MDk4LGYpLGFyW3k+PjJdPWFyW0ErNDk2Pj4yXSxQbihjLDQ1MTQzLHkpO2lmKFo9QSs1ODR8MCxhclthPj4yXT1jcltaPj4wXSxQbihjLDQ1MTg4LGEpLGc9QSs1ODh8MCxhcltCPj4yXT1hcltnPj4yXSxQbihjLDQ1MjEzLEIpLDE8KDB8YXJbZz4+Ml0pKXt2PUErNTkyfDAsbT00K2x8MCx3PTE7ZG97Zm9yKGU9MDthcltsPj4yXT0oMHxhclsoMHxhclt2Pj4yXSkrKDEyKnd8MCk+PjJdKSsoZT4+PjU8PDIpLGFyW20+PjJdPTE8PCgzMSZlKSxhcltFPj4yXT13LGFyW0UrND4+Ml09ZSx0clsoQj1FKzh8MCk+PjBdPTB8dHJbbD4+MF0sdHJbQisxPj4wXT0wfHRyWzErbD4+MF0sdHJbQisyPj4wXT0wfHRyWzIrbD4+MF0sdHJbQiszPj4wXT0wfHRyWzMrbD4+MF0sdHJbQis0Pj4wXT0wfHRyWzQrbD4+MF0sdHJbQis1Pj4wXT0wfHRyWzUrbD4+MF0sdHJbQis2Pj4wXT0wfHRyWzYrbD4+MF0sdHJbQis3Pj4wXT0wfHRyWzcrbD4+MF0sUG4oYyw0NTI3MyxFKSwoMHxlKTwoMHxjcltaPj4wXSk7KWU9ZSsxfDA7dz13KzF8MH13aGlsZSgoMHx3KTwoMHxhcltnPj4yXSkpfWlmKEU9QSs2MDR8MCxhclt1Pj4yXT10cltFPj4wXSxQbihjLDQ1MjM4LHUpLDB8dHJbRT4+MF0mJihhcltiPj4yXT1hcltBKzYwOD4+Ml0sUG4oYyw0NTMxMCxiKSxhcltYPj4yXT1hcltBKzYxMj4+Ml0sUG4oYyw0NTMzOCxYKSxYPUErNjE2fDAsYXJbcz4+Ml09dHJbWD4+MF0sUG4oYyw0NTM2NixzKSwwfHRyW1g+PjBdKSYmKGFyW1c+PjJdPWFyW0ErNjIwPj4yXSxQbihjLDQ1NDA4LFcpLFc9QSs2MjR8MCxhcltkPj4yXT1hcltXPj4yXSxQbihjLDQ1NDQxLGQpLDA8KDB8YXJbVz4+Ml0pKSlyZXR1cm4gST0wfGxyW2FyW0ErNjI4Pj4yXT4+MV0sYXJbaz4+Ml09MCxhcls0K2s+PjJdPUksUG4oYyw0NTQ3NCxrKSx1cj1oO2FyW0k+PjJdPXRyW0ErNjUyPj4wXSxQbihjLDQ1NTAyLEkpLHVyPWh9KHIsZSksaGIoMHwobz1BKzYwMCsoNjU2KihlPTB8YXJbcj4+Ml0pfDApfDApLDB8ciw1OTIpLCgwfG8pPT0oMHxyKT8obj1yKzYwNHwwLGFyWyhvPUErNjAwKyg2NTYqZXwwKSs2MDR8MCk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09YXJbbis0Pj4yXSxhcltvKzg+PjJdPWFyW24rOD4+Ml0sYXJbbysxMj4+Ml09YXJbbisxMj4+Ml0sYXJbbysxNj4+Ml09YXJbbisxNj4+Ml0sYXJbbysyMD4+Ml09YXJbbisyMD4+Ml0pOihqZShBKzYwMCsoNjU2KmV8MCkrNTkyfDAsMHxhcltuPj4yXSwwfGFyW2k+PjJdKSxuPXIrNjA0fDAsYXJbKG89QSs2MDArKDY1NiplfDApKzYwNHwwKT4+Ml09YXJbbj4+Ml0sYXJbbys0Pj4yXT1hcltuKzQ+PjJdLGFyW28rOD4+Ml09YXJbbis4Pj4yXSxhcltvKzEyPj4yXT1hcltuKzEyPj4yXSxhcltvKzE2Pj4yXT1hcltuKzE2Pj4yXSxhcltvKzIwPj4yXT1hcltuKzIwPj4yXSxIZShBKzYwMCsoNjU2KmV8MCkrNjI4fDAsMHxhclt0Pj4yXSwwfGFyW3IrNjMyPj4yXSkseGUoQSs2MDArKDY1NiplfDApKzY0MHwwLDB8YXJbcis2NDA+PjJdLDB8YXJbcis2NDQ+PjJdKSksdHJbQSs2MDArKDY1NiplfDApKzY1Mj4+MF09MHx0cltyKzY1Mj4+MF0sMCksMHwoZT0wfGFyW3IrNjQwPj4yXSkmJigoMHxhclsoQT1yKzY0NHwwKT4+Ml0pIT0oMHxlKSYmKGFyW0E+PjJdPWUpLHZ1KGUpKSwwfChlPTB8YXJbdD4+Ml0pJiYoKDB8KG49MHxhclsoQT1yKzYzMnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltBPj4yXT1uKyh+KChuKy0yLWV8MCk+Pj4xKTw8MSkpLHZ1KGUpKSwhKGU9MHxhclsodD1yKzU5MnwwKT4+Ml0pKXJldHVybiB1cj1mLDB8bztpZigoMHwoQT0wfGFyW2k+PjJdKSkhPSgwfGUpKXtmb3IoO0E9QSstMTJ8MCxhcltpPj4yXT1BLChuPTB8YXJbQT4+Ml0pJiYodnUobiksQT0wfGFyW2k+PjJdKSwoMHxBKSE9KDB8ZSk7KTtlPTB8YXJbdD4+Ml19cmV0dXJuIHZ1KGUpLHVyPWYsMHxvfWZ1bmN0aW9uIGplKEEsZSxyKXt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtpZih1cj0oYz11cikrMzJ8MCx0PWMrMjR8MCxuPWMrMTZ8MCxvPWMrOHwwLGE9YyxmPSgocnw9MCktKGV8PTApfDApLzEyfDAsKCgodT0wfGFyWyhkPShBfD0wKSs4fDApPj4yXSktKGw9aT0wfGFyW0E+PjJdKXwwKS8xMnwwKT4+PjA8Zj4+PjApe2lmKGkpe2lmKCgwfCh1PTB8YXJbKHM9QSs0fDApPj4yXSkpPT0oMHxsKSl1PWk7ZWxzZXtmb3IoO3U9dSstMTJ8MCxhcltzPj4yXT11LChiPTB8YXJbdT4+Ml0pJiYodnUoYiksdT0wfGFyW3M+PjJdKSwoMHx1KSE9KDB8bCk7KTt1PTB8YXJbQT4+Ml19dnUodSksYXJbZD4+Ml09MCxhcltzPj4yXT0wLHU9YXJbQT4+Ml09MH1pZigzNTc5MTM5NDE8Zj4+PjAmJnpsKCksdT0obT0oMHx1KS8xMnwwKTw8MSwzNTc5MTM5NDE8KHU9bT4+PjA8MTc4OTU2OTcwP3U+Pj4wPGY+Pj4wP2Y6dTozNTc5MTM5NDEpPj4+MCYmemwoKSxiPTB8aHUoMTIqdXwwKSxhclsobT1BKzR8MCk+PjJdPWIsYXJbQT4+Ml09YixhcltkPj4yXT1iKygxMip1fDApLCgwfGUpPT0oMHxyKSlyZXR1cm4gdm9pZCh1cj1jKTtmb3Iodz00K298MCx2PWErNHwwLGg9ZTs7KXtpZihhcltiPj4yXT0wLGFyWyh1PWIrNHwwKT4+Ml09MCwoYXJbKHM9Yis4fDApPj4yXT0wKXwoaz0wfGFyWyhkPWgrNHwwKT4+Ml0pKXtpZigoMHxrKTwwKXt1PTQyO2JyZWFrfVo9MHxodSgoaz0xKygoaystMXwwKT4+PjUpfDApPDwyKSxhcltiPj4yXT1aLGFyW3U+PjJdPTAsYXJbcz4+Ml09ayxzPTB8YXJbaD4+Ml0sYXJbbz4+Ml09cyxrPShhclt3Pj4yXT0wKXxhcltkPj4yXSxhclthPj4yXT1zKyhrPj4+NTw8MiksYXJbdj4+Ml09MzEmayxhcltuPj4yXT1hcltvPj4yXSxhcls0K24+PjJdPWFyWzQrbz4+Ml0sYXJbdD4+Ml09YXJbYT4+Ml0sYXJbNCt0Pj4yXT1hclthKzQ+PjJdLFBlKGIsbix0KX1pZihoPWgrMTJ8MCx1PTEyKygwfGFyW20+PjJdKXwwLGFyW20+PjJdPXUsKDB8aCk9PSgwfHIpKXt1PTQ1O2JyZWFrfWI9dX1pZig0Mj09KDB8dSkpemwoKTtlbHNlIGlmKDQ1PT0oMHx1KSlyZXR1cm4gdm9pZCh1cj1jKX13PShkPSgoMHxhclsodj1BKzR8MCk+PjJdKS1pfDApLzEyfDApPj4+MDxmPj4+MCxkPWUrKDEyKmR8MCl8MCxoPXc/ZDpyO0E6ZG97aWYoKDB8aCk9PSgwfGUpKWc9bDtlbHNle2Zvcig7Oyl7aWYoKDB8bCkhPSgwfGUpKXtpZih1PTB8YXJbKGs9ZSs0fDApPj4yXSl7aWYodT4+PjA+YXJbKHM9bCs4fDApPj4yXTw8NT4+PjApe2lmKChiPTB8YXJbbD4+Ml0pJiYodnUoYiksYXJbbD4+Ml09MCxhcltzPj4yXT0wLHU9KGFyW2wrND4+Ml09MCl8YXJbaz4+Ml0pLCgwfHUpPDApYnJlYWs7Yj0wfGh1KCh1PTErKCh1Ky0xfDApPj4+NSl8MCk8PDIpLGFyW2w+PjJdPWIsYXJbbCs0Pj4yXT0wLGFyW3M+PjJdPXUsdT0wfGFyW2s+PjJdfWVsc2UgYj0wfGFyW2w+PjJdO3diKDB8YiwwfGFyW2U+PjJdLDQrKCh1Ky0xfDApPj4+NTw8Mil8MCksdT0wfGFyW2s+PjJdfWVsc2UgdT0wO2FyW2wrND4+Ml09dX1pZihsPWwrMTJ8MCwoMHwoZT1lKzEyfDApKT09KDB8aCkpe2c9bDticmVhayBBfX16bCgpfX13aGlsZSgwKTtpZih3KWlmKCgwfGgpIT0oMHxyKSl7Zm9yKGs9NCtvfDAsZT1hKzR8MCxoPTB8YXJbdj4+Ml07Oyl7aWYoYXJbaD4+Ml09MCxhclsobD1oKzR8MCk+PjJdPTAsKGFyWyh1PWgrOHwwKT4+Ml09MCl8KHM9MHxhclsoYj1kKzR8MCk+PjJdKSl7aWYoKDB8cyk8MCl7dT0yMDticmVha31aPTB8aHUoKGc9MSsoKHMrLTF8MCk+Pj41KXwwKTw8MiksYXJbaD4+Ml09WixhcltsPj4yXT0wLGFyW3U+PjJdPWcsZz0wfGFyW2Q+PjJdLGFyW28+PjJdPWcsWj0oYXJbaz4+Ml09MCl8YXJbYj4+Ml0sYXJbYT4+Ml09ZysoWj4+PjU8PDIpLGFyW2U+PjJdPTMxJlosYXJbbj4+Ml09YXJbbz4+Ml0sYXJbNCtuPj4yXT1hcls0K28+PjJdLGFyW3Q+PjJdPWFyW2E+PjJdLGFyWzQrdD4+Ml09YXJbYSs0Pj4yXSxQZShoLG4sdCl9aWYoZD1kKzEyfDAsbD0xMisoMHxhclt2Pj4yXSl8MCxhclt2Pj4yXT1sLCgwfGQpPT0oMHxyKSl7dT00NTticmVha31oPWx9aWYoMjA9PSgwfHUpKXpsKCk7ZWxzZSBpZig0NT09KDB8dSkpcmV0dXJuIHZvaWQodXI9Yyl9ZWxzZSB1cj1jO2Vsc2V7aWYoKDB8KGw9MHxhclt2Pj4yXSkpPT0oMHxnKSlyZXR1cm4gdm9pZCh1cj1jKTtmb3IoO2w9bCstMTJ8MCxhclt2Pj4yXT1sLCh1PTB8YXJbbD4+Ml0pJiYodnUodSksbD0wfGFyW3Y+PjJdKSwoMHxsKSE9KDB8Zyk7KTt1cj1jfX1mdW5jdGlvbiBIZShBLGUscil7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2lmKChjPShsPShpPXJ8PTApLShlfD0wKXwwKT4+MSk+Pj4wPD0obz0wfGFyWyhmPShBfD0wKSs4fDApPj4yXSktKG49dD0wfGFyW0E+PjJdKT4+MT4+PjApcmV0dXJuIDB8KHI9KG89KGE9Yz0oQT0oYT0oMHxhclsobD1BKzR8MCk+PjJdKS10Pj4xKT4+PjA8Yz4+PjApP2UrKGE8PDEpfDA6ciktZXwwKT4+MSkmJndiKDB8dCwwfGUsMHxvKSxyPW4rKHI8PDEpfDAsQT8hKCgwfChvPWktYXwwKSk8PTApJiYoaGIoMHxhcltsPj4yXSwwfGMsMHxvKSx2b2lkKGFyW2w+PjJdPSgwfGFyW2w+PjJdKSsobz4+PjE8PDEpKSk6KDB8KG89MHxhcltsPj4yXSkpIT0oMHxyKSYmdm9pZChhcltsPj4yXT1vKyh+KChvKy0yLXJ8MCk+Pj4xKTw8MSkpOyhhPXQpJiYoKDB8KHI9MHxhclsobz1BKzR8MCk+PjJdKSkhPSgwfG4pJiYoYXJbbz4+Ml09cisofigocistMi10fDApPj4+MSk8PDEpKSx2dShhKSxhcltmPj4yXT0wLGFyW28+PjJdPTAsbz1hcltBPj4yXT0wKSwoMHxsKTwwJiZ6bCgpLCgwfChvPW8+PjE+Pj4wPDEwNzM3NDE4MjM/bz4+PjA8Yz4+PjA/YzpvOjIxNDc0ODM2NDcpKTwwJiZ6bCgpLHI9MHxodShvPDwxKSxhclsoYT1BKzR8MCk+PjJdPXIsYXJbQT4+Ml09cixhcltmPj4yXT1yKyhvPDwxKSwoMHxsKTw9MHx8KGhiKDB8ciwwfGUsMHxsKSxhclthPj4yXT1yKyhsPj4+MTw8MSkpfWZ1bmN0aW9uIHhlKEEsZSxyKXt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cmV0dXJuIGY9KGM9cnw9MCktKGk9ZXw9MCl8MCwoKG49MHxhclsobz0oQXw9MCkrOHwwKT4+Ml0pLShhPXQ9MHxhcltBPj4yXSl8MCk+Pj4wPGY+Pj4wPyh0JiYoKDB8YXJbKG49QSs0fDApPj4yXSkhPSgwfGEpJiYoYXJbbj4+Ml09YSksdnUoYSksYXJbbz4+Ml09MCxhcltuPj4yXT0wLG49YXJbQT4+Ml09MCksKDB8Zik8MCYmemwoKSxjPW48PDEsKDB8KG49bj4+PjA8MTA3Mzc0MTgyMz9jPj4+MDxmPj4+MD9mOmM6MjE0NzQ4MzY0NykpPDAmJnpsKCksYT0wfGh1KG4pLGFyWyhjPUErNHwwKT4+Ml09YSxhcltBPj4yXT1hLGFyW28+PjJdPWErbixoYigwfGEsMHxlLDB8Ziksdm9pZChhcltjPj4yXT1hK2YpKTooMHwobj0odD1yPShBPSh0PSgwfGFyWyhvPUErNHwwKT4+Ml0pLXR8MCk+Pj4wPGY+Pj4wKT9lK3R8MDpyKS1pfDApJiZ3YigwfGEsMHxlLDB8biksbj1hK258MCxBPyEoKDB8KG49Yy10fDApKTw9MCkmJihoYigwfGFyW28+PjJdLDB8ciwwfG4pLHZvaWQoYXJbbz4+Ml09KDB8YXJbbz4+Ml0pK24pKTooMHxhcltvPj4yXSkhPSgwfG4pJiZ2b2lkKGFyW28+PjJdPW4pKX1mdW5jdGlvbiBQZShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiPTAscz0wLGQ9MCxrPTAsaD0wO2lmKHVyPSh1PXVyKSs0OHwwLGE9dSs0MHwwLG89dSszMnwwLGY9dSs4fDAsdD0obj11KSsyNHwwLGw9dSsxNnwwLGg9MHxhclsoZD0oQXw9MCkrNHwwKT4+Ml0sYz0wfGFyWyhiPWUpPj4yXSxiPTB8YXJbYis0Pj4yXSxzPTB8YXJbKGs9cik+PjJdLGs9MHxhcltrKzQ+PjJdLGk9cy1jPDwzLGFyW2Q+PjJdPWgtYitrK2ksZT1kPSgwfGFyW0E+PjJdKSsoaD4+PjU8PDIpfDAsKDB8YikhPSgwfChyPTMxJmgpKSlyZXR1cm4gYXJbKGg9Zik+PjJdPWMsYXJbaCs0Pj4yXT1iLGFyWyhoPW4pPj4yXT1zLGFyW2grND4+Ml09ayxhclt0Pj4yXT1lLGFyWzQrdD4+Ml09cixhcltvPj4yXT1hcltmPj4yXSxhcls0K28+PjJdPWFyWzQrZj4+Ml0sYXJbYT4+Ml09YXJbbj4+Ml0sYXJbNCthPj4yXT1hcltuKzQ+PjJdLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYoZD0wfGFyWyhlfD0wKT4+Ml0sdT0wfGFyW2UrND4+Ml0sbz0oKDB8YXJbcj4+Ml0pLWQ8PDMpKygwfGFyW3IrND4+Ml0pLXV8MCxyPWQsKDB8byk8PTApcmV0dXJuIGU9aSs0fDAsaT0wfGFyW2k+PjJdLGFyW0E+PjJdPWksaT1BKzR8MCxBPTB8YXJbZT4+Ml0sYXJbaT4+Ml09QTt1Pyh0PS0xPj4+KCh0PTMyLXV8MCktKGw9KDB8byk8KDB8dCk/bzp0KXwwKSYtMTw8dSZhcltyPj4yXSxmPTB8YXJbKGI9aSs0fDApPj4yXSxuPShjPTMyLWZ8MCk+Pj4wPGw+Pj4wP2M6bCxhPTB8YXJbaT4+Ml0sZj1hclthPj4yXSZ+KC0xPj4+KGMtbnwwKSYtMTw8ZiksYXJbYT4+Ml09ZixjPTB8YXJbYj4+Ml0sYXJbYT4+Ml09KHU+Pj4wPGM+Pj4wP3Q8PGMtdTp0Pj4+KHUtY3wwKSl8ZixmPSgwfGFyW2I+PjJdKStufDAsYT1hKyhmPj4+NTw8Mil8MCxhcltpPj4yXT1hLGYmPTMxLGFyW2I+PjJdPWYsMDwoMHwoYz1sLW58MCkpJiYoYXJbYT4+Ml09dD4+Pih1K258MCl8YXJbYT4+Ml0mfigtMT4+PigzMi1jfDApKSxhcltiPj4yXT1jLGY9Yykscj1yKzR8MCxhcltlPj4yXT1yLG89by1sfDApOmY9MHxhclsoYj1mPWkrNHwwKT4+Ml07aWYoZD0zMi1mfDAsYz0tMTw8ZiwzMTwoMHxvKSl7Zm9yKGw9fmMsYT0wfGFyW2k+PjJdLHU9KHM9KGY9bystMzJ8MCk+Pj41KSsxfDAscz1mLShzPDw1KXwwLGY9cixuPTB8YXJbYT4+Ml0sdD1hO2s9MHxhcltmPj4yXSxoPW4mbCxhclt0Pj4yXT1oLGFyW3Q+PjJdPWs8PGFyW2I+PjJdfGgsbj1hclsodD10KzR8MCk+PjJdJmN8az4+PmQsYXJbdD4+Ml09biwhKCgwfChvPW8rLTMyfDApKTw9MzEpOylmPWYrNHwwO3I9cisodTw8Mil8MCxhcltlPj4yXT1yLGFyW2k+PjJdPWErKHU8PDIpLG89c31pZigoMHxvKTw9MClyZXR1cm4gaz1iLGg9MHxhcltpPj4yXSxhcltBPj4yXT1oLGg9QSs0fDAsaz0wfGFyW2s+PjJdLGFyW2g+PjJdPWs7aWYodD1hcltyPj4yXSYtMT4+PigzMi1vfDApLG49KDB8ZCk8KDB8byk/ZDpvLGY9MHxhcltpPj4yXSxyPWFyW2Y+PjJdJn4oLTE8PGFyW2I+PjJdJi0xPj4+KGQtbnwwKSksYXJbZj4+Ml09cixhcltmPj4yXT1yfHQ8PGFyW2I+PjJdLHI9KDB8YXJbYj4+Ml0pK258MCxmPWYrKHI+Pj41PDwyKXwwLGFyW2k+PjJdPWYsYXJbYj4+Ml09MzEmciwoMHwocj1vLW58MCkpPD0wKXJldHVybiBrPWIsaD0wfGFyW2k+PjJdLGFyW0E+PjJdPWgsaD1BKzR8MCxrPTB8YXJbaz4+Ml0sYXJbaD4+Ml09azthcltmPj4yXT1hcltmPj4yXSZ+KC0xPj4+KDMyLXJ8MCkpfHQ+Pj5uLGFyW2I+PjJdPXIsaz1iLGg9MHxhcltpPj4yXSxhcltBPj4yXT1oLGg9QSs0fDAsaz0wfGFyW2s+PjJdLGFyW2g+PjJdPWt9KGwsbyxhLHQpLHZvaWQodXI9dSk7cj1rLWIraXwwLGs9YywwPCgwfHIpJiYoZT1iPyhlPS0xPj4+KChlPTMyLWJ8MCktKGg9KDB8cik8KDB8ZSk/cjplKXwwKSYtMTw8YixhcltkPj4yXT1hcltkPj4yXSZ+ZXxhcltrPj4yXSZlLHI9ci1ofDAsYj0zMSYoZT1oK2J8MCksZD1kKyhlPj4+NTw8Mil8MCxrPWsrNHwwKTooYj0wLGMpLHdiKDB8ZCwwfGUsKHM9KDB8cikvMzJ8MCk8PDJ8MCksQT1yLShzPDw1KXwwLGU9cj1kKyhzPDwyKXwwLDA8KDB8QSkmJihiPS0xPj4+KDMyLUF8MCksYXJbcj4+Ml09YXJbcj4+Ml0mfmJ8YXJbaysoczw8Mik+PjJdJmIsYj1BKSksYXJbbD4+Ml09ZSxhcls0K2w+PjJdPWIsdXI9dX1mdW5jdGlvbiBMZShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MDtyZXR1cm4gdXI9KGk9dXIpKzUxNjh8MCwkYShyPWkpLDB8KGU9MHxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGM9MjU1JigwfEF0KHJ8PTAsNCkpLHRyW0ErMT4+MF09YyxjPTErKDB8QXQociwzKSl8MCwxMTc0NDA1MTI8KCh0clsobz1BKzJ8MCk+PjBdPWMpPDwyNHwwKSlyZXR1cm4gMHwoQT04KTtpZihpPTI1NSYoMHxBdChyLDEpKSx0cltBKzM+PjBdPWksTG4oQSs0fDAsciwwfHRyW28+PjBdKSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoMTU8KDB8KGFyW0ErNDcyPj4yXT1pKSkpcmV0dXJuIDB8KEE9OCk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpOzM9PSgwfChhclsoZj1BKzQ3NnwwKT4+Ml09aSkpPyhuPTI1NSYoMHxBdChyLDEpKSxpPTB8YXJbZj4+Ml0pOm49MDtpZih0cltBKzQ4MD4+MF09bixhcltBKzUwMTI+PjJdPW48PDI0Pj4yND09MD9pOjAsMzxpPj4+MClyZXR1cm4gZXIoZSwxMDE5LDApLDB8KEE9OCk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyhmPUErNDg0fDApPj4yXT1pLC05OTk5OT09KDB8KG49MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhcltBKzQ4OD4+Ml09bixpPTB8YXJbZj4+Ml0sMD09KDB8bil8MD09KDB8aSkpcmV0dXJuIDB8KEE9OCk7aWYoN2U0PCgwfG4pfDdlNDwoMHxpKSlyZXR1cm4gMHwoQT04KTtpZihjPTI1NSYoMHxBdChyLDEpKSwodHJbQSs0OTI+PjBdPWMpPDwyND4+MjQpe2lmKC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhcltBKzQ5Nj4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MDA+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNTA0Pj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KX1lbHNlIGFyW0ErNDk2Pj4yXT0wLGFyW0ErNTAwPj4yXT0wLGFyW0ErNTA0Pj4yXT0wLGk9MDtpZihhcltBKzUwOD4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MTI+PjJdPWkrOCwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs1MTY+PjJdPWkrOCwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7YT1pKzR8MCxhclsoYz1BKzUyMHwwKT4+Ml09YSxhcltBKzUwMzI+PjJdPTE8PGEsYT0yNTUmKDB8QXQociwxKSksKHRyWyh0PUErNTI0fDApPj4wXT1hKTw8MjQ+PjI0PyhpPTAsbD0zNSk6KG49MHx0cltvPj4wXSxpPShuPDwyND4+MjQpLTF8MCk7Zm9yKDs7KXtpZigzNT09KDB8bCkmJihuPTB8dHJbbz4+MF0pLCgwfChmPW48PDI0Pj4yNCkpPD0oMHxpKSl7bD00NDticmVha31pZigtOTk5OTk9PSgwfChmPTB8aXQocikpKXwxNTwoMHxmKSl7bD0zODticmVha31pZihhcltBKzUyOCsoaTw8Mik+PjJdPWYrMSwtOTk5OTk9PSgwfChmPTB8aXQocikpKSl7bD00MDticmVha31pZihhclsobj1BKzU1NisoaTw8Mil8MCk+PjJdPWYsLTk5OTk5PT0oMHwoZj0wfGl0KHIpKSkpe2w9NDI7YnJlYWt9YXJbQSs1ODQrKGk8PDIpPj4yXT1mLGFyW0ErNTEyOCsoaTw8Mik+PjJdPWYrLTErKDB8YXJbbj4+Ml0pLGk9aSsxfDAsbD0zNX17aWYoMzg9PSgwfGwpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZig0MD09KDB8bCkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKDQyPT0oMHxsKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoNDQ9PSgwfGwpKXtpZigwfHRyW3Q+PjBdJiYoaT1mKy0xfDAsODw9bjw8MjQ+PjI0JiZzcig0MTYzMyw0MTYzOSwzMTcsNDQ2MjcpLDE8bjw8MjQ+PjI0KSlmb3Iobj1BKzUyOCsoaTw8Mil8MCx0PUErNTU2KyhpPDwyKXwwLGY9QSs1ODQrKGk8PDIpfDAsaT0wO2FyW0ErNTI4KyhpPDwyKT4+Ml09YXJbbj4+Ml0sYXJbQSs1NTYrKGk8PDIpPj4yXT1hclt0Pj4yXSxhcltBKzU4NCsoaTw8Mik+PjJdPWFyW2Y+PjJdLCgwfChpPWkrMXwwKSk8KCgwfHRyW28+PjBdKS0xfDApOyk7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyh0PUErNjEyfDApPj4yXT1pKzMsLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyWyhvPUErNjE2fDApPj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhclsoZj1BKzYyMHwwKT4+Ml09aSsyLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTtpZihhclsobj1BKzYyNHwwKT4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoYXJbQSs2Mjg+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNjMyPj4yXT1pLDY8KDB8KGk9MHxhclt0Pj4yXSkpKXJldHVybiAwfChBPTgpO2lmKDY8KCgwfGFyW28+PjJdKStpfDApKXJldHVybiAwfChBPTgpO2lmKDU8KDB8KGk9MHxhcltmPj4yXSkpKXJldHVybiAwfChBPTgpO2lmKDU8KCgwfGFyW24+PjJdKStpfDApKXJldHVybiAwfChBPTgpO2E9MjU1JigwfEF0KHIsMSkpLHRyW0ErNjM2Pj4wXT1hO2Rve2lmKGE8PDI0Pj4yNCl7aWYoYT0yNTUmKDB8QXQociwxKSksdHJbQSs2Mzc+PjBdPWEsaT1BKzYzOHwwLCEoYTw8MjQ+PjI0KSl7cmMoaSk7YnJlYWt9aWYoIShpPTB8ZWMociwwLGksMCkpKWJyZWFrO3JldHVybiAwfGl9fXdoaWxlKDApO2E9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDcwMj4+MF09YSxhPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ3MDM+PjBdPWEsYT0yNTUmKDB8QXQociwxKSksdHJbQSs0NzA0Pj4wXT1hO2Rve2lmKGE8PDI0Pj4yNCl7aWYoaT0xKygwfEF0KHIsNCkpJjI1NSx0cltBKzQ3MDU+PjBdPWksaT0xKygwfEF0KHIsNCkpJjI1NSx0cltBKzQ3MDY+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKGFyW0ErNDcwOD4+Ml09aSszLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksMHwoQT04KTthcltBKzQ3MTI+PjJdPWksaT0yNTUmKDB8QXQociwxKSk7YnJlYWt9dHJbQSs0NzA1Pj4wXT0wLHRyW0ErNDcwNj4+MF09MCxhcltBKzQ3MDg+PjJdPTAsYXJbQSs0NzEyPj4yXT0wLGk9MH13aGlsZSgwKTtpZih0cltBKzQ3MTY+PjBdPWksLTk5OTk5PT0oMHwobz0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSwwfChBPTgpO2lmKDY0PG8+Pj4wKXJldHVybiBlcihlLDEwMTQsMCksMHwoQT04KTtpZihhPUErNDcyMHwwLHQ9MHxhclsobj1BKzQ3MjR8MCk+PjJdLGY9MHxhclthPj4yXSxvPj4+MDw9KGk9KHQtZnwwKS8xMDB8MCk+Pj4wKXtkb3tpZihvPj4+MDxpPj4+MCl7aWYoKDB8dCk9PSgwfChpPWYrKDEwMCpvfDApfDApKSlicmVhazthcltuPj4yXT10KygxMDAqfigoKHQrLTEwMC1pfDApPj4+MCkvMTAwfDApfDApfX13aGlsZSgwKTswPCgwfG8pJiYobD04Nyl9ZWxzZSFmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYobj0wfGFyWyhyPTgrKEF8PTApfDApPj4yXSxpPTB8YXJbKGE9QSs0fDApPj4yXSxlPj4+MDw9KChuLWl8MCkvMTAwfDApPj4+MCl7ZG97Zm9yKGY9aSsxMDB8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTtpPTEwMCsoMHxhclthPj4yXSl8MCxhclthPj4yXT1pLGU9ZSstMXwwfXdoaWxlKDAhPSgwfGUpKTtyZXR1cm59Zj0wfGFyW0E+PjJdLDQyOTQ5NjcyPChpPSh0PShpLWZ8MCkvMTAwfDApK2V8MCk+Pj4wJiZ6bCgpO289KG49KG4tZnwwKS8xMDB8MCk8PDEsaT1uPj4+MDwyMTQ3NDgzNj9vPj4+MDxpPj4+MD9pOm86NDI5NDk2NzI7ZG97aWYoaSl7aWYoISg0Mjk0OTY3MjxpPj4+MCkpe2Y9MHxodSgxMDAqaXwwKTticmVha31adShhPTB8WCg4KSw0NDUxOSksYXJbYT4+Ml09MTc2NjAsSSgwfGEsNDAxNiw0MjgpfWVsc2UgZj0wfXdoaWxlKDApO289ZisoMTAwKnR8MCl8MCx0PWYrKDEwMCppfDApfDAsbj1pPW87ZG97Zm9yKGY9aSsxMDB8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTtuPWk9bisxMDB8MCxlPWUrLTF8MH13aGlsZSgwIT0oMHxlKSk7ZT0wfGFyW0E+PjJdLGY9KDB8YXJbYT4+Ml0pLWV8MCxpPW8rKDEwMCooKDB8ZikvLTEwMHwwKXwwKXwwLDA8KDB8ZikmJmhiKDB8aSwwfGUsMHxmKTtpZihhcltBPj4yXT1pLGFyW2E+PjJdPW4sYXJbcj4+Ml09dCwhZSlyZXR1cm47dnUoZSl9KGEsby1pfDApLGw9ODc7QTpkb3tpZig4Nz09KDB8bCkpe2ZvcihpPTA7Oyl7aWYoISgwfFpjKGUsQSxyLCgwfGFyW2E+PjJdKSsoMTAwKml8MCl8MCxpLGEsMCkpKXtpPTEwMDU7YnJlYWt9aWYoKDB8byk8PSgwfChpPWkrMXwwKSkpYnJlYWsgQX1yZXR1cm4gMHxpfX13aGlsZSgwKTtsPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ3MzI+PjBdPWw7ZG97aWYobDw8MjQ+PjI0KXtpZigtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLDB8KEE9OCk7aWYoMzI8KDB8KGFyWyhmPUErNDczNnwwKT4+Ml09aSkpKXJldHVybiAwfChBPTgpO2lmKCEoMDwoMHxpKSkpYnJlYWs7Zm9yKGk9MDtsPTB8QXQociwwfGFyW2M+PjJdKSxhcltBKzQ3NDArKGk8PDIpPj4yXT1sLGw9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDg2OCtpPj4wXT1sLCgwfChpPWkrMXwwKSk8KDB8YXJbZj4+Ml0pOyk7fWVsc2UgYXJbQSs0NzM2Pj4yXT0wfXdoaWxlKDApO2w9MjU1JigwfEF0KHIsMSkpLHRyW0ErNDkwMD4+MF09bCxsPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ5MDE+PjBdPWwsbD0yNTUmKDB8QXQociwxKSksKHRyW0ErNDkwMj4+MF09bCk8PDI0Pj4yNCYmZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wLGE9MCxjPTA7bz0wIT0oMHxBdChyfD0wLDEpKSx0cltBPj4wXT0xJm87ZG97aWYobyl7aWYoKDB8KGk9MHxBdChyLDgpKSk8MTgpe29yW0ErMj4+MV09MHxvclsxNzc5NisoaTw8Mik+PjFdLGk9MHxvclsxNzc5NisoaTw8MikrMj4+MV07YnJlYWt9aWYoMjU1PT0oMHxpKSl7aT02NTUzNSYoMHxBdChyLDE2KSksb3JbQSsyPj4xXT1pLGk9NjU1MzUmKDB8QXQociwxNikpO2JyZWFrfW9yW0ErMj4+MV09MCxpPTA7YnJlYWt9b3JbQSsyPj4xXT0wLGk9MH13aGlsZSgwKTtvcltBKzQ+PjFdPWksbz0wIT0oMHxBdChyLDEpKSx0cltBKzY+PjBdPTEmbyxvJiYobz0wIT0oMHxBdChyLDEpKSYxLHRyW0ErNz4+MF09byk7aWYoYXJbKGk9QSsxMnwwKT4+Ml09NSx0clsodD1BKzE2fDApPj4wXT0wLHRyWyhmPUErMTh8MCk+PjBdPTIsdHJbKG49QSsxOXwwKT4+MF09Mix0clsobz1BKzIwfDApPj4wXT0yLGM9MCE9KDB8QXQociwxKSksdHJbQSs4Pj4wXT0xJmMsYyYmKGM9MHxBdChyLDMpLGFyW2k+PjJdPSgwfGMpPDU/Yzo1LGM9MCE9KDB8QXQociwxKSkmMSx0clt0Pj4wXT1jLGM9MCE9KDB8QXQociwxKSksdHJbQSsxNz4+MF09MSZjLGMpKXtzd2l0Y2goaT0wfEF0KHIsOCksYz0yNTUmaSwodHJbZj4+MF09Yyk8PDI0Pj4yNCl7Y2FzZSAzOmNhc2UgMDphPTE0O2JyZWFrO2RlZmF1bHQ6MTA8KDI1NSZpKT4+PjAmJihhPTE0KX1zd2l0Y2goMTQ9PSgwfGEpJiYodHJbZj4+MF09MiksaT0wfEF0KHIsOCksYz0yNTUmaSwodHJbbj4+MF09Yyk8PDI0Pj4yNCl7Y2FzZSAzOmNhc2UgMDphPTE3O2JyZWFrO2RlZmF1bHQ6MTc8KDI1NCZpKT4+PjAmJihhPTE3KX0xNz09KDB8YSkmJih0cltuPj4wXT0yKSxjPTB8QXQociw4KSx0cltvPj4wXT05PCgoMjU1JmMpLTF8MCk+Pj4wPzI6MjU1JmN9Yz0wIT0oMHxBdChyLDEpKSx0cltBKzIxPj4wXT0xJmM7ZG97aWYoYyl7aWYoLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYodHJbQSsyMj4+MF09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpJj0yNTU7YnJlYWt9dHJbQSsyMj4+MF09MCxpPTB9d2hpbGUoMCk7aWYodHJbQSsyMz4+MF09aSxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyND4+MF09YyxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyNT4+MF09YyxjPTAhPSgwfEF0KHIsMSkpJjEsdHJbQSsyNj4+MF09YyxjPTAhPSgwfEF0KHIsMSkpLHRyW0ErMjc+PjBdPTEmYyxjKXtpZigtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZihhcltBKzI4Pj4yXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKGFyW0ErMzI+PjJdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoYXJbQSszNj4+Ml09aSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9OH1lbHNlIGFyW0ErMjg+PjJdPTAsYXJbQSszMj4+Ml09MCxhcltBKzM2Pj4yXT0wLGk9MDthcltBKzQwPj4yXT1pLGM9MCE9KDB8QXQociwxKSksdHJbQSs0ND4+MF09MSZjLGMmJihjPTB8QXQociwzMiksYXJbQSs0OD4+Ml09YyxjPTB8QXQociwzMiksYXJbQSs1Mj4+Ml09Yyk7aWYoaT0wIT0oMHxBdChyLDEpKSYxLHRyW0ErNTY+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoYXJbQSs2MD4+Ml09aSsxLGM9MCE9KDB8QXQociwxKSksdHJbQSs2ND4+MF09MSZjLGMpcmV0dXJuIGM9NTAyO2M9MCE9KDB8QXQociwxKSksdHJbQSs2NT4+MF09MSZjO2Rve2lmKGMpe2lmKGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY2Pj4wXT1pLGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY3Pj4wXT1pLGk9MCE9KDB8QXQociwxKSkmMSx0cltBKzY4Pj4wXT1pLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKDQwOTU8KDYxNDQwJihvclsodD1BKzcwfDApPj4xXT1pKSk+Pj4wJiYoZXIoZSw4LDApLG9yW3Q+PjFdPTApLC05OTk5OT09KDB8KGk9MHxpdChyKSkpKXJldHVybiBlcihlLDgsMCksYz04O2lmKDE2PCgyNTUmKHRyWyh0PUErNzJ8MCk+PjBdPWkpKT4+PjAmJihlcihlLDgsMCksdHJbdD4+MF09MiksLTk5OTk5PT0oMHwoaT0wfGl0KHIpKSkpcmV0dXJuIGVyKGUsOCwwKSxjPTg7aWYoMTY8KDI1NSYodHJbKHQ9QSs3M3wwKT4+MF09aSkpPj4+MCYmKGVyKGUsOCwwKSx0clt0Pj4wXT0xKSwtOTk5OTk9PSgwfChpPTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZigxNTwoMjQwJih0clsodD1BKzc0fDApPj4wXT1pKSk+Pj4wJiYoZXIoZSw4LDApLHRyW3Q+PjBdPTE1KSwtOTk5OTk9PSgwfCh0PTB8aXQocikpKSlyZXR1cm4gZXIoZSw4LDApLGM9ODtpZigxNTwoMjQwJih0clsoaT1BKzc1fDApPj4wXT10KSk+Pj4wKXtlcihlLDgsMCk7YnJlYWt9cmV0dXJuIGM9MH10cltBKzY2Pj4wXT0wLHRyW0ErNjc+PjBdPTEsdHJbQSs2OD4+MF09MCxvcltBKzcwPj4xXT0wLHRyW0ErNzI+PjBdPTIsdHJbQSs3Mz4+MF09MSx0cltBKzc0Pj4wXT0xNSxpPUErNzV8MH13aGlsZSgwKTt0cltpPj4wXT0xNSxjPTB9KEErNDkwNHwwLGUscixBKSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ5ODA+PjBdPWU7ZG97aWYoZTw8MjQ+PjI0KXtpZihsPTI1NSYoMHxBdChyLDEpKSx0clsoZT1BKzQ5ODF8MCk+PjBdPWwsbD0yNTUmKDB8QXQociwxKSksdHJbQSs0OTgyPj4wXT1sLGw9MjU1JigwfEF0KHIsNikpLHRyW0ErNDk4Mz4+MF09bCwhKDB8dHJbZT4+MF0pKWJyZWFrO2ljKEErNDk4NHwwLDAscil9ZWxzZSB0cltBKzQ5ODE+PjBdPTB9d2hpbGUoMCk7cmV0dXJuIDB8KGk9MHxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7cz0wfGFyWzQ3NisoQXw9MCk+PjJdLGE9MHxhcls3OTg4KyhzPDwyKT4+Ml0sYXJbQSs1MDE2Pj4yXT1hLGM9MHxhcls4MDA0KyhzPDwyKT4+Ml0sYXJbQSs1MDIwPj4yXT1jLGQ9MD09KDB8YXJbQSs1MDEyPj4yXSksYXJbQSs1MDI0Pj4yXT1kPzE6YSxhcltBKzUwMjg+PjJdPWQ/MTpjLGQ9MHxhcltBKzUxMj4+Ml0sYXJbQSs0OTk2Pj4yXT1kLGFyW0ErNWUzPj4yXT0oNipkfDApLTQ4LGU9MHxhcltBKzUxNj4+Ml0sYXJbQSs1MDA0Pj4yXT1lLGFyW0ErNTAwOD4+Ml09KDYqZXwwKS00OCxyPTB8YXJbQSs2MTI+PjJdLGFyW0ErNTAzNj4+Ml09cixpPSgwfGFyW0ErNjE2Pj4yXSkrcnwwLGFyW0ErNTA0MD4+Ml09aSxmPTE8PHIsYXJbQSs1MDQ0Pj4yXT1mLG89MTw8aSxhcltBKzUwNDg+PjJdPW8sbj0wfGFyW0ErNDg0Pj4yXSxiPShmLTErbnwwKS8oMHxmKXwwLGFyW0ErNTA1Mj4+Ml09YixsPShuLTErb3wwKS8oMHxvKXwwLGFyW0ErNTA1Nj4+Ml09bCx0PTB8YXJbQSs0ODg+PjJdLGs9KCh1PXQtMXwwKStmfDApLygwfGYpfDAsYXJbQSs1MDYwPj4yXT1rLHU9KHUrb3wwKS8oMHxvKXwwLGFyW0ErNTA2ND4+Ml09dSxiPTB8YnIoayxiKSxhcltBKzUwNjg+PjJdPWIsYj0wfGJyKHUsbCksYXJbQSs1MDcyPj4yXT1iLGI9MHxicih0LG4pLGFyW0ErNTA3Nj4+Ml09YixvPTAhPSgwfHMpJiYwPT0oMHx0cltBKzQ4MD4+MF0pPyhhcltBKzUwODA+PjJdPSgwfG8pLygwfGEpfDAsKDB8bykvKDB8Yyl8MCk6KGFyW0ErNTA4MD4+Ml09MCwwKTtpZihhcltBKzUwODQ+PjJdPW8sYj0wfGFyW0ErNjIwPj4yXSxhcltBKzUxMDA+PjJdPWIscz0oMHxhcltBKzYyND4+Ml0pK2J8MCxhcltBKzUxMDQ+PjJdPXMsbz1pLWJ8MCwoMHxhcltBKzYyOD4+Ml0pPigwfG8pKXJldHVybiAwfChrPTgpO2lmKCgwfGFyW0ErNjMyPj4yXSk+KDB8bykpcmV0dXJuIDB8KGs9OCk7az1yLTF8MCxhcltBKzUxMDg+PjJdPWssaz1pLWt8MCxhcltBKzUxMTI+PjJdPWw8PGssYXJbQSs1MTE2Pj4yXT11PDxrLGs9MHxhcltBKzQ3MDg+PjJdLGFyW0ErNTEyMD4+Ml09ayxhcltBKzUxMjQ+PjJdPSgwfGFyW0ErNDcxMj4+Ml0pK2ssaz1sPDxvLGFyW0ErNTA4OD4+Ml09ayx1PDw9byxhcltBKzUwOTI+PjJdPXUsaz0wfGJyKHUsayksYXJbQSs1MDk2Pj4yXT1rLGw9MHx0cltBKzQ5OTA+PjBdPyhhPW89MCxjPTE8PGUtMSwxPDxkKy0xKToobz0yNDgrZSYyNTUsYT1kKzI0OCYyNTUsYz0xMjgpO2lmKHRyW0ErNTE1Nj4+MF09YSx0cltBKzUxNTc+PjBdPW8sYXJbQSs1MTYwPj4yXT1sLGFyW0ErNTE2ND4+Ml09YywoMHxuKSUoMHxmKXwwKXJldHVybiAwfChrPTgpO2lmKDAhPSgoMHx0KSUoMHxmKXwwKXwoMHxyKTwoMHxiKSlyZXR1cm4gMHwoaz04KTtpZigoMHwoKDB8aSk8NT9pOjUpKTwoMHxzKXw4PChkKy04fDApPj4+MHw4PChlLTh8MCk+Pj4wKXJldHVybiAwfChrPTgpO3JldHVybiB0cltBPj4wXT0xLChrPTApfGt9KEEpKT8wfChBPWkpOih0cltBPj4wXT0xLChBPTApfEEpfX1yZXR1cm4gMH0ocixBKzR8MCxlKSk/KEE9ZSxBYyhyKSx1cj1pLDB8QSk6KC0xPCgwfChlPTB8YXJbQSs1MTY+PjJdKSkmJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wO3N3aXRjaCh1cj0oTD11cikrNDk2fDAsUD1MKzQ4MHwwLHg9TCs0NzJ8MCxIPUwrNDY0fDAsaj1MKzQ1NnwwLHo9TCs0NDh8MCxPPUwrNDQwfDAsUz1MKzQzMnwwLFU9TCs0MjR8MCxUPUwrNDE2fDAsTT1MKzQwOHwwLEo9TCs0MDB8MCxEPUwrMzkyfDAsYkE9TCszODR8MCxRPUwrMzc2fDAsWT1MKzM2OHwwLF89TCszNjB8MCxOPUwrMzQ0fDAsbEE9TCszMzZ8MCxjQT1MKzMyOHwwLEY9TCszMjB8MCxWPUwrMzEyfDAseT1MKzMwNHwwLHA9TCsyOTZ8MCxaPUwrMjg4fDAsZz1MKzI4MHwwLEc9TCsyNzJ8MCxDPUwrMjY0fDAsYUE9TCsyNTZ8MCxJPUwrMjQ4fDAsVz1MKzI0MHwwLFg9TCsyMzJ8MCxoPUwrMjI0fDAsaz1MKzIxNnwwLGQ9TCsyMDh8MCxzPUwrMjAwfDAsb0E9TCsxOTJ8MCx0QT1MKzE4NHwwLEU9TCsxNzZ8MCxCPUwrMTY4fDAsbT1MKzE2MHwwLHY9TCsxNTJ8MCx3PUwrMTQ0fDAsbkE9TCsxMzZ8MCxiPUwrMTI4fDAsdT1MKzEyMHwwLGw9TCsxMTJ8MCxjPUwrMTA0fDAsYT1MKzk2fDAsbz1MKzg4fDAsdD1MKzgwfDAsbj1MKzcyfDAsZkE9TCs2NHwwLGY9TCs1NnwwLGk9TCs0OHwwLHI9TCs0MHwwLHJBPUwrMzJ8MCxlQT1MKzI0fDAsQUE9TCsxNnwwLCQ9TCs4fDAscT1MLDB8KGV8PTApKXtjYXNlIDE6Sz0xMDE3MjticmVhaztjYXNlIDI6Sz0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1MfXN3aXRjaChQbihSPTB8YXJbSz4+Ml0sNDE4NjUscSksYXJbJD4+Ml09dHJbQSsxPj4wXSxQbihSLDQxOTA2LCQpLGlBPUErMnwwLGFyW0FBPj4yXT10cltpQT4+MF0sUG4oUiw0MTkzNixBQSksYXJbZUE+PjJdPXRyW0ErMz4+MF0sUG4oUiw0MTk2NixlQSksZnVuY3Rpb24oQSxlLHIpe2V8PTA7dmFyIGksZixuO3tpZih1cj0obj11cikrMTZ8MCxmPW4sJG4oQXw9MCwxLHJ8PTApLGk9ZSstMXwwLCEoMTwoMHxlKSkpcmV0dXJuIHVyPW47ZT0wfWZvcig7YXJbZj4+Ml09ZSxQbihyLDQ0ODQ5LGYpLCRuKEErNTIrKDUyKmV8MCl8MCwwLHIpLGU9ZSsxfDAsKDB8ZSkhPSgwfGkpOyk7dXI9bn0oQSs0fDAsMHx0cltpQT4+MF0sUiksYXJbckE+PjJdPWFyW0ErNDcyPj4yXSxQbihSLDQyMDAxLHJBKSwwfChxPTB8YXJbKEs9QSs0NzZ8MCk+PjJdKSl7Y2FzZSAwOiQ9NDIwNDU7YnJlYWs7Y2FzZSAxOiQ9NDIwNTY7YnJlYWs7Y2FzZSAyOiQ9NDIwNjI7YnJlYWs7ZGVmYXVsdDokPTM9PSgwfHEpPzQyMDMxOjQyMDM3fWFyW3I+PjJdPXEsYXJbNCtyPj4yXT0kLFBuKFIsNDIwNjgsciksMz09KDB8YXJbSz4+Ml0pJiYoYXJbaT4+Ml09dHJbQSs0ODA+PjBdLFBuKFIsNDIxMDMsaSkpO2FyW2Y+PjJdPWFyW0ErNDg0Pj4yXSxQbihSLDQyMTM2LGYpLGFyW2ZBPj4yXT1hcltBKzQ4OD4+Ml0sUG4oUiw0MjE2OSxmQSksZkE9QSs0OTJ8MCxhcltuPj4yXT10cltmQT4+MF0sUG4oUiw0MjIwMixuKSwwfHRyW2ZBPj4wXSYmKGFyW3Q+PjJdPWFyW0ErNDk2Pj4yXSxQbihSLDQyMjM1LHQpLGFyW28+PjJdPWFyW0ErNTAwPj4yXSxQbihSLDQyMjYzLG8pLGFyW2E+PjJdPWFyW0ErNTA0Pj4yXSxQbihSLDQyMjkxLGEpLGFyW2M+PjJdPWFyW0ErNTA4Pj4yXSxQbihSLDQyMzE5LGMpKTtpZihhcltsPj4yXT1hcltBKzUxMj4+Ml0sUG4oUiw0MjM0NyxsKSxhclt1Pj4yXT1hcltBKzUxNj4+Ml0sUG4oUiw0MjM3MCx1KSxhcltiPj4yXT1hcltBKzUyMD4+Ml0sUG4oUiw0MjM5MyxiKSxLPUErNTI0fDAsYXJbbkE+PjJdPXRyW0s+PjBdLFBuKFIsNDI0MjYsbkEpLG5BPTB8dHJbaUE+PjBdLCgwfChLPTA9PSgwfHRyW0s+PjBdKT8obkE8PDI0Pj4yNCktMXwwOjApKTwobkE8PDI0Pj4yNHwwKSlmb3IoO2FyW3M+PjJdPUssUG4oUiw0Mjc1NixzKSxhcltkPj4yXT1hcltBKzUyOCsoSzw8Mik+PjJdLFBuKFIsNDI3NjYsZCksYXJbaz4+Ml09YXJbQSs1NTYrKEs8PDIpPj4yXSxQbihSLDQyODA1LGspLGFyW2g+PjJdPWFyW0ErNTg0KyhLPDwyKT4+Ml0sUG4oUiw0Mjg0NCxoKSxLPUsrMXwwLCgwfEspPCgwfHRyW2lBPj4wXSk7KTtpQT1BKzYxMnwwLGFyW3c+PjJdPWFyW2lBPj4yXSxQbihSLDQyNDczLHcpLHJBPUErNjE2fDAsYXJbdj4+Ml09YXJbckE+PjJdLFBuKFIsNDI1MTEsdiksZUE9QSs2MjB8MCxhclttPj4yXT1hcltlQT4+Ml0sUG4oUiw0MjU1OCxtKSxBQT1BKzYyNHwwLGFyW0I+PjJdPWFyW0FBPj4yXSxQbihSLDQyNTk2LEIpLGFyW0U+PjJdPWFyW0ErNjI4Pj4yXSxQbihSLDQyNjQxLEUpLGFyW3RBPj4yXT1hcltBKzYzMj4+Ml0sUG4oUiw0MjY4Myx0QSksdEE9QSs2MzZ8MCxhcltvQT4+Ml09dHJbdEE+PjBdLFBuKFIsNDI3MjUsb0EpLDB8dHJbdEE+PjBdJiYob0E9QSs2Mzd8MCxhcltYPj4yXT10cltvQT4+MF0sUG4oUiw0Mjg4MyxYKSwwfHRyW29BPj4wXSkmJlBuKFIsNDI5MjQsVyk7YXJbST4+Ml09dHJbQSs0NzAyPj4wXSxQbihSLDQyOTY4LEkpLGFyW2FBPj4yXT10cltBKzQ3MDM+PjBdLFBuKFIsNDMwMTAsYUEpLGFBPUErNDcwNHwwLGFyW0M+PjJdPXRyW2FBPj4wXSxQbihSLDQzMDUyLEMpLDB8dHJbYUE+PjBdJiYoYXJbRz4+Ml09dHJbQSs0NzA1Pj4wXSxQbihSLDQzMDk0LEcpLGFyW2c+PjJdPXRyW0ErNDcwNj4+MF0sUG4oUiw0MzEzMCxnKSxhcltaPj4yXT1hcltBKzQ3MDg+PjJdLFBuKFIsNDMxNjYsWiksYXJbcD4+Ml09YXJbQSs0NzEyPj4yXSxQbihSLDQzMjA4LHApLGFyW3k+PjJdPXRyW0ErNDcxNj4+MF0sUG4oUiw0MzI1OSx5KSk7aWYocT1BKzQ3MjB8MCwkPUErNDcyNHwwLGFyW1Y+PjJdPSgoMHxhclskPj4yXSktKDB8YXJbcT4+Ml0pfDApLzEwMHwwLFBuKFIsNDMyOTUsViksKDB8YXJbJD4+Ml0pIT0oMHxhcltxPj4yXSkpZm9yKEs9MDthcltjQT4+Ml09SyxQbihSLDQzMzY3LGNBKSxwYygoMHxhcltxPj4yXSkrKDEwMCpLfDApfDAsMTYsUiksKEs9SysxfDApPj4+MDwoKCgwfGFyWyQ+PjJdKS0oMHxhcltxPj4yXSl8MCkvMTAwfDApPj4+MDspO2lmKGNBPUErNDczMnwwLGFyW0Y+PjJdPXRyW2NBPj4wXSxQbihSLDQzMzI5LEYpLDB8dHJbY0E+PjBdJiYodUE9QSs0NzM2fDAsYXJbbEE+PjJdPWFyW3VBPj4yXSxQbihSLDQzMzg4LGxBKSwwPCgwfGFyW3VBPj4yXSkpKWZvcihLPTA7Y0E9MHxhcltBKzQ3NDArKEs8PDIpPj4yXSxsQT0wfHRyW0ErNDg2OCtLPj4wXSxhcltOPj4yXT1LLGFyWzQrTj4+Ml09Y0EsYXJbOCtOPj4yXT1sQSxQbihSLDQzNDIxLE4pLCgwfChLPUsrMXwwKSk8KDB8YXJbdUE+PjJdKTspO2FyW18+PjJdPXRyW0ErNDkwMD4+MF0sUG4oUiw0MzQ5MCxfKSxhcltZPj4yXT10cltBKzQ5MDE+PjBdLFBuKFIsNDM1MzEsWSksSz1BKzQ5MDJ8MCxhcltRPj4yXT10cltLPj4wXSxQbihSLDQzNTcyLFEpLGFyW2JBPj4yXT10cltBKzQ5ODA+PjBdLFBuKFIsNDM2MTMsYkEpLGJBPUErNDk4MXwwLGFyW0Q+PjJdPXRyW2JBPj4wXSxQbihSLDQzNjQ5LEQpLGFyW0o+PjJdPXRyW0ErNDk4Mj4+MF0sUG4oUiw0MzY4NSxKKSxhcltNPj4yXT10cltBKzQ5ODM+PjBdLFBuKFIsNDM3MjEsTSksYXJbVD4+Ml09YXJbQSs1MDQ4Pj4yXSxQbihSLDQzNzU3LFQpLGFyW1U+PjJdPWFyW0ErNTA0ND4+Ml0sUG4oUiw0Mzc3NixVKSxhcltTPj4yXT0xPDwoMHxhcltyQT4+Ml0pKygwfGFyW2lBPj4yXSksUG4oUiw0Mzc5NSxTKSxhcltPPj4yXT0xPDxhcltlQT4+Ml0sUG4oUiw0MzgxNCxPKSxhclt6Pj4yXT0xPDwoMHxhcltBQT4+Ml0pKygwfGFyW2VBPj4yXSksUG4oUiw0MzgzMyx6KSxhcltqPj4yXT1hcltBKzUwNTY+PjJdLFBuKFIsNDM4NTIsaiksYXJbSD4+Ml09YXJbQSs1MDY0Pj4yXSxQbihSLDQzODgyLEgpLGFyW3g+PjJdPWFyW0ErNTAxNj4+Ml0sUG4oUiw0MzkxMix4KSxhcltQPj4yXT1hcltBKzUwMjA+PjJdLFBuKFIsNDM5NDIsUCksMHx0cltiQT4+MF0mJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiO3N3aXRjaCh1cj0oYj11cikrODB8MCxhPWIrNzJ8MCxvPWIrNjR8MCx0PWIrNTZ8MCxuPWIrNDh8MCxmPWIrNDB8MCx1PWIrMzJ8MCxsPWIrMjR8MCxjPWIrMTZ8MCxpPWIrOHwwLHI9YiwwfChlfD0wKSl7Y2FzZSAxOmU9MTAxNzI7YnJlYWs7Y2FzZSAyOmU9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9Yn1QbihlPTB8YXJbZT4+Ml0sNDM5NzIsciksYXJbaT4+Ml09Y3JbQT4+MF0sUG4oZSw0NDAyOSxpKSxhcltjPj4yXT1jcltBKzE+PjBdLFBuKGUsNDQwNzUsYyksYXJbbD4+Ml09Y3JbQSsyPj4wXSxQbihlLDQ0MTIxLGwpLGFyW3U+PjJdPWNyW0ErMz4+MF0sUG4oZSw0NDE2Nyx1KSxhcltmPj4yXT1jcltBKzQ+PjBdLFBuKGUsNDQyMTMsZiksYXJbbj4+Ml09Y3JbQSs1Pj4wXSxQbihlLDQ0MjU5LG4pLGFyW3Q+PjJdPWNyW0ErNj4+MF0sUG4oZSw0NDMwNSx0KSxhcltvPj4yXT1jcltBKzc+PjBdLFBuKGUsNDQzNTEsbyksYXJbYT4+Ml09Y3JbQSs4Pj4wXSxQbihlLDQ0Mzk3LGEpLHVyPWJ9KEErNDk4NHwwLGUpOzB8dHJbSz4+MF0mJmZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZPTAsUT0wLEQ9MCxKPTAsTT0wO3N3aXRjaCh1cj0oXz11cikrMzA0fDAsYT1fKzI4OHwwLG89XysyODB8MCx0PV8rMjcyfDAsTj1fKzI2NHwwLFI9XysyNTZ8MCxGPV8rMjQ4fDAsVj1fKzI0MHwwLEc9XysyMzJ8MCxDPV8rMjI0fDAsTT1fKzIxNnwwLEk9XysyMDh8MCxXPV8rMjAwfDAsWD1fKzE5MnwwLEU9XysxODR8MCxCPV8rMTc2fDAsSj1fKzE2OHwwLHk9XysxNjB8MCxwPV8rMTUyfDAsWj1fKzE0NHwwLGc9XysxMzZ8MCxtPV8rMTI4fDAsdj1fKzEyMHwwLHc9XysxMTJ8MCxoPV8rMTA0fDAsaz1fKzk2fDAsZD1fKzg4fDAsRD1fKzgwfDAscz1fKzcyfDAsYj1fKzY0fDAsdT1fKzU2fDAsbD1fKzQ4fDAsYz1fKzQwfDAsZj1fKzMyfDAsUT1fKzI0fDAsbj1fKzE2fDAsaT1fKzh8MCxZPV8sMHwoZXw9MCkpe2Nhc2UgMTplPTEwMTcyO2JyZWFrO2Nhc2UgMjplPTEwNjc2O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHVyPV99aWYoUG4ocj0wfGFyW2U+PjJdLDQ1OTY5LFkpLFk9MHxscltBKzQ+PjFdLGFyW2k+PjJdPWxyW0ErMj4+MV0sYXJbNCtpPj4yXT1ZLFBuKHIsNDYwMTAsaSksYXJbbj4+Ml09Y3JbQSs2Pj4wXSxQbihyLDQ2MDQ2LG4pLGFyW1E+PjJdPWNyW0ErNz4+MF0sUG4ociw0NjA3OSxRKSxRPUErOHwwLGFyW2Y+PjJdPWNyW1E+PjBdLFBuKHIsNDYxMTIsZiksMHx0cltRPj4wXSl7c3dpdGNoKDB8YXJbQSsxMj4+Ml0pe2Nhc2UgMDplPTQ1OTU5O2JyZWFrO2Nhc2UgMTplPTQ1OTU1O2JyZWFrO2Nhc2UgMjplPTQ1OTUwO2JyZWFrO2Nhc2UgMzplPTQ1OTQ0O2JyZWFrO2Nhc2UgNDplPTQ1OTQwO2JyZWFrO2RlZmF1bHQ6ZT00NTkyOH1hcltjPj4yXT1lLFBuKHIsNDYxNDgsYyksYXJbbD4+Ml09Y3JbQSsxNj4+MF0sUG4ociw0NjE4NCxsKSxhclt1Pj4yXT1jcltBKzE3Pj4wXSxQbihyLDQ2MjIwLHUpLGFyW2I+PjJdPWNyW0ErMTg+PjBdLFBuKHIsNDYyNjAsYiksYXJbcz4+Ml09Y3JbQSsxOT4+MF0sUG4ociw0NjI5NixzKSxhcltEPj4yXT1jcltBKzIwPj4wXSxQbihyLDQ2MzMyLEQpfUQ9QSsyMXwwLGFyW2Q+PjJdPWNyW0Q+PjBdLFBuKHIsNDYzNjgsZCksMHx0cltEPj4wXSYmKGFyW2s+PjJdPWNyW0ErMjI+PjBdLFBuKHIsNDY0MDIsayksYXJbaD4+Ml09Y3JbQSsyMz4+MF0sUG4ociw0NjQ0NSxoKSk7YXJbdz4+Ml09Y3JbQSsyND4+MF0sUG4ociw0NjQ4OCx3KSxhclt2Pj4yXT1jcltBKzI1Pj4wXSxQbihyLDQ2NTI0LHYpLGFyW20+PjJdPWNyW0ErMjY+PjBdLFBuKHIsNDY1NjAsbSksYXJbZz4+Ml09Y3JbQSsyNz4+MF0sUG4ociw0NjU5NixnKSxhcltaPj4yXT1hcltBKzI4Pj4yXSxQbihyLDQ2NjMyLFopLGFyW3A+PjJdPWFyW0ErMzI+PjJdLFBuKHIsNDY2NjgscCksYXJbeT4+Ml09YXJbQSszNj4+Ml0sUG4ociw0NjcwNCx5KSxhcltKPj4yXT1hcltBKzQwPj4yXSxQbihyLDQ2NzQwLEopLEo9QSs0NHwwLGFyW0I+PjJdPWNyW0o+PjBdLFBuKHIsNDY3NzYsQiksMHx0cltKPj4wXSYmKGFyW0U+PjJdPWFyW0ErNDg+PjJdLFBuKHIsNDY4MTIsRSksYXJbWD4+Ml09YXJbQSs1Mj4+Ml0sUG4ociw0Njg0OCxYKSk7YXJbVz4+Ml09Y3JbQSs1Nj4+MF0sUG4ociw0Njg4NCxXKSxhcltJPj4yXT1hcltBKzYwPj4yXSxQbihyLDQ2OTI2LEkpLGFyW00+PjJdPWNyW0ErNjQ+PjBdLFBuKHIsNDY5NjgsTSksTT1BKzY1fDAsYXJbQz4+Ml09Y3JbTT4+MF0sUG4ociw0NzAwNixDKSwwfHRyW00+PjBdJiYoYXJbRz4+Ml09Y3JbQSs2Nj4+MF0sUG4ociw0NzA0NyxHKSxhcltWPj4yXT1jcltBKzY3Pj4wXSxQbihyLDQ3MDg4LFYpLGFyW0Y+PjJdPWNyW0ErNjg+PjBdLFBuKHIsNDcxMzYsRiksYXJbUj4+Ml09bHJbQSs3MD4+MV0sUG4ociw0NzE3NyxSKSxhcltOPj4yXT1jcltBKzcyPj4wXSxQbihyLDQ3MjE4LE4pLGFyW3Q+PjJdPWNyW0ErNzM+PjBdLFBuKHIsNDcyNTksdCksYXJbbz4+Ml09Y3JbQSs3ND4+MF0sUG4ociw0NzMwMCxvKSxhclthPj4yXT1jcltBKzc1Pj4wXSxQbihyLDQ3MzQxLGEpKSx1cj1ffShBKzQ5MDR8MCxlKSx1cj1MfShyLGUpLGhiKDB8KGY9QSsxMTA5NisoNTE2OCooZT0wfGFyW3IrNDcyPj4yXSl8MCl8MCksMHxyLDQ3MTcpLCgwfGYpIT0oMHxyKSYmS2UoQSsxMTA5NisoNTE2OCplfDApKzQ3MjB8MCwwfGFyW3IrNDcyMD4+Ml0sMHxhcltyKzQ3MjQ+PjJdKSxoYihBKzExMDk2Kyg1MTY4KmV8MCkrNDczMnwwLHIrNDczMnwwLDQzNiksZj0wLEFjKHIpLHVyPWksMHxmKX1mdW5jdGlvbiBLZShBLGUscil7dmFyIGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoKGE9KDB8KGM9KGk9cnw9MCktKGV8PTApfDApKS8xMDB8MCk+Pj4wPD0oKCh0PTB8YXJbKGY9KEF8PTApKzh8MCk+PjJdKS0obj1sPTB8YXJbQT4+Ml0pfDApLzEwMHwwKT4+PjApcmV0dXJuIDB8KHQ9KG89YT0oQT0obz0oKDB8YXJbKGM9QSs0fDApPj4yXSktbHwwKS8xMDB8MCk+Pj4wPGE+Pj4wKT9lKygxMDAqb3wwKXwwOnIpLWV8MCkmJndiKDB8bCwwfGUsMHx0KSxyPW4rKDEwMCooKDB8dCkvMTAwfDApfDApfDAsQT8hKCgwfCh0PWktb3wwKSk8PTApJiYoaGIoMHxhcltjPj4yXSwwfGEsMHx0KSx2b2lkKGFyW2M+PjJdPSgwfGFyW2M+PjJdKSsoMTAwKigodD4+PjApLzEwMHwwKXwwKSkpOigwfCh0PTB8YXJbYz4+Ml0pKSE9KDB8cikmJnZvaWQoYXJbYz4+Ml09dCsoMTAwKn4oKCh0Ky0xMDAtcnwwKT4+PjApLzEwMHwwKXwwKSk7KG89bCkmJigoMHwocj0wfGFyWyh0PUErNHwwKT4+Ml0pKSE9KDB8bikmJihhclt0Pj4yXT1yKygxMDAqfigoKHIrLTEwMC1sfDApPj4+MCkvMTAwfDApfDApKSx2dShvKSxhcltmPj4yXT0wLGFyW3Q+PjJdPTAsdD1hcltBPj4yXT0wKSw0Mjk0OTY3MjxhPj4+MCYmemwoKSx0PShsPSgwfHQpLzEwMHwwKTw8MSw0Mjk0OTY3MjwodD1sPj4+MDwyMTQ3NDgzNj90Pj4+MDxhPj4+MD9hOnQ6NDI5NDk2NzIpPj4+MCYmemwoKSxyPTB8aHUoMTAwKnR8MCksYXJbKG89QSs0fDApPj4yXT1yLGFyW0E+PjJdPXIsYXJbZj4+Ml09cisoMTAwKnR8MCksKDB8Yyk8PTB8fChoYigwfHIsMHxlLDB8YyksYXJbbz4+Ml09cisoMTAwKigoYz4+PjApLzEwMHwwKXwwKSl9ZnVuY3Rpb24gcWUoQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG49MDtyZXR1cm4gdXI9KGY9dXIpKzQ0MDB8MCxJYShpPWYpLHI9MHxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZihDYShBfD0wLDApLHU9MHxpdChlKSw2MzwoMHwodHJbQSsxPj4wXT11KSl8LTk5OTk5PT0oMHx1KSlyZXR1cm4gZXIocis0fDAsMTAwOSwwKSwocj0wKXxyO2lmKHU9MHxpdChlKSw2MzwoMHwodHJbKG49QSsyfDApPj4wXT11KSl8LTk5OTk5PT0oMHx1KSlyZXR1cm4gZXIocis0fDAsMTAxMCwwKSwocj0wKXxyO2lmKHU9MjU1JigwfEF0KGUsMSkpLHRyW0ErMz4+MF09dSx1PTI1NSYoMHxBdChlLDEpKSx0cltBKzMxPj4wXT11LHU9MjU1JigwfEF0KGUsMykpLHRyW0ErNDEzMj4+MF09dSx1PTI1NSYoMHxBdChlLDEpKSx0cltBKzQ+PjBdPXUsdT0yNTUmKDB8QXQoZSwxKSksdHJbQSs1Pj4wXT11LHU9MHxpdChlKSxpPTI1NSZ1LHRyWyhmPUErNnwwKT4+MF09aSwtOTk5OTk9PSgwfHUpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYodHJbZj4+MF09aSsxPDwyND4+MjQsdT0wfGl0KGUpLGk9MjU1JnUsdHJbKGY9QSs3fDApPj4wXT1pLC05OTk5OT09KDB8dSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZih0cltmPj4wXT1pKzE8PDI0Pj4yNCxsPTB8dHJbbj4+MF0sISgwfHRyWyh1PXIrMTEwOTYrKDUxNjgqbHwwKXwwKT4+MF0pKXJldHVybiBlcihyKzR8MCwxMDEwLDApLChyPTApfHI7aWYoaT0wfGZ0KGUpLC05OTk5OT09KDB8KGFyWyhmPUErOHwwKT4+Ml09aSkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYoYXJbZj4+Ml09aSsyNixjPTI1NSYoMHxBdChlLDEpKSx0cltBKzEyPj4wXT1jLGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErMTM+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksKHRyW0ErMTQ+PjBdPWMpPDwyND4+MjQpe2lmKGM9MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzE2Pj4yXT1jKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cn1lbHNlIGFyW0ErMTY+PjJdPTA7aWYoYz0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW0ErMjA+PjJdPWMpKSlyZXR1cm4gZXIocis0fDAsMTAwNiwwKSwocj0wKXxyO2lmKGM9MHxmdChlKSwtOTk5OTk9PSgwfChhcltBKzI0Pj4yXT1jKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhPTI1NSYoMHxBdChlLDEpKSx0cltBKzI4Pj4wXT1hLGE9MjU1JigwfEF0KGUsMSkpLHRyW0ErMjk+PjBdPWEsYT0yNTUmKDB8QXQoZSwxKSksdHJbQSszMD4+MF09YSxhPTI1NSYoMHxBdChlLDEpKSx0cltBKzMyPj4wXT1hLGE9MjU1JigwfEF0KGUsMSkpLHRyWyhjPUErMzR8MCk+PjBdPWEsYT0yNTUmKDB8QXQoZSwxKSksdHJbQSszMz4+MF09YSwwfHRyW2M+PjBdKXtpZihpPTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbKGE9QSszNnwwKT4+Ml09aSkpfDk8KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhclthPj4yXT1pKzEsaT0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhjPUErNDB8MCk+PjJdPWkpKXw5PCgwfGkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7YXJbYz4+Ml09aSsxLG89MHxBdChlLDEpLHRyW0ErNDQ+PjBdPW87ZG97aWYoISgyNTUmbykpe249MHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNTA1Nj4+Ml0sZj0wfGFyW3IrMTEwOTYrKDUxNjgqbHwwKSs1MDY0Pj4yXSxvPTB8YXJbYT4+Ml0saT1vKy0xfDA7QTpkb3tpZigxPCgwfG8pKXtmb3Iobz0wO2k9MHxpdChlKSwtOTk5OTkhPSgwfChhclsodD1BKzQxNzIrKG88PDIpfDApPj4yXT1pKSk7KWlmKGk9aSsxfDAsYXJbdD4+Ml09aSxuPW4taXwwLG89bysxfDAsKDB8KGk9KDB8YXJbYT4+Ml0pLTF8MCkpPD0oMHxvKSlicmVhayBBO3JldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHJ9fXdoaWxlKDApO2lmKCgwfG4pPDEpcmV0dXJuKHI9MCl8cjthcltBKzQxNzIrKGk8PDIpPj4yXT1uLGE9MHxhcltjPj4yXSxpPWErLTF8MDtBOmRve2lmKDE8KDB8YSkpe2Zvcih0PTA7aT0wfGl0KGUpLC05OTk5OSE9KDB8KGFyWyhuPUErNDIxMisodDw8Mil8MCk+PjJdPWkpKTspaWYoaT1pKzF8MCxhcltuPj4yXT1pLGY9Zi1pfDAsdD10KzF8MCwoMHwoaT0oMHxhcltjPj4yXSktMXwwKSk8PSgwfHQpKWJyZWFrIEE7cmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cn19d2hpbGUoMCk7aWYoKDB8Zik8MSlyZXR1cm4ocj0wKXxyO2FyW0ErNDIxMisoaTw8Mik+PjJdPWY7YnJlYWt9fXdoaWxlKDApO2k9MjU1JigwfEF0KGUsMSkpfWVsc2UgYXJbQSszNj4+Ml09MSxhcltBKzQwPj4yXT0xLHRyW0ErNDQ+PjBdPTEsaT0wO3RyW0ErNDU+PjBdPWksYXJbKGk9QSs1MnwwKT4+Ml09MCxhclsobj1BKzU2fDApPj4yXT0wLGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDY+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksdHJbQSs0Nz4+MF09Yztkb3tpZihjPDwyND4+MjQpe2lmKGM9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDg+PjBdPWMsYz0yNTUmKDB8QXQoZSwxKSksISgodHJbQSs0OT4+MF09Yyk8PDI0Pj4yNCkpe2lmKGY9MHxmdChlKSwtOTk5OTk9PSgwfChhcltpPj4yXT1mKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihhcltpPj4yXT1mPDwxLGk9MHxmdChlKSwtOTk5OTk9PSgwfChhcltuPj4yXT1pKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjthcltuPj4yXT1pPDwxO2JyZWFrfX1lbHNlIHRyW0ErNDg+PjBdPTAsdHJbQSs0OT4+MF09MH13aGlsZSgwKTtpZihjPTB8QXQoZSwxKSxpPTI1NSZjLHRyW0ErNjA+PjBdPWksMCE9KDI1NSZjfDApJiYwPT0oMHx0cltyKzExMDk2Kyg1MTY4Kmx8MCkrNjM2Pj4wXSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKHI9MCl8cjtpZihpPDwyND4+MjQpe2lmKDB8KGk9MHxlYyhlLHUsQSs2MXwwLDEpKSlyZXR1cm4gZXIocis0fDAsaSwwKSwocj0wKXxyfWVsc2UgaGIoQSs2MXwwLHIrMTEwOTYrKDUxNjgqbHwwKSs2Mzh8MCw0MDY0KTtpZihpPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxMjU+PjBdPWksaT0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhmPUErNDEyOHwwKT4+Ml09aSkpKXJldHVybiBlcihyKzR8MCwxMDA2LDApLChyPTApfHI7aWYoYXJbZj4+Ml09aSsyLCgwfGkpPigoMHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNjEyPj4yXSktMisoMHxhcltyKzExMDk2Kyg1MTY4Kmx8MCkrNjE2Pj4yXSl8MCkpcmV0dXJuKHI9MCl8cjtyZXR1cm4gbD0yNTUmKDB8QXQoZSwxKSksdHJbQSs0MTMzPj4wXT1sLGw9MjU1JigwfEF0KGUsMSkpLCEoKHRyW0ErNDEzND4+MF09bCk8PDI0Pj4yNCYmKGM9MjU1JigwfEF0KGUsMSkpLHRyWyhsPUErNDEzNXwwKT4+MF09YyxjPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxMzY+PjBdPWMsYz0yNTUmKDB8QXQoZSw2KSksdHJbQSs0MTM3Pj4wXT1jLDB8dHJbbD4+MF0pKXx8MHxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MDt2YXIgZixuPTAsdD0wLG89MDtmPTB8dHJbMisoaXw9MCk+PjBdLDB8dHJbaSsxMz4+MF0mJih0PTIrKDB8aXQoZSkpJjI1NSx0cltBPj4wXT10KTt0PTAhPSgwfEF0KGUsMSkpLHRyW0ErMT4+MF09MSZ0LDM9PSgwfGFyWyhuPXIrMTEwOTYrKDUxNjgqZnwwKSs1MDEyfDApPj4yXSl8MV50fHxlcihyKzR8MCwxMDA2LDApO289MCE9KDB8QXQoZSwxKSksaT0xJm8sdHJbKHQ9QSsyfDApPj4wXT1pLDAhPSgwfGFyW24+PjJdKXwxXm98fChlcihyKzR8MCwxMDA2LDApLGk9MHx0clt0Pj4wXSk7QTpkb3tpZihpPDwyND4+MjQpe2lmKC05OTk5OSE9KDB8KGk9MHxpdChlKSkpJiYoMHxpKTw9KDB8YXJbcisxMTA5NisoNTE2OCpmfDApKzYxNj4+Ml0pKXtpZih0cltBKzM+PjBdPWksLTk5OTk5PT0oMHwoaT0wfGl0KGUpKSl8NTwoMHxpKSlyZXR1cm4gZXIocis0fDAsMTAwNiwwKSwobz0wKXxvO2lmKG89aSsxfDAsISgyNTUmKHRyWyh0PUErNHwwKT4+MF09bykpKWJyZWFrO2ZvcihuPTA7Oyl7aWYoMjQ8KChpPTB8ZnQoZSkpKzEyfDApPj4+MCl7aT0xNTticmVha31pZih0cltBKzUrbj4+MF09aSwyNDwoKGk9MHxmdChlKSkrMTJ8MCk+Pj4wKXtpPTE3O2JyZWFrfWlmKHRyW0ErMTErbj4+MF09aSwoMHwobj1uKzF8MCkpPj0oMHxjclt0Pj4wXSkpYnJlYWsgQX1pZigxNT09KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKG89MCl8bztpZigxNz09KDB8aSkpcmV0dXJuIGVyKHIrNHwwLDEwMDYsMCksKG89MCl8b31yZXR1cm4gZXIocis0fDAsMTAwNiwwKSwobz0wKXxvfX13aGlsZSgwKTtpZigtOTk5OTkhPSgwfChpPTB8aXQoZSkpKSYmKG89MHxhcltyKzExMDk2Kyg1MTY4KmZ8MCkrNDk5Nj4+Ml0sKDB8aSk8PSgwfCgoMHxvKTwxMD8wOm8rLTEwfDApKSkpcmV0dXJuIHRyW0ErMTc+PjBdPWksLTk5OTk5IT0oMHwoaT0wfGl0KGUpKSkmJihvPTB8YXJbcisxMTA5NisoNTE2OCpmfDApKzUwMDQ+PjJdLCgwfGkpPD0oMHwoKDB8byk8MTA/MDpvKy0xMHwwKSkpPyh0cltBKzE4Pj4wXT1pLDB8KG89MSkpOihlcihyKzR8MCwxMDA2LDApLChvPTApfG8pO3JldHVybiBlcihyKzR8MCwxMDA2LDApLChvPTApfG99KEErNDEzOHwwLGUscixBKT8oZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTA7aWYodD11cix5PTB8YXJbKG49NTA0MCsoZXw9MCl8MCk+PjJdLGFyW0ErNDE2MD4+Ml09eS0oMHxhcltBKzE2Pj4yXSksYXJbQSs0MTY0Pj4yXT15LSgwfGNyW0ErNDE0MT4+MF0pLGFyW0ErNDE2OD4+Ml09Y3JbQSs0MTM4Pj4wXSx5PUErMzZ8MCwwfHRyW0ErNDQ+PjBdKXtpZihhPTB8YXJbeT4+Ml0sdXI9KGw9dXIpKygxNSsoNCsoYTw8Mil8MCkmLTE2KXwwLDA8PSgwfGEpKXtmb3IoYz0wfGFyW2UrNTA1Nj4+Ml0sbz0wO0I9KDB8YnIoYyxvKSkvKDB8YSl8MCxhcltsKyhvPDwyKT4+Ml09QiwoMHxvKSE9KDB8YSk7KW89bysxfDA7aWYoMDwoMHxhKSlmb3IoYT0obz0wKXxhcltsPj4yXTtwPWEsYT0wfGFyW2wrKChvPShCPW8pKzF8MCk8PDIpPj4yXSxhcltBKzQxNzIrKEI8PDIpPj4yXT1hLXAsKDB8byk8KDB8YXJbeT4+Ml0pOyk7fWlmKGE9MHxhclsobD1BKzQwfDApPj4yXSx1cj0odT11cikrKDE1Kyg0KyhhPDwyKXwwKSYtMTYpfDAsMDw9KDB8YSkpe2ZvcihjPTB8YXJbZSs1MDY0Pj4yXSxvPTA7Qj0oMHxicihjLG8pKS8oMHxhKXwwLGFyW3UrKG88PDIpPj4yXT1CLCgwfG8pIT0oMHxhKTspbz1vKzF8MDtpZigwPCgwfGEpKWZvcihhPShvPTApfGFyW3U+PjJdO3A9YSxhPTB8YXJbdSsoKG89KEI9bykrMXwwKTw8Mik+PjJdLGFyW0ErNDIxMisoQjw8Mik+PjJdPWEtcCwoMHxvKTwoMHxhcltsPj4yXSk7KTt9fWlmKGFyW0ErNDI1Mj4+Ml09MCwwPCgwfGFyW3k+PjJdKSlmb3IoYT1vPTA7YT0oMHxhcltBKzQxNzIrKG88PDIpPj4yXSkrYXwwLGFyW0ErNDI1MisoKG89bysxfDApPDwyKT4+Ml09YSwoMHxvKTwoMHxhclt5Pj4yXSk7KTtpZihhcltBKzQyOTY+PjJdPTAsMDwoMHxhclsocD1BKzQwfDApPj4yXSkpZm9yKGE9bz0wO289KDB8YXJbQSs0MjEyKyhhPDwyKT4+Ml0pK298MCxhcltBKzQyOTYrKChhPWErMXwwKTw8Mik+PjJdPW8sKDB8YSk8KDB8YXJbcD4+Ml0pOyk7Qj1BKzQzNDB8MCxhPTB8YXJbKHY9ZSs1MDcyfDApPj4yXSx1PTB8YXJbKG89QSs0MzQ0fDApPj4yXSxsPTB8YXJbQj4+Ml0sYT4+PjA8PShjPXUtbD4+Mik+Pj4wP2E+Pj4wPGM+Pj4wJiYoMHx1KSE9KDB8KGI9bCsoYTw8Mil8MCkpJiYoYXJbbz4+Ml09dSsofigodSstNC1ifDApPj4+Mik8PDIpKTooVmEoQixhLWN8MCksYT0wfGFyW3Y+PjJdKTt3PUErNDM1MnwwLGw9MHxhclsodT1BKzQzNTZ8MCk+PjJdLGM9MHxhclt3Pj4yXSxhPj4+MDw9KG89bC1jPj4yKT4+PjA/YT4+PjA8bz4+PjAmJigwfGwpIT0oMHwocz1jKyhhPDwyKXwwKSkmJihhclt1Pj4yXT1sKyh+KChsKy00LXN8MCk+Pj4yKTw8MikpOihWYSh3LGEtb3wwKSxhPTB8YXJbdj4+Ml0pO2k9QSs0MzY0fDAsdT0wfGFyWyhvPUErNDM2OHwwKT4+Ml0sbD0wfGFyW2k+PjJdLGE+Pj4wPD0oYz11LWw+PjIpPj4+MD9hPj4+MDxjPj4+MCYmKDB8dSkhPSgwfChkPWwrKGE8PDIpfDApKSYmKGFyW28+PjJdPXUrKH4oKHUrLTQtZHwwKT4+PjIpPDwyKSk6KFZhKGksYS1jfDApLGE9MHxhclt2Pj4yXSk7cj1BKzQzNzZ8MCx1PTB8YXJbKG89QSs0MzgwfDApPj4yXSxsPTB8YXJbcj4+Ml0sYT4+PjA8PShjPXUtbD4+Mik+Pj4wP2E+Pj4wPGM+Pj4wJiYoMHx1KSE9KDB8KGs9bCsoYTw8Mil8MCkpJiYoYXJbbz4+Ml09dSsofigodSstNC1rfDApPj4+Mik8PDIpKTpWYShyLGEtY3wwKTtmPUErNDM4OHwwLG89MHxhcltlKzUwOTY+PjJdLHU9MHxhclsoYT1BKzQzOTJ8MCk+PjJdLGw9MHxhcltmPj4yXSxvPj4+MDw9KGM9dS1sPj4yKT4+PjA/bz4+PjA8Yz4+PjAmJigwfHUpIT0oMHwoaD1sKyhvPDwyKXwwKSkmJihhclthPj4yXT11Kyh+KCh1Ky00LWh8MCk+Pj4yKTw8MikpOlZhKGYsby1jfDApO0E6ZG97aWYoMDwoMHxhclt2Pj4yXSkpe2ZvcihkPWUrNTA1NnwwLHM9MDs7KXtpZihoPTB8YXJbZD4+Ml0saz0oMHxzKSUoMHxoKXwwLGg9KDB8cykvKDB8aCl8MCwwPCgwfChjPTB8YXJbeT4+Ml0pKSlmb3IoYT0wLG89LTE7bz0oMHxrKTwoMHxhcltBKzQyNTIrKGE8PDIpPj4yXSk/bzphLCgwfChhPWErMXwwKSk8KDB8Yyk7KTtlbHNlIG89LTE7aWYoMDwoMHwobD0wfGFyW3A+PjJdKSkpZm9yKGM9MCxhPS0xO2E9KDB8aCk8KDB8YXJbQSs0Mjk2KyhjPDwyKT4+Ml0pP2E6YywoMHwoYz1jKzF8MCkpPCgwfGwpOyk7ZWxzZSBhPS0xO2lmKGI9KDB8YXJbQj4+Ml0pKyhzPDwyKXwwLChhcltiPj4yXT0wKTwoMHxvKSlmb3IodT1BKzQyMTIrKGE8PDIpfDAsYz1sPTA7Yz1jKygwfGJyKDB8YXJbQSs0MTcyKyhsPDwyKT4+Ml0sMHxhclt1Pj4yXSkpfDAsYXJbYj4+Ml09YywoMHwobD1sKzF8MCkpIT0oMHxvKTspO2Vsc2UgYz0wO2lmKDA8KDB8YSkpZm9yKGw9MDtjPWMrKDB8YnIoMHxhcltBKzQyMTIrKGw8PDIpPj4yXSwwfGFyW2Q+PjJdKSl8MCxhcltiPj4yXT1jLCgwfChsPWwrMXwwKSkhPSgwfGEpOyk7aWYoKGF8b3wwKTw9LTEpYnJlYWs7aWYoWj1jKygwfGJyKGgtKDB8YXJbQSs0Mjk2KyhhPDwyKT4+Ml0pfDAsMHxhcltBKzQxNzIrKG88PDIpPj4yXSkpfDAsYXJbYj4+Ml09WixaPWstKDB8YXJbQSs0MjUyKyhvPDwyKT4+Ml0pK1p8MCxhcltiPj4yXT1aLCgwfChzPShhclsoMHxhclt3Pj4yXSkrKFo8PDIpPj4yXT1zKSsxfDApKT49KDB8YXJbdj4+Ml0pKWJyZWFrIEF9c3IoMzczNjQsMzczODUsNjE4LDM3MzkyKX19d2hpbGUoMCk7aWYoMDwoMHwobz0wfGFyW3A+PjJdKSkpe1o9ZSs1MDU2fDAsYT0oYz1sPTApfGFyW3k+PjJdO2Rve2lmKDA8KDB8YSkpe2c9QSs0Mjk2KyhjPDwyKXwwLHc9bCxvPSh2PTApfGFyWyhtPUErNDI5NisoKGM9YysxfDApPDwyKXwwKT4+Ml07ZG97aWYodT0wfGFyW2c+PjJdLHY9KGw9dikrMXwwLCgwfHUpPCgwfG8pKXtrPUErNDI1MisobDw8Mil8MCxhPTB8YXJbKGg9QSs0MjUyKyh2PDwyKXwwKT4+Ml07ZG97aWYoKDB8KGQ9MHxhcltrPj4yXSkpPCgwfGEpKXtmb3IobD0wfGFyW0I+PjJdLGI9MHxhcltpPj4yXSxzPTB8YXJbcj4+Ml0sbz1kO2E9bCsoKDB8YnIoMHxhcltaPj4yXSx1KSkrbzw8Mil8MCxhcltiKyhhclthPj4yXTw8Mik+PjJdPXcsYT1zKygoMHxicigwfGFyW1o+PjJdLHUpKStvPDwyKXwwLGFyW2E+PjJdPXcsbz1vKzF8MCxhPTB8YXJbaD4+Ml0sKDB8byk8KDB8YSk7KTtvPTB8YXJbbT4+Ml19dT11KzF8MH13aGlsZSgoMHx1KTwoMHxvKSk7YT0wfGFyW3k+PjJdfXc9dysxfDB9d2hpbGUoKDB8dik8KDB8YSkpO2w9dyxvPTB8YXJbcD4+Ml19ZWxzZSBjPWMrMXwwfXdoaWxlKCgwfGMpPCgwfG8pKX1pZigoMHwobz0wfGFyWyhrPWUrNTA5MnwwKT4+Ml0pKTw9MClyZXR1cm4gdXI9dDt3PWUrNTEwMHwwLGQ9ZSs1MDU2fDAsYT0wfGFyWyhoPWUrNTA4OHwocz0wKSk+PjJdO2Rve2lmKDA8KDB8YSkpe3U9MHxhcltCPj4yXSxiPTB8YXJbZj4+Ml0sbD0wO2Rve2lmKGU9MHxhclt3Pj4yXSxBPTB8YXJbbj4+Ml0seT11KygoMHxicigwfGFyW2Q+PjJdLHM8PGU+PkEpKSsobDw8ZT4+QSk8PDIpfDAsbz1iKygoMHxicihhLHMpKStsPDwyKXwwLGFyW28+PjJdPWFyW3k+PjJdPDwoQS1lPDwxKSxvPTB8YXJbbj4+Ml0sKDB8KGE9MHxhclt3Pj4yXSkpPCgwfG8pKWZvcihjPW8tYXwwLG89YT0wO289KDA9PSgoZT0xPDxhKSZzfDApPzA6ZTw8MTw8YSkrbysoMD09KGUmbHwwKT8wOmU8PGEpfDAsKDB8KGE9YSsxfDApKTwoMHxjKTspO2Vsc2Ugbz0wO2E9YisoKDB8YnIoMHxhcltoPj4yXSxzKSkrbDw8Mil8MCxhclthPj4yXT0oMHxhclthPj4yXSkrbyxsPWwrMXwwLGE9MHxhcltoPj4yXX13aGlsZSgoMHxsKTwoMHxhKSk7bz0wfGFyW2s+PjJdfXM9cysxfDB9d2hpbGUoKDB8cyk8KDB8bykpO3VyPXR9KEEsdSksdHJbQT4+MF09MSwwfChyPTEpKToocj0wKXxyfShpLGUsQSksLTE8KDB8KGU9MHxhcltBKzUyND4+Ml0pKSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wO3N3aXRjaCh1cj0oeD11cikrNDAwfDAsVT14KzM5MnwwLFQ9eCszODR8MCxNPXgrMzc2fDAsSj14KzM2OHwwLEQ9eCszNjB8MCxRPXgrMzUyfDAsWT14KzM0NHwwLF89eCszMzZ8MCxOPXgrMzI4fDAsUj14KzMyMHwwLEY9eCszMTJ8MCxWPXgrMzA0fDAsRz14KzI5NnwwLEM9eCsyODh8MCxBQT14KzI4MHwwLEg9eCsyNzJ8MCxqPXgrMjY0fDAsJD14KzI1NnwwLHo9eCsyNDh8MCxPPXgrMjQwfDAsUz14KzIzMnwwLEk9eCsyMjR8MCxXPXgrMjE2fDAsWD14KzIwOHwwLEI9eCsyMDB8MCx5PXgrMTkyfDAscD14KzE4NHwwLFo9eCsxNzZ8MCxnPXgrMTY4fDAsdj14KzE2MHwwLHc9eCsxNTJ8MCxoPXgrMTQ0fDAsaz14KzEzNnwwLGQ9eCsxMjh8MCxzPXgrMTIwfDAsYj14KzExMnwwLHU9eCsxMDR8MCxsPXgrOTZ8MCxjPXgrODh8MCxvPXgrODB8MCx0PXgrNzJ8MCxuPXgrNjR8MCxmPXgrNTZ8MCxpPXgrNDh8MCxyPXgrNDB8MCxxPXgrMzJ8MCxtPXgrMjR8MCxhPXgrMTZ8MCxLPXgrOHwwLEw9eCwwfChlfD0wKSl7Y2FzZSAxOlA9MTAxNzI7YnJlYWs7Y2FzZSAyOlA9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9eH1QbihFPTB8YXJbUD4+Ml0sMzc0MTEsTCksYXJbSz4+Ml09dHJbQSsxPj4wXSxQbihFLDM3NDUyLEspLGFyW2E+PjJdPXRyW0ErMj4+MF0sUG4oRSwzNzQ4NSxhKSxhclttPj4yXT10cltBKzM+PjBdLFBuKEUsMzc1MTgsbSksYXJbcT4+Ml09dHJbQSs0Pj4wXSxQbihFLDM3NTYyLHEpLGFyW3I+PjJdPXRyW0ErNT4+MF0sUG4oRSwzNzU5NSxyKSxhcltpPj4yXT10cltBKzY+PjBdLFBuKEUsMzc2MjgsaSksYXJbZj4+Ml09dHJbQSs3Pj4wXSxQbihFLDM3NjY0LGYpLGFyW24+PjJdPWFyW0ErOD4+Ml0sUG4oRSwzNzcwMCxuKSxhclt0Pj4yXT10cltBKzEyPj4wXSxQbihFLDM3NzMzLHQpLGFyW28+PjJdPXRyW0ErMTM+PjBdLFBuKEUsMzc3NjYsbykscT1BKzE0fDAsYXJbYz4+Ml09dHJbcT4+MF0sUG4oRSwzNzc5OSxjKSwwfHRyW3E+PjBdJiYoYXJbbD4+Ml09YXJbQSsxNj4+Ml0sUG4oRSwzNzgzMixsKSk7aWYoYXJbdT4+Ml09YXJbQSsyMD4+Ml0sUG4oRSwzNzg2NSx1KSxhcltiPj4yXT1hcltBKzI0Pj4yXSxQbihFLDM3OTAwLGIpLGFyW3M+PjJdPXRyW0ErMjg+PjBdLFBuKEUsMzc5MzUscyksYXJbZD4+Ml09dHJbQSsyOT4+MF0sUG4oRSwzNzk4MixkKSxhcltrPj4yXT10cltBKzMwPj4wXSxQbihFLDM4MDE3LGspLGFyW2g+PjJdPXRyW0ErMzE+PjBdLFBuKEUsMzgwNTIsaCksYXJbdz4+Ml09dHJbQSszMj4+MF0sUG4oRSwzODA4Nyx3KSxxPUErMzR8MCxhclt2Pj4yXT10cltxPj4wXSxQbihFLDM4MTIyLHYpLGFyW2c+PjJdPXRyW0ErMzM+PjBdLFBuKEUsMzgxNTcsZyksMHx0cltxPj4wXSl7aWYoTD1BKzM2fDAsYXJbWj4+Ml09YXJbTD4+Ml0sUG4oRSwzODE5NSxaKSxLPUErNDB8MCxhcltwPj4yXT1hcltLPj4yXSxQbihFLDM4MjIxLHApLGFyW3k+PjJdPXRyW0ErNDQ+PjBdLFBuKEUsMzgyNDcseSksUG4oRSwzODI3MyxCKSwwPD0oMHxhcltMPj4yXSkpZm9yKFA9MDthcltJPj4yXT1hcltBKzQyNTIrKFA8PDIpPj4yXSxQbihFLDM4MzIwLEkpLCgwfFApPCgwfGFyW0w+PjJdKTspUD1QKzF8MDtpZihQbihFLDQ1NzI4LFgpLFBuKEUsMzgyOTgsVyksMDw9KDB8YXJbSz4+Ml0pKWZvcihQPTA7YXJbej4+Ml09YXJbQSs0Mjk2KyhQPDwyKT4+Ml0sUG4oRSwzODMyMCx6KSwoMHxQKTwoMHxhcltLPj4yXSk7KVA9UCsxfDA7UG4oRSw0NTcyOCxTKSxhcltPPj4yXT10cltBKzQ1Pj4wXSxQbihFLDM4MzI1LE8pfWFyWyQ+PjJdPXRyW0ErNDY+PjBdLFBuKEUsMzgzNjksJCksJD1BKzQ3fDAsYXJbaj4+Ml09dHJbJD4+MF0sUG4oRSwzODQxNyxqKSwwfHRyWyQ+PjBdJiYoYXJbSD4+Ml09dHJbQSs0OD4+MF0sUG4oRSwzODQ2MSxIKSxhcltBQT4+Ml09dHJbQSs0OT4+MF0sUG4oRSwzODUwNixBQSksYXJbQz4+Ml09YXJbQSs1Mj4+Ml0sUG4oRSwzODU0NixDKSxhcltHPj4yXT1hcltBKzU2Pj4yXSxQbihFLDM4NTY0LEcpKTthcltWPj4yXT10cltBKzYwPj4wXSxQbihFLDM4NTgyLFYpLGFyW0Y+PjJdPXRyW0ErNDEyNT4+MF0sUG4oRSwzODYyMixGKSxhcltSPj4yXT1hcltBKzQxMjg+PjJdLFBuKEUsMzg2NTksUiksYXJbTj4+Ml09dHJbQSs0MTMyPj4wXSxQbihFLDM4Njk2LE4pLGFyW18+PjJdPXRyW0ErNDEzMz4+MF0sUG4oRSwzODczMyxfKSxhcltZPj4yXT10cltBKzQxMzQ+PjBdLFBuKEUsMzg3ODMsWSksQUE9QSs0MTM1fDAsYXJbUT4+Ml09dHJbQUE+PjBdLFBuKEUsMzg4MTksUSksYXJbRD4+Ml09dHJbQSs0MTM2Pj4wXSxQbihFLDM4ODU1LEQpLGFyW0o+PjJdPXRyW0ErNDEzNz4+MF0sUG4oRSwzODg5MSxKKSxhcltNPj4yXT1hcltBKzQxNjA+PjJdLFBuKEUsMzg5MjcsTSksYXJbVD4+Ml09YXJbQSs0MTY0Pj4yXSxQbihFLDM4OTYzLFQpLGFyW1U+PjJdPWFyW0ErNDE2OD4+Ml0sUG4oRSwzOTAwNCxVKSwwfHRyW0FBPj4wXSYmZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wO3N3aXRjaCh1cj0odT11cikrODB8MCxsPXUrNzJ8MCxjPXUrNjR8MCxhPXUrNTZ8MCxvPXUrNDh8MCxuPXUrNDB8MCxzPXUrMzJ8MCx0PXUrMjR8MCxiPXUrMTZ8MCxmPXUrOHwwLGk9dSwwfChlfD0wKSl7Y2FzZSAxOmU9MTAxNzI7YnJlYWs7Y2FzZSAyOmU9MTA2NzY7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdXI9dX1pZihQbihyPTB8YXJbZT4+Ml0sMzY5MDUsaSksYXJbZj4+Ml09Y3JbQT4+MF0sUG4ociwzNjk0OCxmKSxhcltiPj4yXT1jcltBKzE+PjBdLFBuKHIsMzY5OTQsYiksYj1BKzJ8MCxhclt0Pj4yXT1jcltiPj4wXSxQbihyLDM3MDQwLHQpLDB8dHJbYj4+MF0mJihhcltzPj4yXT1jcltBKzM+PjBdLFBuKHIsMzcwODYscyksZD1BKzR8MCxhcltuPj4yXT1jcltkPj4wXSxQbihyLDM3MTMyLG4pLDB8dHJbZD4+MF0pKWZvcihlPTA7cz0wfHRyW0ErNStlPj4wXSxhcltvPj4yXT1lLGFyWzQrbz4+Ml09cyxQbihyLDM3MTc4LG8pLHM9MHx0cltBKzExK2U+PjBdLGFyW2E+PjJdPWUsYXJbNCthPj4yXT1zLFBuKHIsMzcyMjUsYSksKDB8KGU9ZSsxfDApKTwoMHxjcltkPj4wXSk7KTthcltjPj4yXT1jcltBKzE3Pj4wXSxQbihyLDM3MjcyLGMpLGFyW2w+PjJdPWNyW0ErMTg+PjBdLFBuKHIsMzczMTgsbCksdXI9dX0oQSs0MTM4fDAsZSksdXI9eH0oaSxlKSxyPyhoYigwfChuPUErOTM3ODQrKDQ0MDAqKGU9MHx0cltpKzE+PjBdKXwwKXwwKSwwfGksNDM0MCksdXI9KG49KCgwfG4pPT0oMHxpKXx8KCRlKEErOTM3ODQrKDQ0MDAqZXwwKSs0MzQwfDAsMHxhcltpKzQzNDA+PjJdLDB8YXJbaSs0MzQ0Pj4yXSksJGUoQSs5Mzc4NCsoNDQwMCplfDApKzQzNTJ8MCwwfGFyW2krNDM1Mj4+Ml0sMHxhcltpKzQzNTY+PjJdKSwkZShBKzkzNzg0Kyg0NDAwKmV8MCkrNDM2NHwwLDB8YXJbaSs0MzY0Pj4yXSwwfGFyW2krNDM2OD4+Ml0pLCRlKEErOTM3ODQrKDQ0MDAqZXwwKSs0Mzc2fDAsMHxhcltpKzQzNzY+PjJdLDB8YXJbaSs0MzgwPj4yXSksJGUoQSs5Mzc4NCsoNDQwMCplfDApKzQzODh8MCwwfGFyW2krNDM4OD4+Ml0sMHxhcltpKzQzOTI+PjJdKSkscj8wOjEwMDYpLEdhKGkpLGYpLDB8bik6KEE9cj8wOjEwMDYsR2EoaSksdXI9ZiwwfEEpfWZ1bmN0aW9uICRlKEEsZSxyKXt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtpZigoYT0oYz0oaT1yfD0wKS0oZXw9MCl8MCk+PjIpPj4+MDw9KHQ9MHxhclsoZj0oQXw9MCkrOHwwKT4+Ml0pLShuPWw9MHxhcltBPj4yXSk+PjI+Pj4wKXJldHVybiAwfChyPSh0PShvPWE9KEE9KG89KDB8YXJbKGM9QSs0fDApPj4yXSktbD4+Mik+Pj4wPGE+Pj4wKT9lKyhvPDwyKXwwOnIpLWV8MCk+PjIpJiZ3YigwfGwsMHxlLDB8dCkscj1uKyhyPDwyKXwwLEE/ISgoMHwodD1pLW98MCkpPD0wKSYmKGhiKDB8YXJbYz4+Ml0sMHxhLDB8dCksdm9pZChhcltjPj4yXT0oMHxhcltjPj4yXSkrKHQ+Pj4yPDwyKSkpOigwfCh0PTB8YXJbYz4+Ml0pKSE9KDB8cikmJnZvaWQoYXJbYz4+Ml09dCsofigodCstNC1yfDApPj4+Mik8PDIpKTsobz1sKSYmKCgwfChyPTB8YXJbKHQ9QSs0fDApPj4yXSkpIT0oMHxuKSYmKGFyW3Q+PjJdPXIrKH4oKHIrLTQtbHwwKT4+PjIpPDwyKSksdnUobyksYXJbZj4+Ml09MCxhclt0Pj4yXT0wLHQ9YXJbQT4+Ml09MCksMTA3Mzc0MTgyMzxhPj4+MCYmemwoKSxsPXQ+PjEsMTA3Mzc0MTgyMzwodD10Pj4yPj4+MDw1MzY4NzA5MTE/bD4+PjA8YT4+PjA/YTpsOjEwNzM3NDE4MjMpPj4+MCYmemwoKSxyPTB8aHUodDw8MiksYXJbKG89QSs0fDApPj4yXT1yLGFyW0E+PjJdPXIsYXJbZj4+Ml09cisodDw8MiksKDB8Yyk8PTB8fChoYigwfHIsMHxlLDB8YyksYXJbbz4+Ml09cisoYz4+PjI8PDIpKX1mdW5jdGlvbiBBcihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO3I9KEF8PTApKzR8MCxpPTB8YXJbQT4+Ml0sNTM2ODcwOTE8KG49KG89KDB8KGY9KDB8YXJbcj4+Ml0pLWl8MCkpLzgwfDApKzF8MCk+Pj4wJiZ6bCgpLGM9KGE9KCgwfGFyWyhsPUErOHwwKT4+Ml0pLWl8MCkvODB8MCk8PDEsbj1hPj4+MDwyNjg0MzU0NT9jPj4+MDxuPj4+MD9uOmM6NTM2ODcwOTE7ZG97aWYobil7aWYoISg1MzY4NzA5MTxuPj4+MCkpe3Q9MHxodSg4MCpufDApO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSB0PTB9d2hpbGUoMCk7Zm9yKGE9dCsoODAqbnwwKXwwLG49ZSx0PShvPWM9dCsoODAqb3wwKXwwKSs4MHwwO2FyW28+PjJdPWFyW24+PjJdLG49bis0fDAsKDB8KG89bys0fDApKTwoMHx0KTspO249YysoODAqKCgwfGYpLy04MHwwKXwwKXwwLDA8KDB8ZikmJmhiKDB8biwwfGksMHxmKSxhcltBPj4yXT1uLGFyW3I+PjJdPWMrODAsYXJbbD4+Ml09YSxpJiZ2dShpKX1mdW5jdGlvbiBlcihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGk9MCxmPTA7QTpkb3tpZihyKXtmPTB8YXJbKGk9QSsxNjR8MCk+PjJdO2Rve2lmKDA8KDB8Zikpe2ZvcihyPTA7Oyl7aWYoKDB8YXJbQSs4NCsocjw8Mik+PjJdKT09KDB8ZSkpe3I9MTA7YnJlYWt9aWYoKDB8Zik8PSgwfChyPXIrMXwwKSkpe3I9NTticmVha319aWYoNT09KDB8cikpe2lmKCgwfGYpPDIwKWJyZWFrO2JyZWFrIEF9aWYoMTA9PSgwfHIpKXJldHVybn19d2hpbGUoMCk7YXJbaT4+Ml09ZisxLGFyW0ErODQrKGY8PDIpPj4yXT1lfX13aGlsZSgwKTsyMD09KDB8KHI9MHxhclsoaT1BKzgwfDApPj4yXSkpPyhlPTEwMDEscj0xOSk6YXJbaT4+Ml09cisxLGFyW0ErKHI8PDIpPj4yXT1lfWZ1bmN0aW9uIHJyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtpZih1cj0odD11cikrMTZ8MCxmPXQrNHwwLGI9dCs4fDAsbj10LHM9MHxodSgxMzU2KSxvPXMsYXJbNzc2KyhvfD0wKT4+Ml09MCxhcltvKzc4MD4+Ml09MCxhcltvKzc4ND4+Ml09MCxzdChvKzEzMzJ8MCksYXJbbysxMzQ0Pj4yXT0wLGFyW28rMTM0OD4+Ml09MCxhcltvKzEzNTI+PjJdPTAsTGEobyksbD0wfGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO3RyWyhpfD0wKT4+MF09MCxMYShBKSx0clsobD1BKzEyfDApPj4wXT0wLHc9MjU1JigwfEF0KGUsMSkpLHRyWyhjPUErNHwwKT4+MF09dywwfHRyW3IrMzc3MjE0Pj4wXSYmKHc9MjU1JigwfEF0KGUsMSkpLHRyW0ErNT4+MF09dyk7aWYodz0wfGl0KGUpLDY0PCgwfChhcltBKzg+PjJdPXcpKXwtOTk5OTk9PSgwfHcpKXJldHVybiBlcihyKzR8MCwxMDA5LDApLChpPTApfGk7aWYoISgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKT4+MF0pKXJldHVybiBlcihyKzR8MCwxMDA5LDApLChpPTApfGk7aWYobj0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSsyPj4wXSwhKDB8dHJbKHU9cisxMTA5NisoNTE2OCpufDApfDApPj4wXSkpcmV0dXJuIGVyKHIrNHwwLDEwMTAsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKDB8dHJbYz4+MF0pbz10PTAsaD0yMztlbHNle2Zvcih0PTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzM+PjBdPzI1NSYoMHxBdChlLDEpKTowLHRyW2w+PjBdPXQsbz0wfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDcyPj4yXSx0PTA7KDE8PHR8MCk8KDB8byk7KXQ9dCsxfDA7aWYodD0wfEF0KGUsdCksMHx0cltsPj4wXSl7aWYoIXQpcmV0dXJuIHRyW2k+PjBdPTAsZXIocis0fDAsMTAyMSwwKSwoaT0wKXxpO2lmKCEobz0wfGFyW3IrMzc2MjI4Pj4yXSkpcmV0dXJuIDB8KGk9MTYpO2hiKDB8QSwwfG8sNzc2KSwoYT0oMHxvKT09KDB8QSkpfHwkZShBKzc3NnwwLDB8YXJbbys3NzY+PjJdLDB8YXJbbys3ODA+PjJdKSxoYihBKzc4OHwwLG8rNzg4fDAsNTQ0KSxndChBKzEzMzJ8MCxvKzEzMzJ8MCksdHJbQSsxMzQwPj4wXT0wfHRyW28rMTM0MD4+MF0sYXx8JGUoQSsxMzQ0fDAsMHxhcltvKzEzNDQ+PjJdLDB8YXJbbysxMzQ4Pj4yXSksdHJbYz4+MF09MCxvPTEsaD0yM31lbHNlIG89MH0yMz09KDB8aCkmJih0cltsPj4wXT1vKTtpZigwPD0oMHwoYXJbKGY9QSsxNnwwKT4+Ml09dCkpJiYoMHx0KTwoMHxhcltyKzExMDk2Kyg1MTY4Km58MCkrNTA3Mj4+Ml0pKXtpZighKG88PDI0Pj4yNCkpe2lmKDA8KDB8dHJbKG89cis5Mzc4NCsoNDQwMCp3fDApKzQxMzJ8MCk+PjBdKSlmb3IodD0wO2V0KGUsMSksKDB8KHQ9dCsxfDApKTwoMHx0cltvPj4wXSk7KTtpZihzPTB8aXQoZSksMjwoMHwoYXJbKGQ9QSsyMHwwKT4+Ml09cykpfC05OTk5OT09KDB8cykpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKHQ9MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMzE+PjBdPzI1NSYoMHxBdChlLDEpKToxLHRyW0ErMjQ+PjBdPXQsMT09KDB8dHJbcisxMTA5NisoNTE2OCpufDApKzQ4MD4+MF0pJiYocz0yNTUmKDB8QXQoZSwyKSksdHJbQSsyNT4+MF09cyksYXJbKHQ9QSsyOHwwKT4+Ml09MCwoKCh0clsobz1BKzMyfDApPj4wXT0wKXx0cltyKzM3NzIxMj4+MF0pLTE5JjI1NSk8Milhclt0Pj4yXT0wLGFyW0ErMTQwPj4yXT0wLGFyW0ErMTQ0Pj4yXT0wLHQ9MDtlbHNle2I9MHxBdChlLDB8YXJbKHM9cisxMTA5NisoNTE2OCpufDApKzUyMHwwKT4+Ml0pLGFyW3Q+PjJdPWIsYj0yNTUmKDB8QXQoZSwxKSksdHJbbz4+MF09Yjtkb3tpZihiPDwyND4+MjQpe2ZvcihhPXIrMTEwOTYrKDUxNjgqbnwwKSs0NzIwfDAsdD0wfGFyWyh1PXIrMTEwOTYrKDUxNjgqbnwwKSs0NzI0fDApPj4yXSxjPTB8YXJbYT4+Ml0sbD0odC1jfDApLzEwMHwwLG89MDsoMTw8b3wwKTwoMHxsKTspbz1vKzF8MDtpZigwPCgwfG8pPyhjPTB8QXQoZSxvKSxvPTB8YXJbYT4+Ml0sdD0wfGFyW3U+PjJdKToobz1jLGM9MCksKDB8KGFyW0ErMTM2Pj4yXT1jKSk8KCh0LW98MCkvMTAwfDApKXtmb3IoYXJbQSs4MDg+PjJdPWMsdD1vKygxMDAqY3wwKXwwLG89KGE9QSs4MTJ8MCkrMTAwfDA7b3JbYT4+MV09MHxvclt0Pj4xXSx0PXQrMnwwLCgwfChhPWErMnwwKSk8KDB8byk7KTticmVha31yZXR1cm4gZXIocis0fDAsMTAxNSwwKSwwfChpPTgpfWZvcihhPXIrMTEwOTYrKDUxNjgqbnwwKSs0NzIwfDAsWmMocis0fDAsdSxlLHQ9QSszNHwwLCgoMHxhclsobz1yKzExMDk2Kyg1MTY4Km58MCkrNDcyNHwwKT4+Ml0pLSgwfGFyW2E+PjJdKXwwKS8xMDB8MCxhLDEpLGFyW0ErODA4Pj4yXT0oKDB8YXJbbz4+Ml0pLSgwfGFyW2E+PjJdKXwwKS8xMDB8MCxvPShhPUErODEyfDApKzEwMHwwO29yW2E+PjFdPTB8b3JbdD4+MV0sdD10KzJ8MCwoMHwoYT1hKzJ8MCkpPCgwfG8pOyk7fXdoaWxlKDApO0E6ZG97aWYoMHx0cltyKzExMDk2Kyg1MTY4Km58MCkrNDczMj4+MF0pe2w9cisxMTA5NisoNTE2OCpufDApKzQ3MzZ8MDtkb3tpZigwPCgwfGFyW2w+PjJdKSl7aWYoYj0wfGl0KGUpLC05OTk5OSE9KDB8KGFyW0ErMTQwPj4yXT1iKSkpYnJlYWs7cmV0dXJuIDB8KHQ9OCl9YXJbQSsxNDA+PjJdPTB9d2hpbGUoMCk7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyh1PUErMTQ0fDApPj4yXT10KSkpcmV0dXJuIDB8KGk9OCk7aWYobz0wfGFyWyhiPUErMTQwfDApPj4yXSwoKHQ9byt0fDApKygwfGNyW0ErOTA4Pj4wXSkrKDB8Y3JbQSs5MDk+PjBdKXwwKT4oMHxhcltyKzExMDk2Kyg1MTY4Km58MCkrNTI4KygoMHx0cltyKzExMDk2Kyg1MTY4Km58MCkrMj4+MF0pLTE8PDIpPj4yXSkpcmV0dXJuIGVyKHIrNHwwLDEwMTgsMCksdHJbaT4+MF09MCwoaT0wKXxpO2lmKCEoMDwoMHx0KSkpe3Q9MDticmVha31mb3IoYz10PTA7Oyl7aWYoKDB8Yyk8KDB8bykpe2ZvcihhPTB8YXJbbD4+Ml0sbz0wOygxPDxvfDApPCgwfGEpOylvPW8rMXwwO2lmKGE9MHxBdChlLG8pLHRyWyhvPUErMTQ4K2N8MCk+PjBdPWEsKDB8KGEmPTI1NSkpPj0oMHxhcltsPj4yXSkpYnJlYWs7YXJbciszNzYyMzIrKGM8PDIpPj4yXT1hcltyKzExMDk2Kyg1MTY4Km58MCkrNDc0MCsoYTw8Mik+PjJdLG89KDB8Y3Jbbz4+MF0pKyhyKzExMDk2Kyg1MTY4Km58MCkrNDg2OCl8MH1lbHNlIHY9MHxBdChlLDB8YXJbcz4+Ml0pLGFyWyhhPUErMTY0KyhjPDwyKXwwKT4+Ml09dix2PTI1NSYoMHxBdChlLDEpKSx0clsobz1BKzIyOCtjfDApPj4wXT12LGFyW3IrMzc2MjMyKyhjPDwyKT4+Ml09YXJbYT4+Ml07aWYodj0wfHRyW28+PjBdLGFyW3IrMzc2Mjk2KyhjPDwyKT4+Ml09djw8MjQ+PjI0LHQ9KHY8PDI0Pj4yNCE9MCYxKSt0fDAsdj0yNTUmKDB8QXQoZSwxKSksKHRyW0ErMjQ0K2M+PjBdPXYpPDwyND4+MjQpe2lmKG89MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzI2MCsoYzw8Mik+PjJdPW8pKSl7dD04LGg9MTg5O2JyZWFrfX1lbHNlIGFyW0ErMjYwKyhjPDwyKT4+Ml09MCxvPTA7ZG97aWYoYyl7aWYoKDB8Yyk9PSgwfGFyW2I+PjJdKSlicmVhaztvPSgwfGFyW3IrMzc2MzYwKyhjKy0xPDwyKT4+Ml0pK298MH19d2hpbGUoMCk7aWYoYXJbciszNzYzNjArKGM8PDIpPj4yXT1vLGM9YysxfDAsbz0wfGFyW2I+PjJdLCgwfGMpPj0oKDB8YXJbdT4+Ml0pK298MCkpYnJlYWsgQX1yZXR1cm4gMTg5PT0oMHxoKT8wfHQ6KGVyKHIrNHwwLDEwMjMsMCksdHJbaT4+MF09MCwodj0wKXx2KX1hcltBKzE0MD4+Ml09MCxhcltBKzE0ND4+Ml09MCx0PTB9d2hpbGUoMCk7bz0wfHRyW3IrMTEwOTYrKDUxNjgqbnwwKSs0OTAwPj4wXT8yNTUmKDB8QXQoZSwxKSk6MCx0cltBKzMyND4+MF09b31vPTB8dHJbcisxMTA5NisoNTE2OCpufDApKzQ3MDM+PjBdPyh2PTI1NSYoMHxBdChlLDEpKSx0cltBKzMyNT4+MF09diwwfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDEyPj4yXT8yNTUmKDB8QXQoZSwxKSk6MCk6dHJbQSszMjU+PjBdPTAsdHJbKHU9QSszMjZ8MCk+PjBdPW8sYXJbKGM9QSszMjh8MCk+PjJdPTAsYXJbKGw9QSszMzJ8MCk+PjJdPTA7ZG97aWYoKDB8YXJbZD4+Ml0pPj4+MDwyKXt2PTI1NSYoMHxBdChlLDEpKSx0cltBKzMyNz4+MF09djtkb3tpZih2PDwyND4+MjQpe2lmKG89MHxpdChlKSwtOTk5OTk9PSgwfChhcltjPj4yXT1vKSkpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksMHwodj04KTtpZihvPW8rMXwwLGFyW2M+PjJdPW8sMHxhcltkPj4yXSlicmVhaztpZihhPTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbbD4+Ml09YSkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7bz0wfGFyW2M+PjJdLGE9YSsxfDAsaD04NjticmVha31vPTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzY+PjBdLGFyW2M+PjJdPW8sYT0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs3Pj4wXSxoPTg2fXdoaWxlKDApO2lmKDg2PT0oMHxoKSYmKGFyW2w+PjJdPWEpLDE2PCgwfG8pKXJldHVybiAwfCh2PTgpO2lmKDE2PCgwfGFyW2w+PjJdKSlyZXR1cm4gMHwodj04KTt0PSgwfGNyW0ErOTExPj4wXSkrdHwwLGFyW0ErOTEyPj4yXT10O2Rve2lmKDE8KDB8dCkmJjAhPSgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0MTI1Pj4wXSkpe2ZvcihvPTA7KDE8PG98MCk8KDB8dCk7KW89bysxfDA7dj0yNTUmKDB8QXQoZSwxKSksdHJbQSszMzY+PjBdPXY7ZG97aWYodjw8MjQ+PjI0KXtpZighKDA8KDB8YXJbYz4+Ml0pKSlicmVhaztmb3IodD0wO3Y9MjU1JigwfEF0KGUsbykpLHRyW0ErMzM4K3Q+PjBdPXYsKDB8KHQ9dCsxfDApKTwoMHxhcltjPj4yXSk7KTt9fXdoaWxlKDApO2lmKDB8YXJbZD4+Ml0pe3RyW0ErMzM3Pj4wXT0wO2JyZWFrfWlmKHY9MjU1JigwfEF0KGUsMSkpLCEoKHRyW0ErMzM3Pj4wXT12KTw8MjQ+PjI0KSlicmVhaztpZighKDA8KDB8YXJbbD4+Ml0pKSlicmVhaztmb3IodD0wO3Y9MjU1JigwfEF0KGUsbykpLHRyW0ErMzU0K3Q+PjBdPXYsKDB8KHQ9dCsxfDApKTwoMHxhcltsPj4yXSk7KTt9ZWxzZSB0cltBKzMzNj4+MF09MCx0cltBKzMzNz4+MF09MH13aGlsZSgwKTswfGFyW2Q+PjJdfHwodj0yNTUmKDB8QXQoZSwxKSksdHJbQSszNzA+PjBdPXYpLHQ9MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrNT4+MF0/MjU1JigwfEF0KGUsMSkpOjAsdHJbQSszNzE+PjBdPXQ7ZG97aWYoMHx0cltBKzMyND4+MF0pe2Rve2lmKDB8YXJbZD4+Ml0pdHJbKG89QSszNzJ8MCk+PjBdPTEsdD0xLGg9MTA4O2Vsc2V7aWYodD0yNTUmKDB8QXQoZSwxKSksKHRyWyhvPUErMzcyfDApPj4wXT10KTw8MjQ+PjI0KXtoPTEwODticmVha31oPTE8KDB8YXJbbD4+Ml0pPzExMDoodD0wLDExMyl9fXdoaWxlKDApOzEwOD09KDB8aCkmJihoPTE8KDB8YXJbYz4+Ml0pPzExMDoxMTMpO2Rve2lmKDExMD09KDB8aCkpe2lmKGE9MHxpdChlKSwtOTk5OTk9PSgwfChhcltBKzM3Nj4+Ml09YSkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7dD0wfHRyW28+PjBdO2JyZWFrfTExMz09KDB8aCkmJihhcltBKzM3Nj4+Ml09MCxhPTApfXdoaWxlKDApO2lmKHQ8PDI0Pj4yNCl7aWYoKDB8YSk8KDB8YXJbYz4+Ml0pKWJyZWFrfWVsc2UgaWYoKDB8YSk8KDB8YXJbbD4+Ml0pKWJyZWFrO3JldHVybiBlcihyKzR8MCw4LDApLDB8KHY9OCl9fXdoaWxlKDApO2g9MCE9KDB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzI5Pj4wXSkmJjE9PSgwfGFyW2Q+PjJdKT8xMjI6MTIwO2Rve2lmKDEyMD09KDB8aCkpe2lmKCEoMHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMzA+PjBdKSlicmVhazswfGFyW2Q+PjJdfHwoaD0xMjIpfX13aGlsZSgwKTtkb3tpZigxMjI9PSgwfGgpKXtpZigwfFBhKGUsQSxyKSlicmVhaztyZXR1cm4gZXIocis0fDAsOCwwKSwwfCh2PTgpfX13aGlsZSgwKTtpZih0PTB8aXQoZSksLTk5OTk5PT0oMHwoYXJbQSs3MzY+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2FyW0ErODA0Pj4yXT01LXQ7YnJlYWt9fXdoaWxlKDApO2lmKHY9MHxmdChlKSwtOTk5OTk9PSgwfChhcltBKzc0MD4+Ml09dikpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7ZG97aWYoMHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrMjg+PjBdKXtpZih2PTB8ZnQoZSksLTk5OTk5PT0oMHwoYXJbQSs3NDQ+PjJdPXYpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKHY9MHxmdChlKSwtOTk5OTkhPSgwfChhcltBKzc0OD4+Ml09dikpKWJyZWFrO3JldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCl9YXJbQSs3NDQ+PjJdPTAsYXJbQSs3NDg+PjJdPTB9d2hpbGUoMCk7MHx0cltyKzkzNzg0Kyg0NDAwKnd8MCkrNDE0MD4+MF0mJih2PTI1NSYoMHxBdChlLDEpKSx0cltBKzc1Mj4+MF09diksdD0wfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0OD4+MF0/MjU1JigwfEF0KGUsMSkpOjAsdHJbQSs3NTM+PjBdPXQsYXJbKG89QSs3NTZ8MCk+PjJdPWFyW3IrOTM3ODQrKDQ0MDAqd3wwKSs1Mj4+Ml0sYXJbKGE9QSs3NjB8MCk+PjJdPWFyW3IrOTM3ODQrKDQ0MDAqd3wwKSs1Nj4+Ml07ZG97aWYodDw8MjQ+PjI0KXtpZih2PTI1NSYoMHxBdChlLDEpKSwodHJbQSs3NTQ+PjBdPXYpPDwyND4+MjQpYnJlYWs7aWYodD0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW28+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKGFyW28+PjJdPXQ8PDEsdD0wfGZ0KGUpLC05OTk5OT09KDB8KGFyW2E+PjJdPXQpKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2FyW2E+PjJdPXQ8PDE7YnJlYWt9dHJbQSs3NTQ+PjBdPTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzQ5Pj4wXX13aGlsZSgwKTt0PTB8dHJbcis5Mzc4NCsoNDQwMCp3fDApKzQ2Pj4wXTtBOmRve2lmKHQ8PDI0Pj4yNCl7ZG97aWYoISgwfHRyW0ErMzI1Pj4wXSkpe2lmKDB8dHJbdT4+MF0pYnJlYWs7aWYoMHx0cltBKzc1ND4+MF0pYnJlYWsgQX19d2hpbGUoMCk7dD0yNTUmKDB8QXQoZSwxKSl9ZWxzZSB0PTB9d2hpbGUoMCk7dHJbQSs3NjQ+PjBdPXR9MD09KDB8dHJbKG89cis5Mzc4NCsoNDQwMCp3fDApKzM0fDApPj4wXSkmJjA9PSgwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSszMz4+MF0pP2FyW0ErNzY4Pj4yXT0wOmg9MTU1O0E6ZG97aWYoMTU1PT0oMHxoKSl7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhiPUErNzY4fDApPj4yXT10KSkpcmV0dXJuIGVyKHIrNHwwLDEwMDcsMCksMHwodj04KTtpZigwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSszMz4+MF0mJigoKDB8YXJbZj4+Ml0pLygwfGFyW3IrMTEwOTYrKDUxNjgqbnwwKSs1MDU2Pj4yXSl8MCkrdHwwKT49KDB8YXJbcisxMTA5NisoNTE2OCpufDApKzUwNjQ+PjJdKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKDB8dHJbbz4+MF0mJigwfHQpPigwfGJyKDB8YXJbcis5Mzc4NCsoNDQwMCp3fDApKzQwPj4yXSwwfGFyW3IrOTM3ODQrKDQ0MDAqd3wwKSszNj4+Ml0pKSlyZXR1cm4gZXIocis0fDAsMTAwNywwKSwwfCh2PTgpO2lmKHU9QSs3NzZ8MCxsPTB8YXJbKG89QSs3ODB8MCk+PjJdLGM9MHxhclt1Pj4yXSx0Pj4+MDw9KGE9bC1jPj4yKT4+PjA/dD4+PjA8YT4+PjAmJigwfGwpIT0oMHwoaz1jKyh0PDwyKXwwKSkmJihhcltvPj4yXT1sKyh+KChsKy00LWt8MCk+Pj4yKTw8MikpOihWYSh1LHQtYXwwKSx0PTB8YXJbYj4+Ml0pLDA8KDB8dCkpe2lmKHQ9MHxpdChlKSwtOTk5OTk9PSgwfChhclsobD1BKzc3MnwwKT4+Ml09dCkpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7aWYobz10KzF8MCxhcltsPj4yXT1vLDMxPCgwfHQpKXJldHVybiAwfCh2PTgpO2lmKDA8KDB8YXJbYj4+Ml0pKWZvcih0PTA7Oyl7aWYobz0xKygwfEF0KGUsbykpfDAsYT0wfGFyW3U+PjJdLGFyWyhjPWErKHQ8PDIpfDApPj4yXT1vLDA8KDB8dCkmJihhcltjPj4yXT1vKygwfGFyW2ErKHQrLTE8PDIpPj4yXSkpLCgwfCh0PXQrMXwwKSk+PSgwfGFyW2I+PjJdKSlicmVhayBBO289MHxhcltsPj4yXX19fX13aGlsZSgwKTtkb3tpZigwfHRyW3IrOTM3ODQrKDQ0MDAqd3wwKSs0MTMzPj4wXSl7aWYodD0wfGl0KGUpLC05OTk5OT09KDB8KGFyWyhvPUErNzg4fDApPj4yXT10KSl8MWUzPCgwfHQpKXJldHVybiBlcihyKzR8MCwxMDA3LDApLDB8KHY9OCk7aWYoISgwPCgwfHQpKSlicmVhaztmb3IodD0wO0F0KGUsOCksKDB8KHQ9dCsxfDApKTwoMHxhcltvPj4yXSk7KTt9fXdoaWxlKDApO3N3aXRjaChhcltBKzc5Mj4+Ml09KDB8YXJbQSs3NDA+PjJdKSsoMHxhcltyKzkzNzg0Kyg0NDAwKnd8MCkrOD4+Ml0pLDB8YXJbQSsyMD4+Ml0pe2Nhc2UgMjp0PTAsaD0xODc7YnJlYWs7Y2FzZSAxOnQ9MSsoMHx0cltBKzM3MT4+MF0pfDAsaD0xODc7YnJlYWs7Y2FzZSAwOnQ9Mi0oMHx0cltBKzM3MT4+MF0pfDAsaD0xODd9cmV0dXJuIDE4Nz09KDB8aCkmJihhcltBKzc5Nj4+Ml09dCksYXJbQSs4MDQ+PjJdPTUtKDB8YXJbQSs3MzY+PjJdKSx0cltpPj4wXT0xLCh2PTApfHZ9cmV0dXJuIGVyKHIrNHwwLDEwMjAsMCksMHwodj04KX0ocyxlLEEsYiksYXJbbj4+Ml09bCwhKDB8dHJbYj4+MF0pKXJldHVybiAwfChhPTB8YXJbQSszNzYyMjQ+PjJdKSYmKHRyW2ErMTA1MTY+PjBdPTIpLEJhKEErNTQ4fDAsciksMHwoYT0wfGFyW3MrMTM0ND4+Ml0pJiYoKDB8KGM9MHxhclsoaT1zKzEzNDh8MCk+PjJdKSkhPSgwfGEpJiYoYXJbaT4+Ml09YysofigoYystNC1hfDApPj4+Mik8PDIpKSx2dShhKSksa3QocysxMzMyfDApLDB8KGE9MHxhcltzKzc3Nj4+Ml0pJiYoKDB8KGM9MHxhclsoaT1zKzc4MHwwKT4+Ml0pKSE9KDB8YSkmJihhcltpPj4yXT1jKyh+KChjKy00LWF8MCk+Pj4yKTw8MikpLHZ1KGEpKSx2dShzKSx1cj10LDB8KHM9bCk7aWYoLTE8KDB8KGE9MHxhcltBKzUyOD4+Ml0pKSYmZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTAsQUE9MCxlQT0wLHJBPTAsaUE9MDtzd2l0Y2godXI9KEQ9dXIpKzQ0OHwwLFE9RCs0MzJ8MCxpQT1EKzQyNHwwLFk9RCs0MTZ8MCxOPUQrNDA4fDAsUj1EKzQwMHwwLEY9RCszOTJ8MCxWPUQrMzg0fDAsckE9RCszNzZ8MCxJPUQrMzY4fDAsVz1EKzM2MHwwLFg9RCszNTJ8MCxFPUQrMzQ0fDAsQj1EKzMyOHwwLHk9RCszMTJ8MCxwPUQrMjk2fDAsWj1EKzI4MHwwLEc9RCsyNjR8MCxDPUQrMjQ4fDAsZUE9RCsyNDB8MCxtPUQrMjMyfDAsdj1EKzIyNHwwLHc9RCsyMTZ8MCxoPUQrMjA4fDAsaz1EKzIwMHwwLGQ9RCsxOTJ8MCwkPUQrMTg0fDAscT1EKzE3NnwwLEs9RCsxNjh8MCxMPUQrMTYwfDAsUD1EKzE1MnwwLHg9RCsxNDR8MCxiPUQrMTM2fDAsdT1EKzEyOHwwLGw9RCsxMjB8MCxjPUQrMTEyfDAsYT1EKzEwNHwwLG89RCs5NnwwLEg9RCs4OHwwLHQ9RCs4MHwwLGo9RCs3MnwwLG49RCs2NHwwLGY9RCs1NnwwLGk9RCs0OHwwLFU9RCs0MHwwLHo9RCszMnwwLE89RCsyNHwwLFM9RCsxNnwwLFQ9RCs4fDAsSj1ELDB8KHJ8PTApKXtjYXNlIDE6cj0xMDE3MjticmVhaztjYXNlIDI6cj0xMDY3NjticmVhaztkZWZhdWx0OnJldHVybiB1cj1EfV89MHxhcltyPj4yXSxnPTB8YXJbKE09QSs4fDApPj4yXSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKT4+MF18fHNyKDM5Njk4LDM5MjQyLDEyNzgsMzk3MTIpO3M9MHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMj4+MF0sMHx0cltlKzExMDk2Kyg1MTY4KnN8MCk+PjBdfHxzcigzOTczOCwzOTI0MiwxMjgxLDM5NzEyKTtQbihfLDM5NzUyLEopLHI9QSs0fDAsYXJbVD4+Ml09dHJbcj4+MF0sUG4oXywzOTc5NSxUKSwoLTgmdHJbKEo9ZSszNzcyMTJ8MCk+PjBdKTw8MjQ+PjI0PT0xNiYmKGFyW1M+PjJdPXRyW0ErNT4+MF0sUG4oXywzOTgzOCxTKSk7YXJbTz4+Ml09YXJbTT4+Ml0sUG4oXywzOTg4MSxPKSwwfHRyW3I+PjBdfHwoYXJbej4+Ml09dHJbQSsxMj4+MF0sUG4oXywzOTkyNCx6KSxhcltVPj4yXT1hcltBKzE2Pj4yXSxQbihfLDM5OTY3LFUpKTt6PTB8YXJbKE89QSsyMHwwKT4+Ml0sYXJbaT4+Ml09MD09KDB8eik/NjY6MT09KDB8eik/ODA6NzMsUG4oXyw0MDAxMCxpKSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSszMT4+MF0mJihhcltmPj4yXT10cltBKzI0Pj4wXSxQbihfLDQwMDUzLGYpKTsxPT0oMHx0cltlKzExMDk2Kyg1MTY4KnN8MCkrNDgwPj4wXSkmJihhcltuPj4yXT10cltBKzI1Pj4wXSxQbihfLDQwMDk2LG4pKTthcltqPj4yXT1hcltBKzI4Pj4yXSxQbihfLDQwMTM5LGopLDI8PSgoMHx0cltKPj4wXSktMTkmMjU1KSYmKGo9QSszMnwwLGFyW3Q+PjJdPXRyW2o+PjBdLFBuKF8sNDAxODIsdCkscj1lKzExMDk2Kyg1MTY4KnN8MCkrNDcyMHwwLEo9KDB8YXJbZSsxMTA5NisoNTE2OCpzfDApKzQ3MjQ+PjJdKS0oMHxhcltyPj4yXSl8MCwwfHRyW2o+PjBdPzEwMDwoMHxKKSYmKEg9QSsxMzZ8MCxhcltvPj4yXT1hcltIPj4yXSxQbihfLDQwMjI1LG8pLHBjKCgwfGFyW3I+PjJdKSsoMTAwKigwfGFyW0g+PjJdKXwwKXwwLDE2LF8pKTooYXJbSD4+Ml09KDB8SikvMTAwfDAsUG4oXyw0MzM2NyxIKSxwYyhBKzM0fDAsMTYsXykpLDB8dHJbZSsxMTA5NisoNTE2OCpzfDApKzQ3MzI+PjBdJiYoMDwoMHxhcltlKzExMDk2Kyg1MTY4KnN8MCkrNDczNj4+Ml0pJiYoYXJbYT4+Ml09YXJbQSsxNDA+PjJdLFBuKF8sNDAyNjgsYSkpLGFyW2M+PjJdPWFyW0ErMTQ0Pj4yXSxQbihfLDQwMzE1LGMpKSwwfHRyW2UrMTEwOTYrKDUxNjgqc3wwKSs0OTAwPj4wXSYmKGFyW2w+PjJdPXRyW0ErMzI0Pj4wXSxQbihfLDQwMzYyLGwpKSk7MHx0cltlKzExMDk2Kyg1MTY4KnN8MCkrNDcwMz4+MF0mJihhclt1Pj4yXT10cltBKzMyNT4+MF0sUG4oXyw0MDQwMCx1KSxhcltiPj4yXT10cltBKzMyNj4+MF0sUG4oXyw0MDQzOCxiKSk7aWYoKDB8YXJbTz4+Ml0pPj4+MDwyKXtpZihyPUErMzI3fDAsYXJbeD4+Ml09dHJbcj4+MF0sUG4oXyw0MDQ3Nix4KSxTPUErMzI4fDAseD0wfHRyW3I+PjBdPzc5NjU5OjQwNTE1LGFyW1A+PjJdPWFyW1M+PjJdLGFyW1ArND4+Ml09eCxQbihfLDQwNTI2LFApLDB8YXJbTz4+Ml18fChQPTB8dHJbcj4+MF0/Nzk2NTk6NDA1MTUsYXJbTD4+Ml09YXJbQSszMzI+PjJdLGFyW0wrND4+Ml09UCxQbihfLDQwNTY2LEwpKSwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSs0MTI1Pj4wXSYmMTwoMHxhcltBKzkxMj4+Ml0pKXtpZihMPUErMzM2fDAsYXJbSz4+Ml09dHJbTD4+MF0sUG4oXyw0MDYwNixLKSwwfHRyW0w+PjBdJiYwPCgwfGFyW1M+PjJdKSlmb3Iocj0wO0s9MHxjcltBKzMzOCtyPj4wXSxhcltxPj4yXT1yLGFyW3ErND4+Ml09SyxQbihfLDQwNjQ2LHEpLCgwfChyPXIrMXwwKSk8KDB8YXJbUz4+Ml0pOyk7aWYocT1BKzMzN3wwLGFyWyQ+PjJdPXRyW3E+PjBdLFBuKF8sNDA2NTYsJCksMHx0cltxPj4wXSYmMDwoMHxhclsoQUE9QSszMzJ8MCk+PjJdKSlmb3Iocj0wOyQ9MHxjcltBKzM1NCtyPj4wXSxhcltkPj4yXT1yLGFyWzQrZD4+Ml09JCxQbihfLDQwNjQ2LGQpLCgwfChyPXIrMXwwKSk8KDB8YXJbQUE+PjJdKTspO30wfGFyW08+PjJdfHwoYXJbaz4+Ml09dHJbQSszNzA+PjBdLFBuKF8sNDA2OTYsaykpLGFyW2g+PjJdPXRyW0ErMzcxPj4wXSxQbihfLDQwNzMzLGgpLDB8dHJbQSszMjQ+PjBdJiYoYXJbdz4+Ml09dHJbQSszNzI+PjBdLFBuKF8sNDA3NzAsdyksYXJbdj4+Ml09YXJbQSszNzY+PjJdLFBuKF8sNDA4MDcsdikpLDQ1PT0oMHwoVT0wIT0oMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMjk+PjBdKSYmMT09KDB8YXJbTz4+Ml0pPzQ3OjQ1KSkmJjB8dHJbZSs5Mzc4NCsoNDQwMCpnfDApKzMwPj4wXSYmMD09KDB8YXJbTz4+Ml0pJiYoVT00Nyk7QTpkb3tpZig0Nz09KDB8VSkpe2FyW20+PjJdPWNyW0ErMzgwPj4wXSxQbihfLDQwODQ0LG0pLDB8YXJbZSsxMTA5NisoNTE2OCpzfDApKzQ3Nj4+Ml0mJihhcltlQT4+Ml09Y3JbQSszODE+PjBdLFBuKF8sNDA4ODEsZUEpKSxUPUErMzMyfDAsTT0wO2Rve3I9MD09KDB8TSk7ZG97aWYocilVPTUzO2Vsc2V7aWYoMSE9KDB8TSkpYnJlYWs7aWYoMHxhcltPPj4yXSlicmVhayBBO1U9NTN9fXdoaWxlKDApO2Rve2lmKDUzPT0oMHxVKSl7aWYoISgoVT0wKTwoMHwoSj0wfGFyWyhyP1M6VCk+PjJdKSkpKWJyZWFrO2ZvcihyPTA7ZUE9MHxvcltBKzQ0NisoTTw8NSkrKHI8PDEpPj4xXSxhcltDPj4yXT1NLGFyWzQrQz4+Ml09cixhcls4K0M+PjJdPWVBLFBuKF8sNDA5MTgsQyksZUE9MHx0cltBKzUxMCsoTTw8NCkrcj4+MF0sYXJbRz4+Ml09TSxhcls0K0c+PjJdPXIsYXJbOCtHPj4yXT1lQSxQbihfLDQwOTU1LEcpLGVBPTB8b3JbQSs1NDIrKE08PDYpKyhyPDwyKT4+MV0sYXJbWj4+Ml09TSxhcls0K1o+PjJdPXIsYXJbOCtaPj4yXT0wLGFyWzEyK1o+PjJdPWVBLFBuKF8sNDA5OTIsWiksZUE9MHx0cltBKzY3MCsoTTw8NSkrKHI8PDEpPj4wXSxhcltwPj4yXT1NLGFyWzQrcD4+Ml09cixhcls4K3A+PjJdPTAsYXJbMTIrcD4+Ml09ZUEsUG4oXyw0MTAzMCxwKSxlQT0wfG9yW0ErNTQyKyhNPDw2KSsocjw8MikrMj4+MV0sYXJbeT4+Ml09TSxhcls0K3k+PjJdPXIsYXJbOCt5Pj4yXT0xLGFyWzEyK3k+PjJdPWVBLFBuKF8sNDA5OTIseSksZUE9MHx0cltBKzY3MCsoTTw8NSkrKHI8PDEpKzE+PjBdLGFyW0I+PjJdPU0sYXJbNCtCPj4yXT1yLGFyWzgrQj4+Ml09MSxhclsxMitCPj4yXT1lQSxQbihfLDQxMDMwLEIpLCgwfChyPXIrMXwwKSkhPSgwfEopOyk7fX13aGlsZSgwKTtNPU0rMXwwfXdoaWxlKDIhPSgwfE0pKX19d2hpbGUoMCk7YXJbRT4+Ml09YXJbQSs3MzY+PjJdLFBuKF8sNDEwNjgsRSl9YXJbWD4+Ml09YXJbQSs3NDA+PjJdLFBuKF8sNDExMDUsWCksMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMjg+PjBdJiYoYXJbVz4+Ml09YXJbQSs3NDQ+PjJdLFBuKF8sNDExMzQsVyksYXJbST4+Ml09YXJbQSs3NDg+PjJdLFBuKF8sNDExNjMsSSkpO0o9QSs3NTN8MCwwfHRyW2UrOTM3ODQrKDQ0MDAqZ3wwKSs0OD4+MF0mJihhcltyQT4+Ml09dHJbSj4+MF0sUG4oXyw0MTE5MixyQSkpO3I9QSs3NTR8MCxyQT0wfHRyW0o+PjBdPzQxMjMwOjQxMjQxLGFyW1Y+PjJdPXRyW3I+PjBdLGFyWzQrVj4+Ml09ckEsUG4oXyw0MTI1MixWKSwwfHRyW0o+PjBdJiYwPT0oMHx0cltyPj4wXSkmJihhcltGPj4yXT1hcltBKzc1Nj4+Ml0sUG4oXyw0MTI5OSxGKSxhcltSPj4yXT1hcltBKzc2MD4+Ml0sUG4oXyw0MTMyNCxSKSk7ZG97aWYoMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrNDY+PjBdKXtpZigwPT0oMHx0cltBKzMyNT4+MF0pJiYwPT0oMHx0cltBKzMyNj4+MF0pJiYwfHRyW3I+PjBdKWJyZWFrO2FyW04+PjJdPXRyW0ErNzY0Pj4wXSxQbihfLDQxMzQ5LE4pfX13aGlsZSgwKTtpZigwPT0oMHx0cltlKzkzNzg0Kyg0NDAwKmd8MCkrMzQ+PjBdKSYmMD09KDB8dHJbZSs5Mzc4NCsoNDQwMCpnfDApKzMzPj4wXSkpcmV0dXJuIHVyPUQ7aWYoTT1BKzc2OHwwLGFyW1k+PjJdPWFyW00+PjJdLFBuKF8sNDE0MDAsWSksKDB8YXJbTT4+Ml0pPD0wKXJldHVybiB1cj1EO2lmKGFyW2lBPj4yXT1hcltBKzc3Mj4+Ml0sUG4oXyw0MTQzMyxpQSksKDB8YXJbTT4+Ml0pPD0wKXJldHVybiB1cj1EO0o9QSs3NzZ8MCxyPTA7Zm9yKDtpQT0wfGFyWygwfGFyW0o+PjJdKSsocjw8Mik+PjJdLGFyW1E+PjJdPXIsYXJbNCtRPj4yXT1pQSxQbihfLDQxNDY2LFEpLHI9cisxfDAsKDB8cik8KDB8YXJbTT4+Ml0pOyk7dXI9RH0ocyxBLGEpLHU9MHxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wO3VyPShjPXVyKSsxNnwwLGw9YyxhclsoaXw9MCk+PjJdPTAsdHJbQSszNzcyMjg+PjBdPTAsdT0wfGFyW3IrOD4+Ml0sMHx0clsoYj1lKzkzNzg0Kyg0NDAwKnV8MCl8MCk+PjBdfHwoYXJbbD4+Ml09dSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuO2lmKHVyPShuPXVyKSsxNnwwLGk9biwhKC05OTk5PD0oMHxhclsxNDM5MV0pJiEwKSlyZXR1cm4gdXI9bjtmPTQyPT0oMHx0cltlPj4wXSksQT0wfGFyWzI1NDNdLGZ8fFVpKDQ0NDk5LDUsMSxBKTthcltpPj4yXT1yLFFjKEEsZSsoMSZmKXwwLGkpLE9pKEEpLHVyPW59KDEsMzQ4ODksbCksc3IoNTU3MzksMzQ3MDAsMTk4NywzNDkxNSkpO2lmKGFyWyhzPWUrMzc1MzkyfDApPj4yXT1iLGQ9MHx0cltlKzkzNzg0Kyg0NDAwKnV8MCkrMj4+MF0sYXJbKGw9ZSszNzUzODh8MCk+PjJdPWUrMTEwOTYrKDUxNjgqZHwwKSxhclsoYT1lKzM3NTM4NHwwKT4+Ml09ZSs2MDArKDY1NiooMHx0cltlKzExMDk2Kyg1MTY4KmR8MCkrMT4+MF0pfDApLGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MDtyPTB8YXJbMzc1Mzg4KyhBfD0wKT4+Ml0sZT0oaT0wPT0oMHxyKSk/KGU9MHxhcltBKzM3NTM4ND4+Ml0pPygwfGFyW2UrOD4+Ml0pLTF8MDo2OigwfHRyW3IrMj4+MF0pLTF8MDtkb3tpZigoMHx0cltBKzM3NjExNj4+MF0pIT0oMHxlKSl7aWYoaT8oZT0wfGFyW0ErMzc1Mzg0Pj4yXSk/KGU9MHxhcltlKzg+PjJdLGY9MTApOmU9NjooZT0wfHRyW3IrMj4+MF0sZj0xMCksMTA9PSgwfGYpKXtpZighKDA8KDB8ZSkpKWJyZWFrO2U9ZSstMXwwfWZvcih0PWUrMXwwLG89QSszNzU4OTZ8MDs7KXtpZigoMHwoaT0oMHwobj0xMDAqZXwwKSkvKDB8dCl8MCkpPD0oMHwobj0obisxMDB8MCkvKDB8dCl8MCkpKWZvcihmPW4taXwwLHI9aTtjPTB8YXJbbz4+Ml0sZT0oYT0oMHxjKTwoMHxlKSk/YzplLHRyW0ErMzc1OTE2KyhyPDwxKT4+MF09ZSx0cltBKzM3NTkxNisocjw8MSkrMT4+MF09YT8xMDA6MjU1JigoMTAwKihyLWl8MCl8MCkvKDB8Zil8MCksKDB8cik8KDB8bik7KXI9cisxfDA7aWYoYXJbQSszNzYxMjArKGU8PDIpPj4yXT1uLCEoMDwoMHxlKSkpYnJlYWs7ZT1lKy0xfDB9fX13aGlsZSgwKTthPTB8YXJbQSszNzU5MDA+PjJdLGM9MHx0cltBKzM3NTkxNisoYTw8MSk+PjBdLGFyW0ErMzc1OTA0Pj4yXT1jLGFyW0ErMzc1OTA4Pj4yXT10cltBKzM3NTkxNisoYTw8MSkrMT4+MF0sYXJbQSszNzU5MTI+PjJdPWN9KEEpLDB8dHJbKGQ9cis0fDApPj4wXSl7aWYoYXJbZSszNzYyMDQ+PjJdPWFyW3IrMjg+PjJdLGw9MHxhcltsPj4yXSx1PTB8dHJbbCs0NzAzPj4wXT8wIT0oMHx0cltlKzUzMz4+MF0pOjEsLTE9PSgwfCh1PTB8aWEoZSszNzYxNDh8MCxsLEEsZixuLG8sdSkpKSlyZXR1cm4gYXJbaT4+Ml09OSx1cj1jLChyPTApfHI7bD0wfGFyW2UrMzc2MTU2Pj4yXSx1PSgwfGFyW2UrMzc2MTYwPj4yXSktbD4+Mj4+PjA+dT4+PjA/MHxhcltsKyh1PDwyKT4+Ml06MCx0clsoYj11KzEwNTE4fDApPj4wXT0wfHRyW3Q+PjBdLHRyW2IrMT4+MF09MHx0clt0KzE+PjBdLHRyW2IrMj4+MF09MHx0clt0KzI+PjBdLGFyWyhiPWUrMzc2MjI0fDApPj4yXT11LGw9MHxhclthPj4yXSxoYigwfCh0PXUrMTA4fDApLDB8bCw1OTIpLCgwfHQpPT0oMHxsKT8oaT1sKzYwNHwwLGFyWyh0PXUrNzEyfDApPj4yXT1hcltpPj4yXSxhclt0KzQ+PjJdPWFyW2krND4+Ml0sYXJbdCs4Pj4yXT1hcltpKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2krMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2krMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2krMjA+PjJdKTooamUodSs3MDB8MCwwfGFyW2wrNTkyPj4yXSwwfGFyW2wrNTk2Pj4yXSksaT1sKzYwNHwwLGFyWyh0PXUrNzEyfDApPj4yXT1hcltpPj4yXSxhclt0KzQ+PjJdPWFyW2krND4+Ml0sYXJbdCs4Pj4yXT1hcltpKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2krMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2krMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2krMjA+PjJdLEhlKHUrNzM2fDAsMHxhcltsKzYyOD4+Ml0sMHxhcltsKzYzMj4+Ml0pLHhlKHUrNzQ4fDAsMHxhcltsKzY0MD4+Ml0sMHxhcltsKzY0ND4+Ml0pKSx0clt1Kzc2MD4+MF09MHx0cltsKzY1Mj4+MF0sbD0wfGFyW3M+PjJdLGhiKDB8KHM9dSs1OTMyfDApLDB8bCw0MzQwKSwoMHxzKSE9KDB8bCkmJigkZSh1KzEwMjcyfDAsMHxhcltsKzQzNDA+PjJdLDB8YXJbbCs0MzQ0Pj4yXSksJGUodSsxMDI4NHwwLDB8YXJbbCs0MzUyPj4yXSwwfGFyW2wrNDM1Nj4+Ml0pLCRlKHUrMTAyOTZ8MCwwfGFyW2wrNDM2ND4+Ml0sMHxhcltsKzQzNjg+PjJdKSwkZSh1KzEwMzA4fDAsMHxhcltsKzQzNzY+PjJdLDB8YXJbbCs0MzgwPj4yXSksJGUodSsxMDMyMHwwLDB8YXJbbCs0Mzg4Pj4yXSwwfGFyW2wrNDM5Mj4+Ml0pKSxhclt1KzEwMzMyPj4yXT1lLGZ1bmN0aW9uKEEpe3ZhciBlLHI9MDswfChyPTB8YXJbMTAzNjArKEF8PTApPj4yXSkmJnZiKDB8ciwwLDMqKDB8YXJbQSsxMDM2ND4+Ml0pfDApOzB8KHI9MHxhcltBKzEwMzQwPj4yXSkmJnZiKDB8ciwwLDI0KigwfGFyW0ErMTAzNDQ+PjJdKXwwKTswfChyPTB8YXJbQSsxMDQ2MD4+Ml0pJiZ2YigwfHIsMCwwfGFyW0ErMTA0NjQ+PjJdKTtpZigoMHwoZT0wfGFyW0ErMTAzNDQ+PjJdKSk8PTApcmV0dXJuO0E9MHxhcltBKzEwNTI0Pj4yXSxyPTA7Zm9yKDthcltBKyg4MCpyfDApPj4yXT0wLHI9cisxfDAsKDB8cik8KDB8ZSk7KTt9KHUpLGw9ZSszNzcyMTJ8MDtkb3tpZigwfG1hKDB8dHJbbD4+MF0pKXtpZighKDB8aGEoMHx0cltsPj4wXSl8fDB8d2EoMHx0cltsPj4wXSl8fDAhPSgwfHRyW2UrMzc2MjA4Pj4wXSkpJiYwPT0oMHx0cltlKzM3NjIxMT4+MF0pKXt0cltlKzM3NjIwOT4+MF09MCx0cltlKzM3NjIxMD4+MF09MDticmVha310cltlKzM3NjIwOT4+MF09MSx0cltlKzM3NjIxMT4+MF09MH19d2hpbGUoMCk7MHx2YSgwfHRyW2w+PjBdKSYmMCE9KDB8dHJbZSszNzYyMDk+PjBdKT90clsxMDArKDB8YXJbYj4+Ml0pPj4wXT0wOnRyWzEwMCsoMHxhcltiPj4yXSk+PjBdPTAhPSgwfHRyW3IrMjQ+PjBdKSYxLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7MHxtYSgwfHRyWyhpPTM3NzIxMisoZXw9MCl8MCk+PjBdKSYmMCE9KDB8dHJbZSszNzYyMDk+PjBdKT8oYXJbKG49ZSszNzYyMTJ8MCk+PjJdPTAsdHJbQSszNzcyMjg+PjBdPTEsQT1yKzI4fDAsQT0ocj0wKXxhclsoZj1BKT4+Ml0pOihuPTB8YXJbNTAzMisoMHxhcltlKzM3NTM4OD4+Ml0pPj4yXSxBPTB8YXJbKHQ9cisyOHwwKT4+Ml0sZj0wfGFyW2UrMzc2MjE2Pj4yXSxyPTB8YXJbZSszNzYyMjA+PjJdLCgwfEEpPCgwfGYpJiYoKDB8bikvMnwwKTw9KGYtQXwwKT9yPXIrbnwwOigwfGYpPCgwfEEpJiYocj1yLSgoKDB8bikvMnwwKTwoQS1mfDApP246MCl8MCksYXJbKG49ZSszNzYyMTJ8MCk+PjJdPXIsZj10KTtpZih0PTB8YXJbZSszNzYyMjQ+PjJdLGFyW3QrOTI+PjJdPUErcixhclt0Kzg4Pj4yXT1BLDB8dHJbdCsxMDUyMD4+MF0pcmV0dXJuO2lmKDB8ZnVuY3Rpb24oQSl7cmV0dXJuKDI1NSYoQXw9MCkpPDE1PzA9PSgxJkEpfDA6MH0oMHx0cltpPj4wXSkpcmV0dXJuO2lmKDB8dmEoMHx0cltpPj4wXSkpcmV0dXJuO2lmKDB8ZnVuY3Rpb24oQSl7cmV0dXJuKDF8KEF8PTApKTw8MjQ+PjI0PT03fDB9KDB8dHJbaT4+MF0pKXJldHVybjthcltlKzM3NjIxNj4+Ml09YXJbZj4+Ml0sYXJbZSszNzYyMjA+PjJdPWFyW24+PjJdfShBLGUsciksbD11Kzk2fDAsMHx0cltkPj4wXSYmKGFyW2w+PjJdPTEsZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO2lmKHVyPShjPXVyKSszMnwwLHQ9Yys0fDAsYXJbKG89KGY9YykrMTZ8MCk+PjJdPTAsYXJbKGE9NCtvfDApPj4yXT0wLGFyWzgrbz4+Ml09MCxpPTB8YXJbYXJbKG49ZSszNzYyMjR8MCk+PjJdPj4yXSwwfG1hKDB8dHJbKGg9ZSszNzcyMTJ8MCk+PjBdKSYmMHx0cltlKzM3NjIwOT4+MF0mJih1PTB8YXJbbj4+Ml0sdz0wfGFyW3UrOTI+PjJdLHY9QSszNzYxNTZ8MCxiPTB8YXJbKG09QSszNzYxNjB8MCk+PjJdLGw9MHxhclt2Pj4yXSwwPChiLWx8MCkpKWZvcihnPWUrMzc2MTU2fDAsWj1lKzM3NjE2MHwwLHA9OCtvfDAsaz0wLGQ9YjtiPTB8YXJbZz4+Ml0sYj0oMHxhcltaPj4yXSktYj4+Mj4+PjA+az4+PjA/MHxhcltiKyhrPDwyKT4+Ml06MCwwIT0oMHxhcltiKzk2Pj4yXSkmJigwfGFyW2IrOTI+PjJdKTwoMHx3KSYmKDB8YXJbKHk9YisxMDR8MCk+PjJdKT4+PjA+KDB8YXJbdT4+Ml0pPj4+MD8oYj0wfGFyW2I+PjJdLGFyW3Q+PjJdPWIsKHM9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3A+PjJdKT4+PjA/KGFyW3M+PjJdPWIsYXJbYT4+Ml09cys0LGI9ZCk6KE1vKG8sdCksYj0wfGFyW20+PjJdLGw9MHxhclt2Pj4yXSx1PTB8YXJbbj4+Ml0pLGFyW3k+PjJdPWFyW3U+PjJdKTpiPWQsISgoYi1sPj4yfDApPD0oMHwoaz1rKzF8MCkpKTspZD1iO2lmKDB8aGEoMHx0cltoPj4wXSkpYXJbZSszNzY1NTI+PjJdPTAsYXJbZSszNzY1NTY+PjJdPTAsYXJbZSszNzY1NjA+PjJdPTAsdT1sPTA7ZWxzZXtpZigobD0wfHRyW3IrOTA4Pj4wXSk8PDI0Pj4yNClmb3Ioaz0yNTUmbCxkPXM9Yj0wO3k9MD09KDB8dHJbcis4NzYrYj4+MF0pLGw9KDEmeSkrZHwwLHU9KDEmKDFeeSkpK3N8MCxhclsoeT9lKzM3NjcwMCsoZDw8Mil8MDplKzM3NjU3Misoczw8Mil8MCk+PjJdPSgwfG9yW3IrODEyKyhiPDwxKT4+MV0pKygwfGFyWzkyKygwfGFyW24+PjJdKT4+Ml0pLCEoKDB8ayk8PSgwfChiPWIrMXwwKSkpOylzPXUsZD1sO2Vsc2UgbD11PTA7aWYoYXJbZSszNzY1NTI+PjJdPXUsKHU9MHx0cltyKzkwOT4+MF0pPDwyND4+MjQpZm9yKGs9MjU1JnUscz1iPTA7Oyl7aWYoeT0wPT0oMHx0cltyKzg5MitiPj4wXSksZD0oMSZ5KStsfDAsdT0oMSYoMV55KSkrc3wwLGFyWyh5P2UrMzc2NzAwKyhsPDwyKXwwOmUrMzc2NjM2KyhzPDwyKXwwKT4+Ml09KDB8b3Jbcis4NDQrKGI8PDEpPj4xXSkrKDB8YXJbOTIrKDB8YXJbbj4+Ml0pPj4yXSksKDB8ayk8PSgwfChiPWIrMXwwKSkpe2w9ZDticmVha31zPXUsbD1kfWVsc2UgdT0wO2lmKGFyW2UrMzc2NTU2Pj4yXT11LGFyW2UrMzc2NTYwPj4yXT1sLGs9cisxNDB8MCwwPCgoMHxhclsoaD1yKzE0NHwwKT4+Ml0pKygwfGFyW2s+PjJdKXwwKSlmb3Iodz1yKzI4fDAsdj1lKzM3NTM4OHwwLHU9bD1kPTA7Yj0wfGFyW2UrMzc2MjMyKyhkPDwyKT4+Ml0sMHx0clsocz1yKzI0NCtkfDApPj4wXSYmKGI9KDB8YXJbOTIrKDB8YXJbbj4+Ml0pPj4yXSkrYi0oMHxhclt3Pj4yXSktKDB8YnIoMHxhcls1MDMyKygwfGFyW3Y+PjJdKT4+Ml0sMHxhcltlKzM3NjM2MCsoZDw8Mik+PjJdKSl8MCksMHxhcltlKzM3NjI5NisoZDw8Mik+PjJdPyhhcltlKzM3Njc2NCsobDw8Mik+PjJdPWIsYXJbZSszNzY0MjQrKGw8PDIpPj4yXT10cltzPj4wXSxsPWwrMXwwKTooYXJbZSszNzY4MjgrKHU8PDIpPj4yXT1iLGFyW2UrMzc2NDg4Kyh1PDwyKT4+Ml09dHJbcz4+MF0sdT11KzF8MCksKDB8KGQ9ZCsxfDApKTwoKDB8YXJbaD4+Ml0pKygwfGFyW2s+PjJdKXwwKTspO2Vsc2UgdT1sPTB9YXJbKHY9ZSszNzY1NjR8MCk+PjJdPWwsYXJbKHc9ZSszNzY1Njh8MCk+PjJdPXUsbT1BKzM3NjE1NnwwLGw9KDB8YXJbKGc9QSszNzYxNjB8MCk+PjJdKS0oMHxhclttPj4yXSl8MCx1PWw+PjIsYXJbdD4+Ml09MCxhclsoYj00K3R8MCk+PjJdPTAsYXJbKHM9OCt0fDApPj4yXT0wLDB8dSYmKCgwfGwpPDAmJnpsKCkscD0wfGh1KCh5PTErKCh1Ky0xfDApPj4+NSl8MCk8PDIpLGFyW3Q+PjJdPXAsYXJbcz4+Ml09eSxhcltiPj4yXT11LHZiKDB8cCwwLCh5PXU+Pj41KTw8MnwwKSxsPXUtKHk8PDUpfDAsdT1wKyh5PDwyKXwwLDB8bCYmKGFyW3U+PjJdPWFyW3U+PjJdJn4oLTE+Pj4oMzItbHwwKSkpKTtpZigwPCgwfChsPTB8YXJbdj4+Ml0pKSlmb3IoZD1lKzM3NjE0OHwwLGs9ZSszNzYxNTZ8MCxoPWUrMzc1Mzg4fDAscz0wO2w9MHxhclsoYj1lKzM3Njc2NCsoczw8Mil8MCk+PjJdLGw9MHxhcltlKzM3NjQyNCsoczw8Mik+PjJdPzB8S28oZCxsLGksMSk6MHxxbyhkLGwsaSwxKSwoMHwoYXJbKHU9ZSszNzcwODQrKHM8PDIpfDApPj4yXT1sKSk8PS0xJiYobD0wfFRvKEEsZSwwfGFyW2g+PjJdLDB8YXJbYj4+Ml0sMSksYXJbdT4+Ml09bCkseT0oMHxhclt0Pj4yXSkrKGw+Pj41PDwyKXwwLGFyW3k+PjJdPWFyW3k+PjJdfDE8PCgzMSZsKSwwfHRyWzEwNTE2KygwfGFyWygwfGFyW2s+PjJdKSsobDw8Mik+PjJdKT4+MF0mJih0clsxMDUxNisoMHxhcltuPj4yXSk+PjBdPTQpLHM9cysxfDAsbD0wfGFyW3Y+PjJdLCgwfHMpPCgwfGwpOyk7aWYoMDwoMHwodT0wfGFyW3c+PjJdKSkpe2ZvcihrPWUrMzc2MTQ4fDAsaD1lKzM3NTM4OHwwLGQ9MDtsPTB8YXJbKGI9ZSszNzY4MjgrKGQ8PDIpfDApPj4yXSxsPTB8YXJbZSszNzY0ODgrKGQ8PDIpPj4yXT8wfEtvKGssbCxpLDEpOjB8cW8oayxsLGksMSksKDB8KGFyWyh1PWUrMzc3MTQ4KyhkPDwyKXwwKT4+Ml09bCkpPD0tMSYmKGw9MHxUbyhBLGUsMHxhcltoPj4yXSwwfGFyW2I+PjJdLDEpLGFyW3U+PjJdPWwpLHM9KDB8YXJbdD4+Ml0pKyhsPj4+NTw8Mil8MCxhcltzPj4yXT1hcltzPj4yXXwxPDwoMzEmbCksZD1kKzF8MCxzPTB8YXJbdz4+Ml0sKDB8ZCk8KDB8cyk7KTtsPTB8YXJbdj4+Ml19ZWxzZSBzPXU7aWYoMDwoMHxsKSlmb3IoYj0wfGFyW2UrMzc2MTU2Pj4yXSx1PTA7YXJbOTYrKDB8YXJbYisoYXJbZSszNzcwODQrKHU8PDIpPj4yXTw8Mik+PjJdKT4+Ml09MiwoMHwodT11KzF8MCkpPCgwfGwpOyk7aWYoMDwoMHxzKSlmb3IodT0wfGFyW2UrMzc2MTU2Pj4yXSxsPTA7YXJbOTYrKDB8YXJbdSsoYXJbZSszNzcxNDgrKGw8PDIpPj4yXTw8Mik+PjJdKT4+Ml09MiwoMHwobD1sKzF8MCkpPCgwfHMpOyk7aWYoMDwoMHxhclsoZD1lKzM3NjU1MnwwKT4+Ml0pKWZvcihrPWUrMzc2MTQ4fDAsaD1lKzM3NjE1NnwwLHc9ZSszNzUzODh8MCxzPTA7bD0wfEtvKGssMHxhclsodT1lKzM3NjU3Misoczw8Mil8MCk+PjJdLGksMCksKDB8KGFyWyhiPWUrMzc2ODkyKyhzPDwyKXwwKT4+Ml09bCkpPD0tMSYmKGw9MHxUbyhBLGUsMHxhclt3Pj4yXSwwfGFyW3U+PjJdLDApLGFyW2I+PjJdPWwpLHk9KDB8YXJbdD4+Ml0pKyhsPj4+NTw8Mil8MCxhclt5Pj4yXT1hclt5Pj4yXXwxPDwoMzEmbCksMHx0clsxMDUxNisoMHxhclsoMHxhcltoPj4yXSkrKGw8PDIpPj4yXSk+PjBdJiYodHJbMTA1MTYrKDB8YXJbbj4+Ml0pPj4wXT00KSwoMHwocz1zKzF8MCkpPCgwfGFyW2Q+PjJdKTspO2lmKDA8KDB8YXJbKGQ9ZSszNzY1NTZ8MCk+PjJdKSlmb3Ioaz1lKzM3NjE0OHwwLGg9ZSszNzYxNTZ8MCx3PWUrMzc1Mzg4fDAscz0wO2w9MHxLbyhrLDB8YXJbKHU9ZSszNzY2MzYrKHM8PDIpfDApPj4yXSxpLDApLCgwfChhclsoYj1lKzM3Njk1Nisoczw8Mil8MCk+PjJdPWwpKTw9LTEmJihsPTB8VG8oQSxlLDB8YXJbdz4+Ml0sMHxhclt1Pj4yXSwwKSxhcltiPj4yXT1sKSx5PSgwfGFyW3Q+PjJdKSsobD4+PjU8PDIpfDAsYXJbeT4+Ml09YXJbeT4+Ml18MTw8KDMxJmwpLDB8dHJbMTA1MTYrKDB8YXJbKDB8YXJbaD4+Ml0pKyhsPDwyKT4+Ml0pPj4wXSYmKHRyWzEwNTE2KygwfGFyW24+PjJdKT4+MF09NCksKDB8KHM9cysxfDApKTwoMHxhcltkPj4yXSk7KTtpZigwPCgwfGFyWyh1PWUrMzc2NTYwfDApPj4yXSkpZm9yKGI9ZSszNzYxNDh8MCxsPTA7cz0wfEtvKGIsMHxhcltlKzM3NjcwMCsobDw8Mik+PjJdLGksMCksLTE8KDB8KGFyW2UrMzc3MDIwKyhsPDwyKT4+Ml09cykpJiYoQT0oMHxhclt0Pj4yXSkrKHM+Pj41PDwyKXwwLGFyW0E+PjJdPWFyW0E+PjJdfDE8PCgzMSZzKSksKDB8KGw9bCsxfDApKTwoMHxhclt1Pj4yXSk7KTtpZih1PTB8YXJbZz4+Ml0sbD0wfGFyW20+PjJdLDA8KHUtbHwwKSlmb3Iodj1lKzM3NjE1NnwwLGg9ZSszNzYxNjB8MCx3PTgrb3wwLGs9MCxkPXU7ISgoKHU9YXJbKDB8YXJbdD4+Ml0pKyhrPj4+NTw8Mik+PjJdJjE8PCgzMSZrKT9kOih1PTB8YXJbdj4+Ml0sYj0oMHxhcltoPj4yXSktdT4+Mj4+PjA+az4+PjA/MHxhclt1KyhrPDwyKT4+Ml06MCx1PTB8YXJbbj4+Ml0sKDB8YikhPSgwfHUpJiYoMHxhclsoQj1iKzEwNHwwKT4+Ml0pPj4+MD4oMHxhclt1Pj4yXSk+Pj4wJiYwIT0oMHxhcltiKzk2Pj4yXSk/KGI9MHxhcltiPj4yXSxhcltmPj4yXT1iLChzPTB8YXJbYT4+Ml0pPj4+MDwoMHxhclt3Pj4yXSk+Pj4wPyhhcltzPj4yXT1iLGFyW2E+PjJdPXMrNCxiPWQpOihNbyhvLGYpLGI9MHxhcltnPj4yXSxsPTB8YXJbbT4+Ml0sdT0wfGFyW24+PjJdKSxhcltCPj4yXT1hclt1Pj4yXSxiKTpkKSktbD4+MnwwKTw9KDB8KGs9aysxfDApKSk7KWQ9dTsoMHwobD1yKzEzNDR8MCkpIT0oMHxvKSYmJGUobCwwfGFyW28+PjJdLDB8YXJbYT4+Ml0pOzB8KGw9MHxhclt0Pj4yXSkmJnZ1KGwpO2lmKCEobD0wfGFyW28+PjJdKSlyZXR1cm4gdXI9YzsoMHwodT0wfGFyW2E+PjJdKSkhPSgwfGwpJiYoYXJbYT4+Ml09dSsofigodSstNC1sfDApPj4+Mik8PDIpKTt2dShsKSx1cj1jfShBLGUscikpLGFyW2w+PjJdPTEsZnVuY3Rpb24oQSl7QXw9MCxhclsxNDM5MV09QX0oMHxhcls5MisoMHxhcltiPj4yXSk+PjJdKSx0cltBKzM3NjIwOD4+MF09MH1lbHNlIGlmKCEoMHxhcltlKzM3NjIyND4+Ml0pKXJldHVybiB1cj1jLChyPTApfHI7aWYoKDB8YXJbcisyMD4+Ml0pPj4+MDwyJiYhKDB8ZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDt1cj0oYj11cikrNDgwfDAsdj1iKzE5MnwwLHU9KGw9YikrMzg0fDAsbT0wfGFyWzkxMisocnw9MCk+PjJdLGg9MHxhclsoaT1yKzMyOHwwKT4+Ml0saz0oMHxtKTwoMHxoKT9oOm0scz05NisoQT11KXwwO2Zvcig7dHJbQT4+MF09MCxBPUErMXwwLCgwfEEpPCgwfHMpOyk7Zj1lKzM3NjU1MnwwLG49ZSszNzY1NTZ8MCx0PWUrMzc2NTY0fDAsbz1lKzM3Njg5MnwwLGE9ZSszNzY5NTZ8MCxjPWUrMzc3MDg0fDAsQT0wO2Zvcig7ISgoMHxrKTw9KDB8QSkpOyl7aWYoMDwoMHwoZD0wfGFyW2Y+PjJdKSkpZm9yKGhiKHYrKEE8PDIpfDAsMHxvLDB8YnIoKHM9QS1rfDApPj4+MDwodz0wLWR8MCk+Pj4wP3c6cywtNCkpLHM9MDsoMHwoQT1BKzF8MCkpPCgwfGspJigwfChzPXMrMXwwKSk8KDB8ZCk7KTtpZihkPTB8YXJbbj4+Ml0sKDB8QSk8KDB8aykmMDwoMHxkKSlmb3IoaGIodisoQTw8Mil8MCwwfGEsMHxicigocz1BLWt8MCk+Pj4wPCh3PTAtKDE8KDB8ZCk/ZDoxKXwwKT4+PjA/dzpzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKGQ9MHxhclt0Pj4yXSwoMHxBKTwoMHxrKSYwPCgwfGQpKWZvcih2Yih1K0F8MCwxLDAtKHM9KHM9QS1rfDApPj4+MDwodz0wLSgxPCgwfGQpP2Q6MSl8MCk+Pj4wP3c6cyl8MCksaGIodisoQTw8Mil8MCwwfGMsMHxicihzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKCFBKXtaPTEzO2JyZWFrfX1pZigxMz09KDB8WikpcmV0dXJuIDIwPT0oMHwoQT0wfGFyWyhzPWUrODR8MCk+PjJdKSk/KHM9MTAwMSxBPTE5KTooYXJbcz4+Ml09QSsxLHM9MTAxNiksYXJbZSs0KyhBPDwyKT4+Ml09cyx1cj1iLChlPTApfGU7MTc8PSgwfGgpJiZzcigzNDk0NCwzNDcwMCwxNzgxLDM0OTc3KTtBOmRve2lmKDA8KDB8aCkpe2ZvcihrPXIrMzM2fDAsaD1lKzM3NjE1NnwwLHc9ZSszNzYxNjB8MCxkPTA7Oyl7aWYoQT0wfHRyW2s+PjBdPzB8Y3JbciszMzgrZD4+MF06ZCxhclsocz1yKzkxNisoZDw8Mil8MCk+PjJdPWFyW3YrKEE8PDIpPj4yXSx0cltyKzEzMDArZD4+MF09MHx0clt1K0E+PjBdLEE9MHxhcltzPj4yXSxzPTB8YXJbaD4+Ml0sKDB8YXJbdz4+Ml0pLXM+PjI+Pj4wPD1BPj4+MCl7QT0wLFo9NTQ7YnJlYWt9aWYoIShBPTB8YXJbcysoQTw8Mik+PjJdKSl7QT0wLFo9NTQ7YnJlYWt9aWYoYXJbcisxMDQ0KyhkPDwyKT4+Ml09YXJbQSs5Mj4+Ml0sYXJbcisxMTcyKyhkPDwyKT4+Ml09YXJbQSs5Nj4+Ml0sZD1kKzF8MCwoMHwoQT0wfGFyW2k+PjJdKSk8PSgwfGQpKXtnPUE7YnJlYWsgQX19aWYoNTQ9PSgwfFopKXJldHVybiB1cj1iLDB8QX1lbHNlIGc9aH13aGlsZSgwKTtpZigwfGFyW3IrMjA+PjJdKXJldHVybiB1cj1iLDB8KGU9MSk7aD0wfGFyWyh2PXIrMzMyfDApPj4yXSxrPSgwfG0pPCgwfGgpP2g6bSxBPTA7Zm9yKDshKCgwfGspPD0oMHxBKSk7KXtpZigwPCgwfChkPTB8YXJbbj4+Ml0pKSlmb3IoaGIobCsoQTw8Mil8MCwwfGEsMHxicigocz1BLWt8MCk+Pj4wPChtPTAtZHwwKT4+PjA/bTpzLC00KSkscz0wOygwfChBPUErMXwwKSk8KDB8aykmKDB8KHM9cysxfDApKTwoMHxkKTspO2lmKGQ9MHxhcltmPj4yXSwoMHxBKTwoMHxrKSYwPCgwfGQpKWZvcihoYihsKyhBPDwyKXwwLDB8bywwfGJyKChzPUEta3wwKT4+PjA8KG09MC0oMTwoMHxkKT9kOjEpfDApPj4+MD9tOnMsLTQpKSxzPTA7KDB8KEE9QSsxfDApKTwoMHxrKSYoMHwocz1zKzF8MCkpPCgwfGQpOyk7aWYoZD0wfGFyW3Q+PjJdLCgwfEEpPCgwfGspJjA8KDB8ZCkpZm9yKHZiKDQ4K3UrQXwwLDEsMC0ocz0ocz1BLWt8MCk+Pj4wPChtPTAtKDE8KDB8ZCk/ZDoxKXwwKT4+PjA/bTpzKXwwKSxoYihsKyhBPDwyKXwwLDB8YywwfGJyKHMsLTQpKSxzPTA7KDB8KEE9QSsxfDApKTwoMHxrKSYoMHwocz1zKzF8MCkpPCgwfGQpOyk7aWYoIUEpe1o9Mzg7YnJlYWt9fWlmKDM4PT0oMHxaKSlyZXR1cm4gMjA9PSgwfChBPTB8YXJbKHM9ZSs4NHwwKT4+Ml0pKT8ocz0xMDAxLEE9MTkpOihhcltzPj4yXT1BKzEscz0xMDE2KSxhcltlKzQrKEE8PDIpPj4yXT1zLHVyPWIsKGU9MCl8ZTtpZigxNjwoMHxnKSlyZXR1cm4gMjA9PSgwfChBPTB8YXJbKHM9ZSs4NHwwKT4+Ml0pKT8ocz0xMDAxLEE9MTkpOihhcltzPj4yXT1BKzEscz0xMDEyKSxhcltlKzQrKEE8PDIpPj4yXT1zLHVyPWIsKGU9MCl8ZTsxNzw9KDB8aCkmJnNyKDM1MDExLDM0NzAwLDE4MzQsMzQ5NzcpO2lmKCgwfGgpPD0wKXJldHVybiB1cj1iLDB8KGU9MSk7aD1yKzMzN3wwLHc9ZSszNzYxNTZ8MCxrPWUrMzc2MTYwfDAsZD0wO2Zvcig7Oyl7aWYoQT0wfHRyW2g+PjBdPzB8Y3JbciszNTQrZD4+MF06ZCxhclsocz1yKzk4MCsoZDw8Mil8MCk+PjJdPWFyW2wrKEE8PDIpPj4yXSx0cltyKzEzMTYrZD4+MF09MHx0cls0OCt1K0E+PjBdLEE9MHxhcltzPj4yXSxzPTB8YXJbdz4+Ml0sKDB8YXJbaz4+Ml0pLXM+PjI+Pj4wPD1BPj4+MCl7QT0wLFo9NTQ7YnJlYWt9aWYoIShBPTB8YXJbcysoQTw8Mik+PjJdKSl7QT0wLFo9NTQ7YnJlYWt9aWYoYXJbcisxMTA4KyhkPDwyKT4+Ml09YXJbQSs5Mj4+Ml0sYXJbcisxMjM2KyhkPDwyKT4+Ml09YXJbQSs5Nj4+Ml0sKDB8KGQ9ZCsxfDApKT49KDB8YXJbdj4+Ml0pKXtBPTEsWj01NDticmVha319cmV0dXJuIDU0IT0oMHxaKT8wOih1cj1iLDB8QSl9KDAsZSxyKSkpcmV0dXJuIHVyPWMsKHI9MCl8cjt1PTB8dHJbcisxMj4+MF0/ODAwKygwfGFyWyhsPXU9ZSszNzYyMjh8MCk+PjJdKXwwOihsPWUrMzc2MjI4fDAscisxNnwwKTtyZXR1cm4gYXJbcis4MDA+PjJdPWFyW3U+PjJdLGFyW2w+PjJdPXIsdXI9YywwfChyPTEpfShBLEEscyxuLDB8YXJbKHU9cis4fDApPj4yXSwwfGFyW3UrND4+Ml0saSwwfGFyW3IrMTY+PjJdKSxhPTB8YXJbKGI9QSszNzYyMjR8MCk+PjJdLCF1KXJldHVybiAwfGEmJih0clthKzEwNTE2Pj4wXT0yKSxCYShBKzU0OHwwLHIpLDB8KGE9MHxhcltzKzEzNDQ+PjJdKSYmKCgwfChjPTB8YXJbKGk9cysxMzQ4fDApPj4yXSkpIT0oMHxhKSYmKGFyW2k+PjJdPWMrKH4oKGMrLTQtYXwwKT4+PjIpPDwyKSksdnUoYSkpLGt0KHMrMTMzMnwwKSwwfChhPTB8YXJbcys3NzY+PjJdKSYmKCgwfChjPTB8YXJbKGk9cys3ODB8MCk+PjJdKSkhPSgwfGEpJiYoYXJbaT4+Ml09YysofigoYystNC1hfDApPj4+Mik8PDIpKSx2dShhKSksdnUocykscz0wfGFyW24+PjJdLHVyPXQsMHxzO2lmKGFyW2Y+PjJdPXMsaT1hKzQ4fDAsbD0wfGFyWyhjPWErNTJ8MCk+PjJdLGFyW3M+PjJdPWwtKDB8YXJbaT4+Ml0pPj4yLCgwfGwpPT0oMHxhclthKzU2Pj4yXSk/ZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2Y9NCsoQXw9MCl8MCxuPTB8YXJbQT4+Ml0sdD0oMHxhcltmPj4yXSktbnwwLDEwNzM3NDE4MjM8KG89MSsoaT10Pj4yKXwwKT4+PjAmJnpsKCk7Yz0oMHxhclsobD1BKzh8MCk+PjJdKS1ufDAsYT1jPj4xLGE9Yz4+Mj4+PjA8NTM2ODcwOTExP2E+Pj4wPG8+Pj4wP286YToxMDczNzQxODIzO2Rve2lmKGEpe2lmKCEoMTA3Mzc0MTgyMzxhPj4+MCkpe2M9MHxodShhPDwyKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2FyWyhyPWMrKGk8PDIpfDApPj4yXT1hcltlPj4yXSxvPXIrKDAtaTw8Mil8MCwwPCgwfHQpJiZoYigwfG8sMHxuLDB8dCk7aWYoYXJbQT4+Ml09byxhcltmPj4yXT00K3IsYXJbbD4+Ml09YysoYTw8MiksIW4pcmV0dXJuO3Z1KG4pfShpLGYpOihhcltsPj4yXT1zLGFyW2M+PjJdPTQrKDB8YXJbYz4+Ml0pKSxldChlLDEpLHJ0KGUpLGw9KDB8YXJbZT4+Ml0pLSgwfGFyW3IrMjA+PjJdKXwwLDA8KDB8YXJbKHU9cys3Njh8MCk+PjJdKSlmb3IoYz0oYT0wKXxhclsoaT1zKzc3NnwwKT4+Ml07az0wfFphKHIsMHxhcltjKyhhPDwyKT4+Ml0sbCksYz0wfGFyW2k+PjJdLGFyWyhkPWMrKGE8PDIpfDApPj4yXT0oMHxhcltkPj4yXSktaywoMHwoYT1hKzF8MCkpPCgwfGFyW3U+PjJdKTspO2lmKDB8dHJbcys0Pj4wXSl7Zm9yKG5hKChjPTB8aHUoMTA2ODgpKSs4fDApLGk9KGE9YysxMDYzMnwwKSs1NnwwOygwfChhPWErNHwoYXJbYT4+Ml09MCkpKTwoMHxpKTspO2FyW2Y+PjJdPWMsYXJbYz4+Ml09YXJbYj4+Ml0sKDB8KGk9MHxhclsoYT1BKzM3NzIyMHwwKT4+Ml0pKT09KDB8YXJbQSszNzcyMjQ+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj00KyhBfD0wKXwwLG49MHxhcltBPj4yXSx0PSgwfGFyW2Y+PjJdKS1ufDAsMTA3Mzc0MTgyMzwobz0xKyhpPXQ+PjIpfDApPj4+MCYmemwoKTtjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCxhPWM+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KTtpZihhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSwhbilyZXR1cm47dnUobil9KEErMzc3MjE2fDAsZik6KGFyW2k+PjJdPWMsYXJbYT4+Ml09NCsoMHxhclthPj4yXSkpfWVsc2UgYT1BKzM3NzIyMHwwO3JldHVybigwfGFyW0ErMzc3MjE2Pj4yXSkhPSgwfGFyW2E+PjJdKSYmKGw9MHxodSgxNTIpLGFyW2w+PjJdPTAsYXJbKGk9bCs0fDApPj4yXT0wLGFyW2wrMzI+PjJdPTAsRG4obCs0NHwodHJbbCszNj4+MF09MCkpLGFyW2wrMTI0Pj4yXT0wLGFyW2wrMTI4Pj4yXT0tMSxhcltsKzEzMj4+Ml09LTEsYXJbbCsxMzY+PjJdPTAsYXJbbCsxNDQ+PjJdPUEsYXJbbCs0MD4+Ml09MCxhcltsKzE0MD4+Ml09MCxhcltmPj4yXT1sLGFyW2w+PjJdPXIsYXJbaT4+Ml09cyxhclsoaT1sKzh8MCk+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09YXJbZSs0Pj4yXSxhcltpKzg+PjJdPWFyW2UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZSsxNj4+Ml0sYXJbaSsyMD4+Ml09YXJbZSsyMD4+Ml0sdHJbbCszNj4+MF09MHx0cltBKzM3NzIyOD4+MF0sYT0wfGFyWygwfGFyW2E+PjJdKS00Pj4yXSwoMHwoYz0wfGFyWyhpPWErMTA2MzZ8MCk+PjJdKSk9PSgwfGFyW2ErMTA2NDA+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj00KyhBfD0wKXwwLG49MHxhcltBPj4yXSx0PSgwfGFyW2Y+PjJdKS1ufDAsMTA3Mzc0MTgyMzwobz0xKyhpPXQ+PjIpfDApPj4+MCYmemwoKTtjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCxhPWM+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KTtpZihhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSwhbilyZXR1cm47dnUobil9KGErMTA2MzJ8MCxmKTooYXJbYz4+Ml09bCxhcltpPj4yXT00KygwfGFyW2k+PjJdKSkpLGs9MHxZbyhBLGYpLGFyW24+PjJdPWssdXI9dCwoaz0wKXxrfWZ1bmN0aW9uIGlyKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2ZvcihjPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTEyfDAsMTAwPChsPSgoaXw9MCktKHJ8PTApfDApLzEyfDApPj4+MD8oYz0wfHljKGwpKT9nPWE9YzpndSgpOihhPWMsZz0wKSxjPTAsYj1yLHM9YTsoMHxiKSE9KDB8aSk7KSh1PTB8dHJbYis4KzM+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LHU/dHJbcz4+MF09MToodHJbcz4+MF09MixjPWMrMXwwLGw9bCstMXwwKSxiPWIrMTJ8MCxzPXMrMXwwO209MCx3PWM7QTpmb3IoOzspe2M9MHxhcltBPj4yXTtkb3tpZihjKXtpZigwfFVmKGM9KDB8KHU9MHxhcltjKzEyPj4yXSkpPT0oMHxhcltjKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oYyk6MHxnZigwfGFyW3U+PjJdKSwtMSkpe2FyW0E+PjJdPTAscz0xO2JyZWFrfXM9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXM9MX13aGlsZSgwKTtpZihjPSh1PTB8YXJbZT4+Ml0pPzB8VWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGdmKDB8YXJbYz4+Ml0pLC0xKT8odT1hcltlPj4yXT0wLDEpOjA6KHU9MCwxKSxiPTB8YXJbQT4+Ml0sISgwIT0oMHxsKSYoc15jKSkpYnJlYWs7Zm9yKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxnZigwfGFyW2M+PjJdKSx0fHwoYz0wfEhiWzMxJmFyWzI4KygwfGFyW2Y+PjJdKT4+Ml1dKGYsYykpLHY9bSsxfDAsaz1yLGQ9MCxoPWE7KDB8aykhPSgwfGkpOyl7ZG97aWYoMT09KDB8dHJbaD4+MF0pKXtpZih1PSgwfHRyWyhiPWsrOCszfDApPj4wXSk8MD8wfGFyW2s+PjJdOmssdT0wfGFyW3UrKG08PDIpPj4yXSx0fHwodT0wfEhiWzMxJmFyWzI4KygwfGFyW2Y+PjJdKT4+Ml1dKGYsdSkpLHM9bCstMXwwLCgwfGMpIT0oMHx1KSl7dHJbaD4+MF09MCx1PWQsYj13LGw9czticmVha30odT0wfHRyW2I+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2srND4+Ml06dSY9MjU1LCgwfHUpPT0oMHx2KT8odHJbaD4+MF09MixiPXcrKHU9MSl8MCxsPXMpOih1PTEsYj13KX1lbHNlIHU9ZCxiPXd9d2hpbGUoMCk7az1rKzEyfDAsZD11LGg9aCsxfDAsdz1ifWlmKGQpaWYoYz0wfGFyW0E+PjJdLCgwfChiPTB8YXJbKHU9YysxMnwwKT4+Ml0pKT09KDB8YXJbYysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltjPj4yXSk+PjJdXShjKTooYXJbdT4+Ml09Yis0LGdmKDB8YXJbYj4+Ml0pKSwxPCh3K2x8MCk+Pj4wKWZvcihiPXIscz1hLGM9dzs7KXtpZigoMHxiKT09KDB8aSkpe209dix3PWM7Y29udGludWUgQX0yPT0oMHx0cltzPj4wXSkmJigodT0wfHRyW2IrOCszPj4wXSk8PDI0Pj4yNDwwP3U9MHxhcltiKzQ+PjJdOnUmPTI1NSwoMHx1KSE9KDB8dikmJihjPWMrLTF8KHRyW3M+PjBdPTApKSksYj1iKzEyfDAscz1zKzF8MH1lbHNlIG09djtlbHNlIG09dn1kb3tpZihiKXtpZigwfFVmKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxnZigwfGFyW2M+PjJdKSwtMSkpe2FyW0E+PjJdPTAsbD0xO2JyZWFrfWw9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWw9MX13aGlsZSgwKTtkb3tpZih1KXtpZigwfFVmKGM9KDB8KGM9MHxhclt1KzEyPj4yXSkpPT0oMHxhclt1KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdT4+Ml0pPj4yXV0odSk6MHxnZigwfGFyW2M+PjJdKSwtMSkpe2FyW2U+PjJdPTAsWj00MTticmVha31pZihsKWJyZWFrO1o9Nzc7YnJlYWt9Wj00MX13aGlsZSgwKTtmb3IoNDE9PSgwfFopJiZsJiYoWj03NyksNzc9PSgwfFopJiYoYXJbbj4+Ml09MnxhcltuPj4yXSk7Oyl7aWYoKDB8cik9PSgwfGkpKXtaPTgxO2JyZWFrfWlmKDI9PSgwfHRyW2E+PjBdKSlicmVhaztyPXIrMTJ8MCxhPWErMXwwfXJldHVybiA4MT09KDB8WikmJihhcltuPj4yXT00fGFyW24+PjJdLHI9aSksQmMoZyksdXI9bywwfHJ9ZnVuY3Rpb24gZnIoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdDtyZXR1cm4gdD11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbdD4+Ml09ZixmPTB8cmYocikscj0wfFljKEEsZSxpLHQpLDB8ZiYmcmYoZiksdXI9biwwfHJ9ZnVuY3Rpb24gbnIoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTA7QTpkb3tzd2l0Y2goKDE3NiZhcltyKzQ+PjJdKTw8MjQ+PjI0KXtjYXNlIDE2OnN3aXRjaChpPUErMXwwLChyPTB8dHJbQT4+MF0pPDwyND4+MjQpe2Nhc2UgNDM6Y2FzZSA0NTpBPWk7YnJlYWsgQX1pZigxPChlLUF8MCkmcjw8MjQ+PjI0PT00OCl7c3dpdGNoKDB8dHJbaT4+MF0pe2Nhc2UgODg6Y2FzZSAxMjA6YnJlYWs7ZGVmYXVsdDowO2JyZWFrIEF9QT1BKzJ8MH1lbHNlIDA7YnJlYWs7Y2FzZSAzMjpBPWU7YnJlYWs7ZGVmYXVsdDowfX13aGlsZSgwKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIGRyKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQ9MDtmb3IoMjA0OCYocnw9MCkmJih0cltBPj4wXT00MyxBPUErMXwwKSwxMDI0JnImJih0cltBPj4wXT0zNSxBPUErMXwwKSxpPTAhPSgxNjM4NCZyfDApLChmPTI2MD09KDB8KG49MjYwJnIpKSk/dD0wOih0cltBPj4wXT00Nix0cltBKzE+PjBdPTQyLHQ9MSxBPUErMnwwKTsocj0wfHRyW2U+PjBdKTw8MjQ+PjI0Oyl0cltBPj4wXT1yLGU9ZSsxfDAsQT1BKzF8MDtBOmRve3N3aXRjaCg1MTEmbil7Y2FzZSA0OnI9aT83MDoxMDI7YnJlYWs7Y2FzZSAyNTY6cj1pPzY5OjEwMTticmVhaztkZWZhdWx0OmlmKGYpe3I9aT82NTo5NzticmVhayBBfXI9aT83MToxMDM7YnJlYWsgQX19d2hpbGUoMCk7cmV0dXJuIHRyW0E+PjBdPXIsMHx0fWZ1bmN0aW9uIGtyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbjtyZXR1cm4gbj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbbj4+Ml09aSxpPTB8cmYoZSksZT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MDtmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltmPj4yXT1hcltyPj4yXSxBPTA8PSgwfChmPTB8WWMoMCwwLGUsZikpKSYmKHQ9MHx5YyhuPWYrMXwwKSwwIT0oMHwoYXJbQT4+Ml09dCkpKT8wfFljKHQsbixlLHIpOi0xO3JldHVybiB1cj1pLDB8QX0oQSxyLG4pLDB8aSYmcmYoaSksdXI9ZiwwfGV9ZnVuY3Rpb24gaHIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO3N3aXRjaChsPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx1PTB8dW4odHw9MCw1OTIzMiksYz0wfHVuKHQsNTkyNDgpLGZzWzYzJmFyWzIwKygwfGFyW2M+PjJdKT4+Ml1dKGwsYyksYXJbbj4+Ml09aSwodD0wfHRyW0E+PjBdKTw8MjQ+PjI0KXtjYXNlIDQzOmNhc2UgNDU6dj0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsdCkscz0wfGFyW24+PjJdLGFyW24+PjJdPXMrMSx0cltzPj4wXT12LHM9QSsxfDA7YnJlYWs7ZGVmYXVsdDpzPUF9dj1yO0E6ZG97aWYoMTwodi1zfDApJiY0OD09KDB8dHJbcz4+MF0pKXtzd2l0Y2goMHx0clsodD1zKzF8MCk+PjBdKXtjYXNlIDg4OmNhc2UgMTIwOmJyZWFrO2RlZmF1bHQ6dD1zLG09MTA7YnJlYWsgQX1mb3IoaD0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsNDgpLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzEsdHJbdz4+MF09aCxzPXMrMnwwLHc9MHxIYlszMSZhclsyOCsoMHxhclt1Pj4yXSk+PjJdXSh1LDB8dHJbdD4+MF0pLHQ9MHxhcltuPj4yXSxhcltuPj4yXT10KzEsdHJbdD4+MF09dyx0PXM7Oyl7aWYocj4+PjA8PXQ+Pj4wKWJyZWFrIEE7aWYoISgwfGxmKHc9MHx0clt0Pj4wXSxkbigpKSkpYnJlYWsgQTt0PXQrMXwwfX1lbHNlIHQ9cyxtPTEwfXdoaWxlKDApO0E6ZG97aWYoMTA9PSgwfG0pKWZvcig7Oyl7aWYocj4+PihtPTApPD10Pj4+MClicmVhayBBO2lmKCEoMHxhZih3PTB8dHJbdD4+MF0sZG4oKSkpKWJyZWFrIEE7dD10KzF8MCxtPTEwfX13aGlsZSgwKTtrPTB8dHJbKG89MTErbHwwKT4+MF0sYT00K2x8MCxoPXMsdz1BO0E6ZG97aWYoMHwoazw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmaykpe2U6ZG97aWYoKDB8cykhPSgwfHQpKWZvcihBPXQsZD1zOzspe2lmKChBPUErLTF8MCk+Pj4wPD1kPj4+MClicmVhayBlO2s9MHx0cltkPj4wXSx0cltkPj4wXT0wfHRyW0E+PjBdLHRyW0E+PjBdPWssZD1kKzF8MH19d2hpbGUoMCk7Zm9yKGs9MHxqYlsxMjcmYXJbMTYrKDB8YXJbYz4+Ml0pPj4yXV0oYyksQT1kPTA7ISh0Pj4+MDw9cz4+PjApOykwPChnPTB8dHJbKCgwfHRyW28+PjBdKTwwPzB8YXJbbD4+Ml06bCkrQT4+MF0pPDwyND4+MjQmKDB8ZCk9PShnPDwyND4+MjR8MCkmJihkPTB8YXJbbj4+Ml0sYXJbbj4+Ml09ZCsxLHRyW2Q+PjBdPWssQT0oQT4+PjA8KCgoZD0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmZCktMXwwKT4+PjAmMSkrQXwwLGQ9MCksWj0wfEhiWzMxJmFyWzI4KygwfGFyW3U+PjJdKT4+Ml1dKHUsMHx0cltzPj4wXSksZz0wfGFyW24+PjJdLGFyW24+PjJdPWcrMSx0cltnPj4wXT1aLHM9cysxfDAsZD1kKzF8MDtpZigoMHwoQT1pKyhoLXcpfDApKT09KDB8KHM9MHxhcltuPj4yXSkpKUE9dTtlbHNlIGZvcig7Oyl7aWYoKHM9cystMXwwKT4+PjA8PUE+Pj4wKXtBPXU7YnJlYWsgQX1aPTB8dHJbQT4+MF0sdHJbQT4+MF09MHx0cltzPj4wXSx0cltzPj4wXT1aLEE9QSsxfDB9fWVsc2UgUGJbNyZhclszMisoMHxhclt1Pj4yXSk+PjJdXSh1LHMsdCwwfGFyW24+PjJdKSxhcltuPj4yXT0oMHxhcltuPj4yXSkrKHQtaCksQT11fXdoaWxlKDApO2Zvcig7IShyPj4+MDw9dD4+PjApOyl7aWYocz0wfHRyW3Q+PjBdLHQ9dCsxfDAsczw8MjQ+PjI0PT00Nil7bT0yOTticmVha31nPTB8SGJbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0odSxzKSxaPTB8YXJbbj4+Ml0sYXJbbj4+Ml09WisxLHRyW1o+PjBdPWd9Mjk9PSgwfG0pJiYoZz0wfGpiWzEyNyZhclsxMisoMHxhcltjPj4yXSk+PjJdXShjKSxaPTB8YXJbbj4+Ml0sYXJbbj4+Ml09WisxLHRyW1o+PjBdPWcpLFBiWzcmYXJbMzIrKDB8YXJbdT4+Ml0pPj4yXV0odSx0LHIsMHxhcltuPj4yXSksWj0oMHxhcltuPj4yXSkrKHYtdCl8MCxhcltuPj4yXT1aLGFyW2Y+PjJdPSgwfGUpPT0oMHxyKT9aOmkrKGUtdyl8MCxCdShsKSx1cj1ifWZ1bmN0aW9uIHdyKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmPTA7Zm9yKDIwNDgmKGl8PTApJiYodHJbQT4+MF09NDMsQT1BKzF8MCksZj01MTImaT8odHJbQT4+MF09MzUsQSsxfDApOkE7KEE9MHx0cltlPj4wXSk8PDI0Pj4yNDspdHJbZj4+MF09QSxlPWUrMXwwLGY9ZisxfDA7c3dpdGNoKDc0Jmkpe2Nhc2UgNjQ6QT0xMTE7YnJlYWs7Y2FzZSA4OkE9MTYzODQmaXwwPzg4OjEyMDticmVhaztkZWZhdWx0OkE9cj8xMDA6MTE3fXRyW2Y+PjBdPUF9ZnVuY3Rpb24gdnIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodT11cj0oYj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYz0wfHVuKHR8PTAsNTkyMzIpLGQ9MHx1bih0LDU5MjQ4KSxmc1s2MyZhclsyMCsoMHxhcltkPj4yXSk+PjJdXSh1LGQpLGE9NCt1fDAsbD1BLHM9ciwwfCgoaz0wfHRyWyhvPTExK3V8MCk+PjBdKTw8MjQ+PjI0PDA/MHxhclthPj4yXToyNTUmaykpe3N3aXRjaChhcltuPj4yXT1pLCh0PTB8dHJbQT4+MF0pPDwyND4+MjQpe2Nhc2UgNDM6Y2FzZSA0NTp0PTB8SGJbMzEmYXJbMjgrKDB8YXJbYz4+Ml0pPj4yXV0oYyx0KSxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09aysxLHRyW2s+PjBdPXQsQT1BKzF8MH1BOmRve2lmKDE8KHMtQXwwKSYmNDg9PSgwfHRyW0E+PjBdKSl7c3dpdGNoKDB8dHJbKHQ9QSsxfDApPj4wXSl7Y2FzZSA4ODpjYXNlIDEyMDpicmVhaztkZWZhdWx0OmJyZWFrIEF9az0wfEhiWzMxJmFyWzI4KygwfGFyW2M+PjJdKT4+Ml1dKGMsNDgpLHM9MHxhcltuPj4yXSxhcltuPj4yXT1zKzEsdHJbcz4+MF09ayxzPTB8SGJbMzEmYXJbMjgrKDB8YXJbYz4+Ml0pPj4yXV0oYywwfHRyW3Q+PjBdKSxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09aysxLHRyW2s+PjBdPXMsQT1BKzJ8MH19d2hpbGUoMCk7QTpkb3tpZigoMHxBKSE9KDB8cikpZm9yKHQ9cixzPUE7Oyl7aWYoKHQ9dCstMXwwKT4+PjA8PXM+Pj4wKWJyZWFrIEE7az0wfHRyW3M+PjBdLHRyW3M+PjBdPTB8dHJbdD4+MF0sdHJbdD4+MF09ayxzPXMrMXwwfX13aGlsZSgwKTtmb3Ioaz0wfGpiWzEyNyZhclsxNisoMHxhcltkPj4yXSk+PjJdXShkKSxkPUEscz10PTA7IShyPj4+MDw9ZD4+PjApOykoaD0wfHRyWygoMHx0cltvPj4wXSk8MD8wfGFyW3U+PjJdOnUpK3Q+PjBdKTw8MjQ+PjI0IT0wJigwfHMpPT0oaDw8MjQ+PjI0fDApJiYocz0wfGFyW24+PjJdLGFyW24+PjJdPXMrMSx0cltzPj4wXT1rLHQ9KHQ+Pj4wPCgoKHM9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbYT4+Ml06MjU1JnMpLTF8MCk+Pj4wJjEpK3R8MCxzPTApLHc9MHxIYlszMSZhclsyOCsoMHxhcltjPj4yXSk+PjJdXShjLDB8dHJbZD4+MF0pLGg9MHxhcltuPj4yXSxhcltuPj4yXT1oKzEsdHJbaD4+MF09dyxkPWQrMXwwLHM9cysxfDA7aWYoKDB8KHQ9aSsoQS1sKXwwKSkhPSgwfChBPTB8YXJbbj4+Ml0pKSl7Zm9yKDshKChBPUErLTF8MCk+Pj4wPD10Pj4+MCk7KXc9MHx0clt0Pj4wXSx0clt0Pj4wXT0wfHRyW0E+PjBdLHRyW0E+PjBdPXcsdD10KzF8MDt0PTB8YXJbbj4+Ml19fWVsc2UgUGJbNyZhclszMisoMHxhcltjPj4yXSk+PjJdXShjLEEscixpKSx0PWkrKHMtbCl8MCxhcltuPj4yXT10O2FyW2Y+PjJdPSgwfGUpPT0oMHxyKT90OmkrKGUtbCl8MCxCdSh1KSx1cj1ifWZ1bmN0aW9uIG1yKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD0xMitvfDAsYz0wfGFyWyhBfD0wKT4+Ml07QTpkb3tpZihjKXtpZihsPSgwfChsPWktKGg9ZSk+PjIpKTwoMHwodT0wfGFyWyhiPWYrMTJ8MCk+PjJdKSk/dS1sfDA6MCxmPShoPSh1PXIpLWh8MCk+PjIsMDwoMHxoKSYmKDB8eGJbNjMmYXJbNDgrKDB8YXJbYz4+Ml0pPj4yXV0oYyxlLGYpKSE9KDB8Zikpe2M9YXJbQT4+Ml09MDticmVha31kb3tpZigwPCgwfGwpKXthcltvPj4yXT0wLGFyWzQrbz4+Ml09MCwxMDczNzQxODA3PGw+Pj4oYXJbOCtvPj4yXT0wKSYmcHUoKTtkb3tpZigyPD1sPj4+MCl7aWYoISgxMDczNzQxODIzPChmPWwrNCYyMTQ3NDgzNjQ0KT4+PjApKXtzPTB8aHUoZjw8MiksYXJbbz4+Ml09cyxhclsoZD04K298MCk+PjJdPS0yMTQ3NDgzNjQ4fGYsYXJbNCtvPj4yXT1sLGQ9ZCszfDAsaz1vO2JyZWFrfWxBKCl9ZWxzZSB0clsoZD04K28rM3wwKT4+MF09bCxrPXM9b313aGlsZSgwKTtpZihncihzLGwsbiksbG4ocysobDw8Mil8KGFyW3Q+PjJdPTApLHQpLCgwfHhiWzYzJmFyWzQ4KygwfGFyW2M+PjJdKT4+Ml1dKGMsKDB8dHJbZD4+MF0pPDA/MHxhcltvPj4yXTprLGwpKT09KDB8bCkpe1F1KG8pO2JyZWFrfWFyW0E+PjJdPTAsUXUobyksYz0wO2JyZWFrIEF9fXdoaWxlKDApO2lmKGk9KGg9aS11fDApPj4yLDA8KDB8aCkmJigwfHhiWzYzJmFyWzQ4KygwfGFyW2M+PjJdKT4+Ml1dKGMscixpKSkhPSgwfGkpKXtjPWFyW0E+PjJdPTA7YnJlYWt9YXJbYj4+Ml09MH1lbHNlIGM9MH13aGlsZSgwKTtyZXR1cm4gdXI9YSwwfGN9ZnVuY3Rpb24gZ3IoQSxlLHIpe3JldHVybiBBfD0wLHJ8PTAsKGV8PTApJiZmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpPTA7aWYoMHwocnw9MCkpZm9yKGk9QTtyPXIrLTF8MCxhcltpPj4yXT1lLHI7KWk9aSs0fDB9KEEscixlKSwwfEF9ZnVuY3Rpb24gWnIoQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MDtzd2l0Y2gobD11cj0oYj11cikrMzEmLTMyLHVyPXVyKzE2fDAsdT0wfHVuKHR8PTAsNTkyNjQpLGM9MHx1bih0LDU5MjcyKSxmc1s2MyZhclsyMCsoMHxhcltjPj4yXSk+PjJdXShsLGMpLGFyW24+PjJdPWksKHQ9MHx0cltBPj4wXSk8PDI0Pj4yNCl7Y2FzZSA0MzpjYXNlIDQ1Omc9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LHQpLHQ9MHxhcltuPj4yXSxhcltuPj4yXT10KzQsYXJbdD4+Ml09Zyx0PUErMXwwO2JyZWFrO2RlZmF1bHQ6dD1BfWc9cjtBOmRve2lmKDE8KGctdHwwKSYmNDg9PSgwfHRyW3Q+PjBdKSl7c3dpdGNoKDB8dHJbKHM9dCsxfDApPj4wXSl7Y2FzZSA4ODpjYXNlIDEyMDpicmVhaztkZWZhdWx0OnM9dCxaPTEwO2JyZWFrIEF9Zm9yKHY9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LDQ4KSxtPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bSs0LGFyW20+PjJdPXYsdD10KzJ8MCxtPTB8SGJbMzEmYXJbNDQrKDB8YXJbdT4+Ml0pPj4yXV0odSwwfHRyW3M+PjBdKSxzPTB8YXJbbj4+Ml0sYXJbbj4+Ml09cys0LGFyW3M+PjJdPW0scz10Ozspe2lmKHI+Pj4wPD1zPj4+MClicmVhayBBO2lmKCEoMHxsZihtPTB8dHJbcz4+MF0sZG4oKSkpKWJyZWFrIEE7cz1zKzF8MH19ZWxzZSBzPXQsWj0xMH13aGlsZSgwKTtBOmRve2lmKDEwPT0oMHxaKSlmb3IoOzspe2lmKHI+Pj4oWj0wKTw9cz4+PjApYnJlYWsgQTtpZighKDB8YWYobT0wfHRyW3M+PjBdLGRuKCkpKSlicmVhayBBO3M9cysxfDAsWj0xMH19d2hpbGUoMCk7dz0wfHRyWyhvPTExK2x8MCk+PjBdLGE9NCtsfDAsdj10LG09QTtBOmRve2lmKDB8KHc8PDI0Pj4yNDwwPzB8YXJbYT4+Ml06MjU1JncpKXtlOmRve2lmKCgwfHQpIT0oMHxzKSlmb3IoQT1zLGQ9dDs7KXtpZigoQT1BKy0xfDApPj4+MDw9ZD4+PjApYnJlYWsgZTt3PTB8dHJbZD4+MF0sdHJbZD4+MF09MHx0cltBPj4wXSx0cltBPj4wXT13LGQ9ZCsxfDB9fXdoaWxlKDApO2Zvcih3PTB8amJbMTI3JmFyWzE2KygwfGFyW2M+PjJdKT4+Ml1dKGMpLGQ9QT0wOyEocz4+PjA8PXQ+Pj4wKTspaz0wfHRyW28+PjBdLDA8KHA9MHx0clsoKGg9azw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCkrQT4+MF0pPDwyND4+MjQmKDB8ZCk9PShwPDwyND4+MjR8MCkmJihkPTB8YXJbbj4+Ml0sYXJbbj4+Ml09ZCs0LGFyW2Q+PjJdPXcsQT0oQT4+PjA8KChoPzB8YXJbYT4+Ml06MjU1JmspLTF8MCk+Pj4wJjEpK0F8MCxkPTApLGg9MHxIYlszMSZhcls0NCsoMHxhclt1Pj4yXSk+PjJdXSh1LDB8dHJbdD4+MF0pLHA9MHxhcltuPj4yXSxhcltuPj4yXT1wKzQsYXJbcD4+Ml09aCx0PXQrMXwwLGQ9ZCsxfDA7aWYoKDB8KHQ9aSsodi1tPDwyKXwwKSk9PSgwfChkPTB8YXJbbj4+Ml0pKSlBPXU7ZWxzZSBmb3IoQT1kOzspe2lmKChBPUErLTR8MCk+Pj4wPD10Pj4+MCl7QT11LHQ9ZDticmVhayBBfXA9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltBPj4yXSxhcltBPj4yXT1wLHQ9dCs0fDB9fWVsc2UgUGJbNyZhcls0OCsoMHxhclt1Pj4yXSk+PjJdXSh1LHQscywwfGFyW24+PjJdKSx0PSgwfGFyW24+PjJdKSsocy12PDwyKXwwLGFyW24+PjJdPXQsQT11fXdoaWxlKDApO2Zvcig7IShyPj4+MDw9cz4+PjApOyl7aWYodD0wfHRyW3M+PjBdLHM9cysxfDAsdDw8MjQ+PjI0PT00Nil7Wj0yOTticmVha312PTB8SGJbMzEmYXJbNDQrKDB8YXJbQT4+Ml0pPj4yXV0odSx0KSx0PShwPTB8YXJbbj4+Ml0pKzR8MCxhcltuPj4yXT10LGFyW3A+PjJdPXZ9Mjk9PSgwfFopJiYoWj0wfGpiWzEyNyZhclsxMisoMHxhcltjPj4yXSk+PjJdXShjKSx0PShwPTB8YXJbbj4+Ml0pKzR8MCxhcltuPj4yXT10LGFyW3A+PjJdPVopLFBiWzcmYXJbNDgrKDB8YXJbdT4+Ml0pPj4yXV0odSxzLHIsdCkscD0oMHxhcltuPj4yXSkrKGctczw8Mil8MCxhcltuPj4yXT1wLGFyW2Y+PjJdPSgwfGUpPT0oMHxyKT9wOmkrKGUtbTw8Mil8MCxCdShsKSx1cj1ifWZ1bmN0aW9uIHByKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciBvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxjPTB8dW4odHw9MCw1OTI2NCksZD0wfHVuKHQsNTkyNzIpLGZzWzYzJmFyWzIwKygwfGFyW2Q+PjJdKT4+Ml1dKHUsZCksYT00K3V8MCxsPUEscz1yLDB8KCh3PTB8dHJbKG89MTErdXwwKT4+MF0pPDwyND4+MjQ8MD8wfGFyW2E+PjJdOjI1NSZ3KSl7c3dpdGNoKGFyW24+PjJdPWksKHQ9MHx0cltBPj4wXSk8PDI0Pj4yNCl7Y2FzZSA0MzpjYXNlIDQ1Omg9MHxIYlszMSZhcls0NCsoMHxhcltjPj4yXSk+PjJdXShjLHQpLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzQsYXJbdz4+Ml09aCxBPUErMXwwfUE6ZG97aWYoMTwocy1BfDApJiY0OD09KDB8dHJbQT4+MF0pKXtzd2l0Y2goMHx0clsodD1BKzF8MCk+PjBdKXtjYXNlIDg4OmNhc2UgMTIwOmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX13PTB8SGJbMzEmYXJbNDQrKDB8YXJbYz4+Ml0pPj4yXV0oYyw0OCksaD0wfGFyW24+PjJdLGFyW24+PjJdPWgrNCxhcltoPj4yXT13LGg9MHxIYlszMSZhcls0NCsoMHxhcltjPj4yXSk+PjJdXShjLDB8dHJbdD4+MF0pLHc9MHxhcltuPj4yXSxhcltuPj4yXT13KzQsYXJbdz4+Ml09aCxBPUErMnwwfX13aGlsZSgwKTtBOmRve2lmKCgwfEEpIT0oMHxyKSlmb3IodD1yLHM9QTs7KXtpZigodD10Ky0xfDApPj4+MDw9cz4+PjApYnJlYWsgQTt3PTB8dHJbcz4+MF0sdHJbcz4+MF09MHx0clt0Pj4wXSx0clt0Pj4wXT13LHM9cysxfDB9fXdoaWxlKDApO2Zvcih3PTB8amJbMTI3JmFyWzE2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpLGg9QSxzPXQ9MDshKHI+Pj4wPD1oPj4+MCk7KWQ9MHx0cltvPj4wXSwodj0wfHRyWygoaz1kPDwyND4+MjQ8MCk/MHxhclt1Pj4yXTp1KSt0Pj4wXSk8PDI0Pj4yNCE9MCYoMHxzKT09KHY8PDI0Pj4yNHwwKSYmKHM9MHxhcltuPj4yXSxhcltuPj4yXT1zKzQsYXJbcz4+Ml09dyx0PSh0Pj4+MDwoKGs/MHxhclthPj4yXToyNTUmZCktMXwwKT4+PjAmMSkrdHwwLHM9MCksaz0wfEhiWzMxJmFyWzQ0KygwfGFyW2M+PjJdKT4+Ml1dKGMsMHx0cltoPj4wXSksdj0wfGFyW24+PjJdLGFyW24+PjJdPXYrNCxhclt2Pj4yXT1rLGg9aCsxfDAscz1zKzF8MDtpZigoMHwodD1pKyhBLWw8PDIpfDApKSE9KDB8KEE9MHxhcltuPj4yXSkpKXtmb3IoOyEoKEE9QSstNHwwKT4+PjA8PXQ+Pj4wKTspdj0wfGFyW3Q+PjJdLGFyW3Q+PjJdPWFyW0E+PjJdLGFyW0E+PjJdPXYsdD10KzR8MDt0PTB8YXJbbj4+Ml19fWVsc2UgUGJbNyZhcls0OCsoMHxhcltjPj4yXSk+PjJdXShjLEEscixpKSx0PWkrKHMtbDw8Mil8MCxhcltuPj4yXT10O2FyW2Y+PjJdPSgwfGUpPT0oMHxyKT90OmkrKGUtbDw8Mil8MCxCdSh1KSx1cj1ifWZ1bmN0aW9uIHlyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhO2E9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89NCthfDAsQT0wfGpiWzEyNyZhclthclsoQT0oQXw9MCkrOHwwKT4+Ml0+PjJdXShBKSxhclthPj4yXT1hcltpPj4yXSxhcltvPj4yXT1hclthPj4yXSwoMHwoQT0oMHxWbihyLG8sQSxBKzE2OHwwLG4sZiwwKSktQXwwKSk8MTY4JiYoYXJbZT4+Ml09KCgwfEEpLzEyfDApJTd8MCksdXI9dH1mdW5jdGlvbiBCcihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYTthPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTQrYXwwLEE9MHxqYlsxMjcmYXJbNCsoMHxhclsoQT0oQXw9MCkrOHwwKT4+Ml0pPj4yXV0oQSksYXJbYT4+Ml09YXJbaT4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sKDB8KEE9KDB8Vm4ocixvLEEsQSsyODh8MCxuLGYsMCkpLUF8MCkpPDI4OCYmKGFyW2U+PjJdPSgoMHxBKS8xMnwwKSUxMnwwKSx1cj10fWZ1bmN0aW9uIEVyKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MDtzPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhPTgrc3wwLGI9NCtzfDAsVGYoYz0xMitzfDAsaXw9MCksbD0wfHVuKGMsNTkyMzIpLGJuKGMpLHU9OCtsfChhcltmPj4yXT0wKSxrPTA7QTpmb3IoOzspe2ZvcihaPSgwfHQpIT0oMHxvKSxoPWs7Oyl7aWYoaz0wfGFyW2U+PjJdLCEoWiYwPT0oMHxoKSkpYnJlYWsgQTtnPSh3PWspPzB8TWYoaD0oMHwoaD0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaD4+MF0pLC0xKT8obT0xLGs9YXJbZT4+Ml09MCk6KG09MCx3KTooaz0wLG09MSx3KSxoPXY9MHxhcltyPj4yXTtkb3tpZih2KXtpZigwfE1mKHc9KDB8KHc9MHxhclt2KzEyPj4yXSkpPT0oMHxhclt2KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0odik6MHxoZigwfHRyW3c+PjBdKSwtMSkpe2g9YXJbcj4+Ml09MCx5PTE2O2JyZWFrfWlmKG0pYnJlYWs7eT02MTticmVhayBBfXk9MTZ9d2hpbGUoMCk7aWYoMTY9PSgwfHkpKXtpZih5PTAsbSl7eT02MTticmVhayBBfXY9MH1pZigoMHx4Yls2MyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsLDB8dHJbdD4+MF0sMCkpPDwyND4+MjQ9PTM3KXt5PTE5O2JyZWFrfWlmKC0xPChoPTB8dHJbdD4+MF0pPDwyND4+MjQmJihwPTB8YXJbdT4+Ml0sODE5MiZvcltwKyhoPDwyND4+MjQ8PDEpPj4xXSkpe3k9Mjc7YnJlYWt9aWYoaD0oMHwoaD0wfGFyWyh3PWsrMTJ8MCk+PjJdKSk9PSgwfGFyWyh2PWsrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaD4+MF0pLChnPTB8SGJbMzEmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwyNTUmaCkpPDwyND4+MjQ9PSgwfEhiWzMxJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsMHx0clt0Pj4wXSkpPDwyND4+MjQpe3k9NTc7YnJlYWt9aD1hcltmPj4yXT00fWU6ZG97aWYoMTk9PSgwfHkpKXtpZigoKHk9MCl8KG09dCsxfDApKT09KDB8bykpe3k9NjE7YnJlYWsgQX1zd2l0Y2goKHc9MHx4Yls2MyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsLDB8dHJbbT4+MF0sMCkpPDwyND4+MjQpe2Nhc2UgNDg6Y2FzZSA2OTppZigoMHwodD10KzJ8MCkpPT0oMHxvKSl7eT02MTticmVhayBBfXY9dyxrPTB8eGJbNjMmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfHRyW3Q+PjBdLDApLHQ9bTticmVhaztkZWZhdWx0OnY9MCxrPXd9Wj0wfGFyWzM2KygwfGFyW0E+PjJdKT4+Ml0sYXJbYj4+Ml09ZyxhcltzPj4yXT1oLGFyW2E+PjJdPWFyW2I+PjJdLGFyW2M+PjJdPWFyW3M+PjJdLFo9MHxlc1sxNSZaXShBLGEsYyxpLGYsbixrLHYpLGFyW2U+PjJdPVosdD10KzJ8MH1lbHNlIGlmKDI3PT0oMHx5KSl7Zm9yKDs7KXtpZigoKHk9MCl8KHQ9dCsxfDApKT09KDB8bykpe3Q9bzticmVha31pZigoaD0wfHRyW3Q+PjBdKTw8MjQ+PjI0PD0tMSlicmVhaztpZighKDgxOTImb3JbcCsoaDw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrO3k9Mjd9Zm9yKGg9djs7KXtrPzB8TWYodz0oMHwodz0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbdz4+MF0pLC0xKT8obT0xLGs9YXJbZT4+Ml09MCk6bT0wOihtPTEsaz0wKTtkb3tpZih2KXtpZigwfE1mKHc9KDB8KHc9MHxhclt2KzEyPj4yXSkpPT0oMHxhclt2KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0odik6MHxoZigwfHRyW3c+PjBdKSwtMSkpe2g9YXJbcj4+Ml09MCx5PTQzO2JyZWFrfWlmKG1eMD09KDB8aCkpe3Y9Zz1oO2JyZWFrfWJyZWFrIGV9eT00M313aGlsZSgwKTtpZig0Mz09KDB8eSkpe2lmKHk9MCxtKWJyZWFrIGU7Zz1oLHY9MH1pZigoMjU1JihoPSgwfChoPTB8YXJbKHc9aysxMnwwKT4+Ml0pKT09KDB8YXJbKG09aysxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2s+PjJdKT4+Ml1dKGspOjB8aGYoMHx0cltoPj4wXSkpKTw8MjQ+PjI0PD0tMSlicmVhayBlO2lmKCEoODE5MiZvclsoMHxhclt1Pj4yXSkrKGg8PDI0Pj4yNDw8MSk+PjFdKSlicmVhayBlOygwfChoPTB8YXJbdz4+Ml0pKSE9KDB8YXJbbT4+Ml0pPyhhclt3Pj4yXT1oKzEsaGYoMHx0cltoPj4wXSksaD1nKTooamJbMTI3JmFyWzQwKygwfGFyW2s+PjJdKT4+Ml1dKGspLGg9Zyl9fWVsc2UgaWYoNTc9PSgwfHkpKXtpZih0PXQrMXwoeT0wKSwoMHwoaD0wfGFyW3c+PjJdKSk9PSgwfGFyW3Y+PjJdKSl7amJbMTI3JmFyWzQwKygwfGFyW2s+PjJdKT4+Ml1dKGspO2JyZWFrfWFyW3c+PjJdPWgrMSxoZigwfHRyW2g+PjBdKTticmVha319d2hpbGUoMCk7az0wfGFyW2Y+PjJdfTYxPT0oMHx5KSYmKGFyW2Y+PjJdPTQpLHc9az8wfE1mKHQ9KDB8KHQ9MHxhcltrKzEyPj4yXSkpPT0oMHxhcltrKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaz4+Ml0pPj4yXV0oayk6MHxoZigwfHRyW3Q+PjBdKSwtMSk/KGs9YXJbZT4+Ml09MCwxKTowOihrPTAsMSksdD0wfGFyW3I+PjJdO2Rve2lmKHQpe2lmKDB8TWYodD0oMHwoaD0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbaD4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTc0O2JyZWFrfWlmKHcpYnJlYWs7eT03NjticmVha315PTc0fXdoaWxlKDApO3JldHVybiA3ND09KDB8eSkmJncmJih5PTc2KSw3Nj09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx1cj1kLDB8a31mdW5jdGlvbiBYcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfEpyKHIsQSxmLG4sMikpKy0xfDApPj4+MDwzMSYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFdyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDIpKSk8MjQmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBJcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfEpyKHIsQSxmLG4sMikpKy0xfDApPj4+MDwxMiYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIENyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDMpKSk8MzY2JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gR3IoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfEpyKHIsQSxmLG4sMikpKTwxMyYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BKy0xOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFZyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxKcihyLEEsZixuLDIpKSk8NjAmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBGcihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wLG89MDtuPShmfD0wKSs4fDA7QTpmb3IoOzspe0E9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGY9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2Y+PjBdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtmPTB8YXJbcj4+Ml07ZG97aWYoZil7aWYoMHxNZihBPSgwfChBPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLG89MTU7YnJlYWt9aWYodCl7dD1mO2JyZWFrfXQ9ZjticmVhayBBfW89MTV9d2hpbGUoMCk7aWYoMTU9PSgwfG8pKXtpZihvPTAsdCl7dD0wO2JyZWFrfXQ9MH1pZihBPTB8YXJbZT4+Ml0sKDI1NSYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbZj4+MF0pKSk8PDI0Pj4yNDw9LTEpYnJlYWs7aWYoISg4MTkyJm9yWygwfGFyW24+PjJdKSsoQTw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrO0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhmPUErMTJ8MCk+PjJdKSkhPSgwfGFyW0ErMTY+PjJdKT8oYXJbZj4+Ml09dCsxLGhmKDB8dHJbdD4+MF0pKTpqYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbZj4+MF0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO2Rve2lmKHQpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxvPTM4O2JyZWFrfWlmKGYpYnJlYWs7bz00MDticmVha31vPTM4fXdoaWxlKDApOzM4PT0oMHxvKSYmZiYmKG89NDApLDQwPT0oMHxvKSYmKGFyW2k+PjJdPTJ8YXJbaT4+Ml0pfWZ1bmN0aW9uIFJyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD00K298MCxsPTB8amJbMTI3JmFyWzgrKDB8YXJbKGw9KEF8PTApKzh8MCk+PjJdKT4+Ml1dKGwpLGM9KEE9MHx0cltsKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbCs0Pj4yXToyNTUmQSwoQT0wfHRyW2wrMTIrMTE+PjBdKTw8MjQ+PjI0PDA/QT0wfGFyW2wrMTY+PjJdOkEmPTI1NTtkb3tpZigoMHxjKSE9KDAtQXwwKSl7aWYoYXJbbz4+Ml09YXJbaT4+Ml0sYXJbdD4+Ml09YXJbbz4+Ml0sQT0oMHxWbihyLHQsbCxsKzI0fDAsbixmLDApKS1sfDAsMTI9PSgwfChjPTB8YXJbZT4+Ml0pKSYwPT0oMHxBKSl7YXJbZT4+Ml09MDticmVha30oMHxjKTwxMiYxMj09KDB8QSkmJihhcltlPj4yXT1jKzEyKX1lbHNlIGFyW2Y+PjJdPTR8YXJbZj4+Ml19d2hpbGUoMCk7dXI9YX1mdW5jdGlvbiBOcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgwfChBPTB8SnIocixBLGYsbiwyKSkpPDYxJjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gX3IoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfEpyKHIsQSxmLG4sMSkpKTw3JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gWXIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8SnIocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoQT0oMHxBKTw2OT9BKzJlM3wwOigwfEEpPDEwMD9BKzE5MDB8MDpBLGFyW2U+PjJdPUErLTE5MDApLHVyPXR9ZnVuY3Rpb24gUXIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8SnIocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoYXJbZT4+Ml09QSstMTkwMCksdXI9dH1mdW5jdGlvbiBEcihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDtBPTB8YXJbKGV8PTApPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW24+PjBdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxNZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLGE9MTQ7YnJlYWt9aWYodCl7bz1uLGE9MTY7YnJlYWt9QT02LGE9Mzg7YnJlYWt9YT0xNH13aGlsZSgwKTsxND09KDB8YSkmJihhPXQ/KEE9NiwzOCk6KG89MCwxNikpO0E6ZG97aWYoMTY9PSgwfGEpKWlmKEE9MHxhcltlPj4yXSxBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8aGYoMHx0cltuPj4wXSksKDB8eGJbNjMmYXJbMzYrKDB8YXJbZj4+Ml0pPj4yXV0oZiwyNTUmQSwwKSk8PDI0Pj4yND09Mzcpe0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhuPUErMTJ8MCk+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSk6KGFyW24+PjJdPXQrMSxoZigwfHRyW3Q+PjBdKSksQT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbbj4+MF0pLC0xKSl7YXJbZT4+Ml09MCxuPTE7YnJlYWt9bj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9bj0xfXdoaWxlKDApO2Rve2lmKDB8byl7aWYoMHxNZihBPSgwfChBPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wO2JyZWFrfWlmKG4pYnJlYWsgQTtBPTIsYT0zODticmVhayBBfX13aGlsZSgwKTtuJiYoQT0yLGE9MzgpfWVsc2UgQT00LGE9Mzh9d2hpbGUoMCk7Mzg9PSgwfGEpJiYoYXJbaT4+Ml09YXJbaT4+Ml18QSl9ZnVuY3Rpb24gSnIoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO249MHxhclsoQXw9MCk+PjJdO2Rve2lmKG4pe2lmKDB8TWYobj0oMHwodD0wfGFyW24rMTI+PjJdKSk9PSgwfGFyW24rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltuPj4yXSk+PjJdXShuKTowfGhmKDB8dHJbdD4+MF0pLC0xKSl7YXJbQT4+Ml09MCxvPTE7YnJlYWt9bz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bz0xfXdoaWxlKDApO3Q9MHxhcltlPj4yXTtkb3tpZih0KXtpZigwfE1mKG49KDB8KG49MHxhclt0KzEyPj4yXSkpPT0oMHxhclt0KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdD4+Ml0pPj4yXV0odCk6MHxoZigwfHRyW24+PjBdKSwtMSkpe2FyW2U+PjJdPTAsaz0xNDticmVha31pZihvKXtrPTE3O2JyZWFrfWs9MTY7YnJlYWt9az0xNH13aGlsZSgwKTsxND09KDB8aykmJihrPW8/MTY6KHQ9MCwxNykpO0E6ZG97aWYoMTY9PSgwfGspKWFyW3I+PjJdPTZ8YXJbcj4+Ml0sbj0wO2Vsc2UgaWYoMTc9PSgwfGspKXtpZihuPTB8YXJbQT4+Ml0sLTE8KG89MjU1JihuPSgwfChvPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8aGYoMHx0cltvPj4wXSkpKTw8MjQ+PjI0JiYyMDQ4Jm9yWygwfGFyWyhkPWkrOHwwKT4+Ml0pKyhuPDwyND4+MjQ8PDEpPj4xXSl7Zm9yKG49KDB8eGJbNjMmYXJbMzYrKDB8YXJbaT4+Ml0pPj4yXV0oaSxvLDApKTw8MjQ+PjI0LG89MHxhcltBPj4yXSxhPWw9KCgwfChjPTB8YXJbKGE9bysxMnwwKT4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltvPj4yXSk+PjJdXShvKTooYXJbYT4+Ml09YysxLGhmKDB8dHJbYz4+MF0pKSx0KTs7KXtuPW4rLTQ4fDAscz1mKy0xfDAsdD0wfGFyW0E+PjJdO2Rve2lmKHQpe2lmKDB8TWYodD0oMHwobz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGhmKDB8dHJbbz4+MF0pLC0xKSl7YXJbQT4+Ml09MCxjPTE7YnJlYWt9Yz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9Yz0xfXdoaWxlKDApO2Rve2lmKGEpe2lmKDB8TWYodD0oMHwodD0wfGFyW2ErMTI+PjJdKSk9PSgwfGFyW2ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclthPj4yXSk+PjJdXShhKTowfGhmKDB8dHJbdD4+MF0pLC0xKSl7dD0xLHU9Yj1hcltlPj4yXT0wO2JyZWFrfXQ9MD09KDB8KGI9bCkpLHU9bDticmVha31iPWwsdD0xLHU9MH13aGlsZSgwKTtpZihvPTB8YXJbQT4+Ml0sISgxPCgwfGYpJihjXnQpKSlicmVhaztpZigobz0yNTUmKHQ9KDB8KHQ9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3Q+PjBdKSkpPDwyND4+MjQ8PS0xKWJyZWFrIEE7aWYoISgyMDQ4Jm9yWygwfGFyW2Q+PjJdKSsodDw8MjQ+PjI0PDwxKT4+MV0pKWJyZWFrIEE7bj0oKDB8eGJbNjMmYXJbMzYrKDB8YXJbaT4+Ml0pPj4yXV0oaSxvLDApKTw8MjQ+PjI0KSsoMTAqbnwwKXwwLHQ9MHxhcltBPj4yXSwoMHwoYT0wfGFyWyhvPXQrMTJ8MCk+PjJdKSkhPSgwfGFyW3QrMTY+PjJdKT8oYXJbbz4+Ml09YSsxLGhmKDB8dHJbYT4+MF0pLGY9cyxsPWIsYT11KTooamJbMTI3JmFyWzQwKygwfGFyW3Q+PjJdKT4+Ml1dKHQpLGY9cyxsPWIsYT11KX1kb3tpZihvKXtpZigwfE1mKHQ9KDB8KHQ9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3Q+PjBdKSwtMSkpe2FyW0E+PjJdPTAsbz0xO2JyZWFrfW89MD09KDB8YXJbQT4+Ml0pO2JyZWFrfW89MX13aGlsZSgwKTtkb3tpZihiKXtpZigwfE1mKHQ9KDB8KHQ9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxoZigwfHRyW3Q+PjBdKSwtMSkpe2FyW2U+PjJdPTAsaz02MjticmVha31pZihvKWJyZWFrIEE7YnJlYWt9az02Mn13aGlsZSgwKTtpZig2Mj09KDB8aykmJiFvKWJyZWFrO2FyW3I+PjJdPTJ8YXJbcj4+Ml07YnJlYWt9YXJbcj4+Ml09NHxhcltyPj4yXSxuPTB9fXdoaWxlKDApO3JldHVybiAwfG59ZnVuY3Rpb24gTXIoQSl7cmV0dXJuIDB8ZnVuY3Rpb24oQSl7dmFyIGU9MDtlPUF8PTA7Zm9yKDswfGFyW2U+PjJdOyllPWUrNHwwO3JldHVybiBlLUE+PjJ8MH0oQXw9MCl9ZnVuY3Rpb24gVHIoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGE7YT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz00K2F8MCxBPTB8amJbMTI3JmFyW2FyWyhBPShBfD0wKSs4fDApPj4yXT4+Ml1dKEEpLGFyW2E+PjJdPWFyW2k+PjJdLGFyW28+PjJdPWFyW2E+PjJdLCgwfChBPSgwfGlyKHIsbyxBLEErMTY4fDAsbixmLDApKS1BfDApKTwxNjgmJihhcltlPj4yXT0oKDB8QSkvMTJ8MCklN3wwKSx1cj10fWZ1bmN0aW9uIFVyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhO2E9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89NCthfDAsQT0wfGpiWzEyNyZhcls0KygwfGFyWyhBPShBfD0wKSs4fDApPj4yXSk+PjJdXShBKSxhclthPj4yXT1hcltpPj4yXSxhcltvPj4yXT1hclthPj4yXSwoMHwoQT0oMHxpcihyLG8sQSxBKzI4OHwwLG4sZiwwKSktQXwwKSk8Mjg4JiYoYXJbZT4+Ml09KCgwfEEpLzEyfDApJTEyfDApLHVyPXR9ZnVuY3Rpb24gU3IoQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2I9dXI9KHM9dXIpKzMxJi0zMix1cj11cisxNnwwLGE9OCtifDAsdT00K2J8MCxUZihjPTEyK2J8MCxpfD0wKSxsPTB8dW4oYyw1OTI2NCksYm4oYyksZD1hcltmPj4yXT0wO0E6Zm9yKDs7KXtmb3IoZz0oMHx0KSE9KDB8byksaz1kOzspe2lmKGQ9MHxhcltlPj4yXSwhKGcmMD09KDB8aykpKWJyZWFrIEE7bT0oaD1kKT8wfFVmKGs9KDB8KGs9MHxhcltkKzEyPj4yXSkpPT0oMHxhcltkKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW2s+PjJdKSwtMSk/KHY9MSxkPWFyW2U+PjJdPTApOih2PTAsaCk6KGQ9MCx2PTEsaCksaz13PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihoPSgwfChoPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltoPj4yXSksLTEpKXtrPWFyW3I+PjJdPTAsWj0xNjticmVha31pZih2KWJyZWFrO1o9NTg7YnJlYWsgQX1aPTE2fXdoaWxlKDApO2lmKDE2PT0oMHxaKSl7aWYoWj0wLHYpe1o9NTg7YnJlYWsgQX13PTB9aWYoKDB8eGJbNjMmYXJbNTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW3Q+PjJdLDApKTw8MjQ+PjI0PT0zNyl7Wj0xOTticmVha31pZigwfHhiWzYzJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsODE5MiwwfGFyW3Q+PjJdKSl7Wj0yNjticmVha31pZihrPSgwfChrPTB8YXJbKGg9ZCsxMnwwKT4+Ml0pKT09KDB8YXJbKHc9ZCsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpOjB8Z2YoMHxhcltrPj4yXSksKDB8KG09MHxIYlszMSZhclsyOCsoMHxhcltsPj4yXSk+PjJdXShsLGspKSk9PSgwfEhiWzMxJmFyWzI4KygwfGFyW2w+PjJdKT4+Ml1dKGwsMHxhclt0Pj4yXSkpKXtaPTU0O2JyZWFrfWs9YXJbZj4+Ml09NH1lOmRve2lmKDE5PT0oMHxaKSl7aWYoKChaPTApfCh2PXQrNHwwKSk9PSgwfG8pKXtaPTU4O2JyZWFrIEF9c3dpdGNoKChoPTB8eGJbNjMmYXJbNTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW3Y+PjJdLDApKTw8MjQ+PjI0KXtjYXNlIDQ4OmNhc2UgNjk6aWYoKDB8KHQ9dCs4fDApKT09KDB8bykpe1o9NTg7YnJlYWsgQX13PWgsZD0wfHhiWzYzJmFyWzUyKygwfGFyW2w+PjJdKT4+Ml1dKGwsMHxhclt0Pj4yXSwwKSx0PXY7YnJlYWs7ZGVmYXVsdDp3PTAsZD1ofWc9MHxhclszNisoMHxhcltBPj4yXSk+PjJdLGFyW3U+PjJdPW0sYXJbYj4+Ml09ayxhclthPj4yXT1hclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxnPTB8ZXNbMTUmZ10oQSxhLGMsaSxmLG4sZCx3KSxhcltlPj4yXT1nLHQ9dCs4fDB9ZWxzZSBpZigyNj09KDB8Wikpe2Zvcig7Oyl7aWYoKChaPTApfCh0PXQrNHwwKSk9PSgwfG8pKXt0PW87YnJlYWt9aWYoISgwfHhiWzYzJmFyWzEyKygwfGFyW2w+PjJdKT4+Ml1dKGwsODE5MiwwfGFyW3Q+PjJdKSkpYnJlYWs7Wj0yNn1mb3Ioaz13Ozspe2Q/MHxVZihoPSgwfChoPTB8YXJbZCsxMj4+Ml0pKT09KDB8YXJbZCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Q+PjJdKT4+Ml1dKGQpOjB8Z2YoMHxhcltoPj4yXSksLTEpPyh2PTEsZD1hcltlPj4yXT0wKTp2PTA6KHY9MSxkPTApO2Rve2lmKHcpe2lmKDB8VWYoaD0oMHwoaD0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaD4+Ml0pLC0xKSl7az1hcltyPj4yXT0wLFo9NDE7YnJlYWt9aWYodl4wPT0oMHxrKSl7dz1tPWs7YnJlYWt9YnJlYWsgZX1aPTQxfXdoaWxlKDApO2lmKDQxPT0oMHxaKSl7aWYoWj0wLHYpYnJlYWsgZTttPWssdz0wfWlmKGs9KDB8KGs9MHxhclsoaD1kKzEyfDApPj4yXSkpPT0oMHxhclsodj1kKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW2s+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCw4MTkyLGspKSlicmVhayBlOygwfChrPTB8YXJbaD4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhcltoPj4yXT1rKzQsZ2YoMHxhcltrPj4yXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW2Q+PjJdKT4+Ml1dKGQpLGs9bSl9fWVsc2UgaWYoNTQ9PSgwfFopKXtpZih0PXQrNHwoWj0wKSwoMHwoaz0wfGFyW2g+PjJdKSk9PSgwfGFyW3c+PjJdKSl7amJbMTI3JmFyWzQwKygwfGFyW2Q+PjJdKT4+Ml1dKGQpO2JyZWFrfWFyW2g+PjJdPWsrNCxnZigwfGFyW2s+PjJdKTticmVha319d2hpbGUoMCk7ZD0wfGFyW2Y+PjJdfTU4PT0oMHxaKSYmKGFyW2Y+PjJdPTQpLGg9ZD8wfFVmKHQ9KDB8KHQ9MHxhcltkKzEyPj4yXSkpPT0oMHxhcltkKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZD4+Ml0pPj4yXV0oZCk6MHxnZigwfGFyW3Q+PjJdKSwtMSk/KGQ9YXJbZT4+Ml09MCwxKTowOihkPTAsMSksdD0wfGFyW3I+PjJdO2Rve2lmKHQpe2lmKDB8VWYodD0oMHwoaz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbaz4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxaPTcxO2JyZWFrfWlmKGgpYnJlYWs7Wj03MzticmVha31aPTcxfXdoaWxlKDApO3JldHVybiA3MT09KDB8WikmJmgmJihaPTczKSw3Mz09KDB8WikmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx1cj1zLDB8ZH1mdW5jdGlvbiBPcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfGlpKHIsQSxmLG4sMikpKy0xfDApPj4+MDwzMSYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIHpyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDIpKSk8MjQmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBqcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgoQT0wfGlpKHIsQSxmLG4sMikpKy0xfDApPj4+MDwxMiYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIEhyKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDMpKSk8MzY2JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24geHIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfGlpKHIsQSxmLG4sMikpKTwxMyYwPT0oNCYocj0wfGFyW2Y+PjJdKXwwKT9hcltlPj4yXT1BKy0xOmFyW2Y+PjJdPTR8cix1cj10fWZ1bmN0aW9uIFByKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvO289dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9NCtvfDAsYXJbbz4+Ml09YXJbaT4+Ml0sYXJbQT4+Ml09YXJbbz4+Ml0sKDB8KEE9MHxpaShyLEEsZixuLDIpKSk8NjAmMD09KDQmKHI9MHxhcltmPj4yXSl8MCk/YXJbZT4+Ml09QTphcltmPj4yXT00fHIsdXI9dH1mdW5jdGlvbiBMcihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wLHQ9MCxvPTA7QTpmb3IoOzspe0E9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW24+PjJdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxVZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLG89MTU7YnJlYWt9aWYodCl7dD1uO2JyZWFrfXQ9bjticmVhayBBfW89MTV9d2hpbGUoMCk7aWYoMTU9PSgwfG8pKXtpZihvPTAsdCl7dD0wO2JyZWFrfXQ9MH1pZihBPTB8YXJbZT4+Ml0sQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbbj4+Ml0pLCEoMHx4Yls2MyZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLDgxOTIsQSkpKWJyZWFrO0E9MHxhcltlPj4yXSwoMHwodD0wfGFyWyhuPUErMTJ8MCk+PjJdKSkhPSgwfGFyW0ErMTY+PjJdKT8oYXJbbj4+Ml09dCs0LGdmKDB8YXJbdD4+Ml0pKTpqYlsxMjcmYXJbNDArKDB8YXJbQT4+Ml0pPj4yXV0oQSl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8VWYoQT0oMHwobj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbbj4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxuPTE7YnJlYWt9bj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9bj0xfXdoaWxlKDApO2Rve2lmKHQpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxvPTM3O2JyZWFrfWlmKG4pYnJlYWs7bz0zOTticmVha31vPTM3fXdoaWxlKDApOzM3PT0oMHxvKSYmbiYmKG89MzkpLDM5PT0oMHxvKSYmKGFyW2k+PjJdPTJ8YXJbaT4+Ml0pfWZ1bmN0aW9uIEtyKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTA7bz11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD00K298MCxsPTB8amJbMTI3JmFyWzgrKDB8YXJbKGw9KEF8PTApKzh8MCk+PjJdKT4+Ml1dKGwpLGM9KEE9MHx0cltsKzgrMz4+MF0pPDwyND4+MjQ8MD8wfGFyW2wrND4+Ml06MjU1JkEsKEE9MHx0cltsKzIwKzM+PjBdKTw8MjQ+PjI0PDA/QT0wfGFyW2wrMTY+PjJdOkEmPTI1NTtkb3tpZigoMHxjKSE9KDAtQXwwKSl7aWYoYXJbbz4+Ml09YXJbaT4+Ml0sYXJbdD4+Ml09YXJbbz4+Ml0sQT0oMHxpcihyLHQsbCxsKzI0fDAsbixmLDApKS1sfDAsMTI9PSgwfChjPTB8YXJbZT4+Ml0pKSYwPT0oMHxBKSl7YXJbZT4+Ml09MDticmVha30oMHxjKTwxMiYxMj09KDB8QSkmJihhcltlPj4yXT1jKzEyKX1lbHNlIGFyW2Y+PjJdPTR8YXJbZj4+Ml19d2hpbGUoMCk7dXI9YX1mdW5jdGlvbiBxcihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbztvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTQrb3wwLGFyW28+PjJdPWFyW2k+PjJdLGFyW0E+PjJdPWFyW28+PjJdLCgwfChBPTB8aWkocixBLGYsbiwyKSkpPDYxJjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gJHIoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSwoMHwoQT0wfGlpKHIsQSxmLG4sMSkpKTw3JjA9PSg0JihyPTB8YXJbZj4+Ml0pfDApP2FyW2U+PjJdPUE6YXJbZj4+Ml09NHxyLHVyPXR9ZnVuY3Rpb24gQWkoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8aWkocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoQT0oMHxBKTw2OT9BKzJlM3wwOigwfEEpPDEwMD9BKzE5MDB8MDpBLGFyW2U+PjJdPUErLTE5MDApLHVyPXR9ZnVuY3Rpb24gZWkoQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG87bz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsQT00K298MCxhcltvPj4yXT1hcltpPj4yXSxhcltBPj4yXT1hcltvPj4yXSxBPTB8aWkocixBLGYsbiw0KSw0JmFyW2Y+PjJdfHwoYXJbZT4+Ml09QSstMTkwMCksdXI9dH1mdW5jdGlvbiByaShBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDtBPTB8YXJbKGV8PTApPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KG49MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW24+PjJdKSwtMSkpe2FyW2U+PjJdPTAsdD0xO2JyZWFrfXQ9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfXQ9MX13aGlsZSgwKTtuPTB8YXJbcj4+Ml07ZG97aWYobil7aWYoMHxVZihBPSgwfChBPTB8YXJbbisxMj4+Ml0pKT09KDB8YXJbbisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW24+PjJdKT4+Ml1dKG4pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLGE9MTQ7YnJlYWt9aWYodCl7bz1uLGE9MTY7YnJlYWt9QT02LGE9Mzg7YnJlYWt9YT0xNH13aGlsZSgwKTsxND09KDB8YSkmJihhPXQ/KEE9NiwzOCk6KG89MCwxNikpO0E6ZG97aWYoMTY9PSgwfGEpKWlmKEE9MHxhcltlPj4yXSxBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltuPj4yXSksKDB8eGJbNjMmYXJbNTIrKDB8YXJbZj4+Ml0pPj4yXV0oZixBLDApKTw8MjQ+PjI0PT0zNyl7QT0wfGFyW2U+PjJdLCgwfCh0PTB8YXJbKG49QSsxMnwwKT4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltBPj4yXSk+PjJdXShBKTooYXJbbj4+Ml09dCs0LGdmKDB8YXJbdD4+Ml0pKSxBPTB8YXJbZT4+Ml07ZG97aWYoQSl7aWYoMHxVZihBPSgwfChuPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltuPj4yXSksLTEpKXthcltlPj4yXT0wLG49MTticmVha31uPTA9PSgwfGFyW2U+PjJdKTticmVha31uPTF9d2hpbGUoMCk7ZG97aWYoMHxvKXtpZigwfFVmKEE9KDB8KEE9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTA7YnJlYWt9aWYobilicmVhayBBO0E9MixhPTM4O2JyZWFrIEF9fXdoaWxlKDApO24mJihBPTIsYT0zOCl9ZWxzZSBBPTQsYT0zOH13aGlsZSgwKTszOD09KDB8YSkmJihhcltpPj4yXT1hcltpPj4yXXxBKX1mdW5jdGlvbiBpaShBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtuPTB8YXJbKEF8PTApPj4yXTtkb3tpZihuKXtpZigwfFVmKG49KDB8KHQ9MHxhcltuKzEyPj4yXSkpPT0oMHxhcltuKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbj4+Ml0pPj4yXV0obik6MHxnZigwfGFyW3Q+PjJdKSwtMSkpe2FyW0E+PjJdPTAsbz0xO2JyZWFrfW89MD09KDB8YXJbQT4+Ml0pO2JyZWFrfW89MX13aGlsZSgwKTt0PTB8YXJbZT4+Ml07ZG97aWYodCl7aWYoMHxVZihuPSgwfChuPTB8YXJbdCsxMj4+Ml0pKT09KDB8YXJbdCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Q+PjJdKT4+Ml1dKHQpOjB8Z2YoMHxhcltuPj4yXSksLTEpKXthcltlPj4yXT0wLGQ9MTQ7YnJlYWt9aWYobyl7ZD0xNzticmVha31kPTE2O2JyZWFrfWQ9MTR9d2hpbGUoMCk7MTQ9PSgwfGQpJiYoZD1vPzE2Oih0PTAsMTcpKTtBOmRve2lmKDE2PT0oMHxkKSlhcltyPj4yXT02fGFyW3I+PjJdLG49MDtlbHNlIGlmKDE3PT0oMHxkKSl7aWYobj0wfGFyW0E+PjJdLG49KDB8KG89MHxhcltuKzEyPj4yXSkpPT0oMHxhcltuKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbj4+Ml0pPj4yXV0obik6MHxnZigwfGFyW28+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbaT4+Ml0pPj4yXV0oaSwyMDQ4LG4pKSl7YXJbcj4+Ml09NHxhcltyPj4yXSxuPTA7YnJlYWt9Zm9yKG49KDB8eGJbNjMmYXJbNTIrKDB8YXJbaT4+Ml0pPj4yXV0oaSxuLDApKTw8MjQ+PjI0LG89MHxhcltBPj4yXSxhPWw9KCgwfChjPTB8YXJbKGE9bysxMnwwKT4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltvPj4yXSk+PjJdXShvKTooYXJbYT4+Ml09Yys0LGdmKDB8YXJbYz4+Ml0pKSx0KTs7KXtuPW4rLTQ4fDAscz1mKy0xfDAsdD0wfGFyW0E+PjJdO2Rve2lmKHQpe2lmKDB8VWYodD0oMHwobz0wfGFyW3QrMTI+PjJdKSk9PSgwfGFyW3QrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt0Pj4yXSk+PjJdXSh0KTowfGdmKDB8YXJbbz4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxjPTE7YnJlYWt9Yz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9Yz0xfXdoaWxlKDApO2Rve2lmKGEpe2lmKDB8VWYodD0oMHwodD0wfGFyW2ErMTI+PjJdKSk9PSgwfGFyW2ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclthPj4yXSk+PjJdXShhKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7dD0xLHU9Yj1hcltlPj4yXT0wO2JyZWFrfXQ9MD09KDB8KGI9bCkpLHU9bDticmVha31iPWwsdD0xLHU9MH13aGlsZSgwKTtpZihvPTB8YXJbQT4+Ml0sISgxPCgwfGYpJihjXnQpKSlicmVhaztpZih0PSgwfCh0PTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8Z2YoMHxhclt0Pj4yXSksISgwfHhiWzYzJmFyWzEyKygwfGFyW2k+PjJdKT4+Ml1dKGksMjA0OCx0KSkpYnJlYWsgQTtuPSgoMHx4Yls2MyZhcls1MisoMHxhcltpPj4yXSk+PjJdXShpLHQsMCkpPDwyND4+MjQpKygxMCpufDApfDAsdD0wfGFyW0E+PjJdLCgwfChhPTB8YXJbKG89dCsxMnwwKT4+Ml0pKSE9KDB8YXJbdCsxNj4+Ml0pPyhhcltvPj4yXT1hKzQsZ2YoMHxhclthPj4yXSksZj1zLGw9YixhPXUpOihqYlsxMjcmYXJbNDArKDB8YXJbdD4+Ml0pPj4yXV0odCksZj1zLGw9YixhPXUpfWRve2lmKG8pe2lmKDB8VWYodD0oMHwodD0wfGFyW28rMTI+PjJdKSk9PSgwfGFyW28rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltvPj4yXSk+PjJdXShvKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxvPTE7YnJlYWt9bz0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bz0xfXdoaWxlKDApO2Rve2lmKGIpe2lmKDB8VWYodD0oMHwodD0wfGFyW2IrMTI+PjJdKSk9PSgwfGFyW2IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltiPj4yXSk+PjJdXShiKTowfGdmKDB8YXJbdD4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxkPTYwO2JyZWFrfWlmKG8pYnJlYWsgQTticmVha31kPTYwfXdoaWxlKDApO2lmKDYwPT0oMHxkKSYmIW8pYnJlYWs7YXJbcj4+Ml09MnxhcltyPj4yXX19d2hpbGUoMCk7cmV0dXJuIDB8bn1mdW5jdGlvbiBmaShBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1PTA7dD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdHJbdD4+MF09MzcsdHJbKG89MSt0fDApPj4wXT1mLHRyWyh1PTIrdHwwKT4+MF09bix0clszK3Q+PjBdPTAsbjw8MjQ+PjI0JiYodHJbbz4+MF09bix0clt1Pj4wXT1mKSx1PTB8KGM9ZSxsPTB8YXJbcj4+Ml0sKGx8PTApLShjfD0wKXwwKSx1PWUrKDB8RUEoMHxlLDB8dSwwfHQsMHxpLDB8YXJbQT4+Ml0pKXwwLGFyW3I+PjJdPXUsdXI9YX1mdW5jdGlvbiBuaShBKXsoMHwoMHxhclsoQXw9MCk+PjJdKSkhPSgwfGRuKCkpJiZvZigwfGFyW0E+PjJdKX1mdW5jdGlvbiB0aSgpe2xBKCl9ZnVuY3Rpb24gb2koQSxlLHIpe3JldHVybiBBfD0wLHJ8PTAsMHwoZXw9MCkmJnZiKDB8QSwyNTUmKDB8aGYocikpfDAsMHxlKSwwfEF9ZnVuY3Rpb24gYWkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTA7dmFyIHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSixNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wO2ZvcihWPXVyPShKPXVyKSszMSYtMzIsdXI9dXIrNTEyfDAsaj05NitWfDAsRD04MCtWfDAsRz03MitWfDAsRT02OCtWfDAsWD01MDArVnwwLFc9NDk3K1Z8MCxJPTQ5NitWfDAsRj01NitWfDAsUj00NCtWfDAsTj0zMitWfDAsXz0yMCtWfDAsWT04K1Z8MCxDPTQrVnwwLGFyWyhCPTg4K1Z8MCk+PjJdPWwsYXJbRD4+Ml09aixhclsoUT00K0R8MCk+PjJdPTQ0NCxhcltHPj4yXT1qLGFyW0U+PjJdPWorNDAwLGFyW0Y+PjJdPTAsYXJbNCtGPj4yXT0wLGw9YXJbOCtGPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbRisobDw8Mik+PjJdPTApO2ZvcihhcltSPj4yXT0wLGFyWzQrUj4+Ml09MCxsPWFyWzgrUj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1IrKGw8PDIpPj4yXT0wKTtmb3IoYXJbTj4+Ml09MCxhcls0K04+PjJdPTAsbD1hcls4K04+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltOKyhsPDwyKT4+Ml09MCk7Zm9yKGFyW18+PjJdPTAsYXJbNCtfPj4yXT0wLGw9YXJbOCtfPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbXysobDw8Mik+PjJdPTApO2ZvcihhcltZPj4yXT0wLGFyWzQrWT4+Ml09MCxsPWFyWzgrWT4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1krKGw8PDIpPj4yXT0wKTshZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiO2lmKHU9dXI9KGI9dXIpKzMxJi0zMix1cj11cisxNnwwLGw9MTIrdXwwLEF8PTApe2ZvcihlPTB8dW4oZSw2MDk1MiksZnNbNjMmYXJbNDQrKDB8YXJbZT4+Ml0pPj4yXV0obCxlKSxBPTB8YXJbbD4+Ml0sdHJbcj4+MF09QSx0cltyKzE+PjBdPUE+PjgsdHJbcisyPj4wXT1BPj4xNix0cltyKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksQT0oKDB8dHJbKEE9YSsxMXwwKT4+MF0pPDA/KEE9MHxhclthPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbYSs0Pj4yXT0wKToodHJbbD4+MF09MCxRZihhLGwpLHRyW0E+PjBdPTApLGEpLEN1KGEsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKEJ1KHUpLGZzWzYzJmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksQT0oKDB8dHJbKEE9bysxMXwwKT4+MF0pPDA/KEE9MHxhcltvPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbbys0Pj4yXT0wKToodHJbbD4+MF09MCxRZihvLGwpLHRyW0E+PjBdPTApLG8pLEN1KG8sMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKEJ1KHUpLEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbZT4+Ml0pPj4yXV0oZSksdHJbaT4+MF09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW2U+PjJdKT4+Ml1dKGUpLHRyW2Y+PjBdPUEsZnNbNjMmYXJbMjArKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1uKzExfDApPj4wXSk8MD8oQT0wfGFyW24+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltuKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG4sbCksdHJbQT4+MF09MCksbiksQ3UobiwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtCdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW2U+PjJdKT4+Ml1dKGUpfWVsc2V7Zm9yKGU9MHx1bihlLDYwOTQ0KSxmc1s2MyZhcls0NCsoMHxhcltlPj4yXSk+PjJdXShsLGUpLEE9MHxhcltsPj4yXSx0cltyPj4wXT1BLHRyW3IrMT4+MF09QT4+OCx0cltyKzI+PjBdPUE+PjE2LHRyW3IrMz4+MF09QT4+MjQsZnNbNjMmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1vKzExfDApPj4wXSk8MD8oQT0wfGFyW28+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltvKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG8sbCksdHJbQT4+MF09MCksbyksQ3UobywwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksQT0wfGpiWzEyNyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlKSx0cltpPj4wXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbZT4+Ml0pPj4yXV0oZSksdHJbZj4+MF09QSxmc1s2MyZhclsyMCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPW4rMTF8MCk+PjBdKTwwPyhBPTB8YXJbbj4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW24rND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYobixsKSx0cltBPj4wXT0wKSxuKSxDdShuLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPXQrMTF8MCk+PjBdKTwwPyhBPTB8YXJbdD4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW3QrND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYodCxsKSx0cltBPj4wXT0wKSx0KSxDdSh0LDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO0J1KHUpLEE9MHxqYlsxMjcmYXJbMzYrKDB8YXJbZT4+Ml0pPj4yXV0oZSl9YXJbYz4+Ml09QSx1cj1ifShyLGksWCxXLEksRixSLE4sXyxDKSxhcltjPj4yXT1hclthPj4yXSxtPW8rOHwwLGc9MTErTnwwLFo9NCtOfDAscD0xMStffDAseT00K198MCx1PTAhPSg1MTImZnwwKSxiPTExK1J8MCxzPTQrUnwwLGQ9MTErWXwwLGs9NCtZfDAsaD0zK1h8MCx3PTExK0Z8MCx2PTQrRnwwLHo9aj0wO0E6Zm9yKDs7KXtpZihvPTAhPSgwfGopLDQ8PXo+Pj4wKXtIPTIzNDticmVha31sPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxNZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7cj0wfGFyW2U+PjJdO2Rve2lmKHIpe2lmKDB8TWYobD0oMHwobD0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbbD4+MF0pLC0xKSl7YXJbZT4+Ml09MCxIPTMxO2JyZWFrfWlmKGkpe089cjticmVha31IPTIzNDticmVhayBBfUg9MzF9d2hpbGUoMCk7aWYoMzE9PSgwfEgpKXtpZihIPTAsaSl7SD0yMzQ7YnJlYWt9Tz0wfWw9MyE9KDB8eik7ZTpkb3tzd2l0Y2goMHx0cltYK3o+PjBdKXtjYXNlIDE6aWYobCl7aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtIPTQ0O2JyZWFrIEF9aWYoISg4MTkyJm9yWygwfGFyW20+PjJdKSsobDw8MjQ+PjI0PDwxKT4+MV0pKXtIPTQ0O2JyZWFrIEF9bD0wfGFyW0E+PjJdLF91KFksMjU1JihsPSgwfChpPTB8YXJbKHI9bCsxMnwwKT4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsMHxoZigwfHRyW2k+PjBdKSkpKSxvPWw9TyxIPTQ2fWVsc2UgbD1qO2JyZWFrO2Nhc2UgMDpsPyhvPWw9TyxIPTQ2KTpsPWo7YnJlYWs7Y2FzZSAzOmlmKCgwfChsPShsPTB8dHJbZz4+MF0pPDwyND4+MjQ8MD8wfGFyW1o+PjJdOjI1NSZsKSk9PSgwLShvPShvPTB8dHJbcD4+MF0pPDwyND4+MjQ8MD8wfGFyW3k+PjJdOjI1NSZvKXwwKSlsPWo7ZWxzZXtpZihmPTA9PSgwfGwpLGw9MHxhcltBPj4yXSxpPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pLGZ8MD09KDB8bykpe2lmKGw9aT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLGwmPTI1NSxmKXtpZihsPDwyND4+MjQhPSgwfHRyWygoMHx0cltwPj4wXSk8MD8wfGFyW18+PjJdOl8pPj4wXSkpe2w9ajticmVhayBlfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSksbD0odHJbdD4+MF09MSk8KChsPTB8dHJbcD4+MF0pPDwyND4+MjQ8MD8wfGFyW3k+PjJdOjI1NSZsKT4+PjA/XzpqO2JyZWFrIGV9aWYobDw8MjQ+PjI0IT0oMHx0clsoKDB8dHJbZz4+MF0pPDA/MHxhcltOPj4yXTpOKT4+MF0pKXt0clt0Pj4wXT0xLGw9ajticmVhayBlfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSksbD0xPCgobD0wfHRyW2c+PjBdKTw8MjQ+PjI0PDA/MHxhcltaPj4yXToyNTUmbCk+Pj4wP046ajticmVhayBlfWlmKGw9aT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLHI9MHxhcltBPj4yXSxmPSgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pLCgyNTUmbCk8PDI0Pj4yND09KDB8dHJbKCgwfHRyW2c+PjBdKTwwPzB8YXJbTj4+Ml06Tik+PjBdKSl7Zj9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPW8rMSxoZigwfHRyW28+PjBdKSksbD0xPCgobD0wfHRyW2c+PjBdKTw8MjQ+PjI0PDA/MHxhcltaPj4yXToyNTUmbCk+Pj4wP046ajticmVhayBlfWlmKCgyNTUmKGw9Zj8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbbz4+MF0pKSk8PDI0Pj4yNCE9KDB8dHJbKCgwfHRyW3A+PjBdKTwwPzB8YXJbXz4+Ml06Xyk+PjBdKSl7SD0xMDM7YnJlYWsgQX1sPTB8YXJbQT4+Ml0sKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsaGYoMHx0cltpPj4wXSkpLGw9KHRyW3Q+PjBdPTEpPCgobD0wfHRyW3A+PjBdKTw8MjQ+PjI0PDA/MHxhclt5Pj4yXToyNTUmbCk+Pj4wP186an1icmVhaztjYXNlIDI6aWYoISh6Pj4+MDwyfG8pJiYhKHV8Mj09KDB8eikmMCE9KDB8dHJbaD4+MF0pKSl7bD0wO2JyZWFrIGV9bD0ocj0wfHRyW2I+PjBdKTw8MjQ+PjI0PDAsVT0wfGFyW1I+PjJdLFQ9aT1sP1U6UjtyOmRve2lmKDAhPSgwfHopJiYoMHxjcltYKyh6Ky0xKT4+MF0pPDIpe2ZvcihsPWkrKGw/MHxhcltzPj4yXToyNTUmcil8MCxNPVQ7KDB8KG89TSkpIT0oMHxsKSYmISgoZj0wfHRyW28+PjBdKTw8MjQ+PjI0PD0tMSkmJjgxOTImb3JbKDB8YXJbbT4+Ml0pKyhmPDwyND4+MjQ8PDEpPj4xXTspTT1vKzF8MDtpZigoZj1NLVR8MCk+Pj4wPD0obz0obD0obz0wfHRyW2Q+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaz4+Ml06MjU1Jm8pPj4+MClmb3IobD0obz0obD8wfGFyW1k+PjJdOlkpK298MCkrKDAtZil8MDs7KXtpZigoMHxsKT09KDB8bykpe2k9TSxsPVUsbz1TPU87YnJlYWsgcn1pZigoMHx0cltsPj4wXSkhPSgwfHRyW2k+PjBdKSl7aT1ULGw9VSxvPVM9TzticmVhayByfWk9aSsxfDAsbD1sKzF8MH1lbHNlIGk9VCxsPVUsbz1TPU99ZWxzZSBpPVQsbD1VLG89Uz1PfXdoaWxlKDApO3I6Zm9yKDtsPSgoTT1yPDwyND4+MjQ8MCk/bDpSKSsoTT8wfGFyW3M+PjJdOjI1NSZyKXwwLCgwfChNPWkpKSE9KDB8bCk7KXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxNZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYobyl7aWYoMHxNZihsPSgwfChsPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltsPj4wXSksLTEpKXtsPWFyW2U+PjJdPTAsSD0xMzI7YnJlYWt9aWYocl4wPT0oMHxTKSl7Zj1sPVM7YnJlYWt9bD1NO2JyZWFrIHJ9bD1TLEg9MTMyfXdoaWxlKDApO2lmKDEzMj09KDB8SCkpe2lmKEg9MCxyKXtsPU07YnJlYWt9Zj0wfWlmKHI9MHxhcltBPj4yXSwoMjU1JihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8aGYoMHx0cltpPj4wXSkpKTw8MjQ+PjI0IT0oMHx0cltNPj4wXSkpe2w9TTticmVha31yPTB8YXJbQT4+Ml0sKDB8KG89MHxhclsoaT1yKzEyfDApPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpOihhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSkpLFM9bCxpPU0rMXwwLHI9MHx0cltiPj4wXSxsPTB8YXJbUj4+Ml0sbz1mfWlmKHUmJigwfGwpIT0oKChTPShPPTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltSPj4yXTpSKSsoUz8wfGFyW3M+PjJdOjI1NSZPKXwwKSl7SD0xNDQ7YnJlYWsgQX1sPWo7YnJlYWs7Y2FzZSA0OlQ9MCxvPWw9TztyOmZvcig7Oyl7cj0wfGFyW0E+PjJdO2Rve2lmKHIpe2lmKDB8TWYocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2Rve2lmKG8pe2lmKDB8TWYocj0oMHwocj0wfGFyW28rMTI+PjJdKSk9PSgwfGFyW28rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltvPj4yXSk+PjJdXShvKTowfGhmKDB8dHJbcj4+MF0pLC0xKSl7bD1hcltlPj4yXT0wLEg9MTU4O2JyZWFrfWlmKGleMD09KDB8bCkpe009Zj1sO2JyZWFrfW89bDticmVhayByfUg9MTU4fXdoaWxlKDApO2lmKDE1OD09KDB8SCkpe2lmKEg9MCxpKXtvPWw7YnJlYWt9Zj1sLE09MH1pZihsPTB8YXJbQT4+Ml0sLTE8KHI9MjU1JihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSkpKTw8MjQ+PjI0JiYwIT0oMjA0OCZvclsoMHxhclttPj4yXSkrKGw8PDI0Pj4yNDw8MSk+PjFdKSkoMHwobD0wfGFyW2M+PjJdKSk9PSgwfGFyW0I+PjJdKSYmKGxpKGEsYyxCKSxsPTB8YXJbYz4+Ml0pLGFyW2M+PjJdPWwrMSx0cltsPj4wXT1yLGw9VCsxfDA7ZWxzZXtpZihPPTB8dHJbdz4+MF0sIShyPDwyND4+MjQ9PSgwfHRyW0k+PjBdKSYoMHxUPzAhPSgwfChPPDwyND4+MjQ8MD8wfGFyW3Y+PjJdOjI1NSZPKSk6MCkpKXtvPWY7YnJlYWt9KDB8KGw9MHxhcltHPj4yXSkpPT0oMHxhcltFPj4yXSkmJih1aShELEcsRSksbD0wfGFyW0c+PjJdKSxhcltHPj4yXT1sKzQsYXJbbD4+Ml09VCxsPTB9cj0wfGFyW0E+PjJdLCgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKSE9KDB8YXJbcisxNj4+Ml0pPyhhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSksVD1sLGw9ZixvPU0pOihqYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ociksVD1sLGw9ZixvPU0pfWw9MHxhcltHPj4yXSwwfFQmJigwfGFyW0Q+PjJdKSE9KDB8bCkmJigoMHxsKT09KDB8YXJbRT4+Ml0pJiYodWkoRCxHLEUpLGw9MHxhcltHPj4yXSksYXJbRz4+Ml09bCs0LGFyW2w+PjJdPVQpO3I6ZG97aWYoMDwoMHxhcltDPj4yXSkpe2w9MHxhcltBPj4yXTtkb3tpZihsKXtpZigwfE1mKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2FyW0E+PjJdPTAscj0xO2JyZWFrfXI9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXI9MX13aGlsZSgwKTtkb3tpZihvKXtpZigwfE1mKGw9KDB8KGw9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW2w+PjBdKSwtMSkpe2FyW2U+PjJdPTAsSD0xOTM7YnJlYWt9aWYocilicmVhaztIPTIzMjticmVhayBBfUg9MTkzfXdoaWxlKDApO2lmKDE5Mz09KDB8SCkpe2lmKEg9MCxyKXtIPTIzMjticmVhayBBfW89MH1pZihsPTB8YXJbQT4+Ml0sKDI1NSYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pKSk8PDI0Pj4yNCE9KDB8dHJbVz4+MF0pKXtIPTIzMjticmVhayBBfWZvcihsPTB8YXJbQT4+Ml0sbD0oKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzEsaGYoMHx0cltpPj4wXSkpLG8pOzspe2lmKCgwfGFyW0M+PjJdKTw9MClicmVhayByO3I9MHxhcltBPj4yXTtkb3tpZihyKXtpZigwfE1mKHI9KDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW0E+PjJdPTAsaT0xO2JyZWFrfWk9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWk9MX13aGlsZSgwKTtkb3tpZihvKXtpZigwfE1mKHI9KDB8KHI9MHxhcltvKzEyPj4yXSkpPT0oMHxhcltvKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbz4+Ml0pPj4yXV0obyk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2w9YXJbZT4+Ml09MCxIPTIxNjticmVha31pZihpXjA9PSgwfGwpKXtvPWY9bDticmVha31IPTIzMjticmVhayBBfUg9MjE2fXdoaWxlKDApO2lmKDIxNj09KDB8SCkpe2lmKEg9MCxpKXtIPTIzMjticmVhayBBfWY9bCxvPTB9aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtIPTIzMjticmVhayBBfWlmKCEoMjA0OCZvclsoMHxhclttPj4yXSkrKGw8PDI0Pj4yNDw8MSk+PjFdKSl7SD0yMzI7YnJlYWsgQX0oMHxhcltjPj4yXSk9PSgwfGFyW0I+PjJdKSYmbGkoYSxjLEIpLGw9MHxhcltBPj4yXSxsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8aGYoMHx0cltyPj4wXSkscj0wfGFyW2M+PjJdLGFyW2M+PjJdPXIrMSx0cltyPj4wXT1sLGFyW0M+PjJdPSgwfGFyW0M+PjJdKS0xLGw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSkhPSgwfGFyW2wrMTY+PjJdKT8oYXJbcj4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLGw9Zik6KGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKSxsPWYpfX19d2hpbGUoMCk7aWYoKDB8YXJbYz4+Ml0pPT0oMHxhclthPj4yXSkpe0g9MjMyO2JyZWFrIEF9bD1qO2JyZWFrO2RlZmF1bHQ6bD1qfX13aGlsZSgwKTtlOmRve2lmKDQ2PT0oMHxIKSlmb3IoOzspe3I9KEg9MCl8YXJbQT4+Ml07ZG97aWYocil7aWYoMHxNZihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7ZG97aWYobyl7aWYoMHxNZihyPSgwfChyPTB8YXJbbysxMj4+Ml0pKT09KDB8YXJbbysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW28+PjJdKT4+Ml1dKG8pOjB8aGYoMHx0cltyPj4wXSksLTEpKXtsPWFyW2U+PjJdPTAsSD01OTticmVha31pZihpXjA9PSgwfGwpKXtvPWY9bDticmVha31sPWo7YnJlYWsgZX1IPTU5fXdoaWxlKDApO2lmKDU5PT0oMHxIKSl7aWYoSD0wLGkpe2w9ajticmVhayBlfWY9bCxvPTB9aWYobD0wfGFyW0E+PjJdLCgyNTUmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSkpPDwyND4+MjQ8PS0xKXtsPWo7YnJlYWsgZX1pZighKDgxOTImb3JbKDB8YXJbbT4+Ml0pKyhsPDwyND4+MjQ8PDEpPj4xXSkpe2w9ajticmVhayBlfWw9MHxhcltBPj4yXSxfdShZLDI1NSYobD0oMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSsxLDB8aGYoMHx0cltpPj4wXSkpKSksbD1mLEg9NDZ9fXdoaWxlKDApO2o9bCx6PXorMXwwfUE6ZG97aWYoNDQ9PSgwfEgpKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMTAzPT0oMHxIKSlhcltuPj4yXT00fGFyW24+PjJdLHI9MDtlbHNlIGlmKDE0ND09KDB8SCkpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigyMzI9PSgwfEgpKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMjM0PT0oMHxIKSl7ZTpkb3tpZihvKXtmPWorMTF8MCxNPWorNHwwLG89MTtyOmZvcig7Oyl7aWYoKGw9MHx0cltmPj4wXSk8PDI0Pj4yNDwwP2w9MHxhcltNPj4yXTpsJj0yNTUsbD4+PjA8PW8+Pj4wKWJyZWFrIGU7bD0wfGFyW0E+PjJdO2Rve2lmKGwpe2lmKDB8TWYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGhmKDB8dHJbcj4+MF0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2w9MHxhcltlPj4yXTtkb3tpZihsKXtpZigwfE1mKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSwtMSkpe2FyW2U+PjJdPTAsSD0yNTM7YnJlYWt9aWYoaSlicmVhazticmVhayByfUg9MjUzfXdoaWxlKDApO2lmKDI1Mz09KDB8SCkmJihIPTAsaSkpYnJlYWs7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxoZigwfHRyW3I+PjBdKSxyPSgwfHRyW2Y+PjBdKTwwPzB8YXJbaj4+Ml06aiwoMjU1JmwpPDwyND4+MjQhPSgwfHRyW3Irbz4+MF0pKWJyZWFrO2w9bysxfDAscj0wfGFyW0E+PjJdLCgwfChvPTB8YXJbKGk9cisxMnwwKT4+Ml0pKSE9KDB8YXJbcisxNj4+Ml0pPyhhcltpPj4yXT1vKzEsaGYoMHx0cltvPj4wXSksbz1sKTooamJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpLG89bCl9YXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7YnJlYWsgQX19d2hpbGUoMCk7aWYoKDB8KHI9MHxhcltEPj4yXSkpIT0oMHwobD0wfGFyW0c+PjJdKSkpe2lmKGFyW1Y+PjJdPTAsZ24oRixyLGwsViksMHxhcltWPj4yXSl7YXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7YnJlYWt9cj0xO2JyZWFrfXI9MX19d2hpbGUoMCk7cmV0dXJuIEJ1KFkpLEJ1KF8pLEJ1KE4pLEJ1KFIpLEJ1KEYpLGw9MHxhcltEPj4yXSwoYXJbRD4+Ml09MCl8bCYmaXNbNTExJmFyW1E+PjJdXShsKSx1cj1KLDB8cn1mdW5jdGlvbiBjaShBLGUscil7cmV0dXJuKGV8PTApPj4+MDw9KEF8PTApPj4+MCZBPj4+MDwocnw9MCk+Pj4wfDB9ZnVuY3Rpb24gbGkoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO3Q9NDQ0IT0oMHxhclsoZj0oQXw9MCkrNHwwKT4+Ml0pLG49MHxhcltBPj4yXSxvPTA9PSgwfChvPShvPSgwfGFyW3I+PjJdKS1ufDApPj4+MDwyMTQ3NDgzNjQ3P288PDE6LTEpKT8xOm8saT0oMHxhcltlPj4yXSktbnwwLChuPTB8RWModD9uOjAsbykpfHxndSgpLHQ/YXJbQT4+Ml09bjoodD0wfGFyW0E+PjJdLGFyW0E+PjJdPW4sdCYmKGlzWzUxMSZhcltmPj4yXV0odCksbj0wfGFyW0E+PjJdKSksYXJbZj4+Ml09NDQ1LGFyW2U+PjJdPW4raSxhcltyPj4yXT0oMHxhcltBPj4yXSkrb31mdW5jdGlvbiB1aShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7dD00NDQhPSgwfGFyWyhmPShBfD0wKSs0fDApPj4yXSksbj0wfGFyW0E+PjJdLG89MD09KDB8KG89KG89KDB8YXJbcj4+Ml0pLW58MCk+Pj4wPDIxNDc0ODM2NDc/bzw8MTotMSkpPzQ6byxpPSgwfGFyW2U+PjJdKS1uPj4yLChuPTB8RWModD9uOjAsbykpfHxndSgpLHQ/YXJbQT4+Ml09bjoodD0wfGFyW0E+PjJdLGFyW0E+PjJdPW4sdCYmKGlzWzUxMSZhcltmPj4yXV0odCksbj0wfGFyW0E+PjJdKSksYXJbZj4+Ml09NDQ1LGFyW2U+PjJdPW4rKGk8PDIpLGFyW3I+PjJdPSgwfGFyW0E+PjJdKSsobz4+PjI8PDIpfWZ1bmN0aW9uIGJpKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wO3ZhciB1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTA7Zm9yKEc9dXI9KEQ9dXIpKzMxJi0zMix1cj11cis1MTJ8MCx6PTEwNCtHfDAsUT04OCtHfDAsQz04MCtHfDAsQj03NitHfDAsRT01MDQrR3wwLFg9NzIrR3wwLFc9NjgrR3wwLFY9NTYrR3wwLEY9NDQrR3wwLFI9MzIrR3wwLE49MjArR3wwLF89OCtHfDAsST00K0d8MCxhclsoeT05NitHfDApPj4yXT1sLGFyW1E+PjJdPXosYXJbKFk9NCtRfDApPj4yXT00NDQsYXJbQz4+Ml09eixhcltCPj4yXT16KzQwMCxhcltWPj4yXT0wLGFyWzQrVj4+Ml09MCxsPWFyWzgrVj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW1YrKGw8PDIpPj4yXT0wKTtmb3IoYXJbRj4+Ml09MCxhcls0K0Y+PjJdPTAsbD1hcls4K0Y+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltGKyhsPDwyKT4+Ml09MCk7Zm9yKGFyW1I+PjJdPTAsYXJbNCtSPj4yXT0wLGw9YXJbOCtSPj4yXT0wOzMhPSgwfGwpOylsPWwrMXwoYXJbUisobDw8Mik+PjJdPTApO2ZvcihhcltOPj4yXT0wLGFyWzQrTj4+Ml09MCxsPWFyWzgrTj4+Ml09MDszIT0oMHxsKTspbD1sKzF8KGFyW04rKGw8PDIpPj4yXT0wKTtmb3IoYXJbXz4+Ml09MCxhcls0K18+PjJdPTAsbD1hcls4K18+PjJdPTA7MyE9KDB8bCk7KWw9bCsxfChhcltfKyhsPDwyKT4+Ml09MCk7IWZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wO3ZhciBsLHUsYjtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtmb3IoZT0wfHVuKGUsNjA5NjgpLGZzWzYzJmFyWzQ0KygwfGFyW2U+PjJdKT4+Ml1dKGwsZSksQT0wfGFyW2w+PjJdLHRyW3I+PjBdPUEsdHJbcisxPj4wXT1BPj44LHRyW3IrMj4+MF09QT4+MTYsdHJbciszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8ocj0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4ocixsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoUXUodSksZnNbNjMmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSwoMHx0clsoQT1vKzgrM3wwKT4+MF0pPDA/KGE9MHxhcltvPj4yXSxhcltsPj4yXT0wLGxuKGEsbCksYXJbbys0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihvLGwpLHRyW0E+PjBdPTApLE11KG8sMCksYXJbbz4+Ml09YXJbdT4+Ml0sYXJbbys0Pj4yXT1hcls0K3U+PjJdLGFyW28rOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7Zm9yKFF1KHUpLEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbZT4+Ml0pPj4yXV0oZSksYXJbaT4+Ml09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW2U+PjJdKT4+Ml1dKGUpLGFyW2Y+PjJdPUEsZnNbNjMmYXJbMjArKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSxBPSgoMHx0clsoQT1uKzExfDApPj4wXSk8MD8oQT0wfGFyW24+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltuKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG4sbCksdHJbQT4+MF09MCksbiksQ3UobiwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0odSxlKSwoMHx0clsoQT10KzgrM3wwKT4+MF0pPDA/KG49MHxhclt0Pj4yXSxhcltsPj4yXT0wLGxuKG4sbCksYXJbdCs0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbih0LGwpLHRyW0E+PjBdPTApLE11KHQsMCksYXJbdD4+Ml09YXJbdT4+Ml0sYXJbdCs0Pj4yXT1hcls0K3U+PjJdLGFyW3QrOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KWFyW3UrKEE8PDIpPj4yXT0wLEE9QSsxfDA7UXUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltlPj4yXSk+PjJdXShlKX1lbHNle2ZvcihlPTB8dW4oZSw2MDk2MCksZnNbNjMmYXJbNDQrKDB8YXJbZT4+Ml0pPj4yXV0obCxlKSxBPTB8YXJbbD4+Ml0sdHJbcj4+MF09QSx0cltyKzE+PjBdPUE+PjgsdHJbcisyPj4wXT1BPj4xNix0cltyKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW2U+PjJdKT4+Ml1dKHUsZSksKDB8dHJbKEE9YSs4KzN8MCk+PjBdKTwwPyhyPTB8YXJbYT4+Ml0sYXJbbD4+Ml09MCxsbihyLGwpLGFyW2ErND4+Ml09MCk6KGFyW2w+PjJdPTAsbG4oYSxsKSx0cltBPj4wXT0wKSxNdShhLDApLGFyW2E+PjJdPWFyW3U+PjJdLGFyW2ErND4+Ml09YXJbNCt1Pj4yXSxhclthKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihRdSh1KSxmc1s2MyZhclsyOCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPW8rOCszfDApPj4wXSk8MD8oYT0wfGFyW28+PjJdLGFyW2w+PjJdPTAsbG4oYSxsKSxhcltvKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKG8sbCksdHJbQT4+MF09MCksTXUobywwKSxhcltvPj4yXT1hclt1Pj4yXSxhcltvKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbbys4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtmb3IoUXUodSksQT0wfGpiWzEyNyZhclsxMisoMHxhcltlPj4yXSk+PjJdXShlKSxhcltpPj4yXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbZT4+Ml0pPj4yXV0oZSksYXJbZj4+Ml09QSxmc1s2MyZhclsyMCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLEE9KCgwfHRyWyhBPW4rMTF8MCk+PjBdKTwwPyhBPTB8YXJbbj4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW24rND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYobixsKSx0cltBPj4wXT0wKSxuKSxDdShuLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylhclt1KyhBPDwyKT4+Ml09MCxBPUErMXwwO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltlPj4yXSk+PjJdXSh1LGUpLCgwfHRyWyhBPXQrOCszfDApPj4wXSk8MD8obj0wfGFyW3Q+PjJdLGFyW2w+PjJdPTAsbG4obixsKSxhclt0KzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKHQsbCksdHJbQT4+MF09MCksTXUodCwwKSxhclt0Pj4yXT1hclt1Pj4yXSxhclt0KzQ+PjJdPWFyWzQrdT4+Ml0sYXJbdCs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspYXJbdSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtRdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW2U+PjJdKT4+Ml1dKGUpfWFyW2M+PjJdPUEsdXI9Yn0ocixpLEUsWCxXLFYsRixSLE4sSSksYXJbYz4+Ml09YXJbYT4+Ml0sbT04K1IrM3wwLGc9NCtSfDAsWj04K04rM3wwLHA9NCtOfDAsdT0wIT0oNTEyJmZ8MCksYj04K0YrM3wwLHM9NCtGfDAsZD04K18rM3wwLGs9NCtffDAsaD0zK0V8MCx3PTExK1Z8MCx2PTQrVnwwLE89ej0wO0E6Zm9yKDs7KXtpZihmPTAhPSgwfHopLDQ8PU8+Pj4wKXtqPTIyOTticmVha31sPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7cj0wfGFyW2U+PjJdO2Rve2lmKHIpe2lmKDB8VWYobD0oMHwobD0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbbD4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxqPTMxO2JyZWFrfWlmKGkpe1M9cjticmVha31qPTIyOTticmVhayBBfWo9MzF9d2hpbGUoMCk7aWYoMzE9PSgwfGopKXtpZihqPTAsaSl7aj0yMjk7YnJlYWt9Uz0wfWw9MyE9KDB8Tyk7ZTpkb3tzd2l0Y2goMHx0cltFK08+PjBdKXtjYXNlIDE6aWYobCl7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obyw4MTkyLGwpKSl7aj00MzticmVhayBBfWw9MHxhcltBPj4yXSxPdShfLGw9KDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrNCwwfGdmKDB8YXJbaT4+Ml0pKSksZj1sPVMsaj00NX1lbHNlIGw9ejticmVhaztjYXNlIDA6bD8oZj1sPVMsaj00NSk6bD16O2JyZWFrO2Nhc2UgMzppZigoMHwobD0obD0wfHRyW20+PjBdKTw8MjQ+PjI0PDA/MHxhcltnPj4yXToyNTUmbCkpPT0oMC0oZj0oZj0wfHRyW1o+PjBdKTw8MjQ+PjI0PDA/MHxhcltwPj4yXToyNTUmZil8MCkpbD16O2Vsc2V7aWYoSj0wPT0oMHxsKSxsPTB8YXJbQT4+Ml0saT0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKSxKfDA9PSgwfGYpKXtpZihsPWk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxKKXtpZigoMHxsKSE9KDB8YXJbKCgwfHRyW1o+PjBdKTwwPzB8YXJbTj4+Ml06Tik+PjJdKSl7bD16O2JyZWFrIGV9bD0wfGFyW0E+PjJdLCgwfChpPTB8YXJbKHI9bCsxMnwwKT4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pKSxsPSh0clt0Pj4wXT0xKTwoKGw9MHx0cltaPj4wXSk8PDI0Pj4yNDwwPzB8YXJbcD4+Ml06MjU1JmwpPj4+MD9OOno7YnJlYWsgZX1pZigoMHxsKSE9KDB8YXJbKCgwfHRyW20+PjBdKTwwPzB8YXJbUj4+Ml06Uik+PjJdKSl7dHJbdD4+MF09MSxsPXo7YnJlYWsgZX1sPTB8YXJbQT4+Ml0sKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSkpLGw9MTwoKGw9MHx0clttPj4wXSk8PDI0Pj4yNDwwPzB8YXJbZz4+Ml06MjU1JmwpPj4+MD9SOno7YnJlYWsgZX1pZihsPWk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxyPTB8YXJbQT4+Ml0sSj0oMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKSwoMHxsKT09KDB8YXJbKCgwfHRyW20+PjBdKTwwPzB8YXJbUj4+Ml06Uik+PjJdKSl7Sj9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPWYrNCxnZigwfGFyW2Y+PjJdKSksbD0xPCgobD0wfHRyW20+PjBdKTw8MjQ+PjI0PDA/MHxhcltnPj4yXToyNTUmbCk+Pj4wP1I6ejticmVhayBlfWlmKCgwfChsPUo/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxnZigwfGFyW2Y+PjJdKSkpIT0oMHxhclsoKDB8dHJbWj4+MF0pPDA/MHxhcltOPj4yXTpOKT4+Ml0pKXtqPTEwMTticmVhayBBfWw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbbD4+Ml0pPj4yXV0obCk6KGFyW3I+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSksbD0odHJbdD4+MF09MSk8KChsPTB8dHJbWj4+MF0pPDwyND4+MjQ8MD8wfGFyW3A+PjJdOjI1NSZsKT4+PjA/Tjp6fWJyZWFrO2Nhc2UgMjppZighKE8+Pj4wPDJ8ZikmJiEodXwyPT0oMHxPKSYwIT0oMHx0cltoPj4wXSkpKXtsPTA7YnJlYWsgZX1pPTB8dHJbYj4+MF0sZj0wfGFyW0Y+PjJdLGw9aTw8MjQ+PjI0PDA/ZjpGO3I6ZG97aWYoMCE9KDB8TykmJigwfGNyW0UrKE8rLTEpPj4wXSk8Mil7Zm9yKDsoMHwocj1sKSkhPSgoKFU9aTw8MjQ+PjI0PDApP2Y6RikrKChVPzB8YXJbcz4+Ml06MjU1JmkpPDwyKXwwKTspe2lmKCEoMHx4Yls2MyZhclsxMisoMHxhcltvPj4yXSk+PjJdXShvLDgxOTIsMHxhcltyPj4yXSkpKXtqPTEwODticmVha31sPXIrNHwwLGk9MHx0cltiPj4wXSxmPTB8YXJbRj4+Ml19aWYoMTA4PT0oMHxqKSYmKGk9KGo9MCl8dHJbYj4+MF0sZj0wfGFyW0Y+PjJdKSxUPWwtKFU9Sj1pPDwyND4+MjQ8MD9mOkYpPj4yLChNPShyPShNPTB8dHJbZD4+MF0pPDwyND4+MjQ8MCk/MHxhcltrPj4yXToyNTUmTSk+Pj4wPFQ+Pj4wKXI9VSxKPVQ9UztlbHNlIGZvcihyPShNPShyPzB8YXJbXz4+Ml06XykrKE08PDIpfDApKygwLVQ8PDIpfDA7Oyl7aWYoKDB8cik9PSgwfE0pKXtyPWwsSj1UPVM7YnJlYWsgcn1pZigoMHxhcltyPj4yXSkhPSgwfGFyW0o+PjJdKSl7cj1VLEo9VD1TO2JyZWFrIHJ9Sj1KKzR8MCxyPXIrNHwwfX1lbHNlIHI9bCxKPVQ9U313aGlsZSgwKTtyOmZvcig7KDB8KE09cikpIT0oMHwobD0oKGw9aTw8MjQ+PjI0PDApP2Y6RikrKChsPzB8YXJbcz4+Ml06MjU1JmkpPDwyKXwwKSk7KXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYoSil7aWYoMHxVZihsPSgwfChsPTB8YXJbSisxMj4+Ml0pKT09KDB8YXJbSisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0o+PjJdKT4+Ml1dKEopOjB8Z2YoMHxhcltsPj4yXSksLTEpKXtsPWFyW2U+PjJdPTAsaj0xMjk7YnJlYWt9aWYocl4wPT0oMHxUKSl7Sj1sPVQ7YnJlYWt9bD1NO2JyZWFrIHJ9bD1ULGo9MTI5fXdoaWxlKDApO2lmKDEyOT09KDB8aikpe2lmKGo9MCxyKXtsPU07YnJlYWt9Sj0wfWlmKHI9MHxhcltBPj4yXSwoMHwocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbaT4+Ml0pKSkhPSgwfGFyW00+PjJdKSl7bD1NO2JyZWFrfXI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT9qYlsxMjcmYXJbNDArKDB8YXJbcj4+Ml0pPj4yXV0ocik6KGFyW2k+PjJdPWYrNCxnZigwfGFyW2Y+PjJdKSksVD1sLHI9TSs0fDAsaT0wfHRyW2I+PjBdLGY9MHxhcltGPj4yXX1pZih1JiYoMHxsKSE9KCgoVT0oUz0wfHRyW2I+PjBdKTw8MjQ+PjI0PDApPzB8YXJbRj4+Ml06RikrKChVPzB8YXJbcz4+Ml06MjU1JlMpPDwyKXwwKSl7aj0xNDE7YnJlYWsgQX1sPXo7YnJlYWs7Y2FzZSA0OlQ9MCxmPWw9UztyOmZvcig7Oyl7cj0wfGFyW0E+PjJdO2Rve2lmKHIpe2lmKDB8VWYocj0oMHwoaT0wfGFyW3IrMTI+PjJdKSk9PSgwfGFyW3IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2Rve2lmKGYpe2lmKDB8VWYocj0oMHwocj0wfGFyW2YrMTI+PjJdKSk9PSgwfGFyW2YrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltmPj4yXSk+PjJdXShmKTowfGdmKDB8YXJbcj4+Ml0pLC0xKSl7bD1hcltlPj4yXT0wLGo9MTU1O2JyZWFrfWlmKGleMD09KDB8bCkpe009Sj1sO2JyZWFrfWY9bDticmVhayByfWo9MTU1fXdoaWxlKDApO2lmKDE1NT09KDB8aikpe2lmKGo9MCxpKXtmPWw7YnJlYWt9Sj1sLE09MH1pZihsPTB8YXJbQT4+Ml0scj0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGdmKDB8YXJbcj4+Ml0pLDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obywyMDQ4LHIpKSgwfChsPTB8YXJbYz4+Ml0pKT09KDB8YXJbeT4+Ml0pJiYoZGkoYSxjLHkpLGw9MHxhcltjPj4yXSksYXJbYz4+Ml09bCs0LGFyW2w+PjJdPXIsbD1UKzF8MDtlbHNle2lmKFM9MHx0clt3Pj4wXSwhKCgwfHIpPT0oMHxhcltXPj4yXSkmKDB8VD8wIT0oMHwoUzw8MjQ+PjI0PDA/MHxhclt2Pj4yXToyNTUmUykpOjApKSl7Zj1KO2JyZWFrfSgwfChsPTB8YXJbQz4+Ml0pKT09KDB8YXJbQj4+Ml0pJiYodWkoUSxDLEIpLGw9MHxhcltDPj4yXSksYXJbQz4+Ml09bCs0LGFyW2w+PjJdPVQsbD0wfXI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSkhPSgwfGFyW3IrMTY+PjJdKT8oYXJbaT4+Ml09Zis0LGdmKDB8YXJbZj4+Ml0pLFQ9bCxsPUosZj1NKTooamJbMTI3JmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKHIpLFQ9bCxsPUosZj1NKX1sPTB8YXJbQz4+Ml0sMHxUJiYoMHxhcltRPj4yXSkhPSgwfGwpJiYoKDB8bCk9PSgwfGFyW0I+PjJdKSYmKHVpKFEsQyxCKSxsPTB8YXJbQz4+Ml0pLGFyW0M+PjJdPWwrNCxhcltsPj4yXT1UKTtyOmRve2lmKDA8KDB8YXJbST4+Ml0pKXtsPTB8YXJbQT4+Ml07ZG97aWYobCl7aWYoMHxVZihsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXthcltBPj4yXT0wLHI9MTticmVha31yPTA9PSgwfGFyW0E+PjJdKTticmVha31yPTF9d2hpbGUoMCk7ZG97aWYoZil7aWYoMHxVZihsPSgwfChsPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8Z2YoMHxhcltsPj4yXSksLTEpKXthcltlPj4yXT0wLGo9MTg5O2JyZWFrfWlmKHIpYnJlYWs7aj0yMjc7YnJlYWsgQX1qPTE4OX13aGlsZSgwKTtpZigxODk9PSgwfGopKXtpZihqPTAscil7aj0yMjc7YnJlYWsgQX1mPTB9aWYobD0wfGFyW0E+PjJdLCgwfChsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSkpKSE9KDB8YXJbWD4+Ml0pKXtqPTIyNzticmVhayBBfWZvcihsPTB8YXJbQT4+Ml0sbD0oKDB8KGk9MHxhclsocj1sKzEyfDApPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/amJbMTI3JmFyWzQwKygwfGFyW2w+PjJdKT4+Ml1dKGwpOihhcltyPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSkpLGYpOzspe2lmKCgwfGFyW0k+PjJdKTw9MClicmVhayByO3I9MHxhcltBPj4yXTtkb3tpZihyKXtpZigwfFVmKHI9KDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxhcltyKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbcj4+Ml0pPj4yXV0ocik6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW0E+PjJdPTAsaT0xO2JyZWFrfWk9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfWk9MX13aGlsZSgwKTtkb3tpZihmKXtpZigwfFVmKHI9KDB8KHI9MHxhcltmKzEyPj4yXSkpPT0oMHxhcltmKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZj4+Ml0pPj4yXV0oZik6MHxnZigwfGFyW3I+PjJdKSwtMSkpe2w9YXJbZT4+Ml09MCxqPTIxMjticmVha31pZihpXjA9PSgwfGwpKXtmPUo9bDticmVha31qPTIyNzticmVhayBBfWo9MjEyfXdoaWxlKDApO2lmKDIxMj09KDB8aikpe2lmKGo9MCxpKXtqPTIyNzticmVhayBBfUo9bCxmPTB9aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obywyMDQ4LGwpKSl7aj0yMjc7YnJlYWsgQX0oMHxhcltjPj4yXSk9PSgwfGFyW3k+PjJdKSYmZGkoYSxjLHkpLGw9MHxhcltBPj4yXSxsPSgwfChyPTB8YXJbbCsxMj4+Ml0pKT09KDB8YXJbbCsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2w+PjJdKT4+Ml1dKGwpOjB8Z2YoMHxhcltyPj4yXSkscj0wfGFyW2M+PjJdLGFyW2M+PjJdPXIrNCxhcltyPj4yXT1sLGFyW0k+PjJdPSgwfGFyW0k+PjJdKS0xLGw9MHxhcltBPj4yXSwoMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSkhPSgwfGFyW2wrMTY+PjJdKT8oYXJbcj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLGw9Sik6KGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKSxsPUopfX19d2hpbGUoMCk7aWYoKDB8YXJbYz4+Ml0pPT0oMHxhclthPj4yXSkpe2o9MjI3O2JyZWFrIEF9bD16O2JyZWFrO2RlZmF1bHQ6bD16fX13aGlsZSgwKTtlOmRve2lmKDQ1PT0oMHxqKSlmb3IoOzspe3I9KGo9MCl8YXJbQT4+Ml07ZG97aWYocil7aWYoMHxVZihyPSgwfChpPTB8YXJbcisxMj4+Ml0pKT09KDB8YXJbcisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltBPj4yXT0wLGk9MTticmVha31pPTA9PSgwfGFyW0E+PjJdKTticmVha31pPTF9d2hpbGUoMCk7ZG97aWYoZil7aWYoMHxVZihyPSgwfChyPTB8YXJbZisxMj4+Ml0pKT09KDB8YXJbZisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2Y+PjJdKT4+Ml1dKGYpOjB8Z2YoMHxhcltyPj4yXSksLTEpKXtsPWFyW2U+PjJdPTAsaj01ODticmVha31pZihpXjA9PSgwfGwpKXtmPUo9bDticmVha31sPXo7YnJlYWsgZX1qPTU4fXdoaWxlKDApO2lmKDU4PT0oMHxqKSl7aWYoaj0wLGkpe2w9ejticmVhayBlfUo9bCxmPTB9aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwhKDB8eGJbNjMmYXJbMTIrKDB8YXJbbz4+Ml0pPj4yXV0obyw4MTkyLGwpKSl7bD16O2JyZWFrIGV9bD0wfGFyW0E+PjJdLE91KF8sbD0oMHwoaT0wfGFyWyhyPWwrMTJ8MCk+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhcls0MCsoMHxhcltsPj4yXSk+PjJdXShsKTooYXJbcj4+Ml09aSs0LDB8Z2YoMHxhcltpPj4yXSkpKSxsPUosaj00NX19d2hpbGUoMCk7ej1sLE89TysxfDB9QTpkb3tpZig0Mz09KDB8aikpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigxMDE9PSgwfGopKWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2Vsc2UgaWYoMTQxPT0oMHxqKSlhcltuPj4yXT00fGFyW24+PjJdLHI9MDtlbHNlIGlmKDIyNz09KDB8aikpYXJbbj4+Ml09NHxhcltuPj4yXSxyPTA7ZWxzZSBpZigyMjk9PSgwfGopKXtlOmRve2lmKGYpe0o9eis4KzN8MCxNPXorNHwwLGY9MTtyOmZvcig7Oyl7aWYoKGw9MHx0cltKPj4wXSk8PDI0Pj4yNDwwP2w9MHxhcltNPj4yXTpsJj0yNTUsbD4+PjA8PWY+Pj4wKWJyZWFrIGU7bD0wfGFyW0E+PjJdO2Rve2lmKGwpe2lmKDB8VWYobD0oMHwocj0wfGFyW2wrMTI+PjJdKSk9PSgwfGFyW2wrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltsPj4yXSk+PjJdXShsKTowfGdmKDB8YXJbcj4+Ml0pLC0xKSl7YXJbQT4+Ml09MCxpPTE7YnJlYWt9aT0wPT0oMHxhcltBPj4yXSk7YnJlYWt9aT0xfXdoaWxlKDApO2w9MHxhcltlPj4yXTtkb3tpZihsKXtpZigwfFVmKGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSwtMSkpe2FyW2U+PjJdPTAsaj0yNDg7YnJlYWt9aWYoaSlicmVhazticmVhayByfWo9MjQ4fXdoaWxlKDApO2lmKDI0OD09KDB8aikmJihqPTAsaSkpYnJlYWs7aWYobD0wfGFyW0E+PjJdLGw9KDB8KHI9MHxhcltsKzEyPj4yXSkpPT0oMHxhcltsKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbD4+Ml0pPj4yXV0obCk6MHxnZigwfGFyW3I+PjJdKSxyPSgwfHRyW0o+PjBdKTwwPzB8YXJbej4+Ml06eiwoMHxsKSE9KDB8YXJbcisoZjw8Mik+PjJdKSlicmVhaztsPWYrMXwwLHI9MHxhcltBPj4yXSwoMHwoZj0wfGFyWyhpPXIrMTJ8MCk+PjJdKSkhPSgwfGFyW3IrMTY+PjJdKT8oYXJbaT4+Ml09Zis0LGdmKDB8YXJbZj4+Ml0pLGY9bCk6KGpiWzEyNyZhcls0MCsoMHxhcltyPj4yXSk+PjJdXShyKSxmPWwpfWFyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2JyZWFrIEF9fXdoaWxlKDApO2lmKCgwfChyPTB8YXJbUT4+Ml0pKSE9KDB8KGw9MHxhcltDPj4yXSkpKXtpZihhcltHPj4yXT0wLGduKFYscixsLEcpLDB8YXJbRz4+Ml0pe2FyW24+PjJdPTR8YXJbbj4+Ml0scj0wO2JyZWFrfXI9MTticmVha31yPTF9fXdoaWxlKDApO3JldHVybiBRdShfKSxRdShOKSxRdShSKSxRdShGKSxCdShWKSxsPTB8YXJbUT4+Ml0sKGFyW1E+PjJdPTApfGwmJmlzWzUxMSZhcltZPj4yXV0obCksdXI9RCwwfHJ9ZnVuY3Rpb24gc2koQSxlLHIpe3JldHVybihlfD0wKT4+PjA8PShBfD0wKT4+PjAmQT4+PjA8KHJ8PTApPj4+MHwwfWZ1bmN0aW9uIGRpKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MDt0PTQ0NCE9KDB8YXJbKGY9KEF8PTApKzR8MCk+PjJdKSxuPTB8YXJbQT4+Ml0sbz0wPT0oMHwobz0obz0oMHxhcltyPj4yXSktbnwwKT4+PjA8MjE0NzQ4MzY0Nz9vPDwxOi0xKSk/NDpvLGk9KDB8YXJbZT4+Ml0pLW4+PjIsKG49MHxFYyh0P246MCxvKSl8fGd1KCksdD9hcltBPj4yXT1uOih0PTB8YXJbQT4+Ml0sYXJbQT4+Ml09bix0JiYoaXNbNTExJmFyW2Y+PjJdXSh0KSxuPTB8YXJbQT4+Ml0pKSxhcltmPj4yXT00NDUsYXJbZT4+Ml09bisoaTw8MiksYXJbcj4+Ml09KDB8YXJbQT4+Ml0pKyhvPj4+Mjw8Mil9ZnVuY3Rpb24ga2koQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MDtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtpZihzPTB8dW4ociw2MDk1MiksZSl7Zm9yKGZzWzYzJmFyWzQ0KygwfGFyW3M+PjJdKT4+Ml1dKGwscyksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltzPj4yXSk+PjJdXSh1LHMpLEE9KCgwfHRyWyhBPWErMTF8MCk+PjBdKTwwPyhBPTB8YXJbYT4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW2ErND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYoYSxsKSx0cltBPj4wXT0wKSxhKSxDdShhLDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO0J1KHUpLHI9c31lbHNle2Zvcihmc1s2MyZhcls0MCsoMHxhcltzPj4yXSk+PjJdXShsLHMpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMjgrKDB8YXJbcz4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxyPXN9Zm9yKEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcz4+Ml0pPj4yXV0ocyksdHJbZj4+MF09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW3M+PjJdKT4+Ml1dKHMpLHRyW24+PjBdPUEsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbcj4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1vKzExfDApPj4wXSk8MD8oQT0wfGFyW28+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhcltvKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKG8sbCksdHJbQT4+MF09MCksbyksQ3UobywwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW3M+PjJdKT4+Ml1dKHMpfWVsc2V7aWYocz0wfHVuKHIsNjA5NDQpLGUpe2Zvcihmc1s2MyZhcls0NCsoMHxhcltzPj4yXSk+PjJdXShsLHMpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMzIrKDB8YXJbcz4+Ml0pPj4yXV0odSxzKSxBPSgoMHx0clsoQT1hKzExfDApPj4wXSk8MD8oQT0wfGFyW2E+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclthKzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKGEsbCksdHJbQT4+MF09MCksYSksQ3UoYSwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtCdSh1KSxyPXN9ZWxzZXtmb3IoZnNbNjMmYXJbNDArKDB8YXJbcz4+Ml0pPj4yXV0obCxzKSxBPTB8YXJbbD4+Ml0sdHJbaT4+MF09QSx0cltpKzE+PjBdPUE+PjgsdHJbaSsyPj4wXT1BPj4xNix0cltpKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzI4KygwfGFyW3M+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9YSsxMXwwKT4+MF0pPDA/KEE9MHxhclthPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbYSs0Pj4yXT0wKToodHJbbD4+MF09MCxRZihhLGwpLHRyW0E+PjBdPTApLGEpLEN1KGEsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7QnUodSkscj1zfWZvcihBPTB8amJbMTI3JmFyWzEyKygwfGFyW3M+PjJdKT4+Ml1dKHMpLHRyW2Y+PjBdPUEsQT0wfGpiWzEyNyZhclsxNisoMHxhcltzPj4yXSk+PjJdXShzKSx0cltuPj4wXT1BLGZzWzYzJmFyWzIwKygwfGFyW3I+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9dCsxMXwwKT4+MF0pPDA/KEE9MHxhclt0Pj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbdCs0Pj4yXT0wKToodHJbbD4+MF09MCxRZih0LGwpLHRyW0E+PjBdPTApLHQpLEN1KHQsMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7Zm9yKEJ1KHUpLGZzWzYzJmFyWzI0KygwfGFyW3I+PjJdKT4+Ml1dKHUscyksQT0oKDB8dHJbKEE9bysxMXwwKT4+MF0pPDA/KEE9MHxhcltvPj4yXSx0cltsPj4wXT0wLFFmKEEsbCksYXJbbys0Pj4yXT0wKToodHJbbD4+MF09MCxRZihvLGwpLHRyW0E+PjBdPTApLG8pLEN1KG8sMCksYXJbQT4+Ml09YXJbdT4+Ml0sYXJbQSs0Pj4yXT1hcls0K3U+PjJdLGFyW0ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7QnUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltzPj4yXSk+PjJdXShzKX1hcltjPj4yXT1BLHVyPWJ9ZnVuY3Rpb24gaGkoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQpe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wLHN8PTAsZHw9MDt2YXIgayxoLHcsdixtLGcsWixwLHksQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTA7Zm9yKGFyWyhyfD0wKT4+Ml09QSxrPXMrMTF8MCx5PXMrNHwwLGg9YisxMXwwLHc9Yis0fDAsdj0wPT0oNTEyJml8MCksbT10Kzh8MCxnPTA8KDB8ZCksWj11KzExfDAscD11KzR8MCxHPTA7NCE9KDB8Ryk7KXtBOmRve3N3aXRjaCgwfHRyW2ErRz4+MF0pe2Nhc2UgMDphcltlPj4yXT1hcltyPj4yXTticmVhaztjYXNlIDE6YXJbZT4+Ml09YXJbcj4+Ml0sST0wfEhiWzMxJmFyWzI4KygwfGFyW3Q+PjJdKT4+Ml1dKHQsMzIpLEM9MHxhcltyPj4yXSxhcltyPj4yXT1DKzEsdHJbQz4+MF09STticmVhaztjYXNlIDM6MHwoKEI9KEM9MHx0cltrPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZDKSYmKEk9MHx0clsoQj8wfGFyW3M+PjJdOnMpPj4wXSxDPTB8YXJbcj4+Ml0sYXJbcj4+Ml09QysxLHRyW0M+PjBdPUkpO2JyZWFrO2Nhc2UgMjppZighKHZ8MD09KDB8KEU9KEI9KEU9MHx0cltoPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3c+PjJdOjI1NSZFKSkpKXtmb3IoWD0oQz1CPzB8YXJbYj4+Ml06YikrRXwwLEI9MHxhcltyPj4yXSxFPUM7KDB8RSkhPSgwfFgpOyl0cltCPj4wXT0wfHRyW0U+PjBdLEI9QisxfDAsRT1FKzF8MDthcltyPj4yXT1CfWJyZWFrO2Nhc2UgNDpmb3IoRT0wfGFyW3I+PjJdLFg9Zj1vP2YrMXwwOmY7IShuPj4+MDw9WD4+PjApJiYhKChCPTB8dHJbWD4+MF0pPDwyND4+MjQ8PS0xKSYmMjA0OCZvclsoMHxhclttPj4yXSkrKEI8PDI0Pj4yNDw8MSk+PjFdOylYPVgrMXwwO2lmKGcpe2ZvcihXPWQ7Zj4+PjA8WD4+PjAmKEI9MDwoMHxXKSk7KUI9MHx0clsoQz1YKy0xfDApPj4wXSxJPTB8YXJbcj4+Ml0sYXJbcj4+Ml09SSsxLHRyW0k+PjBdPUIsVz1XKy0xfDAsWD1DO2ZvcihJPUI/MHxIYlszMSZhclsyOCsoMHxhclt0Pj4yXSk+PjJdXSh0LDQ4KTowLEI9VztXPTB8YXJbcj4+Ml0sYXJbcj4+Ml09VysxLCEoKDB8Qik8PTApOyl0cltXPj4wXT1JLEI9QistMXwwO3RyW1c+PjBdPWN9ZTpkb3tpZigoMHxYKT09KDB8ZikpST0wfEhiWzMxJmFyWzI4KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpLEM9MHxhcltyPj4yXSxhcltyPj4yXT1DKzEsdHJbQz4+MF09STtlbHNlIGZvcihDPVc9KEk9MHwoKEI9KEM9MHx0cltaPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3A+PjJdOjI1NSZDKT8wfHRyWyhCPzB8YXJbdT4+Ml06dSk+PjBdOi0xLDApOzspe2lmKCgwfFgpPT0oMHxmKSlicmVhayBlO0I9KDB8Qyk9PSgwfEkpPyhJPTB8YXJbcj4+Ml0sYXJbcj4+Ml09SSsxLHRyW0k+PjBdPWwsST0oVz1XKzF8MCk+Pj4wPCgoQj0oST0wfHRyW1o+PjBdKTw8MjQ+PjI0PDApPzB8YXJbcD4+Ml06MjU1JkkpPj4+MD8oST0wfHRyWyhCPzB8YXJbdT4+Ml06dSkrVz4+MF0pPDwyND4+MjQ9PTEyNz8tMTpJPDwyND4+MjQ6QywwKTpDLEY9MHx0clsoVj1YKy0xfDApPj4wXSxDPTB8YXJbcj4+Ml0sYXJbcj4+Ml09QysxLHRyW0M+PjBdPUYsQz1CKzF8MCxYPVZ9fXdoaWxlKDApO2lmKCgwfEUpIT0oMHwoQj0wfGFyW3I+PjJdKSkpZm9yKDs7KXtpZigoQj1CKy0xfDApPj4+MDw9RT4+PjApYnJlYWsgQTtGPTB8dHJbRT4+MF0sdHJbRT4+MF09MHx0cltCPj4wXSx0cltCPj4wXT1GLEU9RSsxfDB9fX13aGlsZSgwKTtHPUcrMXwwfWlmKDE8KGY9KEI9KGY9MHx0cltrPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZmKT4+PjApe2ZvcihFPShGPUI/MHxhcltzPj4yXTpzKStmfDAsQj0wfGFyW3I+PjJdLGY9RjsoMHwoZj1mKzF8MCkpIT0oMHxFKTspdHJbQj4+MF09MHx0cltmPj4wXSxCPUIrMXwwO2FyW3I+PjJdPUJ9c3dpdGNoKCgxNzYmaSk8PDI0Pj4yNCl7Y2FzZSAzMjphcltlPj4yXT1hcltyPj4yXTticmVhaztjYXNlIDE2OmJyZWFrO2RlZmF1bHQ6YXJbZT4+Ml09QX19ZnVuY3Rpb24gd2koQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtBOmRve2lmKDM2PGU+Pj4wKWFyWyhmPTEwMzY0KT4+Ml09MjIsaT1mPTA7ZWxzZXtmb3IoZD1BKzR8MCxzPUErMTAwfDA7MCE9KDB8bWkobj0obj0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09bisxLDB8Y3Jbbj4+MF0pOjB8dmkoQSkpKTspO2U6ZG97c3dpdGNoKDB8bil7Y2FzZSA0MzpjYXNlIDQ1OmlmKG49KDQ1PT0oMHxuKSk8PDMxPj4zMSwodD0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MCl7YXJbZD4+Ml09dCsxLGI9bixuPTB8Y3JbdD4+MF07YnJlYWsgZX1iPW4sbj0wfHZpKEEpO2JyZWFrIGU7ZGVmYXVsdDpiPTB9fXdoaWxlKDApO3Q9MD09KDB8ZSk7ZG97aWYoMTY9PSgxNnxlKSY0OD09KDB8bikpe2lmKDEyMCE9KDMyfChuPShuPTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT1uKzEsMHxjcltuPj4wXSk6MHx2aShBKSkpKXtpZih0KXtlPTgsbD00NjticmVha31sPTMyO2JyZWFrfWlmKG49KG49MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPW4rMSwwfGNyW24+PjBdKTowfHZpKEEpLDE1PCgwfGNyWzUyNjI1K24+PjBdKSl7aWYoKGk9MCE9KDB8YXJbcz4+Ml0pKSYmKGFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xKSwhcil7bmwoQSwwKSxpPWY9MDticmVhayBBfWlmKCFpKXtpPWY9MDticmVhayBBfWFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xLGk9Zj0wO2JyZWFrIEF9ZT0xNixsPTQ2fWVsc2V7aWYoZT10PzEwOmUsISgoMHxjcls1MjYyNStuPj4wXSk+Pj4wPGU+Pj4wKSl7MHxhcltzPj4yXSYmKGFyW2Q+PjJdPSgwfGFyW2Q+PjJdKS0xKSxubChBLDApLGFyWyhmPTEwMzY0KT4+Ml09MjIsaT1mPTA7YnJlYWsgQX1sPTMyfX13aGlsZSgwKTtlOmRve2lmKDMyPT0oMHxsKSlpZigxMD09KDB8ZSkpe2lmKChlPW4rLTQ4fDApPj4+MDwxMCl7Zm9yKG49MCx0PWU7bj0oMTAqbnwwKSt0fDAsKHQ9KGU9KGU9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPWUrMSwwfGNyW2U+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwJm4+Pj4wPDQyOTQ5NjcyOTspO3I9MH1lbHNlIGU9bixyPW49MDtpZigobz1lKy00OHwwKT4+PjA8MTApe3Q9ZTtkb3tpZihlPTB8bmIoMHxuLDB8ciwxMCwwKSwodT1+KGM9KCgwfG8pPDApPDwzMT4+MzEpKT4+PjA8KGE9RCk+Pj4wfCgwfGEpPT0oMHx1KSZ+bz4+PjA8ZT4+PjApe2U9MTAsbD03MjticmVhayBlfW49MHx0YigwfGUsMHxhLDB8bywwfGMpLHI9RCxvPSh0PShlPTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkrLTQ4fDB9d2hpbGUobz4+PjA8MTAmKHI+Pj4wPDQyOTQ5NjcyOXw0Mjk0OTY3Mjk9PSgwfHIpJm4+Pj4wPDI1NzY5ODAzNzgpKTs5PG8+Pj4wPyh0PWIsZT1yKTooZT0xMCxsPTcyKX1lbHNlIHQ9YixlPXJ9ZWxzZSBsPTQ2fXdoaWxlKDApO2U6ZG97aWYoNDY9PSgwfGwpKXtpZighKGUrLTEmZSkpe2lmKGw9MHx0cls1Mjg4MSsoKDIzKmV8MCk+Pj41JjcpPj4wXSwodD0yNTUmKHI9MHx0cls1MjYyNStuPj4wXSkpPj4+MDxlPj4+MCl7Zm9yKG49MCxvPXQ7bj1vfG48PGwsdD0odD0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09dCsxLDB8Y3JbdD4+MF0pOjB8dmkoQSksbj4+PjA8MTM0MjE3NzI4JihvPTI1NSYocj0wfHRyWzUyNjI1K3Q+PjBdKSk+Pj4wPGU+Pj4wOyk7bz0wfWVsc2UgdD1uLG49bz0wO2lmKGE9MHxzYigtMSwtMSwwfGwpLGU+Pj4wPD0oMjU1JnIpPj4+MHwoYz1EKT4+PjA8bz4+PjB8KDB8byk9PSgwfGMpJmE+Pj4wPG4+Pj4wKXtyPW8sbD03MjticmVha31mb3IodD1vOzspe2lmKG49MHxkYigwfG4sMHx0LDB8bCksbz1ELG58PTI1NSZyLHQ9KHQ9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPXQrMSwwfGNyW3Q+PjBdKTowfHZpKEEpLGU+Pj4wPD0oMjU1JihyPTB8dHJbNTI2MjUrdD4+MF0pKT4+PjB8Yz4+PjA8bz4+PjB8KDB8byk9PSgwfGMpJmE+Pj4wPG4+Pj4wKXtyPW8sbD03MjticmVhayBlfXQ9b319aWYoKHQ9MjU1JihyPTB8dHJbNTI2MjUrbj4+MF0pKT4+PjA8ZT4+PjApe2ZvcihuPTAsbz10O249bysoMHxicihuLGUpKXwwLHQ9KHQ9MHxhcltkPj4yXSk+Pj4wPCgwfGFyW3M+PjJdKT4+PjA/KGFyW2Q+PjJdPXQrMSwwfGNyW3Q+PjBdKTowfHZpKEEpLG4+Pj4wPDExOTMwNDY0NyYobz0yNTUmKHI9MHx0cls1MjYyNSt0Pj4wXSkpPj4+MDxlPj4+MDspO289MH1lbHNlIHQ9bixvPW49MDtpZigoMjU1JnIpPj4+MDxlPj4+MClmb3IobD0wfGxiKC0xLC0xLDB8ZSwwKSx1PUQsYz1vOzspe2lmKHU+Pj4wPGM+Pj4wfCgwfGMpPT0oMHx1KSZsPj4+MDxuPj4+MCl7cj1jLGw9NzI7YnJlYWsgZX1pZihvPTB8bmIoMHxuLDB8YywwfGUsMCksNDI5NDk2NzI5NTwoYT1EKT4+PjB8LTE9PSgwfGEpJn4ociY9MjU1KT4+PjA8bz4+PjApe3I9YyxsPTcyO2JyZWFrIGV9aWYobj0wfHRiKDB8ciwwLDB8bywwfGEpLG89RCx0PSh0PTB8YXJbZD4+Ml0pPj4+MDwoMHxhcltzPj4yXSk+Pj4wPyhhcltkPj4yXT10KzEsMHxjclt0Pj4wXSk6MHx2aShBKSxlPj4+MDw9KDI1NSYocj0wfHRyWzUyNjI1K3Q+PjBdKSk+Pj4wKXtyPW8sbD03MjticmVha31jPW99ZWxzZSByPW8sbD03Mn19d2hpbGUoMCk7aWYoNzI9PSgwfGwpKWlmKCgwfGNyWzUyNjI1K3Q+PjBdKT4+PjA8ZT4+PjApe2Zvcig7bj0obj0wfGFyW2Q+PjJdKT4+PjA8KDB8YXJbcz4+Ml0pPj4+MD8oYXJbZD4+Ml09bisxLDB8Y3Jbbj4+MF0pOjB8dmkoQSksKDB8Y3JbNTI2MjUrbj4+MF0pPj4+MDxlPj4+MDspO2FyWyh0PTEwMzY0KT4+Ml09MzQsdD0wPT0oMSZpfDApJiEwP2I6MCxlPWYsbj1pfWVsc2UgdD1iLGU9cjtpZigwfGFyW3M+PjJdJiYoYXJbZD4+Ml09KDB8YXJbZD4+Ml0pLTEpLCEoZT4+PjA8Zj4+PjB8KDB8ZSk9PSgwfGYpJm4+Pj4wPGk+Pj4wKSl7aWYoISgwIT0oMSZpfDApfCExfDAhPSgwfHQpKSl7YXJbKGQ9MTAzNjQpPj4yXT0zNCxpPTB8dGIoMHxpLDB8ZiwtMSwtMSksZj1EO2JyZWFrfWlmKGY+Pj4wPGU+Pj4wfCgwfGUpPT0oMHxmKSZpPj4+MDxuPj4+MCl7YXJbKGQ9MTAzNjQpPj4yXT0zNDticmVha319aT0wfG9iKG5edHwwLGVeKGk9KCgwfHQpPDApPDwzMT4+MzEpfDAsMHx0LDB8aSksZj1EfX13aGlsZSgwKTtyZXR1cm4gRD1mLDB8aX1mdW5jdGlvbiB2aShBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wO3JldHVybiEoMCE9KDB8KHQ9MHxhclsocj0oQXw9MCkrMTA0fDApPj4yXSkpJiYoMHxhcltBKzEwOD4+Ml0pPj0oMHx0KSkmJjA8PSgwfChlPTB8Z2koQSkpKT8oaT0wfGFyW3I+PjJdLHI9QSs4fDAsaT9pPSgodD1uPTB8YXJbcj4+Ml0pLShyPTB8YXJbQSs0Pj4yXSl8MCk8KDB8KGk9aS0oMHxhclsoZj1BKzEwOHwwKT4+Ml0pfDApKT9uPXQ6KG49cisoaSstMSl8MCx0KTooZj1BKzEwOHwwLG49aT0wfGFyW3I+PjJdLHI9MHxhcltBKzQ+PjJdKSxhcltBKzEwMD4+Ml09biwwfGkmJihhcltmPj4yXT1pKzEtcisoMHxhcltmPj4yXSkpLCgwfGNyWyhyPXIrLTF8MCk+PjBdKSE9KDB8ZSkmJih0cltyPj4wXT1lKSk6bz00LDQ9PSgwfG8pJiYoYXJbQSsxMDA+PjJdPTAsZT0tMSksMHxlfWZ1bmN0aW9uIG1pKEEpe3JldHVybiAxJigzMj09KDB8KEF8PTApKXwoQSstOXwwKT4+PjA8NSl8MH1mdW5jdGlvbiBnaShBKXt2YXIgZSxyO3JldHVybiBlPXVyPShyPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxBPTA9PSgwfFppKEF8PTApKSYmMT09KDB8eGJbNjMmYXJbQSszMj4+Ml1dKEEsZSwxKSk/MHxjcltlPj4wXTotMSx1cj1yLDB8QX1mdW5jdGlvbiBaaShBKXt2YXIgZT0wLHI9MDtyZXR1cm4gcj0wfHRyWyhlPShBfD0wKSs3NHwwKT4+MF0sdHJbZT4+MF09cisyNTV8cixyPUErMjh8MCwoMHxhclsoZT1BKzIwfDApPj4yXSk+Pj4wPigwfGFyW3I+PjJdKT4+PjAmJnhiWzYzJmFyW0ErMzY+PjJdXShBLDAsMCksYXJbQSsxNj4+Ml09MCxhcltyPj4yXT0wLChhcltlPj4yXT0wKXwoZT00JihlPTB8YXJbQT4+Ml0pPyhhcltBPj4yXT0zMnxlLC0xKToocj0oMHxhcltBKzQ0Pj4yXSkrKDB8YXJbQSs0OD4+Ml0pfDAsYXJbQSs4Pj4yXT1yLGFyW0ErND4+Ml09cixlPDwyNz4+MzEpKX1mdW5jdGlvbiBwaShBLGUscil7dmFyIGksZixuO3JldHVybiAwfCgwfChpPUF8PTAsZj1lfD0wLG49cnw9MCwwfChuPTB8ZmwoaXw9MCxmfD0wLG58PTAsMCwtMjE0NzQ4MzY0OCkpKSl9ZnVuY3Rpb24geWkoKXtyZXR1cm4gMHwoMHxhclthclsyNjIyXT4+Ml0/NDoxKX1mdW5jdGlvbiBCaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbztyZXR1cm4gZj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbZj4+Ml09cixyPTB8KG49QSx0PWUsbz1mLDB8WWMobnw9MCwyMTQ3NDgzNjQ3LHR8PTAsb3w9MCkpLHVyPWksMHxyfWZ1bmN0aW9uIEVpKEEsZSl7QXw9MCxlfD0wO3ZhciByLGk7cmV0dXJuIGk9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyW2k+PjJdPUEsYXJbNCtpPj4yXT1lLGU9MHxJYygwfE0oOTEsMHxpKSksdXI9ciwwfGV9ZnVuY3Rpb24gWGkoQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGY9MCxuPTAsdD0wLG89MCxhPTA7Zj0wfGFyWyhlfD0wKT4+Ml0sYT0wIT0oMHxpKSYmMCE9KDB8KG49MHxhcltpPj4yXSkpP0E/KGFyW2k+PjJdPTAsbz1yLHQ9Ziw0Myk6KHQ9ZixpPXIsMjUpOjU7QTpkb3tpZig1PT0oMHxhKSl7aWYoaT0wIT0oMHxBKSwwfGFyW2FyWyhhPTEwNDg4KT4+Ml0+PjJdKXtpZihpKXtpPXIsYT0xNTticmVha31pPXIsYT0xNDticmVha31pZighaSl7cj0wfFZjKGYpLGE9NTk7YnJlYWt9ZTpkb3tpZihyKXtmb3IoaT1yOyhuPTB8dHJbZj4+MF0pPDwyND4+MjQ7KXtpZihmPWYrMXwwLGFyW0E+PjJdPW48PDI0Pj4yNCY1NzM0MywhKGk9aSstMXwwKSlicmVhayBlO0E9QSs0fDB9YXJbQT4+Ml09MCxyPXItaXwoYXJbZT4+Ml09MCksYT01OTticmVhayBBfX13aGlsZSgwKTthcltlPj4yXT1mLGE9NTl9fXdoaWxlKDApO0E6Zm9yKDs7KXtlOmRve2lmKDE0PT0oMHxhKSl7Zm9yKDs7KXtpZigoKDI1NSYobj0wfHRyW2Y+PjBdKSktMXwwKT4+PjA8MTI3JiYwPT0oMyZmfDApJiYobj0yNTUmKGE9MHxhcltmPj4yXSksISgtMjEzOTA2MjE0NCYoYSstMTY4NDMwMDl8YSkpKSl7Zm9yKDtpPWkrLTR8MCwhKC0yMTM5MDYyMTQ0Jigobj0wfGFyWyhmPWYrNHwwKT4+Ml0pKy0xNjg0MzAwOXxuKXwwKTspO24mPTI1NX1pZigxMjc8PSgobiY9MjU1KSstMXwwKT4+PjApYnJlYWs7Zj1mKzF8MCxpPWkrLTF8MH1pZighKDUwPChuPW4rLTE5NHwwKT4+PjApKXtuPTB8YXJbOTg5Nisobjw8Mik+PjJdLHQ9ZisxfDAsYT0yNTtjb250aW51ZSBBfWE9NTN9ZWxzZXtpZigxNT09KDB8YSkpe3I6ZG97aWYoaSl7Zm9yKDs7KXtuPTB8dHJbZj4+MF07ZG97aWYoKCgyNTUmbiktMXwwKT4+PjA8MTI3JiY0PGk+Pj4wJjA9PSgzJmZ8MCkpe2Zvcig7Oyl7aWYoLTIxMzkwNjIxNDQmKChuPTB8YXJbZj4+Ml0pKy0xNjg0MzAwOXxuKXwwKXthPTM4O2JyZWFrfWlmKGFyW0E+PjJdPTI1NSZuLGFyW0ErND4+Ml09Y3JbZisxPj4wXSxhcltBKzg+PjJdPWNyW2YrMj4+MF0sdD1mKzR8MCxuPUErMTZ8MCxhcltBKzEyPj4yXT1jcltmKzM+PjBdLCEoNDwoaT1pKy00fDApPj4+MCkpe2E9Mzc7YnJlYWt9QT1uLGY9dH1pZigzNz09KDB8YSkpe0E9bixuPTB8dHJbKGY9dCk+PjBdO2JyZWFrfWlmKDM4PT0oMHxhKSl7biY9MjU1O2JyZWFrfX19d2hpbGUoMCk7aWYoMTI3PD0oKG4mPTI1NSkrLTF8MCk+Pj4wKWJyZWFrO2lmKGY9ZisxfDAsYXJbQT4+Ml09biwhKGk9aSstMXwwKSlicmVhayByO0E9QSs0fDB9aWYoNTA8KG49bistMTk0fDApPj4+MCl7YT01MzticmVhayBlfW49MHxhcls5ODk2KyhuPDwyKT4+Ml0sbz1pLHQ9ZisxfDAsYT00Mztjb250aW51ZSBBfX13aGlsZSgwKTthcltlPj4yXT1mLGE9NTk7Y29udGludWUgQX1pZigyNT09KDB8YSkpe2lmKCEoNzwoKGE9KDB8Y3JbdD4+MF0pPj4+MykrLTE2fGErKG4+PjI2KSk+Pj4wKSl7aWYoZj10KzF8MCwzMzU1NDQzMiZuKXtpZigoLTY0JnRyW2Y+PjBdKTw8MjQ+PjI0IT0tMTI4KXtmPXQsYT01MjticmVha31pZihmPXQrMnwwLDUyNDI4OCZuKXtpZigoLTY0JnRyW2Y+PjBdKTw8MjQ+PjI0IT0tMTI4KXtmPXQsYT01MjticmVha31mPXQrM3wwfX1pPWkrLTF8MCxhPTE0O2NvbnRpbnVlIEF9Zj10LGE9NTJ9ZWxzZSBpZig0Mz09KDB8YSkpe2lmKCEoNzwoKGY9KGk9KGE9MCl8Y3JbdD4+MF0pPj4+MykrLTE2fGYrKG4+PjI2KSk+Pj4wKSl7Zj10KzF8MCxpPWkrLTEyOHxuPDw2O2Rve2lmKCgwfGkpPDApe2lmKDYzPChuPSgwfGNyW2Y+PjBdKS0xMjh8MCk+Pj4wKXtmPXQrLTF8MCxyPUE7YnJlYWsgZX1pZihmPXQrMnwwLCgwfChpPW58aTw8NikpPDApe2lmKDYzPChuPSgwfGNyW2Y+PjBdKS0xMjh8MCk+Pj4wKXtmPXQrLTF8MCxyPUE7YnJlYWsgZX1mPXQrM3wwLGk9bnxpPDw2O2JyZWFrfX19d2hpbGUoMCk7YXJbQT4+Ml09aSxBPUErNHwwLGk9bystMXwwLGE9MTU7Y29udGludWUgQX1mPXQsaT1vLGE9NTJ9ZWxzZSBpZig1OT09KDB8YSkpcmV0dXJuIDB8cn19d2hpbGUoMCk7aWYoNTI9PSgwfGEpJiYoZj1mKy0xfChhPTApLG4/cj1BOmE9NTMpLDUzPT0oMHxhKSl7aWYoISgwfHRyW2Y+PjBdKSl7MHxBJiYoYXJbQT4+Ml09MCxhcltlPj4yXT0wKSxyPXItaXwwLGE9NTk7Y29udGludWV9cj1BfWFyWyhhPTEwMzY0KT4+Ml09ODQscj8oYXJbZT4+Ml09ZixyPS0xLGE9NTkpOihyPS0xLGE9NTkpfXJldHVybiAwfWZ1bmN0aW9uIFdpKEEpe3ZhciBlPTAscj0wLGk9MDswPD0oMHxhclsoQXw9MCkrNzY+PjJdKSYmMCE9KDB8SmMoKSk/ZT0ocj0wfGFyWyhlPUErNHwwKT4+Ml0pPj4+MDwoMHxhcltBKzg+PjJdKT4+PjA/KGFyW2U+PjJdPXIrMSwwfGNyW3I+PjBdKTowfGdpKEEpOmk9Mztkb3tpZigzPT0oMHxpKSl7aWYoKHI9MHxhclsoZT1BKzR8MCk+PjJdKT4+PjA8KDB8YXJbQSs4Pj4yXSk+Pj4wKXthcltlPj4yXT1yKzEsZT0wfGNyW3I+PjBdO2JyZWFrfWU9MHxnaShBKTticmVha319d2hpbGUoMCk7cmV0dXJuIDB8ZX1mdW5jdGlvbiBJaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZjtyZXR1cm4gZj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbZj4+Ml09cixyPTB8UWMoQSxlLGYpLHVyPWksMHxyfWZ1bmN0aW9uIENpKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwO0E6ZG97aWYoQSl7ZTpkb3tpZigzPHI+Pj4wKXtmb3IoaT1yLHQ9MHxhcltlPj4yXTs7KXtpZigxMjY8KChvPTB8YXJbdD4+Ml0pKy0xfDApPj4+MCl7aWYoIW8pYnJlYWs7aWYoLTE9PSgwfChvPTB8JGMoQSxvKSkpKXtyPS0xO2JyZWFrIEF9QT1BK298MCxpPWktb3wwfWVsc2UgdHJbQT4+MF09byxBPUErMXwwLGk9aSstMXwwLHQ9MHxhcltlPj4yXTtpZih0PXQrNHwwLGFyW2U+PjJdPXQsaT4+PjA8PTMpYnJlYWsgZX10cltBPj4wXT0wLHI9ci1pfChhcltlPj4yXT0wKTticmVhayBBfWk9cn13aGlsZSgwKTtpZihpKXtmb3IodD0wfGFyW2U+PjJdOzspe2lmKDEyNjwoKG89MHxhclt0Pj4yXSkrLTF8MCk+Pj4wKXtpZighbyl7dD0xOTticmVha31pZigtMT09KDB8KG89MHwkYyhmLG8pKSkpe3I9LTE7YnJlYWsgQX1pZihpPj4+MDxvPj4+MCl7dD0yMjticmVha30kYyhBLDB8YXJbdD4+Ml0pLEE9QStvfDAsaT1pLW98MH1lbHNlIHRyW0E+PjBdPW8sQT1BKzF8MCxpPWkrLTF8MCx0PTB8YXJbZT4+Ml07aWYodD10KzR8MCxhcltlPj4yXT10LCFpKWJyZWFrIEF9aWYoMTk9PSgwfHQpKXt0cltBPj4wXT0wLHI9ci1pfChhcltlPj4yXT0wKTticmVha31pZigyMj09KDB8dCkpe3I9ci1pfDA7YnJlYWt9fX1lbHNlIGlmKHI9MHxhcltlPj4yXSxpPTB8YXJbcj4+Ml0pe0E9cixyPTA7ZG97aWYoMTI3PGk+Pj4wKXtpZigtMT09KDB8KGk9MHwkYyhmLGkpKSkpe3I9LTE7YnJlYWsgQX19ZWxzZSBpPTE7cj1pK3J8MCxpPTB8YXJbKEE9QSs0fDApPj4yXX13aGlsZSgwIT0oMHxpKSl9ZWxzZSByPTB9d2hpbGUoMCk7cmV0dXJuIHVyPW4sMHxyfWZ1bmN0aW9uIEdpKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wO3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLGk9MHxhclsoZj0wPT0oMHwoaXw9MCkpPzU4MTUyOmkpPj4yXTtBOmRve2lmKGUpaWYobz0wPT0oMHxBKT90OkEscil7aWYoaSl0PXIsYT0xMTtlbHNle2lmKC0xPChpPTB8dHJbZT4+MF0pPDwyND4+MjQpe2FyW28+PjJdPTI1NSZpLGk9aTw8MjQ+PjI0IT0wJjE7YnJlYWt9aWYodD0xMDQ4OCxpPTB8dHJbZT4+MF0sISgwfGFyW2FyW3Q+PjJdPj4yXSkpe2FyW28+PjJdPWk8PDI0Pj4yNCY1NzM0MyxpPTE7YnJlYWt9aWYoNTA8KGk9KDI1NSZpKS0xOTR8MCk+Pj4wKXthPTE3O2JyZWFrfWk9MHxhcls5ODk2KyhpPDwyKT4+Ml0sKHQ9cistMXwwKSYmKGU9ZSsxfDAsYT0xMSl9ZTpkb3tpZigxMT09KDB8YSkpe2lmKDc8KChjPSgyNTUmKEE9MHx0cltlPj4wXSkpPj4+MykrLTE2fGMrKGk+PjI2KSk+Pj4wKXthPTE3O2JyZWFrIEF9Zm9yKDtlPWUrMXwwLHQ9dCstMXwwLCEoMDw9KDB8KGk9KDI1NSZBKS0xMjh8aTw8NikpKTspe2lmKCF0KWJyZWFrIGU7aWYoKC02NCYoQT0wfHRyW2U+PjBdKSk8PDI0Pj4yNCE9LTEyOCl7YT0xNzticmVhayBBfX1hcltmPj4yXT0wLGFyW28+PjJdPWksaT1yLXR8MDticmVhayBBfX13aGlsZSgwKTthcltmPj4yXT1pLGk9LTJ9ZWxzZSBpPS0yO2Vsc2UgaT9hPTE3Omk9MH13aGlsZSgwKTtyZXR1cm4gMTc9PSgwfGEpJiYoYXJbZj4+Ml09MCxhclsoaT0xMDM2NCk+PjJdPTg0LGk9LTEpLHVyPW4sMHxpfWZ1bmN0aW9uIFZpKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wLHU9MCxiPTA7dD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzEwNDB8MCxuPTgrdHwwLGI9MHxhclsoZXw9MCk+PjJdLGw9KG89MCE9KDB8QSkpP2k6MjU2LEE9bz9BOm4sYz1hclt0Pj4yXT1iO0E6ZG97aWYoMCE9KDB8bCkmMCE9KDB8Yikpe2ZvcihpPTAsYj1yOzspe2lmKCEoMTMxPGI+Pj4wfChyPWw+Pj4wPD0odT1iPj4+Mik+Pj4wKSkpe3I9YjticmVhayBBfWlmKHI9Yi0oYz1yP2w6dSl8MCwtMT09KDB8KGM9MHxYaShBLHQsYyxmKSkpKWJyZWFrO2lmKEE9KGI9KDB8QSk9PSgwfG4pKT9BOkErKGM8PDIpfDAsaT1jK2l8MCwhKDAhPSgwfChsPWwtKGI/MDpjKXwwKSkmMCE9KDB8KGM9MHxhclt0Pj4yXSkpKSlicmVhayBBO2I9cn1pPS0xLGM9KGw9MCl8YXJbdD4+Ml19ZWxzZSBpPTB9d2hpbGUoMCk7QTpkb3tpZigwIT0oMHxjKSYmMCE9KDB8bCkmMCE9KDB8cikpe2Zvcih1PUE7ISgoKEE9MHxHaSh1LGMscixmKSkrMnwwKT4+PjA8Myk7KXtpZihjPSgwfGFyW3Q+PjJdKStBfDAsYXJbdD4+Ml09YyxpPWkrMXwwLCEoMCE9KDB8KGw9bCstMXwwKSkmMCE9KDB8KHI9ci1BfDApKSkpYnJlYWsgQTt1PXUrNHwwfXN3aXRjaCgwfEEpe2Nhc2UtMTppPS0xO2JyZWFrIEE7Y2FzZSAwOmFyW3Q+PjJdPTA7YnJlYWsgQTtkZWZhdWx0OmFyW2Y+PjJdPTA7YnJlYWsgQX19fXdoaWxlKDApO3JldHVybiBvJiYoYXJbZT4+Ml09YXJbdD4+Ml0pLHVyPWEsMHxpfWZ1bmN0aW9uIEZpKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wO3Q9dXI9KGE9dXIpKzMxJi0zMix1cj11cisyNzJ8MCxuPTgrdHwwLGw9MHxhclsoZXw9MCk+PjJdLGM9KG89MCE9KDB8QSkpP2k6MjU2LEE9bz9BOm4saT1hclt0Pj4yXT1sO0E6ZG97aWYoMCE9KDB8YykmMCE9KDB8bCkpe2ZvcihmPTAsbD1pOzspe2lmKCEoKGk9Yz4+PjA8PXI+Pj4wKXwzMjxyPj4+MCkpe2k9bDticmVhayBBfWlmKHI9ci0oaT1pP2M6cil8MCwtMT09KDB8KGk9MHxDaShBLHQsaSwwKSkpKWJyZWFrO2lmKEE9KGw9KDB8QSk9PSgwfG4pKT9BOkEraXwwLGY9aStmfDAsISgwIT0oMHwoYz1jLShsPzA6aSl8MCkpJjAhPSgwfChpPTB8YXJbdD4+Ml0pKSkpYnJlYWsgQTtsPWl9Zj0tMSxpPShjPTApfGFyW3Q+PjJdfWVsc2UgZj0wfXdoaWxlKDApO0E6ZG97aWYoMCE9KDB8aSkmJjAhPSgwfGMpJjAhPSgwfHIpKXtmb3IobD1BOyEoKChBPTB8JGMobCwwfGFyW2k+PjJdKSkrMXwwKT4+PjA8Mik7KXtpZihpPTQrKDB8YXJbdD4+Ml0pfDAsYXJbdD4+Ml09aSxmPUErZnwwLCEoMCE9KDB8KGM9Yy1BfDApKSYwIT0oMHwocj1yKy0xfDApKSkpYnJlYWsgQTtsPWwrQXwwfUE/Zj0tMTphclt0Pj4yXT0wfX13aGlsZSgwKTtyZXR1cm4gbyYmKGFyW2U+PjJdPWFyW3Q+PjJdKSx1cj1hLDB8Zn1mdW5jdGlvbiBSaShBLGUscil7QXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtzd2l0Y2goMHwoZXw9MCkpe2Nhc2UgMDphPS0xNDksYz0yNCx0PTQ7YnJlYWs7Y2FzZSAxOmNhc2UgMjphPS0xMDc0LGM9NTMsdD00O2JyZWFrO2RlZmF1bHQ6aT0wfUE6ZG97aWYoND09KDB8dCkpe2Zvcih1PUErNHwwLGw9QSsxMDB8MDswIT0oMHxtaShlPShlPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wPyhhclt1Pj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkpOyk7ZTpkb3tzd2l0Y2goMHxlKXtjYXNlIDQzOmNhc2UgNDU6aWYobj0xLSgoNDU9PSgwfGUpJjEpPDwxKXwwLChlPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wKXthclt1Pj4yXT1lKzEsZj0wfGNyW2U+PjBdO2JyZWFrIGV9Zj0wfHZpKEEpO2JyZWFrIGU7ZGVmYXVsdDpmPWUsbj0xfX13aGlsZSgwKTtlPTA7ZG97aWYoKDMyfGYpIT0oMHx0cls1Mjg5MCtlPj4wXSkpYnJlYWs7ZG97aWYoZT4+PjA8Nyl7aWYoKGY9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjApe2FyW3U+PjJdPWYrMSxmPTB8Y3JbZj4+MF07YnJlYWt9Zj0wfHZpKEEpO2JyZWFrfX13aGlsZSgwKTtlPWUrMXwwfXdoaWxlKGU+Pj4wPDgpO2U6ZG97c3dpdGNoKDB8ZSl7Y2FzZSA4OmJyZWFrO2Nhc2UgMzp0PTIzO2JyZWFrO2RlZmF1bHQ6aWYoKG89MCE9KDB8cikpJjM8ZT4+PjApe2lmKDg9PSgwfGUpKWJyZWFrIGU7dD0yMzticmVhayBlfXI6ZG97aWYoIWUpe2U9MDtkb3tpZigoMzJ8ZikhPSgwfHRyWzUyODk5K2U+PjBdKSlicmVhayByO2Rve2lmKGU+Pj4wPDIpe2lmKChmPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltsPj4yXSk+Pj4wKXthclt1Pj4yXT1mKzEsZj0wfGNyW2Y+PjBdO2JyZWFrfWY9MHx2aShBKTticmVha319d2hpbGUoMCk7ZT1lKzF8MH13aGlsZShlPj4+MDwzKX19d2hpbGUoMCk7c3dpdGNoKDB8ZSl7Y2FzZSAzOmlmKDQwIT0oMHwoZT0oZT0wfGFyW3U+PjJdKT4+PjA8KDB8YXJbbD4+Ml0pPj4+MD8oYXJbdT4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl7aWYoISgwfGFyW2w+PjJdKSl7aT1oO2JyZWFrIEF9YXJbdT4+Ml09KDB8YXJbdT4+Ml0pLTEsaT1oO2JyZWFrIEF9Zm9yKGU9MTsoKGY9KGY9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjA/KGFyW3U+PjJdPWYrMSwwfGNyW2Y+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwfChmKy02NXwwKT4+PjA8MjZ8fDk1PT0oMHxmKXwoZistOTd8MCk+Pj4wPDI2OyllPWUrMXwwO2lmKDQxPT0oMHxmKSl7aT1oO2JyZWFrIEF9aWYoKGY9MD09KDB8YXJbbD4+Ml0pKXx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwhbyl7YXJbKHU9MTAzNjQpPj4yXT0yMixubChBLDApLGk9MDticmVhayBBfWlmKCFlKXtpPWg7YnJlYWsgQX1mb3IoOzspaWYoZT1lKy0xfDAsZnx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwhZSl7aT1oO2JyZWFrIEF9Y2FzZSAwOmlmKDQ4PT0oMHxmKSl7aWYoMTIwPT0oMzJ8KGU9KGU9MHxhclt1Pj4yXSk+Pj4wPCgwfGFyW2w+PjJdKT4+PjA/KGFyW3U+PjJdPWUrMSwwfGNyW2U+PjBdKTowfHZpKEEpKSkpe2k9K05pKEEsYyxhLG4scik7YnJlYWsgQX1lPSgwfGFyW2w+PjJdJiYoYXJbdT4+Ml09KDB8YXJbdT4+Ml0pLTEpLDQ4KX1lbHNlIGU9ZjtpPStfaShBLGUsYyxhLG4scik7YnJlYWsgQTtkZWZhdWx0OjB8YXJbbD4+Ml0mJihhclt1Pj4yXT0oMHxhclt1Pj4yXSktMSksYXJbKHU9MTAzNjQpPj4yXT0yMixubChBLDApLGk9MDticmVhayBBfX19d2hpbGUoMCk7aWYoMjM9PSgwfHQpJiYoKGY9MD09KDB8YXJbbD4+Ml0pKXx8KGFyW3U+PjJdPSgwfGFyW3U+PjJdKS0xKSwwIT0oMHxyKSYzPGU+Pj4wKSlmb3IoO2Z8fChhclt1Pj4yXT0oMHxhclt1Pj4yXSktMSksMzwoZT1lKy0xfDApPj4+MDspO2k9KDB8bikqd319d2hpbGUoMCk7cmV0dXJuK2l9ZnVuY3Rpb24gTmkoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO2E9KG89KG89MHxhclsoZz0oQXw9MCkrNHwwKT4+Ml0pPj4+MDwoMHxhclsobj1BKzEwMHwwKT4+Ml0pPj4+MD8oYXJbZz4+Ml09bysxLDB8Y3Jbbz4+MF0pOjB8dmkoQSksMCk7QTpmb3IoOzspe3N3aXRjaCgwfG8pe2Nhc2UgNDY6Yj04O2JyZWFrIEE7Y2FzZSA0ODpicmVhaztkZWZhdWx0OmQ9MSxoPWEsbD11PWs9YT1tPXQ9dj13PTA7YnJlYWsgQX0obz0wfGFyW2c+PjJdKT4+PjA8KDB8YXJbbj4+Ml0pPj4+MD8oYXJbZz4+Ml09bysxLG89MHxjcltvPj4wXSxhPTEpOihvPTB8dmkoQSksYT0xKX1pZig4PT0oMHxiKSlpZig0OD09KDB8KG89KG89MHxhcltnPj4yXSk+Pj4wPCgwfGFyW24+PjJdKT4+PjA/KGFyW2c+PjJdPW8rMSwwfGNyW28+PjBdKTowfHZpKEEpKSkpe2ZvcihhPWw9MDtvPShvPTB8YXJbZz4+Ml0pPj4+MDwoMHxhcltuPj4yXSk+Pj4wPyhhcltnPj4yXT1vKzEsMHxjcltvPj4wXSk6MHx2aShBKSxsPTB8dGIoMHxsLDB8YSwtMSwtMSksYT1ELDQ4PT0oMHxvKTspO2g9ZD13PTEsdT1rPW09dD12PTB9ZWxzZSBkPXc9MSxoPWEsbD11PWs9YT1tPXQ9dj0wO2Zvcig7cz00Nj09KDB8byksISgxMDw9KGI9bystNDh8MCk+Pj4wKXx8c3woKDMyfG8pLTk3fDApPj4+MDw2Oyl7aWYocyl7aWYodyl7bz00NjticmVha313PTEsYj12LGM9ZCxvPW0sbD11LGE9a31lbHNle289NTc8KDB8byk/KDMyfG8pLTg3fDA6Yjtkb3tpZighKCgwfGspPDB8MD09KDB8aykmdT4+PjA8OCkpe2lmKCgwfGspPDB8MD09KDB8aykmdT4+PjA8MTQpe2I9dix0Kz0oYz1kKj0uMDYyNSkqKDB8byksbz1tO2JyZWFrfWI9KG89MCE9KDB8dil8MD09KDB8bykpP3Y6MSxjPWQsdD1vP3Q6dCsuNSpkLG89bTticmVha31iPXYsYz1kLG89bysobTw8NCl8MH13aGlsZSgwKTt1PTB8dGIoMHx1LDB8aywxLDApLGg9MSxrPUR9bz0ocz0wfGFyW2c+PjJdKT4+PjA8KDB8YXJbbj4+Ml0pPj4+MD8oYXJbZz4+Ml09cysxLHY9YixkPWMsbT1vLDB8Y3Jbcz4+MF0pOih2PWIsZD1jLG09bywwfHZpKEEpKX1kb3tpZihoKXtpZihzPShiPTA9PSgwfHcpKT91OmwsYj1iP2s6YSwoMHxrKTwwfDA9PSgwfGspJnU+Pj4wPDgpe2ZvcihhPW0sbD1rO2E8PD00LHU9MHx0YigwfHUsMHxsLDEsMCksKDB8KGw9RCkpPDB8MD09KDB8bCkmdT4+PjA8ODspO3U9YX1lbHNlIHU9bTtpZigxMTI9PSgzMnxvKSl7aWYoMD09KDB8KGE9MHxZaShBLGYpKSkmLTIxNDc0ODM2NDg9PSgwfChvPUQpKSl7aWYoIWYpe25sKEEsMCksdD0wO2JyZWFrfW89YT0oMHxhcltuPj4yXSYmKGFyW2c+PjJdPSgwfGFyW2c+PjJdKS0xKSwwKX19ZWxzZSBvPWE9KDB8YXJbbj4+Ml0mJihhcltnPj4yXT0oMHxhcltnPj4yXSktMSksMCk7aWYobD0wfHRiKDB8KGw9MHxkYigwfHMsMHxiLDIpKSwwfEQsLTMyLC0xKSxsPTB8dGIoMHxsLDB8RCwwfGEsMHxvKSxvPUQsIXUpe3Q9MCooMHxpKTticmVha31pZigoMHwoZj0oKDB8KGc9MC1yfDApKTwwKTw8MzE+PjMxKSk8KDB8byl8KDB8byk9PSgwfGYpJmc+Pj4wPGw+Pj4wKXthclsoZT0xMDM2NCk+PjJdPTM0LHQ9MTc5NzY5MzEzNDg2MjMxNTdlMjkyKigwfGkpKjE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVha31pZigoMHxvKTwoMHwoZj0oKDB8KGc9cistMTA2fDApKTwwKTw8MzE+PjMxKSl8KDB8byk9PSgwfGYpJmw+Pj4wPGc+Pj4wKXthclsoZT0xMDM2NCk+PjJdPTM0LHQ9MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCooMHxpKSoyMjI1MDczODU4NTA3MjAxNGUtMzI0O2JyZWFrfWlmKC0xPCgwfHUpKXtmb3IoYT11O2E9YTw8MXwxJigxXihnPSEoLjU8PXQpKSksdCs9Zz90OnQrLTEsbD0wfHRiKDB8bCwwfG8sLTEsLTEpLG89RCwtMTwoMHxhKTspO2Q9dCx1PWF9ZWxzZSBkPXQ7bz0wfHRiKDB8KHI9MHxvYigzMiwwLDB8ciwoKDB8cik8MCk8PDMxPj4zMXwwKSksMHxELDB8bCwwfG8pLDU5PT0oMHwoYj0oMHwocj1EKSk8KDB8KGc9KCgwfGUpPDApPDwzMT4+MzEpKXwoMHxnKT09KDB8cikmbz4+PjA8ZT4+PjA/MDwoMHxvKT81OTooYT0wLG89ODQsNjEpOihvPWUsNTkpKSkmJigoMHxvKTw1Mz8obz04NC0oYT1vKXwwLGI9NjEpOnQ9KygoYz0wKXxpKSksNjE9PSgwfGIpJiYodD0rKDB8aSksYz0rRGkoK1FpKDEsbyksdCksbz1hKSwwPT0odD10KigoaT0wPT0oMSZ1fDApJjAhPWQmKDB8byk8MzIpPzA6ZCkrKGMrdCooKCgxJmkpK3V8MCk+Pj4wKSktYykmJihhclsoaT0xMDM2NCk+PjJdPTM0KSx0PStNaSh0LGwpfWVsc2UoYT0wIT0oMHwobz0wfGFyW24+PjJdKSkpJiYoYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLTEpLGY/KGEmJihhcltnPj4yXT0oMHxhcltnPj4yXSktMSksMD09KDB8dyl8MD09KDB8byl8fChhcltnPj4yXT0oMHxhcltnPj4yXSktMSkpOm5sKEEsMCksdD0wKigwfGkpfXdoaWxlKDApO3JldHVybit0fWZ1bmN0aW9uIF9pKEEsZSxyLGksZixuKXtlfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTA7dD11cj0obz11cikrMzEmLTMyLHVyPXVyKzUxMnwwLEc9MC0oQz0oaXw9MCkrKHJ8PTApfDApfDAsWD0oQXw9MCkrNHwwLFc9QSsxMDB8MCxsPTA7QTpmb3IoOzspe3N3aXRjaCgwfGUpe2Nhc2UgNDY6Qj02O2JyZWFrIEE7Y2FzZSA0ODpicmVhaztkZWZhdWx0OmQ9bCxzPWs9Zz0wO2JyZWFrIEF9KGU9MHxhcltYPj4yXSk+Pj4wPCgwfGFyW1c+PjJdKT4+PjA/KGFyW1g+PjJdPWUrMSxlPTB8Y3JbZT4+MF0sbD0xKTooZT0wfHZpKEEpLGw9MSl9aWYoNj09KDB8QikpaWYoNDg9PSgwfChlPShlPTB8YXJbWD4+Ml0pPj4+MDwoMHxhcltXPj4yXSk+Pj4wPyhhcltYPj4yXT1lKzEsMHxjcltlPj4wXSk6MHx2aShBKSkpKWZvcihlPWw9MDs7KXtpZihsPTB8dGIoMHxsLDB8ZSwtMSwtMSkscz1ELDQ4IT0oMHwoZT0oZT0wfGFyW1g+PjJdKT4+PjA8KDB8YXJbVz4+Ml0pPj4+MD8oYXJbWD4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl7ZD1nPTEsaz1sO2JyZWFrfWU9c31lbHNlIGc9MSxkPWwscz1rPTA7Yj1lKy00OHwoYXJbdD4+Ml09MCksdT00Nj09KDB8ZSk7QTpkb3tpZih1fGI+Pj4wPDEwKXtFPTQ5Nit0fDAscD1nLHk9ZCxCPWIsYj1kPW09bD1aPTA7ZTpmb3IoOzspe2Rve2lmKHUpe2lmKHApYnJlYWsgZTtwPTEsaz1kLHM9Yn1lbHNle2lmKGQ9MHx0YigwfGQsMHxiLDEsMCksYj1ELGc9NDghPSgwfGUpLDEyNTw9KDB8bCkpe2lmKCFnKWJyZWFrO2FyW0U+PjJdPTF8YXJbRT4+Ml07YnJlYWt9dT10KyhsPDwyKXwwLGU9Wj9lKy00OCsoMTAqKDB8YXJbdT4+Ml0pfDApfDA6Qixhclt1Pj4yXT1lLFo9KHk9OT09KDB8KFo9WisxfDApKSk/MDpaLGw9KDEmeSkrbHwwLG09Zz9kOm0seT0xfX13aGlsZSgwKTtpZighKCh1PTQ2PT0oMHwoZT0oZT0wfGFyW1g+PjJdKT4+PjA8KDB8YXJbVz4+Ml0pPj4+MD8oYXJbWD4+Ml09ZSsxLDB8Y3JbZT4+MF0pOjB8dmkoQSkpKSl8KEI9ZSstNDh8MCk+Pj4wPDEwKSl7Zz1wLHU9eSxCPTI5O2JyZWFrIEF9fWU9Wix1PTAhPSgwfHkpLEI9Mzd9ZWxzZSB1PWQsYj1kPW09bD1aPTAsQj0yOX13aGlsZSgwKTtkb3tpZigyOT09KDB8Qikpe2lmKGs9KEU9MD09KDB8ZykpP2Q6ayxzPUU/YjpzLCEoKHU9MCE9KDB8dSkpJjEwMT09KDMyfGUpKSl7aWYoLTE8KDB8ZSkpe2U9WixCPTM3O2JyZWFrfWU9WixCPTM5O2JyZWFrfWlmKDA9PSgwfCh1PTB8WWkoQSxuKSkpJi0yMTQ3NDgzNjQ4PT0oMHwoZT1EKSkpe2lmKCFuKXtubChBLDApLGE9MDticmVha31lPXU9KDB8YXJbVz4+Ml0mJihhcltYPj4yXT0oMHxhcltYPj4yXSktMSksMCl9eT0wfHRiKDB8dSwwfGUsMHxrLDB8cyksZT1aLHM9RCxCPTQxfX13aGlsZSgwKTszNz09KDB8QikmJihCPTB8YXJbVz4+Ml0/KGFyW1g+PjJdPSgwfGFyW1g+PjJdKS0xLHU/KHk9ayw0MSk6NDApOjM5KSwzOT09KDB8QikmJihCPXU/KHk9ayw0MSk6NDApO2Rve2lmKDQwPT0oMHxCKSlhclsoRz0xMDM2NCk+PjJdPTIyLG5sKEEsMCksYT0wO2Vsc2UgaWYoNDE9PSgwfEIpKXtpZighKHU9MHxhclt0Pj4yXSkpe2E9MCooMHxmKTticmVha31pZigoMHx5KT09KDB8ZCkmKDB8cyk9PSgwfGIpJigoMHxiKTwwfDA9PSgwfGIpJmQ+Pj4wPDEwKSYmMzA8KDB8cil8MD09KHU+Pj5yfDApKXthPSgwfGYpKih1Pj4+MCk7YnJlYWt9aWYoKDB8KFc9KCgwfChBPSgwfGkpLy0yfDApKTwwKTw8MzE+PjMxKSk8KDB8cyl8KDB8cyk9PSgwfFcpJkE+Pj4wPHk+Pj4wKXthclsoRz0xMDM2NCk+PjJdPTM0LGE9MTc5NzY5MzEzNDg2MjMxNTdlMjkyKigwfGYpKjE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVha31pZigoMHxzKTwoMHwoVz0oKDB8KEE9aSstMTA2fDApKTwwKTw8MzE+PjMxKSl8KDB8cyk9PSgwfFcpJnk+Pj4wPEE+Pj4wKXthclsoRz0xMDM2NCk+PjJdPTM0LGE9MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCooMHxmKSoyMjI1MDczODU4NTA3MjAxNGUtMzI0O2JyZWFrfWlmKGUpe2lmKCgwfGUpPDkpe2Zvcih1PTB8YXJbKGI9dCsobDw8Mil8MCk+PjJdO3U9MTAqdXwwLDkhPSgwfChlPWUrMXwwKSk7KTthcltiPj4yXT11fWw9bCsxfDB9aWYoKDB8bSk8OSYmKDB8bSk8PSgwfHkpJigwfHkpPDE4KXtpZihlPTB8YXJbdD4+Ml0sOT09KDB8eSkpe2E9KDB8ZikqKGU+Pj4wKTticmVha31pZigoMHx5KTw5KXthPSgwfGYpKihlPj4+MCkvKDB8YXJbMTQwMTIrKDgteTw8Mik+PjJdKTticmVha31pZigzMDwoMHwoQT1yKzI3KygwfGJyKHksLTMpKXwwKSl8MD09KGU+Pj5BfDApKXthPSgwfGYpKihlPj4+MCkqKDB8YXJbMTQwMTIrKHkrLTEwPDwyKT4+Ml0pO2JyZWFrfX1pZihlPSgwfHkpJTl8MCl7aWYoZD0wfGFyWzE0MDEyKyg4LShtPS0xPCgwfHkpP2U6ZSs5fDApPDwyKT4+Ml0sbCl7Zm9yKGs9MWU5LygwfGQpfDAsdT15LGU9cz1iPTA7QT0oKChXPTB8YXJbKFg9dCsoZTw8Mil8MCk+PjJdKT4+PjApLyhkPj4+MCl8MCkrYnwwLGFyW1g+PjJdPUEsYj0wfGJyKGssKFc+Pj4wKSUoZD4+PjApfDApLHU9KEE9KDB8ZSk9PSgwfHMpJjA9PSgwfEEpKT91Ky05fDA6dSxzPUE/cysxJjEyNzpzLCgwfChlPWUrMXwwKSkhPSgwfGwpOyk7Yj8oYXJbdCsobDw8Mik+PjJdPWIsYj1zLGw9bCsxfDApOmI9c31lbHNlIGw9Yj0wLHU9eTt5PTktbSt1fChlPTApfWVsc2UgYj1lPTA7QTpmb3IoOzspe2ZvcihtPSgwfHkpPDE4LGc9MTg9PSgwfHkpLFo9dCsoYjw8Mil8MDs7KXtpZighbSl7aWYoIWcpe3U9eTticmVhayBBfWlmKDkwMDcxOTk8PSgwfGFyW1o+PjJdKT4+PjApe3U9MTg7YnJlYWsgQX19Zm9yKGw9KHA9bCkrMTI3fCh1PTApO2w9MHx0YigwfChsPTB8ZGIoMHxhclsoZD10Kygocz0xMjcmbCk8PDIpfDApPj4yXSwwLDI5KSksMHxELDB8dSwwKSwwPCh1PUQpPj4+MHwwPT0oMHx1KSYxZTk8bD4+PjA/KGs9MHxsYigwfGwsMHx1LDFlOSwwKSxsPTB8dWIoMHxsLDB8dSwxZTksMCkpOms9MCxwPTA9PSgwfChhcltkPj4yXT1sKSkmKDFeKCgwfHMpIT0ocCsxMjcmMTI3fDApfChBPSgwfHMpPT0oMHxiKSkpKT9zOnAsIUE7KXU9ayxsPXMrLTF8MDtpZihlPWUrLTI5fDAsMHxrKWJyZWFrO2w9cH1sPXArMTI3JjEyNyx1PXQrKChwKzEyNiYxMjcpPDwyKXwwLCgwfChiPWIrMTI3JjEyNykpPT0oMHxwKT9hclt1Pj4yXT1hclt1Pj4yXXxhclt0KyhsPDwyKT4+Ml06bD1wLGFyW3QrKGI8PDIpPj4yXT1rLHk9eSs5fDB9QTpmb3IoOzspe2ZvcihaPWwrMSYxMjcscD10KygobCsxMjcmMTI3KTw8Mil8MDs7KXtmb3Ioaz0xOD09KDB8dSksZz0yNzwoMHx1KT85OjEseT1iOzspe2ZvcihiPTA7Oyl7aWYoKDB8KHM9Yit5JjEyNykpPT0oMHxsKSl7ST0yLEI9ODg7YnJlYWt9aWYoKHM9MHxhclt0KyhzPDwyKT4+Ml0pPj4+MDwoZD0wfGFyWzE0MDQ0KyhiPDwyKT4+Ml0pPj4+MCl7ST0yLEI9ODg7YnJlYWt9aWYoZD4+PjA8cz4+PjApYnJlYWs7aWYoMjw9KDB8KGI9YisxfDApKSl7ST1iLEI9ODg7YnJlYWt9fWlmKDg4PT0oMHxCKSYmayYyPT0oKEI9MCl8SSkpe3M9YT0wO2JyZWFrIEF9aWYoZT1nK2V8MCwoMHx5KSE9KDB8bCkpYnJlYWs7eT1sfWZvcihrPSgxPDxnKS0xfDAsbT0xZTk+Pj5nLGQ9MCxzPWI9eTtBPSgoVz0wfGFyWyhYPXQrKHM8PDIpfDApPj4yXSk+Pj5nKStkfDAsYXJbWD4+Ml09QSxkPTB8YnIoVyZrLG0pLHU9KEE9KDB8cyk9PSgwfGIpJjA9PSgwfEEpKT91Ky05fDA6dSxiPUE/YisxJjEyNzpiLCgwfChzPXMrMSYxMjcpKSE9KDB8bCk7KTtpZihkKXtpZigoMHxaKSE9KDB8YikpYnJlYWs7YXJbcD4+Ml09MXxhcltwPj4yXX19YXJbdCsobDw8Mik+PjJdPWQsbD1afWZvcig7dT1sKzEmMTI3LCgwfChiPXMreSYxMjcpKT09KDB8bCkmJihhclt0Kyh1Ky0xPDwyKT4+Ml09MCxsPXUpLGE9MWU5KmErICsoKDB8YXJbdCsoYjw8Mik+PjJdKT4+PjApLDIhPSgwfChzPXMrMXwwKSk7KTtpZihjPSh2PSsoMHxmKSkqYSxoPSgwfChiPShrPSgwfChkPShzPWUrNTN8MCktaXwwKSk8KDB8cikpPzA8KDB8ZCk/ZDowOnIpKTw1Mz8odz0rRGkoK1FpKDEsMTA1LWJ8MCksYykpKyhjLShhPWg9K0ppKGMsK1FpKDEsNTMtYnwwKSkpKTooYT13PTAsYyksKDB8KHU9eSsyJjEyNykpIT0oMHxsKSl7dT0wfGFyW3QrKHU8PDIpPj4yXTtkb3tpZig1ZTg8PXU+Pj4wKXtpZig1ZTghPSgwfHUpKXthPS43NSp2K2E7YnJlYWt9aWYoKHkrMyYxMjd8MCk9PSgwfGwpKXthPS41KnYrYTticmVha31hPS43NSp2K2E7YnJlYWt9aWYoMD09KDB8dSkmJih5KzMmMTI3fDApPT0oMHxsKSlicmVhazthPS4yNSp2K2F9d2hpbGUoMCk7Yz0xPCg1My1ifDApJiYwPT0rSmkoYSwxKT9hKzE6YX1lbHNlIGM9YTthPWgrYy13O2Rve2lmKCgtMi1DfDApPCgyMTQ3NDgzNjQ3JnN8MCkpe2lmKGE9KEM9ISg5MDA3MTk5MjU0NzQwOTkyPD0rVigrYSkpKT9hOi41KmEsKChlPSgxJigxXkMpKStlfDApKzUwfDApPD0oMHxHKSYmISgwIT1jJmsmKCgwfGIpIT0oMHxkKXxDKSkpYnJlYWs7YXJbKEc9MTAzNjQpPj4yXT0zNH19d2hpbGUoMCk7YT0rTWkoYSxlKX19d2hpbGUoMCk7cmV0dXJuIHVyPW8sK2F9ZnVuY3Rpb24gWWkoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO3N3aXRjaCgwfChpPShpPTB8YXJbKGE9KEF8PTApKzR8MCk+PjJdKT4+PjA8KDB8YXJbKHI9QSsxMDB8MCk+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSl7Y2FzZSA0MzpjYXNlIDQ1OmY9NDU9PSgwfGkpJjEsMCE9KDB8ZSkmOTwoKGk9KGk9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3I+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wJiYwIT0oMHxhcltyPj4yXSkmJihhclthPj4yXT0oMHxhclthPj4yXSktMSk7YnJlYWs7ZGVmYXVsdDpmPTB9aWYoOTwoaSstNDh8MCk+Pj4wKWk9KGY9KDB8YXJbcj4+Ml0mJihhclthPj4yXT0oMHxhclthPj4yXSktMSksLTIxNDc0ODM2NDgpLDApO2Vsc2V7Zm9yKG49MDtuPWkrLTQ4KygxMCpufDApfDAsKChpPShpPTB8YXJbYT4+Ml0pPj4+MDwoMHxhcltyPj4yXSk+Pj4wPyhhclthPj4yXT1pKzEsMHxjcltpPj4wXSk6MHx2aShBKSkrLTQ4fDApPj4+MDwxMCYoMHxuKTwyMTQ3NDgzNjQ7KTtpZihlPSgoMHxuKTwwKTw8MzE+PjMxLChpKy00OHwwKT4+PjA8MTApe2Zvcig7ZT0wfG5iKDB8biwwfGUsMTAsMCksbj1ELGk9MHx0YigwfGksKCgwfGkpPDApPDwzMT4+MzF8MCwtNDgsLTEpLG49MHx0YigwfGksMHxELDB8ZSwwfG4pLGU9RCwoKGk9KGk9MHxhclthPj4yXSk+Pj4wPCgwfGFyW3I+PjJdKT4+PjA/KGFyW2E+PjJdPWkrMSwwfGNyW2k+PjBdKTowfHZpKEEpKSstNDh8MCk+Pj4wPDEwJigoMHxlKTwyMTQ3NDgzNnwyMTQ3NDgzNj09KDB8ZSkmbj4+PjA8MjA2MTU4NDMwMik7KTt0PWksbz1ufWVsc2UgdD1pLG89bjtpZihpPTB8YXJbcj4+Ml0sKHQrLTQ4fDApPj4+MDwxMClmb3IoOyhuPTB8YXJbYT4+Ml0pPj4+MDxpPj4+MD8oYXJbYT4+Ml09bisxLG49MHxjcltuPj4wXSk6KG49MHx2aShBKSxpPTB8YXJbcj4+Ml0pLChuKy00OHwwKT4+PjA8MTA7KTswfGkmJihhclthPj4yXT0oMHxhclthPj4yXSktMSksaT0wfG9iKDAsMCwwfG8sMHxlKSxmPShhPTAhPSgwfGYpKT9EOmUsaT1hP2k6b31yZXR1cm4gRD1mLDB8aX1mdW5jdGlvbiBRaShBLGUpe0E9K0E7dmFyIHI9MCxpPTA7cmV0dXJuKDB8KGV8PTApKTw9MTAyMz8oMHxlKTwtMTAyMiYmKEEqPTIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQscj1lKzEwMjJ8MCxlPWUrMjA0NHwwLEE9KGk9KDB8cik8LTEwMjIpPzIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQqQTpBLGU9aT8tMTAyMjwoMHxlKT9lOi0xMDIyOnIpOihBKj04OTg4NDY1Njc0MzExNThlMjkzLGk9ZSstMTAyM3wwLGU9ZSstMjA0NnwwLEE9KHI9MTAyMzwoMHxpKSk/ODk4ODQ2NTY3NDMxMTU4ZTI5MypBOkEsZT1yPygwfGUpPDEwMjM/ZToxMDIzOmkpLHI9MHxkYihlKzEwMjN8MCwwLDUyKSxpPUQsYXJbZD4+Ml09cixhcltkKzQ+PjJdPWksKyhBKlFbZD4+M10pfWZ1bmN0aW9uIERpKEEsZSl7cmV0dXJuKyArZnVuY3Rpb24oQSxlKXtBPStBLGU9K2U7dmFyIHIsaT0wO3JldHVybiBRW2Q+PjNdPUEscj0wfGFyW2Q+PjJdLGk9MHxhcltkKzQ+PjJdLFFbZD4+M109ZSxpPS0yMTQ3NDgzNjQ4JmFyW2QrND4+Ml18MjE0NzQ4MzY0NyZpLGFyW2Q+PjJdPXIsYXJbZCs0Pj4yXT1pLCsgK1FbZD4+M119KEE9K0EsZT0rZSl9ZnVuY3Rpb24gSmkoQSxlKXtyZXR1cm4rICtmdW5jdGlvbihBLGUpe0E9K0EsZT0rZTt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO1FbZD4+M109QSxvPTB8YXJbZD4+Ml0sYz0wfGFyW2QrND4+Ml0sUVtkPj4zXT1lLHU9MHxhcltkPj4yXSxiPTB8YXJbZCs0Pj4yXSxmPTIwNDcmKGY9MHxzYigwfG8sMHxjLDUyKSksbD0yMDQ3JihsPTB8c2IoMHx1LDB8Yiw1MikpLHI9LTIxNDc0ODM2NDgmYyx0PTB8ZGIoMHx1LDB8YiwxKSxhPUQ7QTpkb3tpZigwPT0oMHx0KSYwPT0oMHxhKXx8KG49MHxUaShlKSxpPTIxNDc0ODM2NDcmRCwyMDQ3PT0oMHxmKXwyMTQ2NDM1MDcyPGk+Pj4wfDIxNDY0MzUwNzI9PSgwfGkpJjA8bj4+PjApKXM9MztlbHNle2lmKGk9MHxkYigwfG8sMHxjLDEpLCEoYT4+PjA8KG49RCk+Pj4wfCgwfG4pPT0oMHxhKSZ0Pj4+MDxpPj4+MCkpcmV0dXJuKygoMHxpKT09KDB8dCkmKDB8bik9PSgwfGEpPzAqQTpBKTtpZihmKXQ9MTA0ODU3NSZjfDEwNDg1NzY7ZWxzZXtpZihpPTB8ZGIoMHxvLDB8YywxMiksLTE8KDB8KG49RCkpfC0xPT0oMHxuKSY0Mjk0OTY3Mjk1PGk+Pj4wKWZvcihmPTA7Zj1mKy0xfDAsaT0wfGRiKDB8aSwwfG4sMSksLTE8KDB8KG49RCkpfC0xPT0oMHxuKSY0Mjk0OTY3Mjk1PGk+Pj4wOyk7ZWxzZSBmPTA7bz0wfGRiKDB8bywwfGMsMS1mfDApLHQ9RH1pZihsKWM9MTA0ODU3NSZifDEwNDg1NzY7ZWxzZXtpZihuPTB8ZGIoMHx1LDB8YiwxMiksLTE8KDB8KGE9RCkpfC0xPT0oMHxhKSY0Mjk0OTY3Mjk1PG4+Pj4wKWZvcihpPTA7aT1pKy0xfDAsbj0wfGRiKDB8biwwfGEsMSksLTE8KDB8KGE9RCkpfC0xPT0oMHxhKSY0Mjk0OTY3Mjk1PG4+Pj4wOyk7ZWxzZSBpPTA7dT0wfGRiKDB8dSwwfGIsMS1pfDApLGw9aSxjPUR9bj0wfG9iKDB8bywwfHQsMHx1LDB8YyksYT0tMTwoMHwoaT1EKSl8LTE9PSgwfGkpJjQyOTQ5NjcyOTU8bj4+PjA7ZTpkb3tpZigoMHxsKTwoMHxmKSl7Zm9yKDs7KXtpZihhKXtpZigwPT0oMHxuKSYwPT0oMHxpKSlicmVha31lbHNlIG49byxpPXQ7aWYobz0wfGRiKDB8biwwfGksMSksbj0wfG9iKDB8bywwfCh0PUQpLDB8dSwwfGMpLGE9LTE8KDB8KGk9RCkpfC0xPT0oMHxpKSY0Mjk0OTY3Mjk1PG4+Pj4wLCgwfChmPWYrLTF8MCkpPD0oMHxsKSlicmVhayBlfWU9MCpBO2JyZWFrIEF9fXdoaWxlKDApO2lmKGEpe2lmKDA9PSgwfG4pJjA9PSgwfGkpKXtlPTAqQTticmVha319ZWxzZSBpPXQsbj1vO2lmKGk+Pj4wPDEwNDg1NzZ8MTA0ODU3Nj09KDB8aSkmbj4+PjA8MClmb3IoO249MHxkYigwfG4sMHxpLDEpLGY9ZistMXwwLChpPUQpPj4+MDwxMDQ4NTc2fDEwNDg1NzY9PSgwfGkpJm4+Pj4wPDA7KTswPCgwfGYpPyhiPTB8dGIoMHxuLDB8aSwwLC0xMDQ4NTc2KSxpPUQsZj0wfGRiKDB8ZiwwLDUyKSxpfD1ELGZ8PWIpOihmPTB8c2IoMHxuLDB8aSwxLWZ8MCksaT1EKSxhcltkPj4yXT1mLGFyW2QrND4+Ml09aXxyLGU9K1FbZD4+M119fXdoaWxlKDApOzM9PSgwfHMpJiYoZSo9QSxlLz1lKTtyZXR1cm4rZX0oQT0rQSxlPStlKX1mdW5jdGlvbiBNaShBLGUpe3JldHVybisgK1FpKEE9K0EsZXw9MCl9ZnVuY3Rpb24gVGkoQSl7QT0rQTt2YXIgZTtyZXR1cm4gUVtkPj4zXT1BLGU9MHxhcltkPj4yXSxEPTB8YXJbZCs0Pj4yXSwwfGV9ZnVuY3Rpb24gVWkoQSxlLHIsaSl7QXw9MCxpfD0wO3ZhciBmLG49MDtyZXR1cm4gZj0wfGJyKHJ8PTAsZXw9MCkscj0wPT0oMHxlKT8wOnIsLTE8KDB8YXJbaSs3Nj4+Ml0pPyhuPTA9PSgwfEpjKCkpLEE9MHxlbChBLGYsaSksbnx8TWMoKSk6QT0wfGVsKEEsZixpKSwoMHxBKSE9KDB8ZikmJihyPShBPj4+MCkvKGU+Pj4wKXwwKSwwfHJ9ZnVuY3Rpb24gU2koQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsaT0yNTUmKGV8PTApLHRyW3I+PjBdPWksKG89MHxhclsodD1BKzE2fDApPj4yXSk/YT00OjB8cmwoQSk/bj0tMToobz0wfGFyW3Q+PjJdLGE9NCk7ZG97aWYoND09KDB8YSkpe2lmKCh0PTB8YXJbKGE9QSsyMHwwKT4+Ml0pPj4+MDxvPj4+MCYmKDB8KG49MjU1JmUpKSE9KDB8dHJbQSs3NT4+MF0pKXthclthPj4yXT10KzEsdHJbdD4+MF09aTticmVha31uPTE9PSgwfHhiWzYzJmFyW0ErMzY+PjJdXShBLHIsMSkpPzB8Y3Jbcj4+MF06LTF9fXdoaWxlKDApO3JldHVybiB1cj1mLDB8bn1mdW5jdGlvbiBPaShBKXtBfD0wO3ZhciBlPTAscj0wO2Rve2lmKEEpe2lmKCgwfGFyW0ErNzY+PjJdKTw9LTEpe2U9MHx6aShBKTticmVha31yPTA9PSgwfEpjKCkpLGU9MHx6aShBKSxyfHxNYygpfWVsc2V7aWYoZT0wfGFyWzI2MzZdPzB8T2koMHxhclsyNjM2XSk6MCxBPTB8KEMoNTgxNjApLDU4MTY4KSxBPTB8YXJbQT4+Ml0pZm9yKDtyPS0xPCgwfGFyW0ErNzY+PjJdKT8wfEpjKCk6MCwoMHxhcltBKzIwPj4yXSk+Pj4wPigwfGFyW0ErMjg+PjJdKT4+PjAmJihlPTB8emkoQSl8ZSksMHxyJiZNYygpLDAhPSgwfChBPTB8YXJbQSs1Nj4+Ml0pKTspO1QoNTgxNjApfX13aGlsZSgwKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIHppKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO3JldHVybiByPShBfD0wKSsyOHwwLDB8KEE9KDB8YXJbKGU9QSsyMHwwKT4+Ml0pPj4+MD4oMHxhcltyPj4yXSk+Pj4wJiYoeGJbNjMmYXJbQSszNj4+Ml1dKEEsMCwwKSwwPT0oMHxhcltlPj4yXSkpPy0xOigoZj0wfGFyWyhpPUErNHwwKT4+Ml0pPj4+MDwodD0wfGFyWyhuPUErOHwwKT4+Ml0pPj4+MCYmeGJbNjMmYXJbQSs0MD4+Ml1dKEEsZi10fDAsMSksYXJbQSsxNj4+Ml09MCxhcltyPj4yXT0wLGFyW2U+PjJdPTAsYXJbbj4+Ml09MCxhcltpPj4yXT0wKSl9ZnVuY3Rpb24gamkoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGY7cmV0dXJuIGY9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyW2Y+PjJdPXIscj0wfEhpKEEsZSxmKSx1cj1pLDB8cn1mdW5jdGlvbiBIaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wO2ZvcihpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTI4fDAsdD0obj1pKSsxMjR8MDsoMHwobj1uKzR8KGFyW24+PjJdPTApKSk8KDB8dCk7KTtyZXR1cm4gYXJbMzIraT4+Ml09MzQsYXJbNDQraT4+Ml09QSxhcls3NitpPj4yXT0tMSxhcls4NCtpPj4yXT1BLHQ9MHxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTA7Uj11cj0odD11cikrMzEmLTMyLHVyPXVyKzI4OHwwLGk9Uis4fDAsZj1SKzE3fDAsUj0obj1SKSsxNnwwLF89LTE8KDB8YXJbNzYrKEF8PTApPj4yXSk/MHxKYygpOjA7bz0wfHRyW2U+PjBdO0E6ZG97aWYobzw8MjQ+PjI0KXt5PUErNHwwLEI9QSsxMDB8MCxFPUErMTA4fDAsWD1BKzh8MCxXPTEwK2Z8MCxJPTMzK2Z8MCxwPTQraXwwLEM9NDYrZnwwLEc9OTQrZnwwLEY9Vj0xK2Z8MCxsPWUsYT1jPWU9dj0wO2U6Zm9yKDs7KXtyOmRve2lmKDB8bWkoMjU1Jm8pKXtmb3IoOzB8bWkoMHxjclsobz1sKzF8MCk+PjBdKTspbD1vO2ZvcihubChBLDApOzAhPSgwfG1pKG89KG89MHxhclt5Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjA/KGFyW3k+PjJdPW8rMSwwfGNyW28+PjBdKTowfHZpKEEpKSk7KTswfGFyW0I+PjJdPyhvPSgwfGFyW3k+PjJdKS0xfDAsYXJbeT4+Ml09byk6bz0wfGFyW3k+PjJdLHU9KDB8YXJbRT4+Ml0pK3Yrby0oMHxhcltYPj4yXSl8MH1lbHNle289bzw8MjQ+PjI0PT0zNztpOmRve2lmKG8pe3U9MHx0clsocz1sKzF8MCk+PjBdO2Y6ZG97c3dpdGNoKHU8PDI0Pj4yNCl7Y2FzZSAzNzpicmVhayBpO2Nhc2UgNDI6bD1sKzJ8KFo9MCk7YnJlYWs7ZGVmYXVsdDppZigobz0oMjU1JnUpLTQ4fDApPj4+MDwxMCYmMzY9PSgwfHRyW2wrMj4+MF0pKXtaPTB8eGkocixvKSxsPWwrM3wwO2JyZWFrIGZ9bD0zKygwfGFyW3I+PjJdKSYtNCxaPTB8YXJbbD4+Ml0sYXJbcj4+Ml09bCs0LGw9c319d2hpbGUoMCk7aWYobz0wfHRyW2w+PjBdLCgodT0yNTUmbykrLTQ4fDApPj4+MDwxMClmb3Iocz0wO3M9KDEwKnN8MCktNDgrdXwwLG89MHx0clsobD1sKzF8MCk+PjBdLCgodT0yNTUmbykrLTQ4fDApPj4+MDwxMDspO2Vsc2Ugcz0wO3N3aXRjaChjPShvPW88PDI0Pj4yND09MTA5KT8wOmMsYT1vPzA6YSxsPW8/bCsxfDA6bCxvJj1nPTAhPSgwfFopLHU9bCsxfDAsMHx0cltsPj4wXSl7Y2FzZSAxMDQ6bT0xMDQ9PSgwfHRyW3U+PjBdKSxkPW0/LTI6LTEsbD1tP2wrMnwwOnU7YnJlYWs7Y2FzZSAxMDg6bT0xMDg9PSgwfHRyW3U+PjBdKSxkPW0/MzoxLGw9bT9sKzJ8MDp1O2JyZWFrO2Nhc2UgMTA2OmQ9MyxsPXU7YnJlYWs7Y2FzZSAxMTY6Y2FzZSAxMjI6ZD0xLGw9dTticmVhaztjYXNlIDc2OmQ9MixsPXU7YnJlYWs7Y2FzZSAxMTA6Y2FzZSAxMTI6Y2FzZSA2NzpjYXNlIDgzOmNhc2UgOTE6Y2FzZSA5OTpjYXNlIDExNTpjYXNlIDg4OmNhc2UgNzE6Y2FzZSA3MDpjYXNlIDY5OmNhc2UgNjU6Y2FzZSAxMDM6Y2FzZSAxMDI6Y2FzZSAxMDE6Y2FzZSA5NzpjYXNlIDEyMDpjYXNlIDExNzpjYXNlIDExMTpjYXNlIDEwNTpjYXNlIDEwMDpkPTA7YnJlYWs7ZGVmYXVsdDpOPTEzNzticmVhayBlfXN3aXRjaChoPTB8Y3JbbD4+MF0saD0odz0zPT0oNDcmaHwwKSk/MzJ8aDpoLHc9dz8xOmQsKGs9MjU1JmgpPDwyND4+MjQpe2Nhc2UgOTk6cz0xPCgwfHMpP3M6MTticmVhaztjYXNlIDkxOmJyZWFrO2Nhc2UgMTEwOlBpKFosdyx2LCgoMHx2KTwwKTw8MzE+PjMxKSx1PXY7YnJlYWsgcjtkZWZhdWx0OmZvcihubChBLDApOzAhPSgwfG1pKHU9KHU9MHxhclt5Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjA/KGFyW3k+PjJdPXUrMSwwfGNyW3U+PjBdKTowfHZpKEEpKSk7KTswfGFyW0I+PjJdPyh1PSgwfGFyW3k+PjJdKS0xfDAsYXJbeT4+Ml09dSk6dT0wfGFyW3k+PjJdLHY9KDB8YXJbRT4+Ml0pK3YrdS0oMHxhcltYPj4yXSl8MH1pZihubChBLHMpLHU9MHxhclt5Pj4yXSxkPTB8YXJbQj4+Ml0sdT4+PjA8ZD4+PjApYXJbeT4+Ml09dSsxO2Vsc2V7aWYoKDB8dmkoQSkpPDApe049MTM3O2JyZWFrIGV9ZD0wfGFyW0I+PjJdfTB8ZCYmKGFyW3k+PjJdPSgwfGFyW3k+PjJdKS0xKTtmOmRve3N3aXRjaChrPDwyND4+MjQpe2Nhc2UgOTE6Y2FzZSA5OTpjYXNlIDExNTptPTk5PT0oMHxoKTtuOmRve2lmKDExNT09KDE2fGgpKXZiKDB8ViwtMSwyNTYpLDExNT09KCh0cltmPj4wXT0wKXxoKSYmKHRyW0k+PjBdPTAsdHJbVz4+MF09MCx0cltXKzE+PjBdPTAsdHJbVysyPj4wXT0wLHRyW1crMz4+MF09MCx0cltXKzQ+PjBdPTApO2Vsc2V7c3dpdGNoKGg9OTQ9PSgwfHRyWyh1PWwrMXwwKT4+MF0pLGw9aD9sKzJ8MDp1LHZiKDB8Riwoaz0xJmgpfDAsMjU2KSwodHJbZj4+MF09MCl8dHJbbD4+MF0pe2Nhc2UgNDU6dT1DLE49NjQ7YnJlYWs7Y2FzZSA5Mzp1PUcsTj02NDticmVhaztkZWZhdWx0Omg9MjU1JigxXmspfWZvcig2ND09KDB8TikmJihoPTI1NSYoMV5rKSx0clt1Pj4oTj0wKV09aCxsPWwrMXwwKTs7KXt1PTB8dHJbbD4+MF07dDpkb3tzd2l0Y2godTw8MjQ+PjI0KXtjYXNlIDA6Tj0xMzc7YnJlYWsgZTtjYXNlIDkzOmJyZWFrIG47Y2FzZSA0NTpzd2l0Y2goKHU9MHx0clsoaz1sKzF8MCk+PjBdKTw8MjQ+PjI0KXtjYXNlIDkzOmNhc2UgMDp1PTQ1O2JyZWFrIHR9aWYoKDI1NSYobD0wfHRyW2wrLTE+PjBdKSk8KDI1NSZ1KSl7Zm9yKGwmPTI1NTt0cltmKyhsPWwrMXwwKT4+MF09aCx1PTB8dHJbaz4+MF0sKDB8bCk8KDI1NSZ1fDApOyk7bD1rfWVsc2UgbD1rfX13aGlsZSgwKTt0clsxKygyNTUmdSkrZj4+MF09aCxsPWwrMXwwfX19d2hpbGUoMCk7dT1tP3MrMXwwOjMxLGg9MT09KDB8dyk7bjpkb3tpZihoKXtpZihvKXtpZighKGE9MHx5Yyh1PDwyKSkpe2E9Yz0wLG89MSxOPTEzNzticmVhayBlfX1lbHNlIGE9WjthcltpPj4yXT0wLGFyW3A+PjJdPTAsaz11LGM9MDt0OmZvcig7Oyl7ZD0wPT0oMHxhKTtkb3tvOmZvcig7Oyl7aWYodT0odT0wfGFyW3k+PjJdKT4+PjA8KDB8YXJbQj4+Ml0pPj4+MD8oYXJbeT4+Ml09dSsxLDB8Y3JbdT4+MF0pOjB8dmkoQSksISgwfHRyW2YrKHUrMSk+PjBdKSlicmVhayB0O3N3aXRjaCh0cltSPj4wXT11LDB8R2kobixSLDEsaSkpe2Nhc2UtMTpjPTAsTj0xMzc7YnJlYWsgZTtjYXNlLTI6YnJlYWs7ZGVmYXVsdDpicmVhayBvfX1kfHwoYXJbYSsoYzw8Mik+PjJdPWFyW24+PjJdLGM9YysxfDApfXdoaWxlKCEobyYoMHxjKT09KDB8aykpKTtpZighKHU9MHxFYyhhLChjPWs8PDF8MSk8PDIpKSl7Yz0wLG89MSxOPTEzNzticmVhayBlfXc9ayxrPWMsYT11LGM9d31pZighKDB8KFk9aSwxJihZPShZfD0wKT8wPT0oMHxhcltZPj4yXSk6MSl8MCkpKXtjPTAsTj0xMzc7YnJlYWsgZX11PWMsYz0wLGs9YX1lbHNle2lmKG8pe2lmKCEoYz0wfHljKHUpKSl7YT1jPTAsbz0xLE49MTM3O2JyZWFrIGV9Zm9yKGQ9dSxhPTA7Oyl7ZG97aWYodT0odT0wfGFyW3k+PjJdKT4+PjA8KDB8YXJbQj4+Ml0pPj4+MD8oYXJbeT4+Ml09dSsxLDB8Y3JbdT4+MF0pOjB8dmkoQSksISgwfHRyW2YrKHUrMSk+PjBdKSl7dT1hLGE9az0wO2JyZWFrIG59dHJbYythPj4wXT11LGE9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfGQpKTtpZighKHU9MHxFYyhjLGE9ZDw8MXwxKSkpe2E9MCxvPTEsTj0xMzc7YnJlYWsgZX13PWQsZD1hLGM9dSxhPXd9fWlmKFopZm9yKHU9MCxjPWQ7Oyl7aWYoYT0oYT0wfGFyW3k+PjJdKT4+PjA8Yz4+PjA/KGFyW3k+PjJdPWErMSwwfGNyW2E+PjBdKTowfHZpKEEpLCEoMHx0cltmKyhhKzEpPj4wXSkpe2M9WixhPWs9MDticmVhayBufXRyW1ordT4+MF09YSx1PXUrMXwwLGM9MHxhcltCPj4yXX1lbHNlIGZvcihjPWQ7Oyl7aWYoYT0oYT0wfGFyW3k+PjJdKT4+PjA8Yz4+PjA/KGFyW3k+PjJdPWErMSwwfGNyW2E+PjBdKTowfHZpKEEpLCEoMHx0cltmKyhhKzEpPj4wXSkpe2E9az1jPXU9MDticmVhayBufWM9MHxhcltCPj4yXX19fXdoaWxlKDApO2lmKDB8YXJbQj4+Ml0/KGQ9KDB8YXJbeT4+Ml0pLTF8MCxhclt5Pj4yXT1kKTpkPTB8YXJbeT4+Ml0sIShkPWQtKDB8YXJbWD4+Ml0pKygwfGFyW0U+PjJdKXwwKSl7Tj0xMzk7YnJlYWsgZX1pZighKCgwfGQpPT0oMHxzKXwxXm0pKXtOPTEzOTticmVhayBlfWRve2lmKG8pe2lmKGgpe2FyW1o+PjJdPWs7YnJlYWt9YXJbWj4+Ml09YzticmVha319d2hpbGUoMCk7aWYoIW0pe2lmKDB8ayYmKGFyW2srKHU8PDIpPj4yXT0wKSwhYyl7Yz0wO2JyZWFrIGZ9dHJbYyt1Pj4wXT0wfWJyZWFrO2Nhc2UgMTIwOmNhc2UgODg6Y2FzZSAxMTI6dT0xNixOPTEyNTticmVhaztjYXNlIDExMTp1PTgsTj0xMjU7YnJlYWs7Y2FzZSAxMTc6Y2FzZSAxMDA6dT0xMCxOPTEyNTticmVhaztjYXNlIDEwNTp1PTAsTj0xMjU7YnJlYWs7Y2FzZSA3MTpjYXNlIDEwMzpjYXNlIDcwOmNhc2UgMTAyOmNhc2UgNjk6Y2FzZSAxMDE6Y2FzZSA2NTpjYXNlIDk3OmlmKGI9K1JpKEEsdywwKSwoMHxhcltFPj4yXSk9PSgoMHxhcltYPj4yXSktKDB8YXJbeT4+Ml0pfDApKXtOPTEzOTticmVhayBlfWlmKFopc3dpdGNoKDB8dyl7Y2FzZSAwOmdBW1o+PjJdPWI7YnJlYWsgZjtjYXNlIDE6Y2FzZSAyOlFbWj4+M109YjticmVhayBmO2RlZmF1bHQ6YnJlYWsgZn19fXdoaWxlKDApO2Rve2lmKDEyNT09KDB8Tikpe2lmKHU9KE49MCl8d2koQSx1LDAsLTEsLTEpLCgwfGFyW0U+PjJdKT09KCgwfGFyW1g+PjJdKS0oMHxhclt5Pj4yXSl8MCkpe049MTM5O2JyZWFrIGV9aWYoZyYxMTI9PSgwfGgpKXthcltaPj4yXT11O2JyZWFrfVBpKFosdyx1LEQpO2JyZWFrfX13aGlsZSgwKTtlPSgxJmcpK2V8MCx1PSgwfGFyW0U+PjJdKSt2KygwfGFyW3k+PjJdKS0oMHxhcltYPj4yXSl8MDticmVhayByfX13aGlsZSgwKTtpZihsPWwrKDEmbyl8MCxubChBLDApLCgwfChvPShvPTB8YXJbeT4+Ml0pPj4+MDwoMHxhcltCPj4yXSk+Pj4wPyhhclt5Pj4yXT1vKzEsMHxjcltvPj4wXSk6MHx2aShBKSkpIT0oMHxjcltsPj4wXSkpe049MjI7YnJlYWsgZX11PXYrMXwwfX13aGlsZSgwKTtpZighKChvPTB8dHJbKGw9bCsxfDApPj4wXSk8PDI0Pj4yNCkpYnJlYWsgQTt2PXV9aWYoMjI9PSgwfE4pKXtpZigwfGFyW0I+PjJdJiYoYXJbeT4+Ml09KDB8YXJbeT4+Ml0pLTEpLDAhPSgwfGUpfC0xPCgwfG8pKWJyZWFrO289MCxOPTEzOH1lbHNlIDEzNz09KDB8Tik/KG8mPTEsZXx8KE49MTM4KSk6MTM5PT0oMHxOKSYmKG8mPTEpOzEzOD09KDB8TikmJihlPS0xKSxvJiYoQmMoYyksQmMoYSkpfWVsc2UgZT0wfXdoaWxlKDApO3ZhciBZOzB8XyYmTWMoKTtyZXR1cm4gdXI9dCwwfGV9KGksZSxyKSx1cj1mLDB8dH1mdW5jdGlvbiB4aShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MDtmb3Iocj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbcj4+Ml09YXJbQT4+Ml07Zj0zKygwfGFyW3I+PjJdKSYtNCxBPTB8YXJbZj4+Ml0sYXJbcj4+Ml09Zis0LDE8ZT4+PjA7KWU9ZSstMXwwO3JldHVybiB1cj1pLDB8QX1mdW5jdGlvbiBQaShBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO0E6ZG97aWYoMHxBKXN3aXRjaCgwfGUpe2Nhc2UtMjp0cltBPj4wXT1yO2JyZWFrIEE7Y2FzZS0xOm9yW0E+PjFdPXI7YnJlYWsgQTtjYXNlIDA6Y2FzZSAxOmFyW0E+PjJdPXI7YnJlYWsgQTtjYXNlIDM6YXJbKGU9QSk+PjJdPXIsYXJbZSs0Pj4yXT1pO2JyZWFrIEE7ZGVmYXVsdDpicmVhayBBfX13aGlsZSgwKX1mdW5jdGlvbiBMaShBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQ9MCxvPTA7Zm9yKGY9dXI9KG49dXIpKzMxJi0zMix1cj11cisxMjh8MCxvPSh0PWYpKzEyNHwwOygwfCh0PXQrNHwoYXJbdD4+Ml09MCkpKTwoMHxvKTspO3JldHVybiBhclsodD00K2Z8MCk+PjJdPUEsYXJbKG89OCtmfDApPj4yXT0tMSxhcls0NCtmPj4yXT1BLGFyWzc2K2Y+PjJdPS0xLG5sKGYsMCksaT0rUmkoZixyLDEpLHI9KDB8YXJbdD4+Ml0pLSgwfGFyW28+PjJdKSsoMHxhclsxMDgrZj4+Ml0pfDAsMHxlJiYoYXJbZT4+Ml09MHxyP0ErcnwwOkEpLHVyPW4sK2l9ZnVuY3Rpb24gS2koQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDApO3ZhciByLGl9ZnVuY3Rpb24gcWkoQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDEpO3ZhciByLGl9ZnVuY3Rpb24gJGkoQSxlKXtyZXR1cm4gcj1BfD0wLGk9ZXw9MCwrICsgKyArTGkocnw9MCxpfD0wLDIpO3ZhciByLGl9ZnVuY3Rpb24gQWYoQSxlKXtyZXR1cm4rICtRaShBPStBLGV8PTApfWZ1bmN0aW9uIGVmKEEpe3JldHVybiAwfH5+K3BiKCsoQT0rQSkpfWZ1bmN0aW9uIHJmKEEpe0F8PTA7dmFyIGU7cmV0dXJuIGU9MHxhclsyNjIyXSwwfEEmJihhclsyNjIyXT0tMT09KDB8QSk/NTgxMDQ6QSksMHwoNTgxMDQ9PSgwfGUpPy0xOmUpfWZ1bmN0aW9uIGZmKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7Yj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzI3MnwwLHI9Yis4fDA7ZG97aWYoISgwfHRyW2U+PjBdKSl7aWYoMHwoZT0wfGJBKDUyOTAzKSkmJjB8dHJbZT4+MF0pYnJlYWs7aWYoMHwoZT0wfGJBKDUyOTEwKygxMipBfDApfDApKSYmMHx0cltlPj4wXSlicmVhaztpZigwfChlPTB8YkEoNTI5ODIpKSYmMHx0cltlPj4wXSlicmVhaztlPTUyOTg3fX13aGlsZSgwKTtmPTA7QTpkb3tzd2l0Y2goMHx0cltlK2Y+PjBdKXtjYXNlIDQ3OmNhc2UgMDpicmVhayBBfWY9ZisxfDB9d2hpbGUoZj4+PjA8MTUpOzE1PT0oMHwodT0obj0wfHRyW2U+PjBdKTw8MjQ+PjI0IT00NiYmMD09KDB8dHJbZStmPj4wXSk/bjw8MjQ+PjI0PT02Nz8xNToobD1lLDE2KTooZT01Mjk4NywxNSkpKSYmKHU9MHx0cltlKzE+PjBdPyhsPWUsMTYpOjE4KTtBOmRve2lmKDE2PT0oMHx1KSlpZigwIT0oMHxGYyhsLDUyOTg3KSkmJjAhPSgwfEZjKGwsNTI5OTUpKSl7aWYoMHwoZT0wfGFyWzE0NTQzXSkpZG97aWYoISgwfEZjKGwsZSs4fDApKSlicmVhayBBO2U9MHxhcltlKzI0Pj4yXX13aGlsZSgwIT0oMHxlKSk7Qyg1ODE3NiksZT0wfGFyWzE0NTQzXTtlOmRve2lmKDB8ZSl7Zm9yKDswfEZjKGwsZSs4fDApOylpZighKGU9MHxhcltlKzI0Pj4yXSkpYnJlYWsgZTtUKDU4MTc2KTticmVhayBBfX13aGlsZSgwKTtlOmRve2lmKDA9PSgwfGFyWzE0NTE4XSkmJjAhPSgwfCh0PTB8YkEoNTMwMDEpKSkmJjAhPSgwfHRyW3Q+PjBdKSl7Zm9yKGE9MjU0LWZ8MCxjPWYrMXwwLG49dDs7KXtpZigodD0obz0wfE5jKG4sNTgpKS1uKygoKGU9MHx0cltvPj4wXSk8PDI0Pj4yNCE9MCk8PDMxPj4zMSl8MCk+Pj4wPGE+Pj4wKXtpZihoYigwfHIsMHxuLDB8dCksdHJbKG49cit0fDApPj4wXT00NyxoYihuKzF8MCwwfGwsMHxmKSwodHJbcisoYyt0KT4+MF09MCl8KHQ9MHxHKDB8ciwwfGIpKSlicmVhaztlPTB8dHJbbz4+MF19aWYoISgwfHRyWyhuPW8rKGU8PDI0Pj4yNCE9MCYxKXwwKT4+MF0pKXt1PTQxO2JyZWFrIGV9fWlmKGU9MHx5YygyOCksbj0wfGFyW2I+PjJdLGUpe2FyW2U+PjJdPXQsYXJbZSs0Pj4yXT1uLGhiKDB8KGI9ZSs4fDApLDB8bCwwfGYpLHRyW2IrZj4+MF09MCxhcltlKzI0Pj4yXT1hclsxNDU0M10sYXJbMTQ1NDNdPWU7YnJlYWt9RWkodCxuKSx1PTQxO2JyZWFrfXU9NDF9d2hpbGUoMCk7NDE9PSgwfHUpJiYoZT0wfHljKDI4KSkmJihhcltlPj4yXT1hclsyNTI1XSxhcltlKzQ+PjJdPWFyWzI1MjZdLGhiKDB8KGI9ZSs4fDApLDB8bCwwfGYpLHRyW2IrZj4+MF09MCxhcltlKzI0Pj4yXT1hclsxNDU0M10sYXJbMTQ1NDNdPWUpLFQoNTgxNzYpLGU9MD09KDB8QSkmMD09KDB8ZSk/MTAxMDA6ZX1lbHNlIGU9bCx1PTE4fXdoaWxlKDApO2Rve2lmKDE4PT0oMHx1KSl7aWYoMD09KDB8QSkmJjQ2PT0oMHx0cltlKzE+PjBdKSl7ZT0xMDEwMDticmVha31lPTB9fXdoaWxlKDApO3JldHVybiB1cj1pLDB8ZX1mdW5jdGlvbiBuZihBKXtyZXR1cm4gMTAxNDghPSgwfChBfD0wKSkmMCE9KDB8QSkmNTgxMjghPSgwfEEpJjF8MH1mdW5jdGlvbiB0ZihBLGUscixpKXtyZXR1cm4gMHwoaXw9MCl9ZnVuY3Rpb24gb2YoQSl7MHxuZihBfD0wKSYmQmMoQSl9ZnVuY3Rpb24gYWYoQSl7cmV0dXJuKChBfD0wKSstNDh8MCk+Pj4wPDEwfDB9ZnVuY3Rpb24gY2YoKXtyZXR1cm4tMX1mdW5jdGlvbiBsZihBKXtyZXR1cm4gMHwoZT1BfD0wLDEmKCgoZXw9MCktNDh8MCk+Pj4wPDEwfCgoMzJ8ZSktOTd8MCk+Pj4wPDYpfDApO3ZhciBlfWZ1bmN0aW9uIHVmKEEsZSl7QXw9MCxlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wO2Rve2lmKC0xIT0oMHxBKSl7aWYoZj0tMTwoMHxhcltlKzc2Pj4yXSk/MHxKYygpOjAsKHI9MHxhclsobj1lKzR8MCk+PjJdKT8oaT1yLHI9MCE9KDB8ZiksdD03KTooWmkoZSkscj0wIT0oMHxmKSwoaT0wfGFyW24+PjJdKT90PTc6QT1yKSw3PT0oMHx0KSl7aWYoaT4+PjA+KCgwfGFyW2UrNDQ+PjJdKS04fDApPj4+MCl7aWYodD1pKy0xfDAsYXJbbj4+Ml09dCx0clt0Pj4wXT1BLGFyW2U+PjJdPS0xNyZhcltlPj4yXSwhcilicmVhaztNYygpO2JyZWFrfUE9cn1BPShBJiZNYygpLC0xKX1lbHNlIEE9LTF9d2hpbGUoMCk7cmV0dXJuIDB8QX1mdW5jdGlvbiBiZihBKXtzZihBfD0wKX1mdW5jdGlvbiBzZihBKXthclsoQXw9MCk+PjJdPTE0MDYwLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTA7cj0zMisoQXw9MCl8MCxpPUErMzZ8MCxmPTB8YXJbQSs0MD4+Ml07Zm9yKDtmOyluPWYrLTF8MCxuc1sxMjcmYXJbKDB8YXJbcj4+Ml0pKyhuPDwyKT4+Ml1dKGUsQSwwfGFyWygwfGFyW2k+PjJdKSsobjw8Mik+PjJdKSxmPW59KEEsMCksYm4oQSsyOHwwKSxCYygwfGFyW0ErMzI+PjJdKSxCYygwfGFyW0ErMzY+PjJdKSxCYygwfGFyW0ErNDg+PjJdKSxCYygwfGFyW0ErNjA+PjJdKX1mdW5jdGlvbiBkZihBKXtzZihBfD0wKX1mdW5jdGlvbiBrZihBKXthclsoQXw9MCk+PjJdPTE0MDc2LGJuKEErNHwwKX1mdW5jdGlvbiBoZihBKXtyZXR1cm4gMjU1JihBfD0wKXwwfWZ1bmN0aW9uIHdmKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLDB8KHJ8PTApJiZoYigwfEEsMHxlLDB8ciksMHxBfWZ1bmN0aW9uIHZmKEEpe3JldHVybiAyNTUmKEF8PTApfDB9ZnVuY3Rpb24gbWYoQSl7YXJbKEF8PTApPj4yXT0xNDE0MCxibihBKzR8MCl9ZnVuY3Rpb24gZ2YoQSl7cmV0dXJuIDB8KEF8PTApfWZ1bmN0aW9uIFpmKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLChyfD0wKSYmZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaT0wO2lmKDB8KHJ8PTApKWZvcihpPUE7cj1yKy0xfDAsYXJbaT4+Ml09YXJbZT4+Ml0scjspZT1lKzR8MCxpPWkrNHwwfShBLGUsciksMHxBfWZ1bmN0aW9uIHBmKEEpe3JldHVybiAwfChBfD0wKX1mdW5jdGlvbiB5ZihBKXtFZihBfD0wKSxiZihBKzh8MCl9ZnVuY3Rpb24gQmYoQSl7eWYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gRWYoKXt9ZnVuY3Rpb24gWGYoQSl7ZGYoKEF8PTApKzh8MCl9ZnVuY3Rpb24gV2YoQSl7WGYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gSWYoQSl7R2YoQXw9MCksYmYoQSs0fDApfWZ1bmN0aW9uIENmKEEpe0lmKEF8PTApLHZ1KEEpfWZ1bmN0aW9uIEdmKCl7fWZ1bmN0aW9uIFZmKEEpe2RmKChBfD0wKSs0fDApfWZ1bmN0aW9uIEZmKEEpe1ZmKEF8PTApLHZ1KEEpfWZ1bmN0aW9uIFJmKEEpe19mKEF8PTApLGJmKEErMTJ8MCl9ZnVuY3Rpb24gTmYoQSl7UmYoQXw9MCksdnUoQSl9ZnVuY3Rpb24gX2YoKXt9ZnVuY3Rpb24gWWYoQSl7cmV0dXJuIDB8VmMoQXw9MCl9ZnVuY3Rpb24gUWYoQSxlKXtlfD0wLHRyWyhBfD0wKT4+MF09MHx0cltlPj4wXX1mdW5jdGlvbiBEZihBLGUpe2V8PTAsYXJbKEF8PTApKzE2Pj4yXT0wPT0oMHxhcltBKzI0Pj4yXSl8ZX1mdW5jdGlvbiBKZihBLGUpe2V8PTA7dmFyIHI7Zm9yKGFyWyhBfD0wKSsyND4+Ml09ZSxhcltBKzE2Pj4yXT0wPT0oMHxlKSYxLGFyW0ErMjA+PjJdPTAsYXJbQSs0Pj4yXT00MDk4LGFyW0ErMTI+PjJdPTAsYXJbQSs4Pj4yXT02LHI9QSsyOHwwLEE9KGU9QSszMnwwKSs0MHwwOygwfChlPWUrNHwoYXJbZT4+Ml09MCkpKTwoMHxBKTspO2Z1KHIpfWZ1bmN0aW9uIE1mKEEsZSl7cmV0dXJuKDB8KEF8PTApKT09KDB8KGV8PTApKXwwfWZ1bmN0aW9uIFRmKEEsZSl7cnUoQXw9MCwoZXw9MCkrMjh8MCl9ZnVuY3Rpb24gVWYoQSxlKXtyZXR1cm4oMHwoQXw9MCkpPT0oMHwoZXw9MCkpfDB9ZnVuY3Rpb24gU2YoQSl7YXJbKEF8PTApPj4yXT0xNDA3NixmdShBKzR8MCksYXJbKEE9QSs4fDApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzE2Pj4yXT0wLGFyW0ErMjA+PjJdPTB9ZnVuY3Rpb24gT2YoQSl7YXJbKEF8PTApPj4yXT0xNDE0MCxmdShBKzR8MCksYXJbKEE9QSs4fDApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzE2Pj4yXT0wLGFyW0ErMjA+PjJdPTB9ZnVuY3Rpb24gemYoQSxlKXt2YXIgcixpLGYsbjtlfD0wLHRyWyhBfD0wKT4+MF09MCxlPShhcltBKzQ+PjJdPWUpKygwfGFyWygwfGFyW2U+PjJdKS0xMj4+Ml0pfDAsMHxhcltlKzE2Pj4yXXx8KDB8KGU9MHxhcltlKzcyPj4yXSkmJihyPWUsaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fChuPTApLDB8YXJbKHJ8PTApKygwfGFyWygwfGFyW3I+PjJdKS0xMj4+Ml0pKzI0Pj4yXSYmKHpmKGksciksMHx0cltpPj4wXSYmKG49MHxhcltyKygwfGFyWygwfGFyW3I+PjJdKS0xMj4+Ml0pKzI0Pj4yXSwtMT09KDB8amJbMTI3JmFyWzI0KygwfGFyW24+PjJdKT4+Ml1dKG4pKSkmJkRmKG49cisoMHxhclsoMHxhcltyPj4yXSktMTI+PjJdKXwwLDF8YXJbbisxNj4+Ml0pLGpmKGkpKSx1cj1mKSx0cltBPj4wXT0xKX1mdW5jdGlvbiBqZihBKXt2YXIgZT0wO2U9KGU9MHxhclsoQT0oQXw9MCkrNHwwKT4+Ml0pKygwfGFyWygwfGFyW2U+PjJdKS0xMj4+Ml0pfDAsMHxhcltlKzI0Pj4yXSYmMD09KDB8YXJbZSsxNj4+Ml0pJiY4MTkyJmFyW2UrND4+Ml18MCYmISgwfEUoKSkmJihlPTB8YXJbQT4+Ml0sZT0wfGFyW2UrKDB8YXJbKDB8YXJbZT4+Ml0pLTEyPj4yXSkrMjQ+PjJdLC0xPT0oMHxqYlsxMjcmYXJbMjQrKDB8YXJbZT4+Ml0pPj4yXV0oZSkpKSYmRGYoZT0oZT0wfGFyW0E+PjJdKSsoMHxhclsoMHxhcltlPj4yXSktMTI+PjJdKXwwLDF8YXJbZSsxNj4+Ml0pfWZ1bmN0aW9uIEhmKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxyPTEyK2Z8MCxpPTgrZnwwLHpmKGYsQXw9MCksMHx0cltmPj4wXSYmKFRmKHIsQSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKSxvPTB8dW4ociw1OTI4OCksYm4ociksYT1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYz0wfGFyW2ErMjQ+PjJdLHQ9MHxNZihsPS0xLDB8YXJbKHQ9YSs3NnwwKT4+Ml0pPyhUZihyLGEpLGw9MHx1bihyLDU5MjMyKSxsPTB8SGJbMzEmYXJbMjgrKDB8YXJbbD4+Ml0pPj4yXV0obCwzMiksYm4ociksbD1sPDwyND4+MjQsYXJbdD4+Ml09bCk6MHxhclt0Pj4yXSxsPTB8YXJbMTIrKDB8YXJbbz4+Ml0pPj4yXSxhcltpPj4yXT1jLGFyW3I+PjJdPWFyW2k+PjJdLDB8S2JbMzEmbF0obyxyLGEsMjU1JnQsZSl8fERmKGw9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLDV8YXJbbCsxNj4+Ml0pKSxqZihmKSx1cj1uLDB8QX1mdW5jdGlvbiB4ZihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtyZXR1cm4gZj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAscj0xMitmfDAsaT04K2Z8MCx6ZihmLEF8PTApLDB8dHJbZj4+MF0mJihUZihyLEErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCksbz0wfHVuKHIsNTkyODgpLGJuKHIpLGE9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLGM9MHxhclthKzI0Pj4yXSx0PTB8TWYobD0tMSwwfGFyWyh0PWErNzZ8MCk+PjJdKT8oVGYocixhKSxsPTB8dW4ociw1OTIzMiksbD0wfEhiWzMxJmFyWzI4KygwfGFyW2w+PjJdKT4+Ml1dKGwsMzIpLGJuKHIpLGw9bDw8MjQ+PjI0LGFyW3Q+PjJdPWwpOjB8YXJbdD4+Ml0sbD0wfGFyWzI0KygwfGFyW28+PjJdKT4+Ml0sYXJbaT4+Ml09YyxhcltyPj4yXT1hcltpPj4yXSwwfEtiWzMxJmxdKG8scixhLDI1NSZ0LDY1NTM1JmUpfHxEZihsPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW2wrMTY+PjJdKSksamYoZiksdXI9biwwfEF9ZnVuY3Rpb24gUGYoQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7cmV0dXJuIGY9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLHI9MTIrZnwwLGk9OCtmfDAsemYoZixBfD0wKSwwfHRyW2Y+PjBdJiYoVGYocixBKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApLG89MHx1bihyLDU5Mjg4KSxibihyKSxhPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxjPTB8YXJbYSsyND4+Ml0sdD0wfE1mKGw9LTEsMHxhclsodD1hKzc2fDApPj4yXSk/KFRmKHIsYSksbD0wfHVuKHIsNTkyMzIpLGw9MHxIYlszMSZhclsyOCsoMHxhcltsPj4yXSk+PjJdXShsLDMyKSxibihyKSxsPWw8PDI0Pj4yNCxhclt0Pj4yXT1sKTowfGFyW3Q+PjJdLGw9MHxhclsxNisoMHxhcltvPj4yXSk+PjJdLGFyW2k+PjJdPWMsYXJbcj4+Ml09YXJbaT4+Ml0sMHxLYlszMSZsXShvLHIsYSwyNTUmdCxlKXx8RGYobD1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsNXxhcltsKzE2Pj4yXSkpLGpmKGYpLHVyPW4sMHxBfWZ1bmN0aW9uIExmKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxyPTEyK2Z8MCxpPTgrZnwwLHpmKGYsQXw9MCksMHx0cltmPj4wXSYmKFRmKHIsQSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKSxvPTB8dW4ociw1OTI4OCksYm4ociksYT1BKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYz0wfGFyW2ErMjQ+PjJdLHQ9MHxNZihsPS0xLDB8YXJbKHQ9YSs3NnwwKT4+Ml0pPyhUZihyLGEpLGw9MHx1bihyLDU5MjMyKSxsPTB8SGJbMzEmYXJbMjgrKDB8YXJbbD4+Ml0pPj4yXV0obCwzMiksYm4ociksbD1sPDwyND4+MjQsYXJbdD4+Ml09bCk6MHxhclt0Pj4yXSxsPTB8YXJbMjQrKDB8YXJbbz4+Ml0pPj4yXSxhcltpPj4yXT1jLGFyW3I+PjJdPWFyW2k+PjJdLDB8S2JbMzEmbF0obyxyLGEsMjU1JnQsZSl8fERmKGw9QSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLDV8YXJbbCsxNj4+Ml0pKSxqZihmKSx1cj1uLDB8QX1mdW5jdGlvbiBLZihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTA7cmV0dXJuIG49dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLGk9MTIrbnwwLGY9OCtufDAsemYobixBfD0wKSwwfHRyW24+PjBdJiYoVGYoaSxBKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApLGE9MHx1bihpLDU5Mjg4KSxibihpKSxjPUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxsPTB8YXJbYysyND4+Ml0sbz0wfE1mKHU9LTEsMHxhclsobz1jKzc2fDApPj4yXSk/KFRmKGksYyksdT0wfHVuKGksNTkyMzIpLHU9MHxIYlszMSZhclsyOCsoMHxhclt1Pj4yXSk+PjJdXSh1LDMyKSxibihpKSx1PXU8PDI0Pj4yNCxhcltvPj4yXT11KTowfGFyW28+PjJdLHU9MHxhclsyOCsoMHxhclthPj4yXSk+PjJdLGFyW2Y+PjJdPWwsYXJbaT4+Ml09YXJbZj4+Ml0sMHwkYls2MyZ1XShhLGksYywyNTUmbyxlLHIpfHxEZih1PUErKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCw1fGFyW3UrMTY+PjJdKSksamYobiksdXI9dCwwfEF9ZnVuY3Rpb24gcWYoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO2Y9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLFNmKEF8PTApLGFyW0E+PjJdPTE0NTA4LGFyW0ErMzI+PjJdPWUscnUoZixBKzR8MCksZT0wfHVuKGYsNjEwMjQpLGJuKGYpLGFyW0ErMzY+PjJdPWUsYXJbQSs0MD4+Ml09cixyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1yLHVyPWl9ZnVuY3Rpb24gJGYoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO2Y9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLE9mKEF8PTApLGFyW0E+PjJdPTE0NDQ0LGFyW0ErMzI+PjJdPWUscnUoZixBKzR8MCksZT0wfHVuKGYsNjEwMzIpLGJuKGYpLGFyW0ErMzY+PjJdPWUsYXJbQSs0MD4+Ml09cixyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1yLHVyPWl9ZnVuY3Rpb24gQW4oQSl7bWYoQXw9MCl9ZnVuY3Rpb24gZW4oQSl7a2YoQXw9MCl9ZnVuY3Rpb24gcm4oQSl7bWYoQXw9MCl9ZnVuY3Rpb24gZm4oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZihpPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxmPTE2K2l8MCxrPTgraXwwLHI9NCtpfDAsbj0oQXw9MCkrNDh8MCwwfHRyWyhhPUErNTJ8MCk+PjBdKW89MHxhcltuPj4yXSxlJiYoaz0tMSxhcltuPj4yXT1rLHRyW2E+PjBdPTApO2Vsc2V7Zm9yKG89MTwoMHwobz0wfGFyW0ErNDQ+PjJdKSk/bzoxLGQ9QSszMnwwLGE9MDs7KXtpZigoMHxvKTw9KDB8YSkpe3M9OTticmVha31pZigtMT09KDB8KGM9MHxXaSgwfGFyW2Q+PjJdKSkpKXtzPTg7YnJlYWt9dHJbZithPj4wXT1jLGE9YSsxfDB9aWYoOD09KDB8cykpbz0tMTtlbHNlIGlmKDk9PSgwfHMpKXtkb3tpZigwfHRyW0ErNTM+PjBdKWFyW2s+PjJdPXRyW2Y+PjBdLHM9MTk7ZWxzZXtiPUErNDB8MCxsPUErMzZ8MCx1PWsrNHwwO0E6Zm9yKDs7KXtzd2l0Y2goaD0wfGFyW2I+PjJdLGE9MHxhclsoYz1oKT4+Ml0sYz0wfGFyW2MrND4+Ml0sdz0wfGFyW2w+PjJdLEE9ZitvfDAsMHxlc1sxNSZhclsxNisoMHxhclt3Pj4yXSk+PjJdXSh3LGgsZixBLHIsayx1LGkpKXtjYXNlIDM6cz0xNjticmVhayBBO2Nhc2UgMjpzPTE4O2JyZWFrIEE7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX1pZih3PTB8YXJbYj4+Ml0sYXJbdz4+Ml09YSxhclt3KzQ+PjJdPWMsOD09KDB8bykpe3M9MTg7YnJlYWt9aWYoLTE9PSgwfChhPTB8V2koMHxhcltkPj4yXSkpKSl7cz0xODticmVha310cltBPj4wXT1hLG89bysxfDB9aWYoMTY9PSgwfHMpKWFyW2s+PjJdPXRyW2Y+PjBdO2Vsc2UgaWYoMTg9PSgwfHMpKXtvPS0xO2JyZWFrfXM9MTl9fXdoaWxlKDApO0E6ZG97aWYoMTk9PSgwfHMpKXtlOmRve2lmKCFlKXtkb3tpZigoMHxvKTw9MClicmVhayBlO3c9MHxnZigwfHRyW2YrKG89bystMXwwKT4+MF0pfXdoaWxlKC0xIT0oMHx1Zih3LDB8YXJbZD4+Ml0pKSk7bz0tMTticmVhayBBfXc9MHxnZigwfGFyW2s+PjJdKSxhcltuPj4yXT13fXdoaWxlKDApO289MHxnZigwfGFyW2s+PjJdKX19d2hpbGUoMCl9fXJldHVybiB1cj10LDB8b31mdW5jdGlvbiBubihBKXtrZihBfD0wKX1mdW5jdGlvbiB0bihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKGk9dXI9KHQ9dXIpKzMxJi0zMix1cj11ciszMnwwLGY9MTYraXwwLGs9OCtpfDAscj00K2l8MCxuPShBfD0wKSs0OHwwLDB8dHJbKGE9QSs1MnwwKT4+MF0pbz0wfGFyW24+PjJdLGUmJihrPS0xLGFyW24+PjJdPWssdHJbYT4+MF09MCk7ZWxzZXtmb3Iobz0xPCgwfChvPTB8YXJbQSs0ND4+Ml0pKT9vOjEsZD1BKzMyfDAsYT0wOzspe2lmKCgwfG8pPD0oMHxhKSl7cz05O2JyZWFrfWlmKC0xPT0oMHwoYz0wfFdpKDB8YXJbZD4+Ml0pKSkpe3M9ODticmVha310cltmK2E+PjBdPWMsYT1hKzF8MH1pZig4PT0oMHxzKSlvPS0xO2Vsc2UgaWYoOT09KDB8cykpe2Rve2lmKDB8dHJbQSs1Mz4+MF0pdHJbaz4+MF09MHx0cltmPj4wXSxzPTE5O2Vsc2V7Yj1BKzQwfDAsbD1BKzM2fDAsdT1rKzF8MDtBOmZvcig7Oyl7c3dpdGNoKGg9MHxhcltiPj4yXSxhPTB8YXJbKGM9aCk+PjJdLGM9MHxhcltjKzQ+PjJdLHc9MHxhcltsPj4yXSxBPWYrb3wwLDB8ZXNbMTUmYXJbMTYrKDB8YXJbdz4+Ml0pPj4yXV0odyxoLGYsQSxyLGssdSxpKSl7Y2FzZSAzOnM9MTY7YnJlYWsgQTtjYXNlIDI6cz0xODticmVhayBBO2Nhc2UgMTpicmVhaztkZWZhdWx0OmJyZWFrIEF9aWYodz0wfGFyW2I+PjJdLGFyW3c+PjJdPWEsYXJbdys0Pj4yXT1jLDg9PSgwfG8pKXtzPTE4O2JyZWFrfWlmKC0xPT0oMHwoYT0wfFdpKDB8YXJbZD4+Ml0pKSkpe3M9MTg7YnJlYWt9dHJbQT4+MF09YSxvPW8rMXwwfWlmKDE2PT0oMHxzKSl0cltrPj4wXT0wfHRyW2Y+PjBdO2Vsc2UgaWYoMTg9PSgwfHMpKXtvPS0xO2JyZWFrfXM9MTl9fXdoaWxlKDApO0E6ZG97aWYoMTk9PSgwfHMpKXtlOmRve2lmKCFlKXtkb3tpZigoMHxvKTw9MClicmVhayBlO3c9MHxoZigwfHRyW2YrKG89bystMXwwKT4+MF0pfXdoaWxlKC0xIT0oMHx1Zih3LDB8YXJbZD4+Ml0pKSk7bz0tMTticmVhayBBfXc9MHxoZigwfHRyW2s+PjBdKSxhcltuPj4yXT13fXdoaWxlKDApO289MHxoZigwfHRyW2s+PjBdKX19d2hpbGUoMCl9fXJldHVybiB1cj10LDB8b31mdW5jdGlvbiBvbihBKXthbihBfD0wKX1mdW5jdGlvbiBhbihBKXswfWZ1bmN0aW9uIGNuKEEpe2FuKCl9ZnVuY3Rpb24gbG4oQSxlKXtlfD0wLGFyWyhBfD0wKT4+Ml09YXJbZT4+Ml19ZnVuY3Rpb24gdW4oQSxlKXtyZXR1cm4gZXw9MCxBPTB8YXJbKEF8PTApPj4yXSwwfChyPUEsaT0wfGhuKGUpLGl8PTAsMHxhclsoMHxhcls4KyhyfD0wKT4+Ml0pKyhpPDwyKT4+Ml0pO3ZhciByLGl9ZnVuY3Rpb24gYm4oQSl7bHUoMHxhclsoQXw9MCk+PjJdKX1mdW5jdGlvbiBzbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGI9MCxzPTA7dT0oMHwobD0wfGFyWyhpfD0wKT4+Ml0pKT09KDB8cik7ZG97aWYodSl7aWYoIShiPSgwfHRyW2MrMjQ+PjBdKT09QTw8MjQ+PjI0KSYmKDB8dHJbYysyNT4+MF0pIT1BPDwyND4+MjQpe3M9NTticmVha31hcltpPj4yXT1yKzEsdHJbcj4+MF09Yj80Mzo0NSxiPWFyW2Y+PjJdPTB9ZWxzZSBzPTV9d2hpbGUoMCk7QTpkb3tpZig1PT0oMHxzKSl7aWYocz0wfHRyW3QrMTE+PjBdLEE8PDI0Pj4yND09bjw8MjQ+PjI0JiYwIT0oMHwoczw8MjQ+PjI0PDA/MHxhclt0KzQ+PjJdOjI1NSZzKSkpe2lmKDE2MDw9KChiPTB8YXJbYT4+Ml0pLW98MCkpe2I9MDticmVha31pPTB8YXJbZj4+Ml0sYXJbYT4+Ml09Yis0LGFyW2I+PjJdPWksYj1hcltmPj4yXT0wO2JyZWFrfWZvcih0PWMrMjZ8MCxuPTA7Oyl7aWYoYj1jK258MCwyNj09KDB8bikpe2I9dDticmVha31pZigoMHx0cltiPj4wXSk9PUE8PDI0Pj4yNClicmVhaztuPW4rMXwwfWlmKDIzPCgwfChiPWItY3wwKSkpYj0tMTtlbHNle3N3aXRjaChuPTUzNjQ4K2J8MCwwfGUpe2Nhc2UgMTA6Y2FzZSA4OmlmKCgwfGUpPD0oMHxiKSl7Yj0tMTticmVhayBBfWJyZWFrO2Nhc2UgMTY6aWYoMjI8PSgwfGIpKXtpZih1KXtiPS0xO2JyZWFrIEF9aWYoMzw9KGwtcnwwKSl7Yj0tMTticmVhayBBfWlmKDQ4IT0oMHx0cltsLTE+PjBdKSl7Yj0tMTticmVhayBBfWI9KGFyW2Y+PjJdPTApfHRyW24+PjBdLGFyW2k+PjJdPTErbCx0cltsPj4wXT1iLGI9MDticmVhayBBfX1iPTB8dHJbbj4+MF0sYXJbaT4+Ml09MStsLHRyW2w+PjBdPWIsYXJbZj4+Ml09MSsoMHxhcltmPj4yXSksYj0wfX19d2hpbGUoMCk7cmV0dXJuIDB8Yn1mdW5jdGlvbiBkbigpe3ZhciBBPTA7cmV0dXJuIDA9PSgwfHRyWzU2NjI0XSkmJjB8aWIoNTY2MjQpJiYoQT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MDtpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MDtBOmRve2lmKDB8bmYocikpZm9yKG49MDsxPDxuJkF8MCYmKGE9MHxmZihuLGUpLGFyW3IrKG48PDIpPj4yXT1hKSw2IT0oMHwobj1uKzF8MCkpOyk7ZWxzZXtmb3IoYT0wPT0oMHxyKSxvPXQ9MDt0PSgwIT0oMHwobj1hfChuPTAhPSgxPDxvJkF8MCkpPzB8ZmYobyxuP2U6Nzk2NTkpOjB8YXJbcisobzw8Mik+PjJdKSkmMSkrdHwwLGFyW2krKG88PDIpPj4yXT1uLDYhPSgwfChvPW8rMXwwKSk7KTtzd2l0Y2goMHx0KXtjYXNlIDA6cj01ODEyODticmVhayBBO2Nhc2UgMTppZigxMDEwMCE9KDB8YXJbaT4+Ml0pKWJyZWFrO3I9MTAxNDg7YnJlYWsgQX19fXdoaWxlKDApO3JldHVybiB1cj1mLDB8cn0oMjE0NzQ4MzY0Nyw1MzY4NCwwKSxhclsxNDgxMF09QSksMHxhclsxNDgxMF19ZnVuY3Rpb24ga24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuO3JldHVybiBuPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltuPj4yXT1pLGk9MHxyZihlKSxlPTB8SGkoQSxyLG4pLDB8aSYmcmYoaSksdXI9ZiwwfGV9ZnVuY3Rpb24gaG4oQSl7QXw9MDt2YXIgZSxyLGksZixuPTA7cmV0dXJuIG49dXI9KGY9dXIpKzMxJi0zMix1cj11cis0OHwwLGU9biszMnwwLHI9bisyNHwwLGFyWyhuPShpPW4pKzE2fDApPj4yXT00NDIsYXJbbis0Pj4yXT0wLGFyW2U+PjJdPWFyW24+PjJdLGFyWzQrZT4+Ml09YXJbbis0Pj4yXSxmdW5jdGlvbihBLGUscil7QXw9MCxyfD0wO3ZhciBpO2k9MHxhclsoZT1lfDApPj4yXSxlPTB8YXJbZSs0Pj4yXSxhcltBPj4yXT1yLGFyW0ErND4+Ml09aSxhcltBKzg+PjJdPWV9KGksZSxBKSwtMSE9KDB8YXJbQT4+Ml0pJiYoYXJbZT4+Ml09aSxhcltyPj4yXT1lLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MCxnYigpO2Zvcig7MT09KDB8YXJbQT4+Ml0pOyloQSg2MTEwMCw2MTA3Mik7MHxhcltBPj4yXT9aYigpOihhcltBPj4yXT0xLFpiKCksaXNbNTExJnJdKGUpLGdiKCksYXJbQT4+Ml09LTEsWmIoKSxtYigpKX0oQSxyLDQ0MykpLHVyPWYsKDB8YXJbQSs0Pj4yXSktMXwwfWZ1bmN0aW9uIHduKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0O3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLFRmKHQsZXw9MCksZT0wfHVuKHQsNTkyMzIpLFBiWzcmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0oZSw1MzY0OCw1MzY4MCxyKSxyPTB8dW4odCw1OTI0OCksZT0wfGpiWzEyNyZhclsxMisoMHxhcltyPj4yXSk+PjJdXShyKSx0cltpPj4wXT1lLGk9MHxqYlsxMjcmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ociksdHJbZj4+MF09aSxmc1s2MyZhclsyMCsoMHxhcltyPj4yXSk+PjJdXShBLHIpLGJuKHQpLHVyPW59ZnVuY3Rpb24gdm4oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxjfD0wLGx8PTAsdXw9MDt2YXIgYixzPTAsZD0wO2I9YXw9MDtBOmRve2lmKEE8PDI0Pj4yND09bjw8MjQ+PjI0KWE9MHx0cltlPj4wXT8ocj0odHJbZT4+MF09MCl8YXJbZj4+Ml0sYXJbZj4+Ml09cisxLHRyW3I+PjBdPTQ2LDAhPSgwfCgoZj0wfHRyW28rMTE+PjBdKTw8MjQ+PjI0PDA/MHxhcltvKzQ+PjJdOjI1NSZmKSkmJigocz0wfGFyW2M+PjJdKS1ifDApPDE2MCYmKGE9MHxhcltsPj4yXSxhcltjPj4yXT1zKzQsYXJbcz4+Ml09YSksMCk6LTE7ZWxzZXtpZihBPDwyND4+MjQ9PXQ8PDI0Pj4yNCYmMHwoKHQ9MHx0cltvKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbys0Pj4yXToyNTUmdCkpe2lmKCEoMHx0cltlPj4wXSkpe2E9LTE7YnJlYWt9aWYoMTYwPD0oKGE9MHxhcltjPj4yXSktYnwwKSl7YT0wO2JyZWFrfWY9MHxhcltsPj4yXSxhcltjPj4yXT1hKzQsYXJbYT4+Ml09ZixhPWFyW2w+PjJdPTA7YnJlYWt9Zm9yKG49dSszMnwwLHM9MDs7KXtpZihhPXUrc3wwLDMyPT0oMHxzKSl7YT1uO2JyZWFrfWlmKCgwfHRyW2E+PjBdKT09QTw8MjQ+PjI0KWJyZWFrO3M9cysxfDB9aWYoMzE8KDB8KHM9YS11fDApKSlhPS0xO2Vsc2Ugc3dpdGNoKG49MHx0cls1MzY0OCtzPj4wXSwwfHMpe2Nhc2UgMjQ6Y2FzZSAyNTppZigoMHwoYT0wfGFyW2Y+PjJdKSkhPSgwfGkpJiYoOTUmdHJbYSstMT4+MF0pIT0oMTI3JnRyW3I+PjBdKSl7YT0tMTticmVhayBBfWFyW2Y+PjJdPWErMSx0clthPj4wXT1uLGE9MDticmVhayBBO2Nhc2UgMjM6Y2FzZSAyMjp0cltyPj4wXT04MCxhPTB8YXJbZj4+Ml0sYXJbZj4+Ml09YSsxLHRyW2E+PjBdPW4sYT0wO2JyZWFrIEE7ZGVmYXVsdDppZigoMHwoYT05NSZuKSk9PSgwfHRyW3I+PjBdKSYmKHRyW3I+PjBdPTEyOHxhLDB8dHJbZT4+MF0pJiYodHJbZT4+MF09MCl8KChyPTB8dHJbbysxMT4+MF0pPDwyND4+MjQ8MD8wfGFyW28rND4+Ml06MjU1JnIpJiYoKGQ9MHxhcltjPj4yXSktYnwwKTwxNjAmJihyPTB8YXJbbD4+Ml0sYXJbYz4+Ml09ZCs0LGFyW2Q+PjJdPXIpLGM9MHxhcltmPj4yXSxhcltmPj4yXT1jKzEsdHJbYz4+MF09biwyMTwoMHxzKSl7YT0wO2JyZWFrIEF9YXJbbD4+Ml09MSsoMHxhcltsPj4yXSksYT0wO2JyZWFrIEF9fX13aGlsZSgwKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIG1uKEEsZSxyKXtyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7cmV0dXJuIGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLCgwfChBfD0wKSk9PSgwfChlfD0wKSk/KGFyW3I+PjJdPTQsbj0wKToodD0wfGFyWyh0PTEwMzY0KT4+Ml0sYXJbMTAzNjQ+PjJdPTAsbj0rJGkoQSxpLGRuKCkpLChBPTB8YXJbKEE9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09dCksKDB8YXJbaT4+Ml0pPT0oMHxlKT8zND09KDB8QSkmJihvPTYpOihuPTAsbz02KSw2PT0oMHxvKSYmKGFyW3I+PjJdPTQpKSx1cj1mLCtufWZ1bmN0aW9uIGduKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2Y9KGE9MHx0clsoQXw9MCkrMTE+PjBdKTw8MjQ+PjI0PDAsbj0wfGFyWyhvPUErNHwwKT4+Ml0sYSY9MjU1O2Rve2lmKDB8KGY/bjphKSl7aWYoKDB8ZSkhPSgwfHIpKXtmb3Iobj1yLHQ9ZTshKChuPW4rLTR8MCk+Pj4wPD10Pj4+MCk7KWw9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltuPj4yXSxhcltuPj4yXT1sLHQ9dCs0fDA7bj0wfGFyW28+PjJdfWZvcihyPXIrLTR8MCxBPShsPWY/MHxhcltBPj4yXTpBKSsoZj9uOmEpfDAsbj1sO289MDwodD0wfHRyW24+PjBdKTw8MjQ+PjI0JnQ8PDI0Pj4yNCE9MTI3LCEocj4+PjA8PWU+Pj4wKTspe2lmKG8mJih0PDwyND4+MjR8MCkhPSgwfGFyW2U+PjJdKSl7Yz0xMDticmVha31lPWUrNHwwLG49MTwoQS1ufDApP24rMXwwOm59aWYoMTA9PSgwfGMpKXthcltpPj4yXT00O2JyZWFrfW8mJigoMHxhcltyPj4yXSktMXwwKT4+PjA+PXQ8PDI0Pj4yND4+PjAmJihhcltpPj4yXT00KX19d2hpbGUoMCl9ZnVuY3Rpb24gWm4oQSxlLHIpe3J8PTA7dmFyIGksZixuPTAsdD0wLG89MDtyZXR1cm4gaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKT8oYXJbcj4+Ml09NCxuPTApOih0PTB8YXJbKHQ9MTAzNjQpPj4yXSxhclsxMDM2ND4+Ml09MCxuPStxaShBLGksZG4oKSksKEE9MHxhclsoQT0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT10KSwoMHxhcltpPj4yXSk9PSgwfGUpPzM0PT0oMHxBKSYmKG89Nik6KG49MCxvPTYpLDY9PSgwfG8pJiYoYXJbcj4+Ml09NCkpLHVyPWYsK259ZnVuY3Rpb24gcG4oQSxlLHIpe3J8PTA7dmFyIGksZixuPTAsdD0wLG89MDtyZXR1cm4gaT11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKT8oYXJbcj4+Ml09NCxuPTApOih0PTB8YXJbKHQ9MTAzNjQpPj4yXSxhclsxMDM2ND4+Ml09MCxuPStLaShBLGksZG4oKSksKEE9MHxhclsoQT0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT10KSwoMHxhcltpPj4yXSk9PSgwfGUpPzM0PT0oMHxBKSYmKG89Nik6KG49MCxvPTYpLDY9PSgwfG8pJiYoYXJbcj4+Ml09NCkpLHVyPWYsK259ZnVuY3Rpb24geW4oQSl7c3dpdGNoKDc0JmFyWyhBfD0wKSs0Pj4yXSl7Y2FzZSA2NDpBPTg7YnJlYWs7Y2FzZSA4OkE9MTY7YnJlYWs7Y2FzZSAwOkE9MDticmVhaztkZWZhdWx0OkE9MTB9cmV0dXJuIDB8QX1mdW5jdGlvbiBCbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuO249dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLFRmKG4sZXw9MCksZT0wfHVuKG4sNTkyMzIpLFBiWzcmYXJbMzIrKDB8YXJbZT4+Ml0pPj4yXV0oZSw1MzY0OCw1MzY3NCxyKSxyPTB8dW4obiw1OTI0OCksZT0wfGpiWzEyNyZhclsxNisoMHxhcltyPj4yXSk+PjJdXShyKSx0cltpPj4wXT1lLGZzWzYzJmFyWzIwKygwfGFyW3I+PjJdKT4+Ml1dKEEsciksYm4obiksdXI9Zn1mdW5jdGlvbiBFbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MCxhPTA7Zj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDA7ZG97aWYoKDB8QSk9PSgwfGUpKWFyW3I+PjJdPTQsQT1pPTA7ZWxzZXtpZig0NT09KDB8dHJbQT4+MF0pKXthcltyPj4yXT00LEE9aT0wO2JyZWFrfW89MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8aWwoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byksKDB8YXJbZj4+Ml0pPT0oMHxlKT8zND09KDB8dCkmJihpPUE9LTEsYT04KTooaT1BPTAsYT04KSw4PT0oMHxhKSYmKGFyW3I+PjJdPTQpfX13aGlsZSgwKTtyZXR1cm4gRD1pLHVyPW4sMHxBfWZ1bmN0aW9uIFhuKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwO2Rve2lmKCgwfEEpPT0oMHxlKSlhcltyPj4yXT00LEE9MDtlbHNle2lmKDQ1PT0oMHx0cltBPj4wXSkpe2FyW3I+PjJdPTQsQT0wO2JyZWFrfW89MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8aWwoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byk7ZG97aWYoKDB8YXJbZj4+Ml0pPT0oMHxlKSl7aWYoMDxpPj4+MHwwPT0oMHxpKSY0Mjk0OTY3Mjk1PEE+Pj4wfDM0PT0oMHx0KSl7YXJbcj4+Ml09NCxBPS0xO2JyZWFrfWJyZWFrfWFyW3I+PjJdPTQsQT0wfXdoaWxlKDApfX13aGlsZSgwKTtyZXR1cm4gdXI9biwwfEF9ZnVuY3Rpb24gV24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTA7Zj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDA7ZG97aWYoKDB8QSk9PSgwfGUpKWFyW3I+PjJdPTQsQT0wO2Vsc2V7aWYoNDU9PSgwfHRyW0E+PjBdKSl7YXJbcj4+Ml09NCxBPTA7YnJlYWt9bz0wfGFyWyhvPTEwMzY0KT4+Ml0sQT0oYXJbKHQ9MTAzNjQpPj4yXT0wKXxpbChBLGYsaSxkbigpKSxpPUQsKHQ9MHxhclsodD0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT1vKTtkb3tpZigoMHxhcltmPj4yXSk9PSgwfGUpKXtpZigwPGk+Pj4wfDA9PSgwfGkpJjQyOTQ5NjcyOTU8QT4+PjB8MzQ9PSgwfHQpKXthcltyPj4yXT00LEE9LTE7YnJlYWt9YnJlYWt9YXJbcj4+Ml09NCxBPTB9d2hpbGUoMCl9fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBJbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MDtmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MDtkb3tpZigoMHxBKT09KDB8ZSkpYXJbcj4+Ml09NCxBPTA7ZWxzZXtpZig0NT09KDB8dHJbQT4+MF0pKXthcltyPj4yXT00LEE9MDticmVha31vPTB8YXJbKG89MTAzNjQpPj4yXSxBPShhclsodD0xMDM2NCk+PjJdPTApfGlsKEEsZixpLGRuKCkpLGk9RCwodD0wfGFyWyh0PTEwMzY0KT4+Ml0pfHwoYXJbMTAzNjQ+PjJdPW8pO2Rve2lmKCgwfGFyW2Y+PjJdKT09KDB8ZSkpe2lmKDA8aT4+PjB8MD09KDB8aSkmNjU1MzU8QT4+PjB8MzQ9PSgwfHQpKXthcltyPj4yXT00LEE9LTE7YnJlYWt9QSY9NjU1MzU7YnJlYWt9YXJbcj4+Ml09NCxBPTB9d2hpbGUoMCl9fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBDbihBLGUscixpKXtyfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wO3JldHVybiBmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwoMHwoQXw9MCkpPT0oMHwoZXw9MCkpPyhhcltyPj4yXT00LEE9aT0wKToobz0wfGFyWyhvPTEwMzY0KT4+Ml0sQT0oYXJbKHQ9MTAzNjQpPj4yXT0wKXxwaShBLGYsaSxkbigpKSxpPUQsKHQ9MHxhclsodD0xMDM2NCk+PjJdKXx8KGFyWzEwMzY0Pj4yXT1vKSwoMHxhcltmPj4yXSk9PSgwfGUpPzM0PT0oMHx0KSYmKGFyW3I+PjJdPTQsQT0oaT0wPCgwfGkpfDA9PSgwfGkpJjA8QT4+PjApPy0xOjAsaT1pPzIxNDc0ODM2NDc6LTIxNDc0ODM2NDgpOihhcltyPj4yXT00LGk9QT0wKSksRD1pLHVyPW4sMHxBfWZ1bmN0aW9uIEduKEEsZSxyLGkpe3J8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTA7aWYoZj11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDB8KEF8PTApKT09KDB8KGV8PTApKSlhcltyPj4yXT00LEE9MDtlbHNle289MHxhclsobz0xMDM2NCk+PjJdLEE9KGFyWyh0PTEwMzY0KT4+Ml09MCl8cGkoQSxmLGksZG4oKSksaT1ELCh0PTB8YXJbKHQ9MTAzNjQpPj4yXSl8fChhclsxMDM2ND4+Ml09byk7QTpkb3tpZigoMHxhcltmPj4yXSk9PSgwfGUpKXtkb3tpZigzNCE9KDB8dCkpe2lmKCgwfGkpPC0xfC0xPT0oMHxpKSZBPj4+MDwyMTQ3NDgzNjQ4KXthcltyPj4yXT00O2JyZWFrfWlmKDA8KDB8aSl8MD09KDB8aSkmMjE0NzQ4MzY0NzxBPj4+MCl7YXJbcj4+Ml09NCxBPTIxNDc0ODM2NDc7YnJlYWsgQX1icmVhayBBfWlmKGFyW3I+PjJdPTQsMDwoMHxpKXwwPT0oMHxpKSYwPEE+Pj4wKXtBPTIxNDc0ODM2NDc7YnJlYWsgQX19d2hpbGUoMCk7QT0tMjE0NzQ4MzY0OH1lbHNlIGFyW3I+PjJdPTQsQT0wfXdoaWxlKDApfXJldHVybiB1cj1uLDB8QX1mdW5jdGlvbiBWbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtmb3IoYz11cj0obz11cikrMzEmLTMyLHVyPXVyKzExMnwwLDEwMDwobD0oKGl8PTApLShyfD0wKXwwKS8xMnwwKT4+PjA/KGM9MHx5YyhsKSk/Zz1hPWM6Z3UoKTooYT1jLGc9MCksYj1yLHM9YSxjPTA7KDB8YikhPSgwfGkpOykodT0wfHRyW2IrMTE+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LHU/dHJbcz4+MF09MToodHJbcz4+MF09MixsPWwrLTF8MCxjPWMrMXwwKSxiPWIrMTJ8MCxzPXMrMXwwO209MCx3PWM7QTpmb3IoOzspe2M9MHxhcltBPj4yXTtkb3tpZihjKXtpZigwfE1mKGM9KDB8KHU9MHxhcltjKzEyPj4yXSkpPT0oMHxhcltjKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oYyk6MHxoZigwfHRyW3U+PjBdKSwtMSkpe2FyW0E+PjJdPTAscz0xO2JyZWFrfXM9MD09KDB8YXJbQT4+Ml0pO2JyZWFrfXM9MX13aGlsZSgwKTtpZihjPSh1PTB8YXJbZT4+Ml0pPzB8TWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGhmKDB8dHJbYz4+MF0pLC0xKT8odT1hcltlPj4yXT0wLDEpOjA6KHU9MCwxKSxiPTB8YXJbQT4+Ml0sISgwIT0oMHxsKSYoc15jKSkpYnJlYWs7Zm9yKGM9KDB8KGM9MHxhcltiKzEyPj4yXSkpPT0oMHxhcltiKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYj4+Ml0pPj4yXV0oYik6MHxoZigwfHRyW2M+PjBdKSxjJj0yNTUsdHx8KGM9MHxIYlszMSZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLGMpKSx2PW0rMXwwLGs9cixkPTAsaD1hOygwfGspIT0oMHxpKTspe2Rve2lmKDE9PSgwfHRyW2g+PjBdKSl7aWYodT0oMHx0clsoYj1rKzExfDApPj4wXSk8MD8wfGFyW2s+PjJdOmssdT0wfHRyW3UrbT4+MF0sdHx8KHU9MHxIYlszMSZhclsxMisoMHxhcltmPj4yXSk+PjJdXShmLHUpKSxzPWwrLTF8MCxjPDwyND4+MjQhPXU8PDI0Pj4yNCl7dHJbaD4+MF09MCx1PWQsYj13LGw9czticmVha30odT0wfHRyW2I+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2srND4+Ml06dSY9MjU1LCgwfHUpPT0oMHx2KT8odHJbaD4+MF09MixiPXcrKHU9MSl8MCxsPXMpOih1PTEsYj13KX1lbHNlIHU9ZCxiPXd9d2hpbGUoMCk7az1rKzEyfDAsZD11LGg9aCsxfDAsdz1ifWlmKGQpaWYoYz0wfGFyW0E+PjJdLCgwfChiPTB8YXJbKHU9YysxMnwwKT4+Ml0pKT09KDB8YXJbYysxNj4+Ml0pP2piWzEyNyZhcls0MCsoMHxhcltjPj4yXSk+PjJdXShjKTooYXJbdT4+Ml09YisxLGhmKDB8dHJbYj4+MF0pKSwxPCh3K2x8MCk+Pj4wKWZvcihiPXIscz1hLGM9dzs7KXtpZigoMHxiKT09KDB8aSkpe209dix3PWM7Y29udGludWUgQX0yPT0oMHx0cltzPj4wXSkmJigodT0wfHRyW2IrMTE+PjBdKTw8MjQ+PjI0PDA/dT0wfGFyW2IrND4+Ml06dSY9MjU1LCgwfHUpIT0oMHx2KSYmKGM9YystMXwodHJbcz4+MF09MCkpKSxiPWIrMTJ8MCxzPXMrMXwwfWVsc2UgbT12O2Vsc2UgbT12fWRve2lmKGIpe2lmKDB8TWYoYz0oMHwoYz0wfGFyW2IrMTI+PjJdKSk9PSgwfGFyW2IrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltiPj4yXSk+PjJdXShiKTowfGhmKDB8dHJbYz4+MF0pLC0xKSl7YXJbQT4+Ml09MCxsPTE7YnJlYWt9bD0wPT0oMHxhcltBPj4yXSk7YnJlYWt9bD0xfXdoaWxlKDApO2Rve2lmKHUpe2lmKDB8TWYoYz0oMHwoYz0wfGFyW3UrMTI+PjJdKSk9PSgwfGFyW3UrMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt1Pj4yXSk+PjJdXSh1KTowfGhmKDB8dHJbYz4+MF0pLC0xKSl7YXJbZT4+Ml09MCxaPTQxO2JyZWFrfWlmKGwpYnJlYWs7Wj03NzticmVha31aPTQxfXdoaWxlKDApO2Zvcig0MT09KDB8WikmJmwmJihaPTc3KSw3Nz09KDB8WikmJihhcltuPj4yXT0yfGFyW24+PjJdKTs7KXtpZigoMHxyKT09KDB8aSkpe1o9ODE7YnJlYWt9aWYoMj09KDB8dHJbYT4+MF0pKWJyZWFrO3I9cisxMnwwLGE9YSsxfDB9cmV0dXJuIDgxPT0oMHxaKSYmKGFyW24+PjJdPTR8YXJbbj4+Ml0scj1pKSxCYyhnKSx1cj1vLDB8cn1mdW5jdGlvbiBGbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGI9MCxzPTA7dT0oMHwobD0wfGFyWyhpfD0wKT4+Ml0pKT09KDB8cik7ZG97aWYodSl7aWYoIShiPSgwfGFyW2MrOTY+PjJdKT09KDB8QSkpJiYoMHxhcltjKzEwMD4+Ml0pIT0oMHxBKSl7cz01O2JyZWFrfWFyW2k+PjJdPXIrMSx0cltyPj4wXT1iPzQzOjQ1LGI9YXJbZj4+Ml09MH1lbHNlIHM9NX13aGlsZSgwKTtBOmRve2lmKDU9PSgwfHMpKXtpZihzPTB8dHJbdCsxMT4+MF0sKDB8QSk9PSgwfG4pJiYwIT0oMHwoczw8MjQ+PjI0PDA/MHxhclt0KzQ+PjJdOjI1NSZzKSkpe2lmKDE2MDw9KChiPTB8YXJbYT4+Ml0pLW98MCkpe2I9MDticmVha31pPTB8YXJbZj4+Ml0sYXJbYT4+Ml09Yis0LGFyW2I+PjJdPWksYj1hcltmPj4yXT0wO2JyZWFrfWZvcih0PWMrMTA0fDAsbj0wOzspe2lmKGI9Yysobjw8Mil8MCwyNj09KDB8bikpe2I9dDticmVha31pZigoMHxhcltiPj4yXSk9PSgwfEEpKWJyZWFrO249bisxfDB9aWYobj0oYj1iLWN8MCk+PjIsOTI8KDB8YikpYj0tMTtlbHNle3N3aXRjaCh0PTUzNjQ4K258MCwwfGUpe2Nhc2UgMTA6Y2FzZSA4OmlmKCgwfGUpPD0oMHxuKSl7Yj0tMTticmVhayBBfWJyZWFrO2Nhc2UgMTY6aWYoODg8PSgwfGIpKXtpZih1KXtiPS0xO2JyZWFrIEF9aWYoMzw9KGwtcnwwKSl7Yj0tMTticmVhayBBfWlmKDQ4IT0oMHx0cltsLTE+PjBdKSl7Yj0tMTticmVhayBBfWI9KGFyW2Y+PjJdPTApfHRyW3Q+PjBdLGFyW2k+PjJdPTErbCx0cltsPj4wXT1iLGI9MDticmVhayBBfX1iPTB8dHJbdD4+MF0sYXJbaT4+Ml09MStsLHRyW2w+PjBdPWIsYXJbZj4+Ml09MSsoMHxhcltmPj4yXSksYj0wfX19d2hpbGUoMCk7cmV0dXJuIDB8Yn1mdW5jdGlvbiBSbihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdDt0PXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZih0LGV8PTApLGU9MHx1bih0LDU5MjY0KSxQYls3JmFyWzQ4KygwfGFyW2U+PjJdKT4+Ml1dKGUsNTM2NDgsNTM2ODAscikscj0wfHVuKHQsNTkyNzIpLGU9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbaT4+Ml09ZSxpPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW2Y+PjJdPWksZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0oQSxyKSxibih0KSx1cj1ufWZ1bmN0aW9uIE5uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscz0wLGQ9MDtiPWF8PTA7QTpkb3tpZigoMHxBKT09KDB8bikpYT0wfHRyW2U+PjBdPyhyPSh0cltlPj4wXT0wKXxhcltmPj4yXSxhcltmPj4yXT1yKzEsdHJbcj4+MF09NDYsMCE9KDB8KChmPTB8dHJbbysxMT4+MF0pPDwyND4+MjQ8MD8wfGFyW28rND4+Ml06MjU1JmYpKSYmKChzPTB8YXJbYz4+Ml0pLWJ8MCk8MTYwJiYoYT0wfGFyW2w+PjJdLGFyW2M+PjJdPXMrNCxhcltzPj4yXT1hKSwwKTotMTtlbHNle2lmKCgwfEEpPT0oMHx0KSYmMHwoKHQ9MHx0cltvKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbbys0Pj4yXToyNTUmdCkpe2lmKCEoMHx0cltlPj4wXSkpe2E9LTE7YnJlYWt9aWYoMTYwPD0oKGE9MHxhcltjPj4yXSktYnwwKSl7YT0wO2JyZWFrfWY9MHxhcltsPj4yXSxhcltjPj4yXT1hKzQsYXJbYT4+Ml09ZixhPWFyW2w+PjJdPTA7YnJlYWt9Zm9yKG49dSsxMjh8MCxzPTA7Oyl7aWYoYT11KyhzPDwyKXwwLDMyPT0oMHxzKSl7YT1uO2JyZWFrfWlmKCgwfGFyW2E+PjJdKT09KDB8QSkpYnJlYWs7cz1zKzF8MH1pZihhPShzPWEtdXwwKT4+MiwoMHxzKTw9MTI0KXtzd2l0Y2gobj0wfHRyWzUzNjQ4K2E+PjBdLDB8YSl7Y2FzZSAyNDpjYXNlIDI1OmlmKCgwfChhPTB8YXJbZj4+Ml0pKSE9KDB8aSkmJig5NSZ0clthKy0xPj4wXSkhPSgxMjcmdHJbcj4+MF0pKXthPS0xO2JyZWFrIEF9YXJbZj4+Ml09YSsxLHRyW2E+PjBdPW4sYT0wO2JyZWFrIEE7Y2FzZSAyMzpjYXNlIDIyOnRyW3I+PjBdPTgwO2JyZWFrO2RlZmF1bHQ6KDB8KGE9OTUmbikpPT0oMHx0cltyPj4wXSkmJih0cltyPj4wXT0xMjh8YSwwfHRyW2U+PjBdKSYmKHRyW2U+PjBdPTApfCgocj0wfHRyW28rMTE+PjBdKTw8MjQ+PjI0PDA/MHxhcltvKzQ+PjJdOjI1NSZyKSYmKChkPTB8YXJbYz4+Ml0pLWJ8MCk8MTYwJiYocj0wfGFyW2w+PjJdLGFyW2M+PjJdPWQrNCxhcltkPj4yXT1yKX1jPTB8YXJbZj4+Ml0sYXJbZj4+Ml09YysxLHRyW2M+PjBdPW4sYT0oODQ8KDB8cyl8fChhcltsPj4yXT0xKygwfGFyW2w+PjJdKSksMCl9ZWxzZSBhPS0xfX13aGlsZSgwKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIF9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG47bj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobixlfD0wKSxlPTB8dW4obiw1OTI2NCksUGJbNyZhcls0OCsoMHxhcltlPj4yXSk+PjJdXShlLDUzNjQ4LDUzNjc0LHIpLHI9MHx1bihuLDU5MjcyKSxlPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW2k+PjJdPWUsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0oQSxyKSxibihuKSx1cj1mfWZ1bmN0aW9uIFluKEEpe2diKEF8PTApfWZ1bmN0aW9uIFFuKEEpe1piKEF8PTApfWZ1bmN0aW9uIERuKEEpe2FyWyhBfD0wKT4+Ml09MCxwQShBKzR8MCwwKSxkQShBKzMyfDAsMCl9ZnVuY3Rpb24gSm4oQSl7WkEoKEF8PTApKzR8MCksc0EoQSszMnwwKX1mdW5jdGlvbiBNbihBLGUpe2V8PTA7dmFyIHIsaT0wO2lmKCEoKDB8YXJbKEF8PTApPj4yXSk+PSgwfGUpKSl7aWYoZ2Iocj1BKzR8MCksKDB8YXJbQT4+Ml0pPCgwfGUpKWZvcihpPUErMzJ8MDtoQSgwfGksMHxyKSwoMHxhcltBPj4yXSk8KDB8ZSk7KTtaYigpfX1mdW5jdGlvbiBUbihBLGUpe2V8PTA7dmFyIHI7Z2Iocj0oQXw9MCkrNHwwKSwoMHxhcltBPj4yXSk+PSgwfGUpfHwoYXJbQT4+Ml09ZSxtYigpKSxaYigpfWZ1bmN0aW9uIFVuKEEsZSl7ZXw9MDt2YXIgcjtnYihyPShBfD0wKSs0fDApLGFyW0E+PjJdPSgwfGFyW0E+PjJdKStlLG1iKCksWmIoKX1mdW5jdGlvbiBTbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wO2diKG49KEF8PTApKzQyMHwwKSwwfHRyW0E+PjBdfHwodD0wfGFyWyhpPUErOHwwKT4+Ml0sYz0oMHxhcltBKzEyPj4yXSktdHwwLGE9MHxhclsobz1BKzIwfDApPj4yXSwoMHwoMD09KDB8Yyk/MDooYzw8OCktMXwwKSk9PSgocj0wfGFyWyhmPUErMjR8MCk+PjJdKSthfDApPyhmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0xNisoQXw9MCl8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSx0PTB8YXJbKGE9QSsxMnwwKT4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8Yz4+PjApe2Y9KGU9YykrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YywwfGUpLDB8YXJbbD4+Ml0pOmMsQT1mKyhyPDwyKXwwLGFyW3U+PjJdPUEsYXJbbD4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHVyPXN9aWYoZT0wfGFyWyhiPUErOHwwKT4+Ml0sZj1lLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAscj0wfGFyWyhsPUErMTJ8MCk+PjJdLGk9ci0oMHxhcltBPj4yXSl8MCxpPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksYXJbYz4+Ml09aSx0PWkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdO2U9MHxhclt1Pj4yXSwoMHxmKSE9KDB8ZSk7KU9uKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHVyPXN9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdXI9czthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSx0PTB8YXJbbD4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8YT4+PjApe2Y9KGU9YSkrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YSwwfGUpLDB8YXJbdT4+Ml0pOmEsQT1mKyhyPDwyKXwwLGFyW2I+PjJdPUEsYXJbdT4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c30oQSs0fDApLGE9MHxhcltvPj4yXSxvPTB8YXJbZj4+Ml0sdD0wfGFyW2k+PjJdKTpvPXIsYXJbKDB8YXJbdCsoKGM9bythfDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmMpPDwyKT4+Ml09ZSxhcltmPj4yXT1vKzEsa0EoQSs0NDh8MCkpLFpiKCl9ZnVuY3Rpb24gT24oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7cj0wfGFyWyhzPShBfD0wKSs0fDApPj4yXSxuPWI9MHxhcltBPj4yXTtkb3tpZigoMHxyKT09KDB8Yikpe2lmKChmPTB8YXJbKGI9QSs4fDApPj4yXSk+Pj4wPChpPWw9MHxhclsodT1BKzEyfDApPj4yXSk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksbD1pPShjPWE9MHxodShuPDwyKSkrKChuKzN8MCk+Pj4yPDwyKXwwLGE9YSsobjw8Mil8MCwoMHxyKT09KDB8Zikpbj1sLGY9cjtlbHNle2ZvcihvPWksbj1sLHQ9cjthcltvPj4yXT1hclt0Pj4yXSxuPW89bis0fDAsKDB8KHQ9dCs0fDApKSE9KDB8Zik7KTtmPTB8YXJbQT4+Ml19YXJbQT4+Ml09YyxhcltzPj4yXT1sLGFyW2I+PjJdPW4sYXJbdT4+Ml09YSxmJiYodnUoZiksaT0wfGFyW3M+PjJdKX1lbHNlIGk9cn13aGlsZSgwKTthcltpKy00Pj4yXT1hcltlPj4yXSxhcltzPj4yXT0oMHxhcltzPj4yXSktNH1mdW5jdGlvbiB6bihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO3U9NTkzMisobz0wfGFyWyhhPShBfD0wKSsxODU5NnwwKT4+Ml0pfDAsdD0wfGFyWyhiPUErMTg2MDB8MCk+PjJdLG49KGg9LTE8PGFyWzEwMDkyK28+PjJdKSZpLGgmPWYscj1BKzE4NTM2fDAsKDB8bik9PSgwfGFyWyhlPUErMTg1MzJ8MCk+PjJdKSYmKDB8aCk9PSgwfGFyW3I+PjJdKXx8KGFyW0ErMTg1NDA+PjJdPWFyW0ErMTg1Mjg+PjJdLGFyW2U+PjJdPW4sYXJbcj4+Ml09aCksaz01ODA0K298MCxsPW4/MDowPT0oKDE8PGFyW2s+PjJdKS0xJmh8MCksZT0wfGFyWzgwMCt0Pj4yXSxyPTB8YXJbNTgyMCtvPj4yXSxjPTB8YXJbNTgxMitvPj4yXSxyPSgwfGJyKGMsKDB8ZSklKDB8cil8MCkpPT0oMHxuKT8oMHxicigoMHxlKS8oMHxyKXwwLGMpKT09KDB8aCk6MCxlPTAhPSgwfHRyWzU5NjYrbz4+MF0pJiYwPT0oKDE8PChzPTB8YXJbaz4+Ml0pKS0xJihufGgpfDApPzB8RmEodSxuPj5zLGg+PnMpOjA7ZG97aWYocnxlKWQ9MTQ7ZWxzZXtpZihsJiYwfHRyWzU5NjUrbz4+MF0pe2Q9MTQ7YnJlYWt9ZT1BKzE4NTQwfDB9fXdoaWxlKDApOzE0PT0oMHxkKSYmKGU9NzkyKygwfGFyW2I+PjJdKXwwKSx1PTB8YXJbZT4+Ml0sZT1uLTF8MDtkb3tpZigwfGRhKDB8YXJbYT4+Ml0sbixoLGUsaCkmJihkPTB8YXJbNTg2NCtvPj4yXSxzPSgwfGJyKGg+PmQsMHxhcls1ODUyK28+PjJdKSkrKGU+PmQpfDAsKGFyWygwfGFyWzEwMzIwK28+PjJdKSsoczw8Mik+PjJdPj4oKDB8YXJbaz4+Ml0pLWQ8PDEpfDApPT0oMHxhcltBKzQ+PjJdKSkpe2lmKGw9MHxhclthPj4yXSxlPj49cj0wfGFyW2wrMTAzNjg+PjJdLHI9aD4+ciwoMHxlKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGM9MHxhcltsKzEwMzcyPj4yXSkpPD0oMHxlKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxyKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8cik8KDB8YXJbbCsxMDM3Nj4+Ml0pKXt3PSgwfGFyW2wrMTAzNjA+PjJdKSsoMyooKDB8YnIoYyxyKSkrZXwwKXwwKSsyfDAsdz0wfHRyW3c+PjBdO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSB3PXV9d2hpbGUoMCk7ZT1oKy0xfDA7ZG97aWYoMHxkYSgwfGFyW2E+PjJdLG4saCxuLGUpJiYoaD0wfGFyWzU4NjQrbz4+Ml0sZD0oMHxicihlPj5oLDB8YXJbNTg1MitvPj4yXSkpKyhuPj5oKXwwLChhclsoMHxhclsxMDMyMCtvPj4yXSkrKGQ8PDIpPj4yXT4+KCgwfGFyW2s+PjJdKS1oPDwxKXwwKT09KDB8YXJbQSs0Pj4yXSkpKXtpZihsPTB8YXJbYT4+Ml0sZT4+PWg9MHxhcltsKzEwMzY4Pj4yXSwoMHwoYz1uPj5oKSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChyPTB8YXJbbCsxMDM3Mj4+Ml0pKTw9KDB8YykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8ZSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGUpPCgwfGFyW2wrMTAzNzY+PjJdKSl7dj0oMHxhcltsKzEwMzYwPj4yXSkrKDMqKCgwfGJyKHIsZSkpK2N8MCl8MCkrMnwwLHY9MHx0clt2Pj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2Ugdj11fXdoaWxlKDApO2g9MHxhcls1NzY0K28+PjJdLGg9KGU9KDUyKygwfGFyW0ErMTg1MTI+PjJdKSsodysxK3Y+PjEpKyhoPDwxKXwwKSUoaCs1MnwwKXwwKS1ofDAsYXJbQSsxODU0ND4+Ml09ZSxlPSgwfChlPSgwfGFyWzU5NTIrbz4+Ml0pK2grKDB8YXJbNzQ0K3Q+PjJdKSsoMHxhcltBKzE4NTIwPj4yXSl8MCkpPCgwfCh2PTAtKGM9MHxhcls1NzcyK28+PjJdKXwwKSk/djooMHxlKTw1Nz9lOjU3LHI9KDB8KHI9KDB8YXJbNTk1NitvPj4yXSkraCsoMHxhcls3NDgrdD4+Ml0pKygwfGFyW0ErMTg1MjQ+PjJdKXwwKSk8KDB8dik/djooMHxyKTw1Nz9yOjU3O2Rve2lmKDE9PSgwfGFyWzU3NzYrbz4+Ml0pKXtkb3tpZigzMDw9KDB8ZSkpe2lmKDQyPCgwfGUpKXtlPWUrLTZ8MDticmVha31lPTB8YXJbODAyMCsoZSstMzA8PDIpPj4yXTticmVha319d2hpbGUoMCk7aWYoMzA8PSgwfHIpKXtpZig0MjwoMHxyKSl7cj1yKy02fDA7YnJlYWt9cj0wfGFyWzgwMjArKHIrLTMwPDwyKT4+Ml07YnJlYWt9fX13aGlsZSgwKTtpZihhcltBKzE4NTQ4Pj4yXT1jK2UsYXJbQSsxODU1Mj4+Ml09YytyLGU9MHxhclthPj4yXSxjPWY+PihyPTB8YXJbZSsxMDM2OD4+Ml0pLCgwfChrPWk+PnIpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGQ9MHxhcltlKzEwMzcyPj4yXSkpPD0oMHxrKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxjKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8Yyk+PSgwfGFyW2UrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxmPShzPTB8YXJbZSsxMDM2MD4+Ml0pKygzKigoMHxicihkLGMpKStrfDApfDApfDAsYj0oZT0xPDwoZj0oMzwoZj03JihjcltmPj4wXXxjcltmKzE+PjBdPDw4KSk+Pj4wP2Y6MyktcnwwKSkrY3wwLDMxIT0oMHxmKSl7bD1lK2t8MCx1PTI1NSZoLGU9Yztkb3tmb3IoYz0wfGJyKGUsZCkscj1rO3RyW3MrKDMqKHIrY3wwKXwwKSsyPj4wXT11LCgwfChyPXIrMXwwKSk8KDB8bCk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfGIpKTthclsoQT1BKzE4NTI4fDApPj4yXT1ofWVsc2UgYXJbKEE9QSsxODUyOHwwKT4+Ml09aH1mdW5jdGlvbiBqbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbDtyZXR1cm4gbD0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0sODwoMHxhclsoMD09KDB8dCk/NTc2MCtsfDA6NTc2OCtsfDApPj4yXSk/dm9pZCBmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGIscyxkLGssaCx3LHYsbSxnLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTA7c3dpdGNoKHVyPShnPXVyKSs0MDk2fDAscz1nLGI9MHxhclsoaz0xODU5NisoQXw9MCl8MCk+PjJdLDB8dCl7Y2FzZSAwOlo9QSsxODU0NHwwO2JyZWFrO2Nhc2UgMTpaPUErMTg1NDh8MDticmVhaztjYXNlIDI6Wj1BKzE4NTUyfDA7YnJlYWs7ZGVmYXVsdDpzcig0NDQ1Niw0NDQ0MywzNjcsNDQ0NTgpfVg9MHxhcltaPj4yXSxpPTB8YXJbKG09QSsyMTEyfDApPj4yXSxoPTB8YXJbKChkPTA9PSgwfHQpKT80MCtifDA6NDQrYnwwKT4+Ml0sdj0oMHxhcls0K2IrKHQ8PDIpPj4yXSkrKCgwfGJyKGgscikpK2U8PDEpfDAsdz0wfGFyWyhkPzU3NjArYnwwOjU3NjgrYnwwKT4+Ml0sZj0wfGFyWzEwMzY4K2I+PjJdLGU+Pj1mLGY9cj4+ZiwoMHxlKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7Wj0wfGFyWzEwMzcyK2I+PjJdLCgwfFopPD0oMHxlKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTsoMHxmKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7KDB8Zik+PSgwfGFyWzEwMzc2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtJPSgwfGFyWzEwMzYwK2I+PjJdKSsoMyooKDB8YnIoWixmKSkrZXwwKXwwKXwwLEk9KDY1NTM1JihjcltJPj4wXXxjcltJKzE+PjBdPDw4KSk+Pj44JjMsbD02NTUzNSZJLEk9KHU9ND09KDB8bikpJjAhPSgwfHRyWzU3NDgrYj4+MF0pJkk8PDE2Pj4xNj09MDtBOmRve2lmKDB8dHJbQSszMj4+MF0pe2lmKHI9ZD9BKzE0NDEyfDA6cywwPCgwfG9yWyhaPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKGY9MDtvcltpKyhvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdPDwxKT4+MV09MHxvcltBKzIxMTYrKHQ8PDExKSsoZjw8MSk+PjFdLCgwfChmPWYrMXwwKSk8KDB8b3JbWj4+MV0pOyk7SSYmZnNbNjMmYXJbNDMyKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKGksNCk7ZG97aWYoYyl7aWYoZj0wfGFyW0ErMTg1OTI+PjJdLDI9PSgwfGMpKXtuc1sxMjcmYXJbZiszNjg+PjJdXShyLGksbik7YnJlYWt9bnNbMTI3JmFyW2YrMzcyPj4yXV0ocixpLG4pO2JyZWFrfW5zWzEyNyZhclszNjQrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0ocixpLG4pfXdoaWxlKDApO2lmKCFkJiYwfGFyWyhwPUErMjh8MCk+PjJdJiYoQj0wfGFyW2s+PjJdLHk9MHxhcltCKzU3Njg+PjJdLEI9MHxhcltCKzU3NjA+PjJdLDA8KDB8bikpKXtmPTA7ZG97Zm9yKGU9MHxicihmLG4pLFo9MDtSPSgwfGJyKGFyW0ErMTQ0MTIrKChOPVorZXwwKTw8Mik+PjJdPDx5Pj5CLDB8YXJbcD4+Ml0pKT4+MyxhclsoTj1yKyhOPDwyKXwwKT4+Ml09UisoMHxhcltOPj4yXSksKDB8KFo9WisxfDApKSE9KDB8bik7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxuKSl9aWYob3NbNjMmYXJbNDYwKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHYsaCxyLG4sdyksSSlmb3IoZj1pKzMyfDA7KChvcltpPj4xXT0wKXwoaT1pKzJ8MCkpPCgwfGYpOyk7fWVsc2V7aWYoRT0xPCgwfG4pKWZvcihaPW4sZj0wO2Y9ZisxfDAsMzxaPj4+MDspWj4+Pj0xO2Vsc2UgZj0wO2lmKEI9KGY9Zit3fDApKy01fDAsMHx0clsxNDAwK2I+PjBdKXt5PTE8PGYrLTY7ZG97aWYoIWEpe2lmKCgwfG4pPDMyKXtmPXQrM3wwO2JyZWFrfWY9dCsxfDA7YnJlYWt9Zj10fXdoaWxlKDApO3N3aXRjaCgoYT1uKy00fDApPj4+MnxhPDwzMHwwKXtjYXNlIDA6Vz01OTkzK2IrKGY8PDQpfDA7YnJlYWs7Y2FzZSAxOlc9NjA4OStiKyhmPDw2KXwwO2JyZWFrO2Nhc2UgMzpXPTY0NzMrYisoZjw8OCl8MDticmVhaztjYXNlIDc6Vz04MDA5K2IrKGY8PDEwKXwwO2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsNDQ0NDMsNDkyLDQ0NDU4KX1pZigwPCgwfG9yWyhyPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKHA9MHxhcls4MDcyKygoKDB8WCklNnwwKTw8Mik+PjJdLFo9KDB8WCkvNnwwLGU9KCgwfHkpPDApPDwzMT4+MzEsZj0wO1g9MHxvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdLFI9KDB8YnIoMHxjcltXK1g+PjBdLHApKTw8WixhPTB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSxhPTB8YmIoMHwoYT0wfHRiKDB8KGE9MHxuYigwfFIsKCgwfFIpPDApPDwzMT4+MzF8MCwwfGEsKCgwfGEpPDApPDwzMT4+MzF8MCkpLDB8RCwwfHksMHxlKSksMHxELDB8QiksRj0oMHwoUj1EKSk8LTF8LTE9PSgwfFIpJmE+Pj4wPDQyOTQ5MzQ1MjgsYT0oTj0oMHxSKTwwfDA9PSgwfFIpJmE+Pj4wPDMyNzY3KT9hOjMyNzY3LG9yW2krKFg8PDEpPj4xXT1GPy0zMjc2ODo2NTUzNSZhLCgwfChmPWYrMXwwKSk8KDB8b3Jbcj4+MV0pOyk7fWVsc2UgaWYocD1mKy05fDAscj0xPDxmKy0xMCxaPWFyWzgwNzIrKCgoMHxYKSU2fDApPDwyKT4+Ml08PCgoMHxYKS82fDApLDA8KDB8b3JbKGU9QSsxNDQwNCsodDw8MSl8MCk+PjFdKSlmb3IoZj0wO1c9KDB8YnIoMHxvcltBKzIxMTYrKHQ8PDExKSsoZjw8MSk+PjFdLFopKStyPj5wLG9yW2krKG9yW0ErODI2MCsodDw8MTEpKyhmPDwxKT4+MV08PDEpPj4xXT0oMHxXKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxXKTwzMjc2Nz9XOjMyNzY3KSwoMHwoZj1mKzF8MCkpPCgwfG9yW2U+PjFdKTspO2lmKHA9MDwoMHxuKSwhbyl7aWYoWj11JjA9PShsfHR8MCksMHxjJiZzcig0NDQ4Niw0NDQ0Myw1OTEsNDQ0NTgpLDB8dHJbMTAwNzErYj4+MF0pe3huKEEsaSxuLG4sMSZaLHYsaCx3LHQpO2JyZWFrfWlmKGY9MHxhcltBKzE4NTkyPj4yXSxaKXt0c1szMSZhcltmKzQxMj4+Ml1dKHYsaSxoLHcpO2JyZWFrfXN3aXRjaCgwfG4pe2Nhc2UgNDp0c1szMSZhcltmKzQxNj4+Ml1dKHYsaSxoLHcpO2JyZWFrIEE7Y2FzZSA4OnRzWzMxJmFyW2YrNDIwPj4yXV0odixpLGgsdyk7YnJlYWsgQTtjYXNlIDE2OnRzWzMxJmFyW2YrNDI0Pj4yXV0odixpLGgsdyk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyW2YrNDI4Pj4yXV0odixpLGgsdyk7YnJlYWsgQX19aWYoRSl7Zm9yKGY9bixaPTA7MzxmPj4+MDspZj4+Pj0xLFo9WisxfDA7Wj1aKzZ8MH1lbHNlIFo9NTtlPTA8KDB8KGU9MjAtd3wwKSk/ZTowLEkmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpLHI9ZD9BKzE0NDEyfDA6cztkb3tpZihjKXtpZihmPTB8YXJbQSsxODU5Mj4+Ml0sMj09KDB8Yykpe29zWzYzJmFyW2YrNDY0Pj4yXV0ocixpLG4sWixlKTticmVha31vc1s2MyZhcltmKzQ2OD4+Ml1dKHIsaSxuLFosZSk7YnJlYWt9b3NbNjMmYXJbNDcyKygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHIsaSxuLFosZSl9d2hpbGUoMCk7aWYoIWQmJjB8YXJbKEM9QSsyOHwwKT4+Ml0mJihWPTB8YXJbaz4+Ml0sRz0wfGFyW1YrNTc2OD4+Ml0sVj0wfGFyW1YrNTc2MD4+Ml0scCkpe2Y9MDtkb3tmb3IoZT0wfGJyKGYsbiksWj0wO1I9KDB8YnIoYXJbQSsxNDQxMisoKE49WitlfDApPDwyKT4+Ml08PEc+PlYsMHxhcltDPj4yXSkpPj4zLGFyWyhOPXIrKE48PDIpfDApPj4yXT1SKygwfGFyW04+PjJdKSwoMHwoWj1aKzF8MCkpIT0oMHxuKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfG4pKX1pZihvc1s2MyZhcls0NjArKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0odixoLHIsbix3KSxJKWZvcihmPWkrMzJ8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTt9fXdoaWxlKDApO2lmKCgwfG9yWyhaPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSk8PTApcmV0dXJuIHVyPWc7Zj0wfGFyW20+PjJdLGk9MDtmb3IoO29yW2YrKG9yW0ErODI2MCsodDw8MTEpKyhpPDwxKT4+MV08PDEpPj4xXT0wLGk9aSsxfDAsKDB8aSk8KDB8b3JbWj4+MV0pOyk7dXI9Z30oQSxlLHIsaSxmLG4sdCxvLGEsYyk6dm9pZCBmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MDt2YXIgbCx1LGIscyxkLGssaCx3LHYsbSxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wO3N3aXRjaCh1cj0obT11cikrNDA5NnwwLHM9bSxiPTB8YXJbKGs9MTg1OTYrKEF8PTApfDApPj4yXSwwfHQpe2Nhc2UgMDpnPUErMTg1NDR8MDticmVhaztjYXNlIDE6Zz1BKzE4NTQ4fDA7YnJlYWs7Y2FzZSAyOmc9QSsxODU1MnwwO2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsNDQ0NDMsMzY3LDQ0NDU4KX1FPTB8YXJbZz4+Ml0saT0wfGFyWyh2PUErMjExMnwwKT4+Ml0saD0wfGFyWygoZD0wPT0oMHx0KSk/NDArYnwwOjQ0K2J8MCk+PjJdLHc9KDB8YXJbNCtiKyh0PDwyKT4+Ml0pKygoMHxicihoLHIpKStlKXwwLGY9MHxhclsxMDM2OCtiPj4yXSxlPj49ZixmPXI+PmYsKDB8ZSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2c9MHxhclsxMDM3MitiPj4yXSwoMHxnKTw9KDB8ZSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7KDB8Zik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOygwfGYpPj0oMHxhclsxMDM3NitiPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7Vz0oMHxhclsxMDM2MCtiPj4yXSkrKDMqKCgwfGJyKGcsZikpK2V8MCl8MCl8MCxXPSg2NTUzNSYoY3JbVz4+MF18Y3JbVysxPj4wXTw8OCkpPj4+OCYzLGw9NjU1MzUmVyxXPSh1PTQ9PSgwfG4pKSYwIT0oMHx0cls1NzQ4K2I+PjBdKSZXPDwxNj4+MTY9PTA7QTpkb3tpZigwfHRyW0ErMzI+PjBdKXtpZihyPWQ/QSsxNDQxMnwwOnMsMDwoMHxvclsoZz1BKzE0NDA0Kyh0PDwxKXwwKT4+MV0pKWZvcihmPTA7b3JbaSsob3JbQSs4MjYwKyh0PDwxMSkrKGY8PDEpPj4xXTw8MSk+PjFdPTB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSwoMHwoZj1mKzF8MCkpPCgwfG9yW2c+PjFdKTspO1cmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpO2Rve2lmKGMpe2lmKGY9MHxhcltBKzE4NTkyPj4yXSwyPT0oMHxjKSl7bnNbMTI3JmFyW2YrMzY4Pj4yXV0ocixpLG4pO2JyZWFrfW5zWzEyNyZhcltmKzM3Mj4+Ml1dKHIsaSxuKTticmVha31uc1sxMjcmYXJbMzY0KygwfGFyW0ErMTg1OTI+PjJdKT4+Ml1dKHIsaSxuKX13aGlsZSgwKTtpZighZCYmMHxhclsoWj1BKzI4fDApPj4yXSYmKHk9MHxhcltrPj4yXSxwPTB8YXJbeSs1NzY4Pj4yXSx5PTB8YXJbeSs1NzYwPj4yXSwwPCgwfG4pKSl7Zj0wO2Rve2ZvcihlPTB8YnIoZixuKSxnPTA7Rj0oMHxicihhcltBKzE0NDEyKygoUj1nK2V8MCk8PDIpPj4yXTw8cD4+eSwwfGFyW1o+PjJdKSk+PjMsYXJbKFI9cisoUjw8Mil8MCk+PjJdPUYrKDB8YXJbUj4+Ml0pLCgwfChnPWcrMXwwKSkhPSgwfG4pOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8bikpfWlmKG9zWzYzJmFyWzQ1NisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXSh3LGgscixuLDgpLFcpZm9yKGY9aSszMnwwOygob3JbaT4+MV09MCl8KGk9aSsyfDApKTwoMHxmKTspO31lbHNle2lmKGU9MHxhclsoZD81NzYwK2J8MDo1NzY4K2J8MCk+PjJdLEI9MTwoMHxuKSlmb3IoZz1uLGY9MDtmPWYrMXwwLDM8Zz4+PjA7KWc+Pj49MTtlbHNlIGY9MDtpZih5PShmPWYrZXwwKSstNXwwLDB8dHJbMTQwMCtiPj4wXSl7cD0xPDxmKy02O2Rve2lmKCFhKXtpZigoMHxuKTwzMil7Zj10KzN8MDticmVha31mPXQrMXwwO2JyZWFrfWY9dH13aGlsZSgwKTtzd2l0Y2goKGE9bistNHwwKT4+PjJ8YTw8MzB8MCl7Y2FzZSAwOlg9NTk5MytiKyhmPDw0KXwwO2JyZWFrO2Nhc2UgMTpYPTYwODkrYisoZjw8Nil8MDticmVhaztjYXNlIDM6WD02NDczK2IrKGY8PDgpfDA7YnJlYWs7Y2FzZSA3Olg9ODAwOStiKyhmPDwxMCl8MDticmVhaztkZWZhdWx0OnNyKDQ0NDU2LDQ0NDQzLDQ5Miw0NDQ1OCl9aWYoMDwoMHxvclsocj1BKzE0NDA0Kyh0PDwxKXwwKT4+MV0pKWZvcihaPTB8YXJbODA3MisoKCgwfEUpJTZ8MCk8PDIpPj4yXSxnPSgwfEUpLzZ8MCxlPSgoMHxwKTwwKTw8MzE+PjMxLGY9MDtFPTB8b3JbQSs4MjYwKyh0PDwxMSkrKGY8PDEpPj4xXSxGPSgwfGJyKDB8Y3JbWCtFPj4wXSxaKSk8PGcsYT0wfG9yW0ErMjExNisodDw8MTEpKyhmPDwxKT4+MV0sYT0wfGJiKDB8KGE9MHx0YigwfChhPTB8bmIoMHxGLCgoMHxGKTwwKTw8MzE+PjMxfDAsMHxhLCgoMHxhKTwwKTw8MzE+PjMxfDApKSwwfEQsMHxwLDB8ZSkpLDB8RCwwfHkpLFY9KDB8KEY9RCkpPC0xfC0xPT0oMHxGKSZhPj4+MDw0Mjk0OTM0NTI4LGE9KFI9KDB8Rik8MHwwPT0oMHxGKSZhPj4+MDwzMjc2Nyk/YTozMjc2NyxvcltpKyhFPDwxKT4+MV09Vj8tMzI3Njg6NjU1MzUmYSwoMHwoZj1mKzF8MCkpPCgwfG9yW3I+PjFdKTspO31lbHNlIGlmKFo9ZistOXwwLHI9MTw8ZistMTAsZz1hcls4MDcyKygoKDB8RSklNnwwKTw8Mik+PjJdPDwoKDB8RSkvNnwwKSwwPCgwfG9yWyhlPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSkpZm9yKGY9MDtYPSgwfGJyKDB8b3JbQSsyMTE2Kyh0PDwxMSkrKGY8PDEpPj4xXSxnKSkrcj4+WixvcltpKyhvcltBKzgyNjArKHQ8PDExKSsoZjw8MSk+PjFdPDwxKT4+MV09KDB8WCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8WCk8MzI3Njc/WDozMjc2NyksKDB8KGY9ZisxfDApKTwoMHxvcltlPj4xXSk7KTtpZihlPTA8KDB8biksIW8pe2lmKGc9dSYwPT0obHx0fDApLDB8YyYmc3IoNDQ0ODYsNDQ0NDMsNTkxLDQ0NDU4KSwwfHRyWzEwMDcxK2I+PjBdKXtIbihBLGksbixuLDEmZyx3LGgsOCx0KTticmVha31pZihmPTB8YXJbQSsxODU5Mj4+Ml0sZyl7bnNbMTI3JmFyW2YrMzg4Pj4yXV0odyxpLGgpO2JyZWFrfXN3aXRjaCgwfG4pe2Nhc2UgNDpuc1sxMjcmYXJbZiszOTI+PjJdXSh3LGksaCk7YnJlYWsgQTtjYXNlIDg6bnNbMTI3JmFyW2YrMzk2Pj4yXV0odyxpLGgpO2JyZWFrIEE7Y2FzZSAxNjpuc1sxMjcmYXJbZis0MDA+PjJdXSh3LGksaCk7YnJlYWsgQTtkZWZhdWx0Om5zWzEyNyZhcltmKzQwND4+Ml1dKHcsaSxoKTticmVhayBBfX1pZihCKXtmb3IoZj1uLGc9MDszPGY+Pj4wOylmPj4+PTEsZz1nKzF8MDtnPWcrNnwwfWVsc2UgZz01O1cmJmZzWzYzJmFyWzQzMisoMHxhcltBKzE4NTkyPj4yXSk+PjJdXShpLDQpLHI9ZD9BKzE0NDEyfDA6cztkb3tpZihjKXtpZihmPTB8YXJbQSsxODU5Mj4+Ml0sMj09KDB8Yykpe29zWzYzJmFyW2YrNDY0Pj4yXV0ocixpLG4sZywxMik7YnJlYWt9b3NbNjMmYXJbZis0Njg+PjJdXShyLGksbixnLDEyKTticmVha31vc1s2MyZhcls0NzIrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0ocixpLG4sZywxMil9d2hpbGUoMCk7aWYoIWQmJjB8YXJbKEk9QSsyOHwwKT4+Ml0mJihHPTB8YXJbaz4+Ml0sQz0wfGFyW0crNTc2OD4+Ml0sRz0wfGFyW0crNTc2MD4+Ml0sZSkpe2Y9MDtkb3tmb3IoZT0wfGJyKGYsbiksZz0wO0Y9KDB8YnIoYXJbQSsxNDQxMisoKFI9ZytlfDApPDwyKT4+Ml08PEM+PkcsMHxhcltJPj4yXSkpPj4zLGFyWyhSPXIrKFI8PDIpfDApPj4yXT1GKygwfGFyW1I+PjJdKSwoMHwoZz1nKzF8MCkpIT0oMHxuKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfG4pKX1pZihvc1s2MyZhcls0NTYrKDB8YXJbQSsxODU5Mj4+Ml0pPj4yXV0odyxoLHIsbiw4KSxXKWZvcihmPWkrMzJ8MDsoKG9yW2k+PjFdPTApfChpPWkrMnwwKSk8KDB8Zik7KTt9fXdoaWxlKDApO2lmKCgwfG9yWyhnPUErMTQ0MDQrKHQ8PDEpfDApPj4xXSk8PTApcmV0dXJuIHVyPW07Zj0wfGFyW3Y+PjJdLGk9MDtmb3IoO29yW2YrKG9yW0ErODI2MCsodDw8MTEpKyhpPDwxKT4+MV08PDEpPj4xXT0wLGk9aSsxfDAsKDB8aSk8KDB8b3JbZz4+MV0pOyk7dXI9bX0oQSxlLHIsaSxmLG4sdCxvLGEsYyl9ZnVuY3Rpb24gSG4oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MDt2YXIgYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSs0MDk2fDAsbD0wfGFyWyhBfD0wKSsxODU5Mj4+Ml0sYz0ocj0wPT0oMHxhKSk/QSsxNDQxMnwwOnUsYT0yMC1vfDA7QTpkb3tpZigxPT0oMHxmKSl0c1szMSZhcls0MzYrbD4+Ml1dKGMsZSxhLDE1KTtlbHNlIHN3aXRjaCgwfGkpe2Nhc2UgNDp0c1szMSZhcls0NDArbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgODp0c1szMSZhcls0NDQrbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgMTY6dHNbMzEmYXJbNDQ4K2w+PjJdXShjLGUsYSwxNSk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyWzQ1MitsPj4yXV0oYyxlLGEsMTUpO2JyZWFrIEF9fXdoaWxlKDApO2lmKCFyJiYwfGFyWyhiPUErMjh8MCk+PjJdJiYoZD0wfGFyW0ErMTg1OTY+PjJdLHM9MHxhcltkKzU3Njg+PjJdLGQ9MHxhcltkKzU3NjA+PjJdLDA8KDB8aSkpKXtyPTA7ZG97Zm9yKGU9MHxicihyLGkpLGE9MDtrPSgwfGJyKGFyW0ErMTQ0MTIrKChmPWErZXwwKTw8Mik+PjJdPDxzPj5kLDB8YXJbYj4+Ml0pKT4+MyxhclsoZj1jKyhmPDwyKXwwKT4+Ml09aysoMHxhcltmPj4yXSksKDB8KGE9YSsxfDApKSE9KDB8aSk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9b3NbNjMmYXJbNDU2K2w+PjJdXShuLHQsYyxpLG8pLHVyPXV9ZnVuY3Rpb24geG4oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MDt2YXIgYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSs0MDk2fDAsbD0wfGFyWyhBfD0wKSsxODU5Mj4+Ml0sYz0ocj0wPT0oMHxhKSk/QSsxNDQxMnwwOnUsYT0yMC1vfDA7QTpkb3tpZigxPT0oMHxmKSl0c1szMSZhcls0MzYrbD4+Ml1dKGMsZSxhLDE1KTtlbHNlIHN3aXRjaCgwfGkpe2Nhc2UgNDp0c1szMSZhcls0NDArbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgODp0c1szMSZhcls0NDQrbD4+Ml1dKGMsZSxhLDE1KTticmVhayBBO2Nhc2UgMTY6dHNbMzEmYXJbNDQ4K2w+PjJdXShjLGUsYSwxNSk7YnJlYWsgQTtkZWZhdWx0OnRzWzMxJmFyWzQ1MitsPj4yXV0oYyxlLGEsMTUpO2JyZWFrIEF9fXdoaWxlKDApO2lmKCFyJiYwfGFyWyhiPUErMjh8MCk+PjJdJiYoZD0wfGFyW0ErMTg1OTY+PjJdLHM9MHxhcltkKzU3Njg+PjJdLGQ9MHxhcltkKzU3NjA+PjJdLDA8KDB8aSkpKXtyPTA7ZG97Zm9yKGU9MHxicihyLGkpLGE9MDtrPSgwfGJyKGFyW0ErMTQ0MTIrKChmPWErZXwwKTw8Mik+PjJdPDxzPj5kLDB8YXJbYj4+Ml0pKT4+MyxhclsoZj1jKyhmPDwyKXwwKT4+Ml09aysoMHxhcltmPj4yXSksKDB8KGE9YSsxfDApKSE9KDB8aSk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9b3NbNjMmYXJbNDYwK2w+PjJdXShuLHQsYyxpLG8pLHVyPXV9ZnVuY3Rpb24gUG4oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdDt1cj0odD11cikrMTZ8MCxmPXQsbj00Mj09KDB8dHJbKGV8PTApPj4wXSksaT0wfGFyWzI1NDNdLG58fFVpKDQ0NTA1LDYsMSxpKSxhcltmPj4yXT1yLFFjKEEsZSsoMSZuKXwwLGYpLE9pKGkpLHVyPXR9ZnVuY3Rpb24gTG4oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTA7aWYodHJbKEF8PTApPj4wXT0xLHRyW0ErNDQ+PjBdPTEscW4oQSxlKSxmPXIrLTF8MCxpPTE8KDB8cikpZm9yKG49MDt0PTI1NSYoMHxBdChlLDEpKSx0cltBKzUyKyg1MipufDApPj4wXT10LHQ9MjU1JigwfEF0KGUsMSkpLHRyW0ErNTIrKDUyKm58MCkrNDQ+PjBdPXQsKDB8KG49bisxfDApKSE9KDB8Zik7KTtpZigocistMnwwKT4+PjA8Nylmb3Iobj1mO2V0KGUsMiksKDB8KG49bisxfDApKTw4Oyk7aWYoaSlmb3Iobj0wO3FuKEErNTIrKDUyKm58MCl8MCxlKSwoMHwobj1uKzF8MCkpIT0oMHxmKTspO31mdW5jdGlvbiBLbihBLGUscil7cnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7cmV0dXJuIHVyPShvPXVyKSszMnwwLGY9bys4fDAsaT1vLChlfD0wKT4+PjA8PShjPTB8YXJbKG49KEF8PTApKzR8MCk+PjJdKT4+PjA/KGFyW24+PjJdPWUsdm9pZCh1cj1vKSk6KChsPSh1PTB8YXJbKHQ9QSs4fDApPj4yXSk8PDUpPj4+MDwoYT1lLWN8MCk+Pj4wfChsLWF8MCk+Pj4wPGM+Pj4wPyhhcltmPj4yXT0wLGFyWyhzPTQrZnwwKT4+Ml09MCwoKGFyWyhkPTgrZnwwKT4+Ml09MCl8ZSk8MCYmemwoKSxjPXU8PDYsdT1lKzMxJi0zMixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzMyfDAsbz10KzE2fDAscj10Kzh8MCxpPXQsYXJbKG49OCsoQXw9MCl8MCk+PjJdPDw1Pj4+MD49ZT4+PjApcmV0dXJuIHVyPXQ7YXJbbz4+Ml09MCxhclsoYT1vKzR8MCk+PjJdPTAsYXJbKGY9bys4fDApPj4yXT0wLCgwfGUpPDAmJnpsKCk7Yz0wfGh1KChsPTErKChlKy0xfDApPj4+NSl8MCk8PDIpLGFyW28+PjJdPWMsYXJbYT4+Ml09MCxhcltmPj4yXT1sLGw9MHxhcltBPj4yXSxhcltyPj4yXT1sLGFyWzQrcj4+Ml09MCxlPTB8YXJbKGM9QSs0fDApPj4yXSxhcltpPj4yXT1sKyhlPj4+NTw8MiksYXJbaSs0Pj4yXT0zMSZlLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYz11cikrMzJ8MCxmPWMrMjR8MCxuPWMrMTZ8MCx0PWMrOHwwLGE9YyxkPTB8YXJbKHU9NCsoQXw9MCl8MCk+PjJdLG89MHxhcltlPj4yXSxsPTB8YXJbZSs0Pj4yXSxpPTB8YXJbcj4+Ml0sYj0wfGFyW3IrND4+Ml0scz1pLW88PDMsYXJbdT4+Ml09ZC1sK2Ircyx1PSgwfGFyW0E+PjJdKSsoZD4+PjU8PDIpfDAsZT11LCgwfGwpIT0oMHwocj0zMSZkKSkpcmV0dXJuIGFyW2Y+PjJdPW8sYXJbNCtmPj4yXT1sLGFyW24+PjJdPWksYXJbNCtuPj4yXT1iLGFyW3Q+PjJdPWUsYXJbNCt0Pj4yXT1yLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtpZihsPTB8YXJbKGV8PTApPj4yXSxmPTB8YXJbKHU9ZSs0fDApPj4yXSxvPSgoMHxhcltyPj4yXSktbDw8MykrKDB8YXJbcis0Pj4yXSktZnwwLHI9bCwoMHxvKTw9MClyZXR1cm4gZT1pKzR8MCxpPTB8YXJbaT4+Ml0sYXJbQT4+Ml09aSxpPUErNHwwLEE9MHxhcltlPj4yXSxhcltpPj4yXT1BO2Y/KG49LTE+Pj4oKG49MzItZnwwKS0obD0oMHxvKTwoMHxuKT9vOm4pfDApJi0xPDxmJmFyW3I+PjJdLGY9MHxhclsoYz1pKzR8MCk+PjJdLHI9KGE9MzItZnwwKT4+PjA8bD4+PjA/YTpsLHQ9MHxhcltpPj4yXSxmPWFyW3Q+PjJdJn4oLTE+Pj4oYS1yfDApJi0xPDxmKSxhclt0Pj4yXT1mLGE9MHxhcltjPj4yXSxiPTB8YXJbdT4+Ml0sYXJbdD4+Ml09KGI+Pj4wPGE+Pj4wP248PGEtYjpuPj4+KGItYXwwKSl8ZixmPSgwfGFyW2M+PjJdKStyfDAsdD10KyhmPj4+NTw8Mil8MCxhcltpPj4yXT10LGYmPTMxLGFyW2M+PjJdPWYsMDwoMHwoYT1sLXJ8MCkpJiYoZj1hclt0Pj4yXSZ+KC0xPj4+KDMyLWF8MCkpLGFyW3Q+PjJdPWYsYXJbdD4+Ml09bj4+PigoMHxhclt1Pj4yXSkrcnwwKXxmLGFyW2M+PjJdPWEsZj1hKSxyPTQrKDB8YXJbZT4+Ml0pfDAsYXJbZT4+Ml09cixvPW8tbHwwKTpmPTB8YXJbKGM9Zj1pKzR8MCk+PjJdO2lmKGE9MzItZnwwLG49LTE8PGYsMzE8KDB8bykpe2Zvcih0PX5uLGY9bzt1PTB8YXJbcj4+Ml0sYj0wfGFyW2k+PjJdLGw9YXJbYj4+Ml0mdCxhcltiPj4yXT1sLGFyW2I+PjJdPXU8PGFyW2M+PjJdfGwsYj1iKzR8MCxhcltpPj4yXT1iLGFyW2I+PjJdPWFyW2I+PjJdJm58dT4+PmEsZj1mKy0zMnwwLHI9NCsoMHxhcltlPj4yXSl8MCxhcltlPj4yXT1yLDMxPCgwfGYpOyk7byY9MzF9aWYoKDB8byk8PTApcmV0dXJuIGU9YyxiPTB8YXJbaT4+Ml0sYXJbQT4+Ml09YixiPUErNHwwLGk9MHxhcltlPj4yXSxhcltiPj4yXT1pO2lmKHQ9YXJbcj4+Ml0mLTE+Pj4oMzItb3wwKSxuPSgwfGEpPCgwfG8pP2E6byxmPTB8YXJbaT4+Ml0scj1hcltmPj4yXSZ+KC0xPDxhcltjPj4yXSYtMT4+PihhLW58MCkpLGFyW2Y+PjJdPXIsYXJbZj4+Ml09cnx0PDxhcltjPj4yXSxyPSgwfGFyW2M+PjJdKStufDAsZj1mKyhyPj4+NTw8Mil8MCxhcltpPj4yXT1mLGFyW2M+PjJdPTMxJnIsKDB8KHI9by1ufDApKTw9MClyZXR1cm4gZT1jLGI9MHxhcltpPj4yXSxhcltBPj4yXT1iLGI9QSs0fDAsaT0wfGFyW2U+PjJdLGFyW2I+PjJdPWk7YXJbZj4+Ml09YXJbZj4+Ml0mfigtMT4+PigzMi1yfDApKXx0Pj4+bixhcltjPj4yXT1yLGU9YyxiPTB8YXJbaT4+Ml0sYXJbQT4+Ml09YixiPUErNHwwLGk9MHxhcltlPj4yXSxhcltiPj4yXT1pfShhLGYsbix0KSx1cj1jO3I9Yi1sK3N8MCxzPW8sMDwoMHxyKSYmKGU9bD8oZD0tMT4+PigoZD0zMi1sfDApLShlPSgwfHIpPCgwfGQpP3I6ZCl8MCkmLTE8PGwsYXJbdT4+Ml09YXJbdT4+Ml0mfmR8YXJbcz4+Ml0mZCxyPXItZXwwLHU9dSsoKGw9ZStsfDApPj4+NTw8Mil8MCxsJj0zMSxzPXMrNHwwKToobD0wLG8pLHdiKDB8dSwwfGUsKGI9KDB8cikvMzJ8MCk8PDJ8MCksQT1yLShiPDw1KXwwLGU9cj11KyhiPDwyKXwwLDA8KDB8QSkmJihsPS0xPj4+KDMyLUF8MCksYXJbcj4+Ml09YXJbcj4+Ml0mfmx8YXJbcysoYjw8Mik+PjJdJmwsbD1BKSk7YXJbYT4+Ml09ZSxhclthKzQ+PjJdPWwsdXI9Y30obyxyLGkpLGU9MHxhcltBPj4yXSxhcltBPj4yXT1hcltvPj4yXSxhcltvPj4yXT1lLG89MHxhcltjPj4yXSxhcltjPj4yXT1hclthPj4yXSxhclthPj4yXT1vLGE9MHxhcltuPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1hLDB8ZSYmdnUoZSk7dXI9dH0oZixsPj4+MDwxMDczNzQxODIzP2M+Pj4wPHU+Pj4wP3U6YzoyMTQ3NDgzNjQ3KSxsPTB8YXJbbj4+Ml0sYXJbcz4+Ml09bCthLHU9Yz0wfGFyW0E+PjJdLGU9MHxhcltmPj4yXSwwPCgwfChsPSh1KyhsPj4+NTw8MiktYzw8MykrKDMxJmwpfDApKT8od2IoMHxlLDB8YywoYj1sPj4+NSk8PDJ8MCksYz1sLShiPDw1KXwwLGU9bD1lKyhiPDwyKXwwLDA8KDB8Yyk/KGs9LTE+Pj4oMzItY3wwKSxhcltsPj4yXT1hcltsPj4yXSZ+a3xhclt1KyhiPDwyKT4+Ml0mayk6Yz0wKTpjPTAsYXJbaT4+Ml09ZSxhcltpKzQ+PjJdPWMsZT0wfGFyWyhsPWkpPj4yXSxsPTB8YXJbbCs0Pj4yXSxjPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YXJbZj4+Ml0sYXJbZj4+Ml09YyxrPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YXJbcz4+Ml0sYXJbcz4+Ml09ayxrPTB8YXJbdD4+Ml0sYXJbdD4+Ml09YXJbZD4+Ml0sYXJbZD4+Ml09aywwfGMmJnZ1KGMpKToobD0oMHxhcltBPj4yXSkrKGM+Pj41PDwyKXwwLGFyW24+PjJdPWUsZT1sLGw9MzEmYyksYT8odT0wPT0oMHxsKSxjPWUscj8odXx8KGU9YT4+PjA8KGs9MzItbHwwKT4+PjA/YTprLGFyW2M+PjJdPWFyW2M+PjJdfC0xPj4+KGstZXwwKSYtMTw8bCxhPWEtZXwwLGU9Yz1jKzR8MCksdmIoMHxlLC0xLChrPWE+Pj41KTw8MnwwKSwoYT1hLShrPDw1KXwwKSYmKGFyWyhlPWMrKGs8PDIpfDApPj4yXT1hcltlPj4yXXwtMT4+PigzMi1hfDApKSx2b2lkKHVyPW8pKToodXx8KGU9YT4+PjA8KGs9MzItbHwwKT4+PjA/YTprLGFyW2M+PjJdPWFyW2M+PjJdJn4oLTE+Pj4oay1lfDApJi0xPDxsKSxhPWEtZXwwLGU9Yz1jKzR8MCksdmIoMHxlLDAsKGs9YT4+PjUpPDwyfDApLChhPWEtKGs8PDUpfDApJiYoYXJbKGU9Yysoazw8Mil8MCk+PjJdPWFyW2U+PjJdJn4oLTE+Pj4oMzItYXwwKSkpLHZvaWQodXI9bykpKTp2b2lkKHVyPW8pKX1mdW5jdGlvbiBxbihBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYoMHx0clsoQXw9MCk+PjBdKXtmb3Iocj0yNTUmKDB8QXQoZSwyKSksdHJbQSsxPj4wXT1yLHI9MjU1JigwfEF0KGUsMSkpLHRyW0ErMj4+MF09cixyPTB8QXQoZSw1KSxhcltBKzQ+PjJdPXIsaT0yNTUmKChyPTApfEF0KGUsMSkpO3RyW0ErOCtyPj4wXT1pLHI9cisxfDAsaT0yNTUmKDB8QXQoZSwxKSksMzIhPSgwfHIpOyk7dHJbQSs0MD4+MF09aSxpPTI1NSYoMHxBdChlLDEpKSx0cltBKzQxPj4wXT1pLGk9MjU1JigwfEF0KGUsMSkpLHRyW0ErNDI+PjBdPWksaT0yNTUmKDB8QXQoZSwxKSksdHJbQSs0Mz4+MF09aSxldChlLDQ0KX0wfHRyW0ErNDQ+PjBdJiYoaT0wfEF0KGUsOCksYXJbQSs0OD4+Ml09aSl9ZnVuY3Rpb24gJG4oQSxlLHIpe3J8PTA7dmFyIGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTA7aWYodXI9KGQ9dXIpKzExMnwwLHM9ZCs4OHwwLGg9ZCs4MHwwLGI9ZCs3MnwwLHU9ZCs2NHwwLGw9ZCs1NnwwLGM9ZCs0OHwwLGE9ZCs0MHwwLG89ZCszMnwwLG49ZCsyNHwwLHQ9ZCsxNnwwLGk9ZCs4fDAsaz1kLGY9KGV8PTApPzQ1NTI3OjQ1NTM1LDB8dHJbKEF8PTApPj4wXSl7c3dpdGNoKGU9MHx0cltBKzE+PjBdLGFyW2s+PjJdPWYsYXJbays0Pj4yXT1lLFBuKHIsNDU1NDUsayksaz0wfHRyW0ErMj4+MF0sYXJbaT4+Ml09Zixhcls0K2k+PjJdPWssUG4ociw0NTU3NCxpKSwwfGFyW0ErND4+Ml0pe2Nhc2UgMTplPTQ1NjU5O2JyZWFrO2Nhc2UgMjplPTQ1NjUyO2JyZWFrO2Nhc2UgMzplPTQ1NjM1O2JyZWFrO2Nhc2UgNDplPTQ1NjEzO2JyZWFrO2RlZmF1bHQ6ZT00NTYwM31mb3IoYXJbdD4+Ml09Zixhcls0K3Q+PjJdPWUsUG4ociw0NTY2NCx0KSxhcltuPj4yXT1mLFBuKHIsNDU2OTMsbiksZT0wOzB8ZSYmUG4ociw0NTg4NCxiKSxhcltoPj4yXT10cltBKzgrZT4+MF0sUG4ociw0NTg4NyxoKSwzMiE9KDB8KGU9ZSsxfDApKTspO1BuKHIsNDU3MjgsbyksaD0wfHRyW0ErNDA+PjBdLGFyW2E+PjJdPWYsYXJbNCthPj4yXT1oLFBuKHIsNDU3MzEsYSksaD0wfHRyW0ErNDE+PjBdLGFyW2M+PjJdPWYsYXJbNCtjPj4yXT1oLFBuKHIsNDU3NjgsYyksaD0wfHRyW0ErNDI+PjBdLGFyW2w+PjJdPWYsYXJbNCtsPj4yXT1oLFBuKHIsNDU4MDQsbCksaD0wfHRyW0ErNDM+PjBdLGFyW3U+PjJdPWYsYXJbNCt1Pj4yXT1oLFBuKHIsNDU4NDQsdSl9dXI9KDB8dHJbQSs0ND4+MF0mJihoPTB8YXJbQSs0OD4+Ml0sYXJbcz4+Ml09Zixhcls0K3M+PjJdPWgsUVs4K3M+PjNdPSgwfGgpLzMwLFBuKHIsNDU4OTEscykpLGQpfWZ1bmN0aW9uIEF0KEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzE2fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErNHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzh8MCxmPTB8YXJbbj4+Ml07ZG97aWYoIWYpYnJlYWsgQTtjPTB8YXJbQT4+Ml0sYXJbQT4+Ml09YysxLGM9MHxjcltjPj4wXSxmPWYrLTF8MCxhcltuPj4yXT1mLGM9MHxkYigwfGMsMCwwfChpPWkrLTh8MCkpLGE9YXJbKGw9dCkrND4+Ml18RCxhclsobz10KT4+Ml09YXJbbD4+Ml18YyxhcltvKzQ+PjJdPWF9d2hpbGUoNzwoMHxpKSl9fXdoaWxlKDApO2k9NjQtaXwwLGFyW3I+PjJdPWl9cmV0dXJuIGw9MHxzYigwfChvPTB8YXJbKGE9Yz1BKzh8MCk+PjJdKSwwfChhPTB8YXJbYSs0Pj4yXSksNjQtZXwwKSxhPTB8ZGIoMHxvLDB8YSwwfGUpLGFyW2M+PjJdPWEsYXJbYys0Pj4yXT1ELGFyW3I+PjJdPWktZSwwfGx9ZnVuY3Rpb24gZXQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoKDB8KGk9MHxhclsocj0oQXw9MCkrMTZ8MCk+PjJdKSk8KDB8ZSkpe2k9NjQtaXwwLG49QSs0fDA7QTpkb3tpZig3PCgwfGkpKXt0PUErOHwwLGY9MHxhcltuPj4yXTtkb3tpZighZilicmVhayBBO2M9MHxhcltBPj4yXSxhcltBPj4yXT1jKzEsYz0wfGNyW2M+PjBdLGY9ZistMXwwLGFyW24+PjJdPWYsYz0wfGRiKDB8YywwLDB8KGk9aSstOHwwKSksYT1hclsobD10KSs0Pj4yXXxELGFyWyhvPXQpPj4yXT1hcltsPj4yXXxjLGFyW28rND4+Ml09YX13aGlsZSg3PCgwfGkpKX19d2hpbGUoMCk7aT02NC1pfDAsYXJbcj4+Ml09aX1jPTB8ZGIoMHxhclsoYz1sPUErOHwwKT4+Ml0sMHxhcltjKzQ+PjJdLDB8ZSksYXJbbD4+Ml09YyxhcltsKzQ+PjJdPUQsYXJbcj4+Ml09aS1lfWZ1bmN0aW9uIHJ0KEEpe3ZhciBlLHIsaTtpPSgtOCZhclsoZT0oQXw9MCkrMTZ8MCk+PjJdfDApLzh8MCxhcltBPj4yXT0oMHxhcltBPj4yXSkrKDAtaSksYXJbKHI9QSs0fDApPj4yXT0oMHxhcltyPj4yXSkraSxhclsoQT1BKzh8MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW2U+PjJdPTB9ZnVuY3Rpb24gaXQoQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmb3IoYT0oQXw9MCkrNHwwLHI9QSs4fDAsaT0oYz0wKXxhclsoZT1BKzE2fDApPj4yXTs7KXtpZigoMHxpKTwxKXtpPTY0LWl8MDtBOmRve2lmKDc8KDB8aSkpe2Y9MHxhclthPj4yXTtkb3tpZighZilicmVhayBBO2w9MHxhcltBPj4yXSxhcltBPj4yXT1sKzEsbD0wfGNyW2w+PjBdLGY9ZistMXwwLGFyW2E+PjJdPWYsbD0wfGRiKDB8bCwwLDB8KGk9aSstOHwwKSksbj1hclsodT1yKSs0Pj4yXXxELGFyWyh0PXIpPj4yXT1hclt1Pj4yXXxsLGFyW3QrND4+Ml09bn13aGlsZSg3PCgwfGkpKX19d2hpbGUoMCk7dD02NC1pfDAsYXJbZT4+Ml09dH1lbHNlIHQ9aTtpZihuPTB8ZGIoMHwodT0wfGFyWyhsPXIpPj4yXSksMHwobD0wfGFyW2wrND4+Ml0pLDEpLGY9RCxhclsoaT1yKT4+Ml09bixhcltpKzQ+PjJdPWYsaT10Ky0xfDAsYXJbZT4+Ml09aSwhKC0xPCgwfGwpfC0xPT0oMHxsKSY0Mjk0OTY3Mjk1PHU+Pj4wKSlicmVhaztpZigxOTwoMHxjKSl7aT0tOTk5OTksbz0yMDticmVha31jPWMrMXwwfWlmKDIwPT0oMHxvKSlyZXR1cm4gMHxpO2lmKCFjKXJldHVybih1PTApfHU7aWYoKDB8dCk8PSgwfGMpKXtpPTY1LXR8MDtBOmRve2lmKDc8KDB8aSkpe3Q9MHxhclthPj4yXTtkb3tpZighdClicmVhayBBO3U9MHxhcltBPj4yXSxhcltBPj4yXT11KzEsdT0wfGNyW3U+PjBdLHQ9dCstMXwwLGFyW2E+PjJdPXQsbnw9dT0wfGRiKDB8dSwwLDB8KGk9aSstOHwwKSksZnw9RCxhclsodT1yKT4+Ml09bixhclt1KzQ+PjJdPWZ9d2hpbGUoNzwoMHxpKSl9fXdoaWxlKDApO2k9NjQtaXwwLGFyW2U+PjJdPWl9cmV0dXJuIHU9MHxzYigwfG4sMHxmLDY0LWN8MCksYT0wfGRiKDB8biwwfGYsMHxjKSxhclsobD1yKT4+Ml09YSxhcltsKzQ+PjJdPUQsYXJbZT4+Ml09aS1jLCgwfChpPXUrKDE8PGMpfDApKTw9MSYmc3IoNDczOTUsNDczODIsMTQ2LDQ3NDAzKSwwfCh1PWkrLTF8MCl9ZnVuY3Rpb24gZnQoQSl7QT0wfGl0KEF8PTApO0E6ZG97aWYoKDB8QSk8MCl7c3dpdGNoKDB8QSl7Y2FzZS05OTk5OTpicmVhaztkZWZhdWx0OmJyZWFrIEF9cmV0dXJuIDB8KEE9LTk5OTk5KX1zd2l0Y2goMHxBKXtjYXNlIDA6QT0wO2JyZWFrO2RlZmF1bHQ6YnJlYWsgQX1yZXR1cm4gMHxBfXdoaWxlKDApO3JldHVybiAwfChBPSgwfCgwPT0oMSZBfDApPzAtQXwwOkErMXwwKSkvMnwwKX1mdW5jdGlvbiBudChBLGUscil7aWYoQXw9MCxlfD0wLC0xPCgwfChyfD0wKSkpcmV0dXJuIGFyW0E+PjJdPWUsYXJbQSs0Pj4yXT1lLHZvaWQoYXJbQSs4Pj4yXT1lK3IpO3NyKDQ3ODM3LDQ3ODI4LDEzOCw0Nzg0OSl9ZnVuY3Rpb24gdHQoQSl7dmFyIGUscixpLGYsbix0O2Y9MHxhclsoaT0oQXw9MCkrNHwwKT4+Ml0sbj0oMHxhcltBKzg+PjJdKS1mfDAsYXJbQSsxMj4+Ml09NTEwLG9yWyh0PUErMjB8MCk+PjFdPTgsKChhclsocj1BKzE2fDApPj4yXT0wKXxuKTw9MHx8KEE9MStmfDAsYXJbaT4+Ml09QSxlPSgwfGNyW2Y+PjBdKTw8OCxhcltyPj4yXT1lLDEhPSgob3JbdD4+MV09MCl8bikmJihhcltpPj4yXT0yK2YsYXJbcj4+Ml09MHxlfGNyW0E+PjBdLG9yW3Q+PjFdPS04KSl9ZnVuY3Rpb24gb3QoQSxlKXtlfD0wO3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7cmV0dXJuIGk9KGk9MHxhclsodD0oQXw9MCkrMTJ8MCk+PjJdKS0ocj0wfGNyWyhpPj4+NiktNCsoNDc0MTIrKCgoMHxjcltlPj4wXSk+Pj4xJjI1NSk8PDIpKT4+MF0pfDAsbj0oYXJbdD4+Ml09aSk8PDcsKGY9MHxhclsoYT1BKzE2fDApPj4yXSk+Pj4wPG4+Pj4wPyhvPTI1NSYoZj0xJihyPTB8dHJbZT4+MF0pKSx0cltlPj4wXT10cls0Nzc2NCsoKDI1NSZyKT4+PjEmMjU1KT4+MF08PDEmMjU1fGYsMzI3Njg8PW4+Pj4wPzB8KGE9byk6KGFyW3Q+PjJdPWk8PDEmNjcxMDg4NjIsZj1hclthPj4yXTw8MSxhclthPj4yXT1mLGU9MSsoMHxvclsocj1BKzIwfDApPj4xXSk8PDE2Pj4xNiwob3Jbcj4+MV09ZSk8PDE2Pj4xNj8wfChhPW8pOihvcltyPj4xXT0tOCwoaT0wfGFyWyhyPUErNHwwKT4+Ml0pPj4+MD49KDB8YXJbQSs4Pj4yXSk+Pj4wfHwoYXJbcj4+Ml09aSsxLGFyW2E+PjJdPTB8ZnxjcltpPj4wXSksMHwoYT1vKSkpKToobz0wfGNyWzQ3NjY4KyhyPj4+Myk+PjBdLGFyW2E+PjJdPWYtbjw8byxhclt0Pj4yXT1yPDxvLHQ9MjU1JihpPTEmKHI9MHx0cltlPj4wXSleMSksKDI1NSZyKTwyJiYocj1pfC0yJnIsdHJbZT4+MF09ciksdHJbZT4+MF09dHJbNDc3MDArKCgyNTUmcik+Pj4xJjI1NSk+PjBdPDwxJjI1NXwxJnIscj0oMHxsclsobj1BKzIwfDApPj4xXSkrb3wwLDMyNzY4JihvcltuPj4xXT1yKXwwfHwocj1yPDwxNj4+MTYsKGY9MHxhclsoaT1BKzR8MCk+PjJdKT4+PjA8KDB8YXJbQSs4Pj4yXSk+Pj4wJiYoYXJbaT4+Ml09ZisxLGFyW2E+PjJdPSgwfGNyW2Y+PjBdKTw8cnxhclthPj4yXSksb3Jbbj4+MV09cis2NTUyOCksMHwoYT10KSl9ZnVuY3Rpb24gYXQoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7cmV0dXJuIHI9KDB8YXJbKGU9KEF8PTApKzEyfDApPj4yXSktMnwwLChpPShhcltlPj4yXT1yKTw8Nyk+Pj4wPD0oZj0wfGFyWyhuPUErMTZ8MCk+PjJdKT4+PjA/MHwobj0xKTozMjc2ODw9aT4+PjA/KG49MCl8bjooYXJbZT4+Ml09cjw8MSY2NzEwODg2MixpPWY8PDEsYXJbbj4+Ml09aSxmPTErKDB8b3JbKGU9QSsyMHwwKT4+MV0pPDwxNj4+MTYsKG9yW2U+PjFdPWYpPDwxNj4+MTY/KG49MCl8bjoob3JbZT4+MV09LTgsKHI9MHxhclsoZT1BKzR8MCk+PjJdKT4+PjA+PSgwfGFyW0ErOD4+Ml0pPj4+MHx8KGFyW2U+PjJdPXIrMSxhcltuPj4yXT1pKygwfGNyW3I+PjBdKSksKG49MCl8bikpfWZ1bmN0aW9uIGN0KEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO3JldHVybiBmPWFyWyhyPShBfD0wKSsxNnwwKT4+Ml08PDEsYXJbcj4+Ml09Zix0PTErKDB8b3JbKGU9QSsyMHwwKT4+MV0pPDwxNj4+MTYsLTE8KG9yW2U+PjFdPXQpPDwxNj4+MTYmJihuPTB8YXJbKGk9QSs0fDApPj4yXSwoMHxhcltBKzg+PjJdKT4+PjA+bj4+PjApJiYob3JbZT4+MV09LTgsYXJbaT4+Ml09bisxLGY9MHxmfGNyW24+PjBdLGFyW3I+PjJdPWYpLGY+Pj4wPChpPWFyW0ErMTI+PjJdPDw3KT4+PjA/KHQ9MCl8dDooYXJbcj4+Ml09Zi1pLDB8KHQ9MSkpfWZ1bmN0aW9uIGx0KEEsZSl7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MDtpZigoMHwoZXw9MCkpPD0wKXJldHVybiAwfChsPWUpO2ZvcihpPShBfD0wKSsxNnwwLGY9QSsyMHwwLG49QSs4fDAsbD1BKzR8MCxyPUErMTJ8MCx0PShBPTApfG9yW2Y+PjFdLG89MHxhcltpPj4yXTs7KXtpZihvPDw9MSxhcltpPj4yXT1vLHQ9dCsxPDwxNj4+MTYsLTE8KG9yW2Y+PjFdPXQpPDwxNj4+MTYmJihjPTB8YXJbbD4+Ml0sKDB8YXJbbj4+Ml0pPj4+MD5jPj4+MCk/KG9yW2Y+PjFdPS04LGFyW2w+PjJdPWMrMSxhPTB8Y3JbYz4+MF18byxhcltpPj4yXT1hLHQ9LTgpOmE9byxhPj4+MDwobz1hcltyPj4yXTw8Nyk+Pj4wKXt0PTg7YnJlYWt9aWYobz1hLW98MCxhcltpPj4yXT1vLCgwfGUpPD0oMHwoQT1BKzF8MCkpKXtBPWUsdD04O2JyZWFrfX1yZXR1cm4gOD09KDB8dCk/MHxBOjB9ZnVuY3Rpb24gdXQoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtpZigoMHwoZXw9MCkpPDkpcmV0dXJuIGU/KGk9YXJbKHQ9QSsxNnwwKT4+Ml08PGUsYXJbdD4+Ml09aSxmPSgwfGxyWyhuPUErMjB8MCk+PjFdKStlfDAsMD09KDMyNzY4JihvcltuPj4xXT1mKXwwKSYmKGE9MHxhclsobz1BKzR8MCk+PjJdLCgwfGFyW0ErOD4+Ml0pPj4+MD5hPj4+MCkmJihhcltvPj4yXT1hKzEsdT1mPDwxNj4+MTYsYj0oMHxjclthPj4wXSk8PHUsb3Jbbj4+MV09dSs2NTUyOCxpfD1iLGFyW3Q+PjJdPWkpLHU9YXJbQSsxMj4+Ml08PDcsdT1pLSgwfGJyKGI9KDB8KGw9KGk+Pj4wKS8odT4+PjApfDApKTwoMHwoYj0xPDxlKSk/bDpiKy0xfDAsdSkpfDAsYXJbdD4+Ml09dSwwfGIpOihiPTApfGI7aWYoaT1hclsobD1BKzE2fDApPj4yXTw8OCxhcltsPj4yXT1pLG49NjU1MzUmKGY9OCsoMHxsclsodT1BKzIwfDApPj4xXSl8MCksb3JbdT4+MV09biwwPT0oMzI3NjgmZnwwKSYmKGM9MHxhclsodD1BKzR8MCk+PjJdLCgwfGFyW0ErOD4+Ml0pPj4+MD5jPj4+MCk/KGFyW3Q+PjJdPWMrMSxuPWY8PDE2Pj4xNixmPSgwfGNyW2M+PjBdKTw8bixuPW4rNjU1MjgmNjU1MzUsb3JbdT4+MV09bixmfD1pLGFyW2w+PjJdPWYpOmY9aSxyPWFyW0ErMTI+PjJdPDw3LHQ9Zi0oMHxicihpPSgwfChpPShmPj4+MCkvKHI+Pj4wKXwwKSk8MjU1P2k6MjU1LHIpKXwwLGFyW2w+PjJdPXQsIShmPWUrLTh8MCkpcmV0dXJuIDB8KGI9aSk7Zm9yKGU9QSs4fDAsYz1BKzR8MDtmPWYrLTF8MCxhPWk8PDEsaT10PDwxLGFyW2w+PjJdPWksbj1uKzE8PDE2Pj4xNiwtMTwob3JbdT4+MV09bik8PDE2Pj4xNiYmKGI9MHxhcltjPj4yXSwoMHxhcltlPj4yXSk+Pj4wPmI+Pj4wKSYmKG9yW3U+PjFdPS04LGFyW2M+PjJdPWIrMSxpPTB8Y3JbYj4+MF18aSxhcltsPj4yXT1pLG49LTgpLGk+Pj4wPHI+Pj4wPyh0PTAsbz1pKToobz1pLXJ8MCxhcltsPj4yXT1vLHQ9MSksaT10fGEsZjspdD1vO3JldHVybiAwfGl9ZnVuY3Rpb24gYnQoQSxlKXt2YXIgcixpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7Zm9yKHI9KEF8PTApKzE2fDAsZj1BKzh8MCxuPUErNHwwLHQ9QSsxMnwwLG89KGV8PTApKzMxfDAsYT0odT0wKXxvclsoaT1BKzIwfDApPj4xXSxjPTB8YXJbcj4+Ml07Yzw8PTEsYXJbcj4+Ml09YyxhPWErMTw8MTY+PjE2LC0xPChvcltpPj4xXT1hKTw8MTY+PjE2JiYoYj0wfGFyW24+PjJdLCgwfGFyW2Y+PjJdKT4+PjA+Yj4+PjApPyhvcltpPj4xXT0tOCxhcltuPj4yXT1iKzEsbD0wfGNyW2I+PjBdfGMsYXJbcj4+Ml09bCxhPS04KTpsPWMsIShsPj4+MDwoYz1hclt0Pj4yXTw8Nyk+Pj4wKTspe2lmKGM9bC1jfDAsYXJbcj4+Ml09YywoMHxlKT09KDB8bykpe2U9MCxzPTg7YnJlYWt9dT11KygxPDxlKXwwLGU9ZSsxfDB9cmV0dXJuIDg9PSgwfHMpPzB8ZTowfChzPSgwfHV0KEEsZSkpK3V8MCl9ZnVuY3Rpb24gc3QoQSl7YXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MH1mdW5jdGlvbiBkdChBLGUpe0F8PTA7dmFyIHIsaT0wO3VyPShyPXVyKSsxNnwwLGk9ciwwfChpPTB8YXJbKGV8PTApKzQ+PjJdKSYmKGFyW2k+PjJdPTErKDB8YXJbaT4+Ml0pKSxhcltBKzQ+PjJdPWksYXJbQT4+Ml09YXJbZT4+Ml0sdXI9cn1mdW5jdGlvbiBrdChBKXt2YXIgZSxyLGksZj0wO3VyPShyPXVyKSsxNnwwLGY9cix1cj0oKGY9MHxhclsoZT0oQXw9MCkrNHwwKT4+Ml0pJiYoaT0oMHxhcltmPj4yXSktMXwwLGFyW2Y+PjJdPWksMHxpfHwoMHwoZj0wfGFyW0E+PjJdKSYmbXUoZiksKGY9MHxhcltlPj4yXSkmJnZ1KGYpKSkscil9ZnVuY3Rpb24gaHQoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO3VyPShmPXVyKSsxNnwwLG89Zis4fDAsbj1mLGk9MHxhclsobj0oQXw9MCkrNHwwKT4+Ml07ZG97aWYoMHxpKXtpZigxPT0oMHwodD0wfGFyW2k+PjJdKSkpcmV0dXJuIHd0KG89MHxhcltBPj4yXSxlLHIpLHZvaWQodXI9Zik7aWYoMTwoMHx0KSl7YXJbaT4+Ml09dCstMTticmVha31zcig0NzkxNyw0NzkyNywxNzcsNDc5NDMpfX13aGlsZSgwKTtvPTB8d3UoMTcyKSxhcltBPj4yXT1vLEE9MHxodSg0KSxhcltuPj4yXT1BLGFyW0E+PjJdPTEsd3QobyxlLHIpLHVyPWZ9ZnVuY3Rpb24gd3QoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2Rve2lmKDA8KDB8ZSkpe2lmKG89KDB8cik8MD8wOigwfHIpPDUxP3I6NTEsaT1BKzV8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbODA5NisoMTIqKG49ZSstMXwwKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihhPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmYSk+Pj4wJiYodD1mLHRyWyhhPWkpPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzZ8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbODA5NisoMTIqbnwwKSs0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0PWYsdHJbKGE9aSk+PjBdPXQsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErN3wwLGY9KDI1NSYoYT0oZj02MzwoMHwoYT0oMHwoYT0oKGE9MHxhcls4MDk2KygxMipufDApKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSooYT4+NCl8MCktNDV8MCxvKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmEpPj4+MCYmKHQ9Zix0clsoYT1pKT4+MF09dCxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGY9QSsxNDl8MCxpPSgyNTUmKGE9KGk9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbOTUzNisobjw8Mik+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSooYT4+NCl8MCktNDV8MCxvKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZpLDYzPD0oMTI3JmEpPj4+MCYmKHRyW2Y+PjBdPWksc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxmLDB8aSwxKSxpPUErMTQ3fDAsZj0oMjU1JihhPShmPTYzPCgwfChhPSgwfChhPSgoYT0wfGFyWzgxMjArKG48PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzE0OHwwLGk9KDI1NSYoYT0oaT02MzwoMHwoYT0oMHwoYT0oKGE9MHxhcls4MTI4KyhuPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihhPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJmksNjM8PSgxMjcmYSk+Pj4wJiYodHJbZj4+MF09aSxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGYsMHxpLDEpLGk9QSsxNTZ8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9MTA0KygoMHxicihvLC0yMCkpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJih0PWYsdHJbKGE9aSk+PjBdPXQsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTU3fDAsdD0oMjU1JihhPSh0PTYzPCgwfChhPSgwfChhPTEwNCsoKDB8YnIobywtMjUpKT4+NCl8MCkpPDE/MTooMHxhKTwxMjY/YToxMjYpKSk/YSs2NHwwOjYzLWF8MCkpPDwxJjI1NXwxJnQsNjM8PSgxMjcmYSk+Pj4wJiYobj10LHRyWyhhPWkpPj4wXT1uLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfHQsMSksaT1BKzE1OHwwLGY9KDI1NSYoYT0oZj02MzwoMHwoYT0oMHwoYT0xMDQrKCgwfGJyKG8sLTMwKSk+PjQpfDApKTwxPzE6KDB8YSk8MTI2P2E6MTI2KSkpP2ErNjR8MDo2My1hfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmEpPj4+MCYmKG49Zix0clsoYT1pKT4+MF09bixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsxNTl8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9MTA0KygoMHxicihvLC00MCkpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJihuPWYsdHJbKGE9aSk+PjBdPW4sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSx2YihBKzE2MHwwLDB8ZiwxKSx0cltBKzE1ND4+MF09MTQsdHJbQSsxNTU+PjBdPTE0LGk9QSsxNTB8MCxmPSgyNTUmKGE9KGY9NjM8KDB8KGE9KDB8KGE9KChhPTB8YXJbKG49OTUyMCsoKDE9PSgwfGUpPzA6Mik8PDIpfDApPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGE+PjQpfDApLTQ1fDAsbykpPj40KXwwKSk8MT8xOigwfGEpPDEyNj9hOjEyNikpKT9hKzY0fDA6NjMtYXwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZhKT4+PjAmJihsPWYsdHJbKGE9aSk+PjBdPWwsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTUxfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLG8pKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYoYT1mLHRyWyhsPWkpPj4wXT1hLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT0oMjU1JihsPShpPTYzPCgwfChsPSgwfChsPTQ4Kyg1Km8+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZpLGY9QSsxNTJ8MCw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksdmIoQSsxNTN8MCwwfHQsMSksZj1BKzE0M3wwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD03MisoKDB8YnIobywtNSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSwoMTI3JmwpPj4+MDw2Myl7dmIoMHxmLDB8aSw0KTticmVha310cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCl9fXdoaWxlKDApO2E9KDB8cik8MD8wOigwfHIpPDUxP3I6NTEsaT1BKzJ8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODEzNisoMTIqZXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzN8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODEzNisoMTIqZXwwKSs0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErNHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4MTM2KygxMiplfDApKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs4fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhuPTk0ODQrKCgyIT0oMHxlKT9lOjUpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzl8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTB8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis4Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMTF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbisxMj4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzEyfDAsaT0oMjU1JihsPShpPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzk0NzIrKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksaT1BKzEzfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzgxNzIrKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksZj1BKzE0fDAsbj0oMjU1JihsPShuPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhpPTgxODQrKCgwPT0oMHxlKT8wOjIpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJm4sNjM8PSgxMjcmbCk+Pj4wJiYocj1uLHRyWyhsPWYpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfG4sMSksbD0wfGFyW2krND4+Ml0saT1BKzE1fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPShsPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE2fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWyhuPTk0MjQrKChyPWU8PDIpPDwyKXwwKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE3fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE4fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rOD4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYobz1mLHRyWyhsPWkpPj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksaT1BKzE5fDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyW24rMTI+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKG89Zix0clsobD1pKT4+MF09byxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsyMHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhclsobj05Mzg4KygzKmU8PDIpfDApPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMjF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis0Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxpPUErMjJ8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbbis4Pj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihvPWYsdHJbKGw9aSk+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxuPUErMjV8MCxvPTkxNzIrKDE4KmU8PDIpfDAsaT0wO2Rve2lmKGY9bitpfDAsdD0oMjU1JihsPSh0PTYzPCgwfChsPSgwfChsPSgobD0wfGFyW28rKGk8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmdCw2Mzw9KDEyNyZsKT4+PjApe2M9MzU7YnJlYWt9dmIoMHxmLDB8dCwxKSxpPWkrMXwwfXdoaWxlKCgwfGkpPDE4KTszNT09KDB8YykmJih0cltmPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGY9QSs0M3wwLGk9MDtkb3tpZihuPWYraXwwLHQ9KDI1NSYobD0odD02MzwoMHwobD0oMHwobD0oKGw9MHxhcltvKyhpPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJnQsNjM8PSgxMjcmbCk+Pj4wKXtjPTM5O2JyZWFrfXZiKDB8biwwfHQsMSksaT1pKzF8MH13aGlsZSgoMHxpKTwxOCk7Mzk9PSgwfGMpJiYodHJbbj4+MF09dCxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSxpPUErNjF8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbKG49ODIwMCsocjw8Mil8MCk+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2MnwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzQ+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2M3wwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzg+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSs2NHwwLGY9KDI1NSYobD0oZj02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKzEyPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJihyPWYsdHJbKGw9aSk+PjBdPXIsc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksdmIoMHxpLDB8ZiwxKSxuPUErNjV8MCxpPTA7ZG97aWYoZj1uK2l8MCx0PSgyNTUmKGw9KHQ9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODI0OCsoMTY4KmV8MCkrKGk8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmdCw2Mzw9KDEyNyZsKT4+PjApe2M9NDU7YnJlYWt9dmIoMHxmLDB8dCwxKSxpPWkrMXwwfXdoaWxlKCgwfGkpPDQyKTs0NT09KDB8YykmJih0cltmPj4wXT10LHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGk9QSsxMDd8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODc1MisoZTw8Myk+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZmLDYzPD0oMTI3JmwpPj4+MCYmKHI9Zix0clsobD1pKT4+MF09cixzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfGksMHxmLDEpLGk9QSsxMDh8MCxmPSgyNTUmKGw9KGY9NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbODc1MisoZTw8MykrND4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmYsNjM8PSgxMjcmbCk+Pj4wJiYocj1mLHRyWyhsPWkpPj4wXT1yLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksdD1BKzEwOXwwLGY9ODg4NCsoMjQqZTw8Mil8MCxpPTA7ZG97aWYobj10K2l8MCxvPSgyNTUmKGw9KG89NjM8KDB8KGw9KDB8KGw9KChsPTB8YXJbZisoaTw8Mik+PjJdKTw8MyYxMjApLTE2KygoMHxicigoNSoobD4+NCl8MCktNDV8MCxhKSk+PjQpfDApKTwxPzE6KDB8bCk8MTI2P2w6MTI2KSkpP2wrNjR8MDo2My1sfDApKTw8MSYyNTV8MSZvLDYzPD0oMTI3JmwpPj4+MCl7Yz01MTticmVha312YigwfG4sMHxvLDEpLGk9aSsxfDB9d2hpbGUoKDB8aSk8MjQpOzUxPT0oMHxjKSYmKHRyW24+PjBdPW8sc3IoNDc5ODksNDc5MjcsMjEwLDQ4MDEwKSksZj1BKzEzM3wwLG49ODc3NisoNiplPDwyKXwwLGk9MDtkb3tpZih0PWYraXwwLG89KDI1NSYobD0obz02MzwoMHwobD0oMHwobD0oKGw9MHxhcltuKyhpPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJm8sNjM8PSgxMjcmbCk+Pj4wKXtjPTU1O2JyZWFrfXZiKDB8dCwwfG8sMSksaT1pKzF8MH13aGlsZSgoMHxpKTw2KTtpZig1NT09KDB8YykmJih0clt0Pj4wXT1vLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4ODQ4KyhlPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmksNjM8PSgxMjcmbCk+Pj4wJiYodHJbQT4+MF09aSxzcig0Nzk4OSw0NzkyNywyMTAsNDgwMTApKSx2YigwfEEsMHxpLDEpLGk9QSsxfDAsZj0oMjU1JihsPShmPTYzPCgwfChsPSgwfChsPSgobD0wfGFyWzg4NjArKGU8PDIpPj4yXSk8PDMmMTIwKS0xNisoKDB8YnIoKDUqKGw+PjQpfDApLTQ1fDAsYSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmZiw2Mzw9KDEyNyZsKT4+PjAmJih0cltpPj4wXT1mLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8aSwwfGYsMSksdHJbQSsxMzk+PjBdPTEsdHJbQSsxNDA+PjBdPTEsZj1BKzE0MXwwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD03MisoKDB8YnIoYSwtNSkpPj40KXwwKSk8MT8xOigwfGwpPDEyNj9sOjEyNikpKT9sKzY0fDA6NjMtbHwwKSk8PDEmMjU1fDEmaSw2Mzw9KDEyNyZsKT4+PjAmJih0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCkpLHZiKDB8ZiwwfGksMSksdmIoQSsxNDJ8MCwwfGksMSksZj1BKzE2MXwwLGk9KDI1NSYobD0oaT02MzwoMHwobD0oMHwobD0oKGw9MHxhcls4ODcyKyhlPDwyKT4+Ml0pPDwzJjEyMCktMTYrKCgwfGJyKCg1KihsPj40KXwwKS00NXwwLGEpKT4+NCl8MCkpPDE/MTooMHxsKTwxMjY/bDoxMjYpKSk/bCs2NHwwOjYzLWx8MCkpPDwxJjI1NXwxJmksKDEyNyZsKT4+PjA8NjMpcmV0dXJuIHZiKDB8ZiwwfGksMSksdHJbKGU9bD1BKzE2MnwwKT4+MF09MSx0cltlKzE+PjBdPTEsdHJbZSsyPj4wXT0xLHRyW2UrMz4+MF09MSx0clsobD1sKzR8MCk+PjBdPTEsdHJbbCsxPj4wXT0xLHRyW2wrMj4+MF09MSx0cltsKzM+PjBdPTEsdHJbKGw9QSsxNzB8MCk+PjBdPTEsdHJbbCsxPj4wXT0xLHRyW0ErMjM+PjBdPTEsdm9pZCh0cltBKzI0Pj4wXT0xKTt0cltmPj4wXT1pLHNyKDQ3OTg5LDQ3OTI3LDIxMCw0ODAxMCl9ZnVuY3Rpb24gdnQoQSl7dmFyIGUscixpPTA7dXI9KHI9dXIpKzE2fDAsaT1yLHVyPSgoaT0wfGFyWyhlPShBfD0wKSs0fDApPj4yXSkmJihhcltpPj4yXT0oMHxhcltpPj4yXSktMSxhcltBPj4yXT0wLGFyW2U+PjJdPTApLHIpfWZ1bmN0aW9uIG10KEEpe3ZhciBlLHIsaT0wLGY9MDt1cj0ocj11cikrMTZ8MCxpPXIsKGk9MHxhclsoZT0oQXw9MCkrNHwwKT4+Ml0pfHxzcig0ODA1Nyw0NzkyNyw5NSw0ODA2NCksdXI9KCgwfChmPTB8YXJbaT4+Ml0pKTw9MXx8KGFyW2k+PjJdPWYrLTEsZj0wfGFyW0E+PjJdLGk9MHx3dSgxNzIpLGFyW0E+PjJdPWksQT0wfGh1KDQpLGFyW2U+PjJdPUEsYXJbQT4+Ml09MSxoYigwfGksMHxmLDE3MikpLHIpfWZ1bmN0aW9uIGd0KEEsZSl7QXw9MDt2YXIgcixpLGY9MCxuPTA7cmV0dXJuIHVyPShpPXVyKSszMnwwLGY9aSxmPTB8YXJbKHI9KGV8PTApKzR8MCk+PjJdLHVyPShmPyhhcltmPj4yXT0xKygwfGFyW2Y+PjJdKSwwfChmPTB8YXJbKG49QSs0fDApPj4yXSkmJihhcltmPj4yXT0oMHxhcltmPj4yXSktMSxhcltBPj4yXT0wLGFyW24+PjJdPTApLGFyW0E+PjJdPWFyW2U+PjJdLGFyW24+PjJdPWFyW3I+PjJdKTooZj0wfGFyWyhuPUErNHwwKT4+Ml0pJiYoYXJbZj4+Ml09KDB8YXJbZj4+Ml0pLTEsYXJbQT4+Ml09MCxhcltuPj4yXT0wKSxpKSwwfEF9ZnVuY3Rpb24gWnQoQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MDtpZihiPTB8YXJbKEF8PTApKzU4MDg+PjJdLEo9KDE8PChzPTB8YXJbQSs1ODA0Pj4yXSkpLTF8MCxNPTB8YXJbQSs1ODIwPj4yXSxkPWU8PHM+PihRPTB8YXJbQSs1ODAwPj4yXSksUT1lKzE8PHM+PlEsKDB8KFE9KDB8KEQ9MHxhcltBKzU4MjQ+PjJdKSk8KDB8USk/RDpRKSk8PSgwfGQpKXJldHVybihNPTApfChNJj1KPTEpO2k9QSsxMDM3MnwwLGY9QSsxMDM2MHwwLG49QSsxMDM0OHwwLHQ9QSsxMDM1MnwwLG89QSsxMDM1NnwwLGE9QSsxMDM0MHwwLGM9QSs0OHwwLGw9QSs1MnwwLHU9QSs1OTc3fDAsRD1BKzEwMzA4fDAsaz0oZT0wKXxhclsocj1BKzU4MTZ8MCk+PjJdO0E6Zm9yKDs7KXtpZigwPCgwfGspKXtHPTA9PSgwfChGPTB8YnIoZCxiKSkpPzA6MzIsUj0wfGJyKEY+PnMsTSksWT0wIT0oMHxGKSYwPT0oRiZKfDApLF89MHxicigoTj1GKy0xfDApPj5zLE0pLFY9MDtkb3tpZihDPSgwfGJyKDB8YXJbaT4+Ml0sZCkpK1Z8MCxDPSgwfGFyW2Y+PjJdKSsoMypDfDApfDAsST02NTUzNSYoQz03JihjcltDPj4wXXxjcltDKzE+PjBdPDw4KSksQzw8MTY+PjE2KXtpZih5PShDPTB8YnIoVixiKSk+PnMsaD1GPj4oWj0wfGFyW24+PjJdKSwoMHwoQj1DPj5aKSk8PS0xKXtkPTg7YnJlYWsgQX1pZigoMHwoRT0wfGFyW3Q+PjJdKSk8PSgwfEIpKXtkPTg7YnJlYWsgQX1pZigoMHxoKTw9LTEpe2Q9MTE7YnJlYWsgQX1pZigoMHwoWD0wfGFyW28+PjJdKSk8PSgwfGgpKXtkPTExO2JyZWFrIEF9aWYoVz0wfGFyW2E+PjJdLHY9MHxicihFLGgpLHc9MHxscltXKygyNCooditCfDApfDApKzI+PjFdLGg9MHxhcltjPj4yXSwocD0oMHxhcltsPj4yXSktaD4+Mik+Pj4wPD13Pj4+MCl7az0wLGQ9MzM7YnJlYWsgQX1nPTB8YXJbKG09aCkrKHc8PDIpPj4yXSxoPTA9PSgwfEMpPzA6MTY7ZG97aWYoMCE9KDB8QykmMD09KEMmSnwwKSl7aWYoISgwfHRyW2crNzY0Pj4wXSkpe2lmKCEoLTE8KDB8KHc9QystMT4+WikpJigwfHcpPCgwfEUpKSl7ZD0xNjticmVhayBBfWlmKCh2PTB8bHJbVysoMjQqKHYrd3wwKXwwKSsyPj4xXSk+Pj4wPHA+Pj4wJiYoMHxhcltnKzgwMD4+Ml0pIT0oMHxhcls4MDArKDB8YXJbbSsodjw8Mik+PjJdKT4+Ml0pKXt3PTA7YnJlYWt9fXc9MHx0clt1Pj4wXT9oOih3PTB8YXJbRD4+Ml0sKDB8YXJbdysoeStSPDwyKT4+Ml0pPT0oMHxhclt3KygoQystMT4+cykrUjw8Mik+PjJdKT9oOjApfWVsc2Ugdz1ofXdoaWxlKDApO2Rve2lmKFkpe2lmKCEoMHx0cltnKzc2ND4+MF0pKXtpZighKC0xPCgwfChoPU4+PlopKSYoMHxoKTwoMHxYKSkpe2Q9MjQ7YnJlYWsgQX1pZihXPVcrKDI0KigoMHxicihFLGgpKStCfDApfDApKzJ8MCwoVz0wfGxyW1c+PjFdKT4+PjA8cD4+PjAmJigwfGFyW2crODAwPj4yXSkhPSgwfGFyWzgwMCsoMHxhclttKyhXPDwyKT4+Ml0pPj4yXSkpe2g9MDticmVha319aD0wfHRyW3U+PjBdP0c6KGg9MHxhcltEPj4yXSwoMHxhcltoKyh5K1I8PDIpPj4yXSk9PSgwfGFyW2grKHkrXzw8Mik+PjJdKT9HOjApfWVsc2UgaD1HfXdoaWxlKDApOzB8dHJbZys3NTQ+PjBdfHwoV3QoQSxDLEYsSSwwLDI1NSZ3LDI1NSZoKSxJdChBLEMsRixJLDAsMCksZT0xLGs9MHxhcltyPj4yXSl9Vj1WKzF8MH13aGlsZSgoMHxWKTwoMHxrKSl9aWYoKDB8USk8PSgwfChkPWQrMXwwKSkpe2s9MSxkPTMzO2JyZWFrfX1pZig4PT0oMHxkKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMTE9PSgwfGQpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZSBpZigxNj09KDB8ZCkpc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtlbHNlIGlmKDI0PT0oMHxkKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGQpKXJldHVybiAwfChNPWsmZSk7cmV0dXJuIDB9ZnVuY3Rpb24gcHQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wLEs9MCxxPTAsJD0wLEFBPTAsZUE9MCxyQT0wLGlBPTAsZkE9MCxuQT0wO2lmKFY9KGV8PTApPzI6MSxGPWU/MToyLFI9MSZlLE49MSYoMV5lKSxHPWU/ODA6MTYwLEk9ZT8xNjozMixuQT0oMHwobnw9MCkpPCgwfChuQT0wfGFyWyhDPShBfD0wKSsxMDQ3MnwwKT4+Ml0pKT9uOm5BLCEoKDB8KGZBPSgwfGkpPCgwfChmQT0wfGFyW0ErMTA0NzY+PjJdKSk/aTpmQSkpPD0oMHxyKSkpe289KDB8Zik8KDB8bkEpLGE9QSsxMDQ2MHwwLGM9QSsxMDM2OHwwLGw9QSsxMDM3MnwwLHU9QSsxMDM3NnwwLGI9QSsxMDM2MHwwLHM9QSsxMDM4OHwwLGQ9QSsxMDM5MnwwLGs9QSsxMDM5NnwwLGg9QSsxMDM4MHwwLHc9QSsxMDM0OHwwLHY9QSsxMDM1MnwwLG09QSsxMDM1NnwwLGc9QSsxMDM0MHwwLFo9QSs0OHwwLHA9QSs1MnwwLHk9QSsxMDMzMnwwLEI9QSsxMDUxNnwwLEU9QSsxMDQ0OHwwLFg9QSsxMDQ1MnwwLFc9QSsxMDQ1NnwwLHQ9QSsxMDQ0MHwwO0E6Zm9yKDs7KXtpZihvKXtlQT0oMHwoQUE9cjw8MikpLzR8MCxyQT1BQS1OfDAsJD1mO2Rve2lmKGlBPSgwfChNPSQ8PDIpKS80fDAsZT0oMHxicigwfGFyW0M+PjJdLGVBKSkraUF8MCxlPSgwfGFyW2E+PjJdKStlfDAsKEQ9MjU1JihuPTB8dHJbZT4+MF0pKSZHKXtpZihKPU0tUnwwLG49ckE+PihBPTB8YXJbYz4+Ml0pLCgwfChlPUo+PkEpKTw9LTEpe2U9MTA7YnJlYWsgQX1pZigoMHwoXz0wfGFyW2w+PjJdKSk8PSgwfGUpKXtlPTEwO2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTEzO2JyZWFrIEF9aWYoKDB8KFk9MHxhclt1Pj4yXSkpPD0oMHxuKSl7ZT0xMzticmVhayBBfWlmKG49KFE9MHxhcltiPj4yXSkrKDMqKCgwfGJyKF8sbikpK2V8MCl8MCl8MCxlPUFBPj5BLCEoLTE8KDB8KGk9TT4+QSkpJigwfGkpPCgwfF8pKSl7ZT0xNTticmVhayBBfWlmKCEoLTE8KDB8ZSkmKDB8ZSk8KDB8WSkpKXtlPTE3O2JyZWFrIEF9cT1RKygzKigoMHxicihfLGUpKStpfDApfDApfDA7ZTpkb3tpZigwIT0oNzY4JihjcltuPj4wXXxjcltuKzE+PjBdPDw4KSkmJjAhPSg3NjgmKGNyW3E+PjBdfGNyW3ErMT4+MF08PDgpKSl7aWYoRCZJfDApe2lmKG49QUE+PihpPTB8YXJbRT4+Ml0pLCgwfChlPU0+PmkpKTw9LTEpe2U9MjI7YnJlYWsgQX1pZigoMHwoQT0wfGFyW1g+PjJdKSk8PSgwfGUpKXtlPTIyO2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTI1O2JyZWFrIEF9aWYoKDB8KF89MHxhcltXPj4yXSkpPD0oMHxuKSl7ZT0yNTticmVhayBBfWlmKHE9KFk9MHxhclt0Pj4yXSkrKCgwfGJyKEEsbikpK2UpfDAsKDB8dHJbcT4+MF0pPD0tMSl7ZT0xO2JyZWFrfWlmKGU9ckE+PmksISgtMTwoMHwobj1KPj5pKSkmKDB8bik8KDB8QSkpKXtlPTI4O2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxfKSkpe2U9MzA7YnJlYWsgQX1pZihxPVkrKCgwfGJyKEEsZSkpK24pfDAsKDB8dHJbcT4+MF0pPD0tMSl7ZT0xO2JyZWFrfX1pZihuPXJBPj4oaT0wfGFyW3M+PjJdKSwoMHwoZT1KPj5pKSk8PS0xKXtlPTM0O2JyZWFrIEF9aWYoKDB8KEE9MHxhcltkPj4yXSkpPD0oMHxlKSl7ZT0zNDticmVhayBBfWlmKCgwfG4pPD0tMSl7ZT0zNzticmVhayBBfWlmKCgwfChfPTB8YXJbaz4+Ml0pKTw9KDB8bikpe2U9Mzc7YnJlYWsgQX1pZihxPTB8YXJbaD4+Ml0sSz0oMHxicihBLG4pKStlfDAsZT1BQT4+aSwhKC0xPCgwfChuPU0+PmkpKSYoMHxuKTwoMHxBKSkpe2U9Mzk7YnJlYWsgQX1pZighKC0xPCgwfGUpJigwfGUpPCgwfF8pKSl7ZT00MTticmVhayBBfWlmKEw9KDB8YnIoQSxlKSkrbnwwLG49ckE+PihfPTB8YXJbdz4+Ml0pLCgwfChlPUo+Pl8pKTw9LTEpe2U9NDQ7YnJlYWsgQX1pZigoMHwoWT0wfGFyW3Y+PjJdKSk8PSgwfGUpKXtlPTQ0O2JyZWFrIEF9aWYoKDB8bik8PS0xKXtlPTQ3O2JyZWFrIEF9aWYoKDB8KFE9MHxhclttPj4yXSkpPD0oMHxuKSl7ZT00NzticmVhayBBfWlmKGU9KEQ9MHxhcltnPj4yXSkrKDI0KigoMHxicihZLG4pKStlfDApfDApKzJ8MCxlPTB8bHJbZT4+MV0saT0wfGFyW1o+PjJdLEo9ZT4+PjA8KEE9KDB8YXJbcD4+Ml0pLWk+PjIpPj4+MD8wfGFyW2krKGU8PDIpPj4yXTowLGU9QUE+Pl8sISgtMTwoMHwobj1NPj5fKSkmKDB8bik8KDB8WSkpKXtlPTUxO2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxRKSkpe2U9NTM7YnJlYWsgQX1pZihlPUQrKDI0KigoMHxicihZLGUpKStufDApfDApKzJ8MCxlPShlPTB8bHJbZT4+MV0pPj4+MDxBPj4+MD8wfGFyW2krKGU8PDIpPj4yXTowLHg9KG49KGo9MHx0cltxKygxMipLfDApPj4wXSk8PDI0Pj4yND09MCk/LTE6MHxhcltKKzkxNisodHJbcSsoMTIqS3wwKSsyPj4wXTw8Mik+PjJdLE89KGk9KEg9MHx0cltxKygxMipLfDApKzE+PjBdKTw8MjQ+PjI0PT0wKT8tMTowfGFyW0orOTgwKyh0cltxKygxMipLfDApKzM+PjBdPDwyKT4+Ml0sISgoVT0oMHx4KT09KDB8KFM9KEE9KE09MHx0cltxKygxMipMfDApPj4wXSk8PDI0Pj4yND09MCk/LTE6MHxhcltlKzkxNisodHJbcSsoMTIqTHwwKSsyPj4wXTw8Mik+PjJdKSkpJigwfE8pPT0oMHwoSj0oRD0oVD0wfHRyW3ErKDEyKkx8MCkrMT4+MF0pPDwyND4+MjQ9PTApPy0xOjB8YXJbZSs5ODArKHRyW3ErKDEyKkx8MCkrMz4+MF08PDIpPj4yXSkpKSYmISgoMHxPKT09KDB8UykmKDB8eCk9PSgwfEopKSl7ZT0xO2JyZWFrfWlmKFA9bj8wOjB8b3JbcSsoMTIqS3wwKSs2Pj4xXSxlPW4/MDowfG9yW3ErKDEyKkt8MCkrND4+MV0sej1pPzA6MHxvcltxKygxMipLfDApKzEwPj4xXSxRPWk/MDowfG9yW3ErKDEyKkt8MCkrOD4+MV0sWT1BPzA6MHxvcltxKygxMipMfDApKzY+PjFdLEE9QT8wOjB8b3JbcSsoMTIqTHwwKSs0Pj4xXSxfPUQ/MDowfG9yW3ErKDEyKkx8MCkrMTA+PjFdLGk9RD8wOjB8b3JbcSsoMTIqTHwwKSs4Pj4xXSwoKDI1NSZIKSsoMjU1JmopfDApIT0oKDI1NSZUKSsoMjU1Jk0pfDApJiYoZXIoNCsoMHxhclt5Pj4yXSl8MCwxMDEzLDApLHRyW0I+PjBdPTMpLCgwfHgpPT0oMHxPKSl7aWYoKDB8UykhPSgwfEopKXtlPTgxO2JyZWFrIEF9cT0obj1lPDwxNj4+MTYpLShlPUE8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShZPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS0oaTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoKDB8KCgwfChxPSh6PDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKTw9Myl7ZT0wO2JyZWFrIGV9fX13aGlsZSgwKTtxPW4tKGk8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS1lfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigoMHwoKDB8KHE9KHo8PDE2Pj4xNiktKFk8PDE2Pj4xNil8MCkpPDA/MC1xfDA6cSkpPD0zKXtlPTA7YnJlYWsgZX19fXdoaWxlKDApO2U9MTticmVha31pZihlPWU8PDE2Pj4xNixVKXtxPWUtKEE8PDE2Pj4xNil8MDtkb3tpZigoMHwoKDB8cSk8MD8wLXF8MDpxKSk8PTMpe2lmKDM8KDB8KCgwfChxPShQPDwxNj4+MTYpLShZPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKSlicmVhaztpZigzPCgwfCgoMHwocT0oUTw8MTY+PjE2KS0oaTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoKDB8KCgwfChxPSh6PDwxNj4+MTYpLShfPDwxNj4+MTYpfDApKTwwPzAtcXwwOnEpKTw9Myl7ZT0wO2JyZWFrIGV9fX13aGlsZSgwKTtlPTE7YnJlYWt9cT1lLShpPDwxNj4+MTYpfDA7ZG97aWYoKDB8KCgwfHEpPDA/MC1xfDA6cSkpPD0zKXtpZigzPCgwfCgoMHwocT0oUDw8MTY+PjE2KS0oXzw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSkpYnJlYWs7aWYoMzwoMHwoKDB8KHE9KFE8PDE2Pj4xNiktKEE8PDE2Pj4xNil8MCkpPDA/MC1xfDA6cSkpKWJyZWFrO2lmKCgwfCgoMHwocT0oejw8MTY+PjE2KS0oWTw8MTY+PjE2KXwwKSk8MD8wLXF8MDpxKSk8PTMpe2U9MDticmVhayBlfX19d2hpbGUoMCk7ZT0xO2JyZWFrfWU9Mn13aGlsZSgwKTtpQT0oMHxicigwfGFyW0M+PjJdLGVBKSkraUF8MCxpQT0oMHxhclthPj4yXSkraUF8MCx0cltpQT4+MF09LTQmdHJbaUE+PjBdfGV9ZWxzZSB0cltlPj4wXT0tNCZuOyQ9JCtWfDB9d2hpbGUoKDB8JCk8KDB8bkEpKX1pZigoMHxmQSk8PSgwfChyPXIrRnwwKSkpe2U9NTticmVha319c3dpdGNoKDB8ZSl7Y2FzZSA1OnJldHVybjtjYXNlIDEwOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAxMzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMTU6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDE3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAyMjpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMjU6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDI4OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAzMDpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzQ6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDM3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzOTpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgNDE6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDQ0OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA0Nzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgNTE6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDUzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSA4MTpzcig0ODIwNiw0ODIyNSwzNDMsNDgyMzYpfX19ZnVuY3Rpb24geXQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUCxMLEsscSwkLEFBLGVBLHJBLGlBLGZBLG5BLHRBLG9BLGFBLGNBLGxBLHVBLGJBLHNBLGRBLGtBLGhBLHdBLHZBLG1BLGdBLFpBLHBBLHlBLEJBLEVBLFhBLFdBLElBLENBLEdBLFZBLEZBLFJBLE5BLF9BLFlBLFFBLERBLEpBLE1BLFRBLFVBLFNBLE9BLHpBLGpBLEhBLHhBLFBBLExBLEtBLHFBLCRBLEFlLGVlLHJlLGllLGZlLG5lLHRlLG9lLGFlLGNlLGxlLHVlLGJlLHNlLGRlLGtlLGhlLHdlLHZlLG1lLGdlLFplLHBlLHllPTAsQmU9MCxFZT0wLFhlPTAsV2U9MCxJZT0wLENlPTAsR2U9MCxWZT0wLEZlPTAsUmU9MCxOZT0wLF9lPTAsWWU9MCxRZT0wLERlPTAsSmU9MCxNZT0wLFRlPTAsVWU9MCxTZT0wLE9lPTAsemU9MCxqZT0wLEhlPTAseGU9MCxQZT0wLExlPTAsS2U9MCxxZT0wLCRlPTAsQXI9MCxlcj0wLHJyPTAsaXI9MCxmcj0wLG5yPTA7aWYodXI9KHBlPXVyKSs4MHwwLG1lPSh2ZT1wZSkrNDB8MCxnZT1wZSszMnwwLFplPShlfD0wKT8yOjEsa2U9ZT8xOjIsZGU9MHxhclsoaGU9KEF8PTApKzQwfDApPj4yXSx5ZT0wfGFyW0ErNTc2MD4+Ml0sbnI9KDB8bik8KDB8KG5yPTB8YXJbKHdlPUErMTA0NzJ8MCk+PjJdKSk/bjpuciwoMHwoZnI9KDB8aSk8KDB8KGZyPTB8YXJbQSsxMDQ3Nj4+Ml0pKT9pOmZyKSk8PSgwfHIpKXVyPXBlO2Vsc2V7VEE9KDB8Zik8KDB8bnIpLFVBPUErMTA0NjB8MCxTQT1BKzR8MCxPQT1BKzEwMzY4fDAsekE9QSsxMDM3MnwwLGpBPUErMTAzNzZ8MCxIQT1BKzEwMzYwfDAseEE9QSsxMDM0OHwwLFBBPUErMTAzNTJ8MCxMQT1BKzEwMzU2fDAsS0E9QSsxMDM0MHwwLHFBPUErNDh8MCwkQT15ZSstOHwwLEFlPTQrbWV8MCxlZT0yK21lfDAscmU9MjgrbWV8MCxpZT0yNittZXwwLGZlPTI0K21lfDAsbmU9dmUrNHwwLHRlPXZlKzJ8MCxvZT12ZSsyOHwwLGFlPXZlKzI2fDAsY2U9dmUrMjR8MCxsZT02K21lfDAsdWU9dmUrNnwwLGJlPTMwK21lfDAsc2U9dmUrMzB8MCxEQT1BKzU0ODB8MCxKQT0yK2dlfDAsTUE9NCtnZXwwLHg9NjU1MzUrKEg9MTw8eWUpfDAsWUE9dmUrOHwwLEw9ZGUtMXwwLHk9OCttZXwwLEs9ZGUtMnwwLFo9MTArbWV8MCxxPWRlLTN8MCxCPTEyK21lfDAsJD1kZS00fDAsVz0xNCttZXwwLFFBPXZlKzE2fDAsQUE9ZGU8PDIsZUE9KHJyPVA9ZGU8PDEpKy0xfDAsWD0xNittZXwwLHJBPXJyKy0yfDAscD0xOCttZXwwLGlBPXJyKy0zfDAsRT0yMCttZXwwLHJyPXJyKy00fDAsST0yMittZXwwLGZBPTYqZGV8MCxuQT0oaXI9MypkZXwwKSstMXwwLHRBPWlyKy0yfDAsb0E9aXIrLTN8MCxpcj1pcistNHwwLGFBPWRlPDwxLGNBPTB8YnIoZGUsLTMpLGxBPWRlPDwxLHVBPTB8YnIoZGUsLTMpLGtBPTAtZGV8MCxoQT12ZSsyfDAsd0E9MC0oc0E9YkE9ZGU8PDEpfDAsdD0yK21lfDAsdkE9dmUrNHwwLG1BPTAtKGRBPTMqZGV8MCl8MCx1PTQrbWV8MCxnQT12ZSs2fDAsWkE9MC0oZXI9ZGU8PDIpfDAsaD02K21lfDAscEE9dmUrOHwwLHlBPTEtZGV8MCxsPTgrbWV8MCxCQT0xK2RlfDAsRUE9dmUrMTB8MCxYQT0xLXNBfDAsbz0xMCttZXwwLFdBPTF8c0EsSUE9dmUrMTJ8MCxDQT0xLWRBfDAsYj0xMittZXwwLEdBPTErZEF8MCxWQT12ZSsxNHwwLEZBPTEtZXJ8MCx3PTE0K21lfDAsUkE9dmUrMTZ8MCxOQT0yLWRlfDAsaz0xNittZXwwLF9BPTIrZGV8MCxDPXZlKzE4fDAsRz0yLXNBfDAsYT0xOCttZXwwLFY9MitzQXwwLEY9dmUrMjB8MCxSPTItZEF8MCxzPTIwK21lfDAsTj0yK2RBfDAsXz12ZSsyMnwwLFk9Mi1lcnwwLHY9MjIrbWV8MCxRPXZlKzI0fDAsRD0zLWRlfDAsZz0yNCttZXwwLEo9MytkZXwwLE09dmUrMjZ8MCxUPTMtc0F8MCxjPTI2K21lfDAsVT0zK3NBfDAsUz12ZSsyOHwwLE89My1kQXwwLGQ9MjgrbWV8MCx6PTMrZEF8MCxqPXZlKzMwfDAsZXI9My1lcnwwLG09MzArbWV8MDtBOmZvcig7Oyl7aWYoVEEpe0xlPSgwfChQZT1yPDwyKSkvNHwwLEtlPVBlKy0xfDAseGU9ZT9QZTpLZSxIZT1mO2Rve2lmKFhlPUhlPDwyLFdlPSgwfGJyKDB8YXJbd2U+PjJdLExlKSkrKCgwfFhlKS80fDApfDAsKFdlPTMmdHJbKDB8YXJbVUE+PjJdKStXZT4+MF0pPDwyND4+MjQpe2lmKEFyPShxZT0wfGFyW1NBPj4yXSkrKCRlPSgwfGJyKDB8YXJbaGU+PjJdLFBlKSkrWGU8PDEpfDAsRWU9ZT8oaT1sclsoaT0oQT1pPUFyKSs0fDApPj4xXXxscltpKzI+PjFdPDwxNixhclsobj12ZSk+PjJdPWxyW0E+PjFdfGxyW0ErMj4+MV08PDE2LGFyW24rND4+Ml09aSxvclttZT4+MV09MHxvcltBcistMj4+MV0sb3JbZWU+PjFdPTB8b3JbQXIrLTQ+PjFdLG9yW0FlPj4xXT0wfG9yW0FyKy02Pj4xXSxvcltsZT4+MV09MHxvcltBcistOD4+MV0sbj1sclsobj0oaT1uPXFlKygkZStQKXwwKSs0fDApPj4xXXxscltuKzI+PjFdPDwxNixhclsoQT1ZQSk+PjJdPWxyW2k+PjFdfGxyW2krMj4+MV08PDE2LGFyW0ErND4+Ml09bixvclt5Pj4xXT0wfG9yW0FyKyhMPDwxKT4+MV0sb3JbWj4+MV09MHxvcltBcisoSzw8MSk+PjFdLG9yW0I+PjFdPTB8b3JbQXIrKHE8PDEpPj4xXSxvcltXPj4xXT0wfG9yW0FyKygkPDwxKT4+MV0sQT1sclsoQT0obj1BPXFlKygkZStBQSl8MCkrNHwwKT4+MV18bHJbQSsyPj4xXTw8MTYsYXJbKGk9UUEpPj4yXT1scltuPj4xXXxscltuKzI+PjFdPDwxNixhcltpKzQ+PjJdPUEsb3JbWD4+MV09MHxvcltBcisoZUE8PDEpPj4xXSxvcltwPj4xXT0wfG9yW0FyKyhyQTw8MSk+PjFdLG9yW0U+PjFdPTB8b3JbQXIrKGlBPDwxKT4+MV0sb3JbST4+MV09MHxvcltBcisocnI8PDEpPj4xXSxpPWxyWyhpPShBPWk9cWUrKCRlK2ZBKXwwKSs0fDApPj4xXXxscltpKzI+PjFdPDwxNixhclsobj1jZSk+PjJdPWxyW0E+PjFdfGxyW0ErMj4+MV08PDE2LGFyW24rND4+Ml09aSxvcltmZT4+MV09MHxvcltBcisobkE8PDEpPj4xXSxuPWllLGk9YmUsQT10QSx5ZT1pcixCZT1yZSxvQSk6KG9yW3ZlPj4xXT0wfG9yW0FyPj4xXSxvclttZT4+MV09MHxvcltBcisoa0E8PDEpPj4xXSxvcltoQT4+MV09MHxvcltBcisoZGU8PDEpPj4xXSxvclt0Pj4xXT0wfG9yW0FyKyh3QTw8MSk+PjFdLG9yW3ZBPj4xXT0wfG9yW0FyKyhzQTw8MSk+PjFdLG9yW3U+PjFdPTB8b3JbQXIrKG1BPDwxKT4+MV0sb3JbZ0E+PjFdPTB8b3JbQXIrKGRBPDwxKT4+MV0sb3JbaD4+MV09MHxvcltBcisoWkE8PDEpPj4xXSxvcltwQT4+MV09MHxvcltBcisyPj4xXSxvcltsPj4xXT0wfG9yW0FyKyh5QTw8MSk+PjFdLG9yW0VBPj4xXT0wfG9yW0FyKyhCQTw8MSk+PjFdLG9yW28+PjFdPTB8b3JbQXIrKFhBPDwxKT4+MV0sb3JbSUE+PjFdPTB8b3JbQXIrKFdBPDwxKT4+MV0sb3JbYj4+MV09MHxvcltBcisoQ0E8PDEpPj4xXSxvcltWQT4+MV09MHxvcltBcisoR0E8PDEpPj4xXSxvclt3Pj4xXT0wfG9yW0FyKyhGQTw8MSk+PjFdLG9yW1JBPj4xXT0wfG9yW0FyKzQ+PjFdLG9yW2s+PjFdPTB8b3JbQXIrKE5BPDwxKT4+MV0sb3JbQz4+MV09MHxvcltBcisoX0E8PDEpPj4xXSxvclthPj4xXT0wfG9yW0FyKyhHPDwxKT4+MV0sb3JbRj4+MV09MHxvcltBcisoVjw8MSk+PjFdLG9yW3M+PjFdPTB8b3JbQXIrKFI8PDEpPj4xXSxvcltfPj4xXT0wfG9yW0FyKyhOPDwxKT4+MV0sb3Jbdj4+MV09MHxvcltBcisoWTw8MSk+PjFdLG9yW1E+PjFdPTB8b3JbQXIrNj4+MV0sb3JbZz4+MV09MHxvcltBcisoRDw8MSk+PjFdLG9yW00+PjFdPTB8b3JbQXIrKEo8PDEpPj4xXSxvcltjPj4xXT0wfG9yW0FyKyhUPDwxKT4+MV0sb3JbUz4+MV09MHxvcltBcisoVTw8MSk+PjFdLG49ZCxpPW0sQT1PLHllPWVyLEJlPWoseiksb3Jbbj4+MV09MHxvcltBcisoQTw8MSk+PjFdLG9yW0JlPj4xXT0wfG9yW0FyKyhFZTw8MSk+PjFdLG9yW2k+PjFdPTB8b3JbQXIrKHllPDwxKT4+MV0sbj1QZT4+KFZlPTB8YXJbT0E+PjJdKSwoMHwoUmU9WGU+PlZlKSk8PS0xKXtuPTEzO2JyZWFrIEF9aWYoKDB8KF9lPTB8YXJbekE+PjJdKSk8PSgwfFJlKSl7bj0xMzticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xNjticmVhayBBfWlmKCgwfChOZT0wfGFyW2pBPj4yXSkpPD0oMHxuKSl7bj0xNjticmVhayBBfWlmKFFlPTB8YXJbSEE+PjJdLFllPShGZT0wfGJyKF9lLG4pKStSZXwwLEdlPVhlKy0xfDAsaT14ZT4+VmUsISgtMTwoMHwobj0oZT9HZTpYZSk+PlZlKSkmKDB8bik8KDB8X2UpKSl7bj0xODticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8TmUpKSl7bj0yMDticmVhayBBfWlmKHllPVFlKygzKigoMHxicihfZSxpKSkrbnwwKXwwKSsyfDAseWU9MSsoMHx0cltRZSsoMypZZXwwKSsyPj4wXSkrKDB8dHJbeWU+PjBdKT4+MSxuPVhlPj4oaT0wfGFyW3hBPj4yXSksaT1QZT4+aSwoMHxuKTw9LTEpe249MjM7YnJlYWsgQX1pZigoMHwoQT0wfGFyW1BBPj4yXSkpPD0oMHxuKSl7bj0yMzticmVhayBBfWlmKCgwfGkpPD0tMSl7bj0yNjticmVhayBBfWlmKCgwfGkpPj0oMHxhcltMQT4+Ml0pKXtuPTI2O2JyZWFrIEF9amU9KDB8YXJbS0E+PjJdKSsoMjQqKCgwfGJyKEEsaSkpK258MCl8MCkrMnwwLGplPTB8YXJbKDB8YXJbcUE+PjJdKSsobHJbamU+PjFdPDwyKT4+Ml0sQ2U9KDB8YXJbamUrNzU2Pj4yXSkreWV8MCxDZT1jcls0ODE1NCsoKDB8Q2UpPDA/MDooMHxDZSk8NTE/Q2U6NTEpPj4wXTw8JEEsamU9KFdlPDwxJjI1NSktMit5ZSsoMHxhcltqZSs3NjA+PjJdKXwwLGplPWNyWzQ4MTAwKygoMHxqZSk8MD8wOigwfGplKTw1Mz9qZTo1Myk+PjBdPDwkQSxKZT0oMHwoSmU9KDY1NTM1JihUZT0wfG9yW0FlPj4xXSkpLSgoNjU1MzUmKFVlPTB8b3JbZWU+PjFdKSk8PDEpKyhuPTY1NTM1Jih5ZT0wfG9yW21lPj4xXSkpfDApKTwwPzAtSmV8MDpKZSxCZT0wfGxyW2ZlPj4xXSxEZT0oMHwoRGU9KDB8bHJbcmU+PjFdKS0obHJbaWU+PjFdPDwxKStCZXwwKSk8MD8wLURlfDA6RGUsTWU9KDB8KE1lPSg2NTUzNSYoSWU9MHxvcltuZT4+MV0pKS0oKDY1NTM1JihPZT0wfG9yW3RlPj4xXSkpPDwxKSsoaT02NTUzNSYoU2U9MHxvclt2ZT4+MV0pKXwwKSk8MD8wLU1lfDA6TWUsRWU9MHxscltjZT4+MV0sQT1NZStKZXwwLFhlPSh6ZT0oMHwoemU9KDB8bHJbb2U+PjFdKS0obHJbYWU+PjFdPDwxKStFZXwwKSk8MD8wLXplfDA6emUpK0RlfDAsSmU9RGUrSmV8MCxNZT16ZStNZXwwO2U6ZG97aWYoKFhlK0F8MCk8KDB8Q2UpKXtXZT1DZT4+Mjtkb3tpZigoQTw8MXwwKTwoMHxXZSkpe2lmKHplPSgwfGxyW2xlPj4xXSktbnwwLChDZT4+M3wwKTw9KCgoMHwoRGU9aS0oMHxsclt1ZT4+MV0pfDApKTwwPzAtRGV8MDpEZSkrKCgwfHplKTwwPzAtemV8MDp6ZSl8MCkpe2k9MDticmVha31pPSgwfCgoMHwoaT1uLWl8MCkpPDA/MC1pfDA6aSkpPCgxKyg1KmplfDApPj4xfDApfWVsc2UgaT0wfXdoaWxlKDApO2Rve2lmKChYZTw8MXwwKTwoMHxXZSkpe2lmKHplPSgwfGxyW2JlPj4xXSktQmV8MCwoQ2U+PjN8MCk8PSgoKDB8KERlPUVlLSgwfGxyW3NlPj4xXSl8MCkpPDA/MC1EZXwwOkRlKSsoKDB8emUpPDA/MC16ZXwwOnplKXwwKSl7bj0wO2JyZWFrfW49KDB8KCgwfChuPUJlLUVlfDApKTwwPzAtbnwwOm4pKTwoMSsoNSpqZXwwKT4+MXwwKX1lbHNlIG49MH13aGlsZSgwKTtpZih6ZT1pJm4sRWU9KENlPj4xKStDZT4+MyxBPShCZT0wfHRyW0RBPj4wXSk8PDI0Pj4yNCE9MCxlKXtpZihuPS0xPCgwfChpPUdlPj5WZSkpLEEpe2lmKCEobiYoMHxpKTwoMHxfZSkpKXtuPTM3O2JyZWFrIEF9QT0oNjU1MzUmKGNyWyhBPVFlKygzKihGZStpfDApfDApfDApPj4wXXxjcltBKzE+PjBdPDw4KSk+Pj4xMCYxXjF9ZWxzZXtpZighbil7bj00MTticmVhayBBfUE9MX1pZigoMHxfZSk8PSgwfGkpKXtuPTQxO2JyZWFrIEF9aT1RZSsoMyooRmUraXwwKXwwKXwwLERlPShuPUJlPDwyND4+MjQ/MD09KDEwMjQmKGNyWyhuPVFlKygzKlllfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSk6MSkmMD09KDIwNDgmKGNyWyhEZT1RZSsoMypZZXwwKXwwKT4+MF18Y3JbRGUrMT4+MF08PDgpKSxOZT1BPDwyND4+MjQ/MD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKTowfWVsc2V7aWYobj0tMTwoMHwoaT1LZT4+VmUpKSxBKXtpZighKG4mKDB8aSk8KDB8TmUpKSl7bj00NzticmVhayBBfUE9UWUrKDMqKCgwfGJyKF9lLGkpKStSZXwwKXwwKXwwLEE9MD09KDEwMjQmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKX1lbHNle2lmKCFuKXtuPTUxO2JyZWFrIEF9QT0xfWlmKCgwfE5lKTw9KDB8aSkpe249NTE7YnJlYWsgQX1pPVFlKygzKigoMHxicihfZSxpKSkrUmV8MCl8MCl8MCxEZT0obj1CZTw8MjQ+PjI0PzA9PSgxMDI0Jihjclsobj1RZSsoMypZZXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpOjEpJjA9PSgyMDQ4JihjclsoRGU9UWUrKDMqWWV8MCl8MCk+PjBdfGNyW0RlKzE+PjBdPDw4KSksTmU9QSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpfWZvcihfZT1qZTw8MSxZZT0xMCpqZXwwLFFlPTAtamV8MCxSZT0oMHxFZSk8PSgwfEplKXwxXk5lLEZlPSgwfEVlKTw9KDB8TWUpfDFeRGUsVmU9MC0oR2U9amU+PjEpfDAsQ2U9MCxYZT1UZSxFZT1VZSxpPVNlLEE9T2U7Oyl7V2U9cWUrKCRlKygwfGJyKFAsQ2UpKSl8MDtkb3tpZih6ZSl7U2U9MHxvclt2ZSsoQ2U8PDMpKzY+PjFdLE1lPTY1NTM1JkVlLFVlPTY1NTM1JkEsRWU9KFRlPTY1NTM1JnllKStfZXwwLEJlPTY1NTM1JigoMHwoQmU9KEE9NCsoVGU8PDEpfDApKyhNZTw8MSkrKE9lPTY1NTM1JlhlKSsobj0oaSY9NjU1MzUpPDwxKStVZT4+MykpPCgwfChKZT1UZS1fZXwwKSk/SmU6KDB8RWUpPCgwfEJlKT9FZTpCZSksWGU9TWUrX2V8MCxFZT02NTUzNSYoKDB8KEVlPShUZSsyK01lK09lK2l8MCk+Pj4yKSk8KDB8KEplPU1lLV9lfDApKT9KZTooMHxYZSk8KDB8RWUpP1hlOkVlKSxYZT0oVGUrNCtNZSsoMypPZXwwKStpKyhsclttZSsoQ2U8PDMpKzY+PjFdPDwxKXwwKT4+PjMsSmU9T2UtX2V8MCxPZT1PZStfZXwwLFhlPTY1NTM1JigoMHxYZSk8KDB8SmUpP0plOigwfE9lKTwoMHxYZSk/T2U6WGUpLG49QStNZStuKyhVZTw8MSkrKE9lPTY1NTM1JkllKT4+MyxBPWkrX2V8MCxuPTY1NTM1JigoMHxuKTwoMHwoTWU9aS1fZXwwKSk/TWU6KDB8QSk8KDB8bik/QTpuKSxvcltnZT4+MV09bixBPWkrVGUrVWV8MCxUZT1VZS1fZXwwLFVlPVVlK19lfDAsaT02NTUzNSYoKDB8KGk9KE9lKzIrQXwwKT4+PjIpKTwoMHxUZSk/VGU6KDB8VWUpPCgwfGkpP1VlOmkpLG9yW0pBPj4xXT1pLEE9KEErNCsoMypPZXwwKSsoKDY1NTM1JlNlKTw8MSl8MCk+Pj4zLFNlPU9lLV9lfDAsT2U9T2UrX2V8MCxBPTY1NTM1JigoMHxBKTwoMHxTZSk/U2U6KDB8T2UpPCgwfEEpP09lOkEpLG9yW01BPj4xXT1BO2Rve2lmKGUpe2lmKHllPTB8YnIoQ2UsZGUpLCFOZSl7aWYoIURlKWJyZWFrO29yW1dlPj4xXT0wfG9yW2dlPj4xXSxvcltXZSsyPj4xXT0wfG9yWzIrZ2U+PjFdLG9yW1dlKzQ+PjFdPTB8b3JbNCtnZT4+MV07YnJlYWt9aWYob3JbQXIrKHllKy0xPDwxKT4+MV09QmUsRGUpe29yW0FyKyh5ZTw8MSk+PjFdPW4sb3JbQXIrKHllKy0yPDwxKT4+MV09RWUsb3JbQXIrKHllKzE8PDEpPj4xXT1pLG9yW0FyKyh5ZSstMzw8MSk+PjFdPVhlLG9yW0FyKyh5ZSsyPDwxKT4+MV09QTticmVha31vcltBcisoeWUrLTI8PDEpPj4xXT1FZSxvcltBcisoeWUrLTM8PDEpPj4xXT1YZTticmVha31pZighTmUpe2lmKCFEZSlicmVhaztvcltBcisoQ2U8PDEpPj4xXT1uLG9yW0FyKyhkZStDZTw8MSk+PjFdPWksb3JbQXIrKGJBK0NlPDwxKT4+MV09QTticmVha31pZihvcltBcisoQ2UtZGU8PDEpPj4xXT1CZSxEZSl7b3JbQXIrKENlPDwxKT4+MV09bixvcltBcisoQ2UtYUE8PDEpPj4xXT1FZSxvcltBcisoZGUrQ2U8PDEpPj4xXT1pLG9yW0FyKyhDZStjQTw8MSk+PjFdPVhlLG9yW0FyKyhhQStDZTw8MSk+PjFdPUE7YnJlYWt9b3JbQXIrKENlLWxBPDwxKT4+MV09RWUsb3JbQXIrKENlK3VBPDwxKT4+MV09WGU7YnJlYWt9d2hpbGUoMCl9ZWxzZXtpZigoMHxZZSk8PSgwfCgoMHwobj04Kyg5KigoQmU9NjU1MzUmaSktKHllJj02NTUzNSl8MCl8MCkrKDB8YnIoKEEmPTY1NTM1KS0oaT02NTUzNSZFZSl8MCwtMykpPj40KSk8MD8wLW58MDpuKSkpYnJlYWs7bj0oMHxuKTwoMHxRZSk/UWU6KDB8amUpPCgwfG4pP2plOm47ZG97aWYoZSl7aWYoTmUmJihTZT1uK3llfDAsT2U9QXIrKCgwfGJyKENlLGRlKSktMTw8MSl8MCxvcltPZT4+MV09KDB8U2UpPDA/MDo2NTUzNSYoKDB8U2UpPCgwfEgpP1NlOngpKSwhRGUpYnJlYWs7U2U9QmUtbnwwLE9lPUFyKygoMHxicihDZSxkZSkpPDwxKXwwLG9yW09lPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCl9ZWxzZXtpZihOZSYmKE9lPW4reWV8MCxvcltBcisoQ2UtZGU8PDEpPj4xXT0oMHxPZSk8MD8wOjY1NTM1JigoMHxPZSk8KDB8SCk/T2U6eCkpLCFEZSlicmVhaztPZT1CZS1ufDAsb3JbQXIrKENlPDwxKT4+MV09KDB8T2UpPDA/MDo2NTUzNSYoKDB8T2UpPCgwfEgpP09lOngpfX13aGlsZSgwKTtpZihSZXx8KFNlPSgoMHwoT2U9KFNlPW4rKCgoeWUrMSsoNjU1MzUmWGUpfDApPj4+MSktaSl8MCk+PjEpKTwoMHxWZSk/VmU6KCgwfEdlKTwoMHxPZSk/amU6U2UpPj4xKStpfDAsT2U9KDB8YnIoQ2UsZGUpKS0yfDAsb3JbQXIrKChlP09lOkNlLVB8MCk8PDEpPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCkpLEZlKWJyZWFrO1NlPSgoMHwoT2U9KFNlPSgoQmUrMSsoNjU1MzUmSWUpfDApPj4+MSktQS1ufDApPj4xKSk8KDB8VmUpP1ZlOigoMHxHZSk8KDB8T2UpP2plOlNlKT4+MSkrQXwwLE9lPTB8YnIoZT9DZToxLGRlKSxvcltBcisoT2UrKGU/MTpDZSk8PDEpPj4xXT0oMHxTZSk8MD8wOjY1NTM1JigoMHxTZSk8KDB8SCk/U2U6eCl9fXdoaWxlKDApO2lmKDQ9PSgwfChuPUNlKzF8MCkpKWJyZWFrIGU7WGU9MHxvclttZSsoKENlPW4pPDwzKSs0Pj4xXSxFZT0wfG9yW21lKyhuPDwzKSsyPj4xXSx5ZT0wfG9yW21lKyhuPDwzKT4+MV0saT0wfG9yW3ZlKyhuPDwzKT4+MV0sQT0wfG9yW3ZlKyhuPDwzKSsyPj4xXSxJZT0wfG9yW3ZlKyhuPDwzKSs0Pj4xXX19fXdoaWxlKDApfUhlPUhlK1plfDB9d2hpbGUoKDB8SGUpPCgwfG5yKSl9aWYoKDB8ZnIpPD0oMHwocj1yK2tlfDApKSl7bj01O2JyZWFrfX1zd2l0Y2goMHxuKXtjYXNlIDU6cmV0dXJuIHZvaWQodXI9cGUpO2Nhc2UgMTM6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDE2OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAxODpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMjA6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyNjpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzc6Y2FzZSA0MTpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgNDc6Y2FzZSA1MTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX19ZnVuY3Rpb24gQnQoQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHosaixILHgsUCxMLEsscSwkLEFBLGVBLHJBLGlBLGZBLG5BLHRBLG9BLGFBLGNBLGxBLHVBLGJBLHNBLGRBLGtBLGhBLHdBLHZBLG1BLGdBLFpBLHBBLHlBLEJBLEVBLFhBLFdBLElBLENBLEdBLFZBLEZBLFJBLE5BLF9BLFlBLFFBLERBLEpBLE1BLFRBLFVBPTAsU0E9MCxPQT0wLHpBPTAsakE9MCxIQT0wLHhBPTAsUEE9MCxMQT0wLEtBPTAscUE9MCwkQT0wLEFlPTAsZWU9MCxyZT0wLGllPTAsZmU9MCxuZT0wLHRlPTAsb2U9MCxhZT0wLGNlPTAsbGU9MCx1ZT0wLGJlPTAsc2U9MCxkZT0wLGtlPTAsaGU9MCx3ZT0wLHZlPTAsbWU9MCxnZT0wLFplPTAscGU9MCx5ZT0wLEJlPTAsRWU9MCxYZT0wLFdlPTAsSWU9MDtpZih1cj0oVEE9dXIpKzQ4fDAsUUE9VEErMjR8MCxEQT1UQSs4fDAsSkE9VEEsTUE9KGV8PTApPzI6MSxOQT1lPzE6MixSQT0wfGFyWyhfQT0oQXw9MCkrNDB8MCk+PjJdLFVBPTB8YXJbQSs1NzYwPj4yXSxJZT0oMHxuKTwoMHwoSWU9MHxhclsoWUE9QSsxMDQ3MnwwKT4+Ml0pKT9uOkllLCgwfChXZT0oMHxpKTwoMHwoV2U9MHxhcltBKzEwNDc2Pj4yXSkpP2k6V2UpKTw9KDB8cikpdXI9VEE7ZWxzZXt0QT0oMHxmKTwoMHxJZSksb0E9QSsxMDQ2MHwwLGFBPUErNHwwLGNBPUErMTAzNjh8MCxsQT1BKzEwMzcyfDAsdUE9QSsxMDM3NnwwLGJBPUErMTAzNjB8MCxzQT1BKzEwMzQ4fDAsZEE9QSsxMDM1MnwwLGtBPUErMTAzNTZ8MCxoQT1BKzEwMzQwfDAsd0E9QSs0OHwwLHZBPVVBKy04fDAsbUE9MitEQXwwLGdBPTErREF8MCxaQT0xNCtEQXwwLHBBPTEzK0RBfDAseUE9MTIrREF8MCxCQT0yK1FBfDAsRUE9MStRQXwwLFhBPTE0K1FBfDAsV0E9MTMrUUF8MCxJQT0xMitRQXwwLENBPTMrREF8MCxHQT0zK1FBfDAsVkE9MTUrREF8MCxGQT0xNStRQXwwLGlBPUErNTQ4MHwwLGZBPUpBKzF8MCxuQT1KQSsyfDAsTD0yNTUrKFA9MTw8VUEpfDAscGU9MypSQXwwLHE9eWU9Sz1SQTw8MSwkPTB8YnIoUkEsLTMpLEFBPVJBPDwxLGVBPTB8YnIoUkEsLTMpLEJlPXJBPVJBPDwxLEVlPTMqUkF8MCxYZT1SQTw8MixhPWU/LTE6MC1SQXwwLHQ9ZT8xOlJBLGM9ZT8tMjowLUJlfDAsbD1lPzI6QmUsdT1lPy0zOjAtRWV8MCxiPWU/MzpFZSxzPWU/LTQ6MC1YZXwwLG89ZT9SQToxLGQ9NCtRQXwwLGs9ZT9SQS0xfDA6MS1SQXwwLFM9NCtEQXwwLGg9MStSQXwwLHc9NStRQXwwLHY9ZT9SQS0yfDA6MS1CZXwwLFQ9NStEQXwwLG09ZT8yK1JBfDA6MXxCZSxnPTYrUUF8MCxaPWU/UkEtM3wwOjEtRWV8MCxPPTYrREF8MCxwPWU/MytSQXwwOkVlKzF8MCx5PTcrUUF8MCxCPWU/UkEtNHwwOjEtWGV8MCxIPTcrREF8MCxFPWU/eWU6MixYPTgrUUF8MCxXPWU/eWUrLTF8MDoyLVJBfDAsaj04K0RBfDAsST1lPzF8eWU6MitSQXwwLEM9OStRQXwwLEc9ZT95ZSstMnwwOjItQmV8MCxVPTkrREF8MCxWPShlP3llOkJlKSsyfDAsRj0xMCtRQXwwLFI9ZT95ZSstM3wwOjItRWV8MCx6PTEwK0RBfDAsTj1lP3llKzN8MDpFZSsyfDAsXz0xMStRQXwwLHllPWU/eWUrLTR8MDoyLVhlfDAseD0xMStEQXwwLFk9ZT9wZTozLFE9ZT9wZSstMXwwOjMtUkF8MCxEPWU/cGUrMXwwOjMrUkF8MCxKPWU/cGUrLTJ8MDozLUJlfDAsQmU9ZT9wZSsyfDA6QmUrM3wwLE09ZT9wZSstM3wwOjMtRWV8MCxFZT0oZT9wZTpFZSkrM3wwLFhlPWU/cGUrLTR8MDozLVhlfDA7QTpmb3IoOzspe2lmKHRBKXt2ZT0oMHwod2U9cjw8MikpLzR8MCxtZT13ZSstMXwwLGhlPWU/d2U6bWUsa2U9Zjtkb3tpZihBPWtlPDwyLFNBPSgwfGJyKDB8YXJbWUE+PjJdLHZlKSkrKCgwfEEpLzR8MCl8MCwoU0E9MyZ0clsoMHxhcltvQT4+Ml0pK1NBPj4wXSk8PDI0Pj4yNCl7aWYocGU9KGdlPTB8YXJbYUE+PjJdKSsoWmU9KDB8YnIoMHxhcltfQT4+Ml0sd2UpKStBfDApfDAsdHJbUUE+PjBdPTB8dHJbcGU+PjBdLHRyW0RBPj4wXT0wfHRyW3BlK2E+PjBdLHRyW0VBPj4wXT0wfHRyW3BlK3Q+PjBdLHRyW2dBPj4wXT0wfHRyW3BlK2M+PjBdLHRyW0JBPj4wXT0wfHRyW3BlK2w+PjBdLHRyW21BPj4wXT0wfHRyW3BlK3U+PjBdLHRyW0dBPj4wXT0wfHRyW3BlK2I+PjBdLHRyW0NBPj4wXT0wfHRyW3BlK3M+PjBdLHRyW2Q+PjBdPTB8dHJbcGUrbz4+MF0sdHJbUz4+MF09MHx0cltwZStrPj4wXSx0clt3Pj4wXT0wfHRyW3BlK2g+PjBdLHRyW1Q+PjBdPTB8dHJbcGUrdj4+MF0sdHJbZz4+MF09MHx0cltwZSttPj4wXSx0cltPPj4wXT0wfHRyW3BlK1o+PjBdLHRyW3k+PjBdPTB8dHJbcGUrcD4+MF0sdHJbSD4+MF09MHx0cltwZStCPj4wXSx0cltYPj4wXT0wfHRyW3BlK0U+PjBdLHRyW2o+PjBdPTB8dHJbcGUrVz4+MF0sdHJbQz4+MF09MHx0cltwZStJPj4wXSx0cltVPj4wXT0wfHRyW3BlK0c+PjBdLHRyW0Y+PjBdPTB8dHJbcGUrVj4+MF0sdHJbej4+MF09MHx0cltwZStSPj4wXSx0cltfPj4wXT0wfHRyW3BlK04+PjBdLHRyW3g+PjBdPTB8dHJbcGUreWU+PjBdLEtBPTB8dHJbcGUrWT4+MF0sdHJbSUE+PjBdPUtBLHpBPTB8dHJbcGUrUT4+MF0sdHJbeUE+PjBdPXpBLHFBPTB8dHJbcGUrRD4+MF0sdHJbV0E+PjBdPXFBLGpBPTB8dHJbcGUrSj4+MF0sdHJbcEE+PjBdPWpBLCRBPTB8dHJbcGUrQmU+PjBdLHRyW1hBPj4wXT0kQSxIQT0wfHRyW3BlK00+PjBdLHRyW1pBPj4wXT1IQSxyZT0wfHRyW3BlK0VlPj4wXSx0cltGQT4+MF09cmUsZWU9MHx0cltwZStYZT4+MF0sdHJbVkE+PjBdPWVlLG49d2U+PihmZT0wfGFyW2NBPj4yXSksKDB8KHRlPUE+PmZlKSk8PS0xKXtuPTEwO2JyZWFrIEF9aWYoKDB8KGFlPTB8YXJbbEE+PjJdKSk8PSgwfHRlKSl7bj0xMDticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xMzticmVhayBBfWlmKCgwfChvZT0wfGFyW3VBPj4yXSkpPD0oMHxuKSl7bj0xMzticmVhayBBfWlmKGxlPTB8YXJbYkE+PjJdLGNlPShuZT0wfGJyKGFlLG4pKSt0ZXwwLGllPUErLTF8MCxpPWhlPj5mZSwhKC0xPCgwfChuPShlP2llOkEpPj5mZSkpJigwfG4pPCgwfGFlKSkpe249MTU7YnJlYWsgQX1pZighKC0xPCgwfGkpJigwfGkpPCgwfG9lKSkpe249MTc7YnJlYWsgQX1pZihVQT1sZSsoMyooKDB8YnIoYWUsaSkpK258MCl8MCkrMnwwLFVBPTErKDB8dHJbbGUrKDMqY2V8MCkrMj4+MF0pKygwfHRyW1VBPj4wXSk+PjEsbj1BPj4oaT0wfGFyW3NBPj4yXSksaT13ZT4+aSwoMHxuKTw9LTEpe249MjA7YnJlYWsgQX1pZigoMHwoQT0wfGFyW2RBPj4yXSkpPD0oMHxuKSl7bj0yMDticmVhayBBfWlmKCgwfGkpPD0tMSl7bj0yMzticmVhayBBfWlmKCgwfGkpPj0oMHxhcltrQT4+Ml0pKXtuPTIzO2JyZWFrIEF9ZGU9KDB8YXJbaEE+PjJdKSsoMjQqKCgwfGJyKEEsaSkpK258MCl8MCkrMnwwLGRlPTB8YXJbKDB8YXJbd0E+PjJdKSsobHJbZGU+PjFdPDwyKT4+Ml0sQWU9KDB8YXJbZGUrNzU2Pj4yXSkrVUF8MCxBZT1jcls0ODE1NCsoKDB8QWUpPDA/MDooMHxBZSk8NTE/QWU6NTEpPj4wXTw8dkEsZGU9KFNBPDwxJjI1NSktMitVQSsoMHxhcltkZSs3NjA+PjJdKXwwLGRlPWNyWzQ4MTAwKygoMHxkZSk8MD8wOigwfGRlKTw1Mz9kZTo1Myk+PjBdPDx2QSxTQT0oMHwoU0E9KDI1NSYoeEE9MHx0clttQT4+MF0pKS0oKDI1NSYoT0E9MHx0cltnQT4+MF0pKTw8MSkrKFBBPTI1NSYoVUE9MHx0cltEQT4+MF0pKXwwKSk8MD8wLVNBfDA6U0EsSEE9KDB8KEhBPSgyNTUmSEEpLSgoMjU1JmpBKTw8MSkrKExBPTI1NSZ6QSl8MCkpPDA/MC1IQXwwOkhBLG49KHNlPSgwfChzZT0oMjU1JihqQT0wfHRyW0JBPj4wXSkpLSgoMjU1JihiZT0wfHRyW0VBPj4wXSkpPDwxKSsoaT0yNTUmKHVlPTB8dHJbUUE+PjBdKSl8MCkpPDA/MC1zZXwwOnNlKStTQXwwLEE9KEtBPSgwfChLQT0oMjU1JiRBKS0oKDI1NSZxQSk8PDEpKyh6QT0yNTUmS0EpfDApKTwwPzAtS0F8MDpLQSkrSEF8MCxIQT1IQStTQXwwLEtBPUtBK3NlfDA7ZTpkb3tpZigoQStufDApPCgwfEFlKSl7U0E9QWU+PjI7ZG97aWYoKG48PDF8MCk8KDB8U0EpKXtpZihzZT0oMHxjcltDQT4+MF0pLVBBfDAsKEFlPj4zfDApPD0oKCgwfCgkQT1pLSgwfGNyW0dBPj4wXSl8MCkpPDA/MC0kQXwwOiRBKSsoKDB8c2UpPDA/MC1zZXwwOnNlKXwwKSl7aT0wO2JyZWFrfWk9KDB8KCgwfChpPVBBLWl8MCkpPDA/MC1pfDA6aSkpPCgxKyg1KmRlfDApPj4xfDApfWVsc2UgaT0wfXdoaWxlKDApO2Rve2lmKChBPDwxfDApPCgwfFNBKSl7aWYoKEFlPj4zfDApPD0oKCgwfChyZT16QS0oMjU1JnJlKXwwKSk8MD8wLXJlfDA6cmUpKygoMHwoc2U9KDI1NSZlZSktTEF8MCkpPDA/MC1zZXwwOnNlKXwwKSl7bj0wO2JyZWFrfW49KDB8KCgwfChuPUxBLXpBfDApKTwwPzAtbnwwOm4pKTwoMSsoNSpkZXwwKT4+MXwwKX1lbHNlIG49MH13aGlsZSgwKTtpZihzZT1pJm4sekE9KEFlPj4xKStBZT4+MyxBPShTQT0wfHRyW2lBPj4wXSk8PDI0Pj4yNCE9MCxlKXtpZihuPS0xPCgwfChpPWllPj5mZSkpLEEpe2lmKCEobiYoMHxpKTwoMHxhZSkpKXtuPTM0O2JyZWFrIEF9QT0oNjU1MzUmKGNyWyhBPWxlKygzKihuZStpfDApfDApfDApPj4wXXxjcltBKzE+PjBdPDw4KSk+Pj4xMCYxXjF9ZWxzZXtpZighbil7bj0zODticmVhayBBfUE9MX1pZigoMHxhZSk8PSgwfGkpKXtuPTM4O2JyZWFrIEF9aT1sZSsoMyoobmUraXwwKXwwKXwwLGZlPShuPVNBPDwyND4+MjQ/MD09KDEwMjQmKGNyWyhuPWxlKygzKmNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSk6MSkmMD09KDIwNDgmKGNyWyhmZT1sZSsoMypjZXwwKXwwKT4+MF18Y3JbZmUrMT4+MF08PDgpKSxBZT1BPDwyND4+MjQ/MD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKTowfWVsc2V7aWYobj0tMTwoMHwoaT1tZT4+ZmUpKSxBKXtpZighKG4mKDB8aSk8KDB8b2UpKSl7bj00NDticmVhayBBfUE9bGUrKDMqKCgwfGJyKGFlLGkpKSt0ZXwwKXwwKXwwLEE9MD09KDEwMjQmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKX1lbHNle2lmKCFuKXtuPTQ4O2JyZWFrIEF9QT0xfWlmKCgwfG9lKTw9KDB8aSkpe249NDg7YnJlYWsgQX1pPWxlKygzKigoMHxicihhZSxpKSkrdGV8MCl8MCl8MCxmZT0obj1TQTw8MjQ+PjI0PzA9PSgxMDI0Jihjclsobj1sZSsoMypjZXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpOjEpJjA9PSgyMDQ4JihjclsoZmU9bGUrKDMqY2V8MCl8MCk+PjBdfGNyW2ZlKzE+PjBdPDw4KSksQWU9QSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpfWZvcihlZT1kZTw8MSxyZT0xMCpkZXwwLGllPTAtZGV8MCwkQT0oMHx6QSk8PSgwfEhBKXwxXkFlLHFBPSgwfHpBKTw9KDB8S0EpfDFeZmUsS0E9MC0oTEE9ZGU+PjEpfDAsUEE9MCxpPXVlLEE9YmU7Oyl7ekE9Z2UrKFplKyhIQT0wfGJyKFJBLFBBKSkpfDA7ZG97aWYoc2Upe3VlPTB8dHJbUUErKFBBPDwyKSszPj4wXSxsZT0yNTUmQSxTQT0oY2U9MjU1JlVBKStlZXwwLFVBPTI1NSYoKDB8KFVBPShBPTQrKGNlPDwxKXwwKSsoKGFlPTI1NSZPQSk8PDEpKyhiZT0yNTUmeEEpKyhuPShpJj0yNTUpPDwxKStsZT4+MykpPCgwfChvZT1jZS1lZXwwKSk/b2U6KDB8U0EpPCgwfFVBKT9TQTpVQSksT0E9YWUrZWV8MCxTQT0yNTUmKCgwfChTQT0oY2UrMithZStiZStpfDApPj4+MikpPCgwfChvZT1hZS1lZXwwKSk/b2U6KDB8T0EpPCgwfFNBKT9PQTpTQSksT0E9KGNlKzQrYWUrKDMqYmV8MCkraSsoY3JbREErKFBBPDwyKSszPj4wXTw8MSl8MCk+Pj4zLG9lPWJlLWVlfDAsYmU9YmUrZWV8MCxPQT0yNTUmKCgwfE9BKTwoMHxvZSk/b2U6KDB8YmUpPCgwfE9BKT9iZTpPQSksbj1BK2FlK24rKGxlPDwxKSsoYmU9MjU1JmpBKT4+MyxBPWkrZWV8MCxuPTI1NSYoKDB8bik8KDB8KGFlPWktZWV8MCkpP2FlOigwfEEpPCgwfG4pP0E6biksdHJbSkE+PjBdPW4sQT1pK2NlK2xlfDAsY2U9bGUtZWV8MCxsZT1sZStlZXwwLGk9MjU1JigoMHwoaT0oYmUrMitBfDApPj4+MikpPCgwfGNlKT9jZTooMHxsZSk8KDB8aSk/bGU6aSksdHJbZkE+PjBdPWksQT0oQSs0KygzKmJlfDApKygoMjU1JnVlKTw8MSl8MCk+Pj4zLHVlPWJlLWVlfDAsYmU9YmUrZWV8MCxBPTI1NSYoKDB8QSk8KDB8dWUpP3VlOigwfGJlKTwoMHxBKT9iZTpBKSx0cltuQT4+MF09QTtkb3tpZihlKXtpZighQWUpe2lmKCFmZSlicmVhazt0clt6QT4+MF09MHx0cltKQT4+MF0sdHJbekErMT4+MF09MHx0cltKQSsxPj4wXSx0clt6QSsyPj4wXT0wfHRyW0pBKzI+PjBdO2JyZWFrfWlmKHRyW3BlKyhIQSstMSk+PjBdPVVBLGZlKXt0cltwZStIQT4+MF09bix0cltwZSsoSEErLTIpPj4wXT1TQSx0cltwZSsoSEErMSk+PjBdPWksdHJbcGUrKEhBKy0zKT4+MF09T0EsdHJbcGUrKEhBKzIpPj4wXT1BO2JyZWFrfXRyW3BlKyhIQSstMik+PjBdPVNBLHRyW3BlKyhIQSstMyk+PjBdPU9BO2JyZWFrfWlmKCFBZSl7aWYoIWZlKWJyZWFrO3RyW3BlK1BBPj4wXT1uLHRyW3BlKyhSQStQQSk+PjBdPWksdHJbcGUrKHJBK1BBKT4+MF09QTticmVha31pZih0cltwZSsoUEEtUkEpPj4wXT1VQSxmZSl7dHJbcGUrUEE+PjBdPW4sdHJbcGUrKFBBLXEpPj4wXT1TQSx0cltwZSsoUkErUEEpPj4wXT1pLHRyW3BlKyhQQSskKT4+MF09T0EsdHJbcGUrKHErUEEpPj4wXT1BO2JyZWFrfXRyW3BlKyhQQS1BQSk+PjBdPVNBLHRyW3BlKyhQQStlQSk+PjBdPU9BO2JyZWFrfXdoaWxlKDApfWVsc2V7aWYoKDB8cmUpPD0oMHwoKDB8KG49OCsoOSooKFNBPTI1NSZpKS0oVUEmPTI1NSl8MCl8MCkrKDB8YnIoKEEmPTI1NSktKGk9MjU1Jk9BKXwwLC0zKSk+PjQpKTwwPzAtbnwwOm4pKSlicmVhaztuPSgwfG4pPCgwfGllKT9pZTooMHxkZSk8KDB8bik/ZGU6bjtkb3tpZihlKXtpZihBZSYmKGJlPW4rVUF8MCx0cltwZSsoSEErLTEpPj4wXT0oMHxiZSk8MD8wOjI1NSYoKDB8YmUpPCgwfFApP2JlOkwpKSwhZmUpYnJlYWs7YmU9U0EtbnwwLHRyW3BlK0hBPj4wXT0oMHxiZSk8MD8wOjI1NSYoKDB8YmUpPCgwfFApP2JlOkwpfWVsc2V7aWYoQWUmJihiZT1uK1VBfDAsdHJbcGUrKFBBLVJBKT4+MF09KDB8YmUpPDA/MDoyNTUmKCgwfGJlKTwoMHxQKT9iZTpMKSksIWZlKWJyZWFrO2JlPVNBLW58MCx0cltwZStQQT4+MF09KDB8YmUpPDA/MDoyNTUmKCgwfGJlKTwoMHxQKT9iZTpMKX19d2hpbGUoMCk7aWYoJEF8fChiZT0oKDB8KHVlPShiZT1uKygoKFVBKzErKDI1NSZ4QSl8MCk+Pj4xKS1pKXwwKT4+MSkpPCgwfEtBKT9LQTooKDB8TEEpPCgwfHVlKT9kZTpiZSk+PjEpK2l8MCx0cltwZSsoZT9IQSstMnwwOlBBLUt8MCk+PjBdPSgwfGJlKTwwPzA6MjU1JigoMHxiZSk8KDB8UCk/YmU6TCkpLHFBKWJyZWFrO3VlPSgoMHwoYmU9KHVlPSgoU0ErMSsoMjU1JmpBKXwwKT4+PjEpLUEtbnwwKT4+MSkpPCgwfEtBKT9LQTooKDB8TEEpPCgwfGJlKT9kZTp1ZSk+PjEpK0F8MCxiZT0wfGJyKGU/UEE6MSxSQSksdHJbcGUrKGJlKyhlPzE6UEEpKT4+MF09KDB8dWUpPDA/MDoyNTUmKCgwfHVlKTwoMHxQKT91ZTpMKX19d2hpbGUoMCk7aWYoND09KDB8KG49UEErMXwwKSkpYnJlYWsgZTt4QT0wfHRyW0RBKygoUEE9bik8PDIpKzI+PjBdLE9BPTB8dHJbREErKG48PDIpKzE+PjBdLFVBPTB8dHJbREErKG48PDIpPj4wXSxpPTB8dHJbUUErKG48PDIpPj4wXSxBPTB8dHJbUUErKG48PDIpKzE+PjBdLGpBPTB8dHJbUUErKG48PDIpKzI+PjBdfX19d2hpbGUoMCl9a2U9a2UrTUF8MH13aGlsZSgoMHxrZSk8KDB8SWUpKX1pZigoMHxXZSk8PSgwfChyPXIrTkF8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1UQSk7Y2FzZSAxMDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTM6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE1OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAxNzpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMjA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNDpjYXNlIDM4OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA0NDpjYXNlIDQ4OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBFdChBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLLHEsJCxBQSxlQSxyQSxpQSxmQSxuQSx0QSxvQSxhQSxjQSxsQSx1QSxiQSxzQSxkQSxrQSxoQSx3QSx2QSxtQSxnQSxaQSxwQSx5QSxCQSxFQSxYQSxXQSxJQSxDQSxHQSxWQSxGQSxSQSxOQSxfQSxZQSxRQSxEQSxKQSxNQSxUQT0wLFVBPTAsU0E9MCxPQT0wLHpBPTAsakE9MCxIQT0wLHhBPTAsUEE9MCxMQT0wLEtBPTAscUE9MCwkQT0wLEFlPTAsZWU9MCxyZT0wLGllPTAsZmU9MCxuZT0wLHRlPTAsb2U9MCxhZT0wLGNlPTAsbGU9MCx1ZT0wO2lmKHVyPShNQT11cikrMzJ8MCxRQT1NQSsxNnwwLERBPU1BLEpBPTB8YXJbKEF8PTApKzU3ODA+PjJdLEZBPTB8YXJbQSs1Nzg0Pj4yXSxSQT0wfGJyKEpBLGU/MjoxKSxOQT0wfGJyKEZBLGU/MToyKSxWQT0wfGFyWyhfQT1BKzQ0fDApPj4yXSx1ZT0oMHxuKTwoMHwodWU9MHxhclsoWUE9QSsxMDQ3MnwwKT4+Ml0pKT9uOnVlLHM9QSs1NzY4fDAsKDB8KGxlPSgwfGkpPCgwfChsZT0wfGFyW0ErMTA0NzY+PjJdKSk/aTpsZSkpPD0oMHxyKSl1cj1NQTtlbHNle2Q9KDB8Zik8KDB8dWUpLGs9My1KQXwwLGg9My1GQXwwLHc9QSsxMDQ2MHwwLHY9QSs1OTU2fDAsbT1BKzU5NTJ8MCxnPUErMTAzNjh8MCxaPUErMTAzNzJ8MCxwPUErMTAzNzZ8MCx5PUErMTAzNjB8MCxCPUErNTc3NnwwLEU9QSsxMDM0OHwwLFg9QSsxMDM1MnwwLFc9QSsxMDM1NnwwLEk9QSsxMDM0MHwwLEM9QSs0OHwwLEc9QSs1NDgwfDAsRj02NTUzNSsoVj0xPDxhcltzPj4yXSl8MCxSPVZBPDwxLE49MHxicihWQSwtMiksWT1WQS0xfDAsSj0oUT1WQTw8MSktMXwwLFU9KE09MypWQXwwKS0xfDAsTz0xK1ZBfDAsaj1WQS0yfDAsSD0xfFEsUD1RLTJ8MCxMPTErTXwwLHE9TS0yfDAsY0E9VkE8PDEsZEE9MypWQXwwLHdBPWVBPV89REErMnwwLHZBPXJBPXQ9MitRQXwwLG1BPWlBPW89MTArUUF8MCxnQT1mQT16PURBKzEwfDAsWkE9bkE9RD1EQSs0fDAscEE9dEE9Yz00K1FBfDAseUE9b0E9bD0xMitRQXwwLEJBPWFBPXg9REErMTJ8MCxFQT1sQT1UPURBKzZ8MCxYQT11QT11PTYrUUF8MCxXQT1iQT1iPTE0K1FBfDAsSUE9c0E9Sz1EQSsxNHwwLEdBPWtBPSQ9YT04K1FBfDAsQ0E9aEE9QUE9Uz1EQSs4fDA7QTpmb3IoOzspe2lmKGQpe2FlPSgwfChvZT0wfGJyKHRlPXI8PGgsRkEpKSkvNHwwLGNlPW9lKy0xfDAscmU9ZT9vZTpjZSxBZT1mO2Rve2lmKGZlPTB8YnIoaWU9QWU8PGssSkEpLG49KDB8YnIoMHxhcltZQT4+Ml0sYWUpKSsoKDB8ZmUpLzR8MCl8MCwxPCgyNTUmKG49MyZ0clsoMHxhclt3Pj4yXSkrbj4+MF0pKSl7bmU9ZmUrLTF8MCxlZT1lP25lOmZlLHFBPShuPDwxJjI1NSktMnwwLEtBPTA7ZG97aWYoVEE9MHxhclsoMD09KDB8S0EpP206dik+PjJdLCRBPShuPTB8YXJbQSs0KygoS0E9S0ErMXwwKTw8Mik+PjJdKSsoaT0oMHxicigwfGFyW19BPj4yXSx0ZSkpK2llPDwxKXwwLGU/KG9yW0RBPj4xXT0wfG9yWyRBPj4xXSxvcltRQT4+MV09MHxvclskQSstMj4+MV0sb3JbXz4+MV09MHxvclskQSsoVkE8PDEpPj4xXSxvclt0Pj4xXT0wfG9yWyRBKyhZPDwxKT4+MV0sb3JbRD4+MV09MHxvclskQSsoUTw8MSk+PjFdLG9yW2M+PjFdPTB8b3JbJEErKEo8PDEpPj4xXSxvcltUPj4xXT0wfG9yWyRBKyhNPDwxKT4+MV0sb3JbdT4+MV09MHxvclskQSsoVTw8MSk+PjFdLG9yW1M+PjFdPTB8b3JbJEErMj4+MV0sb3JbYT4+MV09MHxvclskQSstND4+MV0sb3Jbej4+MV09MHxvclskQSsoTzw8MSk+PjFdLG9yW28+PjFdPTB8b3JbJEErKGo8PDEpPj4xXSxvclt4Pj4xXT0wfG9yWyRBKyhIPDwxKT4+MV0sb3JbbD4+MV09MHxvclskQSsoUDw8MSk+PjFdLG9yW0s+PjFdPTB8b3JbJEErKEw8PDEpPj4xXSxvcltiPj4xXT0wfG9yWyRBKyhxPDwxKT4+MV0pOihQQT1OK2l8MCx4QT1sclsoeEE9KExBPXhBPSRBKSs0fDApPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbKEhBPURBKT4+Ml09bHJbTEE+PjFdfGxyW0xBKzI+PjFdPDwxNixhcltIQSs0Pj4yXT14QSxIQT1sclsoSEE9KHhBPUhBPW4rUEF8MCkrNHwwKT4+MV18bHJbSEErMj4+MV08PDE2LGFyWyhMQT1RQSk+PjJdPWxyW3hBPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbTEErND4+Ml09SEEsTEE9bHJbKExBPShIQT1MQT1uKyhpK1IpfDApKzR8MCk+PjFdfGxyW0xBKzI+PjFdPDwxNixhclsoeEE9Q0EpPj4yXT1scltIQT4+MV18bHJbSEErMj4+MV08PDE2LGFyW3hBKzQ+PjJdPUxBLFBBPWxyWyhQQT0oeEE9UEE9bisoUEErTil8MCkrNHwwKT4+MV18bHJbUEErMj4+MV08PDE2LGFyWyhMQT1HQSk+PjJdPWxyW3hBPj4xXXxsclt4QSsyPj4xXTw8MTYsYXJbTEErND4+Ml09UEEpLG49b2U+PihTQT0wfGFyW2c+PjJdKSwoMHwoekE9ZmU+PlNBKSk8PS0xKXtuPTE0O2JyZWFrIEF9aWYoKDB8KEhBPTB8YXJbWj4+Ml0pKTw9KDB8ekEpKXtuPTE0O2JyZWFrIEF9aWYoKDB8bik8PS0xKXtuPTE3O2JyZWFrIEF9aWYoKDB8KGpBPTB8YXJbcD4+Ml0pKTw9KDB8bikpe249MTc7YnJlYWsgQX1pZihQQT0wfGFyW3k+PjJdLHhBPShPQT0wfGJyKEhBLG4pKSt6QXwwLGk9cmU+PlNBLCEoLTE8KDB8KG49ZWU+PlNBKSkmKDB8bik8KDB8SEEpKSl7bj0xOTticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8akEpKSl7bj0yMTticmVhayBBfW49UEErKDMqKCgwfGJyKEhBLGkpKStufDApfDApKzJ8MCxuPSgxKygwfHRyW1BBKygzKnhBfDApKzI+PjBdKSsoMHx0cltuPj4wXSk+PjEpK1RBfDA7ZG97aWYoMT09KDB8YXJbQj4+Ml0pKXtpZigzMDw9KDB8bikpe2lmKDQyPCgwfG4pKXtuPW4rLTZ8MDticmVha31uPTB8YXJbODAyMCsobistMzA8PDIpPj4yXTticmVha319ZWxzZSBuPSgwfG4pPDUxP246NTF9d2hpbGUoMCk7aWYoaT1mZT4+KFRBPTB8YXJbRT4+Ml0pLFRBPW9lPj5UQSwoMHxpKTw9LTEpe249MzA7YnJlYWsgQX1pZigoMHwoVUE9MHxhcltYPj4yXSkpPD0oMHxpKSl7bj0zMDticmVhayBBfWlmKCgwfFRBKTw9LTEpe249MzM7YnJlYWsgQX1pZigoMHxUQSk+PSgwfGFyW1c+PjJdKSl7bj0zMzticmVhayBBfUxBPSgwfGFyW0k+PjJdKSsoMjQqKCgwfGJyKFVBLFRBKSkraXwwKXwwKSsyfDAsTEE9cUErbisoMHxhcls3NjArKDB8YXJbKDB8YXJbQz4+Ml0pKyhscltMQT4+MV08PDIpPj4yXSk+PjJdKXwwLExBPWNyWzQ4MTAwKygoMHxMQSk8MD8wOigwfExBKTw1Mz9MQTo1Myk+PjBdPDwoMHxhcltzPj4yXSktOCxVQT0wPT0oMHx0cltHPj4wXSk7ZTpkb3tpZihlKXtpZihuPS0xPCgwfChpPW5lPj5TQSkpLFVBKXtpZighbil7bj00MTticmVhayBBfVRBPTF9ZWxzZXtpZighKG4mKDB8aSk8KDB8SEEpKSl7bj0zNzticmVhayBBfVRBPTA9PSgxMDI0JihjclsoVEE9UEErKDMqKE9BK2l8MCl8MCl8MCk+PjBdfGNyW1RBKzE+PjBdPDw4KSl9aWYoKDB8SEEpPD0oMHxpKSl7bj00MTticmVhayBBfWlmKGk9UEErKDMqKE9BK2l8MCl8MCl8MCxTQT0obj1VQT8xOjA9PSgxMDI0Jihjclsobj1QQSsoMyp4QXwwKXwwKT4+MF18Y3JbbisxPj4wXTw8OCkpKSYwPT0oMjA0OCYoY3JbKFNBPVBBKygzKnhBfDApfDApPj4wXXxjcltTQSsxPj4wXTw8OCkpLE9BPTAtTEF8MCxUQSYwPT0oMjA0OCYoY3JbaT4+MF18Y3JbaSsxPj4wXTw8OCkpKWZvcihuPTA7OylpZihpPURBKyhuPDwxKXwwLFBBPTB8bHJbUUErKG48PDEpPj4xXSxQQT0oVEE9KDB8KFRBPTQrKDB8bHJbOCtRQSsobjw8MSk+PjFdKSsoKDB8bHJbaT4+MV0pLVBBPDwyKS0oMHxscltEQSs4KyhuPDwxKT4+MV0pPj4zKSk8KDB8T0EpP09BOigwfExBKTwoMHxUQSk/TEE6VEEpK1BBfDAsVUE9MHxicihuLFZBKSxvclskQSsoVUErLTE8PDEpPj4xXT0oMHxQQSk8MD8wOjY1NTM1JigoMHxQQSk8KDB8Vik/UEE6RiksU0EmJihQQT0oMHxscltpPj4xXSktVEF8MCxvclskQSsoVUE8PDEpPj4xXT0oMHxQQSk8MD8wOjY1NTM1JigoMHxQQSk8KDB8Vik/UEE6RikpLDQ9PSgwfChuPW4rMXwwKSkpYnJlYWsgZTtpZihuPTB8bHJbREE+PjFdLGk9NCsoMHxsclskPj4xXSkrKG4tKDB8bHJbUUE+PjFdKTw8MiktKDB8bHJbQUE+PjFdKT4+MyxTQSYmKFBBPW4tKCgwfGkpPCgwfE9BKT9PQTooMHxMQSk8KDB8aSk/TEE6aSl8MCxvclskQT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbZUE+PjFdLGk9NCsoMHxscltpQT4+MV0pKyhuLSgwfGxyW3JBPj4xXSk8PDIpLSgwfGxyW2ZBPj4xXSk+PjMsU0EmJihQQT1uLSgoMHxpKTwoMHxPQSk/T0E6KDB8TEEpPCgwfGkpP0xBOmkpfDAsb3JbJEErKFZBPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbbkE+PjFdLGk9NCsoMHxscltvQT4+MV0pKyhuLSgwfGxyW3RBPj4xXSk8PDIpLSgwfGxyW2FBPj4xXSk+PjMsU0EmJihQQT1uLSgoMHxpKTwoMHxPQSk/T0E6KDB8TEEpPCgwfGkpP0xBOmkpfDAsb3JbJEErKGNBPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSxuPTB8bHJbbEE+PjFdLGk9NCsoMHxscltiQT4+MV0pKyhuLSgwfGxyW3VBPj4xXSk8PDIpLSgwfGxyW3NBPj4xXSk+PjMsIVNBKWJyZWFrO0xBPW4tKCgwfGkpPCgwfE9BKT9PQTooMHxMQSk8KDB8aSk/TEE6aSl8MCxvclskQSsoZEE8PDEpPj4xXT0oMHxMQSk8MD8wOjY1NTM1JigoMHxMQSk8KDB8Vik/TEE6Ril9ZWxzZXtpZihuPS0xPCgwfChpPWNlPj5TQSkpLFVBKXtpZighbil7bj01NzticmVhayBBfVRBPTF9ZWxzZXtpZighKG4mKDB8aSk8KDB8akEpKSl7bj01MzticmVhayBBfVRBPVBBKygzKigoMHxicihIQSxpKSkrekF8MCl8MCl8MCxUQT0wPT0oMTAyNCYoY3JbVEE+PjBdfGNyW1RBKzE+PjBdPDw4KSl9aWYoKDB8akEpPD0oMHxpKSl7bj01NzticmVhayBBfWlmKGk9UEErKDMqKCgwfGJyKEhBLGkpKSt6QXwwKXwwKXwwLFVBPShuPVVBPzE6MD09KDEwMjQmKGNyWyhuPVBBKygzKnhBfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsoVUE9UEErKDMqeEF8MCl8MCk+PjBdfGNyW1VBKzE+PjBdPDw4KSksU0E9MC1MQXwwLCEoVEEmMD09KDIwNDgmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKSkpe2lmKCFVQSlicmVhazt4QT0oUEE9MHxscltEQT4+MV0pLSgoMHwoeEE9NCsoMHxscltrQT4+MV0pKyhQQS0oMHxscltRQT4+MV0pPDwyKS0oMHxscltoQT4+MV0pPj4zKSk8KDB8U0EpP1NBOigwfExBKTwoMHx4QSk/TEE6eEEpfDAsb3JbJEE+PjFdPSgwfHhBKTwwPzA6NjU1MzUmKCgwfHhBKTwoMHxWKT94QTpGKSxQQT0oeEE9MHxsclt3QT4+MV0pLSgoMHwoUEE9NCsoMHxsclttQT4+MV0pKyh4QS0oMHxsclt2QT4+MV0pPDwyKS0oMHxscltnQT4+MV0pPj4zKSk8KDB8U0EpP1NBOigwfExBKTwoMHxQQSk/TEE6UEEpfDAsb3JbJEErMj4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpLHhBPShQQT0wfGxyW1pBPj4xXSktKCgwfCh4QT00KygwfGxyW3lBPj4xXSkrKFBBLSgwfGxyW3BBPj4xXSk8PDIpLSgwfGxyW0JBPj4xXSk+PjMpKTwoMHxTQSk/U0E6KDB8TEEpPCgwfHhBKT9MQTp4QSl8MCxvclskQSs0Pj4xXT0oMHx4QSk8MD8wOjY1NTM1JigoMHx4QSk8KDB8Vik/eEE6RiksTEE9KHhBPTB8bHJbRUE+PjFdKS0oKDB8KFBBPTQrKDB8bHJbV0E+PjFdKSsoeEEtKDB8bHJbWEE+PjFdKTw8MiktKDB8bHJbSUE+PjFdKT4+MykpPCgwfFNBKT9TQTooMHxMQSk8KDB8UEEpP0xBOlBBKXwwLG9yWyRBKzY+PjFdPSgwfExBKTwwPzA6NjU1MzUmKCgwfExBKTwoMHxWKT9MQTpGKTticmVha31mb3Iobj0wO2k9REErKG48PDEpfDAsUEE9MHxscltRQSsobjw8MSk+PjFdLFBBPShUQT0oMHwoVEE9NCsoMHxscls4K1FBKyhuPDwxKT4+MV0pKygoMHxscltpPj4xXSktUEE8PDIpLSgwfGxyW0RBKzgrKG48PDEpPj4xXSk+PjMpKTwoMHxTQSk/U0E6KDB8TEEpPCgwfFRBKT9MQTpUQSkrUEF8MCxvclskQSsobi1WQTw8MSk+PjFdPSgwfFBBKTwwPzA6NjU1MzUmKCgwfFBBKTwoMHxWKT9QQTpGKSxVQSYmKFBBPSgwfGxyW2k+PjFdKS1UQXwwLG9yWyRBKyhuPDwxKT4+MV09KDB8UEEpPDA/MDo2NTUzNSYoKDB8UEEpPCgwfFYpP1BBOkYpKSw0IT0oMHwobj1uKzF8MCkpOyk7fX13aGlsZSgwKX13aGlsZSgoMHxLQSk8Mil9QWU9QWUrUkF8MH13aGlsZSgoMHxBZSk8KDB8dWUpKX1pZigoMHxsZSk8PSgwfChyPXIrTkF8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1NQSk7Y2FzZSAxNDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTc6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE5OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyMTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDMzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNzpjYXNlIDQxOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA1MzpjYXNlIDU3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBYdChBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGosSCx4LFAsTCxLLHEsJCxBQSxlQSxyQSxpQSxmQSxuQSx0QSxvQSxhQSxjQSxsQSx1QSxiQSxzQSxkQSxrQSxoQSx3QSx2QSxtQSxnQSxaQSxwQSx5QSxCQSxFQSxYQSxXQSxJQSxDQSxHQSxWQSxGQSxSQSxOQSxfQSxZQSxRQSxEQSxKQSxNQSxUQSxVQSxTQSxPQSx6QSxqQSxIQSx4QSxQQSxMQSxLQSxxQSwkQSxBZSxlZSxyZSxpZSxmZSxuZSx0ZSxvZSxhZSxjZSxsZSx1ZSxiZSxzZSxkZSxrZSxoZSx3ZSx2ZSxtZSxnZSxaZSxwZT0wLHllPTAsQmU9MCxFZT0wLFhlPTAsV2U9MCxJZT0wLENlPTAsR2U9MCxWZT0wLEZlPTAsUmU9MCxOZT0wLF9lPTAsWWU9MCxRZT0wLERlPTAsSmU9MCxNZT0wLFRlPTAsVWU9MCxTZT0wLE9lPTAsemU9MCxqZT0wLEhlPTA7aWYodXI9KFplPXVyKSsxNnwwLHZlPVplKzh8MCxtZT1aZSxnZT0wfGFyWyhBfD0wKSs1NzgwPj4yXSxzZT0wfGFyW0ErNTc4ND4+Ml0sZGU9MHxicihnZSxlPzI6MSksa2U9MHxicihzZSxlPzE6MiksYmU9MHxhclsoaGU9QSs0NHwwKT4+Ml0sSGU9KDB8bik8KDB8KEhlPTB8YXJbKHdlPUErMTA0NzJ8MCk+PjJdKSk/bjpIZSxPPUErNTc2OHwwLCgwfChqZT0oMHxpKTwoMHwoamU9MHxhcltBKzEwNDc2Pj4yXSkpP2k6amUpKTw9KDB8cikpdXI9WmU7ZWxzZXt6PSgwfGYpPCgwfEhlKSxqPTMtZ2V8MCxIPTMtc2V8MCx4PUErMTA0NjB8MCxQPUErNTk1NnwwLEw9QSs1OTUyfDAsSz1BKzEwMzY4fDAscT1BKzEwMzcyfDAsJD1BKzEwMzc2fDAsQUE9QSsxMDM2MHwwLGVBPUErNTc3NnwwLHJBPUErMTAzNDh8MCxpQT1BKzEwMzUyfDAsZkE9QSsxMDM1NnwwLG5BPUErMTAzNDB8MCx0QT1BKzQ4fDAsb0E9QSs1NDgwfDAsY0E9MjU1KyhhQT0xPDxhcltPPj4yXSl8MCxsQT0wLWJlfDAsa0E9KHNBPWJlPDwxKS0xfDAsdkE9KGhBPTMqYmV8MCktMXwwLGdBPTErYmV8MCxwQT1iZS0yfDAseUE9MXxzQSxFQT1zQS0yfDAsWEE9MStoQXwwLElBPWhBLTJ8MCxfQT1iQT1iZS0xfDAsVEE9KE1BPWJlPDwxKS0xfDAsSEE9KGpBPTMqYmV8MCktMXwwLGZlPWJlPDwxLGNlPTMqYmV8MCxtPTEtYmV8MCxCPTItYmV8MCxDPTMtYmV8MCxGPWs9TEE9VkE9dUE9bWUrMXwwLFI9aD1LQT1GQT10PTErdmV8MCxOPXc9cUE9UkE9bz01K3ZlfDAsXz12PSRBPU5BPVpBPW1lKzV8MCxZPWc9QWU9WUE9ZEE9bWUrMnwwLFE9Wj1lZT1RQT1jPTIrdmV8MCxEPXA9cmU9REE9bD02K3ZlfDAsSj15PWllPUpBPUJBPW1lKzZ8MCxNPUU9bmU9VUE9d0E9bWUrM3wwLFQ9WD10ZT1TQT11PTMrdmV8MCxVPVc9b2U9T0E9Yj03K3ZlfDAsUz1JPWFlPXpBPVdBPW1lKzd8MCx1ZT1HPXM9eEE9Q0E9YT00K3ZlfDAsbGU9Vj1kPVBBPUdBPW1BPW1lKzR8MDtBOmZvcig7Oyl7aWYoeil7VGU9KDB8KE1lPTB8YnIoSmU9cjw8SCxzZSkpKS80fDAsVWU9TWUrLTF8MCxEZT1lP01lOlVlLFllPWY7ZG97aWYoT2U9MHxicihTZT1ZZTw8aixnZSksbj0oMHxicigwfGFyW3dlPj4yXSxUZSkpKygoMHxPZSkvNHwwKXwwLDE8KDI1NSYobj0zJnRyWygwfGFyW3g+PjJdKStuPj4wXSkpKXt6ZT1PZSstMXwwLFFlPWU/emU6T2UsUmU9KG48PDEmMjU1KS0yfDAsTmU9U2UtYmV8MCxGZT0wO2Rve2lmKHllPTB8YXJbKDA9PSgwfEZlKT9MOlApPj4yXSxfZT0obj0wfGFyW0ErNCsoKEZlPUZlKzF8MCk8PDIpPj4yXSkrKHBlPShpPTB8YnIoMHxhcltoZT4+Ml0sSmUpKStTZXwwKXwwLGU/KHRyW21lPj4wXT0wfHRyW19lPj4wXSx0clt2ZT4+MF09MHx0cltfZSstMT4+MF0sdHJbdUE+PjBdPTB8dHJbX2UrYmU+PjBdLHRyW3Q+PjBdPTB8dHJbX2UrYkE+PjBdLHRyW2RBPj4wXT0wfHRyW19lK3NBPj4wXSx0cltjPj4wXT0wfHRyW19lK2tBPj4wXSx0clt3QT4+MF09MHx0cltfZStoQT4+MF0sdHJbdT4+MF09MHx0cltfZSt2QT4+MF0sdHJbbUE+PjBdPTB8dHJbX2UrMT4+MF0sdHJbYT4+MF09MHx0cltfZSstMj4+MF0sdHJbWkE+PjBdPTB8dHJbX2UrZ0E+PjBdLHRyW28+PjBdPTB8dHJbX2UrcEE+PjBdLHRyW0JBPj4wXT0wfHRyW19lK3lBPj4wXSx0cltsPj4wXT0wfHRyW19lK0VBPj4wXSx0cltXQT4+MF09MHx0cltfZStYQT4+MF0sdHJbYj4+MF09MHx0cltfZStJQT4+MF0pOihHZT1uKyhWZT1OZStpfDApfDAsYXJbbWU+PjJdPWNyW19lPj4wXXxjcltfZSsxPj4wXTw8OHxjcltfZSsyPj4wXTw8MTZ8Y3JbX2UrMz4+MF08PDI0LGFyW3ZlPj4yXT1jcltHZT4+MF18Y3JbR2UrMT4+MF08PDh8Y3JbR2UrMj4+MF08PDE2fGNyW0dlKzM+PjBdPDwyNCxWZT1uKyhWZS1iZSl8MCxHZT1uKyhwZStiZSl8MCxhcltsZT4+Ml09Y3JbR2U+PjBdfGNyW0dlKzE+PjBdPDw4fGNyW0dlKzI+PjBdPDwxNnxjcltHZSszPj4wXTw8MjQsYXJbdWU+PjJdPWNyW1ZlPj4wXXxjcltWZSsxPj4wXTw8OHxjcltWZSsyPj4wXTw8MTZ8Y3JbVmUrMz4+MF08PDI0KSxuPU1lPj4oQmU9MHxhcltLPj4yXSksKDB8KFhlPU9lPj5CZSkpPD0tMSl7bj0xNDticmVhayBBfWlmKCgwfChJZT0wfGFyW3E+PjJdKSk8PSgwfFhlKSl7bj0xNDticmVhayBBfWlmKCgwfG4pPD0tMSl7bj0xNzticmVhayBBfWlmKCgwfChXZT0wfGFyWyQ+PjJdKSk8PSgwfG4pKXtuPTE3O2JyZWFrIEF9aWYoR2U9MHxhcltBQT4+Ml0sQ2U9KEVlPTB8YnIoSWUsbikpK1hlfDAsaT1EZT4+QmUsISgtMTwoMHwobj1RZT4+QmUpKSYoMHxuKTwoMHxJZSkpKXtuPTE5O2JyZWFrIEF9aWYoISgtMTwoMHxpKSYoMHxpKTwoMHxXZSkpKXtuPTIxO2JyZWFrIEF9bj1HZSsoMyooKDB8YnIoSWUsaSkpK258MCl8MCkrMnwwLG49KDErKDB8dHJbR2UrKDMqQ2V8MCkrMj4+MF0pKygwfHRyW24+PjBdKT4+MSkreWV8MDtkb3tpZigxPT0oMHxhcltlQT4+Ml0pKXtpZigzMDw9KDB8bikpe2lmKDQyPCgwfG4pKXtuPW4rLTZ8MDticmVha31uPTB8YXJbODAyMCsobistMzA8PDIpPj4yXTticmVha319ZWxzZSBuPSgwfG4pPDUxP246NTF9d2hpbGUoMCk7aWYoaT1PZT4+KHBlPTB8YXJbckE+PjJdKSxwZT1NZT4+cGUsKDB8aSk8PS0xKXtuPTMwO2JyZWFrIEF9aWYoKDB8KHllPTB8YXJbaUE+PjJdKSk8PSgwfGkpKXtuPTMwO2JyZWFrIEF9aWYoKDB8cGUpPD0tMSl7bj0zMzticmVhayBBfWlmKCgwfHBlKT49KDB8YXJbZkE+PjJdKSl7bj0zMzticmVhayBBfVZlPSgwfGFyW25BPj4yXSkrKDI0KigoMHxicih5ZSxwZSkpK2l8MCl8MCkrMnwwLFZlPVJlK24rKDB8YXJbNzYwKygwfGFyWygwfGFyW3RBPj4yXSkrKGxyW1ZlPj4xXTw8Mik+PjJdKT4+Ml0pfDAsVmU9Y3JbNDgxMDArKCgwfFZlKTwwPzA6KDB8VmUpPDUzP1ZlOjUzKT4+MF08PCgwfGFyW08+PjJdKS04LHBlPTA9PSgwfHRyW29BPj4wXSk7ZG97aWYoZSl7aWYobj0tMTwoMHwoaT16ZT4+QmUpKSxwZSl7aWYoIW4pe249NDE7YnJlYWsgQX1CZT0xfWVsc2V7aWYoIShuJigwfGkpPCgwfEllKSkpe249Mzc7YnJlYWsgQX1CZT0wPT0oMTAyNCYoY3JbKEJlPUdlKygzKihFZStpfDApfDApfDApPj4wXXxjcltCZSsxPj4wXTw8OCkpfWlmKCgwfEllKTw9KDB8aSkpe249NDE7YnJlYWsgQX1pZih5ZT1HZSsoMyooRWUraXwwKXwwKXwwLHBlPShuPXBlPzE6MD09KDEwMjQmKGNyWyhuPUdlKygzKkNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsocGU9R2UrKDMqQ2V8MCl8MCk+PjBdfGNyW3BlKzE+PjBdPDw4KSksaT0wLVZlfDAsIShCZSYwPT0oMjA0OCYoY3JbeWU+PjBdfGNyW3llKzE+PjBdPDw4KSkpKXtpZighcGUpYnJlYWs7Q2U9KEdlPTB8Y3JbbWU+PjBdKS0oKDB8KENlPTQrKDB8Y3JbeEE+PjBdKSsoR2UtKDB8Y3JbdmU+PjBdKTw8MiktKDB8Y3JbUEE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfENlKT9WZTpDZSl8MCx0cltfZT4+MF09KDB8Q2UpPDA/MDoyNTUmKCgwfENlKTwoMHxhQSk/Q2U6Y0EpLEdlPShDZT0wfGNyW0xBPj4wXSktKCgwfChHZT00KygwfGNyW3FBPj4wXSkrKENlLSgwfGNyW0tBPj4wXSk8PDIpLSgwfGNyWyRBPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxHZSk/VmU6R2UpfDAsdHJbX2UrYmU+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxDZT0oR2U9MHxjcltBZT4+MF0pLSgoMHwoQ2U9NCsoMHxjcltyZT4+MF0pKyhHZS0oMHxjcltlZT4+MF0pPDwyKS0oMHxjcltpZT4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8Q2UpP1ZlOkNlKXwwLHRyW19lK2ZlPj4wXT0oMHxDZSk8MD8wOjI1NSYoKDB8Q2UpPCgwfGFBKT9DZTpjQSksVmU9KENlPTB8Y3JbbmU+PjBdKS0oKDB8KEdlPTQrKDB8Y3Jbb2U+PjBdKSsoQ2UtKDB8Y3JbdGU+PjBdKTw8MiktKDB8Y3JbYWU+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfEdlKT9WZTpHZSl8MCx0cltfZStjZT4+MF09KDB8VmUpPDA/MDoyNTUmKCgwfFZlKTwoMHxhQSk/VmU6Y0EpO2JyZWFrfWlmKEdlPTB8Y3JbdmU+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbQ0E+PjBdKSsoKDB8Y3JbbWU+PjBdKS1HZTw8MiktKDB8Y3JbR0E+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrLTE+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW21lPj4wXSktbnwwLHRyW19lPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbRkE+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbUkE+PjBdKSsoKDB8Y3JbVkE+PjBdKS1HZTw8MiktKDB8Y3JbTkE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrX0E+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW1ZBPj4wXSktbnwwLHRyW19lK2JlPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbUUE+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbREE+PjBdKSsoKDB8Y3JbWUE+PjBdKS1HZTw8MiktKDB8Y3JbSkE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrVEE+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW1lBPj4wXSktbnwwLHRyW19lK01BPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbU0E+PjBdLFZlPShuPSgwfChuPTQrKDB8Y3JbT0E+PjBdKSsoKDB8Y3JbVUE+PjBdKS1HZTw8MiktKDB8Y3JbekE+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrSEE+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKSwhcGUpYnJlYWs7VmU9KDB8Y3JbVUE+PjBdKS1ufDAsdHJbX2UrakE+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKX1lbHNle2lmKG49LTE8KDB8KGk9VWU+PkJlKSkscGUpe2lmKCFuKXtuPTU2O2JyZWFrIEF9QmU9MX1lbHNle2lmKCEobiYoMHxpKTwoMHxXZSkpKXtuPTUyO2JyZWFrIEF9QmU9R2UrKDMqKCgwfGJyKEllLGkpKStYZXwwKXwwKXwwLEJlPTA9PSgxMDI0JihjcltCZT4+MF18Y3JbQmUrMT4+MF08PDgpKX1pZigoMHxXZSk8PSgwfGkpKXtuPTU2O2JyZWFrIEF9aWYoeWU9R2UrKDMqKCgwfGJyKEllLGkpKStYZXwwKXwwKXwwLHBlPShuPXBlPzE6MD09KDEwMjQmKGNyWyhuPUdlKygzKkNlfDApfDApPj4wXXxjcltuKzE+PjBdPDw4KSkpJjA9PSgyMDQ4JihjclsocGU9R2UrKDMqQ2V8MCl8MCk+PjBdfGNyW3BlKzE+PjBdPDw4KSksaT0wLVZlfDAsIShCZSYwPT0oMjA0OCYoY3JbeWU+PjBdfGNyW3llKzE+PjBdPDw4KSkpKXtpZighcGUpYnJlYWs7Q2U9KEdlPTB8Y3JbbWU+PjBdKS0oKDB8KENlPTQrKDB8Y3JbRz4+MF0pKyhHZS0oMHxjclt2ZT4+MF0pPDwyKS0oMHxjcltWPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxDZSk/VmU6Q2UpfDAsdHJbX2U+PjBdPSgwfENlKTwwPzA6MjU1JigoMHxDZSk8KDB8YUEpP0NlOmNBKSxHZT0oQ2U9MHxjcltGPj4wXSktKCgwfChHZT00KygwfGNyW04+PjBdKSsoQ2UtKDB8Y3JbUj4+MF0pPDwyKS0oMHxjcltfPj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxHZSk/VmU6R2UpfDAsdHJbX2UrMT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLENlPShHZT0wfGNyW1k+PjBdKS0oKDB8KENlPTQrKDB8Y3JbRD4+MF0pKyhHZS0oMHxjcltRPj4wXSk8PDIpLSgwfGNyW0o+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfENlKT9WZTpDZSl8MCx0cltfZSsyPj4wXT0oMHxDZSk8MD8wOjI1NSYoKDB8Q2UpPCgwfGFBKT9DZTpjQSksVmU9KENlPTB8Y3JbTT4+MF0pLSgoMHwoR2U9NCsoMHxjcltVPj4wXSkrKENlLSgwfGNyW1Q+PjBdKTw8MiktKDB8Y3JbUz4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8R2UpP1ZlOkdlKXwwLHRyW19lKzM+PjBdPSgwfFZlKTwwPzA6MjU1JigoMHxWZSk8KDB8YUEpP1ZlOmNBKTticmVha31pZihHZT0wfGNyW3ZlPj4wXSxHZT0obj0oMHwobj00KygwfGNyW3M+PjBdKSsoKDB8Y3JbbWU+PjBdKS1HZTw8MiktKDB8Y3JbZD4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8bik/VmU6bikrR2V8MCx0cltfZStsQT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLHBlJiYoR2U9KDB8Y3JbbWU+PjBdKS1ufDAsdHJbX2U+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSksR2U9MHxjcltoPj4wXSxHZT0obj0oMHwobj00KygwfGNyW3c+PjBdKSsoKDB8Y3Jbaz4+MF0pLUdlPDwyKS0oMHxjclt2Pj4wXSk+PjMpKTwoMHxpKT9pOigwfFZlKTwoMHxuKT9WZTpuKStHZXwwLHRyW19lK20+PjBdPSgwfEdlKTwwPzA6MjU1JigoMHxHZSk8KDB8YUEpP0dlOmNBKSxwZSYmKEdlPSgwfGNyW2s+PjBdKS1ufDAsdHJbX2UrMT4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpKSxHZT0wfGNyW1o+PjBdLEdlPShuPSgwfChuPTQrKDB8Y3JbcD4+MF0pKygoMHxjcltnPj4wXSktR2U8PDIpLSgwfGNyW3k+PjBdKT4+MykpPCgwfGkpP2k6KDB8VmUpPCgwfG4pP1ZlOm4pK0dlfDAsdHJbX2UrQj4+MF09KDB8R2UpPDA/MDoyNTUmKCgwfEdlKTwoMHxhQSk/R2U6Y0EpLHBlJiYoR2U9KDB8Y3JbZz4+MF0pLW58MCx0cltfZSsyPj4wXT0oMHxHZSk8MD8wOjI1NSYoKDB8R2UpPCgwfGFBKT9HZTpjQSkpLEdlPTB8Y3JbWD4+MF0sVmU9KG49KDB8KG49NCsoMHxjcltXPj4wXSkrKCgwfGNyW0U+PjBdKS1HZTw8MiktKDB8Y3JbST4+MF0pPj4zKSk8KDB8aSk/aTooMHxWZSk8KDB8bik/VmU6bikrR2V8MCx0cltfZStDPj4wXT0oMHxWZSk8MD8wOjI1NSYoKDB8VmUpPCgwfGFBKT9WZTpjQSksIXBlKWJyZWFrO1ZlPSgwfGNyW0U+PjBdKS1ufDAsdHJbX2UrMz4+MF09KDB8VmUpPDA/MDoyNTUmKCgwfFZlKTwoMHxhQSk/VmU6Y0EpfX13aGlsZSgwKX13aGlsZSgoMHxGZSk8Mil9WWU9WWUrZGV8MH13aGlsZSgoMHxZZSk8KDB8SGUpKX1pZigoMHxqZSk8PSgwfChyPXIra2V8MCkpKXtuPTU7YnJlYWt9fXN3aXRjaCgwfG4pe2Nhc2UgNTpyZXR1cm4gdm9pZCh1cj1aZSk7Y2FzZSAxNDpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTc6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDE5OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSAyMTpzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2JyZWFrO2Nhc2UgMzA6c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTticmVhaztjYXNlIDMzOnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSAzNzpjYXNlIDQxOnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA1MjpjYXNlIDU2OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1mdW5jdGlvbiBXdChBLGUscixpLGYsbix0KXtyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2ZvcigoMHwobD0oZXw9MCk+Pih1PTB8YXJbKGQ9KEF8PTApKzEwNDQ4fDApPj4yXSkpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksbz1BKzEwNDUyfDAsYT1BKzEwNDU2fDAsYz1BKzEwNDQwfDAsdj1lLGI9aSxzPW4saD10LGk9KHc9cik+PnU7Oyl7aWYoKDB8KGU9MHxhcltvPj4yXSkpPD0oMHxsKSl7ZT00O2JyZWFrfWlmKCgwfGkpPD0tMSl7ZT03O2JyZWFrfWlmKCgwfGkpPj0oMHxhclthPj4yXSkpe2U9NzticmVha31pZih1PSgwfGFyW2M+PjJdKSsoKDB8YnIoZSxpKSkrbCl8MCxrPTE8PGIsISgoMHxjclt1Pj4wXSkmMTw8Zikpe2U9OTticmVha31pZihpPShuPWs+PjEpK3Z8MCxuPW4rd3wwLFd0KEEsdix3LGU9YistMXwwLGY9ZisxfDAscyxoKSxXdChBLGksdyxlLGYsMTYsaCksV3QoQSx2LG4sZSxmLHMsMzIpLCgwfChsPWk+Pih0PTB8YXJbZD4+Ml0pKSk8PS0xKXtlPTQ7YnJlYWt9dj1pLGI9ZSxzPTE2LGg9MzIsaT0odz1uKT4+dH1pZig0PT0oMHxlKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNz09KDB8ZSkpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDk9PSgwfGUpKXtpZihiPTMxPT0oMHxiKSlyZXR1cm47Zm9yKGk9MjU1JnMsZj0oMHx2KS80fDAsbj1BKzEwNDcyfDAsdD1BKzEwNDc2fDAsbD1BKzEwNDYwfDAsZT0wO3I9KGUrd3wwKS80fDAsKDB8Zik8KDB8KHU9MHxhcltuPj4yXSkpJiYoMHxyKTwoMHxhclt0Pj4yXSkmJihkPSgwfGJyKHUscikpK2Z8MCxkPSgwfGFyW2w+PjJdKStkfDAsdHJbZD4+MF09dHJbZD4+MF18aSksKDB8KGU9ZSs0fDApKTwoMHxrKTspO2lmKGIpcmV0dXJuO2Zvcih1PTI1NSZoLHQ9KDB8dykvNHwwLGw9QSsxMDQ3MnwwLHI9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGU9MDsoMHwoZj0oZSt2fDApLzR8MCkpPCgwfChuPTB8YXJbbD4+Ml0pKSYmKDB8dCk8KDB8YXJbcj4+Ml0pJiYoQT0oMHxicihuLHQpKStmfDAsQT0oMHxhcltpPj4yXSkrQXwwLHRyW0E+PjBdPXRyW0E+PjBdfHUpLCgwfChlPWUrNHwwKSk8KDB8ayk7KTtyZXR1cm59fWZ1bmN0aW9uIEl0KEEsZSxyLGksZixuKXtyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTA7c3dpdGNoKG49KGV8PTApPj4obz0wfGFyWyhBfD0wKSsxMDM2OD4+Ml0pLG89cj4+bywoMHxuKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGY9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxuKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW0ErMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx1PSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZixvKSkrbnwwKXwwKXwwLHQ9MTw8aSxuPTE8PGkrLTEsZj0xPDxpKy0yLCg2NTUzNSYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCkpPj4+MyY3KXtjYXNlIDM6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYz0obitlfDApLzR8MCxsPUErMTA0NzJ8MCx1PUErMTA0NzZ8MCxhPUErMTA0NjB8MCxpPShuK3J8MCkvNHwwLG89MDtmPShvK3J8MCkvNHwwLCgwfGMpPCgwfChuPTB8YXJbbD4+Ml0pKSYmKDB8Zik8KDB8YXJbdT4+Ml0pJiYobj0oMHxicihuLGYpKStjfDAsbj0oMHxhclthPj4yXSkrbnwwLHRyW24+PjBdPTY0fHRyW24+PjBdLG49MHxhcltsPj4yXSksKDB8KGY9KG8rZXwwKS80fDApKTwoMHxuKSYmKDB8aSk8KDB8YXJbdT4+Ml0pJiYoQT0oMHxicihuLGkpKStmfDAsQT0oMHxhclthPj4yXSkrQXwwLHRyW0E+PjBdPS0xMjh8dHJbQT4+MF0pLCgwfChvPW8rMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSAyOmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rZXwwKS80fDAsYz1BKzEwNDcyfDAsbD1BKzEwNDc2fDAsaT1BKzEwNDYwfDAsZj0wO249KGYrcnwwKS80fDAsKDB8YSk8KDB8KG89MHxhcltjPj4yXSkpJiYoMHxuKTwoMHxhcltsPj4yXSkmJihlPSgwfGJyKG8sbikpK2F8MCxlPSgwfGFyW2k+PjJdKStlfDAsdHJbZT4+MF09NjR8dHJbZT4+MF0pLCgwfChmPWYrMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSAxOmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rcnwwKS80fDAsYz1BKzEwNDcyfDAsbD1BKzEwNDc2fDAsaT1BKzEwNDYwfDAsZj0wOygwfChuPShmK2V8MCkvNHwwKSk8KDB8KG89MHxhcltjPj4yXSkpJiYoMHxhKTwoMHxhcltsPj4yXSkmJihyPSgwfGJyKG8sYSkpK258MCxyPSgwfGFyW2k+PjJdKStyfDAsdHJbcj4+MF09LTEyOHx0cltyPj4wXSksKDB8KGY9ZisxfDApKTwoMHx0KTspO3JldHVybjtjYXNlIDY6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYT0oZitlfDApLzR8MCxjPUErMTA0NzJ8MCxsPUErMTA0NzZ8MCxpPUErMTA0NjB8MCxmPTA7bj0oZityfDApLzR8MCwoMHxhKTwoMHwobz0wfGFyW2M+PjJdKSkmJigwfG4pPCgwfGFyW2w+PjJdKSYmKGU9KDB8YnIobyxuKSkrYXwwLGU9KDB8YXJbaT4+Ml0pK2V8MCx0cltlPj4wXT02NHx0cltlPj4wXSksKDB8KGY9ZisxfDApKTwoMHx0KTspO3JldHVybjtjYXNlIDc6aWYoMzE9PSgwfGkpKXJldHVybjtmb3IoYT0obitlK2Z8MCkvNHwwLGM9QSsxMDQ3MnwwLGw9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGY9MDtuPShmK3J8MCkvNHwwLCgwfGEpPCgwfChvPTB8YXJbYz4+Ml0pKSYmKDB8bik8KDB8YXJbbD4+Ml0pJiYoZT0oMHxicihvLG4pKSthfDAsZT0oMHxhcltpPj4yXSkrZXwwLHRyW2U+PjBdPTY0fHRyW2U+PjBdKSwoMHwoZj1mKzF8MCkpPCgwfHQpOyk7cmV0dXJuO2Nhc2UgNDppZigzMT09KDB8aSkpcmV0dXJuO2ZvcihhPShmK3J8MCkvNHwwLGM9QSsxMDQ3MnwwLGw9QSsxMDQ3NnwwLGk9QSsxMDQ2MHwwLGY9MDsoMHwobj0oZitlfDApLzR8MCkpPCgwfChvPTB8YXJbYz4+Ml0pKSYmKDB8YSk8KDB8YXJbbD4+Ml0pJiYocj0oMHxicihvLGEpKStufDAscj0oMHxhcltpPj4yXSkrcnwwLHRyW3I+PjBdPS0xMjh8dHJbcj4+MF0pLCgwfChmPWYrMXwwKSk8KDB8dCk7KTtyZXR1cm47Y2FzZSA1OmlmKDMxPT0oMHxpKSlyZXR1cm47Zm9yKGE9KG4rcitmfDApLzR8MCxjPUErMTA0NzJ8MCxsPUErMTA0NzZ8MCxpPUErMTA0NjB8MCxmPTA7KDB8KG49KGYrZXwwKS80fDApKTwoMHwobz0wfGFyW2M+PjJdKSkmJigwfGEpPCgwfGFyW2w+PjJdKSYmKHI9KDB8YnIobyxhKSkrbnwwLHI9KDB8YXJbaT4+Ml0pK3J8MCx0cltyPj4wXT0tMTI4fHRyW3I+PjBdKSwoMHwoZj1mKzF8MCkpPCgwfHQpOyk7cmV0dXJuO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBDdChBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTAsdHw9MDt2YXIgbz0wLGE9MCxjPTA7cmV0dXJuIHQ9KDB8KGM9KGZ8PTApPyhmPWUrLTE+PihvPTB8YXJbdCsxMDM2OD4+Ml0pLG89cj4+bywoMHxmKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGE9MHxhclt0KzEwMzcyPj4yXSkpPD0oMHxmKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW3QrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxjPSgwfGFyW3QrMTAzNjA+PjJdKSsoMyooKDB8YnIoYSxvKSkrZnwwKXwwKXwwLDE3OTImKGNyW2M+PjBdfGNyW2MrMT4+MF08PDgpPzE6MHxjclsoMHxhclt0KzEwNDAwPj4yXSkrKGkrLTEpPj4wXSk6MSkpIT0oMHwoZj1uPyhmPWU+PihvPTB8YXJbdCsxMDM2OD4+Ml0pLG89cistMT4+bywoMHxmKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGE9MHxhclt0KzEwMzcyPj4yXSkpPD0oMHxmKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxvKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8byk+PSgwfGFyW3QrMTAzNzY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxuPSgwfGFyW3QrMTAzNjA+PjJdKSsoMyooKDB8YnIoYSxvKSkrZnwwKXwwKXwwLDA9PSgxNzkyJihjcltuPj4wXXxjcltuKzE+PjBdPDw4KSkmJihyPj4obj0wfGFyW3QrNTgwND4+Ml0pPDxufDApPCgwfHIpPzB8Y3JbKDB8YXJbdCsxMDQwMD4+Ml0pKyhpLSgwfGFyW3QrNTg3Nj4+Ml0pKT4+MF06MSk6MSkpPzAhPSgwfChhcltBPj4yXT1jKSkmMCE9KDB8KGFyW0ErND4+Ml09ZikpPzA6MSE9KDB8YykmMSE9KDB8Zik/MToyNjpjPj4+MDwyPyhhcltBPj4yXT0wLGFyW0ErND4+Ml09MSwyNik6KGFyW0E+PjJdPWMsYXJbQSs0Pj4yXT0yKyhjKzI5JjMxKSwyKygoYystMXwwKSUzMnwwKXwwKSx2b2lkKGFyWyhBPUErOHwwKT4+Ml09dCl9ZnVuY3Rpb24gR3QoQSxlLHIsaSxmLG4pe3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsODwoMHxhclsoMD09KDB8KG58PTApKT9BKzU3NjB8MDpBKzU3Njh8MCk+PjJdKT92b2lkIGZ1bmN0aW9uKEEsZSxyLGksZixuKXtpfD0wO3ZhciB0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO3VyPShvPXVyKSsyNzJ8MCxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wO3VyPShtPXVyKSsxNDR8MCx2PShoPW0pKzY0fDAsdz0wfGFyWzQrKEF8PTApKygoZnw9MCk8PDIpPj4yXSxjPTB8YXJbKChmPTA9PSgwfGYpKT9BKzQwfDA6QSs0NHwwKT4+Ml0sTD1mP3E9MToocT0wfGFyW0ErNTc4MD4+Ml0sMHxhcltBKzU3ODQ+PjJdKTtrPTB8YXJbKGY/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSxRPTB8YnIocSxlKSxZPTB8YnIoTCxyKSxDPTB8YXJbQSs1ODA0Pj4yXSxXPTB8YXJbQSs1ODIwPj4yXSxGPShNPTAhPSgwfFEpKSYoVj0xXih5PTA9PSgwfFkpKSksST1RKygwfGJyKHEsaSkpfDAsRD0wfGFyW0ErMTI0OD4+Ml0sTj0oMHxJKTwoMHxEKSZWLEI9UT4+QyxwPVk+PkMsRT1RKy0xPj5DLEk+Pj1DLEM9WSstMT4+QyxnPTB8YXJbQSsxMDM1Mj4+Ml0sZj0wfGJyKGcscCksWj0wfGFyW0ErMTAzNDA+PjJdLG89MHxscltaKygyNCooZitCfDApfDApPj4xXSxKPU0/MHxscltaKygyNCooZitFfDApfDApPj4xXTotMTtHPXk/LTE6KEc9WisoMjQqKCgwfGJyKGcsQykpK0J8MCl8MCl8MCwwfGxyW0c+PjFdKTtSPU4/KFI9WisoMjQqKCgwfGJyKGcsQykpK0l8MCl8MCl8MCwwfGxyW1I+PjFdKTotMTtYPUY/KFg9WisoMjQqKCgwfGJyKGcsQykpK0V8MCl8MCl8MCwwfGxyW1g+PjFdKTotMTtmPTB8YnIocCxXKSxwPTB8YXJbQSsxMDMwOD4+Ml0sdD0wfGFyW3ArKGYrQjw8Mik+PjJdLF89TT8wfGFyW3ArKGYrRTw8Mik+PjJdOi0xO2c9eT8tMTooZz1wKygoMHxicihDLFcpKStCPDwyKXwwLDB8YXJbZz4+Ml0pO1o9Rj8oWj1wKygoMHxicihDLFcpKStFPDwyKXwwLDB8YXJbWj4+Ml0pOi0xO2Y9Tj8oZj1wKygoMHxicihDLFcpKStJPDwyKXwwLDB8YXJbZj4+Ml0pOi0xO2Q9KDB8Ryk9PSgwfG8pJigwfGcpPT0oMHx0KSZWLEY9RiYoMHxYKT09KDB8bykmKDB8Wik9PSgwfHQpLGw9TiYoMHxSKT09KDB8bykmKDB8Zik9PSgwfHQpLHU9MHxhcltBKzU4NjQ+PjJdLGE9MHxhcltBKzU4NTI+PjJdLEs9KDB8YnIoWT4+dSxhKSkrKFE+PnUpfDAsYj0wfGFyW0ErMTAzMjA+PjJdLEs9MHxhcltiKyhLPDwyKT4+Ml0sZj0oTCstMS1ZKygwfGFyW0ErMTI1Mj4+Ml0pfDApLygwfEwpfDAsWT0oMHxmKT4oMHwocz1pPDwxKSk/czpmLFE9KDB8KFE9KHErLTEtUStEfDApLygwfHEpfDApKT4oMHxzKT9zOlEsdmIoMC1zK3Z8MCwwLDB8KEQ9aTw8MnwxKSksZz1ZKy0xfDA7QTpkb3tpZigwPCgwfFkpJiYoVD1lKy0xfDAsVT0wfGJyKHEsVCksUz1BKzEwMzY4fDAsTz1BKzEwMzcyfDAsej1BKzEwMzc2fDAsaj1BKzEwMzYwfDAsTSYoMHxKKT09KDB8bykmKDB8Xyk9PSgwfHQpKSl7Zm9yKEM9NjQtKCgwfGYpPCgwfHMpP2Y6cyl8MCxHPVU+PnUsVj0wPT0oMHx0cltBKzU5NDQ+PjBdKSxXPWcsST1nPWY9MDs7KXtpZihYPWgrKEMrKEk8PDIpKXwwLFo9MHxicihFPVcrcnwwLEwpLHk9YisoKDB8YnIoWj4+dSxhKSkrRzw8Mil8MCx5PSgwfGFyW3k+PjJdKTw9KDB8SyksVil5JiYoSD0yOSk7ZWxzZXtpZihNPTB8YXJbUz4+Ml0sWj4+PU0sKDB8KEI9VT4+TSkpPD0tMSl7SD0zNDticmVha31pZigoMHwocD0wfGFyW08+PjJdKSk8PSgwfEIpKXtIPTM0O2JyZWFrfWlmKCgwfFopPD0tMSl7SD0zNTticmVha31pZigoMHxaKT49KDB8YXJbej4+Ml0pKXtIPTM1O2JyZWFrfU09KDB8YXJbaj4+Ml0pKygzKigoMHxicihwLFopKStCfDApfDApfDAseSYwPT0oNzY4JihjcltNPj4wXXxjcltNKzE+PjBdPDw4KSkmJihIPTI5KX1pZigyOT09KDB8SCkmJihaPXcrKCgoSD0wKXxicihFLGMpKStUPDwxKXwwLGd8fChmPTB8b3JbWj4+MV0pLHRyW1g+PjBdPTEsdHJbWCsxPj4wXT0xLHRyW1grMj4+MF09MSx0cltYKzM+PjBdPTEsb3Jbbisoflc8PDEpPj4xXT0wfG9yW1o+PjFdLE09dysoKDB8YnIoRSstMXwwLGMpKStUPDwxKXwwLG9yW24rKDEtVy0xPDwxKT4+MV09MHxvcltNPj4xXSxNPXcrKCgwfGJyKEUrLTJ8MCxjKSkrVDw8MSl8MCxvcltuKygyLVctMTw8MSk+PjFdPTB8b3JbTT4+MV0sTT13KygoMHxicihFKy0zfDAsYykpK1Q8PDEpfDAsb3JbbisoMy1XLTE8PDEpPj4xXT0wfG9yW00+PjFdLGc9Zys0fDApLCgwfChXPVcrLTR8MCkpPD0tMSl7eD1mLFA9ZzticmVhayBBfUk9SSsxfDB9MzQ9PSgwfEgpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MzU9PSgwfEgpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgUD14PTB9d2hpbGUoMCk7QTpkb3tpZihGKXtmPTB8YnIocSxwPWUrLTF8MCksZz0wfGJyKEwseT1yKy0xfDApLEI9YisoKDB8YnIoZz4+dSxhKSkrKGY+PnUpPDwyKXwwLEI9KDB8YXJbQj4+Ml0pPD0oMHxLKTtkb3tpZigwfHRyW0ErNTk0ND4+MF0pe2lmKEg9MHxhcltBKzEwMzY4Pj4yXSxaPWY+PkgsZj1nPj5ILCgwfFopPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZz0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfFopJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfGYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxmKTwoMHxhcltBKzEwMzc2Pj4yXSkpe2lmKEg9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihnLGYpKStafDApfDApfDAsQiYwPT0oNzY4JihjcltIPj4wXXxjcltIKzE+PjBdPDw4KSkpYnJlYWs7Zz1QLGY9eDticmVhayBBfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBpZighQil7Zz1QLGY9eDticmVhayBBfX13aGlsZSgwKTtnPXcrKCgwfGJyKGMseSkpK3A8PDEpfDAsZj1QP3g6MHxvcltnPj4xXSxvcltuPj4xXT0wfG9yW2c+PjFdLHRyW3Y+PjBdPTEsZz1QKzF8MH1lbHNlIGc9UCxmPXh9d2hpbGUoMCk7QTpkb3tpZigwPCgwfFEpKXtfPTB8YnIoTCxWPXIrLTF8MCksWT1BKzU5NDR8MCxWPTB8YnIoYyxWKSxGPUErMTAzNjh8MCxSPUErMTAzNzJ8MCxOPUErMTAzNzZ8MCxHPUErMTAzNjB8MCxDPTB8YnIoXz4+dSxhKSxXPUk9MDtlOmZvcig7Oyl7WD1oKyg2NSsoVzw8MikpfDA7ZG97aWYoKDB8SSk8KDB8aSk/ZDpsKXtpZihaPTB8YnIoQj1JK2V8MCxxKSxFPSgwfGFyW2IrKEMrKFo+PnUpPDwyKT4+Ml0pPD0oMHxLKSwwfHRyW1k+PjBdKXtpZihwPTB8YXJbRj4+Ml0sWj4+PXAscD1fPj5wLCgwfFopPD0tMSl7SD01NTticmVhayBlfWlmKCgwfCh5PTB8YXJbUj4+Ml0pKTw9KDB8Wikpe0g9NTU7YnJlYWsgZX1pZigoMHxwKTw9LTEpe0g9NTg7YnJlYWsgZX1pZigoMHxwKT49KDB8YXJbTj4+Ml0pKXtIPTU4O2JyZWFrIGV9aWYoQT0oMHxhcltHPj4yXSkrKDMqKCgwfGJyKHkscCkpK1p8MCl8MCl8MCwhKEUmMD09KDc2OCYoY3JbQT4+MF18Y3JbQSsxPj4wXTw8OCkpKSlicmVha31lbHNlIGlmKCFFKWJyZWFrO3A9dysoKFo9QitWfDApPDwxKXwwLGd8fChmPTB8b3JbcD4+MV0pLEE9MXxJLHRyW1g+PjBdPTEsdHJbWCsxPj4wXT0xLHRyW1grMj4+MF09MSx0cltYKzM+PjBdPTEsb3JbbisoQTw8MSk+PjFdPTB8b3JbcD4+MV0sb3JbbisoQSsxPDwxKT4+MV09MHxvclt3KyhaKzE8PDEpPj4xXSxvcltuKygoM3xJKTw8MSk+PjFdPTB8b3JbdysoWisyPDwxKT4+MV0sb3JbbisoQSszPDwxKT4+MV09MHxvclt3KyhaKzM8PDEpPj4xXSxnPWcrNHwwfX13aGlsZSgwKTtpZigoMHxRKTw9KDB8KEk9SSs0fDApKSl7JD1nLEFBPWY7YnJlYWsgQX1XPVcrMXwwfTU1PT0oMHxIKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjU4PT0oMHxIKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlICQ9ZyxBQT1mfXdoaWxlKDApO2lmKCgwfCQpPT0oMHxEKSlyZXR1cm4gdXI9bTtpZihmPTB8YnIoaSwtMiksISQpe2lmKCgwfHMpPCgwfGYpKXJldHVybiB1cj1tO2ZvcihnPTE8PGstMSY2NTUzNTtvcltuKyhmPDwxKT4+MV09ZywoMHxmKTwoMHxzKTspZj1mKzF8MDtyZXR1cm4gdXI9bX0wfHRyW3YrZj4+MF18fChvcltuKyhmPDwxKT4+MV09QUEpO2lmKCgwfChmfD0xKSk+KDB8cykpcmV0dXJuIHVyPW07Zm9yKDswfHRyW3YrZj4+MF18fChvcltuKyhmPDwxKT4+MV09MHxvcltuKyhmKy0xPDwxKT4+MV0pLCgwfGYpPCgwfHMpOylmPWYrMXwwO3VyPW19KEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0PW8rMTI4fDApO2Rve2lmKCEoMHx0cltBKzU3NTM+PjBdKSl7aWYoMHxuJiYzIT0oMHxhcltBKzU3NzY+PjJdKSlicmVhazt0YyhBLHQsZixuLGkpfX13aGlsZSgwKTtzd2l0Y2goMHxpKXtjYXNlIDA6aWYocz0wfGFyWygwPT0oMHxuKT9BKzQwfDA6QSs0NHwwKT4+Ml0sYj0oMHxhcltBKzQrKG48PDIpPj4yXSkrKCgwfGJyKHMscikpK2U8PDEpfDAsMTwoMHxmKSl7Zm9yKGk9ZixBPTA7MzxpPj4+MDspaT4+Pj0xLEE9QSsxfDA7aT1BKzJ8MH1lbHNlIGk9MTtpZigoMHxmKTw9MClyZXR1cm4gdXI9bztyPWYrLTF8MCxuPXQrKGYrMTw8MSl8MCxhPXQrKH5mPDwxKXwwLGU9MDtkb3tmb3IoYz10Kyh+ZTw8MSl8MCxsPXItZXwwLHU9MHxicihlLHMpLGU9ZSsxfDAsQT0wO3c9MHxicigwfGxyW2M+PjFdLHItQXwwKSxBPShkPUEpKzF8MCxoPTB8YnIoMHxscltuPj4xXSxBKSxrPTB8YnIoMHxsclt0KyhBPDwxKT4+MV0sbCksaz13K2YraCtrKygwfGJyKDB8bHJbYT4+MV0sZSkpPj5pJjY1NTM1LG9yW2IrKGQrdTw8MSk+PjFdPWssKDB8QSkhPSgwfGYpOyk7fXdoaWxlKCgwfGUpIT0oMHxmKSk7cmV0dXJuIHVyPW87Y2FzZSAxOnJldHVybiBmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGw9MDtpZihjPTB8YXJbKChvPTA9PSgwfChmfD0wKSkpP0ErNDB8MDpBKzQ0fDApPj4yXSxhPSgwfGFyW0ErNCsoZjw8Mik+PjJdKSsoKDB8YnIoYyxyKSkrZTw8MSl8MCx0PTE8KDB8aSkpe2ZvcihBPWksZT0wOzM8QT4+PjA7KUE+Pj49MSxlPWUrMXwwO3I9ZSsyfDB9ZWxzZSByPTE7aWYoZj0wPCgwfGkpKWZvcihBPWU9MDtBPSgwfGxyW24rKChlPShsPWUpKzF8MCk8PDEpPj4xXSkrQSsoMHxscltuKyh+bDw8MSk+PjFdKXwwLCgwfGUpIT0oMHxpKTspO2Vsc2UgQT0wO2lmKHI9QStpPj5yLCEoKDB8aSk8MzImbykpe2lmKCFmKXJldHVybjtyJj02NTUzNSxlPTA7ZG97Zm9yKGY9MHxicihlLGMpLEE9MDtvclthKyhBK2Y8PDEpPj4xXT1yLCgwfChBPUErMXwwKSkhPSgwfGkpOyk7ZT1lKzF8MH13aGlsZSgoMHxlKSE9KDB8aSkpO3JldHVybn1pZihvclthPj4xXT0oMisocjw8MSkrKDB8bHJbbistMj4+MV0pKygwfGxyW24rMj4+MV0pfDApPj4+MiwhdClyZXR1cm47ZT0yKygzKnJ8MCl8MCxBPTE7Zm9yKDtBPShsPUEpKzF8MCxvclthKyhsPDwxKT4+MV09KGUrKDB8bHJbbisoQTw8MSk+PjFdKXwwKT4+PjIsKDB8QSkhPSgwfGkpOyk7aWYoIXQpcmV0dXJuO2U9MisoMypyfDApfDAsQT0xO2Zvcig7bD1hKygoMHxicihBLGMpKTw8MSl8MCxvcltsPj4xXT0oZSsoMHxscltuKyh+QTw8MSk+PjFdKXwwKT4+PjIsQT1BKzF8MCwoMHxBKSE9KDB8aSk7KTtpZighdClyZXR1cm47ciY9NjU1MzUsQT0xO2Rve2ZvcihmPTB8YnIoQSxjKSxlPTE7b3JbYSsoZStmPDwxKT4+MV09ciwoMHwoZT1lKzF8MCkpIT0oMHxpKTspO0E9QSsxfDB9d2hpbGUoKDB8QSkhPSgwfGkpKX0oQSxlLHIsZixuLHQpLHVyPW87ZGVmYXVsdDooZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLHR8PTA7dmFyIG8sYSxjLGwsdSxiLHMsZCxrLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO3VyPShrPXVyKSsyNzJ8MCxsPSh3PWspKzEyOHwwLHM9MHxhclsoKHU9MD09KDB8KG58PTApKSk/QSs0MHwwOkErNDR8MCk+PjJdLG89MHxhcltBKzQrKG48PDIpPj4yXSxhPSgwfGJyKHMscikpK2U8PDEsZD1vK2F8MCxiPTB8YXJbKHU/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSwzNTw9KDB8aSkmJnNyKDQ4MzAyLDQ4Mjg5LDU5Niw0ODMxOSk7KDB8aSk8PTEmJnNyKDQ4MzQ0LDQ4Mjg5LDU5Nyw0ODMxOSk7Yz0wfGFyWzk1NjgrKGk8PDIpPj4yXTtkb3tpZigwfHRyW0ErNTc1MD4+MF0pe2lmKG49MHxhcltBKzEwMzY4Pj4yXSxoPWU+Pm4sbj1yPj5uLCgwfGgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZT0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfGgpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG4pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxuKTwoMHxhcltBKzEwMzc2Pj4yXSkpe3A9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihlLG4pKStofDApfDApfDAscD0wPT0oMjA0OCYoY3JbcD4+MF18Y3JbcCsxPj4wXTw8OCkpO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBwPTF9d2hpbGUoMCk7e2lmKG49KDB8Zik8MCwxNzwoMHxpKSl7aWYobnx8aGIoMHxsLDB8dCwyKyhmPDwxKXwwKSwobj1pKy0xMXwwKT4+PjA8MTUpe2lmKGU9MHxhcls5NzA4KyhuPDwyKT4+Ml0sKDB8KG49KDB8YnIoYyxmKSk+PjUpKTwtMSlmb3IoO1o9dCsoMC0oMTI4KygwfGJyKG4sZSkpPj44KTw8MSl8MCxvcltsKyhuPDwxKT4+MV09MHxvcltaPj4xXSwoMHxuKTwtMTspbj1uKzF8MH1lbHNlKDB8Zik8KDB8KG49Zjw8MSkpJiZoYih3KyhmKzY1PDwxKXwwLHQrKGYrMTw8MSl8MCwwfG4pO2lmKCEoZz0wPCgwfGYpKSlyZXR1cm4gdXI9aztaPXM8PDEsbT13KzEzMHwwLHI9Zjw8MSxlPTA7ZG97aWYoQT0wfGJyKGU9KG49ZSkrMXwwLGMpLGg9QT4+NSxBJj0zMSx3PTB8YnIobixzKSx2PTMyLUF8MCxBKWZvcihuPTA7eT0oKEI9MHxicigwfGxyW2wrKCh5PW4raHwwKSsxPDwxKT4+MV0sdikpKzE2KygwfGJyKDB8bHJbbCsoeSsyPDwxKT4+MV0sQSkpfDApPj4+NSY2NTUzNSxvcltkKyhuK3c8PDEpPj4xXT15LCgwfChuPW4rMXwwKSkhPSgwfGYpOyk7ZWxzZSBoYihvKyhhKygwfGJyKFosbikpKXwwLG0rKGg8PDEpfDAsMHxyKX13aGlsZSgoMHxlKSE9KDB8ZikpO2lmKCEoKDB8Zik8MzImMjY9PSgwfGkpJnUmcCZnKSlyZXR1cm4gdXI9aztmb3IoaD10KzJ8MCxyPShlPTE8PGIpKzY1NTM1fDAsbj0wO3k9KCgwfGxyW3QrKH5uPDwxKT4+MV0pLSgwfGxyW3Q+PjFdKT4+MSkrKDB8bHJbaD4+MV0pfDAsQj1kKygoMHxicihuLHMpKTw8MSl8MCxvcltCPj4xXT0oMHx5KTwwPzA6NjU1MzUmKCgwfHkpPCgwfGUpP3k6ciksKDB8KG49bisxfDApKSE9KDB8Zik7KTtyZXR1cm4gdXI9a31pZighbilmb3Iobj0wO29yW2wrKG48PDEpPj4xXT0wfG9yW3QrKDAtbjw8MSk+PjFdLCgwfG4pIT0oMHxmKTspbj1uKzF8MDtpZigobj1pKy0xMXwwKT4+PjA8MTUpe2lmKGU9MHxhcls5NzA4KyhuPDwyKT4+Ml0sKDB8KG49KDB8YnIoYyxmKSk+PjUpKTwtMSlmb3IoO0I9dCsoMTI4KygwfGJyKG4sZSkpPj44PDwxKXwwLG9yW2wrKG48PDEpPj4xXT0wfG9yW0I+PjFdLCgwfG4pPC0xOyluPW4rMXwwfWVsc2UgaWYoKDB8Zik8KDB8KGU9Zjw8MSkpKWZvcihuPWY7b3JbbCsoKG49KEI9bikrMXwwKTw8MSk+PjFdPTB8b3JbdCsofkI8PDEpPj4xXSwoMHxuKSE9KDB8ZSk7KTtpZighKHY9MDwoMHxmKSkpcmV0dXJuIHVyPWs7dz0wO2Rve2ZvcihtPTB8YnIodyxzKSxoPTA7cj0wfGJyKGg9KEE9aCkrMXwwLGMpLGU9MzEmcixuPTB8b3JbbCsoKHI9KHI+PjUpK3d8MCkrMTw8MSk+PjFdLGUmJihuPSgobj0wfGJyKDY1NTM1Jm4sMzItZXwwKSkrMTYrKDB8YnIoMHxscltsKyhyKzI8PDEpPj4xXSxlKSl8MCk+Pj41JjY1NTM1KSxvcltkKyhBK208PDEpPj4xXT1uLCgwfGgpIT0oMHxmKTspO3c9dysxfDB9d2hpbGUoKDB8dykhPSgwfGYpKTtpZighKCgwfGYpPDMyJjEwPT0oMHxpKSZ1JnAmdikpcmV0dXJuIHVyPWs7Zm9yKGg9dCstMnwwLHI9KGU9MTw8YikrNjU1MzV8MCxuPTA7eT0oKDB8bHJbdCsoKG49KEI9bikrMXwwKTw8MSk+PjFdKS0oMHxsclt0Pj4xXSk+PjEpKygwfGxyW2g+PjFdKXwwLG9yW2QrKEI8PDEpPj4xXT0oMHx5KTwwPzA6NjU1MzUmKCgwfHkpPCgwfGUpP3k6ciksKDB8bikhPSgwfGYpOyk7dXI9a319KShBLGUscixpLGYsbix0KSx1cj1vfX0oQSxlLHIsaSxmLG4pOnZvaWQgZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2l8PTA7dmFyIHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7dXI9KG89dXIpKzE0NHwwLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MDt1cj0oZz11cikrMTQ0fDAsbT0odz1nKSs2NHwwLHY9MHxhcls0KyhBfD0wKSsoKGZ8PTApPDwyKT4+Ml0scz0wfGFyWygoZj0wPT0oMHxmKSk/QSs0MHwwOkErNDR8MCk+PjJdLHE9Zj9BQT0xOihBQT0wfGFyW0ErNTc4MD4+Ml0sMHxhcltBKzU3ODQ+PjJdKTtoPTB8YXJbKGY/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSxEPTB8YnIoQUEsZSksWT0wfGJyKHEsciksRz0wfGFyW0ErNTgwND4+Ml0sST0wfGFyW0ErNTgyMD4+Ml0sUj0oVD0wIT0oMHxEKSkmKEY9MV4oQj0wPT0oMHxZKSkpLEM9RCsoMHxicihBQSxpKSl8MCxKPTB8YXJbQSsxMjQ4Pj4yXSxfPSgwfEMpPCgwfEopJkYsRT1EPj5HLHk9WT4+RyxYPUQrLTE+PkcsQz4+PUcsRz1ZKy0xPj5HLFo9MHxhcltBKzEwMzUyPj4yXSxmPTB8YnIoWix5KSxwPTB8YXJbQSsxMDM0MD4+Ml0sbz0wfGxyW3ArKDI0KihmK0V8MCl8MCk+PjFdLE09VD8wfGxyW3ArKDI0KihmK1h8MCl8MCk+PjFdOi0xO1Y9Qj8tMTooVj1wKygyNCooKDB8YnIoWixHKSkrRXwwKXwwKXwwLDB8bHJbVj4+MV0pO049Xz8oTj1wKygyNCooKDB8YnIoWixHKSkrQ3wwKXwwKXwwLDB8bHJbTj4+MV0pOi0xO1c9Uj8oVz1wKygyNCooKDB8YnIoWixHKSkrWHwwKXwwKXwwLDB8bHJbVz4+MV0pOi0xO2Y9MHxicih5LEkpLHk9MHxhcltBKzEwMzA4Pj4yXSx0PTB8YXJbeSsoZitFPDwyKT4+Ml0sUT1UPzB8YXJbeSsoZitYPDwyKT4+Ml06LTE7Wj1CPy0xOihaPXkrKCgwfGJyKEcsSSkpK0U8PDIpfDAsMHxhcltaPj4yXSk7cD1SPyhwPXkrKCgwfGJyKEcsSSkpK1g8PDIpfDAsMHxhcltwPj4yXSk6LTE7Zj1fPyhmPXkrKCgwfGJyKEcsSSkpK0M8PDIpfDAsMHxhcltmPj4yXSk6LTE7az0oMHxWKT09KDB8bykmKDB8Wik9PSgwfHQpJkYsRj1SJigwfFcpPT0oMHxvKSYoMHxwKT09KDB8dCksYz1fJigwfE4pPT0oMHxvKSYoMHxmKT09KDB8dCksRT0wfGFyWyhsPUErNTg2NHwwKT4+Ml0sQj0wfGFyWyh1PUErNTg1MnwwKT4+Ml0sJD0oMHxicihZPj5FLEIpKSsoRD4+RSl8MCx5PTB8YXJbKGI9QSsxMDMyMHwwKT4+Ml0sJD0wfGFyW3krKCQ8PDIpPj4yXSxaPShxKy0xLVkrKDB8YXJbQSsxMjUyPj4yXSl8MCkvKDB8cSl8MCxZPSgwfFopPigwfChkPWk8PDEpKT9kOlosRD0oMHwoRD0oQUErLTEtRCtKfDApLygwfEFBKXwwKSk+KDB8ZCk/ZDpELHZiKG0rKEo9MC1kfDApfDAsMCwwfChhPWk8PDJ8MSkpLGY9WSstMXwwO0E6ZG97aWYoMDwoMHxZKSYmKFU9ZSstMXwwLFM9MHxicihBQSxVKSxPPUErNTk0NHwwLHo9QSsxMDM2OHwwLGo9QSsxMDM3MnwwLEg9QSsxMDM3NnwwLHg9QSsxMDM2MHwwLFQmKDB8TSk9PSgwfG8pJigwfFEpPT0oMHx0KSkpe2ZvcihWPTY0LSgoMHxaKTwoMHxkKT9aOmQpfDAsRz1wPVo9MDs7KXtpZihDPXcrKFYrKEc8PDIpKXwwLFc9MHxicihJPWYrcnwwLHEpLEU9eSsoKDB8YnIoVz4+RSxCKSkrKFM+PkUpPDwyKXwwLEU9KDB8YXJbRT4+Ml0pPD0oMHwkKSwwfHRyW08+PjBdKXtpZih5PTB8YXJbej4+Ml0sWD1TPj55LHk9Vz4+eSwoMHxYKTw9LTEpe1A9MzU7YnJlYWt9aWYoKDB8KEI9MHxhcltqPj4yXSkpPD0oMHxYKSl7UD0zNTticmVha31pZigoMHx5KTw9LTEpe1A9MzY7YnJlYWt9aWYoKDB8eSk+PSgwfGFyW0g+PjJdKSl7UD0zNjticmVha31UPSgwfGFyW3g+PjJdKSsoMyooKDB8YnIoQix5KSkrWHwwKXwwKXwwLEUmMD09KDc2OCYoY3JbVD4+MF18Y3JbVCsxPj4wXTw8OCkpJiYoUD0yOSl9ZWxzZSBFJiYoUD0yOSk7aWYoMjk9PSgwfFApJiYoeT12KygoKFA9MCl8YnIoSSxzKSkrVSl8MCxwfHwoWj0wfHRyW3k+PjBdKSx0cltDPj4wXT0xLHRyW0MrMT4+MF09MSx0cltDKzI+PjBdPTEsdHJbQyszPj4wXT0xLHRyW24rfmY+PjBdPTB8dHJbeT4+MF0sVD12KygoMHxicihJKy0xfDAscykpK1UpfDAsdHJbbisoMS1mLTEpPj4wXT0wfHRyW1Q+PjBdLFQ9disoKDB8YnIoSSstMnwwLHMpKStVKXwwLHRyW24rKDItZi0xKT4+MF09MHx0cltUPj4wXSxUPXYrKCgwfGJyKEkrLTN8MCxzKSkrVSl8MCx0cltuKygzLWYtMSk+PjBdPTB8dHJbVD4+MF0scD1wKzR8MCksKDB8KGY9ZistNHwwKSk8PS0xKXtMPVosSz1wO2JyZWFrIEF9RT0wfGFyW2w+PjJdLEI9MHxhclt1Pj4yXSx5PTB8YXJbYj4+Ml0sRz1HKzF8MH0zNT09KDB8UCk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTozNj09KDB8UCkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBLPUw9MH13aGlsZSgwKTtBOmRve2lmKEYpe2Y9MHxicihBQSx5PWUrLTF8MCksRT0wfGFyW2w+PjJdLFo9MHxicihxLEI9cistMXwwKSxFPSgwfGJyKFo+PkUsMHxhclt1Pj4yXSkpKyhmPj5FKXwwLEU9KDB8YXJbKDB8YXJbYj4+Ml0pKyhFPDwyKT4+Ml0pPD0oMHwkKTtkb3tpZigwfHRyW0ErNTk0ND4+MF0pe2lmKFA9MHxhcltBKzEwMzY4Pj4yXSxwPWY+PlAsZj1aPj5QLCgwfHApPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoWj0wfGFyW0ErMTAzNzI+PjJdKSk8PSgwfHApJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfGYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxmKTwoMHxhcltBKzEwMzc2Pj4yXSkpe2lmKFA9KDB8YXJbQSsxMDM2MD4+Ml0pKygzKigoMHxicihaLGYpKStwfDApfDApfDAsRSYwPT0oNzY4JihjcltQPj4wXXxjcltQKzE+PjBdPDw4KSkpYnJlYWs7Wj1LLGY9TDticmVhayBBfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9ZWxzZSBpZighRSl7Wj1LLGY9TDticmVhayBBfX13aGlsZSgwKTtaPXYrKCgwfGJyKHMsQikpK3kpfDAsZj1LP0w6MHx0cltaPj4wXSx0cltuPj4wXT0wfHRyW1o+PjBdLHRyW20+PjBdPTEsWj1LKzF8MH1lbHNlIFo9SyxmPUx9d2hpbGUoMCk7QTpkb3tpZigwPCgwfEQpKXtfPTB8YnIocSxWPXIrLTF8MCksWT1BKzU5NDR8MCxWPTB8YnIocyxWKSxGPUErMTAzNjh8MCxSPUErMTAzNzJ8MCxOPUErMTAzNzZ8MCxHPUErMTAzNjB8MCxJPUM9MDtlOmZvcig7Oyl7Vz13Kyg2NSsoSTw8MikpfDA7ZG97aWYoKDB8Qyk8KDB8aSk/azpjKXtpZihwPTB8YnIoRT1DK2V8MCxBQSksWD0wfGFyW2w+PjJdLFg9KDB8YnIoXz4+WCwwfGFyW3U+PjJdKSkrKHA+PlgpfDAsWD0oMHxhclsoMHxhcltiPj4yXSkrKFg8PDIpPj4yXSk8PSgwfCQpLDB8dHJbWT4+MF0pe2lmKHk9MHxhcltGPj4yXSxwPj49eSx5PV8+PnksKDB8cCk8PS0xKXtQPTU2O2JyZWFrIGV9aWYoKDB8KEI9MHxhcltSPj4yXSkpPD0oMHxwKSl7UD01NjticmVhayBlfWlmKCgwfHkpPD0tMSl7UD01OTticmVhayBlfWlmKCgwfHkpPj0oMHxhcltOPj4yXSkpe1A9NTk7YnJlYWsgZX1pZihBPSgwfGFyW0c+PjJdKSsoMyooKDB8YnIoQix5KSkrcHwwKXwwKXwwLCEoWCYwPT0oNzY4JihjcltBPj4wXXxjcltBKzE+PjBdPDw4KSkpKWJyZWFrfWVsc2UgaWYoIVgpYnJlYWs7eT12KyhwPUUrVnwwKXwwLFp8fChmPTB8dHJbeT4+MF0pLEE9MXxDLHRyW1c+PjBdPTEsdHJbVysxPj4wXT0xLHRyW1crMj4+MF09MSx0cltXKzM+PjBdPTEsdHJbbitBPj4wXT0wfHRyW3k+PjBdLHRyW24rKEErMSk+PjBdPTB8dHJbdisocCsxKT4+MF0sdHJbbisoM3xDKT4+MF09MHx0clt2KyhwKzIpPj4wXSx0cltuKyhBKzMpPj4wXT0wfHRyW3YrKHArMyk+PjBdLFo9Wis0fDB9fXdoaWxlKDApO2lmKCgwfEQpPD0oMHwoQz1DKzR8MCkpKXtlQT1aLHJBPWY7YnJlYWsgQX1JPUkrMXwwfTU2PT0oMHxQKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjU5PT0oMHxQKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlIGVBPVosckE9Zn13aGlsZSgwKTtpZigoMHxlQSk9PSgwfGEpKXJldHVybiB1cj1nO2lmKCFlQSlyZXR1cm4gdmIobitKfDAsMTw8aC0xJjI1NXwwLDB8YSksdXI9ZztmPTB8YnIoaSwtMiksMHx0clttK2Y+PjBdfHwodHJbbitmPj4wXT1yQSk7aWYoKDB8KGZ8PTEpKT4oMHxkKSlyZXR1cm4gdXI9Zztmb3IoOzB8dHJbbStmPj4wXXx8KHRyW24rZj4+MF09MHx0cltuKyhmKy0xKT4+MF0pLCgwfGYpPCgwfGQpOylmPWYrMXwwO3VyPWd9KEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCx0PW8rNjR8MCk7ZG97aWYoISgwfHRyW0ErNTc1Mz4+MF0pKXtpZigwfG4mJjMhPSgwfGFyW0ErNTc3Nj4+Ml0pKWJyZWFrO25jKEEsdCxmLG4saSl9fXdoaWxlKDApO3N3aXRjaCgwfGkpe2Nhc2UgMDppZihzPTB8YXJbKDA9PSgwfG4pP0ErNDB8MDpBKzQ0fDApPj4yXSxiPSgwfGFyW0ErNCsobjw8Mik+PjJdKSsoKDB8YnIocyxyKSkrZSl8MCwxPCgwfGYpKXtmb3IoaT1mLEE9MDszPGk+Pj4wOylpPj4+PTEsQT1BKzF8MDtpPUErMnwwfWVsc2UgaT0xO2lmKCgwfGYpPD0wKXJldHVybiB1cj1vO3I9ZistMXwwLG49dCsoZisxKXwwLGE9dCt+ZnwwLGU9MDtkb3tmb3IoYz10K35lfDAsbD1yLWV8MCx1PTB8YnIoZSxzKSxlPWUrMXwwLEE9MDt3PTB8YnIoMHxjcltjPj4wXSxyLUF8MCksQT0oZD1BKSsxfDAsaD0wfGJyKDB8Y3Jbbj4+MF0sQSksaz0wfGJyKDB8Y3JbdCtBPj4wXSxsKSxrPXcrZitoK2srKDB8YnIoMHxjclthPj4wXSxlKSk+PmkmMjU1LHRyW2IrKGQrdSk+PjBdPWssKDB8QSkhPSgwfGYpOyk7fXdoaWxlKCgwfGUpIT0oMHxmKSk7cmV0dXJuIHVyPW87Y2FzZSAxOnJldHVybiBmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiPTAscz0wLGQ9MDtpZih1PTB8YXJbKChvPTA9PSgwfChmfD0wKSkpP0ErNDB8MDpBKzQ0fDApPj4yXSxsPTB8YXJbQSs0KyhmPDwyKT4+Ml0sdD0oMHxicih1LHIpKStlfDAsYT1sK3R8MCxjPTE8KDB8aSkpe2ZvcihBPWksZj0wOzM8QT4+PjA7KUE+Pj49MSxmPWYrMXwwO2I9ZisyfDB9ZWxzZSBiPTE7aWYocz0wPCgwfGkpKWZvcihBPWY9MDtBPSgwfGNyW24rKGY9KGQ9ZikrMXwwKT4+MF0pK0ErKDB8Y3Jbbit+ZD4+MF0pfDAsKDB8ZikhPSgwfGkpOyk7ZWxzZSBBPTA7aWYoYj1BK2k+PmIsISgoMHxpKTwzMiZvKSl7aWYoIXMpcmV0dXJuO2ZvcihmPTI1NSZiLEE9MDt2YihsKyh0KygwfGJyKHUsQSkpKXwwLDB8ZiwwfGkpLCgwfChBPUErMXwwKSkhPSgwfGkpOyk7cmV0dXJufWlmKHRyW2E+PjBdPSgyKyhiPDwxKSsoMHxjcltuKy0xPj4wXSkrKDB8Y3JbbisxPj4wXSl8MCk+Pj4yLCFjKXJldHVybjtmPTIrKDMqYnwwKXwwLEE9MTtmb3IoO0E9KGQ9QSkrMXwwLHRyW2ErZD4+MF09KGYrKDB8Y3JbbitBPj4wXSl8MCk+Pj4yLCgwfEEpIT0oMHxpKTspO2lmKCFjKXJldHVybjtmPTIrKDMqYnwwKXwwLEE9MTtmb3IoO2Q9YSsoMHxicihBLHUpKXwwLHRyW2Q+PjBdPShmKygwfGNyW24rfkE+PjBdKXwwKT4+PjIsQT1BKzF8MCwoMHxBKSE9KDB8aSk7KTtpZighYylyZXR1cm47cz0yNTUmYixiPSgwfGJyKHUscisxfDApKStlKzF8MCxBPWkrLTF8MCxmPTA7Zm9yKDt2YihsKyhiKygwfGJyKHUsZikpKXwwLDB8cywwfEEpLGY9ZisxfDAsKDB8ZikhPSgwfEEpOyk7fShBLGUscixmLG4sdCksdXI9bztkZWZhdWx0OihmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkLGssaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO3VyPShrPXVyKSsxNDR8MCxsPSh3PWspKzY0fDAscz0wfGFyWygodT0wPT0oMHwobnw9MCkpKT9BKzQwfDA6QSs0NHwwKT4+Ml0sbz0wfGFyW0ErNCsobjw8Mik+PjJdLGE9KDB8YnIocyxyKSkrZXwwLGQ9bythfDAsYj0wfGFyWyh1P0ErNTc2MHwwOkErNTc2OHwwKT4+Ml0sMzU8PSgwfGkpJiZzcig0ODMwMiw0ODI4OSw1OTYsNDgzMTkpOygwfGkpPD0xJiZzcig0ODM0NCw0ODI4OSw1OTcsNDgzMTkpO2M9MHxhcls5NTY4KyhpPDwyKT4+Ml07ZG97aWYoMHx0cltBKzU3NTA+PjBdKXtpZihuPTB8YXJbQSsxMDM2OD4+Ml0saD1lPj5uLG49cj4+biwoMHxoKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGU9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxoKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxuKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8bik8KDB8YXJbQSsxMDM3Nj4+Ml0pKXtnPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZSxuKSkraHwwKXwwKXwwLGc9MD09KDIwNDgmKGNyW2c+PjBdfGNyW2crMT4+MF08PDgpKTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgZz0xfXdoaWxlKDApO3tpZihuPSgwfGYpPDAsMTc8KDB8aSkpe2lmKG58fGhiKDB8bCwwfHQsZisxfDApLChuPWkrLTExfDApPj4+MDwxNSl7aWYoZT0wfGFyWzk3MDgrKG48PDIpPj4yXSwoMHwobj0oMHxicihjLGYpKT4+NSkpPC0xKWZvcig7bT10KygwLSgxMjgrKDB8YnIobixlKSk+PjgpKXwwLHRyW2wrbj4+MF09MHx0clttPj4wXSwoMHxuKTwtMTspbj1uKzF8MH1lbHNlKDB8Zik8KGY8PDF8MCkmJmhiKHcrKGYrNjUpfDAsdCsoZisxKXwwLDB8Zik7aWYoIShtPTA8KDB8ZikpKXJldHVybiB1cj1rO3Y9dys2NXwwLG49MDtkb3tpZihyPTB8YnIocyxuKSxBPTB8YnIobj1uKzF8MCxjKSxoPUE+PjUsdz0zMi0oQSY9MzEpfDAsQSlmb3IoZT0wO1o9KChwPTB8YnIoMHxjcltsKygoWj1lK2h8MCkrMSk+PjBdLHcpKSsxNisoMHxicigwfGNyW2wrKForMik+PjBdLEEpKXwwKT4+PjUmMjU1LHRyW2QrKGUrcik+PjBdPVosKDB8KGU9ZSsxfDApKSE9KDB8Zik7KTtlbHNlIGhiKG8rKGErcil8MCx2K2h8MCwwfGYpfXdoaWxlKCgwfG4pIT0oMHxmKSk7aWYoISgoMHxmKTwzMiYyNj09KDB8aSkmdSZnJm0pKXJldHVybiB1cj1rO2ZvcihoPXQrMXwwLGU9KHI9MTw8YikrMjU1fDAsbj0wO1o9KCgwfGNyW3Qrfm4+PjBdKS0oMHxjclt0Pj4wXSk+PjEpKygwfGNyW2g+PjBdKXwwLHA9ZCsoMHxicihuLHMpKXwwLHRyW3A+PjBdPSgwfFopPDA/MDoyNTUmKCgwfFopPCgwfHIpP1o6ZSksKDB8KG49bisxfDApKSE9KDB8Zik7KTtyZXR1cm4gdXI9a31pZighbilmb3Iobj0wO3RyW2wrbj4+MF09MHx0clt0KygwLW4pPj4wXSwoMHxuKSE9KDB8Zik7KW49bisxfDA7aWYoKG49aSstMTF8MCk+Pj4wPDE1KXtpZihlPTB8YXJbOTcwOCsobjw8Mik+PjJdLCgwfChuPSgwfGJyKGMsZikpPj41KSk8LTEpZm9yKDtwPXQrKDEyOCsoMHxicihuLGUpKT4+OCl8MCx0cltsK24+PjBdPTB8dHJbcD4+MF0sKDB8bik8LTE7KW49bisxfDB9ZWxzZSBpZigoMHxmKTwoMHwoZT1mPDwxKSkpZm9yKG49Zjt0cltsKyhuPShwPW4pKzF8MCk+PjBdPTB8dHJbdCt+cD4+MF0sKDB8bikhPSgwfGUpOyk7aWYoISh2PTA8KDB8ZikpKXJldHVybiB1cj1rO3c9MDtkb3tmb3IobT0wfGJyKHcscyksaD0wO3I9MHxicihoPShBPWgpKzF8MCxjKSxlPTMxJnIsbj0wfHRyW2wrKChyPShyPj41KSt3fDApKzEpPj4wXSxlJiYobj0oKG49MHxicigyNTUmbiwzMi1lfDApKSsxNisoMHxicigwfGNyW2wrKHIrMik+PjBdLGUpKXwwKT4+PjUmMjU1KSx0cltkKyhBK20pPj4wXT1uLCgwfGgpIT0oMHxmKTspO3c9dysxfDB9d2hpbGUoKDB8dykhPSgwfGYpKTtpZighKCgwfGYpPDMyJjEwPT0oMHxpKSZ1JmcmdikpcmV0dXJuIHVyPWs7Zm9yKGg9dCstMXwwLHI9KGU9MTw8YikrMjU1fDAsbj0wO1o9KCgwfGNyW3QrKG49KHA9bikrMXwwKT4+MF0pLSgwfGNyW3Q+PjBdKT4+MSkrKDB8Y3JbaD4+MF0pfDAsdHJbZCtwPj4wXT0oMHxaKTwwPzA6MjU1JigoMHxaKTwoMHxlKT9aOnIpLCgwfG4pIT0oMHxmKTspO3VyPWt9fSkoQSxlLHIsaSxmLG4sdCksdXI9b319KEEsZSxyLGksZixuKX1mdW5jdGlvbiBWdChBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxOTYsYXJbKHI9QSsxNnwwKT4+Ml09NTIyNCwwfChpPTB8YXJbQSs4ND4+Ml0pJiYoKDB8YXJbKGY9QSs4OHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSwoMHx0clsoaT1BKzcyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX1mdW5jdGlvbiBGdChBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01MTA0LDB8KGU9MHxhclsobj1BKzU2fDApPj4yXSkpe2lmKCgwfChyPTB8YXJbKHQ9QSs2MHwwKT4+Ml0pKSE9KDB8ZSkpe2ZvcihpPXI7cj1pKy0xNnwwLGFyW3Q+PjJdPXIsKGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KGk9MHxhclsocj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW3I+PjJdPWkrKH4oKGkrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikscj0wfGFyW3Q+PjJdKSwoMHxyKSE9KDB8ZSk7KWk9cjtlPTB8YXJbbj4+Ml19dnUoZSl9aWYoYXJbQT4+Ml09NDQwNCwwfChlPTB8YXJbKGY9QSs0NHwwKT4+Ml0pKXtpZigoMHwocj0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfGUpKXtmb3IoO2k9cistOHwwLGFyW24+PjJdPWksKDB8KHI9KHI9MHxhcltyKy00Pj4yXSk/KGR1KHIpLDB8YXJbbj4+Ml0pOmkpKSE9KDB8ZSk7KTtlPTB8YXJbZj4+Ml19dnUoZSl9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhlPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltlPj4yXT1yKSx2dShyKSl9ZnVuY3Rpb24gUnQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPShBfD0wKSs0fDAsaT0wfGFyW0E+PjJdLDI2ODQzNTQ1NTwoZj0obz0oMHxhcltyPj4yXSktaT4+NCkrMXwwKT4+PjAmJnpsKCksaT0oYT0oMHxhclsoYz1BKzh8MCk+PjJdKS1pfDApPj4zLGk9YT4+ND4+PjA8MTM0MjE3NzI3P2k+Pj4wPGY+Pj4wP2Y6aToyNjg0MzU0NTU7ZG97aWYoaSl7aWYoISgyNjg0MzU0NTU8aT4+PjApKXt0PTB8aHUoaTw8NCk7YnJlYWt9WnUoYz0wfFgoOCksNDQ1MTkpLGFyW2M+PjJdPTE3NjYwLEkoMHxjLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihhPXQrKGk8PDQpfDAsYXJbKG49Zj10KyhvPDw0KXwwKT4+Ml09YXJbZT4+Ml0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuLHQ9MDtpZihhclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLGFyW0ErOD4+Ml09MCx0PSgwfGFyWyhmPWUrNHwwKT4+Ml0pLSgwfGFyW2U+PjJdKXwwLCEocj10Pj4yKSlyZXR1cm47MTA3Mzc0MTgyMzxyPj4+MCYmemwoKTtpZihpPTB8aHUodCksYXJbbj4+Ml09aSxhcltBPj4yXT1pLGFyW0ErOD4+Ml09aSsocjw8MiksQT0wfGFyW2U+PjJdLCgwfCh0PSgwfGFyW2Y+PjJdKS1BfDApKTw9MClyZXR1cm47aGIoMHxpLDB8QSwwfHQpLGFyW24+PjJdPWkrKHQ+Pj4yPDwyKX0odCsobzw8NCkrNHwwLGUrNHwwKSxlPWYrMTZ8MCx0PTB8YXJbQT4+Ml0sKDB8KGk9MHxhcltyPj4yXSkpPT0oMHx0KSlmPW4saT1vPXQ7ZWxzZXtmb3IoO2k9KHU9aSkrLTE2fDAsYXJbZistMTY+PjJdPWFyW2k+PjJdLG89dSstMTJ8MCxhclsobD1mKy0xMnwwKT4+Ml09MCxhclsoYj1mKy04fDApPj4yXT0wLGFyW2YrLTQ+PjJdPTAsYXJbbD4+Ml09YXJbbz4+Ml0sbD11Ky04fDAsYXJbYj4+Ml09YXJbbD4+Ml0sdT11Ky00fDAsYXJbZistND4+Ml09YXJbdT4+Ml0sYXJbdT4+Ml09MCxhcltsPj4yXT0wLG49Zj1uKy0xNnwoYXJbbz4+Ml09MCksKDB8aSkhPSgwfHQpOyk7Zj1uLG89MHxhcltBPj4yXSxpPTB8YXJbcj4+Ml19aWYoYXJbQT4+Ml09ZixhcltyPj4yXT1lLGFyW2M+PjJdPWEsKDB8aSkhPSgwfChlPW8pKSlmb3IoOzB8KGY9MHxhcltpKy0xMj4+Ml0pJiYoKDB8KHQ9MHxhclsobj1pKy04fDApPj4yXSkpIT0oMHxmKSYmKGFyW24+PjJdPXQrKH4oKHQrLTQtZnwwKT4+PjIpPDwyKSksdnUoZikpLCgwfChpPWkrLTE2fDApKSE9KDB8ZSk7KTtvJiZ2dShvKX1mdW5jdGlvbiBOdChBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MDtuPShBfD0wKSs0fDAsdT10PTB8YXJbQT4+Ml0sMTA3Mzc0MTgyMzwoYT0xKyhpPShvPSgwfGFyW24+PjJdKS10fDApPj4yKXwwKT4+PjAmJnpsKCksYz0obD0oMHxhclsoZj1BKzh8MCk+PjJdKS10fDApPj4xLGM9bD4+Mj4+PjA8NTM2ODcwOTExP2M+Pj4wPGE+Pj4wP2E6YzoxMDczNzQxODIzO2Rve2lmKGMpe2lmKCEoMTA3Mzc0MTgyMzxjPj4+MCkpe2w9MHxodShjPDwyKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgbD0wfXdoaWxlKDApO3I9bCsoaTw8Mil8MCxhPWxyW2U+PjFdfGxyW2UrMj4+MV08PDE2LG9yW3I+PjFdPWEsb3JbMityPj4xXT1hPj4+MTYsYT1yKygwLWk8PDIpfDAsMDwoMHxvKSYmaGIoMHxhLDB8dSwwfG8pLGFyW0E+PjJdPWEsYXJbbj4+Ml09NCtyLGFyW2Y+PjJdPWwrKGM8PDIpLHQmJnZ1KHUpfWZ1bmN0aW9uIF90KEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ5MjQsKDB8dHJbKHI9QSsxMTJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwoMHx0clsocj1BKzEwMHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLCgwfHRyWyhyPUErODh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwoMHx0clsocj1BKzc2fDApKzExPj4wXSk8MCYmdnUoMHxhcltyPj4yXSksKDB8dHJbKHI9QSs2NHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfWZ1bmN0aW9uIFl0KEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoYXJbKEF8PTApPj4yXT00ODA0LDB8KHI9MHxhclsoZT1BKzU2fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKGM9QSs2MHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7Oyl7aWYoaT1mKy0zMnwwLGFyW2M+PjJdPWksbz0wfGFyWyhhPWYrLTE2fDApPj4yXSl7aWYoKDB8KGk9MHxhclsodD1mKy0xMnwwKT4+Ml0pKT09KDB8bykpaT1vO2Vsc2V7Zm9yKDtmPWkrLTQwfDAsYXJbdD4+Ml09ZiwoMHwoaT0obj0wfGFyW2krLTE2Pj4yXSk/KCgwfGFyWyhpPWkrLTEyfDApPj4yXSkhPSgwfG4pJiYoYXJbaT4+Ml09biksdnUobiksMHxhclt0Pj4yXSk6ZikpIT0oMHxvKTspO2k9MHxhclthPj4yXX12dShpKSxpPTB8YXJbYz4+Ml19aWYoKDB8aSk9PSgwfHIpKWJyZWFrO2Y9aX1yPTB8YXJbZT4+Ml19dnUocil9aWYoYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKG49QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyh0PUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW3Q+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbdD4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbbj4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9ZnVuY3Rpb24gUXQoQSxlKXtlfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MDtiPTB8YXJbKGQ9KEF8PTApKzR8MCk+PjJdLG49dD0wfGFyW0E+PjJdLDEwNzM3NDE4Mjwobz0odT0oKGE9YiktdHwwKS80MHwwKSsxfDApPj4+MCYmemwoKSxjPShzPSgoMHxhclsoZj1BKzh8MCk+PjJdKS10fDApLzQwfDApPDwxLGM9cz4+PjA8NTM2ODcwOTE/Yz4+PjA8bz4+PjA/bzpjOjEwNzM3NDE4Mjtkb3tpZihjKXtpZighKDEwNzM3NDE4MjxjPj4+MCkpe2w9MHxodSg0MCpjfDApO2JyZWFrfVp1KGQ9MHxYKDgpLDQ0NTE5KSxhcltkPj4yXT0xNzY2MCxJKDB8ZCw0MDE2LDQyOCl9ZWxzZSBsPTB9d2hpbGUoMCk7cz1sKyg0MCpjfDApfDAsYXJbKG89dD1sKyg0MCp1fDApfDApPj4yXT1hcltlPj4yXSxhclt0KzQ+PjJdPWFyW2UrND4+Ml0sYXJbdCs4Pj4yXT1hcltlKzg+PjJdLGFyW3QrMTI+PjJdPWFyW2UrMTI+PjJdLGFyW3QrMTY+PjJdPWFyW2UrMTY+PjJdLGFyW3QrMjA+PjJdPWFyW2UrMjA+PjJdLGFyWyhyPWwrKDQwKnV8MCkrMjR8MCk+PjJdPTAsYXJbKGk9bCsoNDAqdXwwKSsyOHwwKT4+Ml09MCxrPShhcltsKyg0MCp1fDApKzMyPj4yXT0wKXxhcltlKzI0Pj4yXSxjPSgwfGFyW2UrMjg+PjJdKS1rfDAsZT1rO2Rve2lmKDB8Yyl7aWYoISgoMHxjKTwwKSl7aD0wfGh1KGMpLGFyW2k+PjJdPWgsaz0oYXJbcj4+Ml09aCkrY3wwLGFyW2wrKDQwKnV8MCkrMzI+PjJdPWssaGIoMHxoLDB8ZSwwfGMpLGFyW2k+PjJdPWs7YnJlYWt9emwoKX19d2hpbGUoMCk7aWYoZT10KzQwfDAsKDB8YSk9PSgwfG4pKWM9YjtlbHNle2Zvcig7YT0oYj1hKSstNDB8MCxhclsoaz10Ky00MHwwKT4+Ml09YXJbYT4+Ml0sYXJbays0Pj4yXT1hclthKzQ+PjJdLGFyW2srOD4+Ml09YXJbYSs4Pj4yXSxhcltrKzEyPj4yXT1hclthKzEyPj4yXSxhcltrKzE2Pj4yXT1hclthKzE2Pj4yXSxhcltrKzIwPj4yXT1hclthKzIwPj4yXSxoPWIrLTE2fDAsYXJbKGs9dCstMTZ8MCk+PjJdPTAsYXJbKHU9dCstMTJ8MCk+PjJdPTAsYXJbdCstOD4+Ml09MCxhcltrPj4yXT1hcltoPj4yXSxrPWIrLTEyfDAsYXJbdT4+Ml09YXJbaz4+Ml0sYj1iKy04fDAsYXJbdCstOD4+Ml09YXJbYj4+Ml0sYXJbYj4+Ml09MCxhcltrPj4yXT0wLG89dD1vKy00MHwoYXJbaD4+Ml09MCksKDB8YSkhPSgwfG4pOyk7Yz0wfGFyW0E+PjJdLG49MHxhcltkPj4yXX1pZihhcltBPj4yXT1vLGFyW2Q+PjJdPWUsYXJbZj4+Ml09cywoMHxuKSE9KDB8KGE9YykpKWZvcig7MHwodD0wfGFyW24rLTE2Pj4yXSkmJigoMHxhclsobz1uKy0xMnwwKT4+Ml0pIT0oMHx0KSYmKGFyW28+PjJdPXQpLHZ1KHQpKSwoMHwobj1uKy00MHwwKSkhPSgwfGEpOyk7YyYmdnUoYyl9ZnVuY3Rpb24gRHQoQSxlKXtlfD0wO3ZhciByLGksZixuPTA7YXJbKEF8PTApPj4yXT0wLGFyWyhyPUErNHwwKT4+Ml09MCxmPSgoYXJbQSs4Pj4yXT0wKXwobj0oMHxhclsoaT1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCkpLzQwfDAsbiYmKDEwNzM3NDE4MjxmPj4+MCYmemwoKSxuPTB8aHUobiksYXJbcj4+Ml09bixhcltBPj4yXT1uLGFyW0ErOD4+Ml09bisoNDAqZnwwKSxmdW5jdGlvbihBLGUscixpKXtpfD0wO3ZhciBmLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYoZj00KyhBfD0wKXwwLCgwfChlfD0wKSk9PSgwfChyfD0wKSkpcmV0dXJuO2k9MHxhcltmPj4yXTtmb3IoOzspe2lmKGFyW2k+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09YXJbZSs0Pj4yXSxhcltpKzg+PjJdPWFyW2UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbZSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZSsxNj4+Ml0sYXJbaSsyMD4+Ml09YXJbZSsyMD4+Ml0sbj1lKzI0fDAsYXJbKG89aSsyNHwwKT4+Ml09MCxhclsoYz1pKzI4fDApPj4yXT0wLChhcltpKzMyPj4yXT0wKXwoQT0oMHxhclsodD1lKzI4fDApPj4yXSktKDB8YXJbbj4+Ml0pfDApKXtpZigoMHxBKTwwKXtBPTU7YnJlYWt9YT0wfGh1KEEpLGFyW2M+PjJdPWEsYXJbbz4+Ml09YSxhcltpKzMyPj4yXT1hK0EsaT0wfGFyW24+PjJdLDA8KDB8KEE9KDB8YXJbdD4+Ml0pLWl8MCkpJiYoaGIoMHxhLDB8aSwwfEEpLGFyW2M+PjJdPWErQSl9aWYoZT1lKzQwfDAsaT00MCsoMHxhcltmPj4yXSl8MCxhcltmPj4yXT1pLCgwfGUpPT0oMHxyKSl7QT05O2JyZWFrfX1pZig1PT0oMHxBKSl6bCgpO2Vsc2UgaWYoOT09KDB8QSkpO30oQSwwfGFyW2U+PjJdLDB8YXJbaT4+Ml0sZikpfWZ1bmN0aW9uIEp0KEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7cj0oQXw9MCkrNHwwLGk9MHxhcltBPj4yXSwxMzQyMTc3Mjc8KGY9KG89KDB8YXJbcj4+Ml0pLWk+PjUpKzF8MCk+Pj4wJiZ6bCgpLGk9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktaXwwKT4+NCxpPWM+PjU+Pj4wPDY3MTA4ODYzP2k+Pj4wPGY+Pj4wP2Y6aToxMzQyMTc3Mjc7ZG97aWYoaSl7aWYoISgxMzQyMTc3Mjc8aT4+PjApKXt0PTB8aHUoaTw8NSk7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIHQ9MH13aGlsZSgwKTtpZihhPXQrKGk8PDUpfDAsYXJbKG49Zj10KyhvPDw1KXwwKT4+Ml09YXJbZT4+Ml0sYXJbZis0Pj4yXT1hcltlKzQ+PjJdLGFyW2YrOD4+Ml09YXJbZSs4Pj4yXSxhcltmKzEyPj4yXT1hcltlKzEyPj4yXSxEdCh0KyhvPDw1KSsxNnwwLGUrMTZ8MCksZT1mKzMyfDAsdD0wfGFyW0E+PjJdLCgwfChpPTB8YXJbcj4+Ml0pKT09KDB8dCkpaT1uLGY9Yz10O2Vsc2V7Zm9yKDtpPSh1PWkpKy0zMnwwLGFyWyhvPWYrLTMyfDApPj4yXT1hcltpPj4yXSxhcltvKzQ+PjJdPWFyW2krND4+Ml0sYXJbbys4Pj4yXT1hcltpKzg+PjJdLGFyW28rMTI+PjJdPWFyW2krMTI+PjJdLGM9dSstMTZ8MCxhclsobz1mKy0xNnwwKT4+Ml09MCxhclsoYj1mKy0xMnwwKT4+Ml09MCxhcltmKy04Pj4yXT0wLGFyW28+PjJdPWFyW2M+PjJdLG89dSstMTJ8MCxhcltiPj4yXT1hcltvPj4yXSx1PXUrLTh8MCxhcltmKy04Pj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGFyW28+PjJdPTAsbj1mPW4rLTMyfChhcltjPj4yXT0wKSwoMHxpKSE9KDB8dCk7KTtpPW4sYz0wfGFyW0E+PjJdLGY9MHxhcltyPj4yXX1pZihhcltBPj4yXT1pLGFyW3I+PjJdPWUsYXJbbD4+Ml09YSwoMHxmKSE9KDB8KEE9YykpKXthPWY7ZG97aWYoMHwoaT0wfGFyWyhlPWErLTE2fDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKG89YSstMTJ8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistNDB8MCxhcltvPj4yXT1uLCgwfChmPSh0PTB8YXJbZistMTY+PjJdKT8oKDB8YXJbKGY9ZistMTJ8MCk+PjJdKSE9KDB8dCkmJihhcltmPj4yXT10KSx2dSh0KSwwfGFyW28+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWE9YSstMzJ8MH13aGlsZSgoMHxhKSE9KDB8QSkpfWMmJnZ1KGMpfWZ1bmN0aW9uIE10KEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDI2NCxlPUErOHwwLGFyW0ErNDA+PjJdPTAsYXJbZT4+Ml09MCxhcls0K2U+PjJdPTAsYXJbOCtlPj4yXT0wLGFyWzEyK2U+PjJdPTAsYXJbMTYrZT4+Ml09MCxhclsyMCtlPj4yXT0wLGFyWzI0K2U+PjJdPTAsb3JbMjgrZT4+MV09MH1mdW5jdGlvbiBUdChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGY9MDtmPTB8YXJbKGV8PTApKzQ0Pj4yXSxpPTB8YXJbZSs0OD4+Ml07QTpkb3tpZigoMHxmKSE9KDB8aSkpe2ZvcihlPWY7Zj0wfGFyW2U+PjJdLCgwfGFyW2YrMjA+PjJdKSE9KDB8cik7KWlmKCgwfChlPWUrOHwwKSk9PSgwfGkpKWJyZWFrIEE7cmV0dXJuKGFyW0E+PjJdPWYsZT0wfGFyW2UrND4+Ml0sYXJbQSs0Pj4yXT1lKT92b2lkIGJ1KGUpOnZvaWQgMH19d2hpbGUoMCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTB9ZnVuY3Rpb24gVXQoQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmPTB8YXJbKHU9KEF8PTApKzR8MCk+PjJdLGM9bj0wfGFyW0E+PjJdLDUzNjg3MDkxMTwodD0xKyhyPWYtbj4+Myl8MCk+Pj4wJiZ6bCgpLG89KGw9KDB8YXJbKGk9QSs4fDApPj4yXSktbnwwKT4+MixvPWw+PjM+Pj4wPDI2ODQzNTQ1NT9vPj4+MDx0Pj4+MD90Om86NTM2ODcwOTExO2Rve2lmKG8pe2lmKCEoNTM2ODcwOTExPG8+Pj4wKSl7YT0wfGh1KG88PDMpO2JyZWFrfVp1KHU9MHxYKDgpLDQ0NTE5KSxhclt1Pj4yXT0xNzY2MCxJKDB8dSw0MDE2LDQyOCl9ZWxzZSBhPTB9d2hpbGUoMCk7aWYobD1hKyhvPDwzKXwwLGFyWyh0PW49YSsocjw8Myl8MCk+PjJdPWFyW2U+PjJdLG89MHxhcltlKzQ+PjJdLG89KGFyW2ErKHI8PDMpKzQ+PjJdPW8pPyhidShvKSxmPTB8YXJbdT4+Ml0sMHxhcltBPj4yXSk6YyxhPW4rOHwwLCgwfGYpIT0oMHxvKSl7Zm9yKDtmPShjPWYpKy04fDAsYXJbbistOD4+Ml09YXJbZj4+Ml0sYz1jKy00fDAsYXJbbistND4+Ml09YXJbYz4+Ml0sYXJbZj4+Ml09MCx0PW49dCstOHwoYXJbYz4+Ml09MCksKDB8ZikhPSgwfG8pOyk7bz0wfGFyW0E+PjJdLGY9MHxhclt1Pj4yXX1pZihhcltBPj4yXT10LGFyW3U+PjJdPWEsYXJbaT4+Ml09bCwoMHxmKSE9KDB8KHQ9bykpKWZvcig7bj0wfGFyW2YrLTQ+PjJdLGY9ZistOHwwLDB8biYmZHUobiksKDB8ZikhPSgwfHQpOyk7byYmdnUobyl9ZnVuY3Rpb24gU3QoQSxlKXtlfD0wO3ZhciByPTA7aWYoKDB8KHI9MHxhclsoQXw9MCkrNjQ+PjJdKSk9PSgwfChBPTB8YXJbQSs2OD4+Ml0pKSlyZXR1cm4oZT0wKXxlO2Zvcig7Oyl7aWYoKDB8YXJbcj4+Ml0pPT0oMHxlKSl7cj0xLEE9NDticmVha31pZigoMHwocj1yKzR8MCkpPT0oMHxBKSl7cj0wLEE9NDticmVha319cmV0dXJuIDQ9PSgwfEEpPzB8cjowfWZ1bmN0aW9uIE90KEEsZSxyLGksZixuKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MDt1cj0odz11cikrMjcyfDAsaz13KzI1MnwwLGg9dys3MnwwLGI9dysyNDB8MCxzPXcrMjI4fDAsZD13KzIxNnwwLGM9dys1NnwwLGw9dys0NHwwLHQ9dysyNHwwLG89dysxNnwwLHU9dyxlPTB8YXJbKHJ8PTApKzE2Pj4yXSxhPTB8YXJbcisyMD4+Ml07QTpkb3tpZigoMHxlKSE9KDB8YSkpe0Y9cis0fDAsVj1uKzR8MCxSPXIrOHwwLEU9NCtvfDAsWD1pKzR8MCxJPShXPTgrdHwwKSsxMXwwO2U6Zm9yKDs7KXtzd2l0Y2goMHx0cltGPj4wXSl7Y2FzZSAwOmlmKEM9KDB8YXJbVj4+Ml0pLSgwfGFyW24+PjJdKXwwLG09MHxhclsoZz1CPWUrMTZ8MCk+PjJdLDA8KGc9MHxhcltnKzQ+PjJdKT4+PjB8MD09KDB8ZykmKDUzNjg3MDkxMi1DfDApPj4+MDxtPj4+MCl7ZT01O2JyZWFrIGV9aWYoWj0wfGFyWyhwPXk9ZSs4fDApPj4yXSw4Mzg4NjA3PChwPTB8YXJbcCs0Pj4yXSk+Pj4wfDgzODg2MDc9PSgwfHApJjQyOTQ5NjcyOTU8Wj4+PjApe2U9MTQ7YnJlYWsgZX1pZihyPTB8YXJbKHY9Uik+PjJdLDgzODg2MDc8KE49KHY9MHxhclt2KzQ+PjJdKXxnKT4+PjB8ODM4ODYwNz09KDB8TikmNDI5NDk2NzI5NTwocnxtKT4+PjApe2U9MTQ7YnJlYWsgZX1zd2l0Y2goXz0wfGFyW2k+PjJdLFk9MHxhclsxMisoMHxhcltfPj4yXSk+PjJdLE49MHx0YigwfHRiKDB8WiwwfHAsMHxtLDB8ZyksMHxELDB8ciwwfHYpLDB8eGJbNjMmWV0oXyxOLEQpKXtjYXNlIDI6ZT0xNzticmVhayBlO2Nhc2UgMTplPTI2O2JyZWFrIGV9aWYoXz0wfGFyW2k+PjJdLE49MHxhclsyMCsoMHxhcltfPj4yXSk+PjJdLFk9eSxZPTB8dGIoMHxhclsoeT1SKT4+Ml0sMHxhclt5KzQ+PjJdLDB8YXJbWT4+Ml0sMHxhcltZKzQ+PjJdKSwhKDB8eGJbNjMmTl0oXyxZLEQpKSl7ZT0yOTticmVhayBlfWlmKChtPTB8dGIoMHwodj0wfGFyWyhtPUIpPj4yXSksMHxhclttKzQ+PjJdLDB8QywwKSk+Pj4wPD0oZz0oWj0wfGFyW1Y+PjJdKS0ocj0wfGFyW24+PjJdKXwwKT4+PjA/bT4+PjA8Zz4+PjAmJigwfFopIT0oMHwoRz1yK218MCkpJiYoYXJbVj4+Ml09Ryk6KFRBKG4sbS1nfDApLHY9MHxhcltCPj4yXSxyPTB8YXJbbj4+Ml0pLFk9MHxhcltpPj4yXSwwfHhiWzYzJmFyWzE2KygwfGFyW1k+PjJdKT4+Ml1dKFkscitDfDAsdikpYnJlYWs7ZT0zNjticmVhayBlO2Nhc2UgMTppZighKHI9MHxhcltmPj4yXSkpe2U9Mzg7YnJlYWsgZX1hcltvPj4yXT1hcltpPj4yXSx2PTB8YXJbWD4+Ml0sKG09MD09KDB8KGFyW0U+PjJdPXYpKSl8fGJ1KHYpLF89ZSs4fDAsWT1lKzE2fDAsenQodCxyLG8sMHx0YigwfGFyWyhOPVIpPj4yXSwwfGFyW04rND4+Ml0sMHxhcltfPj4yXSwwfGFyW18rND4+Ml0pLEQsMHxhcltZPj4yXSwwfGFyW1krND4+Ml0sbiksKDB8dHJbST4+MF0pPDAmJnZ1KDB8YXJbVz4+Ml0pLG18fGR1KHYpO2JyZWFrO2RlZmF1bHQ6ZT00NjticmVhayBlfWlmKCgwfChlPWUrNDB8MCkpPT0oMHxhKSlicmVhayBBfWlmKDU9PSgwfGUpKXJldHVybiByPTY0K2h8MCxhclsobT04K2h8MCk+PjJdPTQ1MjQsdj0xMitofDAsYXJbaD4+Ml09MTg4LGFyW3I+PjJdPTIwOCxKZig2NCtofChhcls0K2g+PjJdPTApLHYpLGFyWzEzNitoPj4yXT0wLGFyWzE0MCtoPj4yXT0tMSxhcltoPj4yXT00NTA0LGFyW3I+PjJdPTQ1NDQsYXJbbT4+Ml09NDUyNCxTZih2KSxhclt2Pj4yXT00MzQwLGFyWyhtPTQ0K2h8MCk+PjJdPTAsYXJbbSs0Pj4yXT0wLGFyW20rOD4+Ml09MCxhclttKzEyPj4yXT0wLGFyWzYwK2g+PjJdPTI0LGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxYZSh2LGspLCgwfHRyWzExK2s+PjBdKTwwJiZ2dSgwfGFyW2s+PjJdKSxZPTB8V2UoZT04K2h8MCwyMzQ3OSwxOSksXz0wfFdlKDB8S2YoWSwwfGFyWyhfPUIpPj4yXSwwfGFyW18rND4+Ml0pLDIzNDk5LDM1KSxXZSgwfFBmKDB8V2UoMHxLZihfLFk9MHx0YigwfGFyWyhZPUIpPj4yXSwwfGFyW1krND4+Ml0sMHxDLDApLEQpLDIzNTM1LDQwKSw1MzY4NzA5MTIpLDIzNTc2LDYpLEllKGIsdiksb28oQSw2LDFlMyxiKSwoMHx0clsxMStiPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksYXJbaD4+Ml09NDUwNCxhcltyPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsYXJbdj4+Ml09NDM0MCwoMHx0clttKzExPj4wXSk8MCYmdnUoMHxhclttPj4yXSksa2YodiksYmYociksdm9pZCh1cj13KTtpZigxND09KDB8ZSkpe2ZvcihlPTB8aHUoNDgpLGFyW3M+PjJdPWUsYXJbOCtzPj4yXT0tMjE0NzQ4MzYwMCx2PTIzNTgzLG09KHI9ZSkrKGFyWzQrcz4+Ml09MzkpfDA7dHJbcj4+MF09MHx0clt2Pj4wXSx2PXYrMXwwLCgwfChyPXIrMXwwKSk8KDB8bSk7KTtyZXR1cm4odHJbZSszOT4+MF09MCxvbyhBLDIsMWUzLHMpLDA8PSgwfHRyWzExK3M+PjBdKSk/dm9pZCh1cj13KToodnUoMHxhcltzPj4yXSksdm9pZCh1cj13KSl9aWYoMTc9PSgwfGUpKXJldHVybiBlPTB8YXJbbj4+Ml0sKDB8YXJbVj4+Ml0pIT0oMHxlKSYmKGFyW1Y+PjJdPWUpLHI9NjQraHwwLGFyWyhtPTgraHwwKT4+Ml09NDUyNCx2PTEyK2h8MCxhcltoPj4yXT0xODgsYXJbcj4+Ml09MjA4LEpmKDY0K2h8KGFyWzQraD4+Ml09MCksdiksYXJbMTM2K2g+PjJdPTAsYXJbMTQwK2g+PjJdPS0xLGFyW2g+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhclttPj4yXT00NTI0LFNmKHYpLGFyW3Y+PjJdPTQzNDAsYXJbKG09NDQraHwwKT4+Ml09MCxhclttKzQ+PjJdPTAsYXJbbSs4Pj4yXT0wLGFyW20rMTI+PjJdPTAsYXJbNjAraD4+Ml09MjQsYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLFhlKHYsayksKDB8dHJbMTEraz4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLF89MHxXZSgwfFdlKGU9OCtofDAsMjM2MjMsNTgpLDIzNjgyLDI1KSxZPXksV2UoMHxLZihfLFk9MHx0YigwfGFyWyhOPVIpPj4yXSwwfGFyW04rND4+Ml0sMHxhcltZPj4yXSwwfGFyW1krND4+Ml0pLEQpLDE4OTA0LDIpLEllKGQsdiksb28oQSwyLDEwMCxkKSwoMHx0clsxMStkPj4wXSk8MCYmdnUoMHxhcltkPj4yXSksYXJbaD4+Ml09NDUwNCxhcltyPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsYXJbdj4+Ml09NDM0MCwoMHx0clttKzExPj4wXSk8MCYmdnUoMHxhclttPj4yXSksa2YodiksYmYociksdm9pZCh1cj13KTtpZigyNj09KDB8ZSkpcmV0dXJuIGFyW2M+PjJdPTAsYXJbNCtjPj4yXT0wLGFyWzgrYz4+Ml09MCxvbyhBLDIsMTAwLGMpLDA8PSgwfHRyWzExK2M+PjBdKXx8dnUoMHxhcltjPj4yXSksdm9pZCh1cj13KTtpZigyOT09KDB8ZSkpc3IoMjM3MDgsMTkxMDQsMTExNCwyMzcxNik7ZWxzZSBpZigzNj09KDB8ZSkpc3IoMjM3MDgsMTkxMDQsMTEyMiwyMzcxNik7ZWxzZXtpZigzOD09KDB8ZSkpe2ZvcihlPTB8aHUoNjQpLGFyW2w+PjJdPWUsYXJbOCtsPj4yXT0tMjE0NzQ4MzU4NCx2PTIzNzI2LG09KHI9ZSkrKGFyWzQrbD4+Ml09NTQpfDA7dHJbcj4+MF09MHx0clt2Pj4wXSx2PXYrMXwwLCgwfChyPXIrMXwwKSk8KDB8bSk7KTtyZXR1cm4odHJbZSs1ND4+MF09MCxvbyhBLDIsMTAzLGwpLDA8PSgwfHRyWzExK2w+PjBdKSk/dm9pZCh1cj13KToodnUoMHxhcltsPj4yXSksdm9pZCh1cj13KSl9aWYoNDY9PSgwfGUpKXJldHVybiBlPTY0K2h8MCxhclsodj04K2h8MCk+PjJdPTQ1MjQscj0xMitofDAsYXJbaD4+Ml09MTg4LGFyW2U+PjJdPTIwOCxKZig2NCtofChhcls0K2g+PjJdPTApLHIpLGFyWzEzNitoPj4yXT0wLGFyWzE0MCtoPj4yXT0tMSxhcltoPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbdj4+Ml09NDUyNCxTZihyKSxhcltyPj4yXT00MzQwLGFyWyh2PTQ0K2h8MCk+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhclt2KzEyPj4yXT0wLGFyWzYwK2g+PjJdPTI0LGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxYZShyLGspLCgwfHRyWzExK2s+PjBdKTwwJiZ2dSgwfGFyW2s+PjJdKSxZPTB8V2UobT04K2h8MCwyMzc4MSwyNSksdHJbaz4+MF09MHx0cltGPj4wXSxXZSgwfFdlKFksaywxKSwyMzgwNywxNiksSWUodSxyKSxvbyhBLDQsMTAzLHUpLCgwfHRyW3UrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSxhcltoPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbbT4+Ml09NDUyNCxhcltyPj4yXT00MzQwLCgwfHRyW3YrMTE+PjBdKTwwJiZ2dSgwfGFyW3Y+PjJdKSxrZihyKSxiZihlKSx2b2lkKHVyPXcpfX19d2hpbGUoMCk7Xz0wfGFyWyhOPTU2NTkyKSs0Pj4yXSxhclsoWT1BKT4+Ml09YXJbTj4+Ml0sYXJbWSs0Pj4yXT1fLHl1KEErOHwwLDU2NjAwKSx1cj13fWZ1bmN0aW9uIHp0KEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO3JldHVybiB1cj0oYz11cikrMjA4fDAscz1jKzE5MnwwLGs9Yys0OHwwLGQ9YyszNnwwLGw9YysyNHwwLGg9YysxMnwwLHc9YywwPCh0fD0wKT4+PjB8MD09KDB8dCkmKDUzNjg3MDkxMi0obT0oMHxhclsoYT0ob3w9MCkrNHwwKT4+Ml0pLSgwfGFyW28+PjJdKXwwKXwwKT4+PjA8bj4+PjA/KGw9ays2NHwwLGFyWyhiPWsrOHwwKT4+Ml09NDUyNCx1PWsrMTJ8MCxhcltrPj4yXT0xODgsYXJbbD4+Ml09MjA4LEpmKGsrNjR8KGFyW2srND4+Ml09MCksdSksYXJbaysxMzY+PjJdPTAsYXJbaysxNDA+PjJdPS0xLGFyW2s+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKHUpLGFyW3U+PjJdPTQzNDAsYXJbKGI9ays0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbays2MD4+Ml09MjQsYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLFhlKHUscyksKDB8dHJbcysxMT4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLHI9MHxXZSgwfEtmKDB8V2UoZT1rKzh8MCwyMzgyNCwxOSksbix0KSwyMzQ5OSwzNSksV2UoMHxQZigwfFdlKDB8S2YocixuPTB8dGIoMHxtLDAsMHxuLDB8dCksRCksMjM1MzUsNDApLDUzNjg3MDkxMiksMjM1NzYsNiksSWUoZCx1KSxvbyhBLDYsMWUzLGQpLCgwfHRyW2QrMTE+PjBdKTwwJiZ2dSgwfGFyW2Q+PjJdKSxhcltrPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbZT4+Ml09NDUyNCxhclt1Pj4yXT00MzQwLCgwfHRyW2IrMTE+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKSxrZih1KSxiZihsKSx2b2lkKHVyPWMpKTooZD0wfGFyWyhrPXM9ZSs2NHwwKT4+Ml0saz0wfGFyW2srND4+Ml0sZT0wfHRiKDB8KHU9MHxhclsoYj1lKzh8MCk+PjJdKSwwfChiPTB8YXJbYis0Pj4yXSksMHxkLDB8ayksKGc9RCk+Pj4wPGY+Pj4wfCgwfGcpPT0oMHxmKSZlPj4+MDxpPj4+MD8oYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLG9vKEEsMiwxMDAsbCksMDw9KDB8dHJbbCsxMT4+MF0pfHx2dSgwfGFyW2w+PjJdKSx2b2lkKHVyPWMpKTooZT0wfHRiKDB8biwwfHQsMHxpLDB8ZiksYj4+PjA8dD4+PjB8KDB8Yik9PSgwfHQpJnU+Pj4wPG4+Pj4wfGI+Pj4wPChsPUQpPj4+MHwoMHxsKT09KDB8YikmdT4+PjA8ZT4+PjA/KGFyW2g+PjJdPTAsYXJbaCs0Pj4yXT0wLGFyW2grOD4+Ml09MCxvbyhBLDIsMTAwLGgpLDA8PSgwfHRyW2grMTE+PjBdKXx8dnUoMHxhcltoPj4yXSksdm9pZCh1cj1jKSk6KGg9MHxhcltyPj4yXSxiPTB8YXJbMTIrKDB8YXJbaD4+Ml0pPj4yXSxnPTB8dGIoMHxlLDB8bCwwfGQsMHxrKSwoKDB8eGJbNjMmYl0oaCxnLEQpKS0xfDApPj4+MDwyPyhhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTAsb28oQSwyLDEwMCx3KSwwPD0oMHx0clt3KzExPj4wXSl8fHZ1KDB8YXJbdz4+Ml0pLHZvaWQodXI9YykpOih3PTB8YXJbcj4+Ml0saD0wfGFyWzIwKygwfGFyW3c+PjJdKT4+Ml0sZz0wfHRiKDB8YXJbKGc9cyk+PjJdLDB8YXJbZys0Pj4yXSwwfGksMHxmKSwwfHhiWzYzJmhdKHcsZyxEKXx8c3IoMjM3MDgsMTkxMDQsMzAzMSwyMzcxNiksMD09KDB8bikmMD09KDB8dCl8fCgobD0wfHRiKDB8bSwwLDB8biwwfHQpKT4+PjA8PSh1PShiPTB8YXJbYT4+Ml0pLShlPTB8YXJbbz4+Ml0pfDApPj4+MD9sPj4+MDx1Pj4+MCYmKDB8YikhPSgwfCh2PWUrbHwwKSkmJihhclthPj4yXT12KTooVEEobyxsLXV8MCksZT0wfGFyW28+PjJdKSxnPTB8YXJbcj4+Ml0sMHx4Yls2MyZhclsxNisoMHxhcltnPj4yXSk+PjJdXShnLGUrbXwwLG4pfHxzcigyMzcwOCwxOTEwNCwzMDQwLDIzNzE2KSksbj0wfGFyWyhtPTU2NTkyKSs0Pj4yXSxhclsoZz1BKT4+Ml09YXJbbT4+Ml0sYXJbZys0Pj4yXT1uLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWMpKSkpKX1mdW5jdGlvbiBqdChBKXtvclsoQXw9MCkrND4+MV09MixvcltBKzY+PjFdPTIsb3JbQSs4Pj4xXT02LHRyW0ErMTA+PjBdPTF9ZnVuY3Rpb24gSHQoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTA7dXI9KGM9dXIpKzMzNnwwLG89YyszMTZ8MCxhPWMrMTYwfDAsYj1jKzMwNHwwLHQ9KG49YykrMTQ0fDAsdT0wfGFyWyhpfD0wKT4+Ml0saT0wfGFyW3UrNTY+PjJdLHU9MHxhclt1KzYwPj4yXTtBOmRve2lmKCgwfGkpIT0oMHx1KSl7Zm9yKDtsPWkrMTZ8MCwoMHxhcltpPj4yXSkhPSgwfHIpOyl7aWYoKDB8bCk9PSgwfHUpKWJyZWFrIEE7aT1sfXh0KGEsZSs0NHwwKSxsPTB8YXJbaSs0Pj4yXSxzPTB8YXJbaSs4Pj4yXTtlOmRve2lmKCgwfGwpPT0oMHxzKSlnPTM0O2Vsc2V7Zm9yKGQ9NCthfDAsaD04K298MCx3PWs9NCtvfDAsdj1mKzR8MCxtPWYrOHwwO3U9NjU1MzUmKGk9MHxvclsoYj1sKzJ8MCk+PjFdKSxlPVo9MHxhclthPj4yXSwhKHU+Pj4wPigwfGFyW2Q+PjJdKS1aPj4zPj4+MCk7KXthcltrPj4yXT0wLGFyW2g+PjJdPTAsdHJbbz4+MF09MHx0cltsPj4wXTtkb3tpZihpPDwxNj4+MTYpe2lmKGI9MHxhcltlKygoaT11Ky0xfDApPDwzKT4+Ml0sKHU9aT0wfGFyW2UrKGk8PDMpKzQ+PjJdKT8oYnUoaSksaT0wfGFyW2g+PjJdLGFyW3c+PjJdPWIsYXJbaD4+Ml09dSwwfGkmJmR1KGkpKTooYXJbdz4+Ml09YixhcltoPj4yXT11KSwoMHwoaT0wfGFyW3Y+PjJdKSk9PSgwfGFyW20+PjJdKSl7UHQoZixvKTticmVha310cltpPj4wXT0wfHRyW28+PjBdLGFyW2krND4+Ml09YXJbdz4+Ml0sdT0wfGFyW2g+PjJdLChhcltpKzg+PjJdPXUpJiYoYnUodSksaT0wfGFyW3Y+PjJdKSxhclt2Pj4yXT1pKzEyfX13aGlsZSgwKTtpZigwfChpPTB8YXJbaD4+Ml0pJiZkdShpKSwoMHwobD1sKzR8MCkpPT0oMHxzKSl7Zz0zNDticmVhayBlfX1sPW4rNjR8MCxhclsoZT1uKzh8MCk+PjJdPTQ1MjQsdT1uKzEyfDAsYXJbbj4+Ml09MTg4LGFyW2w+PjJdPTIwOCxKZihuKzY0fChhcltuKzQ+PjJdPTApLHUpLGFyW24rMTM2Pj4yXT0wLGFyW24rMTQwPj4yXT0tMSxhcltuPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbZT4+Ml09NDUyNCxTZih1KSxhclt1Pj4yXT00MzQwLGFyWyhlPW4rNDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW24rNjA+PjJdPTI0LGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxYZSh1LG8pLCgwfHRyWzExK28+PjBdKTwwJiZ2dSgwfGFyW28+PjJdKSxaPTB8V2UoaT1uKzh8MCwyMzkwMSwyOCksV2UoMHxMZigwfFdlKDB8V2UoMHx4ZihaLDB8b3JbYj4+MV0pLDIzOTMwLDExKSwyMzk0Miw0KSxyKSwyMzk0NywyMyksSWUodCx1KSxvbyhBLDIsMTE1LHQpLCgwfHRyWzExK3Q+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSxhcltuPj4yXT00NTA0LGFyW2w+PjJdPTQ1NDQsYXJbaT4+Ml09NDUyNCxhclt1Pj4yXT00MzQwLCgwfHRyW2UrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZih1KSxiZihsKSxpPWF9fXdoaWxlKDApO2lmKDM0PT0oMHxnKSYmKFo9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKGk9QSk+PjJdPWFyW3I+PjJdLGFyW2krND4+Ml09Wix5dShBKzh8MCw1NjYwMCksaT1hKSwwfChpPTB8YXJbaT4+Ml0pKXtpZigoMHwobD0wfGFyWyhlPTQrYXwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7dT1sKy04fDAsYXJbZT4+Ml09dSwoMHwobD0obD0wfGFyW2wrLTQ+PjJdKT8oZHUobCksMHxhcltlPj4yXSk6dSkpIT0oMHxpKTspO2k9MHxhclthPj4yXX12dShpKX1yZXR1cm4gdm9pZCh1cj1jKX19d2hpbGUoMCk7bD02NCthfDAsYXJbKGU9OCthfDApPj4yXT00NTI0LHU9MTIrYXwwLGFyW2E+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYoNjQrYXwoYXJbNCthPj4yXT0wKSx1KSxhclsxMzYrYT4+Ml09MCxhclsxNDArYT4+Ml09LTEsYXJbYT4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2U+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoZT00NCthfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcls2MCthPj4yXT0yNCxhcltvPj4yXT0wLGFyWzQrbz4+Ml09MCxhcls4K28+PjJdPTAsWGUodSxvKSwoMHx0clsxMStvPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksV2UoMHxMZigwfFdlKGk9OCthfDAsMjM4NDQsOSksciksMjM4NTQsNDYpLEllKGIsdSksb28oQSwyLDExNixiKSwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksYXJbYT4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2k+PjJdPTQ1MjQsYXJbdT4+Ml09NDM0MCwoMHx0cltlKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksa2YodSksYmYobCksdXI9Y31mdW5jdGlvbiB4dChBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT0wLGFyWyhmPUErNHwwKT4+Ml09MCwocj0obj0oKGFyW0ErOD4+Ml09MCl8YXJbKGk9ZSs0fDApPj4yXSktKDB8YXJbZT4+Ml0pfDApPj4zKSYmKDUzNjg3MDkxMTxyPj4+MCYmemwoKSx0PTB8aHUobiksYXJbZj4+Ml09dCxhcltBPj4yXT10LGFyW0ErOD4+Ml09dCsocjw8MyksKDB8KG49MHxhcltlPj4yXSkpIT0oMHwoZT0wfGFyW2k+PjJdKSkpKWZvcig7YXJbdD4+Ml09YXJbbj4+Ml0sQT0wfGFyW24rND4+Ml0sMHwoYXJbdCs0Pj4yXT1BKSYmYnUoQSksbj1uKzh8MCx0PTgrKDB8YXJbZj4+Ml0pfDAsYXJbZj4+Ml09dCwoMHxuKSE9KDB8ZSk7KTt9ZnVuY3Rpb24gUHQoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO249MHxhclsodT0oQXw9MCkrNHwwKT4+Ml0sYz1pPTB8YXJbQT4+Ml0sMzU3OTEzOTQxPChmPShhPShuLWl8MCkvMTJ8MCkrMXwwKT4+PjAmJnpsKCksdD0obD0oKDB8YXJbKHI9QSs4fDApPj4yXSktaXwwKS8xMnwwKTw8MSx0PWw+Pj4wPDE3ODk1Njk3MD90Pj4+MDxmPj4+MD9mOnQ6MzU3OTEzOTQxO2Rve2lmKHQpe2lmKCEoMzU3OTEzOTQxPHQ+Pj4wKSl7bz0wfGh1KDEyKnR8MCk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIG89MH13aGlsZSgwKTtpZihsPW8rKDEyKnR8MCl8MCx0clsoZj1pPW8rKDEyKmF8MCl8MCk+PjBdPTB8dHJbZT4+MF0sYXJbbysoMTIqYXwwKSs0Pj4yXT1hcltlKzQ+PjJdLHQ9MHxhcltlKzg+PjJdLHQ9KGFyW28rKDEyKmF8MCkrOD4+Ml09dCk/KGJ1KHQpLG49MHxhclt1Pj4yXSwwfGFyW0E+PjJdKTpjLG89aSsxMnwwLCgwfG4pPT0oMHx0KSlpPXQ9bjtlbHNle2Zvcig7bj0oYz1uKSstMTJ8MCx0cltpKy0xMj4+MF09MHx0cltuPj4wXSxhPWMrLTh8MCxhcltpKy04Pj4yXT1hclthPj4yXSxjPWMrLTR8MCxhcltpKy00Pj4yXT1hcltjPj4yXSxhclthPj4yXT0wLGY9aT1mKy0xMnwoYXJbYz4+Ml09MCksKDB8bikhPSgwfHQpOyk7dD0wfGFyW0E+PjJdLGk9MHxhclt1Pj4yXX1pZihhcltBPj4yXT1mLGFyW3U+PjJdPW8sYXJbcj4+Ml09bCwoMHxpKSE9KDB8KG49dCkpKWZvcig7Zj0wfGFyW2krLTQ+PjJdLGk9aSstMTJ8MCwwfGYmJmR1KGYpLCgwfGkpIT0oMHxuKTspO3QmJnZ1KG4pfWZ1bmN0aW9uIEx0KEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3VyPSh0PXVyKSsxNnwwLG49dCxhPTB8YXJbKGl8PTApPj4yXSxpPTB8YXJbYSs1Nj4+Ml0sYT0wfGFyW2ErNjA+PjJdO0E6ZG97aWYoKDB8aSkhPSgwfGEpKXtmb3IoO289aSsxNnwwLCgwfGFyW2k+PjJdKSE9KDB8cik7KXtpZigoMHxvKT09KDB8YSkpYnJlYWsgQTtpPW99eHQobixlKzQ0fDApLGE9MHxhcltpKzQ+PjJdLGM9MHxhcltpKzg+PjJdO2U6ZG97aWYoKDB8YSk9PSgwfGMpKW89QSs0fDAsaT1uLHU9MTU7ZWxzZXtmb3IobD1uKzR8MCxvPUErNHwwOzspe2lmKGk9NjU1MzUmKGI9MHxvclthKzI+PjFdKSxlPXI9MHxhcltuPj4yXSxiPDwxNj4+MTY9PTB8fGk+Pj4wPigwfGFyW2w+PjJdKS1yPj4zPj4+MCl7aT1uLHU9MTU7YnJlYWsgZX1pZihyPTB8YXJbZSsoKGk9aSstMXwwKTw8Myk+PjJdLDB8KGk9MHxhcltlKyhpPDwzKSs0Pj4yXSkmJmJ1KGkpLCgwfGFyW3IrMjA+PjJdKT09KDB8ZikpYnJlYWs7aWYoMHxpJiZkdShpKSwoMHwoYT1hKzR8MCkpPT0oMHxjKSl7aT1uLHU9MTU7YnJlYWsgZX19YXJbQT4+Ml09cixhcltvPj4yXT1pLGk9bn19d2hpbGUoMCk7aWYoMTU9PSgwfHUpJiYoYXJbQT4+Ml09MCxhcltvPj4yXT0wKSwwfChpPTB8YXJbaT4+Ml0pKXtpZigoMHwobz0wfGFyWyhlPW4rNHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7YT1vKy04fDAsYXJbZT4+Ml09YSwoMHwobz0obz0wfGFyW28rLTQ+PjJdKT8oZHUobyksMHxhcltlPj4yXSk6YSkpIT0oMHxpKTspO2k9MHxhcltuPj4yXX12dShpKX1yZXR1cm4gdm9pZCh1cj10KX19d2hpbGUoMCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9dH1mdW5jdGlvbiBLdChBLGUpe0F8PTA7dmFyIHI9MCxpPTAsZj0wO2lmKHI9KGV8PTApKy0xfDAsMTMxMDcyPChlKzY1NTM1fDApPj4+MClmb3IoZT0yO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIGU9MjtpZihmPTB8YXJbQSs3Nj4+Ml0saT0wfGFyW0ErNzI+PjJdLCgwfGYpPT0oMHxlKSl7aWYocj1pK3J8MCwxMzEwNzI8KGUrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7fWVsc2V7aWYocj0oMHxicihpLGUpKSsoMHxicihmLHIpKXwwLDEzMTA3MjwoKGU9MHxicihmLGUpKSs2NTUzNnwwKT4+PjApZm9yKDtyPSgwfHIpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChyKzY1NTM2fDApPj4+MClmb3IoO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYoaT0wfGFyW0ErNjA+PjJdLGY9KDB8YXJbQSs1Nj4+Ml0pLWl8MCwxMzEwNzI8KGkrNjU1MzZ8MCk+Pj4wKWZvcig7Zj0oMHxmKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwoZis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChmPSgwfGYpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoaTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO2Y9KDB8ZikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGYrNjU1MzZ8MCk+Pj4wKWZvcig7aT0oMHxpKS8yfDAsMTMxMDcyPCgoZj0oMHxmKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKCgwfGUpPT0oMHxpKSl7aWYocj1yLWZ8MCwxMzEwNzI8KGUrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChyKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiAwfChBPSgwfChmPXIpKS8oMHwoQT1lKSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8cikvKDB8ZSl8MCl9aWYocj0oMHxicihpLHIpKS0oMHxicihmLGUpKXwwLDEzMTA3MjwoKGU9MHxicihpLGUpKSs2NTUzNnwwKT4+PjApZm9yKDtyPSgwfHIpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKHIrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIDB8KEE9KDB8KGY9cikpLygwfChBPWUpKXwwKTtmb3IoO2U9KDB8ZSkvMnwwLDEzMTA3MjwoKHI9KDB8cikvMnwwKSs2NTUzNnwwKT4+PjA7KTtyZXR1cm4gMHwoQT0oMHxyKS8oMHxlKXwwKX1mdW5jdGlvbiBxdChBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYocj0wfGFyWyhBfD0wKSs2MD4+Ml0saT0oMHxhcltBKzU2Pj4yXSktcnwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihpPSgwfGJyKDB8S3QoQSxlKSxyKSkraXwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKGkrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIEE9aSwwfChlPSgwfChBPShpPSgwfChlPXIpKS8yfDApK0F8MCkpLygwfGUpfDApO2Zvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO3JldHVybiAwfChlPSgwfChlPShlPSgwfHIpLzJ8MCkraXwwKSkvKDB8cil8MCl9ZnVuY3Rpb24gJHQoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MDtpZihyPShlfD0wKSstMXwwLDEzMTA3MjwoZSs2NTUzNXwwKT4+PjApZm9yKGU9MjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBlPTI7aWYoZj0wfGFyW0ErODQ+PjJdLGk9MHxhcltBKzgwPj4yXSwoMHxmKT09KDB8ZSkpe2lmKHI9aStyfDAsMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO31lbHNle2lmKHI9KDB8YnIoaSxlKSkrKDB8YnIoZixyKSl8MCwxMzEwNzI8KChlPTB8YnIoZixlKSkrNjU1MzZ8MCk+Pj4wKWZvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoZT0oMHxlKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7fWlmKGk9MHxhcltBKzY4Pj4yXSxmPSgwfGFyW0ErNjQ+PjJdKS1pfDAsMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO2Y9KDB8ZikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGYrNjU1MzZ8MCk+Pj4wKWZvcig7aT0oMHxpKS8yfDAsMTMxMDcyPCgoZj0oMHxmKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwoKGk8PD0xKSs2NTUzNnwwKT4+PjApZm9yKDtmPSgwfGYpLzJ8MCwxMzEwNzI8KChpPSgwfGkpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChmKzY1NTM2fDApPj4+MClmb3IoO2k9KDB8aSkvMnwwLDEzMTA3MjwoKGY9KDB8ZikvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigoMHxlKT09KDB8aSkpe2lmKHI9ci1mfDAsMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigocis2NTUzNnwwKT4+PjA8PTEzMTA3MilyZXR1cm4gMHwoQT0oMHwoZj0oaT0oMHwoQT1lKSkvMnwwKSsoZj1yKXwwKSkvKDB8QSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8KEE9KEE9KDB8ZSkvMnwwKStyfDApKS8oMHxlKXwwKX1pZihyPSgwfGJyKGkscikpLSgwfGJyKGYsZSkpfDAsMTMxMDcyPCgoZT0wfGJyKGksZSkpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigocis2NTUzNnwwKT4+PjA8PTEzMTA3MilyZXR1cm4gMHwoQT0oMHwoZj0oaT0oMHwoQT1lKSkvMnwwKSsoZj1yKXwwKSkvKDB8QSl8MCk7Zm9yKDtlPSgwfGUpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KEE9KDB8KEE9KEE9KDB8ZSkvMnwwKStyfDApKS8oMHxlKXwwKX1mdW5jdGlvbiBBbyhBLGUpe2V8PTA7dmFyIHI9MCxpPTA7aWYocj0wfGFyWyhBfD0wKSs2OD4+Ml0saT0oMHxhcltBKzY0Pj4yXSktcnwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihpPSgwfGJyKDB8JHQoQSxlKSxyKSkraXwwLDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoKGkrNjU1MzZ8MCk+Pj4wPD0xMzEwNzIpcmV0dXJuIEE9aSwwfChlPSgwfChBPShpPSgwfChlPXIpKS8yfDApK0F8MCkpLygwfGUpfDApO2Zvcig7cj0oMHxyKS8yfDAsMTMxMDcyPCgoaT0oMHxpKS8yfDApKzY1NTM2fDApPj4+MDspO3JldHVybiAwfChlPSgwfChlPShlPSgwfHIpLzJ8MCkraXwwKSkvKDB8cil8MCl9ZnVuY3Rpb24gZW8oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7aWYobj0wfGFyWyhBfD0wKSs2MD4+Ml0sZT0oMHxhcltBKzU2Pj4yXSktbnwwLGY9MTMxMDcyPChuKzY1NTM2fDApPj4+MClmb3Iocj1lLEE9bjtyPSgwfHIpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSByPWUsQT1uO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoQTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKEE9KDB8QSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7QT0oMHxBKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGk9MC1yfDAsMT09KDB8QSkpaWYoMTMxMDcyPCg2NTUzNi1yfDApPj4+MClmb3IoQT0xO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIEE9MTtlbHNle2lmKDEzMTA3MjwoQSs2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYocj0oKCgwfEEpLzJ8MCkraXwwKS8oMHxBKXwwLGYpZm9yKEE9bjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBBPW47aWYoMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KChBPDw9MSkrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgoQT0oMHxBKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChlKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiBuPSgwfChmPShpPSgwfChuPUEpKS8yfDApKyhmPWUpfDApKS8oMHxuKXwwLDB8KG49KGY9MS1yfDApK258MCk7Zm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KG49KGY9MS1yfDApKyhuPSgwfChuPShuPSgwfEEpLzJ8MCkrZXwwKSkvKDB8QSl8MCl8MCl9ZnVuY3Rpb24gcm8oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTA7aWYobj0wfGFyWyhBfD0wKSs2OD4+Ml0sZT0oMHxhcltBKzY0Pj4yXSktbnwwLGY9MTMxMDcyPChuKzY1NTM2fDApPj4+MClmb3Iocj1lLEE9bjtyPSgwfHIpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSByPWUsQT1uO2lmKDEzMTA3Mjwocis2NTUzNnwwKT4+PjApZm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChyPSgwfHIpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPCgoQTw8PTEpKzY1NTM2fDApPj4+MClmb3IoO3I9KDB8cikvMnwwLDEzMTA3MjwoKEE9KDB8QSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KHIrNjU1MzZ8MCk+Pj4wKWZvcig7QT0oMHxBKS8yfDAsMTMxMDcyPCgocj0oMHxyKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGk9MC1yfDAsMT09KDB8QSkpaWYoMTMxMDcyPCg2NTUzNi1yfDApPj4+MClmb3IoQT0xO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtlbHNlIEE9MTtlbHNle2lmKDEzMTA3MjwoQSs2NTUzNnwwKT4+PjApZm9yKDtpPSgwfGkpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChpKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGk9KDB8aSkvMnwwKSs2NTUzNnwwKT4+PjA7KTt9aWYocj0oKCgwfEEpLzJ8MCkraXwwKS8oMHxBKXwwLGYpZm9yKEE9bjtlPSgwfGUpLzJ8MCwxMzEwNzI8KChBPSgwfEEpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7ZWxzZSBBPW47aWYoMTMxMDcyPChlKzY1NTM2fDApPj4+MClmb3IoO0E9KDB8QSkvMnwwLDEzMTA3MjwoKGU9KDB8ZSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KChBPDw9MSkrNjU1MzZ8MCk+Pj4wKWZvcig7ZT0oMHxlKS8yfDAsMTMxMDcyPCgoQT0oMHxBKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKChlKzY1NTM2fDApPj4+MDw9MTMxMDcyKXJldHVybiBuPSgwfChmPShpPSgwfChuPUEpKS8yfDApKyhmPWUpfDApKS8oMHxuKXwwLDB8KG49KGY9MS1yfDApK258MCk7Zm9yKDtBPSgwfEEpLzJ8MCwxMzEwNzI8KChlPSgwfGUpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7cmV0dXJuIDB8KG49KGY9MS1yfDApKyhuPSgwfChuPShuPSgwfEEpLzJ8MCkrZXwwKSkvKDB8QSl8MCl8MCl9ZnVuY3Rpb24gaW8oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wO2lmKGFyWyhBfD0wKT4+Ml09MCxhclsobj1BKzR8MCk+PjJdPTAsKChhcltBKzg+PjJdPTApfCh0PTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KGY9MHxhcltlKzYwPj4yXSkpKXtpPUErOHwwLGU9dDtkb3tkb3tpZigoMHxhcltlKzQ4Pj4yXSk9PSgwfHIpKXtpZigoMHwodD0wfGFyW24+PjJdKSk9PSgwfGFyW2k+PjJdKSl7ZGUoQSxlKTticmVha31zZSh0LGUpLGFyW24+PjJdPTY0KygwfGFyW24+PjJdKTticmVha319d2hpbGUoMCk7ZT1lKzY0fDB9d2hpbGUoKDB8ZSkhPSgwfGYpKX19ZnVuY3Rpb24gZm8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGY9MDtmPTB8YXJbKGV8PTApKzU2Pj4yXSxlPTB8YXJbZSs2MD4+Ml07QTpkb3tpZigoMHxmKSE9KDB8ZSkpe2Zvcig7KDB8YXJbZis0OD4+Ml0pIT0oMHxyKXx8KDB8YXJbZisyMD4+Ml0pIT0oMHxpKTspaWYoKDB8KGY9Zis2NHwwKSk9PSgwfGUpKWJyZWFrIEE7cmV0dXJuIHZvaWQgR2UoQSxmKzUyfDApfX13aGlsZSgwKTthcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTB9ZnVuY3Rpb24gbm8oQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTA7aWYodXI9KHU9dXIpKzMyfDAsbz11KzIwfDAsdD11KzE2fDAsbj11KzEyfDAsYT11Kzh8MCxjPXUrNHwwLGw9dSwoMHwoYj0wfGFyWyhBfD0wKSs5Mj4+Ml0pKT09KDB8KGY9MHxhcltBKzk2Pj4yXSkpKXJldHVybiB1cj11LDE7cj1lKzR8MCxpPWUrOHwwO0E6Zm9yKDs7KXtpZigoMHwoQT0wfGFyW2IrND4+Ml0pKSE9KDB8KHA9MHxhcltiKzg+PjJdKSkpZG97aWYodz0oKDB8YXJbKFo9QSs0fDApPj4yXSktKDB8YXJbQT4+Ml0pfDApPj4+MjQmMjU1LHM9MHxhcltyPj4yXSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTk7YnJlYWsgQX1rPShoPWQtZ3wwKTw8MSxoPShrPWg+Pj4wPDEwNzM3NDE4MjM/az4+PjA8cz4+PjA/czprOjIxNDc0ODM2NDcpPzB8aHUoayk6MCx0clsoZD1oK3Z8MCk+PjBdPXcscz1kKzF8MCxkPWQrKDAtdil8MCwwPCgwfHYpJiZoYigwfGQsMHxtLDB8diksYXJbZT4+Ml09ZCxhcltyPj4yXT1zLGFyW2k+PjJdPWgrayxnJiYodnUobSkscz0wfGFyW3I+PjJdKX1lbHNlIHRyW3M+PjBdPXcscz0xKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPXM7aWYodz0oKDB8YXJbWj4+Ml0pLSgwfGFyW0E+PjJdKXwwKT4+PjE2JjI1NSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTE5O2JyZWFrIEF9az0oaD1kLWd8MCk8PDEsaD0oaz1oPj4+MDwxMDczNzQxODIzP2s+Pj4wPHM+Pj4wP3M6azoyMTQ3NDgzNjQ3KT8wfGh1KGspOjAsdHJbKGQ9aCt2fDApPj4wXT13LHM9ZCsxfDAsZD1kKygwLXYpfDAsMDwoMHx2KSYmaGIoMHxkLDB8bSwwfHYpLGFyW2U+PjJdPWQsYXJbcj4+Ml09cyxhcltpPj4yXT1oK2ssZyYmKHZ1KG0pLHM9MHxhcltyPj4yXSl9ZWxzZSB0cltzPj4wXT13LHM9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1zO2lmKHc9KCgwfGFyW1o+PjJdKS0oMHxhcltBPj4yXSl8MCk+Pj44JjI1NSwoZD1nPTB8YXJbaT4+Ml0pPj4+MDw9cz4+PjApe2lmKG09Zz0wfGFyW2U+PjJdLCgwfChzPSh2PXMtZ3wwKSsxfDApKTwwKXtBPTI5O2JyZWFrIEF9az0oaD1kLWd8MCk8PDEsaD0oaz1oPj4+MDwxMDczNzQxODIzP2s+Pj4wPHM+Pj4wP3M6azoyMTQ3NDgzNjQ3KT8wfGh1KGspOjAsdHJbKGQ9aCt2fDApPj4wXT13LHM9ZCsxfDAsZD1kKygwLXYpfDAsMDwoMHx2KSYmaGIoMHxkLDB8bSwwfHYpLGFyW2U+PjJdPWQsYXJbcj4+Ml09cyxhcltpPj4yXT1oK2ssZyYmKHZ1KG0pLHM9MHxhcltyPj4yXSl9ZWxzZSB0cltzPj4wXT13LHM9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1zO2lmKHc9KDB8YXJbWj4+Ml0pLSgwfGFyW0E+PjJdKSYyNTUsKGQ9Zz0wfGFyW2k+PjJdKT4+PjA8PXM+Pj4wKXtpZihtPWc9MHxhcltlPj4yXSwoMHwocz0odj1zLWd8MCkrMXwwKSk8MCl7QT0zOTticmVhayBBfWs9KGg9ZC1nfDApPDwxLGg9KGs9aD4+PjA8MTA3Mzc0MTgyMz9rPj4+MDxzPj4+MD9zOms6MjE0NzQ4MzY0Nyk/MHxodShrKTowLHRyWyhkPWgrdnwwKT4+MF09dyxzPWQrMXwwLGQ9ZCsoMC12KXwwLDA8KDB8dikmJmhiKDB8ZCwwfG0sMHx2KSxhcltlPj4yXT1kLGFyW3I+PjJdPXMsYXJbaT4+Ml09aCtrLGcmJih2dShtKSxzPTB8YXJbcj4+Ml0pfWVsc2UgdHJbcz4+MF09dyxzPTErKDB8YXJbcj4+Ml0pfDAsYXJbcj4+Ml09czthclthPj4yXT1zLGFyW2M+PjJdPWFyW0E+PjJdLGFyW2w+PjJdPWFyW1o+PjJdLGFyW24+PjJdPWFyW2E+PjJdLGFyW3Q+PjJdPWFyW2M+PjJdLGFyW28+PjJdPWFyW2w+PjJdLHRvKGUsbix0LG8pLEE9QSsxMnwwfXdoaWxlKCgwfEEpIT0oMHxwKSk7aWYoKDB8KGI9YisxNnwwKSk9PSgwfGYpKXtBPTM7YnJlYWt9fXJldHVybiAzPT0oMHxBKT8odXI9dSwxKTooOSE9KDB8QSkmJjE5IT0oMHxBKSYmMjkhPSgwfEEpJiYzOSE9KDB8QSl8fHpsKCksMCl9ZnVuY3Rpb24gdG8oQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2lmKGU9KHU9Zj0wfGFyWyhBfD0wKT4+Ml0pKyhiPSgwfGFyW2U+PjJdKS11fDApfDAsYT0wfGFyW3I+PjJdLHQ9Yz0wfGFyW2k+PjJdLCgwfChzPWMtYXwwKSk8PTApcmV0dXJuIDB8KGQ9ZSk7aWYoKDB8cyk8PSgobD0wfGFyWyhvPUErOHwwKT4+Ml0pLShpPW49MHxhclsoZD1BKzR8MCk+PjJdKXwwKSl7aWYoKDB8KGw9aS1lfDApKTwoMHxzKSl7aWYoKDB8KGM9aT1hK2x8MCkpPT0oMHx0KSlpPW47ZWxzZXtmb3IoYT1uO3RyW2E+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCxhPTErKDB8YXJbZD4+Ml0pfDAsYXJbZD4+Ml09YSwoMHxpKSE9KDB8dCk7KTtpPWF9aWYoISgwPCgwfGwpKSlyZXR1cm4gMHwoZD1lKTt1PWl9ZWxzZSB1PW47aWYoKGk9ZSsobD11LShlK3MpfDApfDApPj4+MDxuPj4+MClmb3IoYT11O3RyW2E+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCxhPTErKDB8YXJbZD4+Ml0pfDAsYXJbZD4+Ml09YSwoMHxpKSE9KDB8bik7KTtpZigwfGwmJndiKHUrKDAtbCl8MCwwfGUsMHxsKSwoMHwoaT0wfGFyW3I+PjJdKSk9PSgwfGMpKXJldHVybiAwfChkPWUpO2ZvcihhPWU7dHJbYT4+MF09MHx0cltpPj4wXSwoMHwoaT1pKzF8MCkpIT0oMHxjKTspYT1hKzF8MDtyZXR1cm4gMHxlfWlmKCgwfChpPWktdStzfDApKTwwJiZ6bCgpLGM9KHU9bC11fDApPDwxLGM9dT4+PjA8MTA3Mzc0MTgyMz9jPj4+MDxpPj4+MD9pOmM6MjE0NzQ4MzY0Nyx1PWUsaT1zPShsPWM/MHxodShjKTowKStifDAsYj1sK2N8MCwoMHxhKT09KDB8dCkpYz1mO2Vsc2V7Zm9yKGM9czt0cltjPj4wXT0wfHRyW2E+PjBdLGk9Yz1pKzF8MCwoMHwoYT1hKzF8MCkpIT0oMHx0KTspO2M9MHxhcltBPj4yXX1yZXR1cm4gbD1zKygwLShhPXUtY3wwKSl8MCwwPCgwfGEpJiZoYigwfGwsMHxjLDB8YSksZT0wPCgwfChhPSgwfGFyW2Q+PjJdKS11fDApKT8oaGIoMHxpLDB8ZSwwfGEpLGk9aSthfDAsMHxhcltBPj4yXSk6YyxhcltBPj4yXT1sLGFyW2Q+PjJdPWksYXJbbz4+Ml09YixlJiZ2dShlKSwwfChkPXMpfWZ1bmN0aW9uIG9vKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wLGFyWyhBfD0wKT4+Ml09ZSxhcltBKzQ+PjJdPXIseXUoQSs4fDAsaSl9ZnVuY3Rpb24gYW8oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KG49dXIpKzE3NnwwLG89bisxNjB8MCxpPW4rMTZ8MCxmPW4sdD0wfGFyWyhlfD0wKT4+Ml0sIXIpcmV0dXJuIGFyW0E+PjJdPXQsYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGU9MHxhclsoZT02MTY4KT4+Ml0sYXJbKEE9QSs4fDApPj4yXT1lLHZvaWQodXI9bik7aWYodCl7c3dpdGNoKHU9NjQraXwwLGFyWyhzPTgraXwwKT4+Ml09NDUyNCxiPTEyK2l8MCxhcltpPj4yXT0xODgsYXJbdT4+Ml09MjA4LEpmKDY0K2l8KGFyWzQraT4+Ml09MCksYiksYXJbMTM2K2k+PjJdPTAsYXJbMTQwK2k+PjJdPS0xLGFyW2k+PjJdPTQ1MDQsYXJbdT4+Ml09NDU0NCxhcltzPj4yXT00NTI0LFNmKGIpLGFyW2I+PjJdPTQzNDAsYXJbKHM9NDQraXwwKT4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3MrMTI+PjJdPTAsYXJbNjAraT4+Ml09MjQsYXJbbz4+Ml09MCxhcltvKzQ+PjJdPTAsYXJbbys4Pj4yXT0wLFhlKGIsbyksKDB8dHJbbysxMT4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLGw9OCtpfDAsMHxhcltlPj4yXSl7Y2FzZSAwOmE9MzIyMTU7YnJlYWs7Y2FzZSAxOmE9MjQyNDU7YnJlYWs7Y2FzZSAyOmE9MjQyMzE7YnJlYWs7Y2FzZSAzOmE9MjQyMDk7YnJlYWs7Y2FzZSA0OmE9MjQxODk7YnJlYWs7Y2FzZSA1OmE9MjQxNzc7YnJlYWs7Y2FzZSA2OmE9MjQxNTM7YnJlYWs7Y2FzZSA3OmE9MjQxMTk7YnJlYWs7Y2FzZSA4OmE9MjQwODU7YnJlYWs7Y2FzZSA5OmE9MjQwNDA7YnJlYWs7Y2FzZSAxMDphPTI0MDExO2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksMjM5ODUsNzQsMjM5OTQpfWM9MHxXZSgwfFdlKGwsYSwwfFZjKGEpKSwyNTM5MiwyKSxXZShjLGE9MHxmdW5jdGlvbihBKXt2YXIgZT0wO3N3aXRjaCgwfChBfD0wKSl7Y2FzZSAwOmU9MjUzODA7YnJlYWs7Y2FzZSAxMDA6ZT0yNTM1NzticmVhaztjYXNlIDEwMTplPTI1MzQwO2JyZWFrO2Nhc2UgMTE4OmU9MjUzMjI7YnJlYWs7Y2FzZSAxMTk6ZT0yNTMwMjticmVhaztjYXNlIDEwMjplPTI1Mjg4O2JyZWFrO2Nhc2UgMTAzOmU9MjUyNzQ7YnJlYWs7Y2FzZSAxMDQ6ZT0yNTI2MDticmVhaztjYXNlIDEwNTplPTI1MjQ2O2JyZWFrO2Nhc2UgMTA2OmU9MjUyMzI7YnJlYWs7Y2FzZSAxMzE6ZT0yNTIxODticmVhaztjYXNlIDEwNzplPTI1MjA0O2JyZWFrO2Nhc2UgMTA4OmU9MjUxOTA7YnJlYWs7Y2FzZSAxMDk6ZT0yNTE3NjticmVhaztjYXNlIDExMDplPTI1MTYyO2JyZWFrO2Nhc2UgMTExOmU9MjUxNDg7YnJlYWs7Y2FzZSAxMTI6ZT0yNTEzNDticmVhaztjYXNlIDExMzplPTI1MTIwO2JyZWFrO2Nhc2UgMTI1OmU9MjUxMDY7YnJlYWs7Y2FzZSAxMTQ6ZT0yNTA4NTticmVhaztjYXNlIDExNTplPTI1MDM5O2JyZWFrO2Nhc2UgMTE2OmU9MjUwMDg7YnJlYWs7Y2FzZSAxMTc6ZT0yNDk5MTticmVhaztjYXNlIDEyMDplPTI0OTU0O2JyZWFrO2Nhc2UgMTIxOmU9MjQ5MzM7YnJlYWs7Y2FzZSAxMjI6ZT0yNDg5NjticmVhaztjYXNlIDEyMzplPTI0ODYwO2JyZWFrO2Nhc2UgMTI0OmU9MjQ4MzM7YnJlYWs7Y2FzZSAxMjY6ZT0yNDgwNjticmVhaztjYXNlIDEyNzplPTI0Nzc1O2JyZWFrO2Nhc2UgMTI4OmU9MjQ3NDk7YnJlYWs7Y2FzZSAxMjk6ZT0yNDczMDticmVhaztjYXNlIDEzMDplPTI0NzEzO2JyZWFrO2Nhc2UgMWUzOmU9MjQ2ODk7YnJlYWs7Y2FzZSAyZTM6ZT0yNDY1NzticmVhaztjYXNlIDIwMDE6ZT0yNDYzNDticmVhaztjYXNlIDIwMDI6ZT0yNDU5NjticmVhaztjYXNlIDIwMDM6ZT0yNDU0NjticmVhaztjYXNlIDIwMDQ6ZT0yNDQ5NjticmVhaztjYXNlIDIwMDU6ZT0yNDQ3NDticmVhaztjYXNlIDIwMDY6ZT0yNDQ1MDticmVhaztjYXNlIDNlMzplPTI0NDMyO2JyZWFrO2Nhc2UgMzAwMTplPTI0NDA5O2JyZWFrO2Nhc2UgMzAwMjplPTI0Mzg0O2JyZWFrO2Nhc2UgMzAwMzplPTI0MzU1O2JyZWFrO2Nhc2UgMzAwNDplPTI0MzE4O2JyZWFrO2Nhc2UgNGUzOmU9MjQyOTY7YnJlYWs7Y2FzZSA1ZTM6ZT0yNDI3MTticmVhaztkZWZhdWx0OnNyKDU1NzM5LDIzOTg1LDE5OCwyMzk5NCl9cmV0dXJuIDB8ZX0oMHxhclsobz1lKzR8MCk+PjJdKSwwfFZjKGEpKSwodD0wfHRyWyhjPShhPWUrOHwwKSsxMXwwKT4+MF0pPDwyND4+MjQ8MD90PTB8YXJbZSsxMj4+Ml06dCY9MjU1LDB8dCYmKGQ9MHxXZShsLDI1MzkyLDIpLFdlKGQsKHQ9KGM9MHx0cltjPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2E+PjJdOmEsdD8wfGFyW2UrMTI+PjJdOjI1NSZjKSksSWUoZixiKSxFdShyLGYpLHQ9KDB8dHJbcisxMT4+MF0pPDA/MHxhcltyPj4yXTpyLGFyWyhhPXIrMTJ8MCk+PjJdPXQsKDB8dHJbZisxMT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLGFyW2k+PjJdPTQ1MDQsYXJbdT4+Ml09NDU0NCxhcltsPj4yXT00NTI0LGFyW2I+PjJdPTQzNDAsKDB8dHJbcysxMT4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLGtmKGIpLGJmKHUpLHQ9MHxhcltlPj4yXX1lbHNlIGFyWyhhPXIrMTJ8MCk+PjJdPTMyMjE1LG89ZSs0fDAsdD0wO2FyW0E+PjJdPXQsYXJbQSs0Pj4yXT1hcltvPj4yXSxlPTB8YXJbKGU9YSk+PjJdLGFyWyhkPUErOHwwKT4+Ml09ZSx1cj1ufWZ1bmN0aW9uIGNvKEEpe3ZhciBlLHIsaTtmb3IoYXJbKEF8PTApKzExMj4+Ml09MCxyPUErMTEyfChhcltBKzExNj4+Ml09MCksZT1pPUErMTA4fDA7KDB8KEE9QSs0fChhcltBPj4yXT0wKSkpPCgwfGUpOyk7YXJbaT4+Ml09cn1mdW5jdGlvbiBsbyhBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYodW8oKEF8PTApKzEwOHwwLDB8YXJbQSsxMTI+PjJdKSwwfChyPTB8YXJbQSsxMDQ+PjJdKSYmZHUociksMHwocj0wfGFyW0ErOTY+PjJdKSYmZHUociksMHwocj0wfGFyW0ErODg+PjJdKSYmZHUociksMHwocj0wfGFyW0ErODA+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNzI+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNjQ+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNTY+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNDg+PjJdKSYmZHUociksMHwocj0wfGFyW0ErNDA+PjJdKSYmZHUociksMHwocj0wfGFyW0ErMzI+PjJdKSYmZHUociksMHwocj0wfGFyW0ErMjQ+PjJdKSYmZHUociksMHwocj0wfGFyWyhlPUErOHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErMTJ8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9KHI9MHxhcltBKzQ+PjJdKSYmZHUocil9ZnVuY3Rpb24gdW8oQSxlKXtBfD0wLChlfD0wKSYmKHVvKEEsMHxhcltlPj4yXSksdW8oQSwwfGFyW2UrND4+Ml0pLDB8KEE9MHxhcltlKzI0Pj4yXSkmJmR1KEEpLHZ1KGUpKX1mdW5jdGlvbiBibyhBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYT0wO3VyPShvPXVyKSs0OHwwLG49KHQ9bykrMzJ8MCxmPTB8YXJbKHJ8PTApPj4yXSwwfChhPTB8YXJbcis0Pj4yXSkmJmJ1KGEpLGFyW2U+PjJdPWYscj0wfGFyWyhpPWUrNHwwKT4+Ml0sYXJbaT4+Ml09YSxyPyhkdShyKSxyPTB8YXJbZT4+Ml0sYT0wfGFyW2k+PjJdKTpyPWYsYXJbbj4+Ml09ciwwfChhclsocj00K258MCk+PjJdPWEpJiZidShhKSxXQSh0LG4sLTEsMjE0NzQ4MzY0NywwKSwwfChyPTB8YXJbcj4+Ml0pJiZkdShyKSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MDt1cj0ocz11cikrMjg4fDAsdD1zKzI2NHwwLEM9cysxMDh8MCxvPXMrOTZ8MCxjPXMrODR8MCxsPXMrNzJ8MCx1PXMrNjB8MCxSPXMrNDh8MCxOPXMrMzZ8MCxfPXMrMjR8MCxRPXMrMTJ8MCxpPTQrKGI9KEQ9cykrMjc2fDApfDAsdz0yNCsocnw9MCl8MCx2PXIrMTZ8MCxtPTEyKyhlfD0wKXwwLGc9ZSsxNnwwLFo9ZSs4fDAscD1lKzM2fDAseT1lKzQwfDAsQj1lKzIwfDAsRT1lKzI0fDAsbj0xMSsoZj04KyhhPXMrMTIwfDApfDApfDA7Zm9yKDs7KXtpZihhcltiPj4yXT0wLGFyW2k+PjJdPTAsQWUoYSxyLGIpLCgwfGFyW2E+PjJdKSE9KDB8YXJbMTQxNDhdKSl7WT00MDticmVha31pZigwfHRyW3c+PjBdKXtZPTM1O2JyZWFrfWlmKDA9PSgwfGFyWyhZPXYpPj4yXSkmMD09KDB8YXJbWSs0Pj4yXSkpe1k9MzA7YnJlYWt9KDB8KGQ9MHxhclttPj4yXSkpPT0oMHxhcltnPj4yXSk/VXQoWixiKTooYXJbZD4+Ml09YXJbYj4+Ml0saz0wfGFyW2k+PjJdLChhcltkKzQ+PjJdPWspJiYoYnUoayksZD0wfGFyW20+PjJdKSxhclttPj4yXT1kKzgpLGs9MHxhcltiPj4yXSwxODM1MzY1NDczPT0oMHwoZD0wfGFyW2srMjA+PjJdKSkmJigwIT0oMHxrKSYmMCE9KDB8KFg9MHxxdShrLDEyOCwxNjAsMCkpKT8oZD1YLGg9MHxhcltpPj4yXSwoaz1oKSYmYnUoaCkpOms9ZD0wLGFyW3A+PjJdPWQsZD0wfGFyW3k+PjJdLGFyW3k+PjJdPWssMHxkJiZkdShkKSxrPTB8YXJbYj4+Ml0sZD0wfGFyW2srMjA+PjJdKSwxNzE4OTA5Mjk2PT0oMHxkKSYmKDAhPSgwfGspJiYwIT0oMHwoVz0wfHF1KGssMTI4LDE0NCwwKSkpPyhkPVcsaD0wfGFyW2k+PjJdLChrPWgpJiZidShoKSk6az1kPTAsYXJbQj4+Ml09ZCxkPTB8YXJbRT4+Ml0sYXJbRT4+Ml09aywwfGQmJmR1KGQpKSwoMHx0cltuPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksMHwoZD0wfGFyW2k+PjJdKSYmZHUoZCl9MzAhPSgwfFkpJiYzNSE9KDB8WSkmJjQwIT0oMHxZKXx8KCgwfHRyW24+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwwfChkPTB8YXJbaT4+Ml0pJiZkdShkKSk7aWYoIShrPTB8YXJbKGQ9ZSsyMHwwKT4+Ml0pKXJldHVybiBhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSwyLDEwMix0KSwwPD0oMHx0clsxMSt0Pj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLHVyPXM7aWYoISgwfFN0KGssMTc1MTQ3NjU3OSl8fDB8U3QoMHxhcltkPj4yXSwxNzUxNDc2NjAwKXx8MHxTdCgwfGFyW2Q+PjJdLDE4MzU2MjM5ODUpKSYmISgwfFN0KDB8YXJbZD4+Ml0sMTYzNTE1MDE4MikpKXJldHVybiBrPTY0K2F8MCxhclsodz04K2F8MCk+PjJdPTQ1MjQsaD0xMithfDAsYXJbYT4+Ml09MTg4LGFyW2s+PjJdPTIwOCxhcls0K2E+PjJdPTAsSmYoNjQrYXwwLGgpLGFyWzEzNithPj4yXT0wLGFyWzE0MCthPj4yXT0tMSxhclthPj4yXT00NTA0LGFyW2s+PjJdPTQ1NDQsYXJbdz4+Ml09NDUyNCxTZihoKSxhcltoPj4yXT00MzQwLGFyWyh3PTQ0K2F8MCk+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCxhclt3KzEyPj4yXT0wLGFyWzYwK2E+PjJdPTI0LGFyW2I+PjJdPTAsYXJbNCtiPj4yXT0wLGFyWzgrYj4+Ml09MCxYZShoLGIpLCgwfHRyWzExK2I+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKSxXZShkPTgrYXwwLDI1Mzk1LDQ0KSxJZShDLGgpLG9vKEEsMywwLEMpLCgwfHRyW0MrMTE+PjBdKTwwJiZ2dSgwfGFyW0M+PjJdKSxhclthPj4yXT00NTA0LGFyW2s+PjJdPTQ1NDQsYXJbZD4+Ml09NDUyNCxhcltoPj4yXT00MzQwLCgwfHRyW3crMTE+PjBdKTwwJiZ2dSgwfGFyW3c+PjJdKSxrZihoKSxiZihrKSx1cj1zO2lmKCEoZD0wfGFyWyh2PWUrMzZ8MCk+PjJdKSlyZXR1cm4gYXJbbz4+Ml09MCxhcls0K28+PjJdPTAsYXJbOCtvPj4yXT0wLG9vKEEsMiwxMDQsbyksMDw9KDB8dHJbMTErbz4+MF0pfHx2dSgwfGFyW28+PjJdKSx1cj1zO1R0KGIsZCwxNzUxNDExODI2KSxrPTAhPSgwfChkPTB8YXJbYj4+Ml0pKSYmMCE9KDB8KEk9MHxxdShkLDEyOCwxMTI4LDApKSk/KGQ9SSxrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyhoPWUrMjh8MCk+PjJdPWQsZD0wfGFyWyhDPWUrMzJ8MCk+PjJdLGFyW0M+PjJdPWssMHxkJiZkdShkKTswfChkPTB8YXJbNCtiPj4yXSkmJmR1KGQpO2lmKDB8KEM9MHxhcltoPj4yXSkmJjE4ODU5NTQ5MzIhPSgwfGFyW0MrNjA+PjJdKSlyZXR1cm4gYXJbYz4+Ml09MCxhcls0K2M+PjJdPTAsYXJbOCtjPj4yXT0wLG9vKEEsMiwxMTQsYyksMDw9KDB8dHJbMTErYz4+MF0pfHx2dSgwfGFyW2M+PjJdKSx1cj1zO1R0KGIsMHxhclt2Pj4yXSwxODg1OTU5Mjc3KSxrPTAhPSgwfChkPTB8YXJbYj4+Ml0pKSYmMCE9KDB8KEc9MHxxdShkLDEyOCwxMDk2LDApKSk/KGQ9RyxrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyhoPWUrODR8MCk+PjJdPWQsZD0wfGFyWyhHPWUrODh8MCk+PjJdLGFyW0c+PjJdPWssMHxkJiZkdShkKTswfChkPTB8YXJbNCtiPj4yXSkmJmR1KGQpO2lmKCEoMHxhcltoPj4yXSkpcmV0dXJuIGFyW2w+PjJdPTAsYXJbNCtsPj4yXT0wLGFyWzgrbD4+Ml09MCxvbyhBLDIsMTA3LGwpLDA8PSgwfHRyWzExK2w+PjBdKXx8dnUoMHxhcltsPj4yXSksdXI9cztUdChiLDB8YXJbdj4+Ml0sMTc2ODk3NzAwOCksaz0wIT0oMHwoZD0wfGFyW2I+PjJdKSkmJjAhPSgwfChWPTB8cXUoZCwxMjgsOTY4LDApKSk/KGQ9VixrPTB8YXJbNCtiPj4yXSwoaD1rKSYmYnUoayksaCk6ZD0wO2FyWyh3PWUrMTAwfDApPj4yXT1kLGQ9MHxhclsoVj1lKzEwNHwwKT4+Ml0sYXJbVj4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7aWYoIShkPTB8YXJbdz4+Ml0pKXJldHVybiBhclt1Pj4yXT0wLGFyWzQrdT4+Ml09MCxhcls4K3U+PjJdPTAsb28oQSwyLDExMix1KSwwPD0oMHx0clsxMSt1Pj4wXSl8fHZ1KDB8YXJbdT4+Ml0pLHVyPXM7VHQoYixkLDE3Njg5NzMxNjcpLGs9MCE9KDB8KGQ9MHxhcltiPj4yXSkpJiYwIT0oMHwoRj0wfHF1KGQsMTI4LDkzNiwwKSkpPyhkPUYsaz0wfGFyWzQrYj4+Ml0sKGg9aykmJmJ1KGspLGgpOmQ9MDthclsoaD1lKzQ0fDApPj4yXT1kLGQ9MHxhclsoRj1lKzQ4fDApPj4yXSxhcltGPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKDB8YXJbaD4+Ml0pKXJldHVybiBhcltSPj4yXT0wLGFyW1IrND4+Ml09MCxhcltSKzg+PjJdPTAsb28oQSwyLDEwOCxSKSwwPD0oMHx0cltSKzExPj4wXSl8fHZ1KDB8YXJbUj4+Ml0pLHVyPXM7VHQoYiwwfGFyW3c+PjJdLDE3Njg5NzU3MTMpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCw5MDQsMCkpKXtrPWQ9MDticmVha31pZihrPTB8YXJbNCtiPj4yXSwhKGg9aykpe2s9aDticmVha31idShrKSxrPWh9ZWxzZSBrPWQ9MH13aGlsZSgwKTthclsoaD1lKzUyfDApPj4yXT1kLGQ9MHxhclsoUj1lKzU2fDApPj4yXSxhcltSPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKDB8YXJbaD4+Ml0pKXJldHVybiBhcltOPj4yXT0wLGFyW04rND4+Ml09MCxhcltOKzg+PjJdPTAsb28oQSwyLDEwOSxOKSwwPD0oMHx0cltOKzExPj4wXSl8fHZ1KDB8YXJbTj4+Ml0pLHVyPXM7VHQoYiwwfGFyW3Y+PjJdLDE3Njg3MTQwODMpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCwxMDY0LDApKSl7az1kPTA7YnJlYWt9aWYoaz0wfGFyWzQrYj4+Ml0sIShoPWspKXtrPWg7YnJlYWt9YnUoayksaz1ofWVsc2Ugaz1kPTB9d2hpbGUoMCk7YXJbKGg9ZSs2MHwwKT4+Ml09ZCxkPTB8YXJbKE49ZSs2NHwwKT4+Ml0sYXJbTj4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7aWYoISgwfGFyW2g+PjJdKSlyZXR1cm4gYXJbXz4+Ml09MCxhcltfKzQ+PjJdPTAsYXJbXys4Pj4yXT0wLG9vKEEsMiwxMTAsXyksMDw9KDB8dHJbXysxMT4+MF0pfHx2dSgwfGFyW18+PjJdKSx1cj1zO1R0KGIsMHxhclt2Pj4yXSwxNzY4MTg2MjI4KSxkPTB8YXJbYj4+Ml07ZG97aWYoZCl7aWYoIShkPTB8cXUoZCwxMjgsNjE2LDApKSl7az1kPTA7YnJlYWt9aWYoaD0wfGFyWzQrYj4+Ml0sIShrPWgpKWJyZWFrO2J1KGgpfWVsc2Ugaz1kPTB9d2hpbGUoMCk7YXJbZSs2OD4+Ml09ZCxkPTB8YXJbKF89ZSs3MnwwKT4+Ml0sYXJbXz4+Ml09aywwfGQmJmR1KGQpOzB8KGQ9MHxhcls0K2I+PjJdKSYmZHUoZCk7VHQoYiwwfGFyW3Y+PjJdLDE3NjkxMDQ3NDIpLGQ9MHxhcltiPj4yXTtkb3tpZihkKXtpZighKGQ9MHxxdShkLDEyOCw3MTIsMCkpKXtrPWQ9MDticmVha31pZihoPTB8YXJbNCtiPj4yXSwhKGs9aCkpYnJlYWs7YnUoaCl9ZWxzZSBrPWQ9MH13aGlsZSgwKTthcltlKzc2Pj4yXT1kLGQ9MHxhclsoXz1lKzgwfDApPj4yXSxhcltfPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtUdChiLDB8YXJbdj4+Ml0sMTc2ODUxNzIyMiksZD0wfGFyW2I+PjJdO2Rve2lmKGQpe2lmKCEoZD0wfHF1KGQsMTI4LDEwMzIsMCkpKXtrPWQ9MDticmVha31pZihrPTB8YXJbNCtiPj4yXSwhKGg9aykpe2s9aDticmVha31idShrKSxrPWh9ZWxzZSBrPWQ9MH13aGlsZSgwKTthclsoaD1lKzkyfDApPj4yXT1kLGQ9MHxhclsoXz1lKzk2fDApPj4yXSxhcltfPj4yXT1rLDB8ZCYmZHUoZCk7MHwoZD0wfGFyWzQrYj4+Ml0pJiZkdShkKTtpZighKGQ9MHxhcltoPj4yXSkpcmV0dXJuIGFyW1E+PjJdPTAsYXJbUSs0Pj4yXT0wLGFyW1ErOD4+Ml09MCxvbyhBLDIsMTExLFEpLDA8PSgwfHRyW1ErMTE+PjBdKXx8dnUoMHxhcltRPj4yXSksdXI9czsoZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MDtpZihhclsoQXw9MCk+PjJdPTAsYXJbKG49QSs0fDApPj4yXT0wLCgoYXJbQSs4Pj4yXT0wKXwodD0wfGFyW2UrNDQ+PjJdKSkhPSgwfChmPTB8YXJbZSs0OD4+Ml0pKSl7aT1BKzh8MDtkb3tvPWU9MHxhclt0Pj4yXTtkb3tpZigoMHxhcltlKzIwPj4yXSk9PSgwfHIpKXtpZigoMHwoZT0wfGFyW24+PjJdKSk9PSgwfGFyW2k+PjJdKSl7VXQoQSx0KTticmVha31hcltlPj4yXT1vLG89MHxhclt0KzQ+PjJdLChhcltlKzQ+PjJdPW8pJiYoYnUobyksZT0wfGFyW24+PjJdKSxhcltuPj4yXT1lKzh9fXdoaWxlKDApO3Q9dCs4fDB9d2hpbGUoKDB8dCkhPSgwfGYpKX19KShiLGQsMTc2ODg0Mjg1MyksZD0wfGFyW2I+PjJdLHA9MHxhclsoVz00K2J8MCk+PjJdO0E6ZG97aWYoKDB8ZCk9PSgwfHApKVk9MTg2O2Vsc2UgZm9yKHk9RCsxMXwwLEI9ZSsxMDh8MCxYPUU9ZSsxMTJ8MCxaPWUrMTE2fDA7Oyl7az0wfGFyW2Q+PjJdO2Rve2lmKGspe2lmKCEoaD0wfHF1KGssMTI4LDFlMywwKSkpe2s9MCxZPTE2NDticmVha31pZihnPWgsKGs9MHxhcltkKzQ+PjJdKT9idShrKTprPTAsIWgpe1k9MTY0O2JyZWFrfW09MHxhcltoKzU2Pj4yXSwwfChyPWspJiZidShrKSxoPTB8YXJbRT4+Ml07ZG97aWYoaCl7Zm9yKHY9WDs7KWlmKHc9MHxhcltoKzE2Pj4yXSxtPj4+MDx3Pj4+MCl7aWYoISh3PTB8YXJbaD4+Ml0pKXtZPTE3MjticmVha312PWgsaD13fWVsc2V7aWYobT4+PjA8PXc+Pj4wKXtZPTE3NjticmVha31pZighKHc9MHxhclsodj1oKzR8MCk+PjJdKSl7WT0xNzU7YnJlYWt9aD13fWlmKDE3Mj09KDB8WSkpe1k9MCx2PXc9aDticmVha31pZigxNzU9PSgwfFkpKXtZPTAsdz1oO2JyZWFrfWlmKDE3Nj09KDB8WSkpe1k9MCx3PWg7YnJlYWt9fWVsc2Ugdj13PUV9d2hpbGUoMCk7aWYoMHxhclt2Pj4yXSl7aWYoIWspe2g9MDticmVha31kdShrKSxoPTA7YnJlYWt9aD0wfGh1KDI4KSxhcltoKzE2Pj4yXT1tLGFyW2grMjA+PjJdPWcsYXJbaCsyND4+Ml09cixhcltoPj4yXT0wLGFyW2grND4+Ml09MCxhcltoKzg+PjJdPXcsYXJbdj4+Ml09aCwodz0wfGFyW2FyW0I+PjJdPj4yXSkmJihhcltCPj4yXT13LGg9MHxhclt2Pj4yXSksc28oMHxhcltYPj4yXSxoKSxhcltaPj4yXT0xKygwfGFyW1o+PjJdKSxoPTB9ZWxzZSBrPTAsWT0xNjR9d2hpbGUoMCk7ZG97aWYoMTY0PT0oMHxZKSl7aWYoWT0wLGFyW0Q+PjJdPTAsYXJbRCs0Pj4yXT0wLGFyW0QrOD4+Ml09MCxvbyhBLDIsMTI1LEQpLDA8PSgwfHRyW3k+PjBdKSl7aD0xO2JyZWFrfXZ1KDB8YXJbRD4+Ml0pLGg9MX19d2hpbGUoMCk7aWYoMHxrJiZkdShrKSxkPWQrOHwwLDB8aClicmVhayBBO2lmKCgwfGQpPT0oMHxwKSl7WT0xODY7YnJlYWt9fX13aGlsZSgwKTsxODY9PSgwfFkpJiYoZT0wfGFyWyhRPTU2NTkyKSs0Pj4yXSxhclsoRD1BKT4+Ml09YXJbUT4+Ml0sYXJbRCs0Pj4yXT1lLHl1KEErOHwwLDU2NjAwKSk7aWYoMHwoZD0wfGFyW2I+PjJdKSl7aWYoKDB8KGs9MHxhcltXPj4yXSkpIT0oMHxkKSl7Zm9yKDtoPWsrLTh8MCxhcltXPj4yXT1oLCgwfChrPShrPTB8YXJbaystND4+Ml0pPyhkdShrKSwwfGFyW1c+PjJdKTpoKSkhPSgwfGQpOyk7ZD0wfGFyW2I+PjJdfXZ1KGQpfXVyPXN9KEEsZSx0KSx1cj0oKHI9MHxhclt0KzQ+PjJdKSYmZHUociksbyl9ZnVuY3Rpb24gc28oQSxlKXt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpZih0PSgwfChlfD0wKSk9PSgwfChBfD0wKSksdHJbZSsxMj4+MF09MSZ0LCF0KXtmb3IoOzspe2lmKHQ9MHxhcltlKzg+PjJdLDB8dHJbKGY9dCsxMnwwKT4+MF0pe3I9MjM7YnJlYWt9aWYoaT0wfGFyWyhuPXQrOHwwKT4+Ml0sKDB8KHI9MHxhcltpPj4yXSkpPT0oMHx0KSl7aWYoIShyPTB8YXJbaSs0Pj4yXSkpe3I9NzticmVha31pZigwfHRyWyhyPXIrMTJ8MCk+PjBdKXtyPTc7YnJlYWt9ZT1yfWVsc2V7aWYoIXIpe3I9MTY7YnJlYWt9aWYoMHx0clsocj1yKzEyfDApPj4wXSl7cj0xNjticmVha31lPXJ9aWYodHJbZj4+MF09MSx0PSgwfGkpPT0oMHxBKSx0cltpKzEyPj4wXT0xJnQsdHJbZT4+MF09MSx0KXtyPTIzO2JyZWFrfWU9aX1pZig3PT0oMHxyKSlyZXR1cm4gZj0oMHxhclt0Pj4yXSk9PSgwfGUpPyhlPXQsaSk6KHI9MHxhclsoQT10KzR8MCk+PjJdLGU9MHxhcltyPj4yXSxlPShhcltBPj4yXT1lKT8oYXJbZSs4Pj4yXT10LDB8YXJbbj4+Ml0pOmksYXJbcis4Pj4yXT1lLGU9MHxhcltuPj4yXSxhclsoKDB8YXJbZT4+Ml0pPT0oMHx0KT9lOmUrNHwwKT4+Ml09cixhcltyPj4yXT10LGFyW24+PjJdPXIsMHxhclsoZT1yKSs4Pj4yXSksdHJbZSsxMj4+MF09MSxlPSh0cltmKzEyPj4wXT0wKXxhcltmPj4yXSxpPTB8YXJbKHI9ZSs0fDApPj4yXSwwfChhcltmPj4yXT1pKSYmKGFyW2krOD4+Ml09ZiksdD1mKzh8MCxhcltlKzg+PjJdPWFyW3Q+PjJdLG49MHxhclt0Pj4yXSxhclsoKDB8YXJbbj4+Ml0pPT0oMHxmKT9uOm4rNHwwKT4+Ml09ZSxhcltyPj4yXT1mLHZvaWQoYXJbdD4+Ml09ZSk7aWYoMTY9PSgwfHIpKXJldHVybigwfGFyW3Q+PjJdKT09KDB8ZSk/KGY9MHxhclt0Pj4yXSxlPTB8YXJbKHI9Zis0fDApPj4yXSwoYXJbdD4+Ml09ZSkmJihhcltlKzg+PjJdPXQsaT0wfGFyW24+PjJdKSxhcltmKzg+PjJdPWksZT0wfGFyW24+PjJdLGFyWygoMHxhcltlPj4yXSk9PSgwfHQpP2U6ZSs0fDApPj4yXT1mLGFyW3I+PjJdPXQsYXJbbj4+Ml09ZixpPTB8YXJbKGU9ZikrOD4+Ml0pOmU9dCx0cltlKzEyPj4wXT0xLGU9KHRyW2krMTI+PjBdPTApfGFyWyh0PWkrNHwwKT4+Ml0scj0wfGFyW2U+PjJdLDB8KGFyW3Q+PjJdPXIpJiYoYXJbcis4Pj4yXT1pKSx0PWkrOHwwLGFyW2UrOD4+Ml09YXJbdD4+Ml0sbj0wfGFyW3Q+PjJdLGFyWygoMHxhcltuPj4yXSk9PSgwfGkpP246bis0fDApPj4yXT1lLGFyW2U+PjJdPWksdm9pZChhclt0Pj4yXT1lKX19ZnVuY3Rpb24ga28oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGE7dXI9KG49dXIpKzE2fDAsbz1uLHQ9MHxodSg0OCksYXJbNCt0Pj4yXT0wLGFyWzgrdD4+Ml09MCxhclt0Pj4yXT02MTgwLGZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDIzMixhclsobj1BKzh8MCk+PjJdPXIsYXJbbis0Pj4yXT1pLGFyWyhuPUErMTZ8MCk+PjJdPTAsYXJbbis0Pj4yXT0wLGFyWyhuPUErMjR8MCk+PjJdPTAsIWYpcmV0dXJuIGk9ZSxhclsoZj1BKzR8MCk+PjJdPWk7aT0wfHd1KGY9aT4+PjA8MHwwPT0oMHxpKSZyPj4+MDw0Mjk0OTY3Mjk1P3I6LTEpLGhiKDB8KGFyW24+PjJdPWkpLDB8ZSwwfHIpLGFyWyhmPUErNHwwKT4+Ml09aX0oYT0xNit0fDAscixpLDAsZiksYXJbbz4+Ml09YSxidShhcltvKzQ+PjJdPXQpLGJvKEEsZSxvKSxkdSh0KSxkdSh0KSx1cj1ufWZ1bmN0aW9uIGhvKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7aWYoZj0wfGFyWyhpPShlfD0wKSsxMTJ8MCk+PjJdKXtlPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKGY9MHxhcltmKzQ+PjJdKSlicmVhayBBO2lmKCEobj0wfGFyW2Y+PjJdKSl7ZT1mO2JyZWFrfWU9Zn0oMHxlKSE9KDB8aSkmJigwfGFyW2UrMTY+PjJdKT4+PjA8PXI+Pj4wPyhmPTB8YXJbZSsyMD4+Ml0sKGU9MHxhcltlKzI0Pj4yXSk/YnUoZSk6ZT0wLGY/eXUoQSxmKzY0fDApOnQ9MTEpOihlPTAsdD0xMSl9ZWxzZSBlPTAsdD0xMTsxMT09KDB8dCkmJihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApLGUmJmR1KGUpfWZ1bmN0aW9uIHdvKEEsZSxyKXtBfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTA7aWYoZj0wfGFyWyhpPShlfD0wKSsxMTJ8MCk+PjJdKXtlPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKGY9MHxhcltmKzQ+PjJdKSlicmVhayBBO2lmKCEobj0wfGFyW2Y+PjJdKSl7ZT1mO2JyZWFrfWU9Zn0oMHxlKSE9KDB8aSkmJigwfGFyW2UrMTY+PjJdKT4+PjA8PXI+Pj4wPyhmPTB8YXJbZSsyMD4+Ml0sKGU9MHxhcltlKzI0Pj4yXSk/YnUoZSk6ZT0wLGY/eXUoQSxmKzg4fDApOnQ9MTEpOihlPTAsdD0xMSl9ZWxzZSBlPTAsdD0xMTsxMT09KDB8dCkmJihhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApLGUmJmR1KGUpfWZ1bmN0aW9uIHZvKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvO3JldHVybiB1cj0obz11cikrMzJ8MCxmPW8rMTJ8MCxuPW8sKHQ9MHxhclsoZXw9MCkrNDQ+PjJdKT8wfGFyWyhlPWUrNTJ8MCk+PjJdPyhIdChBLHQscixlLGkpLHZvaWQodXI9bykpOihhcltuPj4yXT0wLGFyW24rND4+Ml09MCxhcltuKzg+PjJdPTAsb28oQSwyLDEwOSxuKSx2b2lkKHVyPSgwPD0oMHx0cltuKzExPj4wXSl8fHZ1KDB8YXJbbj4+Ml0pLG8pKSk6KGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxvbyhBLDIsMTA4LGYpLDA8PSgwfHRyWzExK2Y+PjBdKXx8dnUoMHxhcltmPj4yXSksdm9pZCh1cj1vKSl9ZnVuY3Rpb24gbW8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MDtpZih1cj0oZD11cikrMzUyfDAsbD1kKzE5MnwwLEM9ZCszMjh8MCxWPWQrMzA0fDAsYj1kKzM0MHwwLHM9ZCszMTZ8MCx1PWQrMjkyfDAsVD1kKzQ4fDAsUj1kKzI4MHwwLEY9ZCsyNjh8MCxNPWQrMjR8MCxuPWQrMjU2fDAsdD0oYz1kKSsyNDh8MCxvPWQrMjMyfDAsYT1kKzIyNHwwLGY9ZCsyMTZ8MCwwfChXPTB8YXJbKEc9KGV8PTApKzExMnwwKT4+Ml0pKXtFPUcsST1XO0E6Zm9yKDs7KXtmb3IoWD1JOyEoKDB8YXJbWCsxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKFg9MHxhcltYKzQ+PjJdKSlicmVhayBBO2lmKCEoST0wfGFyW1g+PjJdKSl7RT1YO2JyZWFrfUU9WH1pZigoMHxFKSE9KDB8RykmJigwfGFyW0UrMTY+PjJdKT4+PjA8PXI+Pj4wKXtFPUc7QTpmb3IoOzspe2ZvcihYPVc7ISgoMHxhcltYKzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEoWD0wfGFyW1grND4+Ml0pKWJyZWFrIEE7aWYoIShXPTB8YXJbWD4+Ml0pKXtFPVg7YnJlYWt9RT1YfWlmKCgwfEUpIT0oMHxHKSYmKDB8YXJbRSsxNj4+Ml0pPj4+MDw9cj4+PjApaWYoVz0wfGFyW0UrMjA+PjJdLChFPTB8YXJbRSsyND4+Ml0pP2J1KEUpOkU9MCxYPVcpe2lmKHl1KGIsWCs2NHwwKSx5dShzLFgrODh8MCksZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuPTA7aWYoYXJbKEF8PTApPj4yXT0wLGFyWyhmPUErNHwwKT4+Ml09MCxhcltBKzg+PjJdPTAsbj0oMHxhclsoaT1lKzR8MCk+PjJdKS0oMHxhcltlPj4yXSl8MCwhKHI9bj4+NSkpcmV0dXJuOzEzNDIxNzcyNzxyPj4+MCYmemwoKTtpZihuPTB8aHUobiksYXJbZj4+Ml09bixhcltBPj4yXT1uLGFyW0ErOD4+Ml09bisocjw8NSksQT0wfGFyW2U+PjJdLGU9MHxhcltpPj4yXSwoMHxBKT09KDB8ZSkpcmV0dXJuO2Zvcig7YXJbbj4+Ml09YXJbQT4+Ml0sYXJbbis0Pj4yXT1hcltBKzQ+PjJdLGFyW24rOD4+Ml09YXJbQSs4Pj4yXSxhcltuKzEyPj4yXT1hcltBKzEyPj4yXSxEdChuKzE2fDAsQSsxNnwwKSxBPUErMzJ8MCxuPTMyKygwfGFyW2Y+PjJdKXwwLGFyW2Y+PjJdPW4sKDB8QSkhPSgwfGUpOyk7fSh1LDU2KygwfGFyWyhRPWUrNjB8MCk+PjJdKXwwKSwoMHwoWD0wfGFyW3U+PjJdKSkhPSgwfChXPTB8YXJbKFU9NCt1fDApPj4yXSkpKXtmb3IoSj0wO0o9KFY9KDB8YXJbWD4+Ml0pPT0oMHxyKSk/WDpKLCEoVnwoMHwoWD1YKzMyfDApKT09KDB8VykpOyk7aWYoSil7YXJbRj4+Ml09MCxhcltGKzQ+PjJdPTAsYXJbRis4Pj4yXT0wLG9vKGwsNCwzZTMsRiksKDB8dHJbRisxMT4+MF0pPDAmJnZ1KDB8YXJbRj4+Ml0pLFc9MHx0clsoST0xMStifDApPj4wXSxYPTB8YXJbKEM9NCtifDApPj4yXTtkb3tpZig0PT0oMHwoVzw8MjQ+PjI0PDA/WDoyNTUmVykpKXtpZigwfFl1KGIsMCwtMSwzMDI5OCw0KSl7Vz0wfHRyW0k+PjBdLFg9MHxhcltDPj4yXSxTPTcyO2JyZWFrfWFyW1Q+PjJdPTAsYXJbKEc9VCs0fDApPj4yXT0wLEh0KE0sKGFyW1QrOD4+Ml09MCl8YXJbZSs0ND4+Ml0scixlKzUyfDAsVCk7ZG97aWYoMHxhcltNPj4yXSlDPTB8YXJbKGU9TSkrND4+Ml0sYXJbKGk9QSk+PjJdPWFyW2U+PjJdLGFyW2krND4+Ml09QyxDPU0rOHwwLGFyWyhpPUErOHwwKT4+Ml09YXJbQz4+Ml0sYXJbaSs0Pj4yXT1hcltDKzQ+PjJdLGFyW2krOD4+Ml09YXJbQys4Pj4yXSxhcltDPj4yXT0wLGFyW0MrND4+Ml09MCxhcltDKzg+PjJdPTAsQz0xO2Vsc2V7Zm9yKCgwfChYPTB8YXJbVD4+Ml0pKT09KDB8KEM9MHxhcltHPj4yXSkpP3NyKDU1NzM5LDI1NTIwLDU2NSwyNTU3MSk6KFk9WCxfPTApOzspe2lmKFg9MHxhcltZKzQ+PjJdLDE3NTI1ODkxMjM9PSgwfGFyW1grMjA+PjJdKSl7ZG97aWYoWCl7aWYoIShYPTB8cXUoWCwxMjgsNjgwLDApKSl7RD1OPTA7YnJlYWt9aWYoIShJPVc9MHxhcltZKzg+PjJdKSl7Tj1YLEQ9STticmVha31idShXKSxOPVgsRD1JfWVsc2UgRD1OPTB9d2hpbGUoMCk7aWYoMHxfJiZkdShfKSxOKWJyZWFrO1g9RH1lbHNlIFg9XztpZigoMHwoWT1ZKzEyfDApKT09KDB8Qykpe1M9NDg7YnJlYWt9Xz1YfTQ4PT0oMHxTKSYmc3IoNTU3MzksMjU1MjAsNTY1LDI1NTcxKTtkb3tpZigwfG5vKE4saSkpWD0wfGFyW1E+PjJdLGFyW3Q+PjJdPWFyW2U+PjJdLEM9NCt0fDAsVz0wfGFyW2UrND4+Ml0sMHwoYXJbQz4+Ml09VykmJmJ1KFcpLE90KGMsWCxKLHQsZSs2OHwwLGkpLFg9MHxhclsoVz1jKSs0Pj4yXSxhclsoST1sKT4+Ml09YXJbVz4+Ml0sYXJbSSs0Pj4yXT1YLFg9Yys4fDAsKDB8dHJbKFc9KEk9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbST4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW0k+PjBdPTAsdHJbVz4+MF09MCksQ3UoSSwwKSxhcltJPj4yXT1hcltYPj4yXSxhcltJKzQ+PjJdPWFyW1grND4+Ml0sYXJbSSs4Pj4yXT1hcltYKzg+PjJdLGFyW1g+PjJdPTAsYXJbWCs0Pj4yXT0wLChhcltYKzg+PjJdPTApfChYPTB8YXJbQz4+Ml0pJiZkdShYKSxYPTA7ZWxzZXtpZihhcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsb28oQSwyLDExNyxuKSwwPD0oMHx0clsxMStuPj4wXSkpe1g9MTticmVha312dSgwfGFyW24+PjJdKSxYPTF9fXdoaWxlKDApO2lmKCFEKXtDPVg7YnJlYWt9ZHUoRCksQz1YfX13aGlsZSgwKTtpZigoMHx0clsoWD1NKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKSwwfChYPTB8YXJbVD4+Ml0pKXtpZigoMHwoVz0wfGFyW0c+PjJdKSkhPSgwfFgpKXtmb3IoO0k9VystMTJ8MCxhcltHPj4yXT1JLCgwfChXPShXPTB8YXJbVystND4+Ml0pPyhkdShXKSwwfGFyW0c+PjJdKTpJKSkhPSgwfFgpOyk7WD0wfGFyW1Q+PjJdfXZ1KFgpfUN8fChTPTExOCl9ZWxzZSBTPTcyfXdoaWxlKDApO2Rve2lmKDcyPT0oMHxTKSl7aWYoND09KDB8KFc8PDI0Pj4yNDwwP1g6MjU1JlcpKSYmMD09KDB8WXUoYiwwLC0xLDMwMzE4LDQpKSl7YXJbVD4+Ml09MCxhclsoUj1UKzR8MCk+PjJdPTAsSHQoTSwoYXJbVCs4Pj4yXT0wKXxhcltlKzQ0Pj4yXSxyLGUrNTJ8MCxUKTtkb3tpZigwfGFyW00+PjJdKUM9MHxhclsoZT1NKSs0Pj4yXSxhclsoaT1BKT4+Ml09YXJbZT4+Ml0sYXJbaSs0Pj4yXT1DLEM9TSs4fDAsYXJbKGk9QSs4fDApPj4yXT1hcltDPj4yXSxhcltpKzQ+PjJdPWFyW0MrND4+Ml0sYXJbaSs4Pj4yXT1hcltDKzg+PjJdLGFyW0M+PjJdPTAsYXJbQys0Pj4yXT0wLGFyW0MrOD4+Ml09MCxDPTE7ZWxzZXtYPTB8YXJbVD4+Ml0sVj0wfGFyW1I+PjJdO0E6ZG97aWYoKDB8WCk9PSgwfFYpKVg9MCxTPTg2O2Vsc2V7Zm9yKEc9WCxYPTA7Oyl7aWYoVz0wfGFyW0crND4+Ml0sMTYzNTEzNTgxMT09KDB8YXJbVysyMD4+Ml0pKXtkb3tpZihXKXtpZighKFc9MHxxdShXLDEyOCw2NDgsMCkpKXtGPVc9MDticmVha31pZighKEM9ST0wfGFyW0crOD4+Ml0pKXtGPUM7YnJlYWt9YnUoSSksRj1DfWVsc2UgRj1XPTB9d2hpbGUoMCk7aWYoMHxYJiZkdShYKSxXKWJyZWFrO1g9Rn1pZigoMHwoRz1HKzEyfDApKT09KDB8Vikpe1M9ODY7YnJlYWsgQX19KDB8KFc9KFg9VykrNjh8MCkpIT0oMHxpKSYmKGs9aSxoPTB8YXJbVz4+Ml0sdz0wfGFyW1grNzI+PjJdLEI9eT1wPVo9Zz1tPXY9dm9pZCAwLG09KEI9d3w9Qj15PXA9Wj1nPTApLSh2PWh8PTApfDAsKChnPTB8YXJbKHA9OCsoa3w9MCl8MCk+PjJdKS0oeT1aPTB8YXJbaz4+Ml0pfDApPj4+MDxtPj4+MD8oWiYmKCgwfGFyWyhnPWsrNHwwKT4+Ml0pIT0oMHx5KSYmKGFyW2c+PjJdPXkpLHZ1KHkpLGFyW3A+PjJdPTAsYXJbZz4+Ml09MCxnPWFyW2s+PjJdPTApLCgwfG0pPDAmJnpsKCksQj1nPDwxLCgwfChnPWc+Pj4wPDEwNzM3NDE4MjM/Qj4+PjA8bT4+PjA/bTpCOjIxNDc0ODM2NDcpKTwwJiZ6bCgpLHk9MHxodShnKSxhclsoQj1rKzR8MCk+PjJdPXksYXJbaz4+Ml09eSxhcltwPj4yXT15K2csaGIoMHx5LDB8aCwwfG0pLGFyW0I+PjJdPXkrbSk6KDB8KGc9KFo9dz0oaz0oWj0oMHxhclsocD1rKzR8MCk+PjJdKS1afDApPj4+MDxtPj4+MCk/aCtafDA6dyktdnwwKSYmd2IoMHx5LDB8aCwwfGcpLGc9eStnfDAsaz8oMHwoZz1CLVp8MCkpPD0wfHwoaGIoMHxhcltwPj4yXSwwfHcsMHxnKSxhcltwPj4yXT0oMHxhcltwPj4yXSkrZyk6KDB8YXJbcD4+Ml0pIT0oMHxnKSYmKGFyW3A+PjJdPWcpKSksWD0wfGFyW1E+PjJdLGFyW2E+PjJdPWFyW2U+PjJdLEM9NCthfDAsVz0wfGFyW2UrND4+Ml0sMHwoYXJbQz4+Ml09VykmJmJ1KFcpLE90KGMsWCxKLGEsZSs2OHwwLGkpLFg9MHxhclsoVz1jKSs0Pj4yXSxhclsoST1sKT4+Ml09YXJbVz4+Ml0sYXJbSSs0Pj4yXT1YLFg9Yys4fDAsKDB8dHJbKFc9KEk9OCtsfDApKzExfDApPj4wXSk8MD8odHJbYXJbST4+Ml0+PjBdPTAsYXJbMTIrbD4+Ml09MCk6KHRyW0k+PjBdPTAsdHJbVz4+MF09MCksQ3UoSSwwKSxhcltJPj4yXT1hcltYPj4yXSxhcltJKzQ+PjJdPWFyW1grND4+Ml0sYXJbSSs4Pj4yXT1hcltYKzg+PjJdLGFyW1g+PjJdPTAsYXJbWCs0Pj4yXT0wLChhcltYKzg+PjJdPTApfChYPTB8YXJbQz4+Ml0pJiZkdShYKSxXPTAsWD1GfX13aGlsZSgwKTtkb3tpZig4Nj09KDB8Uykpe2lmKGFyW28+PjJdPTAsYXJbNCtvPj4yXT0wLGFyWzgrbz4+Ml09MCxvbyhBLDIsMTMxLG8pLDA8PSgwfHRyWzExK28+PjBdKSl7Vz0xO2JyZWFrfXZ1KDB8YXJbbz4+Ml0pLFc9MX19d2hpbGUoMCk7aWYoIVgpe0M9VzticmVha31kdShYKSxDPVd9fXdoaWxlKDApO2lmKCgwfHRyWyhYPU0rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbWD4+Ml0pLDB8KFg9MHxhcltUPj4yXSkpe2lmKCgwfChXPTB8YXJbUj4+Ml0pKSE9KDB8WCkpe2Zvcig7ST1XKy0xMnwwLGFyW1I+PjJdPUksKDB8KFc9KFc9MHxhcltXKy00Pj4yXSk/KGR1KFcpLDB8YXJbUj4+Ml0pOkkpKSE9KDB8WCk7KTtYPTB8YXJbVD4+Ml19dnUoWCl9aWYoQylicmVhaztTPTExODticmVha31YPTB8YXJbUT4+Ml0sYXJbZj4+Ml09YXJbZT4+Ml0sQz00K2Z8MCxXPTB8YXJbZSs0Pj4yXSwwfChhcltDPj4yXT1XKSYmYnUoVyksT3QoVCxYLEosZixlKzY4fDAsaSksWD0wfGFyWyhXPVQpKzQ+PjJdLGFyWyhJPWwpPj4yXT1hcltXPj4yXSxhcltJKzQ+PjJdPVgsWD1UKzh8MCwoMHx0clsoVz0oST04K2x8MCkrMTF8MCk+PjBdKTwwPyh0clthcltJPj4yXT4+MF09MCxhclsxMitsPj4yXT0wKToodHJbST4+MF09MCx0cltXPj4wXT0wKSxDdShJLDApLGFyW0k+PjJdPWFyW1g+PjJdLGFyW0krND4+Ml09YXJbWCs0Pj4yXSxhcltJKzg+PjJdPWFyW1grOD4+Ml0sYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsKGFyW1grOD4+Ml09MCl8KFg9MHxhcltDPj4yXSkmJmR1KFgpLFM9MTE4fX13aGlsZSgwKTtkb3tpZigxMTg9PSgwfFMpKXtpZigoMHxhcltsPj4yXSk9PSgwfGFyWzE0MTQ4XSkpe009MHxhclsoaT01NjU5MikrND4+Ml0sYXJbKFQ9QSk+PjJdPWFyW2k+PjJdLGFyW1QrND4+Ml09TSx5dShBKzh8MCw1NjYwMCk7YnJlYWt9TT0wfGFyWyhpPWwpKzQ+PjJdLGFyWyhUPUEpPj4yXT1hcltpPj4yXSxhcltUKzQ+PjJdPU0sVD1BKzh8MCxBPTgrbHwwLGFyW1Q+PjJdPWFyW0E+PjJdLGFyW1QrND4+Ml09YXJbQSs0Pj4yXSxhcltUKzg+PjJdPWFyW0ErOD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfX13aGlsZSgwKTsoMHx0clsoWD04K2x8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW1g+PjJdKX1lbHNlIFM9MjR9ZWxzZSBTPTI0O2lmKDI0PT0oMHxTKSYmKFc9VCs2NHwwLGFyWyhDPVQrOHwwKT4+Ml09NDUyNCxJPVQrMTJ8MCxhcltUPj4yXT0xODgsYXJbVz4+Ml09MjA4LEpmKFQrNjR8KGFyW1QrND4+Ml09MCksSSksYXJbVCsxMzY+PjJdPTAsYXJbVCsxNDA+PjJdPS0xLGFyW1Q+PjJdPTQ1MDQsYXJbVz4+Ml09NDU0NCxhcltDPj4yXT00NTI0LFNmKEkpLGFyW0k+PjJdPTQzNDAsYXJbKEM9VCs0NHwwKT4+Ml09MCxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0MrMTI+PjJdPTAsYXJbVCs2MD4+Ml09MjQsYXJbbD4+Ml09MCxhcls0K2w+PjJdPTAsYXJbOCtsPj4yXT0wLFhlKEksbCksKDB8dHJbMTErbD4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLFdlKDB8TGYoMHxXZShYPVQrOHwwLDI1NTMzLDEzKSxyKSwyNTU0NywyMyksSWUoUixJKSxvbyhBLDIsMTE3LFIpLCgwfHRyW1IrMTE+PjBdKTwwJiZ2dSgwfGFyW1I+PjJdKSxhcltUPj4yXT00NTA0LGFyW1c+PjJdPTQ1NDQsYXJbWD4+Ml09NDUyNCxhcltJPj4yXT00MzQwLCgwfHRyW0MrMTE+PjBdKTwwJiZ2dSgwfGFyW0M+PjJdKSxrZihJKSxiZihXKSksMHwoWD0wfGFyW3U+PjJdKSl7aWYoKDB8KFc9MHxhcltVPj4yXSkpIT0oMHxYKSl7ZG97aWYoST1XKy0zMnwwLGFyW1U+PjJdPUksRj0wfGFyWyhWPVcrLTE2fDApPj4yXSl7aWYoKDB8KFc9MHxhclsoRz1XKy0xMnwwKT4+Ml0pKT09KDB8RikpVz1GO2Vsc2V7Zm9yKDtJPVcrLTQwfDAsYXJbRz4+Ml09SSwoMHwoVz0oQz0wfGFyW1crLTE2Pj4yXSk/KCgwfGFyWyhXPVcrLTEyfDApPj4yXSkhPSgwfEMpJiYoYXJbVz4+Ml09QyksdnUoQyksMHxhcltHPj4yXSk6SSkpIT0oMHxGKTspO1c9MHxhcltWPj4yXX12dShXKSxXPTB8YXJbVT4+Ml19ZWxzZSBXPUl9d2hpbGUoKDB8VykhPSgwfFgpKTtYPTB8YXJbdT4+Ml19dnUoWCl9KDB8dHJbMTErcz4+MF0pPDAmJnZ1KDB8YXJbcz4+Ml0pLCgwfHRyWzExK2I+PjBdKTwwJiZ2dSgwfGFyW2I+PjJdKX1lbHNlIFM9MTk7ZWxzZSBFPTAsUz0xOTtyZXR1cm4oMTk9PSgwfFMpJiYoYXJbVj4+Ml09MCxhcltWKzQ+PjJdPTAsYXJbVis4Pj4yXT0wLG9vKEEsNSwyZTMsViksKDB8dHJbVisxMT4+MF0pPDAmJnZ1KDB8YXJbVj4+Ml0pKSxFKT8oZHUoRSksdm9pZCh1cj1kKSk6dm9pZCh1cj1kKX19YXJbQz4+Ml09MCxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLG9vKEEsNSwyZTMsQyksdXI9KDA8PSgwfHRyW0MrMTE+PjBdKXx8dnUoMHxhcltDPj4yXSksZCl9ZnVuY3Rpb24gZ28oQSl7cmV0dXJuKEF8PTApPj4+MDw0PzE2OTA4ODAxPj4+KEE8PDMpJjI1NXwwOihzcig1NTczOSwyNTU5Nyw0NywyNTYxMSksMCl9ZnVuY3Rpb24gWm8oQSl7cmV0dXJuKEF8PTApPj4+MDw0PzE2ODQzMjY1Pj4+KEE8PDMpJjI1NXwwOihzcig1NTczOSwyNTU5Nyw2NiwyNTYzMiksMCl9ZnVuY3Rpb24gcG8oQSl7dmFyIGUscixpPTAsZj0wLG49MDtpZigoMHwoaT0wfGFyWyhlPShBfD0wKSs1NnwwKT4+Ml0pKSE9KDB8KHI9QSs2MHwwKSkpZm9yKG49aTs7KXtpZigwfChpPTB8YXJbbis0ND4+Ml0pJiZtdShpKSxpPTB8YXJbbis0Pj4yXSlmb3IoO2Y9MHxhcltpPj4yXTspaT1mO2Vsc2UgaWYoaT0wfGFyWyhmPW4rOHwwKT4+Ml0sKDB8YXJbaT4+Ml0pIT0oMHxuKSlmb3IoO249MHxhcltmPj4yXSxpPTB8YXJbKGY9bis4fDApPj4yXSwoMHxhcltpPj4yXSkhPSgwfG4pOyk7aWYoKDB8aSk9PSgwfHIpKWJyZWFrO249aX0hZnVuY3Rpb24gQShlLHIpe2V8PTA7cnw9MDtyZXR1cm4gcj8oQShlLDB8YXJbcj4+Ml0pLEEoZSwwfGFyW3IrND4+Ml0pLHZvaWQgdnUocikpOnZvaWQgMH0oZSwwfGFyW3I+PjJdKSwwfChpPTB8YXJbQSs1Mj4+Ml0pJiZkdShpKSwwfChpPTB8YXJbQSs0ND4+Ml0pJiZkdShpKSwoMHx0clsoaT1BKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSwoaT0wfGFyW0ErND4+Ml0pJiZrdShpKX1mdW5jdGlvbiB5byhBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTAsYXJbKEF8PTApKzI0Pj4yXT1lLGFyW0ErMjg+PjJdPXIsYXJbQSszMj4+Ml09aSxhcltBKzM2Pj4yXT1mfWZ1bmN0aW9uIEJvKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MDtpZih1cj0odD11cikrNjR8MCx0clsobz0obj10KSszMnwwKT4+MF09MCxhclsoYT1vKzR8MCk+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxhclthKzEyPj4yXT0wLGFyW2ErMTY+PjJdPTAsYXJbYSsyMD4+Ml09MCwhKChhclthKzI0Pj4yXT0wKXxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTA7KDB8KGV8PTApKTw9LTEmJnNyKDI1Njg2LDI1NTk3LDE1NywyNTY5Nyk7KDB8cik8PS0xJiZzcigyNTcwMywyNTU5NywxNTgsMjU2OTcpOygwfGkpPD0wJiZzcigyNTcxNSwyNTU5NywxNTksMjU2OTcpOzMzPD0oMHxpKSYmc3IoMjU3MzAsMjU1OTcsMTYwLDI1Njk3KTthcltBKzQ+PjJdPWUsYXJbQSs4Pj4yXT1yLG49NjQ8KG49ZSsxJi0yKT4+PjA/bjo2NCxhcltBKzEyPj4yXT1uLHI9NjQ8KHI9cisxJi0yKT4+PjA/cjo2NCxhcltBKzE2Pj4yXT1yLGU9MTE9PSgwfGYpJjMyPT0oMHwoZT0yND09KDB8aSkmMTA9PSgwfGYpPzg6aSkpPzg6ZSwxNzw9KDB8Y3JbQT4+MF0pJiZzcigyNTc0NiwyNTU5NywxODEsMjU2OTcpO3N3aXRjaChlPSg3KygyNTUmKHRyW0E+PjBdPWUpKXwwKT4+PjMsMHxmKXtjYXNlIDM6Y2FzZSAyOmNhc2UgMTpjYXNlIDA6Y2FzZSA5OTp0PTE7YnJlYWs7Y2FzZSAxNDpjYXNlIDEyOmNhc2UgMTA6dD0zO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxMzpjYXNlIDExOnQ9NDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDI1NTk3LDExOCwyNTY1Myl9cmV0dXJuIHQ9MTUrKDB8YnIoMHxicih0LGUpLG4pKSYtMTYsYXJbQSsyOD4+Ml09dCx0PTB8d3UoMTV8YnIodCxyKSksYXJbQSsyND4+Ml09dCxmPTE1JnQsYXJbQSsyMD4+Ml09MD09KDB8Zik/dDp0KygxNi1mKXwwLDF9KG8scixpLGYsMHxhcltBKzM2Pj4yXSkpKXJldHVybiB1cj10LChBPTApfEE7YT1BKzU2fDAsYXJbbj4+Ml09YXJbbz4+Ml0sYXJbbis0Pj4yXT1hcltvKzQ+PjJdLGFyW24rOD4+Ml09YXJbbys4Pj4yXSxhcltuKzEyPj4yXT1hcltvKzEyPj4yXSxhcltuKzE2Pj4yXT1hcltvKzE2Pj4yXSxhcltuKzIwPj4yXT1hcltvKzIwPj4yXSxhcltuKzI0Pj4yXT1hcltvKzI0Pj4yXSxhcltuKzI4Pj4yXT1hcltvKzI4Pj4yXSxyPTB8YXJbKGk9QSs2MHwwKT4+Ml07ZG97aWYocil7Zm9yKGY9QSs2MHwwOzspaWYoKDB8ZSk8KDB8KGk9MHxhcltyKzE2Pj4yXSkpKXtpZighKGk9MHxhcltyPj4yXSkpe2k9NzticmVha31mPXIscj1pfWVsc2V7aWYoKDB8ZSk8PSgwfGkpKXtpPTExO2JyZWFrfWlmKCEoaT0wfGFyWyhmPXIrNHwwKT4+Ml0pKXtpPTEwO2JyZWFrfXI9aX1pZig3PT0oMHxpKSl7Zj1vPXI7YnJlYWt9aWYoMTA9PSgwfGkpKXtvPXI7YnJlYWt9aWYoMTE9PSgwfGkpKXtvPXI7YnJlYWt9fWVsc2UgZj1vPWl9d2hpbGUoMCk7cmV0dXJuIDB8YXJbZj4+Ml18fChyPTB8aHUoNTIpLGFyW3IrMTY+PjJdPWUsYXJbKGk9cisyMHwwKT4+Ml09YXJbbj4+Ml0sYXJbaSs0Pj4yXT1hcltuKzQ+PjJdLGFyW2krOD4+Ml09YXJbbis4Pj4yXSxhcltpKzEyPj4yXT1hcltuKzEyPj4yXSxhcltpKzE2Pj4yXT1hcltuKzE2Pj4yXSxhcltpKzIwPj4yXT1hcltuKzIwPj4yXSxhcltpKzI0Pj4yXT1hcltuKzI0Pj4yXSxhcltpKzI4Pj4yXT1hcltuKzI4Pj4yXSxhcltyPj4yXT0wLGFyW3IrND4+Ml09MCxhcltyKzg+PjJdPW8sYXJbZj4+Ml09ciwoaT0wfGFyW2FyW2E+PjJdPj4yXSkmJihhclthPj4yXT1pLHI9MHxhcltmPj4yXSksc28oMHxhcltBKzYwPj4yXSxyKSxhclsoQT1BKzY0fDApPj4yXT0xKygwfGFyW0E+PjJdKSksdXI9dCwwfChBPTEpfWZ1bmN0aW9uIEVvKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wO2lmKDB8KGk9MHxhclsocj0oQXw9MCkrNjB8MCk+PjJdKSl7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1pZigoMHxBKSE9KDB8cikmJigwfGFyW0ErMTY+PjJdKTw9KDB8ZSkpcmV0dXJuIDB8KGU9KDB8KGU9QSkpIT0oMHxyKSl9cmV0dXJuIDB8KGU9KDB8KGU9cikpIT0oMHxyKSl9ZnVuY3Rpb24gWG8oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTA7aWYoIShpPTB8YXJbKHI9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuIDB8KGU9LTEpO0E9cixmPWk7QTpmb3IoOzspe2ZvcihpPWY7ISgoMHxhcltpKzE2Pj4yXSk+PSgwfGUpKTspaWYoIShpPTB8YXJbaSs0Pj4yXSkpYnJlYWsgQTtpZighKGY9MHxhcltpPj4yXSkpe0E9aTticmVha31BPWl9cmV0dXJuKDB8QSk9PSgwfHIpfHwoMHxhcltBKzE2Pj4yXSk+KDB8ZSk/MHwoZT0tMSk6MHwoZT0wfGFyW0ErMjQ+PjJdKX1mdW5jdGlvbiBXbyhBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MDtpZighKGk9MHxhclsocj0oQXw9MCkrNjB8MCk+PjJdKSlyZXR1cm4gMHwoZT0tMSk7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1yZXR1cm4oMHxBKT09KDB8cil8fCgwfGFyW0ErMTY+PjJdKT4oMHxlKT8wfChlPS0xKTowfChlPTB8YXJbQSsyOD4+Ml0pfWZ1bmN0aW9uIElvKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKGFyWyhpPShBfD0wKSs0fDApPj4yXT0wLG49QSs0fChhclsoZj1BKzh8MCk+PjJdPTApLGFyW0E+PjJdPW4sKDB8KHQ9MHxhcltlKzU2Pj4yXSkpIT0oMHwocj1lKzYwfDApKSlmb3IobD10LGU9MDs7KXtjPWwrMTZ8MDtkb3tpZihlKXtmb3IoYT0wfGFyW2M+PjJdLG89aTs7KXtpZigoMHxhKTwoMHwodD0wfGFyW2UrMTY+PjJdKSkpe2lmKCEodD0wfGFyW2U+PjJdKSl7dD05O2JyZWFrfX1lbHNle2lmKCgwfGEpPD0oMHx0KSl7dD0xMzticmVha31pZighKHQ9MHxhclsobz1lKzR8MCk+PjJdKSl7dD0xMjticmVha31lPW99bz1lLGU9dH1pZig5PT0oMHx0KSl7bz1hPWU7YnJlYWt9aWYoMTI9PSgwfHQpKXthPWU7YnJlYWt9aWYoMTM9PSgwfHQpKXthPWU7YnJlYWt9fWVsc2Ugbz1hPW59d2hpbGUoMCk7aWYoMHxhcltvPj4yXXx8KGU9MHxodSgyMCksYXJbZSsxNj4+Ml09YXJbYz4+Ml0sYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT1hLGFyW28+PjJdPWUsKHQ9MHxhclthcltBPj4yXT4+Ml0pJiYoYXJbQT4+Ml09dCxlPTB8YXJbbz4+Ml0pLHNvKDB8YXJbaT4+Ml0sZSksYXJbZj4+Ml09MSsoMHxhcltmPj4yXSkpLGU9MHxhcltsKzQ+PjJdKWZvcig7dD0wfGFyW2U+PjJdOyllPXQ7ZWxzZSBpZihlPTB8YXJbKHQ9bCs4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfGwpKWZvcig7bD0wfGFyW3Q+PjJdLGU9MHxhclsodD1sKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8bCk7KTtpZigoMHxlKT09KDB8cikpYnJlYWs7bD1lLGU9MHxhcltuPj4yXX19ZnVuY3Rpb24gQ28oQSxlKXtyZXR1cm4gQXw9MCwoZXw9MCkmJihDbyhBLDB8YXJbZT4+Ml0pLENvKEEsMHxhcltlKzQ+PjJdKSx2b2lkIHZ1KGUpKX1mdW5jdGlvbiBHbyhBLGUpe0F8PTA7dmFyIHIsaT0wLGY9MDtpZigxMD09KDB8KGV8PTApKSlzd2l0Y2goMHxhcltBKzM2Pj4yXSl7Y2FzZSAxMTpyZXR1cm4gMHwoZT0zMik7Y2FzZSAxNDpjYXNlIDEyOnJldHVybiAwfChlPTQ4KTtjYXNlIDE1OmNhc2UgMTM6cmV0dXJuIDB8KGU9NjQpO2Nhc2UgMTA6cmV0dXJuIDB8KGU9MjQpO2RlZmF1bHQ6cmV0dXJuIDB8KGU9LTEpfWlmKGk9MHxhclsocj1BKzYwfDApPj4yXSl7QT1yLGY9aTtBOmZvcig7Oyl7Zm9yKGk9ZjshKCgwfGFyW2krMTY+PjJdKT49KDB8ZSkpOylpZighKGk9MHxhcltpKzQ+PjJdKSlicmVhayBBO2lmKCEoZj0wfGFyW2k+PjJdKSl7QT1pO2JyZWFrfUE9aX1BPSgwfEEpIT0oMHxyKSYmKDB8YXJbQSsxNj4+Ml0pPD0oMHxlKT8wfHRyW0ErMjA+PjBdOi0xfWVsc2UgQT0tMTtyZXR1cm4gMjU2PD0oQT03KygyNTUmQSkmNTA0KT4+PjAmJnNyKDI1NzY0LDI1NTk3LDM2MiwyNTc3NSksMHwoZT0yNTUmQSl9ZnVuY3Rpb24gVm8oQSxlKXtlfD0wO3ZhciByLGk9MCxmPTA7aWYoIShpPTB8YXJbKHI9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuIDB8KGU9LTEpO0E9cixmPWk7QTpmb3IoOzspe2ZvcihpPWY7ISgoMHxhcltpKzE2Pj4yXSk+PSgwfGUpKTspaWYoIShpPTB8YXJbaSs0Pj4yXSkpYnJlYWsgQTtpZighKGY9MHxhcltpPj4yXSkpe0E9aTticmVha31BPWl9cmV0dXJuKDB8QSk9PSgwfHIpfHwoMHxhcltBKzE2Pj4yXSk+KDB8ZSk/MHwoZT0tMSk6MHwoZT0wfHRyW0ErMjA+PjBdKX1mdW5jdGlvbiBGbyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTA7aWYoIShmPTB8YXJbKGk9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuKHI9MCl8cjtBPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj0oMHxlKSk7KWlmKCEoZj0wfGFyW2YrND4+Ml0pKWJyZWFrIEE7aWYoIShuPTB8YXJbZj4+Ml0pKXtBPWY7YnJlYWt9QT1mfXJldHVybigwfEEpPT0oMHxpKXx8KDB8YXJbQSsxNj4+Ml0pPigwfGUpPyhyPTApfHI6KDB8ciYmKGFyW3I+PjJdPWFyW0ErNDg+PjJdKSwwfChyPTB8YXJbQSs0MD4+Ml0pKX1mdW5jdGlvbiBSbyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MCxuPTA7aWYoIShmPTB8YXJbKGk9KEF8PTApKzYwfDApPj4yXSkpcmV0dXJuKHI9MCl8cjtBPWksbj1mO0E6Zm9yKDs7KXtmb3IoZj1uOyEoKDB8YXJbZisxNj4+Ml0pPj0oMHxlKSk7KWlmKCEoZj0wfGFyW2YrND4+Ml0pKWJyZWFrIEE7aWYoIShuPTB8YXJbZj4+Ml0pKXtBPWY7YnJlYWt9QT1mfXJldHVybigwfEEpPT0oMHxpKXx8KDB8YXJbQSsxNj4+Ml0pPigwfGUpPyhyPTApfHI6KDB8ciYmKGFyW3I+PjJdPWFyW0ErNDg+PjJdKSwwfChyPTB8YXJbQSs0MD4+Ml0pKX1mdW5jdGlvbiBObyhBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2lmKGI9NjArKDB8YXJbKGV8PTApPj4yXSl8MCxsPTA9PSgwfCh1PTB8YXJbYj4+Ml0pKSlkPW49cz0tMTtlbHNle249YixvPXU7QTpmb3IoOzspe2Zvcih0PW87ISgoMHxhclt0KzE2Pj4yXSk+PSgwfHIpKTspaWYoISh0PTB8YXJbdCs0Pj4yXSkpYnJlYWsgQTtpZighKG89MHxhclt0Pj4yXSkpe249dDticmVha31uPXR9aWYoYz0oMHxuKSE9KDB8YikmJigwfGFyW24rMTY+PjJdKTw9KDB8cik/MHxhcltuKzI0Pj4yXTotMSxsKXM9YyxkPW49LTE7ZWxzZXtuPWIsbz11O0E6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWlmKGE9KDB8bikhPSgwfGIpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPzB8YXJbbisyOD4+Ml06LTEsbClzPWMsbj0tMSxkPWE7ZWxzZXtuPWIsbz11O0E6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWQ9KG49KDB8bikhPSgwfGIpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPyhzPWMsMHx0cltuKzIwPj4wXSk6KHM9YywtMSksYSl9fX1pZihCbyhBLGkscyxkLDI1NSZuKSxsPTB8YXJbZT4+Ml0sdT0wPT0oMHwobz0wfGFyWyhmPWwrNjB8MCk+PjJdKSkpYj1lPTA7ZWxzZXtuPWYsYT1vO0E6Zm9yKDs7KXtmb3IodD1hOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIEE7aWYoIShhPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fWI9KDB8bikhPSgwfGYpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPyhlPTB8YXJbbis0MD4+Ml0sMHxhcltuKzQ4Pj4yXSk6ZT0wfWlmKHQ9MHxhclsoYz1BKzYwfDApPj4yXSl7bj1jO0E6Zm9yKDs7KXtmb3IoYT10OyEoKDB8YXJbYSsxNj4+Ml0pPj0oMHxpKSk7KXtpZighKHQ9MHxhclthKzQ+PjJdKSlicmVhayBBO2E9dH1pZighKHQ9MHxhclthPj4yXSkpe249YTticmVha31uPWF9YT0oMHxuKSE9KDB8YykmJigwfGFyW24rMTY+PjJdKTw9KDB8aSk/KGM9MHxhcltuKzQwPj4yXSwwfGFyW24rNDg+PjJdKTpjPTB9ZWxzZSBhPWM9MDtBOmRve2lmKDEwIT0oMHxyKSl7aWYodSluPS0xO2Vsc2V7bj1mO2U6Zm9yKDs7KXtmb3IodD1vOyEoKDB8YXJbdCsxNj4+Ml0pPj0oMHxyKSk7KWlmKCEodD0wfGFyW3QrND4+Ml0pKWJyZWFrIGU7aWYoIShvPTB8YXJbdD4+Ml0pKXtuPXQ7YnJlYWt9bj10fW49KDB8bikhPSgwfGYpJiYoMHxhcltuKzE2Pj4yXSk8PSgwfHIpPzB8dHJbbisyMD4+MF06LTF9aWYoKG49NysoMjU1Jm4pfDApPj4+MDwyNTYpe2s9KDI1NSZuKT4+PjM7YnJlYWt9c3IoMjU3NjQsMjU1OTcsMzYyLDI1Nzc1KX1lbHNlIHN3aXRjaCgwfGFyW2wrMzY+PjJdKXtjYXNlIDEwOms9MzticmVhayBBO2Nhc2UgMTE6az00O2JyZWFrIEE7Y2FzZSAxNDpjYXNlIDEyOms9NjticmVhayBBO2Nhc2UgMTU6Y2FzZSAxMzprPTg7YnJlYWsgQTtkZWZhdWx0Oms9MzE7YnJlYWsgQX19d2hpbGUoMCk7aWYodD0wfGJyKDI1NSZrLHMpLDA8KDB8ZCkpZm9yKG49MDtoYihjKygwfGJyKG4sYSkpfDAsZSsoMHxicihuLGIpKXwwLDB8dCksKDB8KG49bisxfDApKSE9KDB8ZCk7KTt9ZnVuY3Rpb24gX28oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDt1cj0odD11cikrNjR8MCxmPXQrMzJ8MCxuPXQsdT0ocz0wfGFyWyhlfD0wKT4+Ml0pKzU2fDAsYj0wfGFyWyhvPXMrNjB8MCk+PjJdO2Rve2lmKGIpe2ZvcihjPXMrNjB8MCxvPWI7OylpZigoMHxyKTwoMHwoYT0wfGFyW28rMTY+PjJdKSkpe2lmKCEoYT0wfGFyW28+PjJdKSl7YT02O2JyZWFrfWM9byxvPWF9ZWxzZXtpZigoMHxyKTw9KDB8YSkpe2E9MTA7YnJlYWt9aWYoIShhPTB8YXJbKGM9bys0fDApPj4yXSkpe2E9OTticmVha31vPWF9aWYoNj09KDB8YSkpe2M9bD1vO2JyZWFrfWlmKDk9PSgwfGEpKXtsPW87YnJlYWt9aWYoMTA9PSgwfGEpKXtsPW87YnJlYWt9fWVsc2UgYz1sPW99d2hpbGUoMCk7aWYoKG89MHxhcltjPj4yXSl8fChhPTB8aHUoNTIpLGFyW2ErMTY+PjJdPXIsYXJbKG89YSsyMHwwKT4+Ml09MCxhcltvKzQ+PjJdPTAsYXJbbys4Pj4yXT0wLGFyW28rMTI+PjJdPTAsYXJbbysxNj4+Ml09MCxhcltvKzIwPj4yXT0wLGFyW28rMjQ+PjJdPTAsYXJbbysyOD4+Ml09MCxhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPWwsYXJbYz4+Ml09YSxvPShvPTB8YXJbYXJbdT4+Ml0+PjJdKT8oYXJbdT4+Ml09bywwfGFyW2M+PjJdKTphLHNvKDB8YXJbcys2MD4+Ml0sbyksYXJbKGI9cys2NHwwKT4+Ml09MSsoMHxhcltiPj4yXSksYj0wfGFyW2U+PjJdLG89YSxiPTB8YXJbKHM9YikrNjA+PjJdKSx1PW8rMjB8MCxhcltmPj4yXT1hclt1Pj4yXSxhcls0K2Y+PjJdPWFyW3UrND4+Ml0sYXJbOCtmPj4yXT1hclt1Kzg+PjJdLGFyWzEyK2Y+PjJdPWFyW3UrMTI+PjJdLGFyWzE2K2Y+PjJdPWFyW3UrMTY+PjJdLGFyWzIwK2Y+PjJdPWFyW3UrMjA+PjJdLGFyWzI0K2Y+PjJdPWFyW3UrMjQ+PjJdLGFyWzI4K2Y+PjJdPWFyW3UrMjg+PjJdLHU9cys1NnwwLGw9cys2MHwwLDB8Yil7Yz1sLGE9YjtBOmZvcig7Oyl7Zm9yKG89YTshKCgwfGFyW28rMTY+PjJdKT49KDB8cikpOylpZighKG89MHxhcltvKzQ+PjJdKSlicmVhayBBO2lmKCEoYT0wfGFyW28+PjJdKSl7Yz1vO2JyZWFrfWM9b31pZigoMHxjKSE9KDB8bCkmJigwfGFyW2MrMTY+PjJdKTw9KDB8cikpe2lmKG89MHxhcltjKzQ+PjJdKWZvcig7YT0wfGFyW28+PjJdOylvPWE7ZWxzZSBpZihvPTB8YXJbKGE9Yys4fDApPj4yXSwoMHxhcltvPj4yXSkhPSgwfGMpKWZvcig7cj0wfGFyW2E+PjJdLG89MHxhclsoYT1yKzh8MCk+PjJdLCgwfGFyW28+PjJdKSE9KDB8cik7KTsoMHxhclt1Pj4yXSk9PSgwfGMpJiYoYXJbdT4+Ml09byksYXJbKHI9cys2NHwwKT4+Ml09KDB8YXJbcj4+Ml0pLTEsZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYodD0wfGFyWyhlfD0wKT4+Ml0paWYobj0wfGFyW2UrND4+Ml0pZm9yKDs7KXtpZighKHQ9MHxhcltuPj4yXSkpe3Q9MDticmVha31uPXR9ZWxzZSBuPWU7ZWxzZSBuPWUsdD0wO3I9bis0fDAsaT0wfGFyWygwfHQ/bjpyKT4+Ml0sbD1uKzh8MCwoZj0wIT0oMHxpKSkmJihhcls4K2k+PjJdPWFyW2w+PjJdKTt0PTB8YXJbbD4+Ml0sKDB8YXJbdD4+Ml0pPT0oMHxuKT8oYXJbdD4+Ml09aSwoMHxuKT09KDB8QSk/KEE9aSxjPTApOih0PXQrNHwwLHU9MTApKTooYXJbdCs0Pj4yXT1pLHU9MTApOzEwPT0oMHx1KSYmKGM9MHxhclt0Pj4yXSk7YT0wIT0oMHx0clsobz1uKzEyfDApPj4wXSksKDB8bikhPSgwfGUpJiYodD0wfGFyWyh1PWUrOHwwKT4+Ml0sYXJbbD4+Ml09dCxhclsoKDB8YXJbYXJbdT4+Ml0+PjJdKT09KDB8ZSk/dDp0KzR8MCk+PjJdPW4sdD0wfGFyW2U+PjJdLGFyW24+PjJdPXQsYXJbdCs4Pj4yXT1uLHQ9MHxhcltlKzQ+PjJdLDB8KGFyW3I+PjJdPXQpJiYoYXJbdCs4Pj4yXT1uKSx0cltvPj4wXT0wfHRyW2UrMTI+PjBdLEE9KDB8QSk9PSgwfGUpP246QSk7aWYoIShhJjAhPSgwfEEpKSlyZXR1cm47aWYoZilyZXR1cm4gdHJbMTIraT4+MF09MTtmb3IoOzspe2lmKGE9MHxhcltjKzg+PjJdLHQ9MCE9KDB8dHJbKG49YysxMnwwKT4+MF0pLCgwfGFyW2E+PjJdKT09KDB8Yykpe2lmKHQ/bD1jOih0cltuPj4wXT0xLHRyW2ErMTI+PjBdPTAsbj0wfGFyW2E+PjJdLG89MHxhclsodD1uKzR8MCk+PjJdLDB8KGFyW2E+PjJdPW8pJiYoYXJbbys4Pj4yXT1hKSx1PWErOHwwLGFyW24rOD4+Ml09YXJbdT4+Ml0sbD0wfGFyW3U+PjJdLGFyWygoMHxhcltsPj4yXSk9PSgwfGEpP2w6bCs0fDApPj4yXT1uLGFyW3Q+PjJdPWEsYXJbdT4+Ml09bix1PTB8YXJbYys0Pj4yXSxsPTB8YXJbdT4+Ml0sQT0oMHxBKT09KDB8dSk/YzpBKSxuPTB8YXJbbD4+Ml0sIShvPTA9PSgwfG4pKSYmMD09KDB8dHJbbisxMj4+MF0pKXtBPWwsdT01NTticmVha31pZigwfChhPTB8YXJbKHQ9bCs0fDApPj4yXSkmJjA9PSgwfHRyW2ErMTI+PjBdKSl7dT00OTticmVha31pZigoKHRyW2wrMTI+PjBdPTApfChuPTB8YXJbbCs4Pj4yXSkpPT0oMHxBKXwwPT0oMHx0clsodD1uKzEyfDApPj4wXSkpe3U9NDg7YnJlYWt9fWVsc2V7aWYodD9vPWM6KHRyW24+PjBdPTEsdHJbYSsxMj4+MF09MCxuPTB8YXJbKHU9YSs0fDApPj4yXSx0PTB8YXJbbj4+Ml0sMHwoYXJbdT4+Ml09dCkmJihhclt0Kzg+PjJdPWEpLHU9YSs4fDAsYXJbbis4Pj4yXT1hclt1Pj4yXSxvPTB8YXJbdT4+Ml0sYXJbKCgwfGFyW28+PjJdKT09KDB8YSk/bzpvKzR8MCk+PjJdPW4sYXJbbj4+Ml09YSxhclt1Pj4yXT1uLHU9MHxhcltjPj4yXSxvPTB8YXJbdSs0Pj4yXSxBPSgwfEEpPT0oMHx1KT9jOkEpLDB8KHQ9MHxhcltvPj4yXSkmJjA9PSgwfHRyW3QrMTI+PjBdKSl7dT0zMTticmVha31pZigwfChuPTB8YXJbbys0Pj4yXSkmJjA9PSgwfHRyW24rMTI+PjBdKSl7QT1uLHU9MzI7YnJlYWt9aWYoKCh0cltvKzEyPj4wXT0wKXwobj0wfGFyW28rOD4+Ml0pKT09KDB8QSkpe3U9MzA7YnJlYWt9aWYoISgwfHRyW24rMTI+PjBdKSl7QT1uLHU9MzA7YnJlYWt9fWM9MHxhcltuKzg+PjJdLGM9MHxhclsoKDB8YXJbYz4+Ml0pPT0oMHxuKT9jKzR8MDpjKT4+Ml19ZG97aWYoMzA9PSgwfHUpKXJldHVybiB0cltBKzEyPj4wXT0xO2lmKDMxPT0oMHx1KSlBPTB8YXJbbys0Pj4yXSx1PUE/MzI6MzM7ZWxzZXtpZig0OD09KDB8dSkpcmV0dXJuIHRyW3Q+PjBdPTE7aWYoNDk9PSgwfHUpKXtpZihvKUE9YTtlbHNle2lmKCEoMHx0cltuKzEyPj4wXSkpe0E9bCx1PTU1O2JyZWFrfUE9MHxhclsodD1BPWwrNHwwKT4+Ml19dHJbQSsxMj4+MF09MSx0cltsKzEyPj4wXT0wLG49MHxhcltBPj4yXSwwfChhclt0Pj4yXT1uKSYmKGFyW24rOD4+Ml09bCksbj1sKzh8MCxhcltBKzg+PjJdPWFyW24+PjJdLHU9MHxhcltuPj4yXSxhclsoKDB8YXJbdT4+Ml0pPT0oMHxsKT91OnUrNHwwKT4+Ml09QSxhcltBPj4yXT1sLGFyW24+PjJdPUEsbj1sLHU9NTV9fX13aGlsZSgwKTtpZigzMj09KDB8dSkpMHx0cltBKzEyPj4wXT91PTMzOm49bztlbHNlIGlmKDU1PT0oMHx1KSlyZXR1cm4gbz0wfGFyW0ErOD4+Ml0sdD1vKzEyfDAsdHJbQSsxMj4+MF09MHx0clt0Pj4wXSx0clt0Pj4wXT0xLHRyW24rMTI+PjBdPTEsQT0wfGFyW28+PjJdLHQ9MHxhclsobj1BKzR8MCk+PjJdLDB8KGFyW28+PjJdPXQpJiYoYXJbdCs4Pj4yXT1vKSx1PW8rOHwwLGFyW0ErOD4+Ml09YXJbdT4+Ml0sZT0wfGFyW3U+PjJdLGFyWygoMHxhcltlPj4yXSk9PSgwfG8pP2U6ZSs0fDApPj4yXT1BLGFyW24+PjJdPW8sYXJbdT4+Ml09QTszMz09KDB8dSkmJih0clt0KzEyPj4wXT0xLHRyW28rMTI+PjBdPTAsbj0wfGFyWyhBPXQrNHwwKT4+Ml0sMHwoYXJbbz4+Ml09bikmJihhcltuKzg+PjJdPW8pLG49bys4fDAsYXJbdCs4Pj4yXT1hcltuPj4yXSx1PTB8YXJbbj4+Ml0sYXJbKCgwfGFyW3U+PjJdKT09KDB8byk/dTp1KzR8MCk+PjJdPXQsYXJbQT4+Ml09byxhcltuPj4yXT10LG49dCxBPW8pO3Q9MHxhcltuKzg+PjJdLHU9dCsxMnwwLHRyW24rMTI+PjBdPTB8dHJbdT4+MF0sdHJbdT4+MF09MSx0cltBKzEyPj4wXT0xLEE9MHxhclsodT10KzR8MCk+PjJdLG49MHxhcltBPj4yXSwwfChhclt1Pj4yXT1uKSYmKGFyW24rOD4+Ml09dCk7dT10Kzh8MCxhcltBKzg+PjJdPWFyW3U+PjJdLGU9MHxhclt1Pj4yXSxhclsoKDB8YXJbZT4+Ml0pPT0oMHx0KT9lOmUrNHwwKT4+Ml09QSxhcltBPj4yXT10LGFyW3U+PjJdPUF9KGIsYyksdnUoYyl9fXU9QSs1NnwwLGFyW24+PjJdPWFyW2Y+PjJdLGFyW24rND4+Ml09YXJbNCtmPj4yXSxhcltuKzg+PjJdPWFyWzgrZj4+Ml0sYXJbbisxMj4+Ml09YXJbMTIrZj4+Ml0sYXJbbisxNj4+Ml09YXJbMTYrZj4+Ml0sYXJbbisyMD4+Ml09YXJbMjArZj4+Ml0sYXJbbisyND4+Ml09YXJbMjQrZj4+Ml0sYXJbbisyOD4+Ml09YXJbMjgrZj4+Ml0sbz0wfGFyWyhhPUErNjB8MCk+PjJdO2Rve2lmKG8pe2ZvcihjPUErNjB8MDs7KWlmKCgwfGkpPCgwfChhPTB8YXJbbysxNj4+Ml0pKSl7aWYoIShhPTB8YXJbbz4+Ml0pKXthPTM2O2JyZWFrfWM9byxvPWF9ZWxzZXtpZigoMHxpKTw9KDB8YSkpe2E9NDA7YnJlYWt9aWYoIShhPTB8YXJbKGM9bys0fDApPj4yXSkpe2E9Mzk7YnJlYWt9bz1hfWlmKDM2PT0oMHxhKSl7Yz1sPW87YnJlYWt9aWYoMzk9PSgwfGEpKXtsPW87YnJlYWt9aWYoNDA9PSgwfGEpKXtsPW87YnJlYWt9fWVsc2UgYz1sPWF9d2hpbGUoMCk7dXI9KDB8YXJbYz4+Ml18fChvPTB8aHUoNTIpLGFyW28rMTY+PjJdPWksYXJbKGE9bysyMHwwKT4+Ml09YXJbbj4+Ml0sYXJbYSs0Pj4yXT1hcltuKzQ+PjJdLGFyW2ErOD4+Ml09YXJbbis4Pj4yXSxhclthKzEyPj4yXT1hcltuKzEyPj4yXSxhclthKzE2Pj4yXT1hcltuKzE2Pj4yXSxhclthKzIwPj4yXT1hcltuKzIwPj4yXSxhclthKzI0Pj4yXT1hcltuKzI0Pj4yXSxhclthKzI4Pj4yXT1hcltuKzI4Pj4yXSxhcltvPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPWwsYXJbYz4+Ml09bywoYT0wfGFyW2FyW3U+PjJdPj4yXSkmJihhclt1Pj4yXT1hLG89MHxhcltjPj4yXSksc28oMHxhcltBKzYwPj4yXSxvKSxhclsoQT1BKzY0fDApPj4yXT0xKygwfGFyW0E+PjJdKSksdCl9ZnVuY3Rpb24gWW8oQSxlKXtBfD0wO3ZhciByLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KGY9dXIpKzE2fDAscj1mLCgodHJbKGV8PTApPj4wXT0wKXwodD1uPTB8YXJbKGk9QSszNzcyMTZ8MCk+PjJdKSk9PSgwfChvPWI9MHxhclsoZD1BKzM3NzIyMHwwKT4+Ml0pKSlyZXR1cm4gdXI9ZiwoZD0wKXxkO3U9MHxhcltuPj4yXSxhPTB8YXJbdSsxMDYzNj4+Ml0sYj1jPTB8YXJbdSsxMDYzMj4+Ml07QTpkb3tpZigoMHxhKSE9KDB8Yykpe2ZvcihjPWEtYz4+MixhPTA7bD0wfGFyW2IrKGE8PDIpPj4yXSxhPWErMXwwLDB8YXJbbCs0MD4+Ml07KWlmKGM+Pj4wPD1hPj4+MClicmVhayBBO2lmKGwpe2lmKDB8dHJbbCszNj4+MF0mJnJhKEErMzc2MTQ4fDApLHRyW2U+PjBdPTEsbj0wfFFvKEEsdSxsKSlyZXR1cm4gdXI9ZiwwfChkPW4pO3Q9bj0wfGFyW2k+PjJdLG89MHxhcltkPj4yXTticmVha319fXdoaWxlKDApO2lmKDE8by10Pj4yPj4+MD8odT0wfGFyW24+PjJdLCgwfChiPTB8YXJbdSsxMDYzNj4+Ml0pKSE9KDB8YXJbdSsxMDYzMj4+Ml0pJiYwPT0oMHxhcls0MCsoMHxhcltiKy00Pj4yXSk+PjJdKSYmKHM9MTQpKTpzPTE0LDE0PT0oMHxzKSl7aWYoKDB8byk9PSgwfChuPXM9MHxhcltpPj4yXSkpKXJldHVybiB1cj1mLChkPTApfGQ7aWYoYj0wfGFyW24+PjJdLCgwfChzPTB8YXJbYisxMDYzNj4+Ml0pKSE9KDB8YXJbYisxMDYzMj4+Ml0pJiYwPT0oMHxhcls0MCsoMHxhcltzKy00Pj4yXSk+PjJdKSlyZXR1cm4gdXI9ZiwoZD0wKXxkO2lmKCgwIT0oMHxhcltBKzU1Nj4+Ml0pfDApIT0oMC0oMHxhcltBKzU4MD4+Ml0pfDApKXJldHVybiB1cj1mLChkPTApfGQ7aWYoMD09KDB8dHJbQSs1NDg+PjBdKSYmMD09KDB8dHJbQSs1NDk+PjBdKSlyZXR1cm4gdXI9ZiwoZD0wKXxkfWlmKGM9MHxhcltuPj4yXSx0cltlPj4wXT0xLG49MHxhcltjPj4yXSwwPCgwfGFyWyhvPW4rMTAzNDR8MCk+PjJdKSl7Zm9yKHQ9bisxMDUyNHwwLG49MDtUbigoMHxhclt0Pj4yXSkrKDgwKm58MCl8MCwxKSwoMHwobj1uKzF8MCkpPCgwfGFyW28+PjJdKTspO2E9MHxhcltjPj4yXX1lbHNlIGE9bjtuPTB8YXJbKG89YSsxMDMzMnwwKT4+Ml0sdD0wPT0oMHx0cltuKzUzMj4+MF0pLDB8YXJbMzc1ODkyKygwfGFyWzEwMzMyKygwfGFyW0ErMzc2MjI0Pj4yXSk+PjJdKT4+Ml0/KHQ/KGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGE9MCxjPTAsbD0wO2lmKHVyPShvPXVyKSsxNnwwLHI9byxpPTB8YXJbKEF8PTApPj4yXSxsPTB8YXJbMTAzMzIraT4+Ml0sY2EoaSxhclsoZj01ODI4K2l8MCk+PjJdPDwxKSxuPUErMTA2Njh8MCx0PUErMTA2NzJ8MCxsPWwrMzc1Mzk2fDAsZT1BKzEwNjY0fDAsMDwoMHxhcltmPj4yXSkpe2ZvcihjPTA7QT0wfGh1KDIwKSxhcltBKzQ+PjJdPTAsYXJbQT4+Ml09OTU1MixhcltBKzg+PjJdPWksYXJbQSsxMj4+Ml09Yyx0cltBKzE2Pj4wXT0xLGFyW3I+PjJdPUEsKGE9MHxhcltuPj4yXSk+Pj4wPCgwfGFyW3Q+PjJdKT4+PjA/KGFyW2E+PjJdPUEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSkpOk9lKGUsciksU24obCxBKSwoMHwoYz1jKzF8MCkpPCgwfChBPTB8YXJbZj4+Ml0pKTspO2lmKDA8KDB8QSkpe2ZvcihBPTA7YT0wfGh1KDIwKSxhclthKzQ+PjJdPTAsYXJbYT4+Ml09OTU1MixhclthKzg+PjJdPWksYXJbYSsxMj4+Ml09QSx0clthKzE2Pj4wXT0wLGFyW3I+PjJdPWEsKGM9MHxhcltuPj4yXSk+Pj4wPCgwfGFyW3Q+PjJdKT4+PjA/KGFyW2M+PjJdPWEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSkpOk9lKGUsciksU24obCxhKSwoMHwoQT1BKzF8MCkpPCgwfGFyW2Y+PjJdKTspO3VyPW99ZWxzZSB1cj1vfWVsc2UgdXI9b30oYyksdD0zLG49MHxhcltvPj4yXSk6dD0xLDB8dHJbbis1MzM+PjBdfHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKHVyPShuPXVyKSsxNnwwLGY9bixiPTB8YXJbKEF8PTApPj4yXSwhKDB8dHJbYis1NDY3Pj4wXSkpcmV0dXJuIHVyPW4sYj0wO2lmKG89MHxhclsodD1iKzEwMzMyfDApPj4yXSx1PWIrMTA0ODB8MCwwfHRhKGk9QSs4fDAsMHxhcltiKzI0Pj4yXSwwfGFyW2IrMjg+PjJdLDB8YXJbYisyMD4+Ml0sYis3NjR8MCwwLG8sMHxhcltiKzEwMzM2Pj4yXSwwfGFyW3U+PjJdLDB8YXJbdSs0Pj4yXSwwfGFyW2IrMTA0ODg+PjJdLDEpKXJldHVybiBlcig0KygwfGFyW3Q+PjJdKXwwLDEwMjQsMCksdXI9bixiPTA7aWYocj0wfGFyW2IrNTgyOD4+Ml0sY2EoYixyKSwwPCgwfHIpKWZvcihsPUErMTA2Njh8MCx1PUErMTA2NzJ8MCxjPW8rMzc1Mzk2fDAsbz1BKzEwNjY0fDAsdD0wO0E9MHxodSgyOCksYXJbQSs0Pj4yXT0wLGFyW0E+PjJdPTc3NTIsYXJbQSsxNj4+Ml09YixhcltBKzIwPj4yXT1pLGFyW0ErMTI+PjJdPWIsYXJbQSs4Pj4yXT10LGFyW0ErMjQ+PjJdPWUsYXJbZj4+Ml09QSwoYT0wfGFyW2w+PjJdKT4+PjA8KDB8YXJbdT4+Ml0pPj4+MD8oYXJbYT4+Ml09QSxhcltsPj4yXT00KygwfGFyW2w+PjJdKSk6T2UobyxmKSxTbihjLEEpLCgwfCh0PXQrMXwwKSkhPSgwfHIpOyk7c2EoYiksZnVuY3Rpb24oQSxlKXt2YXIgcixpPTAsZj0wLG49MDtuPShlPWV8MCkrNHwwLGY9MHxhclsoaT0oQT1BfDApKzR8MCk+PjJdLGFyW2k+PjJdPWFyW24+PjJdLGFyW24+PjJdPWYsZj1lKzYwfDAsaT0wfGFyWyhuPUErNjB8MCk+PjJdLGFyW24+PjJdPWFyW2Y+PjJdLGFyW2Y+PjJdPWksaT1lKzEwNDkyfDAsbj0wfGFyWyhmPUErMTA0OTJ8MCk+PjJdLGFyW2Y+PjJdPWFyW2k+PjJdLGFyW2k+PjJdPW4sbj1lKzh8MCxmPTB8YXJbKGk9QSs4fDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs2NHwwLGk9MHxhclsobj1BKzY0fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGk9ZSsxMDQ5NnwwLG49MHxhclsoZj1BKzEwNDk2fDApPj4yXSxhcltmPj4yXT1hcltpPj4yXSxhcltpPj4yXT1uLG49ZSsxMnwwLGY9MHxhclsoaT1BKzEyfDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs2OHwwLGk9MHxhclsobj1BKzY4fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGk9ZSsxMDUwMHwwLG49MHxhclsoZj1BKzEwNTAwfDApPj4yXSxhcltmPj4yXT1hcltpPj4yXSxhcltpPj4yXT1uLG49ZSs0MHwwLGY9MHxhclsoaT1BKzQwfDApPj4yXSxhcltpPj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLGY9ZSs0NHwwLGk9MHxhclsobj1BKzQ0fDApPj4yXSxhcltuPj4yXT1hcltmPj4yXSxhcltmPj4yXT1pLGU9ZSsxMDUwNHwwLGk9MHxhclsoQT1mPUErMTA1MDR8MCk+PjJdLEE9MHxhcltBKzQ+PjJdLHI9MHxhclsobj1lKSs0Pj4yXSxhcltmPj4yXT1hcltuPj4yXSxhcltmKzQ+PjJdPXIsYXJbZT4+Ml09aSxhcltlKzQ+PjJdPUF9KGIsaSksdXI9bixiPTF9KGMsdCksc2EoYSkpOih0JiYoZnVuY3Rpb24oQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wO2lmKDA8KDB8YXJbKHQ9KEF8PTApKzU4Mjh8MCk+PjJdKSl7Zm9yKG49Zj0wO2Y9MHxmfFp0KEEsbiksKDB8KG49bisxfDApKTwoMHxhclt0Pj4yXSk7KTtpZihmKXtpPUErMTA0NzJ8MCxwdChBLDEsMCwwfGFyWyhyPUErMTA0NzZ8MCk+PjJdLDAsMHxhcltpPj4yXSksZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSwoODwoMHxhclsoZT1BKzU3NjB8MCk+PjJdKT95dDpCdCkoQSwxLDAsZiwwLG4pLHQ9QSs1Nzc2fDA7ZG97aWYoMHxhclt0Pj4yXSl7aWYoZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSw4PCgwfGFyW0ErNTc2OD4+Ml0pKXtFdChBLDEsMCxmLDAsbik7YnJlYWt9WHQoQSwxLDAsZiwwLG4pO2JyZWFrfX13aGlsZSgwKTtpZihwdChBLDAsMCwwfGFyW3I+PjJdLDAsMHxhcltpPj4yXSksZj0wfGFyW3I+PjJdLG49MHxhcltpPj4yXSwoODwoMHxhcltlPj4yXSk/eXQ6QnQpKEEsMCwwLGYsMCxuKSwwfGFyW3Q+PjJdKW49MHxhcltyPj4yXSxmPTB8YXJbaT4+Ml0sODwoMHxhcltBKzU3Njg+PjJdKT9FdChBLDAsMCxuLDAsZik6WHQoQSwwLDAsbiwwLGYpfX19KGEpLG49MHxhcltvPj4yXSksMHx0cltuKzUzMz4+MF18fGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wO2lmKCEoMHx0cls1NDY3KyhBfD0wKT4+MF0pKXJldHVybjtkPUErNDB8MCxDPTB8YnIoMHxhclsoaz1BKzI4fDApPj4yXSwwfGFyW2Q+PjJdKSxDPTB8YnIoQywoNysoMHxhclsoaD1BKzU3NjB8MCk+PjJdKXwwKS84fDApLGU9QSs0NHwwLFY9MHxicigwfGFyWyhyPUErMzZ8MCk+PjJdLDB8YXJbZT4+Ml0pLFY9MHxicihWLCg3KygwfGFyWyhpPUErNTc2OHwwKT4+Ml0pfDApLzh8MCksVj0wfHd1KC0xPCgwfChWPSgwfFYpPCgwfEMpP0M6VikpP1Y6LTEpLEM9MD09KDB8YXJbQSs1Nzc2Pj4yXSk/MTozLG49QSs1ODIwfDAsdD1BKzEwMzUyfDAsbz1BKzEwMzQwfDAsYT1BKzQ4fDAsYz1BKzUyfDAsbD1BKzU4MDR8MCx1PUErNHwwLGI9QSs1NzgwfDAscz1BKzU3ODR8MCx3PTB8YXJbKGY9QSs1ODI4fChHPTApKT4+Ml07QTpmb3IoOzspe2lmKEI9MHxhclsoWD0oVz0wPT0oMHxHKSk/ZDplKT4+Ml0sST1BKzQrKEc8PDIpfDAseT0wfGJyKDB8YXJbKFc/azpyKT4+Ml0sQiksRT1XP2g6aSxoYigwfFYsMHxhcltJPj4yXSwwfGJyKHksKDcrKDB8YXJbRT4+Ml0pfDApLzh8MCkpLDA8KDB8dykpZm9yKHc9KHk9MCl8YXJbbj4+Ml07Oyl7aWYoMDwoMHx3KSlmb3IocD0wOzspe2lmKHc9KDB8YnIoMHxhclt0Pj4yXSx5KSkrcHwwLHc9MHxsclsoMHxhcltvPj4yXSkrKDI0Knd8MCkrMj4+MV0sdj0wfGFyW2E+PjJdLHc+Pj4wPj0oMHxhcltjPj4yXSktdj4+Mj4+PjApe3c9MjE7YnJlYWsgQX1pZighKFo9MHxhclt2Kyh3PDwyKT4+Ml0pKXt3PTIxO2JyZWFrIEF9ZG97aWYoVyl7aWYoMHx0cltaKzMyNT4+MF0pe2lmKHY9MTw8YXJbbD4+Ml0sbT0wfGFyW3U+PjJdLHc9MHxhcltkPj4yXSw4PCgwfGFyW2g+PjJdKSl7UmEoQSxwLHksWiwwLHYsdixWLEIsbSx3KTticmVha31OYShBLHAseSxaLDAsdix2LFYsQixtLHcpO2JyZWFrfX1lbHNlIGlmKDB8dHJbWiszMjY+PjBdKXtpZihtPTE8PGFyW2w+PjJdLHY9KDB8bSkvKDB8YXJbYj4+Ml0pfDAsbT0oMHxtKS8oMHxhcltzPj4yXSl8MCxnPTB8YXJbST4+Ml0sdz0wfGFyW1g+PjJdLDg8KDB8YXJbRT4+Ml0pKXtSYShBLHAseSxaLEcsdixtLFYsQixnLHcpO2JyZWFrfU5hKEEscCx5LFosRyx2LG0sVixCLGcsdyk7YnJlYWt9fXdoaWxlKDApO2lmKHA9cCsxfDAsKDB8KHc9MHxhcltuPj4yXSkpPD0oMHxwKSl7dj13O2JyZWFrfX1lbHNlIHY9dztpZih5PXkrMXwwLCgwfCh3PTB8YXJbZj4+Ml0pKTw9KDB8eSkpYnJlYWs7dz12fWlmKCgwfEMpPD0oMHwoRz1HKzF8MCkpKXt3PTIwO2JyZWFrfX17aWYoMjA9PSgwfHcpKXJldHVybiBtdShWKTtpZigyMT09KDB8dykpO319KGEpKSxhPWMrMTA2NDh8MCxuPTB8YXJbKG89YysxMDY0NHwwKT4+Ml07QTpkb3tpZigoMHxhclthPj4yXSk9PSgwfG4pKWE9MDtlbHNlIGZvcih0PTA7Oyl7aWYobj0wfFFhKG4rKDgwKnR8MCl8MCwwfGFyW2M+PjJdKSx0PXQrMXwwLDB8bil7YT1uO2JyZWFrIEF9aWYobj0wfGFyW28+PjJdLHQ+Pj4wPj0oKCgwfGFyW2E+PjJdKS1ufDApLzgwfDApPj4+MCl7YT0wO2JyZWFrfX19d2hpbGUoMCk7aWYoMHwobj0wfGFyW2M+PjJdKSl7ZG97aWYoMHx0cltuKzEwMD4+MF0pe2lmKDB8dHJbbisxMDUxNj4+MF0mJjB8dHJbQSs1MTQ+PjBdKWJyZWFrO2FyW3I+PjJdPW4sKDB8KG89MHxhclsodD1BKzM3NjE3MnwwKT4+Ml0pKT09KDB8YXJbQSszNzYxNzY+PjJdKT9EbyhBKzM3NjE2OHwwLHIpOihhcltvPj4yXT1uLGFyW3Q+PjJdPTQrKDB8YXJbdD4+Ml0pKX19d2hpbGUoMCk7KCgwfGFyW0ErMzc2MTcyPj4yXSktKDB8YXJbQSszNzYxNjg+PjJdKT4+MnwwKT4oMHxhcltuKzU5NisoMTIqKCgwfGFyW24rMTE2Pj4yXSktMXwwKXwwKSs0Pj4yXSkmJkFhKEErMzc2MTQ4fDApfWlmKFRlKGMpLHZ1KGMpLDE8KG49MHxhcltkPj4yXSktKHQ9MHxhcltpPj4yXSk+PjI+Pj4wKWZvcihvPTE7YXJbKG49dCkrKG8rLTE8PDIpPj4yXT1hcltuKyhvPDwyKT4+Ml0sKG89bysxfDApPj4+MDwobj0wfGFyW2Q+PjJdKS0odD0wfGFyW2k+PjJdKT4+Mj4+PjA7KTtyZXR1cm4gYXJbZD4+Ml09bistNCx1cj1mLDB8KGQ9YSl9ZnVuY3Rpb24gUW8oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7aWYobD0odT0wfGFyWyhmPShyfD0wKSs0fDApPj4yXSkrMTM0NHwwLHU9dSsxMzQ4fDAsdD0wfGFyW2w+PjJdLCgwfGFyW3U+PjJdKSE9KDB8dCkpZm9yKGE9QSszNzYxNDh8MCxjPUErMzc2MTU2fDAsbz0wOy0xPCgwfCh0PTB8JG8oYSwwfGFyW3QrKG88PDIpPj4yXSkpKSYmKGFyWzk2KygwfGFyWygwfGFyW2M+PjJdKSsodDw8Mik+PjJdKT4+Ml09MCksbz1vKzF8MCx0PTB8YXJbbD4+Ml0sbz4+PjA8KDB8YXJbdT4+Ml0pLXQ+PjI+Pj4wOyk7dT0wfGFyW2U+PjJdLGFyWyhpPXIrNDB8MCk+PjJdPTEsYz0wfGFyW3UrMTAzMzI+PjJdO0E6ZG97aWYoMDwoMHxhcltjKzM3NTg5Mj4+Ml0pKWlmKGw9KGs9MHx0clt1KzU5NjU+PjBdKTw8MjQ+PjI0IT0wLHQ9KGg9MHx0clt1KzU5NjY+PjBdKTw8MjQ+PjI0IT0wLChrfGgpPDwyND4+MjQpZD10O2Vsc2V7aWYoMDwoMHwoYT0wfGFyWyhvPWMrMTY4fDApPj4yXSkpKXt0PTA7ZG97aWYoMWUzPT0oMHxhcltjKzg4Kyh0PDwyKT4+Ml0pKXtkPTA7YnJlYWsgQX10PXQrMXwwfXdoaWxlKCgwfHQpPCgwfGEpKTsoMHxhKTwyMCYmKHY9MTIpfWVsc2Ugdj0xMjsxMj09KDB8dikmJihhcltvPj4yXT1hKzEsYXJbYys4OCsoYTw8Mik+PjJdPTFlMyksMjA9PSgwfCh0PTB8YXJbKG89Yys4NHwwKT4+Ml0pKT8obz0xMDAxLHQ9MTkpOihhcltvPj4yXT10KzEsbz0xZTMpLGFyW2MrNCsodDw8Mik+PjJdPW8sZD0wfWVsc2UgbD1kPTB9d2hpbGUoMCk7aWYoaz1lKzEwNjMyfDAsKDB8KHQ9MHxhclsoaD1lKzEwNjM2fDApPj4yXSkpIT0oMHwobz0wfGFyW2s+PjJdKSkpe2lmKCgwfGFyW28+PjJdKT09KDB8cikmJjA8KDB8KGI9MHxhclsxNisoMHxhcltmPj4yXSk+PjJdKSkpe2ZvcihvPXUrMTA1MjR8MCx0PTA7VG4oKDB8YXJbbz4+Ml0pKyg4MCp0fDApfDAsMSksKDB8KHQ9dCsxfDApKSE9KDB8Yik7KTtvPTB8YXJbaz4+Ml0sdD0wfGFyW2g+PjJdfX1lbHNlIG89dDthPXQtbz4+MjtBOmRve2lmKDE8YT4+PjApe2Zvcih0PTE7KDB8YXJbbysodDw8Mik+PjJdKSE9KDB8cik7KWlmKGE+Pj4wPD0odD10KzF8MCk+Pj4wKWJyZWFrIEE7aWYoMHwoYz0wfGFyW28rKHQrLTE8PDIpPj4yXSkmJjI9PSgwfGFyW2MrNDA+PjJdKSl7YT1hKy0xfDAsdD0wO2Rve2lmKGE+Pj4wPD10Pj4+MClicmVhayBBO3Q9KGI9dCkrMXwwfXdoaWxlKCgwfGFyW28rKGI8PDIpPj4yXSkhPSgwfGMpKTtpZigwfCh0PTB8YXJbbysodDw8Mik+PjJdKSYmKDB8KG49MHxhclsxNisoMHxhcltjKzQ+PjJdKT4+Ml0pKTwoMHxhclsxNisoMHxhclsocz10KzR8MCk+PjJdKT4+Ml0pKWRve2lmKHQ9MHxhcltlPj4yXSwoMHxuKT49KDB8YXJbdCsxMDM0ND4+Ml0pKWJyZWFrIEE7VG4oKDB8YXJbdCsxMDUyND4+Ml0pKyg4MCpufDApfDAsMSksbj1uKzF8MH13aGlsZSgoMHxuKTwoMHxhclsxNisoMHxhcltzPj4yXSk+PjJdKSl9fX13aGlsZSgwKTtpZighKGx8ZCkpe2E9MHxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShuPXVyKSsxODYyNHwwLGY9bix0PTB8YXJbKGk9NCsocnw9MCl8MCk+PjJdLGI9dCsxMzQ4fDAsbz0wfGFyWyh1PXQrMTM0NHwwKT4+Ml0sKDB8YXJbYj4+Ml0pIT0oMHxvKSl7Zm9yKGM9QSszNzYxNDh8MCxsPUErMzc2MTU2fDAsYT0wLHQ9bzstMTwoMHwodD0wfCRvKGMsMHxhclt0KyhhPDwyKT4+Ml0pKSkmJihhcls5NisoMHxhclsoMHxhcltsPj4yXSkrKHQ8PDIpPj4yXSk+PjJdPTApLGE9YSsxfDAsdD0wfGFyW3U+PjJdLGE+Pj4wPCgwfGFyW2I+PjJdKS10Pj4yPj4+MDspO3Q9MHxhcltpPj4yXX1pZihiPTB8YXJbZT4+Ml0sKDB8YXJbdCsxNj4+Ml0pPj4+MD49KDB8YXJbYisxMDI3Nj4+Ml0pLSgwfGFyW2IrMTAyNzI+PjJdKT4+Mj4+PjApcmV0dXJuIHVyPW4sMHwocz02KTtpZihzdChiPWYrMTg1ODB8MCksdD1mKzQ4fDAsYXJbKHU9ZisxODUwOHwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCx2YigwfChhcltmKzIxMTI+PjJdPXQpLDAsMjA0OCksdD0wfGFyW2k+PjJdLGFyW2YrMTg2MDA+PjJdPXQsdT0wfGFyW2U+PjJdLGFyW2YrMTg1OTY+PjJdPXUsYXJbZisxODU5Mj4+Ml09QSxhcltmKzE4NjA0Pj4yXT1lLGFyW2YrMTg2MDg+PjJdPXIsYXJbZis0Pj4yXT1hclsoMHxhclt1KzEwMjcyPj4yXSkrKGFyW3QrMTY+PjJdPDwyKT4+Ml0sU2UoYXJbZisxODYxMj4+Ml09MCxmKSwoMHwodD0wfGFyW3IrMTI+PjJdKSk8MSl0PTE3O2Vsc2V7bnQoZisxODU1NnwwLDB8YXJbcis4Pj4yXSx0KTtkb3tpZigwfHRyW0ErOTM4MTc+PjBdJiYwfHRyWzQrKDB8YXJbaT4+Ml0pPj4wXSl7aWYodT1lKzEwNjc2fDAsYz0oMHxhcls1ODI4KygwfGFyW0ErMzc2MjI0Pj4yXSk+PjJdKS0xfDAsdD0wfGFyWyhsPWUrMTA2ODB8MCk+PjJdLG89MHxhclt1Pj4yXSwoYT10LW8+PjMpPj4+MDxjPj4+MCl7Sm8odSxjLWF8MCk7YnJlYWt9aWYoYz4+PjA8YT4+PjAmJigwfHQpIT0oMHwocz1vKyhjPDwzKXwwKSkpZm9yKDtlPXQrLTh8MCxrdChhcltsPj4yXT1lKSwoMHwodD0wfGFyW2w+PjJdKSkhPSgwfHMpOyk7fX13aGlsZSgwKTthcltyKzEyND4+Ml09MSx0PTB8ZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2w9MHxhclsxODU5NisoQXw9MCk+PjJdLGE9MHxhcltBKzQ+PjJdLG89MHxhcltsKzU4MzY+PjJdLGM9MHxhcltsKzU4MjA+PjJdLCgwfGEpPCgwfG8pJiYobz0wfGFyWygwfGFyW2wrMTAyODQ+PjJdKSsoYTw8Mik+PjJdKTtpZihhcltBPj4yXT1vLGFyW0ErOD4+Ml09KDB8byklKDB8Yyl8MCxhcltBKzEyPj4yXT0oMHxvKS8oMHxjKXwwLGE9MHxhclsoaT1BKzE4NjAwfDApPj4yXSwhKDB8RGEoQSkpKXJldHVybiAwfChBPTE4KTt0dChmPUErMTg1NTZ8MCksbj1BKzE4NTYwfDAsdD1BKzE4NTkyfDAsbD1sKzU5NjZ8MCxlPUErMTg1ODB8MCxyPUErMTg1ODh8MCxhPTA9PSgwfHRyW2ErMTI+PihvPTApXSk7Zm9yKDs7KXtkb3tpZigwPCgwfG8pKXtpZihjPW8rLTF8MCxiPTB8YXJbaT4+Ml0sdT0wfGFyW2IrNzc2Pj4yXSxjPj4+MDwoMHxhcltiKzc4MD4+Ml0pLXU+PjI+Pj4wJiYoKDB8YXJbbj4+Ml0pLTItKDB8YXJbZj4+Ml0pfDApPT0oMHxhclt1KyhjPDwyKT4+Ml0pKWJyZWFrO2VyKDQrKDB8YXJbdD4+Ml0pfDAsMTAwMywxKX19d2hpbGUoMCk7aWYobz1vKzF8MCwyPT0oMnxKYShBLDAsYSkpKXtvPTAsYT0xNDticmVha31pZigwfHRyW2w+PjBdKXtpZihhPTB8YXJbaT4+Ml0sMzw9KGM9MHxhclthKzc5Nj4+Ml0pPj4+MCl7YT0xMjticmVha31odChlLGMsMHxhclthKzc5Mj4+Ml0pLHRyW3I+PjBdPTAsdHJbMStyPj4wXT0wLHRyWzIrcj4+MF09MCx0clszK3I+PjBdPTAsYT0wfWVsc2UgYT0wfWlmKDEyPT0oMHxhKSlzcigzOTIxMSwzOTI0MiwxNTA4LDM5MjUxKTtlbHNlIGlmKDE0PT0oMHxhKSlyZXR1cm4gMHxvO3JldHVybiAwfShmKSxUbihyKzQ0fDAsMSl9cmV0dXJuIGt0KGIpLHVyPW4sMHwocz10KX0oQSxlLHIpLGFyW2k+PjJdPTIsbz0wfGFyW2s+PjJdLHQ9KCgwfGFyW2g+PjJdKS1vPj4yKS0xfDAsbj0wO2Rve2lmKHQ+Pj4wPD1uPj4+MCl7dz1hLHY9NjA7YnJlYWt9bj0ocz1uKSsxfDB9d2hpbGUoKDB8YXJbbysoczw8Mik+PjJdKSE9KDB8cikpO2lmKDYwPT0oMHx2KSlyZXR1cm4gMHx3O2lmKCEobj0wfGFyW28rKG48PDIpPj4yXSkpcmV0dXJuIDB8KGU9YSk7aWYoISgoMHwodD0wfGFyWzE2KygwfGFyW2Y+PjJdKT4+Ml0pKTwoMHxhclsxNisoMHxhclsobz1uKzR8MCk+PjJdKT4+Ml0pKSlyZXR1cm4gMHwoZT1hKTtmb3Iobj10Ozspe2lmKHQ9MHxhcltlPj4yXSwoMHxuKT49KDB8YXJbdCsxMDM0ND4+Ml0pKXt3PWEsdj02MDticmVha31pZihUbigoMHxhclt0KzEwNTI0Pj4yXSkrKDgwKm58MCl8MCwxKSwoMHwobj1uKzF8MCkpPj0oMHxhclsxNisoMHxhcltvPj4yXSk+PjJdKSl7dz1hLHY9NjA7YnJlYWt9fWlmKDYwPT0oMHx2KSlyZXR1cm4gMHx3fWlmKGwmZClyZXR1cm4gMHwoZT0xMDA2KTtpZihsKXshZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7dXI9KGE9dXIpKzE2fDAsdD1hLG89MHxhclsoZXw9MCk+PjJdLG49MHxhcltyKzQ+PjJdLGY9MHxhcls3Njgrbj4+Ml0saD0xK2Z8MCxpPTB8YXJbNTgyMCtvPj4yXSwoMHxhclsxMDUzNitvPj4yXSkhPSgwLSgwfGFyWzEwNTMyK28+PjJdKXwwKSYmc3IoMzQ3NjIsMzQ3MDAsOTg5LDM0ODY3KTtkb3tpZigwfHRyWzQrbj4+MF0pe2lmKGw9ZSsxMDY3NnwwLHU9KDB8YXJbNTgyOCtvPj4yXSktMXwwLGM9MHxhclsoZD1lKzEwNjgwfDApPj4yXSxiPTB8YXJbbD4+Ml0sKHM9Yy1iPj4zKT4+PjA8dT4+PjApe0pvKGwsdS1zfDApO2JyZWFrfWlmKHU+Pj4wPHM+Pj4wJiYoMHxjKSE9KDB8KGs9YisodTw8Myl8MCkpKWZvcig7WD1jKy04fDAsa3QoYXJbZD4+Ml09WCksKDB8KGM9MHxhcltkPj4yXSkpIT0oMHxrKTspO319d2hpbGUoMCk7VWUocixoKSxjPTB8YXJbMTYrbj4+Ml0scz0oMHxjKS8oMHxpKXwwO0E6ZG97aWYoMDw9KDB8Zikpe2lmKG09cisxNDB8MCxnPXIrMTM2fDAsWj0xMDMzMitvfDAscD0xMDI3MitvfDAseT1yKzEyfDAsQj1yKzh8MCxFPXIrMTI0fDAsWD1BKzM3NTM5NnwwLHY9Nzc2K258MCwhZil7aWYoKDB8YXJbbT4+Ml0pPD0wJiZzcigzNDgxNywzNDgzNywxNzAsMzQ4NDgpLHU9MHxhcltnPj4yXSxhclt1KzE4NjAwPj4yXT1uLGFyW3UrMTg1OTI+PjJdPWFyW1o+PjJdLGFyW3UrMTg1OTY+PjJdPW8sYXJbKGw9dSsxODYwNHwwKT4+Ml09ZSxhclt1KzE4NjA4Pj4yXT1yLGFyW3UrND4+Ml09YXJbKDB8YXJbcD4+Ml0pKyhjPDwyKT4+Ml0sU2UoMCx1KSwoMHwoYz0wfGFyW3k+PjJdKSk8PTApYnJlYWs7bnQodSsxODU1NnwwLDB8YXJbQj4+Ml0sYyksY2EobywxKSxhcltFPj4yXT0xKygwfGFyW0U+PjJdKSxiPTB8aHUoMjApLGFyW2IrND4+Ml09MCxhcltiPj4yXT03OTcyLHRyW2IrOD4+MF09MSxhcltiKzE2Pj4yXT11LGFyW2IrMTI+PjJdPXMsYXJbdSsxODYxMj4+Ml09YixTbihYLGIpLGM9MHxhcltsPj4yXSxhclt0Pj4yXT1iLCh1PTB8YXJbKGw9YysxMDY2OHwwKT4+Ml0pPj4+MDwoMHxhcltjKzEwNjcyPj4yXSk+Pj4wPyhhclt1Pj4yXT1iLGFyW2w+PjJdPTQrKDB8YXJbbD4+Ml0pKTpPZShjKzEwNjY0fDAsdCk7YnJlYWt9Zm9yKGw9cyx3PTA7Oyl7aWYoKDB8dyk8PTApe2lmKCgwfGMpJSgwfGkpfDApYnJlYWsgQX1lbHNlIGM9MHxicihsPWM9bCsxfDAsaSk7aWYoKDB8YXJbbT4+Ml0pPD0oMHx3KSlicmVhaztpZihzPTB8YXJbZz4+Ml0sZD1zKygxODYyNCp3fDApfDAsYXJbcysoMTg2MjQqd3wwKSsxODYwMD4+Ml09bixhcltzKygxODYyNCp3fDApKzE4NTkyPj4yXT1hcltaPj4yXSxhcltzKygxODYyNCp3fDApKzE4NTk2Pj4yXT1vLGFyWyhrPXMrKDE4NjI0Knd8MCkrMTg2MDR8MCk+PjJdPWUsYXJbcysoMTg2MjQqd3wwKSsxODYwOD4+Ml09cixhcltzKygxODYyNCp3fDApKzQ+PjJdPWFyWygwfGFyW3A+PjJdKSsoYzw8Mik+PjJdLFNlKDAsZCksYj0oaD0wPT0oMHx3KSk/MDowfGFyWygwfGFyW3Y+PjJdKSsodystMTw8Mik+PjJdLHU9KDB8dyk9PSgwfGYpP3k6KDB8YXJbdj4+Ml0pKyh3PDwyKXwwLHU9MHxhclt1Pj4yXSwoMHxiKTwwKWJyZWFrIEE7aWYoISgoMHxiKTwoMHx1KSYmKDB8dSk8PSgwfGFyW3k+PjJdKSkpYnJlYWsgQTtpZihudChzKygxODYyNCp3fDApKzE4NTU2fDAsKDB8YXJbQj4+Ml0pK2J8MCx1LWJ8MCksY2EobywxKSxhcltFPj4yXT0xKygwfGFyW0U+PjJdKSxBPTB8aHUoMjApLGFyW0ErND4+Ml09MCxhcltBPj4yXT03OTcyLHRyW0ErOD4+MF09MSZoLGFyW0ErMTY+PjJdPWQsYXJbQSsxMj4+Ml09bCxhcltzKygxODYyNCp3fDApKzE4NjEyPj4yXT1BLFNuKFgsQSkscz0wfGFyW2s+PjJdLGFyW3Q+PjJdPUEsKGI9MHxhclsodT1zKzEwNjY4fDApPj4yXSk+Pj4wPCgwfGFyW3MrMTA2NzI+PjJdKT4+PjA/KGFyW2I+PjJdPUEsYXJbdT4+Ml09NCsoMHxhclt1Pj4yXSkpOk9lKHMrMTA2NjR8MCx0KSwhKCgwfHcpPCgwfGYpKSlicmVhayBBO3c9dysxfDB9c3IoMzQ4MTcsMzQ4MzcsMTcwLDM0ODQ4KX19d2hpbGUoMCk7aWYoc2EobyksZD1lKzEwNjY0fDAsbD0wfGFyWyhrPWUrMTA2Njh8MCk+PjJdLGI9MHxhcltkPj4yXSwoMHwoYz1sKSkhPSgwfCh1PWIpKSl7Zm9yKHM9MDsodT0wfGFyW3UrKHM8PDIpPj4yXSkmJihpc1s1MTEmYXJbNCsoMHxhclt1Pj4yXSk+PjJdXSh1KSxjPTB8YXJbaz4+Ml0sYj0wfGFyW2Q+PjJdLGw9YyksKHM9cysxfDApPj4+MDxsLSh1PWIpPj4yPj4+MDspO2w9Yn11cj0oKDB8YykhPSgwfHUpJiYoYXJbaz4+Ml09YysofigoYystNC1sfDApPj4+Mik8PDIpKSxhKX0oQSxlLHIpLGFyW2k+PjJdPTIsbz0wfGFyW2s+PjJdLHQ9KCgwfGFyW2g+PjJdKS1vPj4yKS0xfDAsbj0wO2Rve2lmKHQ+Pj4wPD1uPj4+MCl7dz0wLHY9NjA7YnJlYWt9bj0ocz1uKSsxfDB9d2hpbGUoKDB8YXJbbysoczw8Mik+PjJdKSE9KDB8cikpO2lmKDYwPT0oMHx2KSlyZXR1cm4gMHx3O2lmKCEobj0wfGFyW28rKG48PDIpPj4yXSkpcmV0dXJuKGU9MCl8ZTtpZighKCgwfCh0PTB8YXJbMTYrKDB8YXJbZj4+Ml0pPj4yXSkpPCgwfGFyWzE2KygwfGFyWyhvPW4rNHwwKT4+Ml0pPj4yXSkpKXJldHVybihlPTApfGU7Zm9yKG49dDs7KXtpZih0PTB8YXJbZT4+Ml0sKDB8bik+PSgwfGFyW3QrMTAzNDQ+PjJdKSl7dz0wLHY9NjA7YnJlYWt9aWYoVG4oKDB8YXJbdCsxMDUyND4+Ml0pKyg4MCpufDApfDAsMSksKDB8KG49bisxfDApKT49KDB8YXJbMTYrKDB8YXJbbz4+Ml0pPj4yXSkpe3c9MCx2PTYwO2JyZWFrfX1pZig2MD09KDB8dikpcmV0dXJuIDB8d31kfHxzcig1NTczOSwzNDcwMCw5NzEsMzQ3MzUpLGE9MHxmdW5jdGlvbihBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MDt1cj0oYT11cikrMTZ8MCxmPWEsbj0wfGFyWyhlfD0wKT4+Ml0sdD0wfGFyW3IrND4+Ml0sbz0wfGFyWzc2OCt0Pj4yXSxpPTB8YXJbNTgyMCtuPj4yXSwoMHxhclsxMDUzNituPj4yXSkhPSgwLSgwfGFyWzEwNTMyK24+PjJdKXwwKSYmc3IoMzQ3NjIsMzQ3MDAsMTEwMywzNDc5Myk7VWUociwxK298MCksYz0wfGFyWzE2K3Q+PjJdO0E6ZG97aWYoKDB8byk8MClDPTA7ZWxzZXtmb3IoZz01OTY4K258MCxaPTU5NzIrbnwwLHA9cisxNDB8MCx5PXIrMTM2fDAsQj0xMDMzMitufDAsRT0xMDI3MitufDAsWD1yKzEyfDAsVz1yKzh8MCxJPXIrMTI0fDAsdj1BKzM3NTM5NnwwLG09Nzc2K3R8MCxsPWMsQT0wfGFyWygwfGFyWzEwMzA4K24+PjJdKSsoYzw8Mik+PjJdLHc9MDs7KXtpZigwPCgwfHcpKXtpZihjPUErMXwwLEE9MHxhcltnPj4yXSwoMHxjKT49KDB8YnIoMHxhcltaPj4yXSxBKSkpe0M9MTAwNzticmVhayBBfWw9KDB8YnIoMHxhclsxMDIyOCtuKygoKDB8YykvKDB8QSl8MCk8PDIpPj4yXSxpKSkrKDB8YXJbMTAxODQrbisoKCgwfGMpJSgwfEEpfDApPDwyKT4+Ml0pfDAsQT1jfWlmKCgwfGFyW3A+PjJdKTw9KDB8dykpYnJlYWs7aWYoYj0wfGFyW3k+PjJdLHM9YisoMTg2MjQqd3wwKXwwLGFyW2IrKDE4NjI0Knd8MCkrMTg2MDA+PjJdPXQsYXJbYisoMTg2MjQqd3wwKSsxODU5Mj4+Ml09YXJbQj4+Ml0sYXJbYisoMTg2MjQqd3wwKSsxODU5Nj4+Ml09bixhclsoZD1iKygxODYyNCp3fDApKzE4NjA0fDApPj4yXT1lLGFyW2IrKDE4NjI0Knd8MCkrMTg2MDg+PjJdPXIsYXJbYisoMTg2MjQqd3wwKSs0Pj4yXT1hclsoMHxhcltFPj4yXSkrKGw8PDIpPj4yXSxTZSgwLHMpLHU9KGs9MD09KDB8dykpPzA6MHxhclsoMHxhclttPj4yXSkrKHcrLTE8PDIpPj4yXSxjPSgwfHcpPT0oMHxvKT9YOigwfGFyW20+PjJdKSsodzw8Mil8MCxjPTB8YXJbYz4+Ml0sKDB8dSk8MCl7Qz0xNzticmVhayBBfWlmKCEoKDB8dSk8KDB8YykmJigwfGMpPD0oMHxhcltYPj4yXSkpKXtDPTE3O2JyZWFrIEF9aWYobnQoYisoMTg2MjQqd3wwKSsxODU1NnwwLCgwfGFyW1c+PjJdKSt1fDAsYy11fDApLGNhKG4sMSksYXJbST4+Ml09MSsoMHxhcltJPj4yXSksaD0wfGh1KDI0KSxhcltoKzQ+PjJdPTAsYXJbaD4+Ml09NzkzMix0cltoKzg+PjBdPTEmayxhcltoKzIwPj4yXT1zLGFyW2grMTI+PjJdPSgwfGwpJSgwfGkpfDAsYXJbaCsxNj4+Ml09KDB8bCkvKDB8aSl8MCxhcltiKygxODYyNCp3fDApKzE4NjEyPj4yXT1oLFNuKHYsaCksYz0wfGFyW2Q+PjJdLGFyW2Y+PjJdPWgsKGI9MHxhclsodT1jKzEwNjY4fDApPj4yXSk+Pj4wPCgwfGFyW2MrMTA2NzI+PjJdKT4+PjA/KGFyW2I+PjJdPWgsYXJbdT4+Ml09NCsoMHxhclt1Pj4yXSkpOk9lKGMrMTA2NjR8MCxmKSwhKCgwfHcpPCgwfG8pKSl7Qz0wO2JyZWFrIEF9dz13KzF8MH1zcigzNDgxNywzNDgzNywxNzAsMzQ4NDgpfX13aGlsZSgwKTtpZihzYShuKSxzPWUrMTA2NjR8MCxjPTB8YXJbKGQ9ZSsxMDY2OHwwKT4+Ml0sdT0wfGFyW3M+PjJdLCgwfChBPWMpKSE9KDB8KGw9dSkpKXtmb3IoYj0wOyhsPTB8YXJbbCsoYjw8Mik+PjJdKSYmKGlzWzUxMSZhcls0KygwfGFyW2w+PjJdKT4+Ml1dKGwpLEE9MHxhcltkPj4yXSx1PTB8YXJbcz4+Ml0sYz1BKSwoYj1iKzF8MCk+Pj4wPGMtKGw9dSk+PjI+Pj4wOyk7Yz11fXJldHVybiB1cj0oKDB8QSkhPSgwfGwpJiYoYXJbZD4+Ml09QSsofigoQSstNC1jfDApPj4+Mik8PDIpKSxhKSwwfEN9KEEsZSxyKSxhcltpPj4yXT0yLG89MHxhcltrPj4yXSx0PSgoMHxhcltoPj4yXSktbz4+MiktMXwwLG49MDtkb3tpZih0Pj4+MDw9bj4+PjApe3c9YSx2PTYwO2JyZWFrfW49KEE9bikrMXwwfXdoaWxlKCgwfGFyW28rKEE8PDIpPj4yXSkhPSgwfHIpKTtpZig2MD09KDB8dikpcmV0dXJuIDB8dztpZighKHQ9MHxhcltvKyhuPDwyKT4+Ml0pKXJldHVybiAwfChlPWEpO2lmKCgwfChuPTB8YXJbMTYrKDB8YXJbZj4+Ml0pPj4yXSkpPj0oMHxhclsxNisoMHxhclsobz10KzR8MCk+PjJdKT4+Ml0pKXJldHVybiAwfChlPWEpO2Zvcig7Oyl7aWYodD0wfGFyW2U+PjJdLCgwfG4pPj0oMHxhclt0KzEwMzQ0Pj4yXSkpe3c9YSx2PTYwO2JyZWFrfWlmKFRuKCgwfGFyW3QrMTA1MjQ+PjJdKSsoODAqbnwwKXwwLDEpLCgwfChuPW4rMXwwKSk+PSgwfGFyWzE2KygwfGFyW28+PjJdKT4+Ml0pKXt3PWEsdj02MDticmVha319cmV0dXJuIDYwPT0oMHx2KT8wfHc6MH1mdW5jdGlvbiBEbyhBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Zj0oQXw9MCkrNHwwLG49MHxhcltBPj4yXSwxMDczNzQxODIzPChvPTErKGk9KHQ9KDB8YXJbZj4+Ml0pLW58MCk+PjIpfDApPj4+MCYmemwoKSxhPShjPSgwfGFyWyhsPUErOHwwKT4+Ml0pLW58MCk+PjEsYT1jPj4yPj4+MDw1MzY4NzA5MTE/YT4+PjA8bz4+PjA/bzphOjEwNzM3NDE4MjM7ZG97aWYoYSl7aWYoISgxMDczNzQxODIzPGE+Pj4wKSl7Yz0wfGh1KGE8PDIpO2JyZWFrfVp1KGw9MHxYKDgpLDQ0NTE5KSxhcltsPj4yXT0xNzY2MCxJKDB8bCw0MDE2LDQyOCl9ZWxzZSBjPTB9d2hpbGUoMCk7YXJbKHI9YysoaTw8Mil8MCk+PjJdPWFyW2U+PjJdLG89cisoMC1pPDwyKXwwLDA8KDB8dCkmJmhiKDB8bywwfG4sMHx0KSxhcltBPj4yXT1vLGFyW2Y+PjJdPTQrcixhcltsPj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBKbyhBLGUpe3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKChlfD0wKT4+PjA8PSh0PTB8YXJbKGk9KEF8PTApKzh8MCk+PjJdKS0oZj0wfGFyWyhsPUErNHwwKT4+Ml0pPj4zPj4+MClmb3IoO3N0KGYpLGY9OCsoMHxhcltsPj4yXSl8MCxhcltsPj4yXT1mLDAhPSgwfChlPWUrLTF8MCkpOyk7ZWxzZXs1MzY4NzA5MTE8KGY9KG89Zi0obj0wfGFyW0E+PjJdKT4+MykrZXwwKT4+PjAmJnpsKCksYz0oYT10LW58MCk+PjIsZj1hPj4zPj4+MDwyNjg0MzU0NTU/Yz4+PjA8Zj4+PjA/ZjpjOjUzNjg3MDkxMTtkb3tpZihmKXtpZighKDUzNjg3MDkxMTxmPj4+MCkpe249MHxodShmPDwzKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2Ugbj0wfXdoaWxlKDApO2ZvcihjPW4rKGY8PDMpfDAsYT1vPXI9bisobzw8Myl8MCxmPXI7c3QoZiksYT1mPWErOHwwLDAhPSgwfChlPWUrLTF8MCkpOyk7aWYodD0wfGFyW0E+PjJdLCgwfChmPTB8YXJbbD4+Ml0pKT09KDB8dCkpZT1vLGY9bj10O2Vsc2V7Zm9yKG49byxlPXI7ZHQoZSstOHwwLGY9ZistOHwwKSxuPWU9bistOHwwLCgwfGYpIT0oMHx0KTspO2U9bixuPTB8YXJbQT4+Ml0sZj0wfGFyW2w+PjJdfWlmKGFyW0E+PjJdPWUsYXJbbD4+Ml09YSxhcltpPj4yXT1jLCgwfGYpIT0oMHwoZT1uKSkpZm9yKDtrdChmPWYrLTh8MCksKDB8ZikhPSgwfGUpOyk7biYmdnUobil9fWZ1bmN0aW9uIE1vKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPShBfD0wKSs0fDAsbj0wfGFyW0E+PjJdLDEwNzM3NDE4MjM8KG89MSsoaT0odD0oMHxhcltmPj4yXSktbnwwKT4+Mil8MCk+Pj4wJiZ6bCgpLGE9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpLGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLG4mJnZ1KG4pfWZ1bmN0aW9uIFRvKEEsZSxyLGksZil7QXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTA7aWYoMHxMbyh0PShlfD0wKSszNzYxNDh8MCwxKXx8c3IoMzUwNDQsMzQ3MDAsMTQzMywzNTA4MCksKDB8KG49MHxpYSh0LDB8YXJbZSszNzUzODg+PjJdLEEsMCwwLDAsMCkpKTw9LTEmJnNyKDM1MTE5LDM0NzAwLDE0MzYsMzUwODApLEE9MHxhcltlKzM3NjE1Nj4+Ml0sQT0oMHxhcltlKzM3NjE2MD4+Ml0pLUE+PjI+Pj4wPm4+Pj4wPzB8YXJbQSsobjw8Mik+PjJdOjAsZT0xPDwoMHxhcltyKzUwMDQ+PjJdKS0xLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wLC0xPCgwfChlfD0wKSkmJnZiKDB8YXJbQSs0Pj4yXSwyNTUmZXwwLDB8YnIoMHxhcltBKzI4Pj4yXSwwfGFyW0ErNDA+PjJdKSk7LTE8KDB8cikmJnZiKDB8YXJbQSs4Pj4yXSwyNTUmcnwwLDB8YnIoMHxhcltBKzM2Pj4yXSwwfGFyW0ErNDQ+PjJdKSk7aWYoKDB8aSk8PS0xKXJldHVybjt2YigwfGFyW0ErMTI+PjJdLDI1NSZpfDAsMHxicigwfGFyW0ErMzY+PjJdLDB8YXJbQSs0ND4+Ml0pKX0oQSwxPDwoMHxhcltyKzQ5OTY+PjJdKS0xLGUsZSksMDwoMHxhclsoZT1BKzEwMzY0fDApPj4yXSkpZm9yKG89QSsxMDM2MHwwLHQ9MDthPSgwfGFyW28+PjJdKSsoMyp0fDApfDAsYz0tNzY5JihjclthPj4wXXxjclthKzE+PjBdPDw4KSx0clthPj4wXT1jLHRyW2ErMT4+MF09Yz4+OCwoMHwodD10KzF8MCkpPCgwfGFyW2U+PjJdKTspO3JldHVybiBhcltBKzkyPj4yXT1pLGFyW0ErODg+PjJdPSgwfGFyW3IrNTAzMj4+Ml0pLTEmaSx0cltBKzEwMD4+MF09MCxhcltBKzk2Pj4yXT1mPzI6MSx0cltBKzEwNTE2Pj4wXT0xLDB8bn1mdW5jdGlvbiBVbyhBLGUpe0F8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wO2lmKHVyPShpPXVyKSsxMTJ8MCxyPWkrMjR8MCx0PShvPWkpKzEwNHwwLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2FyWyhBfD0wKT4+Ml09ZSxhclsoaT1BKzR8MCk+PjJdPXIsYXJbKGM9YT1BKzh8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyWyhjPUErMTZ8MCk+PjJdPTAscj8oZj1lKzF8MCxhcltBPj4yXT1mLG49MHxjcltlPj4wXSxvPXIrLTF8MCxhcltpPj4yXT1vLG49MHxkYigwfG4sMCw1NiksdD1ELGFyWyhsPWEpPj4yXT1uLGFyW2wrND4+Ml09dCxvPyhvPWUrMnwwLGFyW0E+PjJdPW8sZj0wfGNyW2Y+PjBdLGw9cistMnwwLGFyW2k+PjJdPWwsZj0wfGRiKDB8ZiwwLDQ4KSxmfD1uLG49dHxELGFyWyh0PWEpPj4yXT1mLGFyW3QrND4+Ml09bixsPyh0PWUrM3wwLGFyW0E+PjJdPXQsbz0wfGNyW28+PjBdLGw9cistM3wwLGFyW2k+PjJdPWwsbz0wfGRiKDB8bywwLDQwKSxvfD1mLGY9bnxELGFyWyhuPWEpPj4yXT1vLGFyW24rND4+Ml09ZixsPyhuPWUrNHwwLGFyW0E+PjJdPW4sdD0wfGNyW3Q+PjBdLGw9cistNHwwLGFyW2k+PjJdPWwsZnw9dCxhclsodD1hKT4+Ml09byxhclt0KzQ+PjJdPWYsbD8odD1lKzV8MCxhcltBPj4yXT10LG49MHxjcltuPj4wXSxsPXIrLTV8MCxhcltpPj4yXT1sLG49MHxkYigwfG4sMCwyNCksbnw9byxmfD1ELGFyWyhvPWEpPj4yXT1uLGFyW28rND4+Ml09ZixsPyhvPWUrNnwwLGFyW0E+PjJdPW8sdD0wfGNyW3Q+PjBdLGw9cistNnwwLGFyW2k+PjJdPWwsbnw9dD0wfGRiKDB8dCwwLDE2KSxmfD1ELGFyWyh0PWEpPj4yXT1uLGFyW3QrND4+Ml09ZixsPyh0PWUrN3wwLGFyW0E+PjJdPXQsbz0wfGNyW28+PjBdLGw9cistN3wwLGFyW2k+PjJdPWwsbnw9bz0wfGRiKDB8bywwLDgpLGZ8PUQsYXJbKG89YSk+PjJdPW4sYXJbbys0Pj4yXT1mLGw9bD8oYXJbQT4+Ml09ZSs4LGU9MHxjclt0Pj4wXSxhcltpPj4yXT1yKy04LGFyWyhsPWEpPj4yXT1ufGUsYXJbbCs0Pj4yXT1mLDY0LShsPTApfDApOjY0LShsPTgpfDAsYXJbYz4+Ml09bCk6KGw9NjQtKGw9MTYpfDAsYXJbYz4+Ml09bCkpOihsPTY0LShsPTI0KXwwLGFyW2M+PjJdPWwpKToobD02NC0obD0zMil8MCxhcltjPj4yXT1sKSk6KGw9NjQtKGw9NDApfDAsYXJbYz4+Ml09bCkpOihsPTY0LShsPTQ4KXwwLGFyW2M+PjJdPWwpKToobD02NC0obD01Nil8MCxhcltjPj4yXT1sKSk6KGE9KGE9NjQpLWF8MCxhcltjPj4yXT1hKX0obywwfGFyWyhlfD0wKSsyMD4+Ml0sMHxhcltlKzI0Pj4yXSksdHJbdD4+MF09MCx0clsoYT10KzF8MCk+PjBdPTAsdHJbKGY9dCsyfDApPj4wXT0wLGZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcj0wO2V0KGU9ZXwwLDEpLHI9MjU1JigwfEF0KGUsNikpLHRyW0E+PjBdPXIscj0yNTUmKDB8QXQoZSw2KSksdHJbQSsxPj4wXT1yLGU9MjU1KygwfEF0KGUsMykpJjI1NSx0cltBKzI+PjBdPWV9KHQsbyksbj0wfHRyW3Q+PjBdLHRyW0ErMzc3MjEyPj4wXT1uLHRyW0ErMzc3MjEzPj4wXT0obistMTkmMjU1KTwyJjEsdHJbQSszNzcyMTQ+PjBdPSgtOCZuKTw8MjQ+PjI0PT0xNiYxLDB8dHJbYT4+MF0pcmV0dXJuIEJhKEErNTQ4fDAsZSksdXI9aSwoZT0wKXxlO2lmKCgwfGNyW2Y+PjBdKT4oMHxhcltBKzM3NTkxMj4+Ml0pKXJldHVybiBCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZTtpZigoMjU1Jm4pPDMyKXJldHVybiBlPTB8cnIoQSxvLGUsdCksdXI9aSwwfGU7c3dpdGNoKG48PDI0Pj4yNCl7Y2FzZSAzMjpyZXR1cm4gYT0wfHplKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSAzMzpyZXR1cm4gYT0wfExlKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSAzNDpyZXR1cm4gYT0wfHFlKEEsbyksQmEoQSs1NDh8MCxlKSx1cj1pLDB8KGU9YSk7Y2FzZSA0MDpjYXNlIDM5OmE9MHxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wO3I9MDtmb3IoO249MHxBdChBLDgpLHI9bityfDAsMjU1PT0oMHxuKTspO2Y9MDtmb3IoO249MHxBdChBLDgpLGY9bitmfDAsMjU1PT0oMHxuKTspO2lmKGFyW2U+PjJdPXIsYXJbZSs0Pj4yXT1mLDEzMiE9KDB8cikpcmV0dXJuKGU9MCl8ZTtpZihmPTB8QXQoQSw4KSxhclsobj1lKzh8MCk+PjJdPWYsIWkpcmV0dXJuIDB8KGU9MTAyNSk7aT0wPT0oMHxhcltpKzQ3Nj4+Ml0pPzE6MyxyPTA7Zm9yKDs7KXtzd2l0Y2goMHxmKXtjYXNlIDA6Zj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCk+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMT4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSsyPj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzM+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrND4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSs1Pj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzY+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrNz4+MF09ZixmPTI1NSYoMHxBdChBLDgpKSx0cltlKzEyKyhyPDw0KSs4Pj4wXT1mLGY9MjU1JigwfEF0KEEsOCkpLHRyW2UrMTIrKHI8PDQpKzk+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTA+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTE+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTI+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTM+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTQ+PjBdPWYsZj0yNTUmKDB8QXQoQSw4KSksdHJbZSsxMisocjw8NCkrMTU+PjBdPWY7YnJlYWs7Y2FzZSAxOmY9NjU1MzUmKDB8QXQoQSwxNikpLG9yW2UrNjArKHI8PDEpPj4xXT1mO2JyZWFrO2Nhc2UgMjpmPTB8QXQoQSwzMiksYXJbZSs2OCsocjw8Mik+PjJdPWZ9aWYoKDB8aSk8PSgwfChyPXIrMXwwKSkpe3I9MDticmVha31mPTB8YXJbbj4+Ml19cmV0dXJuIDB8cn0obyxyLG49bjw8MjQ+PjI0PT00MCwwfGFyW0ErMzc1Mzg4Pj4yXSk7ZG97aWYoYSkyMD09KDB8KGY9MHxhclsobj1BKzg0fDApPj4yXSkpPyhuPTEwMDEsZj0xOSk6KGFyW24+PjJdPWYrMSxuPWEpLGFyW0ErNCsoZjw8Mik+PjJdPW47ZWxzZSBpZihmPTB8YXJbQSszNzcyMjA+PjJdLCEoKDB8YXJbQSszNzcyMTY+PjJdKT09KDB8Zil8MV5uKSl7aWYoZj0wfGFyW2YrLTQ+PjJdLCgwfChuPTB8YXJbKG89ZisxMDY0OHwwKT4+Ml0pKT09KDB8YXJbZisxMDY1Mj4+Ml0pKXtBcihmKzEwNjQ0fDAscik7YnJlYWt9Zm9yKGY9cix0PW4rODB8MDthcltuPj4yXT1hcltmPj4yXSxmPWYrNHwwLCgwfChuPW4rNHwwKSk8KDB8dCk7KTthcltvPj4yXT04MCsoMHxhcltvPj4yXSk7YnJlYWt9fXdoaWxlKDApO3JldHVybiBCYShBKzU0OHwwLGUpLHVyPWksMHwoZT1hKTtjYXNlIDM2OnJldHVybiB0cltBKzM3NjIxMT4+MF09MSxCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZTtkZWZhdWx0OnJldHVybiBCYShBKzU0OHwwLGUpLHVyPWksKGU9MCl8ZX1yZXR1cm4gMH1mdW5jdGlvbiBTbyhBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2lmKHVyPSh1PXVyKSsyMDQ4fDAsbD11LDE8KDB8KGV8PTApKSlmb3Iocz1lLGI9MDtiPWIrMXwwLDM8cz4+PjA7KXM+Pj49MTtlbHNlIGI9MDtpZihhPTUtYnwwLGM9MTw8aSstMSxuPSh3PTE8PGYpKzY1NTM1fDAsdD0wLXd8MCxvPTA8KDB8ZSkpe2g9NjU1MzUmKDMxPT0oMHxmKT90OjMxIT0oMHxmKT8wOm4pLGs9MDtkb3tmb3IoZD1lOzspe2lmKGI9ZCstMXwwLCgwfGQpPD0wKXtiPTAscz04O2JyZWFrfWlmKGY9cisoKDB8YnIoYixlKSkrazw8MSl8MCwwfG9yW2Y+PjFdKXtmPTAscz0xMDticmVha31kPWJ9aWYoOD09KDB8cykpZm9yKDtkPWwrKCgwfGJyKGIsZSkpK2s8PDEpfDAsb3JbZD4+MV09aCwoMHwoYj1iKzF8MCkpIT0oMHxlKTspcz04O2Vsc2UgaWYoMTA9PSgwfHMpKWZvcig7Oyl7Zm9yKHM9Yj0wO3Y9cisoKDB8YnIoYixlKSkrazw8MSl8MCxzPSgwfGJyKDB8b3Jbdj4+MV0sMHx0clszNTIwNisoYjw8YTw8NSkrZj4+MF0pKStzfDAsKDB8KGI9YisxfDApKSE9KDB8ZCk7KTtpZihzPXMrNjQ+Pjcsdj1sKygoMHxicihmLGUpKStrPDwxKXwwLG9yW3Y+PjFdPSgwfHMpPCgwfHQpP3Q6KDB8cyk8KDB8dyk/czpuLCgwfChmPWYrMXwwKSk9PSgwfGUpKWJyZWFrO3M9MTB9az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZSkpO2lmKG8pe2g9Yz4+aSxrPTA7ZG97Zm9yKHc9MHxicihrLGUpLGQ9ZTs7KXtpZihiPWQrLTF8MCwoMHxkKTw9MCl7Yj0wLHM9MTg7YnJlYWt9aWYoMHxvcltsKyhiK3c8PDEpPj4xXSl7Zj0wLHM9MjA7YnJlYWt9ZD1ifWlmKDE4PT0oMHxzKSlmb3IoO2FyW0ErKGIrdzw8Mik+PjJdPWgsKDB8KGI9YisxfDApKSE9KDB8ZSk7KXM9MTg7ZWxzZSBpZigyMD09KDB8cykpZm9yKDs7KXtmb3Iocz1iPTA7cz0oMHxicigwfG9yW2wrKGIrdzw8MSk+PjFdLDB8dHJbMzUyMDYrKGI8PGE8PDUpK2Y+PjBdKSkrc3wwLCgwfChiPWIrMXwwKSkhPSgwfGQpOyk7aWYoYXJbQSsoZit3PDwyKT4+Ml09cytjPj5pLCgwfChmPWYrMXwwKSk9PSgwfGUpKWJyZWFrO3M9MjB9az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZSkpO3VyPXV9ZWxzZSB1cj11fWVsc2UgdXI9dX1mdW5jdGlvbiBPbyhBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZih1cj0oYz11cikrMjA0OHwwLHQ9YyxhPTE8PChvPTIwLShmfD0wKXwwKS0xLDE8KDB8KHJ8PTApKSlmb3IodT1yLGw9MDtsPWwrMXwwLDM8dT4+PjA7KXU+Pj49MTtlbHNlIGw9MDtpZihuPTUtbHwwLGs9MDwoMHxyKSl7ZD0wO2Rve2ZvcihzPXI7Oyl7aWYobD1zKy0xfDAsKDB8cyk8PTApe2w9MCx1PTc7YnJlYWt9aWYodz1pKygoMHxicihsLHIpKStkPDwxKXwwLDB8b3Jbdz4+MV0pe2I9MCx1PTk7YnJlYWt9cz1sfWlmKDc9PSgwfHUpKWZvcig7dz10KygoMHxicihsLHIpKStkPDwxKXwwLCgob3Jbdz4+MV09MCl8KGw9bCsxfDApKSE9KDB8cik7KXU9NztlbHNlIGlmKDk9PSgwfHUpKWZvcig7Oyl7Zm9yKHU9bD0wO3c9aSsoKDB8YnIobCxyKSkrZDw8MSl8MCx1PSgwfGJyKDB8b3Jbdz4+MV0sMHx0clszNTIwNisobDw8bjw8NSkrYj4+MF0pKSt1fDAsKDB8KGw9bCsxfDApKSE9KDB8cyk7KTtpZihoPXUrNjQ+Pjcsdz10KygoMHxicihiLHIpKStkPDwxKXwwLG9yW3c+PjFdPSgwfGgpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGgpPDMyNzY3P2g6MzI3NjcpLCgwfChiPWIrMXwwKSk9PSgwfHIpKWJyZWFrO3U9OX1kPWQrMXwwfXdoaWxlKCgwfGQpIT0oMHxyKSk7aWYoayl7aD0oZj0xPDxmKSsyNTV8MCx3PWE+Pm8saT0wO2Rve2ZvcihrPTB8YnIoaSxyKSxkPXI7Oyl7aWYobD1kKy0xfDAsKDB8ZCk8PTApe3U9MTg7YnJlYWt9aWYoMHxvclt0KyhsK2s8PDEpPj4xXSl7dT0xOTticmVha31kPWx9aWYoMTg9PSgwfHUpKWZvcih1PTB8YnIoaSxlKSxsPTA7ZD0oMHxjclsoaz1BKyhsK3UpfDApPj4wXSkrd3wwLHRyW2s+PjBdPSgwfGQpPDA/MDoyNTUmKCgwfGQpPCgwfGYpP2Q6aCksKDB8KGw9bCsxfDApKSE9KDB8cik7KTtlbHNlIGlmKDE5PT0oMHx1KSl7cz0wfGJyKGksZSksYj0wO2Rve2Zvcih1PWw9MDt1PSgwfGJyKDB8b3JbdCsobCtrPDwxKT4+MV0sMHx0clszNTIwNisobDw8bjw8NSkrYj4+MF0pKSt1fDAsKDB8KGw9bCsxfDApKSE9KDB8ZCk7KTt1PSgwfGNyWyhsPUErKGIrcyl8MCk+PjBdKSsodSthPj5vKXwwLHRyW2w+PjBdPSgwfHUpPDA/MDoyNTUmKCgwfHUpPCgwfGYpP3U6aCksYj1iKzF8MH13aGlsZSgoMHxiKSE9KDB8cikpfWk9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHIpKTt1cj1jfWVsc2UgdXI9Y31lbHNlIHVyPWN9ZnVuY3Rpb24gem8oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0LG8sYSxjLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KGM9dXIpKzIwNDh8MCx0PWMsYT0xPDwobz0yMC0oZnw9MCl8MCktMSwxPCgwfChyfD0wKSkpZm9yKHU9cixsPTA7bD1sKzF8MCwzPHU+Pj4wOyl1Pj4+PTE7ZWxzZSBsPTA7aWYobj01LWx8MCxrPTA8KDB8cikpe2Q9MDtkb3tmb3Iocz1yOzspe2lmKGw9cystMXwwLCgwfHMpPD0wKXtsPTAsdT03O2JyZWFrfWlmKHc9aSsoKDB8YnIobCxyKSkrZDw8MSl8MCwwfG9yW3c+PjFdKXtiPTAsdT05O2JyZWFrfXM9bH1pZig3PT0oMHx1KSlmb3IoO3c9dCsoKDB8YnIobCxyKSkrZDw8MSl8MCwoKG9yW3c+PjFdPTApfChsPWwrMXwwKSkhPSgwfHIpOyl1PTc7ZWxzZSBpZig5PT0oMHx1KSlmb3IoOzspe2Zvcih1PWw9MDt3PWkrKCgwfGJyKGwscikpK2Q8PDEpfDAsdT0oMHxicigwfG9yW3c+PjFdLDB8dHJbMzUyMDYrKGw8PG48PDUpK2I+PjBdKSkrdXwwLCgwfChsPWwrMXwwKSkhPSgwfHMpOyk7aWYoaD11KzY0Pj43LHc9dCsoKDB8YnIoYixyKSkrZDw8MSl8MCxvclt3Pj4xXT0oMHxoKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxoKTwzMjc2Nz9oOjMyNzY3KSwoMHwoYj1iKzF8MCkpPT0oMHxyKSlicmVhazt1PTl9ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8cikpO2lmKGspe2g9KGY9MTw8ZikrNjU1MzV8MCx3PWE+Pm8saT0wO2Rve2ZvcihrPTB8YnIoaSxyKSxkPXI7Oyl7aWYobD1kKy0xfDAsKDB8ZCk8PTApe3U9MTg7YnJlYWt9aWYoMHxvclt0KyhsK2s8PDEpPj4xXSl7dT0xOTticmVha31kPWx9aWYoMTg9PSgwfHUpKWZvcih1PTB8YnIoaSxlKSxsPTA7ZD0oMHxsclsoaz1BKyhsK3U8PDEpfDApPj4xXSkrd3wwLG9yW2s+PjFdPSgwfGQpPDA/MDo2NTUzNSYoKDB8ZCk8KDB8Zik/ZDpoKSwoMHwobD1sKzF8MCkpIT0oMHxyKTspO2Vsc2UgaWYoMTk9PSgwfHUpKXtzPTB8YnIoaSxlKSxiPTA7ZG97Zm9yKHU9bD0wO3U9KDB8YnIoMHxvclt0KyhsK2s8PDEpPj4xXSwwfHRyWzM1MjA2KyhsPDxuPDw1KStiPj4wXSkpK3V8MCwoMHwobD1sKzF8MCkpIT0oMHxkKTspO3U9KDB8bHJbKGw9QSsoYitzPDwxKXwwKT4+MV0pKyh1K2E+Pm8pfDAsb3JbbD4+MV09KDB8dSk8MD8wOjY1NTM1JigoMHx1KTwoMHxmKT91OmgpLGI9YisxfDB9d2hpbGUoKDB8YikhPSgwfHIpKX1pPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHxyKSk7dXI9Y31lbHNlIHVyPWN9ZWxzZSB1cj1jfWZ1bmN0aW9uIGpvKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKHVyPSh0PXVyKSsyMDQ4fDAsbj10LDE8KDB8KGV8PTApKSl7Zm9yKG89ZSx1PTA7Oyl7aWYoISgzPG8+Pj4wKSl7bz1lLGE9MDticmVha31vPj4+PTEsdT11KzF8MH1mb3IoOzM8bz4+PjA7KW8+Pj49MSxhPWErMXwwO2ZvcihiPWErN3wwLGM9MTw8dSstMSxsPTE8PGErNixhPWUsbz0wOzspe2lmKG89bysxfDAsISgzPGE+Pj4wKSl7ZD11LGg9bCxrPWI7YnJlYWt9YT4+Pj0xfX1lbHNlIGM9bz0wLGQ9LTEsaD0zMixrPTY7aWYoZj01LW98MCxiPTA8KDB8ZSkpe289MDtkb3t1PTA7ZG97Zm9yKHM9dTw8ZixsPWE9MDt3PXIrKCgwfGJyKGEsaSkpK288PDEpfDAsbD0oMHxicigwfG9yW3c+PjFdLDB8dHJbMzUyMDYrKHM8PDUpK2E+PjBdKSkrbHwwLCgwfChhPWErMXwwKSkhPSgwfGUpOyk7dz1uKygoMHxicih1LGUpKStvPDwxKXwwLG9yW3c+PjFdPWwrYz4+ZCx1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHxlKSk7bz1vKzF8MH13aGlsZSgoMHxvKSE9KDB8ZSkpO2lmKGIpe2w9MDtkb3t1PTB8YnIobCxlKSxjPTA7ZG97Zm9yKGI9Yzw8ZixhPW89MDthPSgwfGJyKDB8b3Jbbisobyt1PDwxKT4+MV0sMHx0clszNTIwNisoYjw8NSkrbz4+MF0pKSthfDAsKDB8KG89bysxfDApKSE9KDB8ZSk7KTtvcltBKyhjK3U8PDEpPj4xXT1hK2g+PmssYz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8ZSkpO2w9bCsxfDB9d2hpbGUoKDB8bCkhPSgwfGUpKTt1cj10fWVsc2UgdXI9dH1lbHNlIHVyPXR9ZnVuY3Rpb24gSG8oQSxlLHIsaSl7QXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7aWYodXI9KHQ9dXIpKzIxNzZ8MCxuPXQrMTI4fDAsZj0wPCgwfChlfD0wKSkpe2Zvcih3PTA9PSgwfChoPWU+Pj4xKSksdj1lPj4+MixtPTc8ZT4+PjAsYj0obD10KSs2NHwoaz0wKTs7KXtpZihhPTB8YnIoayxpKSwhdylmb3IoYz1iLG89MDt1PXIrKG8rYTw8MSl8MCxzPXIrKChkPW8raHwwKSthPDwxKXwwLG9yW2MrKG88PDEpPj4xXT0oMHxscltzPj4xXSkrKDB8bHJbdT4+MV0pLG9yW2MrKGQ8PDEpPj4xXT0oMHxsclt1Pj4xXSktKDB8bHJbcz4+MV0pLCgwfChvPW8rMXwwKSkhPSgwfGgpOyk7aWYobSlmb3Iocz12LGQ9aCx1PWwsbD1iOzspe2M9bCxiPXUsYT0wO2Rve2ZvcihvPTA7cD1jKygoeT1vK2F8MCk8PDEpfDAsWj1jKygoZz15K3N8MCk8PDEpfDAsb3JbYisoeTw8MSk+PjFdPSgwfGxyW1o+PjFdKSsoMHxscltwPj4xXSksb3JbYisoZzw8MSk+PjFdPSgwfGxyW3A+PjFdKS0oMHxscltaPj4xXSksKDB8KG89bysxfDApKSE9KDB8cyk7KTthPWErZHwwfXdoaWxlKCgwfGEpPCgwfGUpKTtpZigoMHwocz4+PTEpKTw9MSlicmVhazt5PWwsZD4+PTEsbD11LHU9eX1lbHNlIHU9Yjtmb3IoYT11LGM9MHxicihrLGUpLG89MDtaPTB8b3JbYSsobzw8MSk+PjFdLHA9MHxvclthKygoeT0xfG8pPDwxKT4+MV0sb3JbbisobytjPDwxKT4+MV09cCtaLG9yW24rKHkrYzw8MSk+PjFdPVotcCwoMHwobz1vKzJ8MCkpPCgwfGUpOyk7aWYoKDB8KGs9aysxfDApKT09KDB8ZSkpYnJlYWs7Yj11fWlmKGYpe2Zvcih3PTA9PSgwfChoPWU+Pj4xKSksdj1lPj4+MixtPTc8ZT4+PjAsaz0wOzspe2lmKCF3KWZvcihhPXUsbz0wO1o9bisoKDB8YnIobyxlKSkrazw8MSl8MCxaPTB8b3JbWj4+MV0scD1uKygoMHxicih5PW8raHwwLGUpKStrPDwxKXwwLHA9MHxvcltwPj4xXSxvclthKyhvPDwxKT4+MV09cCtaLG9yW2ErKHk8PDEpPj4xXT1aLXAsKDB8KG89bysxfDApKSE9KDB8aCk7KTtpZihtKWZvcihzPXYsZD1oLGM9bCxsPXU7Oyl7dT1sLGI9YyxhPTA7ZG97Zm9yKG89MDtaPXUrKChnPW8rYXwwKTw8MSl8MCxwPXUrKCh5PWcrc3wwKTw8MSl8MCxvcltiKyhnPDwxKT4+MV09KDB8bHJbcD4+MV0pKygwfGxyW1o+PjFdKSxvcltiKyh5PDwxKT4+MV09KDB8bHJbWj4+MV0pLSgwfGxyW3A+PjFdKSwoMHwobz1vKzF8MCkpIT0oMHxzKTspO2E9YStkfDB9d2hpbGUoKDB8YSk8KDB8ZSkpO2lmKCgwfChzPj49MSkpPD0xKWJyZWFrO3k9bCxkPj49MSxsPWMsYz15fWVsc2UgYz11O2ZvcihhPWMsbz0wO1o9YSsobzw8MSl8MCxwPWErKCh5PTF8byk8PDEpfDAsZz1BKygoMHxicihvLGUpKStrPDwxKXwwLG9yW2c+PjFdPSgwfGxyW3A+PjFdKSsoMHxscltaPj4xXSkseT1BKygoMHxicih5LGUpKStrPDwxKXwwLG9yW3k+PjFdPSgwfGxyW1o+PjFdKS0oMHxscltwPj4xXSksKDB8KG89bysyfDApKTwoMHxlKTspO2lmKCgwfChrPWsrMXwwKSk9PSgwfGUpKWJyZWFrO3U9Y311cj10fWVsc2UgdXI9dH1lbHNlIHVyPXR9ZnVuY3Rpb24geG8oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTA7c3dpdGNoKGQ9MHxhcls5NzY4Kygob3w9MCk8PDIpPj4yXSxiPSh1PTB8YXJbOTc2OCsoYTw8Mik+PjJdKStuKyhzPTB8YXJbOTc4NCsoYTw8Mik+PjJdKXwwLGw9YystOHwwLDB8byl7Y2FzZSAwOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHY9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKDB8YnIoYyxpKSkrdnwwO29yW2Q+PjFdPTB8Y3Jbaz4+MF0sKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MCxrPWsrMXwwO2M9YysxfDB9d2hpbGUoKDB8YykhPSgwfGgpKTticmVhaztjYXNlIDE6aWYoKDB8KGM9MC11fDApKTwoMHwoaD1zK258MCkpJiYobT0wLWR8MCwwPCgwfGYpKSlkb3tmb3IoZD10KyhjK3U8PDEpfChzPTApLGs9cisoMHxicihjLGkpKSttfDA7dj0odj0oY3JbKGs9KGc9aykrMXwwKT4+MF08PDIpLSgwfGNyW2c+PjBdKSsoMHxicigwfGNyW2crMj4+MF0sLTEwKSl8MCkrKDU4KigwfGNyW2crMz4+MF0pfDApKygxNyooMHxjcltnKzQ+PjBdKXwwKSsoMHxicigwfGNyW2crNT4+MF0sLTUpKXwwLG9yW2Q+PjFdPXYrKDB8Y3JbZys2Pj4wXSk+PmwsKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAyOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKGc9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKDB8YnIoYyxpKSkrZ3wwO209KGNyWyhrPShtPWspKzF8MCk+PjBdPDwyKS0oMHxjclttPj4wXSkrKDQwKigoMHxjclttKzQ+PjBdKSsoMHxjclttKzM+PjBdKXwwKXwwKSsoY3JbbSs2Pj4wXTw8MiktKDB8Y3JbbSs3Pj4wXSkrKDB8YnIoKDB8Y3JbbSs1Pj4wXSkrKDB8Y3JbbSsyPj4wXSl8MCwtMTEpKT4+bCY2NTUzNSxvcltkPj4xXT1tLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpO2JyZWFrO2Nhc2UgMzppZigoMHwoYz0wLXV8MCkpPCgwfChoPXMrbnwwKSkmJih3PTAtZHwwLDA8KDB8ZikpKWRve2ZvcihkPXQrKGMrdTw8MSl8KHM9MCksaz1yKygwfGJyKGMsaSkpK3d8MDttPShtPSgwfGJyKDB8Y3JbKGs9KGc9aykrMXwwKT4+MF0sLTUpKSsoMHxjcltnPj4wXSl8MCkrKDE3KigwfGNyW2crMj4+MF0pfDApKyg1OCooMHxjcltnKzM+PjBdKXwwKSsoMHxicigwfGNyW2crND4+MF0sLTEwKSl8MCxvcltkPj4xXT1tKyhjcltnKzU+PjBdPDwyKS0oMHxjcltnKzY+PjBdKT4+bCwoMHwocz1zKzF8MCkpIT0oMHxmKTspZD1kKyhiPDwxKXwwO2M9YysxfDB9d2hpbGUoKDB8YykhPSgwfGgpKX1zd2l0Y2goaD0wPT0oMHxvKT9sOjYsMHxhKXtjYXNlIDA6aWYoISgwPCgwfGYpJjA8KDB8bikpKXJldHVybjtrPTA7ZG97Zm9yKHM9QSsoazw8MSl8KGM9MCksZD10KygoMHxicihrLGIpKTw8MSl8MDtvcltzPj4xXT0wfG9yW2Q+PjFdLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDAsZD1kKzJ8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMTppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO289KG89KG9yWyhkPShhPWQpKzJ8MCk+PjFdPDwyKS0oMHxvclthPj4xXSkrKDB8YnIoMHxvclthKzQ+PjFdLC0xMCkpfDApKyg1OCooMHxvclthKzY+PjFdKXwwKSsoMTcqKDB8b3JbYSs4Pj4xXSl8MCkrKDB8YnIoMHxvclthKzEwPj4xXSwtNSkpfDAsb3Jbcz4+MV09bysoMHxvclthKzEyPj4xXSk+PmgsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMjppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO2E9KG9yWyhkPShhPWQpKzJ8MCk+PjFdPDwyKS0oMHxvclthPj4xXSkrKDQwKigoMHxvclthKzg+PjFdKSsoMHxvclthKzY+PjFdKXwwKXwwKSsob3JbYSsxMj4+MV08PDIpLSgwfG9yW2ErMTQ+PjFdKSsoMHxicigoMHxvclthKzEwPj4xXSkrKDB8b3JbYSs0Pj4xXSl8MCwtMTEpKT4+aCY2NTUzNSxvcltzPj4xXT1hLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDA7az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZikpO3JldHVybjtjYXNlIDM6aWYoISgwPCgwfGYpJjA8KDB8bikpKXJldHVybjtrPTA7ZG97Zm9yKHM9QSsoazw8MSl8KGM9MCksZD10KygoMHxicihrLGIpKTw8MSl8MDtvPShvPSgwfGJyKDB8b3JbKGQ9KGE9ZCkrMnwwKT4+MV0sLTUpKSsoMHxvclthPj4xXSl8MCkrKDE3KigwfG9yW2ErND4+MV0pfDApKyg1OCooMHxvclthKzY+PjFdKXwwKSsoMHxicigwfG9yW2ErOD4+MV0sLTEwKSl8MCxvcltzPj4xXT1vKyhvclthKzEwPj4xXTw8MiktKDB8b3JbYSsxMj4+MV0pPj5oLCgwfChjPWMrMXwwKSkhPSgwfG4pOylzPXMrKGU8PDEpfDA7az1rKzF8MH13aGlsZSgoMHxrKSE9KDB8ZikpO3JldHVybjtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gUG8oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTA7c3dpdGNoKGQ9MHxhcls5NzY4Kygob3w9MCk8PDIpPj4yXSxiPSh1PTB8YXJbOTc2OCsoYTw8Mik+PjJdKStuKyhzPTB8YXJbOTc4NCsoYTw8Mik+PjJdKXwwLGw9YystOHwwLDB8byl7Y2FzZSAwOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHY9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsodjw8MSl8MDtvcltkPj4xXT0wfG9yW2s+PjFdLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDAsaz1rKzJ8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAxOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKG09MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsobTw8MSl8MDt2PSh2PShsclsoaz0oZz1rKSsyfDApPj4xXTw8MiktKDB8bHJbZz4+MV0pKygwfGJyKDB8bHJbZys0Pj4xXSwtMTApKXwwKSsoNTgqKDB8bHJbZys2Pj4xXSl8MCkrKDE3KigwfGxyW2crOD4+MV0pfDApKygwfGJyKDB8bHJbZysxMD4+MV0sLTUpKXwwLG9yW2Q+PjFdPXYrKDB8bHJbZysxMj4+MV0pPj5sLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpO2JyZWFrO2Nhc2UgMjppZigoMHwoYz0wLXV8MCkpPCgwfChoPXMrbnwwKSkmJihnPTAtZHwwLDA8KDB8ZikpKWRve2ZvcihkPXQrKGMrdTw8MSl8KHM9MCksaz1yKygoMHxicihjLGkpKTw8MSkrKGc8PDEpfDA7bT0obHJbKGs9KG09aykrMnwwKT4+MV08PDIpLSgwfGxyW20+PjFdKSsoNDAqKCgwfGxyW20rOD4+MV0pKygwfGxyW20rNj4+MV0pfDApfDApKyhsclttKzEyPj4xXTw8MiktKDB8bHJbbSsxND4+MV0pKygwfGJyKCgwfGxyW20rMTA+PjFdKSsoMHxsclttKzQ+PjFdKXwwLC0xMSkpPj5sJjY1NTM1LG9yW2Q+PjFdPW0sKDB8KHM9cysxfDApKSE9KDB8Zik7KWQ9ZCsoYjw8MSl8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxoKSk7YnJlYWs7Y2FzZSAzOmlmKCgwfChjPTAtdXwwKSk8KDB8KGg9cytufDApKSYmKHc9MC1kfDAsMDwoMHxmKSkpZG97Zm9yKGQ9dCsoYyt1PDwxKXwocz0wKSxrPXIrKCgwfGJyKGMsaSkpPDwxKSsodzw8MSl8MDttPShtPSgwfGJyKDB8bHJbKGs9KGc9aykrMnwwKT4+MV0sLTUpKSsoMHxscltnPj4xXSl8MCkrKDE3KigwfGxyW2crND4+MV0pfDApKyg1OCooMHxscltnKzY+PjFdKXwwKSsoMHxicigwfGxyW2crOD4+MV0sLTEwKSl8MCxvcltkPj4xXT1tKyhscltnKzEwPj4xXTw8MiktKDB8bHJbZysxMj4+MV0pPj5sLCgwfChzPXMrMXwwKSkhPSgwfGYpOylkPWQrKGI8PDEpfDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8aCkpfXN3aXRjaChoPTA9PSgwfG8pP2w6NiwwfGEpe2Nhc2UgMDppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO29yW3M+PjFdPTB8b3JbZD4+MV0sKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MCxkPWQrMnwwO2s9aysxfDB9d2hpbGUoKDB8aykhPSgwfGYpKTtyZXR1cm47Y2FzZSAxOmlmKCEoMDwoMHxmKSYwPCgwfG4pKSlyZXR1cm47az0wO2Rve2ZvcihzPUErKGs8PDEpfChjPTApLGQ9dCsoKDB8YnIoayxiKSk8PDEpfDA7bz0obz0ob3JbKGQ9KGE9ZCkrMnwwKT4+MV08PDIpLSgwfG9yW2E+PjFdKSsoMHxicigwfG9yW2ErND4+MV0sLTEwKSl8MCkrKDU4KigwfG9yW2ErNj4+MV0pfDApKygxNyooMHxvclthKzg+PjFdKXwwKSsoMHxicigwfG9yW2ErMTA+PjFdLC01KSl8MCxvcltzPj4xXT1vKygwfG9yW2ErMTI+PjFdKT4+aCwoMHwoYz1jKzF8MCkpIT0oMHxuKTspcz1zKyhlPDwxKXwwO2s9aysxfDB9d2hpbGUoKDB8aykhPSgwfGYpKTtyZXR1cm47Y2FzZSAyOmlmKCEoMDwoMHxmKSYwPCgwfG4pKSlyZXR1cm47az0wO2Rve2ZvcihzPUErKGs8PDEpfChjPTApLGQ9dCsoKDB8YnIoayxiKSk8PDEpfDA7YT0ob3JbKGQ9KGE9ZCkrMnwwKT4+MV08PDIpLSgwfG9yW2E+PjFdKSsoNDAqKCgwfG9yW2ErOD4+MV0pKygwfG9yW2ErNj4+MV0pfDApfDApKyhvclthKzEyPj4xXTw8MiktKDB8b3JbYSsxND4+MV0pKygwfGJyKCgwfG9yW2ErMTA+PjFdKSsoMHxvclthKzQ+PjFdKXwwLC0xMSkpPj5oJjY1NTM1LG9yW3M+PjFdPWEsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2Nhc2UgMzppZighKDA8KDB8ZikmMDwoMHxuKSkpcmV0dXJuO2s9MDtkb3tmb3Iocz1BKyhrPDwxKXwoYz0wKSxkPXQrKCgwfGJyKGssYikpPDwxKXwwO289KG89KDB8YnIoMHxvclsoZD0oYT1kKSsyfDApPj4xXSwtNSkpKygwfG9yW2E+PjFdKXwwKSsoMTcqKDB8b3JbYSs0Pj4xXSl8MCkrKDU4KigwfG9yW2ErNj4+MV0pfDApKygwfGJyKDB8b3JbYSs4Pj4xXSwtMTApKXwwLG9yW3M+PjFdPW8rKG9yW2ErMTA+PjFdPDwyKS0oMHxvclthKzEyPj4xXSk+PmgsKDB8KGM9YysxfDApKSE9KDB8bik7KXM9cysoZTw8MSl8MDtrPWsrMXwwfXdoaWxlKCgwfGspIT0oMHxmKSk7cmV0dXJuO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBMbyhBLGUpe3ZhciByLGk9MCxmPTA7aWYoZXw9MClyZXR1cm4gMHwoZj0xKTtpZihlPTB8YXJbKEF8PTApKzEyPj4yXSxyPWk9MHxhcltBKzg+PjJdLChmPWUtaT4+Mik+Pj4wPCgwfGFyW0E+PjJdKT4+PjApcmV0dXJuIDB8KGY9MSk7aWYoKDB8ZSk9PSgwfGkpKXJldHVybihmPTApfGY7Zm9yKGU9MDs7KXtpZihBPTB8YXJbcisoZTw8Mik+PjJdLDA9PSgwfHRyW0ErMTAwPj4wXSkmJjA9PSgwfGFyW0ErOTY+PjJdKSl7ZT0xLGk9NzticmVha31pZihmPj4+MDw9KGU9ZSsxfDApPj4+MCl7ZT0wLGk9NzticmVha319cmV0dXJuIDc9PSgwfGkpPzB8ZTowfWZ1bmN0aW9uIEtvKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGY9MCxuPTAsdD0wLG89MCxhPTA7QTpkb3tpZihpKXtpZihuPUErOHwwLCgwfCh0PTB8YXJbQSsxMj4+Ml0pKT09KDB8KEE9bz0wfGFyW24+PjJdKSkpcmV0dXJuIDB8KHI9LTEpO2ZvcihmPXQtbz4+MixpPTA7YT0wfGFyW0ErKGk8PDIpPj4yXSwhKCgwfGFyW2ErOTI+PjJdKT09KDB8ZSkmJigwfGFyW2ErMTA0Pj4yXSk+KDB8cikmJjI9PSgwfGFyW2ErOTY+PjJdKSk7KWlmKGY+Pj4wPD0oaT1pKzF8MCk+Pj4wKXtmPXQsaT1vO2JyZWFrIEF9cmV0dXJuIDB8aX1hPTB8YXJbKG49QSs4fDApPj4yXSxmPTB8YXJbQSsxMj4+Ml0sQT1pPWF9d2hpbGUoMCk7aWYoKDB8Zik9PSgwfGkpKXJldHVybiAwfChhPS0xKTtmb3IoaT0wOzspe2lmKGE9MHxhcltBKyhpPDwyKT4+Ml0sKDB8YXJbYSs5Mj4+Ml0pPT0oMHxlKSYmKDB8YXJbYSsxMDQ+PjJdKT4oMHxyKSYmMHxhclthKzk2Pj4yXSl7QT0xNDticmVha31pZigoaT1pKzF8MCk+Pj4wPj1mLSgwfGFyW24+PjJdKT4+Mj4+PjApe2k9LTEsQT0xNDticmVha319cmV0dXJuIDE0PT0oMHxBKT8wfGk6MH1mdW5jdGlvbiBxbyhBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wO0E6ZG97aWYoaSl7aWYobj1BKzh8MCwoMHwodD0wfGFyW0ErMTI+PjJdKSk9PSgwfChBPW89MHxhcltuPj4yXSkpKXJldHVybiAwfChyPS0xKTtmb3IoZj10LW8+PjIsaT0wO2E9MHxhcltBKyhpPDwyKT4+Ml0sISgoMHxhclthKzg4Pj4yXSk9PSgwfGUpJiYoMHxhclthKzEwND4+Ml0pPigwfHIpJiYyPT0oMHxhclthKzk2Pj4yXSkpOylpZihmPj4+MDw9KGk9aSsxfDApPj4+MCl7Zj10LGk9bzticmVhayBBfXJldHVybiAwfGl9YT0wfGFyWyhuPUErOHwwKT4+Ml0sZj0wfGFyW0ErMTI+PjJdLEE9aT1hfXdoaWxlKDApO2lmKCgwfGYpPT0oMHxpKSlyZXR1cm4gMHwoYT0tMSk7Zm9yKGk9MDs7KXtpZihhPTB8YXJbQSsoaTw8Mik+PjJdLCgwfGFyW2ErODg+PjJdKT09KDB8ZSkmJigwfGFyW2ErMTA0Pj4yXSk+KDB8cikmJjB8YXJbYSs5Nj4+Ml0pe0E9MTQ7YnJlYWt9aWYoKGk9aSsxfDApPj4+MD49Zi0oMHxhcltuPj4yXSk+PjI+Pj4wKXtpPS0xLEE9MTQ7YnJlYWt9fXJldHVybiAxND09KDB8QSk/MHxpOjB9ZnVuY3Rpb24gJG8oQSxlKXtlfD0wO3ZhciByLGk9MDtpZigoMHwoaT0wfGFyWyhBfD0wKSsxMj4+Ml0pKT09KDB8KHI9QT0wfGFyW0ErOD4+Ml0pKSlyZXR1cm4gMHwoZT0tMSk7Zm9yKGk9aS1BPj4yLEE9MDs7KXtpZigoMHxhclthcltyKyhBPDwyKT4+Ml0+PjJdKT09KDB8ZSkpe2k9NTticmVha31pZihpPj4+MDw9KEE9QSsxfDApPj4+MCl7QT0tMSxpPTU7YnJlYWt9fXJldHVybiA1PT0oMHxpKT8wfEE6MH1mdW5jdGlvbiBBYShBKXt2YXIgZSxyLGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTA7aWYoKDB8KGk9MHxhclsocj0oQXw9MCkrMjB8MCk+PjJdKSk9PSgwfChuPTB8YXJbKGY9QSsyNHwwKT4+Ml0pKSYmc3IoMzY1MjQsMzY1NTQsMTQ3LDM2NTYxKSwxPChsPW4taT4+Mik+Pj4wKWZvcih0PShuPTApfGFyWzkyKygwfGFyW2k+PjJdKT4+Ml0sbz0xOzspe2lmKG49KGM9KDB8KGE9MHxhcls5MisoMHxhcltpKyhvPDwyKT4+Ml0pPj4yXSkpPCgwfHQpKT9vOm4sbD4+PjA8PShvPW8rMXwwKT4+PjApe2w9bjticmVha310PWM/YTp0fWVsc2UgbD0wO249MHxhclsoYz1BKzM2fDApPj4yXSx1PSgwfGFyW0ErNDA+PjJdKS1ufDAsYT0wfGFyWyhvPUErNDh8MCk+PjJdLCgwfCgwPT0oMHx1KT8wOih1PDw4KS0xfDApKT09KCh0PTB8YXJbKGU9QSs1MnwwKT4+Ml0pK2F8MCkmJihmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0xNisoQXw9MCl8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSx0PTB8YXJbKGE9QSsxMnwwKT4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8Yz4+PjApe2Y9KGU9YykrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YywwfGUpLDB8YXJbbD4+Ml0pOmMsQT1mKyhyPDwyKXwwLGFyW3U+PjJdPUEsYXJbbD4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHVyPXN9aWYoZT0wfGFyWyhiPUErOHwwKT4+Ml0sZj1lLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAscj0wfGFyWyhsPUErMTJ8MCk+PjJdLGk9ci0oMHxhcltBPj4yXSl8MCxpPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksYXJbYz4+Ml09aSx0PWkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdO2U9MHxhclt1Pj4yXSwoMHxmKSE9KDB8ZSk7KWVhKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHVyPXN9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdXI9czthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSx0PTB8YXJbbD4+Ml0sZT10LG49bztkb3tpZigoMHxvKT09KDB8dCkpe2lmKHI9MHxhcltBPj4yXSwoaT1yKT4+PjA8YT4+PjApe2Y9KGU9YSkrKChpPSgxKyhlLWk+PjIpfDApLy0yfDApPDwyKXwwLGU9KHI9KGU9bi1lfDApPj4yKT8od2IoMHxmLDB8YSwwfGUpLDB8YXJbdT4+Ml0pOmEsQT1mKyhyPDwyKXwwLGFyW2I+PjJdPUEsYXJbdT4+Ml09ZSsoaTw8MiksZT1BO2JyZWFrfWlmKDEwNzM3NDE4MjM8KGU9MD09KDB8KGU9ZS1pPj4xKSk/MTplKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxmPTB8aHUoZTw8MiksdD1pPShuPWYpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c30oQSszMnwwKSxhPTB8YXJbbz4+Ml0sdD0wfGFyW2U+PjJdLG49MHxhcltjPj4yXSksYXJbKDB8YXJbbisoKHU9dCthfDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJnUpPDwyKT4+Ml09YXJbaSsobDw8Mik+PjJdLGFyW2U+PjJdPXQrMSxhclsoMHxhcltyPj4yXSkrKGw8PDIpPj4yXT1hclsoMHxhcltmPj4yXSktND4+Ml0sYXJbZj4+Ml09KDB8YXJbZj4+Ml0pLTR9ZnVuY3Rpb24gZWEoQSxlKXtlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7cj0wfGFyWyhzPShBfD0wKSs0fDApPj4yXSxuPWI9MHxhcltBPj4yXTtkb3tpZigoMHxyKT09KDB8Yikpe2lmKChmPTB8YXJbKGI9QSs4fDApPj4yXSk+Pj4wPChpPWw9MHxhclsodT1BKzEyfDApPj4yXSk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksbD1pPShjPWE9MHxodShuPDwyKSkrKChuKzN8MCk+Pj4yPDwyKXwwLGE9YSsobjw8Mil8MCwoMHxyKT09KDB8Zikpbj1sLGY9cjtlbHNle2ZvcihvPWksbj1sLHQ9cjthcltvPj4yXT1hclt0Pj4yXSxuPW89bis0fDAsKDB8KHQ9dCs0fDApKSE9KDB8Zik7KTtmPTB8YXJbQT4+Ml19YXJbQT4+Ml09YyxhcltzPj4yXT1sLGFyW2I+PjJdPW4sYXJbdT4+Ml09YSxmJiYodnUoZiksaT0wfGFyW3M+PjJdKX1lbHNlIGk9cn13aGlsZSgwKTthcltpKy00Pj4yXT1hcltlPj4yXSxhcltzPj4yXT0oMHxhcltzPj4yXSktNH1mdW5jdGlvbiByYShBKXt2YXIgZSxyPTA7aWYocj0oQXw9MCkrMjR8MCwoMHxhclsoZT1BKzIwfDApPj4yXSk9PSgwfGFyW3I+PjJdKSlyZXR1cm4ocj0wKXxyO2Zvcig7QWEoQSksKDB8YXJbZT4+Ml0pIT0oMHxhcltyPj4yXSk7KTtyZXR1cm4gMHwoQT0xKX1mdW5jdGlvbiBpYShBLGUscixpLGYsbix0KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDt1cj0odT11cikrMTZ8MCxhPXUsbD0oQXw9MCkrOHwwLHM9MHxhclsoYz1BKzEyfDApPj4yXSxvPWs9MHxhcltsPj4yXSxiPXM7QTpkb3tpZigoMHxzKT09KDB8aykpZD0tMSxrPXM7ZWxzZXtmb3Iodz1zLWs+PjIsZD0wO2g9MHxhcltvKyhkPDwyKT4+Ml0sMCE9KDB8dHJbaCsxMDA+PjBdKXx8MCE9KDB8YXJbaCs5Nj4+Ml0pOylpZih3Pj4+MDw9KGQ9ZCsxfDApPj4+MCl7ZD0tMTticmVhayBBfW9hKGgpLGI9MHxhcltjPj4yXSxrPTB8YXJbbD4+Ml0scz1ifX13aGlsZSgwKTtyZXR1cm4oMHxkKT09KCh3PXMtaz4+MikrLTF8MCl8fHc+Pj4wPD0oMHxhcltBKzQ+PjJdKT4+PjB8fCh2PTB8YXJbYistND4+Ml0sMCE9KDB8dHJbdisxMDA+PjBdKSl8fDAhPSgwfGFyW3YrOTY+PjJdKT9iPXM6KChzPTB8YXJbYistND4+Ml0pJiYoYWEocyksdnUocyksYj0wfGFyW2M+PjJdKSxiPWIrLTR8MCxhcltjPj4yXT1iKSwtMT09KDB8ZCkmJihkPWItKDB8YXJbbD4+Ml0pPj4yLG5hKGI9MHxodSgxMDYyNCkpLGFyW2E+PjJdPWIsKHM9MHxhcltjPj4yXSk+Pj4wPCgwfGFyW0ErMTY+PjJdKT4+PjA/KGFyW3M+PjJdPWIsYXJbYz4+Ml09NCsoMHxhcltjPj4yXSkpOmZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPTQrKEF8PTApfDAsbj0wfGFyW0E+PjJdLHQ9KDB8YXJbZj4+Ml0pLW58MCwxMDczNzQxODIzPChvPTErKGk9dD4+Mil8MCk+Pj4wJiZ6bCgpO2M9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwLGE9Yz4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpO2lmKGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLCFuKXJldHVybjt2dShuKX0obCxhKSksYj0wfGFyWygwfGFyW2w+PjJdKSsoZDw8Mik+PjJdLChzPTB8YXJbZSs0NzY+PjJdKT4+PjA8ND8odGEoYiwwfGFyW2UrNDg0Pj4yXSwwfGFyW2UrNDg4Pj4yXSxzLGUsMSxyLDAsaSxmLG4sdCksdHJbYisxMDUxNj4+MF09MCx1cj11LDB8ZCk6KHNyKDQ0NDU2LDM2NTU0LDI1OSwzNjU5OSksMCl9ZnVuY3Rpb24gZmEoQSl7dmFyIGUscjtlPShBfD0wKSszNnwwLHI9QSs0OHwwLGFyWyhBPUErNTJ8MCk+PjJdPSgwfGFyW0E+PjJdKS0xLEE9MSsoMHxhcltyPj4yXSl8MCwoYXJbcj4+Ml09QSk+Pj4wPD0yMDQ3fHwodnUoMHxhclthcltlPj4yXT4+Ml0pLGFyW2U+PjJdPTQrKDB8YXJbZT4+Ml0pLGFyW3I+PjJdPSgwfGFyW3I+PjJdKS0xMDI0KX1mdW5jdGlvbiBuYShBKXt2YXIgZSxyLGk9MDthclsoQXw9MCkrNDg+PjJdPTAsYXJbQSs1Mj4+Ml09MCxhcltBKzU2Pj4yXT0wLGFyW0ErNzAwPj4yXT0wLGFyW0ErNzA0Pj4yXT0wLGFyW0ErNzA4Pj4yXT0wLGFyWyhpPUErNzM2fDApPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaSsxMj4+Ml09MCxhcltpKzE2Pj4yXT0wLCRhKEErNzY0fChhcltpKzIwPj4yXT0wKSksSWEoQSs1OTMyfDApLHRyW0ErMTA1MTg+PjBdPTAsdHJbQSsxMDUxOT4+MF09MCx2YihBKzEwMzQwfCh0cltBKzEwNTIwPj4wXT0wKSwwLDE0MCksYXJbQT4+Ml09LTEsYXJbQSsxMDQ+PjJdPTAsYXJbQSsxMDMzMj4+Ml09MCxhcltBKzEwMzM2Pj4yXT0wLGFyW0ErMTA1MTI+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErNjA+PjJdPTAsYXJbQSs4Pj4yXT0wLGFyW0ErNjQ+PjJdPTAsYXJbQSsxMj4+Ml09MCxhcltBKzY4Pj4yXT0wLGFyW0ErMjg+PjJdPTAsaT1BKzEwNDgwfChhcltBKzI0Pj4yXT0wKSxhcltBKzEwNTI0Pj4yXT0wLGFyW2k+PjJdPTAsYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpKzEyPj4yXT0wLGFyW2krMTY+PjJdPTAsYXJbaSsyMD4+Ml09MCx0cltBKzEwNTE2Pj4wXT0yLGFyW0ErODg+PjJdPS0xLGFyW0ErOTI+PjJdPS0xLGFyW0ErOTY+PjJdPTAsdHJbQSsxMDA+PjBdPTAsYXJbKGk9QSsxMDUyOHwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxlPUErMTA1NDh8MCxwQSgwfChlfD0wKSwwKSxyPUErMTA1NzZ8MCxkQSgwfChyfD0wKSwwKX1mdW5jdGlvbiB0YShBLGUscixpLGYsbix0LG8sYSxjLGwsdSl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wO3ZhciBiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wO3N3aXRjaCh1cj0ocz11cikrNDh8MCxiPXMsKGZ8PTApfHxzcigzNjc0OSwzNjY2MywyNDAsMzY3NTMpLGhiKDB8KGg9QSs3NjR8MCksMHxmLDQ3MTcpLCgwfGgpIT0oMHxmKSYmS2UoQSs1NDg0fDAsMHxhcltmKzQ3MjA+PjJdLDB8YXJbZis0NzI0Pj4yXSksaGIoQSs1NDk2fDAsZis0NzMyfDAsNDM2KSxvYShBKSxrPTB8YXJbMTQzMjZdLGFyWzE0MzI2XT1rKzEsYXJbQT4+Ml09ayxhcltBKzEwND4+Ml09MjE0NzQ4MzY0NyxhcltBKzEwMzMyPj4yXT10LGFyW0ErMTAzMzY+PjJdPW8sYXJbQSsyMD4+Ml09aSxhcltBKzI0Pj4yXT1lLGFyW0ErMjg+PjJdPXIsYXJbKGs9QSszMnwwKT4+Ml09ZSxhclsoaD1BKzM2fDApPj4yXT1yLGFyW0ErMTA0ODg+PjJdPWwsYXJbKGw9QSsxMDQ4MHwwKT4+Ml09YSxhcltsKzQ+PjJdPWMsMHxpKXtjYXNlIDM6Y2FzZSAwOmQ9bT0xO2JyZWFrO2Nhc2UgMTpkPTIscD04O2JyZWFrO2Nhc2UgMjpkPTEscD04O2JyZWFrO2RlZmF1bHQ6c3IoNDQ0NTYsMzY2NjMsMjc2LDM2NzUzKX1zd2l0Y2goOD09KDB8cCkmJihtPTIpLDB8aSl7Y2FzZSAxOnc9KGUrMXwwKS8oYXJbYj4+Ml09Mil8MCxhcltrPj4yXT13LHY9KHIrMXwwKS8yfDAsYXJbaD4+Ml09djticmVhaztjYXNlIDI6YXJbYj4+Ml09Myx3PShlKzF8MCkvMnwwLGFyW2s+PjJdPXcsdj1yO2JyZWFrO2Nhc2UgMzphcltiPj4yXT00LHc9ZSx2PXI7YnJlYWs7Y2FzZSAwOmFyW2I+PjJdPTEsYXJbaz4+Ml09MCx2PXc9YXJbaD4+Ml09MDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDM2NjYzLDMwMiwzNjc1Myl9YXJbYis0Pj4yXT1lLGFyW2IrOD4+Ml09cixhcltiKzEyPj4yXT0xNixpPTB8YXJbZis0OTY+PjJdLGE9MHxhcltmKzUwMD4+Ml0saz0wfGFyW2YrNTA0Pj4yXSxoPTB8YXJbZis1MDg+PjJdLGU9ZS0oMHxicih5PWEraXwwLG0pKXwwLGFyW0ErNzI+PjJdPWUsbD1yLSgwfGJyKGM9aCtrfDAsZCkpfDAsYXJbQSs3Nj4+Ml09bCxhcltBKzgwPj4yXT13LXksYXJbQSs4ND4+Ml09di1jLGM9MHxicihpLG0pLGFyW2IrMTY+PjJdPWMsYT0wfGJyKGEsbSksYXJbYisyMD4+Ml09YSxhPTB8YnIoayxkKSxhcltiKzI0Pj4yXT1hLG09MHxicihoLGQpLGFyW2IrMjg+PjJdPW0sYXJbYiszMj4+Ml09ZSxhcltiKzM2Pj4yXT1sLHRyW0ErMTY+PjBdPTg8KDB8YXJbZis0OTk2Pj4yXSkmMSxsPTg8KDB8YXJbZis1MDA0Pj4yXSkmMSx0cltBKzE3Pj4wXT1sLHRyW0ErMTg+PjBdPWwsZD0obD0wPT0oMHx0KSk/MDowfGFyW3QrNTQ0Pj4yXTtkb3tpZihvKXtpZihkPTB8YXJbbyszMDYwPj4yXSx1KXtpZih5PTB8YXJbbyszMDY0Pj4yXSxsPUErMTA1MDR8MCxhcltBKzEwNTEyPj4yXT15KXthcltsPj4yXT0wLGFyW0ErMTA1MDg+PjJdPTA7YnJlYWt9Wj0wfGFyWyhwPTc3MzYpPj4yXSxwPTB8YXJbcCs0Pj4yXSxhclsoZz1sKT4+Ml09WixhcltnKzQ+PjJdPXAsZz1kLHA9MjU7YnJlYWt9cD0yNH1lbHNlIHA9bHwxXnU/MjQ6KFo9MHxhclsocD10KzUzNnwwKT4+Ml0scD0wfGFyW3ArND4+Ml0sYXJbKGc9QSsxMDUwNHwwKT4+Ml09WixhcltnKzQ+PjJdPXAsZz1kLDI1KX13aGlsZSgwKTtpZigyND09KDB8cCkmJihaPTB8YXJbKHk9NzczNik+PjJdLHk9MHxhclt5KzQ+PjJdLGFyWyhnPUErMTA1MDR8MCk+PjJdPVosYXJbZys0Pj4yXT15LGc9ZCxwPTI1KSwyNT09KDB8cCkmJjB8WiYmKHk9MD09KDB8UGJbNyZaXSh0LGIsQSxnKSksdD0oMHxhcltBKzQ+PjJdKStjKygwfGJyKDB8YXJbQSs0MD4+Ml0sYSkpfDAsYXJbQSs2MD4+Ml09dCx0PTB8YnIoMHxhcltBKzQ0Pj4yXSxrKSxhcltBKzY0Pj4yXT0oMHxhcltBKzg+PjJdKStpK3QsYXJbQSs2OD4+Ml09KDB8YXJbQSsxMj4+Ml0pK2krdCx5KSlyZXR1cm4gdXI9cywwfCh5PTcpO2Rve2lmKG4pe2k9MHxhclsoZT1mKzUxMTJ8MCk+PjJdLGs9MHxhclsodz1mKzUxMTZ8MCk+PjJdLGg9MHxhclsodj1mKzUxMDh8MCk+PjJdLGE9MHxicihrLGkpLGM9QSsxMDQwNHwwLGQ9MHxhclsobD1BKzEwNDAwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTMyO2JyZWFrfXI9YXJbYz4+Ml09MDticmVha31wPTMyfXdoaWxlKDApOzMyPT0oMHxwKSYmKGFyW0ErMTA0MTI+PjJdPWksYXJbQSsxMDQxNj4+Ml09ayxhcltBKzEwNDA4Pj4yXT1oLHI9MCE9KDB8ZCkpLGg9MHxhcltlPj4yXSxrPTB8YXJbdz4+Ml0saT0wfGFyW3Y+PjJdLGE9MHxicihrLGgpLGM9QSsxMDQyNHwwLGQ9MHxhclsobD1BKzEwNDIwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTM3O2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31wPTM3fXdoaWxlKDApOzM3PT0oMHxwKSYmKGFyW0ErMTA0MzI+PjJdPWgsYXJbQSsxMDQzNj4+Ml09ayxhcltBKzEwNDI4Pj4yXT1pLGQ9MCE9KDB8ZCkpLGU9ciZkLGw9QSsxMDM2MHwwLGk9MHxhclsocj1mKzUwNTJ8MCk+PjJdLGs9MHxhclsodj1mKzUwNjB8MCk+PjJdLGg9MHxhclsodz1mKzUwMzZ8MCk+PjJdLGE9MHxicihrLGkpLGM9QSsxMDM2NHwwO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKDB8YXJbbD4+Ml0pLGQ9MHx5YygzKmF8MCksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTQzO2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31kPTB8YXJbbD4+Ml0scD00M313aGlsZSgwKTs0Mz09KDB8cCkmJihhcltBKzEwMzcyPj4yXT1pLGFyW0ErMTAzNzY+PjJdPWssYXJbQSsxMDM2OD4+Ml09aCxkPTAhPSgwfGQpKSxoPWUmZCxpPSgwfGFyW3c+PjJdKS0yfDAsaz1hcltyPj4yXTw8aSxpPWFyW3Y+PjJdPDxpLGw9QSsxMDM4MHwwLGE9MHxicihpLGspLGM9QSsxMDM4NHwwO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKDB8YXJbbD4+Ml0pLGQ9MHx5YygxMiphfDApLGFyW2w+PjJdPWQpe2FyW2M+PjJdPWEscD00OTticmVha31kPWFyW2M+PjJdPTA7YnJlYWt9ZD0wfGFyW2w+PjJdLHA9NDl9d2hpbGUoMCk7NDk9PSgwfHApJiYoYXJbQSsxMDM5Mj4+Ml09ayxhcltBKzEwMzk2Pj4yXT1pLGFyW0ErMTAzODg+PjJdPTIsZD0wIT0oMHxkKSksZT1oJmQsaT0wfGFyW2YrNTA4OD4+Ml0saz0wfGFyW2YrNTA5Mj4+Ml0saD0wfGFyW2YrNTEwMD4+Ml0sYT0wfGJyKGssaSksYz1BKzEwNDQ0fDAsZD0wfGFyWyhsPUErMTA0NDB8MCk+PjJdO2Rve2lmKCgwfGEpIT0oMHxhcltjPj4yXSkpe2lmKEJjKGQpLGQ9MHx5YyhhKSxhcltsPj4yXT1kKXthcltjPj4yXT1hLHA9NTQ7YnJlYWt9ZD1hcltjPj4yXT0wO2JyZWFrfXA9NTR9d2hpbGUoMCk7NTQ9PSgwfHApJiYoYXJbQSsxMDQ1Mj4+Ml09aSxhcltBKzEwNDU2Pj4yXT1rLGFyW0ErMTA0NDg+PjJdPWgsZD0wIT0oMHxkKSksaD1lJmQsaT0oMysoMHxhcltmKzQ4ND4+Ml0pfDApLzR8MCxrPSgzKygwfGFyW2YrNDg4Pj4yXSl8MCkvNHwwLGE9MHxicihrLGkpLGM9QSsxMDQ2NHwwLGQ9MHxhclsobD1BKzEwNDYwfDApPj4yXTtkb3tpZigoMHxhKSE9KDB8YXJbYz4+Ml0pKXtpZihCYyhkKSxkPTB8eWMoYSksYXJbbD4+Ml09ZCl7YXJbYz4+Ml09YSxwPTU5O2JyZWFrfWQ9YXJbYz4+Ml09MDticmVha31wPTU5fXdoaWxlKDApO2lmKDU5PT0oMHxwKSYmKGFyW0ErMTA0NzI+PjJdPWksYXJbQSsxMDQ3Nj4+Ml09ayxhcltBKzEwNDY4Pj4yXT0yLGQ9MCE9KDB8ZCkpLHI9aCZkLGg9QSsxMDM0MHwwLCgwfChkPTB8YXJbKGU9QSsxMDM0NHwwKT4+Ml0pKT09KDB8YXJbZis1MDcyPj4yXSkpe2lmKHIpYnJlYWs7cmV0dXJuIHVyPXMsMHwoZD03KX1pZihhPTB8YXJbKHc9QSsxMDUyNHwwKT4+Ml0pe2lmKDB8KGQ9MHxhclsobD1hKy00fDApPj4yXSkpZm9yKGQ9YSsoODAqZHwwKXwwO0puKGQ9ZCstODB8MCksKDB8ZCkhPSgwfGEpOyk7bXUobCksZD0wfGFyW2U+PjJdfWk9MHxhcltmKzUwNTY+PjJdLGs9MHxhcltmKzUwNjQ+PjJdLGM9MHxhcltmKzUwNDA+PjJdLGw9MHxicihrLGkpO2Rve2lmKCgwfGwpIT0oMHxkKSl7aWYoQmMoMHxhcltoPj4yXSksZD0wfHljKDI0Kmx8MCksYXJbaD4+Ml09ZCl7YXJbZT4+Ml09bCxhPWQscD03MTticmVha31sPWQ9YXJbZT4+Ml09MDticmVha31hPTB8YXJbaD4+Ml0sbD1kLHA9NzF9d2hpbGUoMCk7aWYoNzE9PSgwfHApJiYoYXJbQSsxMDM1Mj4+Ml09aSxhcltBKzEwMzU2Pj4yXT1rLGFyW0ErMTAzNDg+PjJdPWMsZD0wIT0oMHxhKSksYT1yJmQsYz0wfHd1KDUzNjg3MDkxPGw+Pj4wfDQyOTQ5NjcyOTE8KGM9ODAqbHwwKT4+PjA/LTE6Yys0fDApLGFyW2M+PjJdPWwsYz1jKzR8MCwwfGwpZm9yKGQ9YysoODAqbHwwKXwwLGw9YztEbihsKSwoMHwobD1sKzgwfDApKSE9KDB8ZCk7KTtpZihhclt3Pj4yXT1jLCFhKXJldHVybiB1cj1zLDB8KHk9Nyl9fXdoaWxlKDApO3JldHVybiB1cj1zLCh5PTApfHl9ZnVuY3Rpb24gb2EoQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTA7aWYoMHxhclsoZj0oQXw9MCkrNHwwKT4+Ml0mJigocj0wfGFyW0ErMTA1MTI+PjJdKT8obz0wfGFyW0ErMTAzMzY+PjJdLG5zWzEyNyZyXShvLEEsMHxhcltvKzMwNjA+PjJdKSk6KGk9KHI9MHxhcltBKzEwMzMyPj4yXSk/MHxhcltyKzU0ND4+Ml06MCxuc1sxMjcmYXJbQSsxMDUwOD4+Ml1dKHIsQSxpKSksYXJbZj4+Ml09MCxhcltBKzYwPj4yXT0wLGFyW0ErOD4+Ml09MCxhcltBKzY0Pj4yXT0wLGFyW0ErMTI+PjJdPTAsYXJbQSs2OD4+Ml09MCksZT1BKzQ4fDAsKDB8KHI9aT0wfGFyWyhvPUErNTJ8MCk+PjJdKSkhPSgwfChmPUE9MHxhcltlPj4yXSkpKXtmb3IodD0wOyhuPTB8YXJbZisodDw8Mik+PjJdKSYmKDB8KHI9MHxhcltuKzEzNDQ+PjJdKSYmKCgwfChmPTB8YXJbKGk9bisxMzQ4fDApPj4yXSkpIT0oMHxyKSYmKGFyW2k+PjJdPWYrKH4oKGYrLTQtcnwwKT4+PjIpPDwyKSksdnUocikpLGt0KG4rMTMzMnwwKSwwfChyPTB8YXJbbis3NzY+PjJdKSYmKCgwfChmPTB8YXJbKGk9bis3ODB8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZisofigoZistNC1yfDApPj4+Mik8PDIpKSx2dShyKSksdnUobikscj0wfGFyW28+PjJdLEE9MHxhcltlPj4yXSxpPXIpLCh0PXQrMXwwKT4+PjA8aS0oZj1BKT4+Mj4+PjA7KTtpPUF9KDB8cikhPSgwfGYpJiYoYXJbbz4+Ml09cisofigocistNC1pfDApPj4+Mik8PDIpKX1mdW5jdGlvbiBhYShBKXt2YXIgZSxyLGksZj0wLG49MCx0PTAsbz0wO2lmKG9hKEF8PTApLDB8KG49MHxhcltBKzEwNTI0Pj4yXSkpe2lmKDB8KGY9MHxhclsodD1uKy00fDApPj4yXSkpZm9yKGY9bisoODAqZnwwKXwwO0puKGY9ZistODB8MCksKDB8ZikhPSgwfG4pOyk7bXUodCl9aWYocj1BKzEwNTc2fDAsc0EoMHwocnw9MCkpLGk9QSsxMDU0OHwwLFpBKDB8KGl8PTApKSxCYygwfGFyW0ErMTA0NjA+PjJdKSxCYygwfGFyW0ErMTA0NDA+PjJdKSxCYygwfGFyW0ErMTA0MjA+PjJdKSxCYygwfGFyW0ErMTA0MDA+PjJdKSxCYygwfGFyW0ErMTAzODA+PjJdKSxCYygwfGFyW0ErMTAzNjA+PjJdKSxCYygwfGFyW0ErMTAzNDA+PjJdKSxHYShBKzU5MzJ8MCksQWMoQSs3NjR8MCksMHwoZj0wfGFyW0ErNzQ4Pj4yXSkmJigoMHxhclsobj1BKzc1MnwwKT4+Ml0pIT0oMHxmKSYmKGFyW24+PjJdPWYpLHZ1KGYpKSwwfChmPTB8YXJbQSs3MzY+PjJdKSYmKCgwfCh0PTB8YXJbKG49QSs3NDB8MCk+PjJdKSkhPSgwfGYpJiYoYXJbbj4+Ml09dCsofigodCstMi1mfDApPj4+MSk8PDEpKSx2dShmKSksMHwoZj0wfGFyWyhlPUErNzAwfDApPj4yXSkpe2lmKCgwfChuPTB8YXJbKG89QSs3MDR8MCk+PjJdKSkhPSgwfGYpKXtmb3IoO249bistMTJ8MCxhcltvPj4yXT1uLCh0PTB8YXJbbj4+Ml0pJiYodnUodCksbj0wfGFyW28+PjJdKSwoMHxuKSE9KDB8Zik7KTtmPTB8YXJbZT4+Ml19dnUoZil9KHQ9MHxhcltBKzQ4Pj4yXSkmJigoMHwobj0wfGFyWyhmPUErNTJ8MCk+PjJdKSkhPSgwfHQpJiYoYXJbZj4+Ml09bisofigobistNC10fDApPj4+Mik8PDIpKSx2dSh0KSl9ZnVuY3Rpb24gY2EoQSxlKXtlfD0wO3ZhciByLGk7WW4ocj0oQXw9MCkrMTA1NDh8MCksYXJbKGk9QSsxMDUyOHwwKT4+Ml09KDB8YXJbaT4+Ml0pK2UsYXJbKEE9QSsxMDU0NHwwKT4+Ml09KDB8YXJbQT4+Ml0pK2UsUW4ocil9ZnVuY3Rpb24gbGEoQSxlKXtlfD0wO3ZhciByO1luKGU9KEF8PTApKzEwNTQ4fDApLGFyWyhyPUErMTA1Mjh8MCk+PjJdPSgwfGFyW3I+PjJdKS0xLGFyWyhBPUErMTA1MzJ8MCk+PjJdPTErKDB8YXJbQT4+Ml0pLFFuKGUpfWZ1bmN0aW9uIHVhKEEsZSl7ZXw9MDt2YXIgcixpLGYsbj0wOyhZbihlPShBfD0wKSsxMDU0OHwwKSxpPTB8YXJbKG49QSsxMDUzMnwwKT4+Ml0sYXJbbj4+Ml09aS0xLHI9MSsoMHxhclsobj1BKzEwNTQwfDApPj4yXSl8MCxhcltuPj4yXT1yLCgwfGkpPD0wJiZzcigzNjgwOSwzNjY2Myw2NDIsMzY4MzApLCgwfHIpPT0oMHxhcltBKzEwNTQ0Pj4yXSkpPyhmPUErMTA1NzZ8MCxtYihmfD0wKSxRbihlKSk6UW4oZSl9ZnVuY3Rpb24gYmEoQSxlLHIsaSxmKXtyfD0wLGl8PTAsZnw9MCxmdW5jdGlvbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuO2lmKCEoZXw9MCkpcmV0dXJuO2lmKCgwfGZ1bmN0aW9uKEEpe3JldHVybiAwfGFyWyhBfD0wKT4+Ml19KHI9KDB8YXJbQSsxMDUyND4+Ml0pKyg4MCpyfDApfDApKT49KDB8aSkpcmV0dXJuO1luKGY9QSsxMDU0OHwwKSxhclsobj1BKzEwNTMyfDApPj4yXT0oMHxhcltuPj4yXSktMSxhclsoQT1BKzEwNTM2fDApPj4yXT0xKygwfGFyW0E+PjJdKSxRbihmKSxhclsoZT1lKzR8MCk+PjJdPTIsTW4ocixpKSxhcltlPj4yXT0xLFluKGYpLGFyW0E+PjJdPSgwfGFyW0E+PjJdKS0xLGFyW24+PjJdPTErKDB8YXJbbj4+Ml0pLFFuKGYpfShBfD0wLGV8PTAsKDB8YnIoMHxhcltBKzU4MjA+PjJdLGkpKStyfDAsZil9ZnVuY3Rpb24gc2EoQSl7dmFyIGUscixpO2lmKFluKGU9KEF8PTApKzEwNTQ4fDApLGk9QSsxMDU0NHwwLCgwfGFyWyhyPUErMTA1NDB8MCk+PjJdKSE9KDB8YXJbaT4+Ml0pKXtmb3IoQT1BKzEwNTc2fDA7Zj1BLG49ZSxoQSgwfChmfD0wKSwwfChufD0wKSksKDB8YXJbcj4+Ml0pIT0oMHxhcltpPj4yXSk7KTt2YXIgZixuO1FuKGUpfWVsc2UgUW4oZSl9ZnVuY3Rpb24gZGEoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wO3JldHVybigoZnw9MCl8KGl8PTApfDApPDB8fCgwfGFyW0ErMTI0OD4+Ml0pPD0oMHxpKXx8KDB8YXJbQSsxMjUyPj4yXSk8PSgwfGYpPyhBPTApfEE6KHQ9MHxhcltBKzU4NjQ+PjJdLGE9MHxhcltBKzU4NTI+PjJdLG49KDB8YnIoZj4+dCxhKSkrKGk+PnQpfDAsdD0obz0wfGFyW0ErMTAzMjA+PjJdKSsoKDB8YnIocj4+dCxhKSkrKGU+PnQpPDwyKXwwLCgwfGFyW28rKG48PDIpPj4yXSk+KDB8YXJbdD4+Ml0pPyhhPTApfGE6KHQ9ZT4+KGE9MHxhcltBKzU4MDQ+PjJdKSxuPXI+PmEscj1pPj5hLGU9Zj4+YSxhPTB8YXJbQSsxMDM1Mj4+Ml0sbz0oMHxicihhLG4pKSt0fDAsYT0oZj0wfGFyW0ErMTAzNDA+PjJdKSsoMjQqKCgwfGJyKGEsZSkpK3J8MCl8MCl8MCwoMHxvcltmKygyNCpvfDApPj4xXSkhPSgwfG9yW2E+PjFdKT8oYT0wKXxhOihhPTB8YXJbQSs1ODIwPj4yXSxvPSgwfGJyKGEsbikpK3R8MCxhPShBPTB8YXJbQSsxMDMwOD4+Ml0pKygoMHxicihhLGUpKStyPDwyKXwwLDB8KGE9KDB8YXJbQSsobzw8Mik+PjJdKT09KDB8YXJbYT4+Ml0pKSkpKX1mdW5jdGlvbiBrYShBLGUscixpLGYsbix0LG8sYSxjLGwpe2lmKEF8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLCgwfChsfD0wKSk8KChpfD0wKSsocnw9MCl8MCkmKDFeKChpKyhlfD0wKXwwKTw9KDB8KGN8PTApKXwoMHxjKTwoMHxlKXwoMHxsKTwoMHxyKSkpKXtpZigodDw8MXwwKT09KDB8aSkmJiEoKHQrZXwwKTw9KDB8Yyl8MSE9KDB8YSl8KG88PDF8MCkhPSgwfGkpfCgwfGwpPChvK3J8MCkpKXJldHVybiAwfWVsc2V7aWYoKGx8Y3wwKTwwKXJldHVybiAwO2lmKCgwfGFyW0ErMTI0OD4+Ml0pPD0oMHxjKSlyZXR1cm4gMDtpZigoMHxhcltBKzEyNTI+PjJdKTw9KDB8bCkpcmV0dXJuIDA7aWYoYT0wfGFyW0ErNTg2ND4+Ml0saT0wfGFyW0ErNTg1Mj4+Ml0sbz0oMHxicihsPj5hLGkpKSsoYz4+YSl8MCxhPSh0PTB8YXJbQSsxMDMyMD4+Ml0pKygoMHxicihuPj5hLGkpKSsoZj4+YSk8PDIpfDAsKDB8YXJbdCsobzw8Mik+PjJdKT4oMHxhclthPj4yXSkpcmV0dXJuIDA7aWYoZj4+PWk9MHxhcltBKzU4MDQ+PjJdLGU9bj4+aSxyPWM+PmksaT1sPj5pLG49MHxhcltBKzEwMzUyPj4yXSxhPSgwfGJyKG4sZSkpK2Z8MCxuPShvPTB8YXJbQSsxMDM0MD4+Ml0pKygyNCooKDB8YnIobixpKSkrcnwwKXwwKXwwLCgwfG9yW28rKDI0KmF8MCk+PjFdKSE9KDB8b3Jbbj4+MV0pKXJldHVybiAwO2lmKG49MHxhcltBKzU4MjA+PjJdLGE9KDB8YnIobixlKSkrZnwwLG49KG89MHxhcltBKzEwMzA4Pj4yXSkrKCgwfGJyKG4saSkpK3I8PDIpfDAsKDB8YXJbbysoYTw8Mik+PjJdKSE9KDB8YXJbbj4+Ml0pKXJldHVybiAwfXJldHVybiBpPWM+PihlPTB8YXJbQSsxMDM2OD4+Ml0pLGU9bD4+ZSwoMHxpKTw9LTEmJnNyKDQ4NDgyLDM2ODQ2LDExOCw0ODUzOSksKDB8KHI9MHxhcltBKzEwMzcyPj4yXSkpPD0oMHxpKSYmc3IoNDg0ODIsMzY4NDYsMTE4LDQ4NTM5KSwoMHxlKTw9LTEmJnNyKDQ4NTQzLDM2ODQ2LDExOSw0ODUzOSksKDB8ZSk8KDB8YXJbQSsxMDM3Nj4+Ml0pPyhBPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIocixlKSkraXwwKXwwKXwwLDAhPSg3NjgmKGNyW0E+PjBdfGNyW0ErMT4+MF08PDgpKXwwKTooc3IoNDg1NDMsMzY4NDYsMTE5LDQ4NTM5KSwwKX1mdW5jdGlvbiBoYShBKXtyZXR1cm4oKEF8PTApKy0xOSYyNTUpPDJ8MH1mdW5jdGlvbiB3YShBKXtyZXR1cm4oKEF8PTApKy0xNiYyNTUpPDN8MH1mdW5jdGlvbiB2YShBKXtyZXR1cm4oMXwoQXw9MCkpPDwyND4+MjQ9PTl8MH1mdW5jdGlvbiBtYShBKXtyZXR1cm4oLTgmKEF8PTApKTw8MjQ+PjI0PT0xNnwwfWZ1bmN0aW9uIGdhKEEsZSl7ZXw9MDt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtmPShBfD0wKSs0fDAsbj0wfGFyW0E+PjJdLDEwNzM3NDE4MjM8KG89MSsoaT0odD0oMHxhcltmPj4yXSktbnwwKT4+Mil8MCk+Pj4wJiZ6bCgpLGE9KGM9KDB8YXJbKGw9QSs4fDApPj4yXSktbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTthclsocj1jKyhpPDwyKXwwKT4+Ml09YXJbZT4+Ml0sbz1yKygwLWk8PDIpfDAsMDwoMHx0KSYmaGIoMHxvLDB8biwwfHQpLGFyW0E+PjJdPW8sYXJbZj4+Ml09NCtyLGFyW2w+PjJdPWMrKGE8PDIpLG4mJnZ1KG4pfWZ1bmN0aW9uIFphKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wO2ZvcihpPWY9MHxhclsoQXw9MCkrMzI+PjJdLEE9KDB8YXJbQSszNj4+Ml0pLWY+PjI7Oyl7aWYoZj1BKy0xfDAsKDB8QSk8PTApe0E9MCxmPTQ7YnJlYWt9aWYoISgoKDB8YXJbaSsoZjw8Mik+PjJdKS1yfDApPigwfGUpKSl7Zj00O2JyZWFrfUE9Zn1yZXR1cm4gND09KDB8Zik/MHxBOjB9ZnVuY3Rpb24gcGEoQSxlKXtlfD0wO3ZhciByLGksZixuLHQsbz0wLGE9MCxjPTAsbD0wO2Y9KEF8PTApKzR8MCxuPTB8YXJbQT4+Ml0sMTA3Mzc0MTgyMzwobz0xKyhpPSh0PSgwfGFyW2Y+PjJdKS1ufDApPj4yKXwwKT4+PjAmJnpsKCksYT0oYz0oMHxhclsobD1BKzh8MCk+PjJdKS1ufDApPj4xLGE9Yz4+Mj4+PjA8NTM2ODcwOTExP2E+Pj4wPG8+Pj4wP286YToxMDczNzQxODIzO2Rve2lmKGEpe2lmKCEoMTA3Mzc0MTgyMzxhPj4+MCkpe2M9MHxodShhPDwyKTticmVha31adShsPTB8WCg4KSw0NDUxOSksYXJbbD4+Ml09MTc2NjAsSSgwfGwsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2FyWyhyPWMrKGk8PDIpfDApPj4yXT1hcltlPj4yXSxvPXIrKDAtaTw8Mil8MCwwPCgwfHQpJiZoYigwfG8sMHxuLDB8dCksYXJbQT4+Ml09byxhcltmPj4yXT00K3IsYXJbbD4+Ml09YysoYTw8MiksbiYmdnUobil9ZnVuY3Rpb24geWEoQSl7dmFyIGUscixpLGYsbj0wLHQ9MCxvPTA7cmV0dXJuKG49MHxhclsoZT0oQXw9MCkrMzJ8MCk+PjJdKT8oZj0wfGFyWyhpPUErMTZ8MCk+PjJdLG89MHxhclsodD1BKzI4fDApPj4yXSxyPTB8YXJbKDB8YXJbZisobz4+PjEwPDwyKT4+Ml0pKygoMTAyMyZvKTw8Mik+PjJdLGFyW2U+PjJdPW4rLTEsbj1vKzF8MCwyMDQ3PChhclt0Pj4yXT1uKT4+PjAmJih2dSgwfGFyW2Y+PjJdKSxhcltpPj4yXT00KygwfGFyW2k+PjJdKSxhclt0Pj4yXT0oMHxhclt0Pj4yXSktMTAyNCksYXJbKG89QSszNnwwKT4+Ml09KDB8YXJbbz4+Ml0pLSgwfGFyWzI0K3I+PjJdKSwwfChvPXIpKToodD0wKXx0fWZ1bmN0aW9uIEJhKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZixuLHQ9MCxvPTA7aWYodXI9KG49dXIpKzE2fDAsbz1hclsodD1uKT4+Ml09ZSl7aWYocj1BKzQwfDAsKGY9MHxhclsoaT1BKzQ0fDApPj4yXSktKDB8YXJbcj4+Ml0pPj4yPj4+MDwxNilyZXR1cm4oMHxmKT09KDB8YXJbQSs0OD4+Ml0pP3BhKHIsdCk6KGFyW2Y+PjJdPW8sYXJbaT4+Ml09NCsoMHxhcltpPj4yXSkpLHZvaWQodXI9bik7QmMoMHxhcltlKzIwPj4yXSksMHwoQT0wfGFyW2UrMzI+PjJdKSYmKCgwfChvPTB8YXJbKHQ9ZSszNnwwKT4+Ml0pKSE9KDB8QSkmJihhclt0Pj4yXT1vKyh+KChvKy00LUF8MCk+Pj4yKTw8MikpLHZ1KEEpKSx2dShlKSx1cj1ufWVsc2UgdXI9bn1mdW5jdGlvbiBFYShBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2lmKHVyPShzPXVyKSszMnwwLGM9cys0fDAsYT1zLDEwMjM8KHI9MHxhclsoZT0oQXw9MCkrMTZ8MCk+PjJdKT4+PjApe2FyW2U+PjJdPXIrLTEwMjQsYz0wfGFyWyhsPUErNHwwKT4+Ml0sYj0wfGFyW2M+PjJdLGM9Yys0fDAsYXJbbD4+Ml09YyxvPTB8YXJbKHU9QSs4fDApPj4yXSxlPXQ9MHxhclsoYT1BKzEyfDApPj4yXSxuPW87ZG97aWYoKDB8byk9PSgwfHQpKXtpZigoaT1yPTB8YXJbQT4+Ml0pPj4+MDxjPj4+MCl7Zj0oZT1jKSsoKGk9KDErKGUtaT4+Mil8MCkvLTJ8MCk8PDIpfDAsZT0ocj0oZT1uLWV8MCk+PjIpPyh3YigwfGYsMHxjLDB8ZSksMHxhcltsPj4yXSk6YyxBPWYrKHI8PDIpfDAsYXJbdT4+Ml09QSxhcltsPj4yXT1lKyhpPDwyKSxlPUE7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZT0wPT0oMHwoZT1lLWk+PjEpKT8xOmUpPj4+MCYmKFp1KHM9MHxYKDgpLDQ0NTE5KSxhcltzPj4yXT0xNzY2MCxJKDB8cyw0MDE2LDQyOCkpLHQ9aT0obj1mPTB8aHUoZTw8MikpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8Yyk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1jO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW2w+PjJdPXQsYXJbdT4+Ml09ZSxhclthPj4yXT1mLHImJih2dShyKSxlPTB8YXJbdT4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO3JldHVybiBhcltlPj4yXT1iLGFyW3U+PjJdPTQrKDB8YXJbdT4+Ml0pLHZvaWQodXI9cyl9aWYoZj0oZT0wfGFyWyhiPUErOHwwKT4+Ml0pLSgwfGFyWyh1PUErNHwwKT4+Ml0pfDAsKGk9KHI9MHxhclsobD1BKzEyfDApPj4yXSktKDB8YXJbQT4+Ml0pfDApPj4+MDw9Zj4+PjApe2ZvcihlPTA9PSgwfChlPWk+PjEpKT8xOmUsYXJbYysxMj4+Ml09MCxhcltjKzE2Pj4yXT1BKzEyLDEwNzM3NDE4MjM8ZT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxpPTB8aHUoZTw8MiksdD0oYXJbYz4+Ml09aSkrKGY+PjI8PDIpfDAsYXJbKG89Yys4fDApPj4yXT10LGFyWyhuPWMrNHwwKT4+Ml09dCxhclsodD1jKzEyfDApPj4yXT1pKyhlPDwyKSxmPTB8aHUoNDA5NiksYXJbYT4+Ml09ZixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KGMsYSksZj0wfGFyW2I+PjJdOygwfGYpIT0oMHwoZT0wfGFyW3U+PjJdKSk7KVhhKGMsYT1mKy00fDApLGY9YTtyZXR1cm4gcj1lLGk9MHxhcltBPj4yXSxhcltBPj4yXT1hcltjPj4yXSxhcltjPj4yXT1pLGFyW3U+PjJdPWFyW24+PjJdLGFyW24+PjJdPXIsZT0wfGFyW2I+PjJdLGFyW2I+PjJdPWFyW28+PjJdLGFyW28+PjJdPWUsQT0wfGFyW2w+PjJdLGFyW2w+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsKDB8ZSkhPSgwfGYpJiYoYXJbbz4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSwwfGkmJnZ1KGkpLHZvaWQodXI9cyl9aWYoKDB8cikhPSgwfGUpKXJldHVybiBiPTB8aHUoNDA5NiksYXJbYz4+Ml09YixmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MDtyPTB8YXJbKGI9OCsoQXw9MCl8MCk+PjJdLHU9MHxhclsoaT1BKzEyfDApPj4yXSx0PXUsYT1yO2Rve2lmKCgwfHIpPT0oMHx1KSl7aWYobD0wfGFyWyh1PUErNHwwKT4+Ml0sbj0wfGFyW0E+PjJdLChmPW4pPj4+MDxsPj4+MCl7bz0obj1sKSsoKHQ9KDErKG4tZj4+Mil8MCkvLTJ8MCk8PDIpfDAsZj0obj0oZj1hLW58MCk+PjIpPyh3YigwfG8sMHxsLDB8ZiksMHxhclt1Pj4yXSk6bCxsPW8rKG48PDIpfDAsYXJbYj4+Ml09bCxhclt1Pj4yXT1mKyh0PDwyKSxmPWw7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZj0wPT0oMHwoZj10LWY+PjEpKT8xOmYpPj4+MCYmKFp1KGI9MHxYKDgpLDQ0NTE5KSxhcltiPj4yXT0xNzY2MCxJKDB8Yiw0MDE2LDQyOCkpLG89MHxodShmPDwyKSxjPXQ9KGE9bykrKGY+Pj4yPDwyKXwwLG89bysoZjw8Mil8MCwoMHxsKT09KDB8cikpZj1jO2Vsc2V7Zm9yKGY9YyxuPWw7YXJbdD4+Ml09YXJbbj4+Ml0sZj10PWYrNHwwLCgwfChuPW4rNHwwKSkhPSgwfHIpOyk7bj0wfGFyW0E+PjJdfWFyW0E+PjJdPWEsYXJbdT4+Ml09YyxhcltiPj4yXT1mLGFyW2k+PjJdPW8sbiYmKHZ1KG4pLGY9MHxhcltiPj4yXSl9ZWxzZSBmPXJ9d2hpbGUoMCk7YXJbZj4+Ml09YXJbZT4+Ml0sYXJbYj4+Ml09NCsoMHxhcltiPj4yXSl9KEEsYyksdm9pZCh1cj1zKTthPTB8aHUoNDA5NiksYXJbYz4+Ml09YSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9NCsoQXw9MCl8MCk+PjJdLGI9MHxhcltBPj4yXSxuPWI7ZG97aWYoKDB8cik9PSgwfGIpKXtpZihmPTB8YXJbKGI9QSs4fDApPj4yXSxsPTB8YXJbKHU9QSsxMnwwKT4+Ml0sZj4+PjA8KGk9bCk+Pj4wKXt0PShpPShuPWYpKygobz0oMSsoaS1uPj4yKXwwKS8yfDApPDwyKXwwKSsoMC0odT0obj1uLXJ8MCk+PjIpPDwyKXwwLHUmJih3YigwfHQsMHxyLDB8biksaT10LGY9MHxhcltiPj4yXSksYXJbcz4+Ml09aSxhcltiPj4yXT1mKyhvPDwyKTticmVha31pZigxMDczNzQxODIzPChuPTA9PSgwfChuPWktbj4+MSkpPzE6bik+Pj4wJiYoWnUocz0wfFgoOCksNDQ1MTkpLGFyW3M+PjJdPTE3NjYwLEkoMHxzLDQwMTYsNDI4KSksYT0wfGh1KG48PDIpLGw9aT0oYz1hKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fShBLGMpLGE9MHxhclt1Pj4yXSxjPTB8YXJbYT4+Ml0sYT1hKzR8MCxhclt1Pj4yXT1hLG89MHxhcltiPj4yXSxlPXQ9MHxhcltsPj4yXSxuPW87ZG97aWYoKDB8byk9PSgwfHQpKXtpZigoaT1yPTB8YXJbQT4+Ml0pPj4+MDxhPj4+MCl7Zj0oZT1hKSsoKGk9KDErKGUtaT4+Mil8MCkvLTJ8MCk8PDIpfDAsZT0ocj0oZT1uLWV8MCk+PjIpPyh3YigwfGYsMHxhLDB8ZSksMHxhclt1Pj4yXSk6YSxBPWYrKHI8PDIpfDAsYXJbYj4+Ml09QSxhclt1Pj4yXT1lKyhpPDwyKSxlPUE7YnJlYWt9aWYoMTA3Mzc0MTgyMzwoZT0wPT0oMHwoZT1lLWk+PjEpKT8xOmUpPj4+MCYmKFp1KHM9MHxYKDgpLDQ0NTE5KSxhcltzPj4yXT0xNzY2MCxJKDB8cyw0MDE2LDQyOCkpLHQ9aT0obj1mPTB8aHUoZTw8MikpKyhlPj4+Mjw8Mil8MCxmPWYrKGU8PDIpfDAsKDB8YSk9PSgwfG8pKWU9dDtlbHNle2ZvcihlPXQscj1hO2FyW2k+PjJdPWFyW3I+PjJdLGU9aT1lKzR8MCwoMHwocj1yKzR8MCkpIT0oMHxvKTspO3I9MHxhcltBPj4yXX1hcltBPj4yXT1uLGFyW3U+PjJdPXQsYXJbYj4+Ml09ZSxhcltsPj4yXT1mLHImJih2dShyKSxlPTB8YXJbYj4+Ml0pfWVsc2UgZT1vfXdoaWxlKDApO2FyW2U+PjJdPWMsYXJbYj4+Ml09NCsoMHxhcltiPj4yXSksdXI9c31mdW5jdGlvbiBYYShBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtyPTB8YXJbKHM9KEF8PTApKzR8MCk+PjJdLG49Yj0wfGFyW0E+PjJdO2Rve2lmKCgwfHIpPT0oMHxiKSl7aWYoKGY9MHxhclsoYj1BKzh8MCk+PjJdKT4+PjA8KGk9bD0wfGFyWyh1PUErMTJ8MCk+PjJdKT4+PjApe3Q9KGk9KG49ZikrKChvPSgxKyhpLW4+PjIpfDApLzJ8MCk8PDIpfDApKygwLSh1PShuPW4tcnwwKT4+Mik8PDIpfDAsdSYmKHdiKDB8dCwwfHIsMHxuKSxpPXQsZj0wfGFyW2I+PjJdKSxhcltzPj4yXT1pLGFyW2I+PjJdPWYrKG88PDIpO2JyZWFrfWlmKDEwNzM3NDE4MjM8KG49MD09KDB8KG49aS1uPj4xKSk/MTpuKT4+PjAmJihadShzPTB8WCg4KSw0NDUxOSksYXJbcz4+Ml09MTc2NjAsSSgwfHMsNDAxNiw0MjgpKSxsPWk9KGM9YT0wfGh1KG48PDIpKSsoKG4rM3wwKT4+PjI8PDIpfDAsYT1hKyhuPDwyKXwwLCgwfHIpPT0oMHxmKSluPWwsZj1yO2Vsc2V7Zm9yKG89aSxuPWwsdD1yO2FyW28+PjJdPWFyW3Q+PjJdLG49bz1uKzR8MCwoMHwodD10KzR8MCkpIT0oMHxmKTspO2Y9MHxhcltBPj4yXX1hcltBPj4yXT1jLGFyW3M+PjJdPWwsYXJbYj4+Ml09bixhclt1Pj4yXT1hLGYmJih2dShmKSxpPTB8YXJbcz4+Ml0pfWVsc2UgaT1yfXdoaWxlKDApO2FyW2krLTQ+PjJdPWFyW2U+PjJdLGFyW3M+PjJdPSgwfGFyW3M+PjJdKS00fWZ1bmN0aW9uIFdhKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MDtpZighKHI9MHxhclsoZT0oQXw9MCkrOHwwKT4+Ml0pKXJldHVybihsPTApfGw7aWYoNj09KDB8KGk9MHxhclsobD1BKzR8MCk+PjJdKSkpe2lmKGE9KGk9MHxhclsoYz0yNCtyfDApPj4yXSkrMXwwLCgwfGFyWyh0PTI4K3J8MCk+PjJdKT4oMHxpKSlmPTB8YXJbMjArcj4+Ml07ZWxzZXtpZighKGY9MHx5YyhhKSkpcmV0dXJuIDB8KGw9Nyk7KG49MHxhclsobz0yMCtyfDApPj4yXSkmJihoYigwfGYsMHxuLDB8aSksQmMobiksaT0wfGFyW2M+PjJdKSxhcltvPj4yXT1mLGFyW3Q+PjJdPWF9dHJbZitpPj4wXT0wLGFyW2M+PjJdPTErKDB8YXJbYz4+Ml0pLGk9MHxhcltsPj4yXX1pZig3PT0oMHxpKSl7aWYodD0oaT0wfGFyWyhjPTI0K3J8MCk+PjJdKSsyfDAsKDB8YXJbKG89MjgrcnwwKT4+Ml0pPCgwfHQpKXtpZighKGY9MHx5Yyh0KSkpcmV0dXJuIDB8KGw9Nyk7KG49MHxhclsoYT0yMCtyfDApPj4yXSkmJihoYigwfGYsMHxuLDB8aSksQmMobiksaT0wfGFyW2M+PjJdKSxhclthPj4yXT1mLGFyW28+PjJdPXR9ZWxzZSBmPTB8YXJbMjArcj4+Ml07dHJbKGk9ZitpfDApPj4wXT0wLHRyW2krMT4+MF09MCxhcltjPj4yXT0yKygwfGFyW2M+PjJdKSxpPTB8YXJbbD4+Ml19cmV0dXJuIDQ8KDB8aSkmJihpPTB8YXJbKG89QSsxNnwwKT4+Ml0sYz0oMHxhcltBKzIwPj4yXSktaXwwLG49MHxhclsoZj1BKzI4fDApPj4yXSwoMHwoMD09KDB8Yyk/MDooYzw8OCktMXwwKSk9PSgodD0wfGFyWyhhPUErMzJ8MCk+PjJdKStufDApPyhFYShBKzEyfDApLG49MHxhcltmPj4yXSxmPTB8YXJbYT4+Ml0saT0wfGFyW28+PjJdKTpmPXQsYXJbKDB8YXJbaSsoKGM9ZitufDApPj4+MTA8PDIpPj4yXSkrKCgxMDIzJmMpPDwyKT4+Ml09cixhclthPj4yXT1mKzEsYXJbKEE9QSszNnwwKT4+Ml09KDB8YXJbQT4+Ml0pKygwfGFyWzI0K3I+PjJdKSxhcltlPj4yXT0wKSwobD1hcltsPj4yXT0wKXxsfWZ1bmN0aW9uIElhKEEpe3ZhciBlLHI9MDtmb3IodHJbKEF8PTApKzQxMzg+PjBdPTIscj1BKzQxMzl8MCx0cltBKzQxNTU+PjBdPTAsdHJbQSs0MTU2Pj4wXT0wLHRyW3I+PjBdPTAsdHJbcisxPj4wXT0wLHRyW3IrMj4+MF09MCxlPShyPUErNDM0MHwodHJbciszPj4wXT0wKSkrNjB8MDsoMHwocj1yKzR8KGFyW3I+PjJdPTApKSk8KDB8ZSk7KTtDYShBLDApfWZ1bmN0aW9uIENhKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MDtpZihhclsoQXw9MCk+PjJdPTAsb3JbQSs0Pj4xXT0wLHRyW0ErNj4+MF09MSx0cltBKzc+PjBdPTEsYXJbQSs4Pj4yXT0yNyx0cltBKzEyPj4wXT0wLHRyW0ErMTM+PjBdPTAsdHJbQSsxND4+MF09MCxhclsoZT1BKzE2fDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxvcltlKzE2Pj4xXT0wLHRyW2UrMTg+PjBdPTAsYXJbQSszNj4+Ml09MSxhcltBKzQwPj4yXT0xLHRyW0ErNDQ+PjBdPTEsdHJbQSs0NT4+MF09MSx0cltBKzQ2Pj4wXT0xLHZiKEErNDE3MnwwLDAsMTY4KSxlPTB8YXJbQSs0MzQwPj4yXSwoMHwoaT0wfGFyWyhyPUErNDM0NHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLGU9MHxhcltBKzQzNTI+PjJdLCgwfChpPTB8YXJbKHI9QSs0MzU2fDApPj4yXSkpIT0oMHxlKSYmKGFyW3I+PjJdPWkrKH4oKGkrLTQtZXwwKT4+PjIpPDwyKSksZT0wfGFyW0ErNDM2ND4+Ml0sKDB8KGk9MHxhclsocj1BKzQzNjh8MCk+PjJdKSkhPSgwfGUpJiYoYXJbcj4+Ml09aSsofigoaSstNC1lfDApPj4+Mik8PDIpKSxlPTB8YXJbQSs0Mzc2Pj4yXSwoMHwoaT0wfGFyWyhyPUErNDM4MHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLGU9MHxhcltBKzQzODg+PjJdLCgwfChpPTB8YXJbKHI9QSs0MzkyfDApPj4yXSkpPT0oMHxlKSlyZXR1cm4gYXJbKGk9QSs0MTYwfDApPj4yXT0wLHRyWyhpPUErNDd8MCk+PjBdPTAsdHJbKGk9QSs0OHwwKT4+MF09MCx0clsoaT1BKzQ5fDApPj4wXT0wLGFyWyhpPUErNTJ8MCk+PjJdPTAsYXJbKGk9QSs1NnwwKT4+Ml09MCx0clsoaT1BKzYwfDApPj4wXT0wLHRyWyhpPUErNDEyNXwwKT4+MF09MCxhclsoaT1BKzQxMjh8MCk+PjJdPTIsYXJbKEE9QSs0MTMyfDApPj4yXT0wLHZvaWQob3JbQSs0Pj4xXT0wKTthcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MiksYXJbKGk9QSs0MTYwfDApPj4yXT0wLHRyWyhpPUErNDd8MCk+PjBdPTAsdHJbKGk9QSs0OHwwKT4+MF09MCx0clsoaT1BKzQ5fDApPj4wXT0wLGFyWyhpPUErNTJ8MCk+PjJdPTAsYXJbKGk9QSs1NnwwKT4+Ml09MCx0clsoaT1BKzYwfDApPj4wXT0wLHRyWyhpPUErNDEyNXwwKT4+MF09MCxhclsoaT1BKzQxMjh8MCk+PjJdPTIsYXJbKEE9QSs0MTMyfDApPj4yXT0wLG9yW0ErND4+MV09MH1mdW5jdGlvbiBHYShBKXt2YXIgZT0wLHI9MCxpPTA7MHwoZT0wfGFyWyhBfD0wKSs0Mzg4Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM5MnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0Mzc2Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM4MHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0MzY0Pj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM2OHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwwfChlPTB8YXJbQSs0MzUyPj4yXSkmJigoMHwoaT0wfGFyWyhyPUErNDM1NnwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHZ1KGUpKSwoaT0wfGFyW0ErNDM0MD4+Ml0pJiYoKDB8KHI9MHxhclsoZT1BKzQzNDR8MCk+PjJdKSkhPSgwfGkpJiYoYXJbZT4+Ml09cisofigocistNC1pfDApPj4+Mik8PDIpKSx2dShpKSl9ZnVuY3Rpb24gVmEoQSxlKXt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtpZigoZXw9MCk+Pj4wPD0oYT0wfGFyWyh0PShBfD0wKSs4fDApPj4yXSktKG89MHxhclsobD1BKzR8MCk+PjJdKT4+Mj4+PjApcmV0dXJuIHZiKDB8bywwLGU8PDJ8MCksdm9pZChhcltsPj4yXT1vKyhlPDwyKSk7MTA3Mzc0MTgyMzwobz0oaT0oZj1vLShuPTB8YXJbQT4+Ml0pfDApPj4yKStlfDApPj4+MCYmemwoKSxhPShjPWEtbnwwKT4+MSxhPWM+PjI+Pj4wPDUzNjg3MDkxMT9hPj4+MDxvPj4+MD9vOmE6MTA3Mzc0MTgyMztkb3tpZihhKXtpZighKDEwNzM3NDE4MjM8YT4+PjApKXtjPTB8aHUoYTw8Mik7YnJlYWt9WnUobD0wfFgoOCksNDQ1MTkpLGFyW2w+PjJdPTE3NjYwLEkoMHxsLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTt2YigwfChyPWMrKGk8PDIpfDApLDAsZTw8MnwwKSxvPXIrKDAtaTw8Mil8MCwwPCgwfGYpJiZoYigwfG8sMHxuLDB8ZiksYXJbQT4+Ml09byxhcltsPj4yXT1yKyhlPDwyKSxhclt0Pj4yXT1jKyhhPDwyKSxuJiZ2dShuKX1mdW5jdGlvbiBGYShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY9MDtpZighKDB8dHJbKEF8PTApKzM0Pj4wXSkpcmV0dXJuIDA9PShyfGV8MCl8MDtpPTB8YXJbQSszNj4+Ml07QTpkb3tpZigwPCgwfGkpKXtmb3IoZj0wOygwfGFyW0ErNDI1MisoZjw8Mik+PjJdKSE9KDB8ZSk7KWlmKCgwfGkpPD0oMHwoZj1mKzF8MCkpKXtlPWY9MDticmVhayBBfWlmKDA8KDB8KGU9MHxhcltBKzQwPj4yXSkpKWZvcihmPTA7Oyl7aWYoKDB8YXJbQSs0Mjk2KyhmPDwyKT4+Ml0pPT0oMHxyKSl7ZT1mPTE7YnJlYWsgQX1pZigoMHxlKTw9KDB8KGY9ZisxfDApKSl7Zj0xLGU9MDticmVha319ZWxzZSBmPTEsZT0wfWVsc2UgZT1mPTB9d2hpbGUoMCk7cmV0dXJuIGUmZnwwfWZ1bmN0aW9uIFJhKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTAsQUE9MCxlQT0wLHJBPTAsaUE9MCxmQT0wLG5BPTAsdEE9MCxvQT0wLGFBPTAsY0E9MCxsQT0wO2lmKHVyPShVPXVyKSsxNDR8MCxEPVUrOHwwLEY9KFY9VSkrMTM2fDAsUz0wfGFyWyhSPShBfD0wKSsxMDM1MnwwKT4+Ml0saUE9KDB8YnIoUyxyKSkrZXwwLEo9MHxhcltBKzEwMzQwPj4yXSx6PWY8PDEsaj0oMHxjcltKKygyNCppQXwwKSs0Pj4wXSk+Pj56JjMpaWYoVD0oTT0xPDwoUD0wfGFyWygoTz0wPT0oMHxmKSk/QSs1NzYwfDA6QSs1NzY4fDApPj4yXSkpLTF8MCxRPTB8YnIobixlKSxZPTB8YnIodCxyKSxXPTB8YXJbKE8/QSsyNHwwOkErMzJ8MCk+PjJdLEk9MHxhclsoTz9BKzI4fDA6QSszNnwwKT4+Ml0sZT1ZPj4oQz0wfGFyW0ErMTAzNDg+PjJdKSwtMTwoMHwoaT1RPj5DKSkmKDB8aSk8KDB8Uyl8fHNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8ZSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfChHPTB8YXJbQSsxMDM1Nj4+Ml0pKTw9KDB8ZSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksbkE9SisoMjQqKCgwfGJyKGUsUykpK2l8MCl8MCkrMnwwLHA9QSs1MnwwLHk9MHxhcltBKzQ4Pj4yXSxuQT0wfGFyWzgwMCsoMHxhclt5KyhscltuQT4+MV08PDIpPj4yXSk+PjJdLEI9MHxhcltBKzU4MjA+PjJdLEU9eSxjQT1PP2FBPTA6KGFBPSgwfGFyW0ErNTc4MD4+Ml0pLTF8MCwoMHxhcltBKzU3ODQ+PjJdKS0xfDApLFo9KGZBPTB8YXJbQSs1ODA0Pj4yXSktYUF8MCxmQT1mQS1jQXwwLF89KDB8Vyk8KFErbnwwKT9XLVF8MDpuLE49KDB8SSk8KFkrdHwwKT9JLVl8MDp0LFg9MCE9KDB8dHJbSisoMjQqaUF8MCkrMjI+PjBdKSwyPT0oMHxqKSl7c3dpdGNoKCgwfGNyW0orKDI0KmlBfDApKzU+PjBdKT4+PnomMyl7Y2FzZSAwOkg9eD0wLHRBPS0xLG9BPTE7YnJlYWs7Y2FzZSAxOkg9LSh4PTEpLG9BPXRBPTA7YnJlYWs7Y2FzZSAyOnRBPUg9LSh4PTEpLG9BPTE7YnJlYWs7Y2FzZSAzOkg9LSh4PTEpLG9BPS0odEE9MSl9aWYoYXJbRD4+Ml09dEEsYXJbNCtEPj4yXT1vQSxhcltWPj4yXT1ILGFyW1YrND4+Ml09eCxnPTB8YnIoSCxhKSxtPTAteCZhLHRyW0Y+PjBdPTB8dHJbSisoMjQqaUF8MCkrOSsoZjw8Mik+PjBdLHRyWzErRj4+MF09MHx0cltKKygyNCppQXwwKSs5KyhmPDwyKSsxPj4wXSx0clsyK0Y+PjBdPTAsdHJbMytGPj4wXT0wfHRyW0orKDI0KmlBfDApKzkrKGY8PDIpKzI+PjBdLHRyWzQrRj4+MF09MHx0cltKKygyNCppQXwwKSs5KyhmPDwyKSszPj4wXSwoMHxOKTw9MCl1cj1VO2Vsc2V7Zj0wPCgwfF8pLHU9QSs1NDgwfDAsYj1BKzEwMzY4fDAscz1BKzEwMzcyfDAsZD1BKzEwMzc2fDAsaz1BKzEwMzYwfDAsaD1fKy0xfDAsdz1OKy0xfDAsdj1BKzU5Nzd8MCxQPUErMTAzMDh8MCxMPSgwfGJyKFk+PmZBLEIpKSsoUT4+Wil8MCxIPTA7QTpmb3IoOzspe2lmKEs9bysoKDB8YnIoQT1IK1l8MCxhKSkrUTw8MSl8MCxxPWMrKCgwfGJyKEEsbCkpK1E8PDEpfDAsZil7QUE9MD09KDB8SCksZUE9KDB8SCk9PSgwfHcpLGlBPSgwfChyQT0oJD1BPDxjQSk+PkMpKTwwfCgwfEcpPD0oMHxyQSkseD0wO2Rve2lmKFgmJjAhPSgwfHRyW3U+PjBdKSl7aWYoaT14K1E8PGFBPj4oZT0wfGFyW2I+PjJdKSxlPSQ+PmUsKDB8aSk8PS0xKXtsQT0yMzticmVhayBBfWlmKCgwfChyPTB8YXJbcz4+Ml0pKTw9KDB8aSkpe2xBPTIzO2JyZWFrIEF9aWYoKDB8ZSk8PS0xKXtsQT0yNjticmVhayBBfWlmKCgwfGUpPj0oMHxhcltkPj4yXSkpe2xBPTI2O2JyZWFrIEF9aj0oMHxhcltrPj4yXSkrKDMqKCgwfGJyKHIsZSkpK2l8MCl8MCl8MCwxMDI0JihjcltqPj4wXXxjcltqKzE+PjBdPDw4KXx8KGxBPTI4KX1lbHNlIGxBPTI4O2U6ZG97aWYoMjg9PSgwfGxBKSl7aWYoZT0oaT0oaj14K1F8KGxBPTApKTw8YUEpPj4ocj0wfGFyW2I+PjJdKSxyPSQ+PnIsKDB8ZSk8PS0xKXtsQT0zMDticmVhayBBfWlmKCgwfChTPTB8YXJbcz4+Ml0pKTw9KDB8ZSkpe2xBPTMwO2JyZWFrIEF9aWYoKDB8cik8PS0xKXtsQT0zMzticmVhayBBfWlmKCgwfHIpPj0oMHxhcltkPj4yXSkpe2xBPTMzO2JyZWFrIEF9aWYoej0oMHxhcltrPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwhKDIwNDgmKGNyW3o+PjBdfGNyW3orMT4+MF08PDgpKSl7aWYoZUF8KDB8eCk9PSgwfGgpfEFBfDA9PSgwfHgpKXtPPS0xPCgwfChTPWk+PkMpKSxyPTA7ZG97aWYobj0oMHxhcltEKyhyPDwyKT4+Ml0pK2p8MCwhKCgwfCh0PSgwfGFyW1YrKHI8PDIpPj4yXSkrQXwwKSk8KDB8SSkmKDB8bik8KDB8VykmLTE8KHR8bnwwKSkpYnJlYWsgZTtpZihlPXQ8PGNBPj5DLCgwfChpPW48PGFBPj5DKSk8PS0xKXtsQT00MDticmVhayBBfWlmKCgwfCh6PTB8YXJbUj4+Ml0pKTw9KDB8aSkpe2xBPTQwO2JyZWFrIEF9aWYoISgtMTwoMHxlKSYoMHxlKTwoMHxHKSkpe2xBPTQyO2JyZWFrIEF9aWYoZT1KKygyNCooKDB8YnIoeixlKSkraXwwKXwwKSsyfDAsKGU9MHxscltlPj4xXSk+Pj4wPj0oMHxhcltwPj4yXSktRT4+Mj4+PjApe2xBPTU5O2JyZWFrIEF9aWYoIShpPTB8YXJbeSsoZTw8Mik+PjJdKSl7bEE9NTk7YnJlYWsgQX1pZigoMHwoaT0wfGFyW2krODAwPj4yXSkpPCgwfG5BKSl7aWYoIShPJigwfFMpPCgwfHopKSl7bEE9NDc7YnJlYWsgQX1pZihpQSl7bEE9NDk7YnJlYWsgQX1pZih6PUorKDI0KigoMHxicih6LHJBKSkrU3wwKXwwKSsyfDAsISgwfHRyWzc2NCsoMHxhclt5Kyhsclt6Pj4xXTw8Mik+PjJdKT4+MF0pKWJyZWFrIGV9aWYoKDB8bkEpPCgwfGkpJiYwPT0oMHx0cls3NjQrKDB8YXJbeSsoZTw8Mik+PjJdKT4+MF0pKWJyZWFrIGU7aWYoMD09KDB8dHJbdj4+MF0pJiYodD0oMHxicih0Pj5mQSxCKSkrKG4+PlopfDAsej0wfGFyW1A+PjJdLCgwfGFyW3orKHQ8PDIpPj4yXSkhPSgwfGFyW3orKEw8PDIpPj4yXSkpKWJyZWFrIGU7cj1yKzF8MH13aGlsZSgoMHxyKTwyKX10PShqPTB8bHJbSysoeDw8MSk+PjFdKS0oMHxscltLKyh4K2crdEE8PDEpPj4xXSl8MCx6PWotKDB8bHJbSysoeCttK29BPDwxKT4+MV0pfDAsaj0oMHx0clsoKDB8dCk8MD8xOjB8dD8zOjIpKygoMHx6KTwwPy0xOjAhPSgwfHopJjEpK0Y+PjBdKStqfDAsb3JbcSsoeDw8MSk+PjFdPSgwfGopPDA/MDo2NTUzNSYoKDB8aik8KDB8TSk/ajpUKX19fXdoaWxlKDApO3g9eCsxfDB9d2hpbGUoKDB8eCk8KDB8XykpfWlmKCgwfE4pPD0oMHwoSD1IKzF8MCkpKXtsQT01OTticmVha319aWYoMjM9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjY9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzA9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDA9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDI9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDc9PSgwfGxBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDk9PSgwfGxBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTk9PSgwfGxBKSlyZXR1cm4gdm9pZCh1cj1VKX19ZWxzZXtmb3IoaT0wfGNyW0orKDI0KmlBfDApKzYrZj4+MF0scj0oZT1EKSsxMjh8MDsoMHwoZT1lKzR8KGFyW2U+PjJdPTApKSk8KDB8cik7KTthcltEKygoMzEmaSk8PDIpPj4yXT0xLGFyW0QrKChpKzEmMzEpPDwyKT4+Ml09MixhcltEKygoaSsyJjMxKTw8Mik+PjJdPTMsYXJbRCsoKGkrMyYzMSk8PDIpPj4yXT00LHJBPVArLTV8MCxpPTA8KDB8Tik7QTpkb3tpZihYKXtpZihpKXtLPTA8KDB8XykscT1BKzU0ODB8MCwkPUErMTAzNjh8MCxBQT1BKzEwMzcyfDAsZUE9QSsxMDM3NnwwLFA9QSsxMDM2MHwwLEw9NzwoMHxyQSkseD0wO2U6Zm9yKDs7KXtyOmRve2lmKEspe2lmKEg9KHo9eCtZfDApPDxjQSx0PTB8YnIoeixhKSx6PTB8YnIoeixsKSxBPTA9PSgwfHRyW3E+PjBdKSxMKWZvcihqPS0xPCgwfCh6PUg+Pih0PTB8YXJbJD4+Ml0pKSksbj0tMTwoMHwoTz1IPj50KSksUz0wOzspe2lmKGk9UytRPDxhQSxBKWxBPTc5O2Vsc2V7aWYoKDB8KGU9aT4+dCkpPD0tMSl7bEE9ODg7YnJlYWsgZX1pZigoMHwocj0wfGFyW0FBPj4yXSkpPD0oMHxlKSl7bEE9ODg7YnJlYWsgZX1pZighbil7bEE9OTE7YnJlYWsgZX1pZigoMHxPKT49KDB8YXJbZUE+PjJdKSl7bEE9OTE7YnJlYWsgZX1vQT0oMHxhcltQPj4yXSkrKDMqKCgwfGJyKHIsTykpK2V8MCl8MCl8MCwxMDI0JihjcltvQT4+MF18Y3Jbb0ErMT4+MF08PDgpfHwobEE9NzkpfWlmKDc5PT0oMHxsQSkpe2lmKCgobEE9MCl8KGk+Pj10KSk8PS0xKXtsQT05NTticmVhayBlfWlmKCgwfGkpPj0oMHxhcltBQT4+Ml0pKXtsQT05NTticmVhayBlfWlmKCFqKXtsQT05ODticmVhayBlfWlmKCgwfHopPj0oMHxhcltlQT4+Ml0pKXtsQT05ODticmVhayBlfX1pZigoMHxfKTw9KDB8KFM9UysxfDApKSlicmVhayByfWVsc2Ugbj0wO2Rve2lmKGk9KGo9bitRfDApPDxhQSxPPTB8YXJbJD4+Ml0sQSlsQT05MztlbHNle2lmKHI9SD4+TywoMHwoZT1pPj5PKSk8PS0xKXtsQT04ODticmVhayBlfWlmKCgwfChTPTB8YXJbQUE+PjJdKSk8PSgwfGUpKXtsQT04ODticmVhayBlfWlmKCgwfHIpPD0tMSl7bEE9OTE7YnJlYWsgZX1pZigoMHxyKT49KDB8YXJbZUE+PjJdKSl7bEE9OTE7YnJlYWsgZX1vQT0oMHxhcltQPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwxMDI0JihjcltvQT4+MF18Y3Jbb0ErMT4+MF08PDgpfHwobEE9OTMpfWRve2lmKDkzPT0oMHxsQSkpe2lmKHI9aT4+TyxpPUg+Pk8sKChsQT0wKXxyKTw9LTEpe2xBPTk1O2JyZWFrIGV9aWYoKDB8KGU9MHxhcltBQT4+Ml0pKTw9KDB8cikpe2xBPTk1O2JyZWFrIGV9aWYoKDB8aSk8PS0xKXtsQT05ODticmVhayBlfWlmKCgwfGkpPj0oMHxhcltlQT4+Ml0pKXtsQT05ODticmVhayBlfWlmKG9BPSgwfGFyW1A+PjJdKSsoMyooKDB8YnIoZSxpKSkrcnwwKXwwKXwwLDIwNDgmKGNyW29BPj4wXXxjcltvQSsxPj4wXTw8OCkpYnJlYWs7aWYoaT0wfGxyW28rKGordDw8MSk+PjFdLCgwfChlPTB8YXJbRCsoaT4+PnJBPDwyKT4+Ml0pKTw9MClicmVhaztvQT0oMHx0cltlKy0xKyhKKygyNCppQXwwKSs5KyhmPDwyKSk+PjBdKStpfDAsb3JbYysoait6PDwxKT4+MV09KDB8b0EpPDA/MDo2NTUzNSYoKDB8b0EpPCgwfE0pP29BOlQpfX13aGlsZSgwKTtuPW4rMXwwfXdoaWxlKCgwfG4pPCgwfF8pKX19d2hpbGUoMCk7aWYoKDB8Tik8PSgwfCh4PXgrMXwwKSkpYnJlYWsgQX04OD09KDB8bEEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6OTE9PSgwfGxBKT9zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOjk1PT0oMHxsQSk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTo5OD09KDB8bEEpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX1lbHNlIGlmKGkmJihMPTc8KDB8ckEpLDA8KDB8XykpKXtlPTA7ZG97aWYocj0wfGJyKFM9ZStZfDAsYSksUz0wfGJyKFMsbCksIUwpZm9yKGk9MDtuPTB8bHJbbysoKE89aStRfDApK3I8PDEpPj4xXSwwPCgwfCh0PTB8YXJbRCsobj4+PnJBPDwyKT4+Ml0pKSYmKGxBPSgwfHRyW3QrLTErKEorKDI0KmlBfDApKzkrKGY8PDIpKT4+MF0pK258MCxvcltjKyhPK1M8PDEpPj4xXT0oMHxsQSk8MD8wOjY1NTM1JigoMHxsQSk8KDB8TSk/bEE6VCkpLCgwfChpPWkrMXwwKSk8KDB8Xyk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfE4pKX19d2hpbGUoMCk7dXI9VX1lbHNlIHVyPVV9ZnVuY3Rpb24gTmEoQSxlLHIsaSxmLG4sdCxvLGEsYyxsKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wO3ZhciB1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wO2lmKHVyPShVPXVyKSsxNDR8MCxKPVUrOHwwLEY9KFY9VSkrMTM2fDAsUz0wfGFyWyhSPShBfD0wKSsxMDM1MnwwKT4+Ml0saUE9KDB8YnIoUyxyKSkrZXwwLGZBPTB8YXJbKE49QSsxMDM0MHwwKT4+Ml0sej1mPDwxLGo9KDB8Y3JbZkErKDI0KmlBfDApKzQ+PjBdKT4+PnomMylpZihUPShNPTE8PChQPTB8YXJbKChPPTA9PSgwfGYpKT9BKzU3NjB8MDpBKzU3Njh8MCk+PjJdKSktMXwwLEQ9MHxicihuLGUpLFE9MHxicih0LHIpLFc9MHxhclsoTz9BKzI0fDA6QSszMnwwKT4+Ml0sST0wfGFyWyhPP0ErMjh8MDpBKzM2fDApPj4yXSxpPUQ+PihlPTB8YXJbKEM9QSsxMDM0OHwwKT4+Ml0pLGU9UT4+ZSwtMTwoMHxpKSYoMHxpKTwoMHxTKXx8c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxlKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8ZSk+PSgwfGFyWyhHPUErMTAzNTZ8MCk+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxvQT1mQSsoMjQqKCgwfGJyKGUsUykpK2l8MCl8MCkrMnwwLEI9QSs1MnwwLG9BPTB8YXJbODAwKygwfGFyWygwfGFyWyh5PUErNDh8MCk+PjJdKSsobHJbb0E+PjFdPDwyKT4+Ml0pPj4yXSxFPTB8YXJbQSs1ODIwPj4yXSx1QT1PP2xBPTA6KGxBPSgwfGFyW0ErNTc4MD4+Ml0pLTF8MCwoMHxhcltBKzU3ODQ+PjJdKS0xfDApLHA9KHRBPTB8YXJbQSs1ODA0Pj4yXSktbEF8MCx0QT10QS11QXwwLFk9KDB8Vyk8KEQrbnwwKT9XLUR8MDpuLF89KDB8SSk8KFErdHwwKT9JLVF8MDp0LFg9MCE9KDB8dHJbZkErKDI0KmlBfDApKzIyPj4wXSksMj09KDB8aikpe3N3aXRjaCgoMHxjcltmQSsoMjQqaUF8MCkrNT4+MF0pPj4+eiYzKXtjYXNlIDA6SD14PTAsYUE9LTEsY0E9MTticmVhaztjYXNlIDE6SD0tKHg9MSksY0E9YUE9MDticmVhaztjYXNlIDI6YUE9SD0tKHg9MSksY0E9MTticmVhaztjYXNlIDM6SD0tKHg9MSksY0E9LShhQT0xKX1pZihhcltKPj4yXT1hQSxhcls0K0o+PjJdPWNBLGFyW1Y+PjJdPUgsYXJbVis0Pj4yXT14LFo9MHxicihILGEpLGc9MC14JmEsdHJbRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8Mik+PjBdLHRyWzErRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8MikrMT4+MF0sdHJbMitGPj4wXT0wLHRyWzMrRj4+MF09MHx0cltmQSsoMjQqaUF8MCkrOSsoZjw8MikrMj4+MF0sdHJbNCtGPj4wXT0wfHRyW2ZBKygyNCppQXwwKSs5KyhmPDwyKSszPj4wXSwoMHxfKTw9MCl1cj1VO2Vsc2V7dT0wPCgwfFkpLGI9QSs1NDgwfDAscz1BKzEwMzY4fDAsZD1BKzEwMzcyfDAsaz1BKzEwMzc2fDAsaD1BKzEwMzYwfDAsdz1ZKy0xfDAsdj1fKy0xfDAsbT1BKzU5Nzd8MCwkPUErMTAzMDh8MCxBQT0oMHxicihRPj50QSxFKSkrKEQ+PnApfDAsSz0wO0E6Zm9yKDs7KXtpZihyQT1vKygoMHxicihlQT1LK1F8MCxhKSkrRCl8MCxpQT1jKygoMHxicihlQSxsKSkrRCl8MCx1KXtmQT1lQTw8dUEsZj0wPT0oMHxLKSxuQT0oMHxLKT09KDB8dikscT0wO2Rve2lmKFgmJjAhPSgwfHRyW2I+PjBdKSl7aWYoaT1xK0Q8PGxBPj4oZT0wfGFyW3M+PjJdKSxlPWZBPj5lLCgwfGkpPD0tMSl7YkE9MjM7YnJlYWsgQX1pZigoMHwocj0wfGFyW2Q+PjJdKSk8PSgwfGkpKXtiQT0yMzticmVhayBBfWlmKCgwfGUpPD0tMSl7YkE9MjY7YnJlYWsgQX1pZigoMHxlKT49KDB8YXJbaz4+Ml0pKXtiQT0yNjticmVhayBBfUE9KDB8YXJbaD4+Ml0pKygzKigoMHxicihyLGUpKStpfDApfDApfDAsMTAyNCYoY3JbQT4+MF18Y3JbQSsxPj4wXTw8OCl8fChiQT0yOCl9ZWxzZSBiQT0yODtlOmRve2lmKDI4PT0oMHxiQSkpe2lmKGk9KEE9KEw9cStEfChiQT0wKSk8PGxBKT4+KGU9MHxhcltzPj4yXSksZT1mQT4+ZSwoMHxpKTw9LTEpe2JBPTMwO2JyZWFrIEF9aWYoKDB8KHI9MHxhcltkPj4yXSkpPD0oMHxpKSl7YkE9MzA7YnJlYWsgQX1pZigoMHxlKTw9LTEpe2JBPTMzO2JyZWFrIEF9aWYoKDB8ZSk+PSgwfGFyW2s+PjJdKSl7YkE9MzM7YnJlYWsgQX1pZihQPSgwfGFyW2g+PjJdKSsoMyooKDB8YnIocixlKSkraXwwKXwwKXwwLCEoMjA0OCYoY3JbUD4+MF18Y3JbUCsxPj4wXTw8OCkpKXtpZihuQXwoMHxxKT09KDB8dyl8ZnwwPT0oMHxxKSl7dD0wO2Rve2lmKHo9KDB8YXJbSisodDw8Mik+PjJdKStMfDAsISgoMHwoaj0oMHxhcltWKyh0PDwyKT4+Ml0pK2VBfDApKTwoMHxJKSYoMHx6KTwoMHxXKSYtMTwoanx6fDApKSlicmVhayBlO2lmKGU9ajw8dUE+PihuPTB8YXJbQz4+Ml0pLCgwfChpPXo8PGxBPj5uKSk8PS0xKXtiQT0zOTticmVhayBBfWlmKCgwfChIPTB8YXJbUj4+Ml0pKTw9KDB8aSkpe2JBPTM5O2JyZWFrIEF9aWYoKDB8ZSk8PS0xKXtiQT00MjticmVhayBBfWlmKCgwfCh4PTB8YXJbRz4+Ml0pKTw9KDB8ZSkpe2JBPTQyO2JyZWFrIEF9aWYoaT0oUD0wfGFyW04+PjJdKSsoMjQqKCgwfGJyKEgsZSkpK2l8MCl8MCkrMnwwLGk9MHxscltpPj4xXSxPPVM9MHxhclt5Pj4yXSxpPj4+MD49KDB8YXJbQj4+Ml0pLVM+PjI+Pj4wKXtiQT01OTticmVhayBBfWlmKCEoZT0wfGFyW08rKGk8PDIpPj4yXSkpe2JBPTU5O2JyZWFrIEF9aWYoKDB8KHI9MHxhcltlKzgwMD4+Ml0pKTwoMHxvQSkpe2lmKGk9ZkE+Pm4sISgtMTwoMHwoUz1BPj5uKSkmKDB8Uyk8KDB8SCkpKXtiQT00NzticmVhayBBfWlmKCEoLTE8KDB8aSkmKDB8aSk8KDB8eCkpKXtiQT00OTticmVhayBBfWlmKFA9UCsoMjQqKCgwfGJyKEgsaSkpK1N8MCl8MCkrMnwwLCEoMHx0cls3NjQrKDB8YXJbTysobHJbUD4+MV08PDIpPj4yXSk+PjBdKSlicmVhayBlfWlmKCgwfG9BKTwoMHxyKSYmMD09KDB8dHJbZSs3NjQ+PjBdKSlicmVhayBlO2lmKDA9PSgwfHRyW20+PjBdKSYmKHg9KDB8YnIoaj4+dEEsRSkpKyh6Pj5wKXwwLFA9MHxhclskPj4yXSwoMHxhcltQKyh4PDwyKT4+Ml0pIT0oMHxhcltQKyhBQTw8Mik+PjJdKSkpYnJlYWsgZTt0PXQrMXwwfXdoaWxlKCgwfHQpPDIpfVA9KEE9MHxjcltyQStxPj4wXSktKDB8Y3JbckErKHErWithQSk+PjBdKXwwLEw9QS0oMHxjcltyQSsocStnK2NBKT4+MF0pfDAsQT0oMHx0clsoKDB8UCk8MD8xOjB8UD8zOjIpKygoMHxMKTwwPy0xOjAhPSgwfEwpJjEpK0Y+PjBdKStBfDAsdHJbaUErcT4+MF09KDB8QSk8MD8wOjI1NSYoKDB8QSk8KDB8TSk/QTpUKX19fXdoaWxlKDApO3E9cSsxfDB9d2hpbGUoKDB8cSk8KDB8WSkpfWlmKCgwfF8pPD0oMHwoSz1LKzF8MCkpKXtiQT01OTticmVha319aWYoMjM9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjY9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzA9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzM9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoMzk9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDI9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNDc9PSgwfGJBKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoNDk9PSgwfGJBKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTk9PSgwfGJBKSlyZXR1cm4gdm9pZCh1cj1VKX19ZWxzZXtmb3IoaT0wfGNyW2ZBKygyNCppQXwwKSs2K2Y+PjBdLHI9KGU9SikrMTI4fDA7KDB8KGU9ZSs0fChhcltlPj4yXT0wKSkpPCgwfHIpOyk7YXJbSisoKDMxJmkpPDwyKT4+Ml09MSxhcltKKygoaSsxJjMxKTw8Mik+PjJdPTIsYXJbSisoKGkrMiYzMSk8PDIpPj4yXT0zLGFyW0orKChpKzMmMzEpPDwyKT4+Ml09NCxyQT1QKy01fDAsaT0wPCgwfF8pO0E6ZG97aWYoWCl7aWYoaSl7Sz0wPCgwfFkpLHE9QSs1NDgwfDAsJD1BKzEwMzY4fDAsQUE9QSsxMDM3MnwwLGVBPUErMTAzNzZ8MCxMPUErMTAzNjB8MCxBPTc8KDB8ckEpLFA9MDtlOmZvcig7Oyl7cjpkb3tpZihLKXtpZih4PSh6PVArUXwwKTw8dUEsdD0wfGJyKHosYSksej0wfGJyKHosbCksQSlmb3Ioej0wPT0oMHx0cltxPj4wXSksSD0tMTwoMHwoaj14Pj4odD0wfGFyWyQ+PjJdKSkpLG49LTE8KDB8KE89eD4+dCkpLFM9MDs7KXtpZihpPVMrRDw8bEEseiliQT03OTtlbHNle2lmKCgwfChlPWk+PnQpKTw9LTEpe2JBPTg4O2JyZWFrIGV9aWYoKDB8KHI9MHxhcltBQT4+Ml0pKTw9KDB8ZSkpe2JBPTg4O2JyZWFrIGV9aWYoIW4pe2JBPTkxO2JyZWFrIGV9aWYoKDB8Tyk+PSgwfGFyW2VBPj4yXSkpe2JBPTkxO2JyZWFrIGV9Y0E9KDB8YXJbTD4+Ml0pKygzKigoMHxicihyLE8pKStlfDApfDApfDAsMTAyNCYoY3JbY0E+PjBdfGNyW2NBKzE+PjBdPDw4KXx8KGJBPTc5KX1pZig3OT09KDB8YkEpKXtpZigoKGJBPTApfChpPj49dCkpPD0tMSl7YkE9OTU7YnJlYWsgZX1pZigoMHxpKT49KDB8YXJbQUE+PjJdKSl7YkE9OTU7YnJlYWsgZX1pZighSCl7YkE9OTg7YnJlYWsgZX1pZigoMHxqKT49KDB8YXJbZUE+PjJdKSl7YkE9OTg7YnJlYWsgZX19aWYoKDB8WSk8PSgwfChTPVMrMXwwKSkpYnJlYWsgcn1lbHNlIG49MDtkb3tpZihpPShqPW4rRHwwKTw8bEEsTz0wfGFyWyQ+PjJdLDB8dHJbcT4+MF0pe2lmKHI9eD4+TywoMHwoZT1pPj5PKSk8PS0xKXtiQT04ODticmVhayBlfWlmKCgwfChTPTB8YXJbQUE+PjJdKSk8PSgwfGUpKXtiQT04ODticmVhayBlfWlmKCgwfHIpPD0tMSl7YkE9OTE7YnJlYWsgZX1pZigoMHxyKT49KDB8YXJbZUE+PjJdKSl7YkE9OTE7YnJlYWsgZX1jQT0oMHxhcltMPj4yXSkrKDMqKCgwfGJyKFMscikpK2V8MCl8MCl8MCwxMDI0JihjcltjQT4+MF18Y3JbY0ErMT4+MF08PDgpfHwoYkE9OTMpfWVsc2UgYkE9OTM7ZG97aWYoOTM9PSgwfGJBKSl7aWYocj1pPj5PLGk9eD4+TywoKGJBPTApfHIpPD0tMSl7YkE9OTU7YnJlYWsgZX1pZigoMHwoZT0wfGFyW0FBPj4yXSkpPD0oMHxyKSl7YkE9OTU7YnJlYWsgZX1pZigoMHxpKTw9LTEpe2JBPTk4O2JyZWFrIGV9aWYoKDB8aSk+PSgwfGFyW2VBPj4yXSkpe2JBPTk4O2JyZWFrIGV9aWYoY0E9KDB8YXJbTD4+Ml0pKygzKigoMHxicihlLGkpKStyfDApfDApfDAsMjA0OCYoY3JbY0E+PjBdfGNyW2NBKzE+PjBdPDw4KSlicmVhaztpZihpPTB8Y3Jbbysoait0KT4+MF0sKDB8KGU9MHxhcltKKyhpPj4+ckE8PDIpPj4yXSkpPD0wKWJyZWFrO2NBPSgwfHRyW2UrLTErKGZBKygyNCppQXwwKSs5KyhmPDwyKSk+PjBdKStpfDAsdHJbYysoait6KT4+MF09KDB8Y0EpPDA/MDoyNTUmKCgwfGNBKTwoMHxNKT9jQTpUKX19d2hpbGUoMCk7bj1uKzF8MH13aGlsZSgoMHxuKTwoMHxZKSl9fXdoaWxlKDApO2lmKCgwfF8pPD0oMHwoUD1QKzF8MCkpKWJyZWFrIEF9ODg9PSgwfGJBKT9zcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpOjkxPT0oMHxiQSk/c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTo5NT09KDB8YkEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6OTg9PSgwfGJBKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX19ZWxzZSBpZihpJiYoTD03PCgwfHJBKSwwPCgwfFkpKSl7ZT0wO2Rve2lmKHI9MHxicihTPWUrUXwwLGEpLFM9MHxicihTLGwpLCFMKWZvcihpPTA7bj0wfGNyW28rKChPPWkrRHwwKStyKT4+MF0sMDwoMHwodD0wfGFyW0orKG4+Pj5yQTw8Mik+PjJdKSkmJihiQT0oMHx0clt0Ky0xKyhmQSsoMjQqaUF8MCkrOSsoZjw8MikpPj4wXSkrbnwwLHRyW2MrKE8rUyk+PjBdPSgwfGJBKTwwPzA6MjU1JigoMHxiQSk8KDB8TSk/YkE6VCkpLCgwfChpPWkrMXwwKSk8KDB8WSk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfF8pKX19d2hpbGUoMCk7dXI9VX1lbHNlIHVyPVV9ZnVuY3Rpb24gX2EoQSxlKXtBfD0wO3ZhciByPTA7c3dpdGNoKDB8KGV8PTApKXtjYXNlIDA6ZT03Nzk2LHI9NDticmVhaztjYXNlIDE6ZT03ODI0LHI9NDticmVhaztjYXNlIDI6ZT03NzY4LHI9NDticmVhaztkZWZhdWx0OmU9MH1yZXR1cm4gND09KDB8cikmJihlPTB8YXJbZSsoQTw8Mik+PjJdKSwwfGV9ZnVuY3Rpb24gWWEoKXt2YXIgQT0wLGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7dD0xO2Rve2ZvcihmPTB8YXJbNzgyNCsodDw8Mik+PjJdLG89MTw8dCxlPUE9MDs7KXtmb3Iobj0yNTUmQSxyPTAsaT1lO3RyW2YrKGk8PDEpPj4wXT1yLHRyW2YrKGk8PDEpKzE+PjBdPW4sKDB8KHI9cisxfDApKSE9KDB8byk7KWk9aSsxfDA7aWYoKDB8KEE9QSsxfDApKT09KDB8bykpYnJlYWs7ZT1lK298MH1mb3IoZj0wfGFyWzc3NjgrKHQ8PDIpPj4yXSxlPUE9MDs7KXtmb3Iobj0yNTUmQSxyPTAsaT1lO3RyW2YrKGk8PDEpPj4wXT1uLCgwfChyPSh0cltmKyhpPDwxKSsxPj4wXT1yKSsxfDApKSE9KDB8byk7KWk9aSsxfDA7aWYoKDB8KEE9QSsxfDApKT09KDB8bykpYnJlYWs7ZT1lK298MH1mPTB8YXJbNzc5NisodDw8Mik+PjJdLG49bzw8dCxBPWU9MDtkb3tpZigtMTwoMHxlKSlmb3IoaT0wLHI9ZTsoMHxyKTwoMHxvKSYoMHxpKTwoMHxvKSYmKHRyW2YrKEE8PDEpPj4wXT1pLHRyW2YrKEE8PDEpKzE+PjBdPXIsQT1BKzF8MCksZT1pKzF8MCwwPCgwfHIpOylpPWUscj1yKy0xfDA7ZWxzZSBlPTB9d2hpbGUoKDB8QSk8KDB8bikpO3Q9dCsxfDB9d2hpbGUoNiE9KDB8dCkpO2E9Mjtkb3tjPTE8PGEsbD0oMTw8KHM9YSstMnwwKTw8cyktMXwwLHU9Nzc2OCsoczw8Mil8MCxiPTc3OTYrKHM8PDIpfDAscz03ODI0KyhzPDwyKXwwLG89MDtkb3tkPTB8YXJbNzg1MisoMjQqb3wwKSsoYTw8Mik+PjJdLG49KGg9Mj09KDB8bykpPzY2NzA3OjAsdD0wO2Rve3N3aXRjaChrPXQ8PGEsMHxvKXtjYXNlIDA6aT0wfGFyW2I+PjJdLHI9MDtkb3tmb3IoQT0xNixlPWw7QT0oZj0wPT0oMHxBKSk/MTU6QSstMXwwLCgoKDB8Y3JbaSsoKGU9KGY8PDMxPj4zMSkrZXwwKTw8MSk+PjBdKTw8MikrKDB8Y3JbNjM5NzkrKEE8PDEpPj4wXSl8MCkhPSgwfHIpfHwoKCgwfGNyW2krKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbNjM5NzkrKEE8PDEpKzE+PjBdKXwwKSE9KDB8dCk7KTt0cltkKygoZj1yK2t8MCk8PDEpPj4wXT1lLHRyW2QrKGY8PDEpKzE+PjBdPUEscj1yKzF8MH13aGlsZSgoMHxyKTwoMHxjKSk7YnJlYWs7Y2FzZSAxOmk9MHxhcltzPj4yXSxyPTA7ZG97Zm9yKEE9MTYsZT1sO0E9KGY9MD09KDB8QSkpPzE1OkErLTF8MCwoKCgwfGNyW2krKChlPShmPDwzMT4+MzEpK2V8MCk8PDEpPj4wXSk8PDIpKygwfGNyWzYxMjUxKyhBPDwxKT4+MF0pfDApIT0oMHxyKXx8KCgoMHxjcltpKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyWzYxMjUxKyhBPDwxKSsxPj4wXSl8MCkhPSgwfHQpOyk7dHJbZCsoKGY9citrfDApPDwxKT4+MF09ZSx0cltkKyhmPDwxKSsxPj4wXT1BLHI9cisxfDB9d2hpbGUoKDB8cik8KDB8YykpO2JyZWFrO2RlZmF1bHQ6aT0wO2Rve2ZvcihmPWkra3wwLGU9aD8wfGFyW3U+PjJdOjAsQT0xNixyPWw7QT0odz0wPT0oMHxBKSk/MTU6QSstMXwwLCgoKDB8Y3JbZSsoKHI9KHc8PDMxPj4zMSkrcnwwKTw8MSk+PjBdKTw8MikrKDB8Y3JbbisoQTw8MSk+PjBdKXwwKSE9KDB8aSl8fCgoKDB8Y3JbZSsocjw8MSkrMT4+MF0pPDwyKSsoMHxjcltuKyhBPDwxKSsxPj4wXSl8MCkhPSgwfHQpOyk7dHJbZCsoZjw8MSk+PjBdPXIsdHJbZCsoZjw8MSkrMT4+MF09QSxpPWkrMXwwfXdoaWxlKCgwfGkpPCgwfGMpKX10PXQrMXwwfXdoaWxlKCgwfHQpPCgwfGMpKTtvPW8rMXwwfXdoaWxlKDMhPSgwfG8pKTthPWErMXwwfXdoaWxlKDYhPSgwfGEpKX1mdW5jdGlvbiBRYShBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wO2lmKHVyPShWPXVyKSsyMDh8MCxIPVYrMjR8MCxHPVYrOHwwLHQ9KEM9VikrNDB8MCx3PVYrMTkyfDAsMTMyIT0oMHxhclsoQXw9MCk+PjJdKSlyZXR1cm4gdXI9ViwoSD0wKXxIO2lmKCEoMHx0cls1MTIrKDB8YXJbZSsxMDMzMj4+Ml0pPj4wXSkpcmV0dXJuIHVyPVYsKEg9MCl8SDtpZighKDB8dHJbZSsxMDA+PjBdKSlyZXR1cm4gdXI9ViwoSD0wKXxIO3I9MD09KDB8YXJbZSsxMjQwPj4yXSk/MTozLGk9ZSszMnwwLGY9ZSsyNHwwLG49ZSszNnwwLG89ZSsyOHwwLGE9ZSs0MHwwLGM9ZSs0NHwwLGw9QSs4fDAsdT1lKzU3NjB8MCxiPWUrNTc2OHwwLHM9MSt3fDAsZD0yK3d8MCxrPTMrd3wwLGg9NCt3fDAsdj01K3d8MCxtPTYrd3wwLGc9Nyt3fDAsWj04K3d8MCxwPTkrd3wwLHk9MTArd3wwLEI9MTErd3wwLEU9MTIrd3wwLFg9MTMrd3wwLFc9MTQrd3wwLEk9MTUrd3wwLGo9MDtBOmZvcig7Oyl7c3dpdGNoKFU9MHxhclsoKFI9MD09KDB8aikpP2Y6aSk+PjJdLE89MHxhclsoUj9vOm4pPj4yXSxTPTB8YXJbZSs0KyhqPDwyKT4+Ml0sVD0wfGFyWyhSP2E6Yyk+PjJdLDB8YXJbbD4+Ml0pe2Nhc2UgMDpGPTB8YXJbKFI/dTpiKT4+Ml0sb2ModCk7ZTpkb3tpZigwPCgwfE8pKXtpZihEPVU8PDEsSj0oMHxVKTwwPy0xOkQsKDB8Rik8PTgpZm9yKEY9MDs7KWlmKGFjKHQsUysoMHxicihGLFQpKXwwLFUpLCgwfE8pPD0oMHwoRj1GKzF8MCkpKXtGPTA7YnJlYWsgZX1pZigwPCgwfFUpKUY9UT0wO2Vsc2UgZm9yKEY9Uj0wOzspaWYoYWModCxOPUZ8fChGPTB8d3UoSikpLEQpLCgwfE8pPD0oMHwoUj1SKzF8MCkpKWJyZWFrIGU7ZG97Zm9yKE49Rnx8KEY9MHx3dShKKSksXz0wfGJyKFEsVCksWT1GLFI9MDt4PVMrKFIrXzw8MSl8MCx0cltOKyhNPVI8PDEpPj4wXT1vclt4Pj4xXSx0cltZKygxfE0pPj4wXT0oMHxsclt4Pj4xXSk+Pj44LCgwfChSPVIrMXwwKSkhPSgwfFUpOylOPVk7YWModCxZLEQpLFE9USsxfDB9d2hpbGUoKDB8USk8KDB8TykpfWVsc2UgRj0wfXdoaWxlKDApO2lmKGxjKHcsdCksMHxGJiZtdShGKSwoMHx0clt3Pj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltzPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzE+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW2Q+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrMj4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbaz4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSszPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltoPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzQ+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW3Y+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrNT4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbbT4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSs2Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltnPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzc+PjBdKSl7ej0yMjticmVhayBBfWlmKCgwfHRyW1o+PjBdKSE9KDB8dHJbQSsxMisoajw8NCkrOD4+MF0pKXt6PTIyO2JyZWFrIEF9aWYoKDB8dHJbcD4+MF0pIT0oMHx0cltBKzEyKyhqPDw0KSs5Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0clt5Pj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEwPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltCPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzExPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltFPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEyPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltYPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzEzPj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltXPj4wXSkhPSgwfHRyW0ErMTIrKGo8PDQpKzE0Pj4wXSkpe3o9MjI7YnJlYWsgQX1pZigoMHx0cltJPj4wXSk9PSgwfHRyW0ErMTIrKGo8PDQpKzE1Pj4wXSkpYnJlYWs7ej0yMjticmVhayBBO2Nhc2UgMTplOmRve2lmKDA8KDB8Tykpe2lmKEo9VTw8MSxNPSgwfFUpPDA/LTE6SixGPTA8KDB8VSksKDB8YXJbKFI/dTpiKT4+Ml0pPD04KXtpZighRil7Rj03NDM5LHo9Mzk7YnJlYWt9Zm9yKFI9MCxGPTc0Mzk7Oyl7Zm9yKF89UysoMHxicihSLFQpKXwwLE49MDt6PTY1NTM1JkYseD1jcltfK04+PjBdXno+Pj44LEY9KCh4Xj14Pj4+NCl8ejw8OCleeDw8NV54PDwxMiwoMHwoTj1OKzF8MCkpIT0oMHxVKTspO2lmKCgwfChSPVIrMXwwKSk9PSgwfE8pKXt6PTM5O2JyZWFrIGV9fX1pZihGKXtGPTc0MzksUj1EPTA7ZG97Zm9yKF89Unx8KFI9MHx3dShNKSksWT0wfGJyKEQsVCksUT1SLE49MDs7KXtpZihQPVMrKE4rWTw8MSl8MCx0cltfKyh4PU48PDEpPj4wXT1vcltQPj4xXSx0cltRKygxfHgpPj4wXT0oMHxscltQPj4xXSk+Pj44LCgwfChOPU4rMXwwKSk9PSgwfFUpKXtOPTA7YnJlYWt9Xz1RfWZvcig7eD02NTUzNSZGLFA9Y3JbUStOPj4wXV54Pj4+OCxGPSgoUF49UD4+PjQpfHg8PDgpXlA8PDVeUDw8MTIsKDB8KE49TisxfDApKTwoMHxKKTspO0Q9RCsxfDB9d2hpbGUoKDB8RCkhPSgwfE8pKX1lbHNle2ZvcihSPUY9MDtSPVJ8fDB8d3UoTSksKDB8KEY9RisxfDApKSE9KDB8Tyk7KTtGPTc0Mzl9RiY9NjU1MzUsUiYmbXUoUil9ZWxzZSBGPTc0Mzksej0zOX13aGlsZSgwKTtpZigzOT09KDB8eikmJih6PTAsRiY9NjU1MzUpLCgwfEYpPT0oMHwoUj0wfGxyW0ErNjArKGo8PDEpPj4xXSkpKWJyZWFrO3o9NDM7YnJlYWsgQTtjYXNlIDI6aWYoRj0wPCgwfFUpJjA8KDB8TyksKDB8YXJbKFI/dTpiKT4+Ml0pPDkpaWYoRil7Rj1SPTA7ZG97Zm9yKF89Uj4+PjheUixZPTB8YnIoUixUKSxOPTA7Rj0oMjU1JihfXk5eTj4+PjgpXmNyW1MrKE4rWSk+PjBdKStGfDAsKDB8KE49TisxfDApKSE9KDB8VSk7KTtSPVIrMXwwfXdoaWxlKCgwfFIpIT0oMHxPKSl9ZWxzZSBGPTA7ZWxzZSBpZihGKXtGPU49MDtkb3tmb3IoXz1OPj4+OF5OLFk9MHxicihOLFQpLFI9MDtGPShQPTI1NSYoX15SXlI+Pj44KSkrRisoUF5jcltTKyhSK1kpPj4wXSl8MCwoMHwoUj1SKzF8MCkpIT0oMHxVKTspO049TisxfDB9d2hpbGUoKDB8TikhPSgwfE8pKX1lbHNlIEY9MDtpZigoMHxGKT09KDB8KFI9MHxhcltBKzY4KyhqPDwyKT4+Ml0pKSlicmVhazt6PTU0O2JyZWFrIEF9aWYoKDB8cik8PSgwfChqPWorMXwwKSkpe0Y9MCx6PTcxO2JyZWFrfX1yZXR1cm4gMjI9PSgwfHopPyhQPTB8YXJbMjY2OV0sYXJbQz4+Ml09YXJbZSs5Mj4+Ml0sSWkoUCwzOTA4NCxDKSx1cj1WLDB8KFA9NSkpOjQzPT0oMHx6KT8oUD0wfGFyWzI2NjldLHg9MHxhcltlKzkyPj4yXSxhcltHPj4yXT1SLGFyWzQrRz4+Ml09Rixhcls4K0c+PjJdPXgsSWkoUCwzOTEyNyxHKSx1cj1WLDB8KFA9NSkpOjU0PT0oMHx6KT8oUD0wfGFyWzI2NjldLHg9MHxhcltlKzkyPj4yXSxhcltIPj4yXT1SLGFyW0grND4+Ml09RixhcltIKzg+PjJdPXgsSWkoUCwzOTEyNyxIKSx1cj1WLDB8KFA9NSkpOjcxPT0oMHx6KT8odXI9ViwwfEYpOjB9ZnVuY3Rpb24gRGEoQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoZT0obz0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0pKzU5MzJ8MCxuPTB8YXJbKHI9QSsxODYwMHwwKT4+Ml0sISgwfHRyW24rMTI+PjBdKSlyZXR1cm4gMzw9KGY9MHxhcltuKzc5Nj4+Ml0pPj4+MCYmc3IoMzkyMTEsMzkyNDIsMTUwOCwzOTI1MSksaHQoQSsxODU4MHwwLGYsMHxhcltuKzc5Mj4+Ml0pLHRyWyhBPUErMTg1ODh8MCk+PjBdPTAsdHJbQSsxPj4wXT0wLHRyW0ErMj4+MF09MCwodHJbQSszPj4wXT0wKXwoQT0xKTtpZih0PTB8YXJbbisxNj4+Ml0sZj0wfGxyWygwfGFyW28rMTAzNDA+PjJdKSsoMjQqKDB8YXJbKDB8YXJbbysxMDI4ND4+Ml0pKygoMHxhclsoMHxhcltvKzEwMjcyPj4yXSkrKHQ8PDIpPj4yXSktMTw8Mik+PjJdKXwwKSsyPj4xXSxuPTB8YXJbbys0OD4+Ml0sZj4+PjA+PSgwfGFyW28rNTI+PjJdKS1uPj4yPj4+MClyZXR1cm4oQT0wKXxBO2lmKGk9MHxhcltuKyhmPDwyKT4+Ml0sMHxGYShlLCgwfHQpJSgwfChvPTB8YXJbbys1ODIwPj4yXSkpfDAsKDB8dCkvKDB8byl8MCkpcmV0dXJuIGY9MHxhcltyPj4yXSwzPD0obj0wfGFyW2YrNzk2Pj4yXSk+Pj4wJiZzcigzOTIxMSwzOTI0MiwxNTA4LDM5MjUxKSxodChBKzE4NTgwfDAsbiwwfGFyW2YrNzkyPj4yXSksdHJbKEE9QSsxODU4OHwwKT4+MF09MCx0cltBKzE+PjBdPTAsdHJbQSsyPj4wXT0wLCh0cltBKzM+PjBdPTApfChBPTEpO2lmKHQ9MHxhcltBKzE4NjA0Pj4yXSxuPTB8YXJbQSsxODYwOD4+Ml0sbz0wfGFyW3QrMTA2MzI+PjJdLCEoMTwodD0oMHxhclt0KzEwNjM2Pj4yXSktbz4+Mik+Pj4wKSlyZXR1cm4oQT0wKXxBO2ZvcihmPTE7KDB8YXJbbysoZjw8Mik+PjJdKSE9KDB8bik7KWlmKHQ+Pj4wPD0oZj1mKzF8MCk+Pj4wKXtmPTAsYT0xNjticmVha31yZXR1cm4gMTY9PSgwfGEpPzB8ZjooZj0wfGFyW28rKGYrLTE8PDIpPj4yXSk/KE1uKGYrNDR8MCwwfGFyW2YrMTI0Pj4yXSksMHx0clsxMzQwK2k+PjBdPyhndChBKzE4NTgwfDAsYT0xMzMyK2l8MCksdnQoYSksMHwoQT0xKSk6KEE9MCl8QSk6KEE9MCl8QX1mdW5jdGlvbiBKYShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MDttPTB8YXJbKEM9KEF8PTApKzE4NTk2fDApPj4yXSxoPTB8YXJbbSs1ODIwPj4yXSx2PTB8YXJbKHc9QSsxMnwwKT4+Ml0saz1tKzU5NjV8MDtkb3tpZighciYmMDwoMHx2KSYwIT0oMHx0cltrPj4wXSkmJjA9PSgwfGFyW0ErOD4+Ml0pKXtpZihyPXYrLTF8MCwxPCgwfGgpKXtpZihJPTB8YXJbKHY9QSsxODYwNHwwKT4+Ml0scj4+PjA8KDB8YXJbSSsxMDY4MD4+Ml0pLSgwfGFyW0krMTA2NzY+PjJdKT4+Mz4+PjApe2JhKG0sMHxhcltBKzE4NjEyPj4yXSwxLHIsMSksZ3QoQSsxODU4MHwwLCgwfGFyWzEwNjc2KygwfGFyW3Y+PjJdKT4+Ml0pKygoMHxhclt3Pj4yXSktMTw8Myl8MCksdnQoKDB8YXJbMTA2NzYrKDB8YXJbdj4+Ml0pPj4yXSkrKCgwfGFyW3c+PjJdKS0xPDwzKXwwKTticmVha31yZXR1cm4gMHwoQz0yKX1pZihiYShtLDB8YXJbQSsxODYxMj4+Ml0sMCxyLDEpLHI9MHxhcltBKzE4NjAwPj4yXSwodj0wfGFyW3IrNzk2Pj4yXSk+Pj4wPDMpe2h0KEErMTg1ODB8MCx2LDB8YXJbcis3OTI+PjJdKSx0clsoST1BKzE4NTg4fDApPj4wXT0wLHRyW0krMT4+MF09MCx0cltJKzI+PjBdPTAsdHJbSSszPj4wXT0wO2JyZWFrfXNyKDM5MjExLDM5MjQyLDE1MDgsMzkyNTEpfX13aGlsZSgwKTtmb3IoZj1BKzh8MCxuPWgtMXwwLHQ9QSsxODYxMnwwLG89QSsxODU4MHwwLGE9QSsxODU4NHwwLGM9bSs1ODI4fDAsbD1BKzE4NjA0fDAsST1BKzE4NTU2fDAsdT1tKzU5MzV8MCxiPUErMTg2MDB8MCxzPUErNHwwLGQ9bSs1OTY2fDAsaT1tKzEwMjk2fDAsWD0wfGFyW3c+PjJdLHA9MHxhcltmPj4yXSxXPTB8YXJbQz4+Ml07Oyl7aWYoKHY9KDB8YnIoWCxoKSkrcHwwKT4+PjA+PSgwfGFyW1crMTAyNzY+PjJdKS0oMHxhcltXKzEwMjcyPj4yXSk+PjI+Pj4wKXtyPTIsdj0zNTticmVha31pZigoMHxwKT49KDB8YXJbVys1ODIwPj4yXSkpe3I9Mix2PTM1O2JyZWFrfWlmKCgwfFgpPj0oMHxhcltXKzU4Mjg+PjJdKSl7cj0yLHY9MzU7YnJlYWt9aWYoKDB8cCk8KDB8bikmMDwoMHxYKSZlJiZiYShXLDB8YXJbdD4+Ml0scCsxfDAsWCstMXwwLDEpLCEoMHxhclthPj4yXSkpe3I9Mix2PTM1O2JyZWFrfWlmKE1hKEEpLDE9PSgwfHApJjAhPSgwfHRyW2s+PjBdKSYmKDB8WCk8KCgwfGFyW2M+PjJdKS0xfDApKXtpZihXPTB8YXJbbD4+Ml0scj0wfGFyW1crMTA2NzY+PjJdLCgwfGFyW1crMTA2ODA+PjJdKS1yPj4zPj4+MDw9WD4+PjApe3I9Mix2PTM1O2JyZWFrfWd0KHIrKFg8PDMpfDAsbyksbXQoKDB8YXJbMTA2NzYrKDB8YXJbbD4+Ml0pPj4yXSkrKFg8PDMpfDApfWlmKChCPTAhPSgwfCh5PTB8YXQoSSkpKSkmJjB8dHJbdT4+MF0mJihndCgxMzMyKygwfGFyW2I+PjJdKXwwLG8pLG10KDEzMzIrKDB8YXJbYj4+Ml0pfDApLHRyWzEzNDArKDB8YXJbYj4+Ml0pPj4wXT0xKSxUbigoMHxhclsxMDUyNCsoMHxhcltDPj4yXSk+PjJdKSsoODAqdnwwKXwwLDEpLEU9MHxhclt3Pj4yXSxaPShnPTB8YXJbcz4+Ml0pKzF8MCxhcltzPj4yXT1aLFc9MHxhcltDPj4yXSxyPTB8YXJbVys1ODM2Pj4yXSx2PTB8YXJbVys1ODIwPj4yXSwoMHxaKTwoMHxyKT9yPShtPTApfGFyWygwfGFyW1crMTAyODQ+PjJdKSsoWjw8Mik+PjJdOm09MSxYPSgwfHIpLygwfHYpfDAscD0oMHxyKSUoMHx2KXwwLGFyW0E+PjJdPXIsYXJbZj4+Ml09cCxhclt3Pj4yXT1YLDA9PSgwfHkpJm0pe3Y9Mjc7YnJlYWt9aWYoQil7cj0wLHY9MzU7YnJlYWt9aWYoKHI9MHx0cltkPj4wXT8ocj0wfGFyW2k+PjJdLCgwfGFyW3IrKFo8PDIpPj4yXSkhPSgwfGFyW3IrKGc8PDIpPj4yXSkpOjApfCgwfEUpIT0oMHxYKSYwIT0oMHx0cltrPj4wXSkpe3Y9MzI7YnJlYWt9fXJldHVybiAyNz09KDB8dik/KGVyKDQrKDB8YXJbQSsxODU5Mj4+Ml0pfDAsMTAwNCwwKSx0clsxMDUxNisoMHxhcltDPj4yXSk+PjBdPTMsMHwoQz0yKSk6MzI9PSgwfHYpPzB8YXQoSSk/KHR0KEkpLDB8KEM9MSkpOihlcig0KygwfGFyW0ErMTg1OTI+PjJdKXwwLDEwMTcsMCksdHJbMTA1MTYrKDB8YXJbQz4+Ml0pPj4wXT0zLDB8KEM9MikpOjM1PT0oMHx2KT8wfHI6MH1mdW5jdGlvbiBNYShBKXt2YXIgZSxyLGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTA7bj0wfGFyWyhBfD0wKSsxODYwMD4+Ml0sYj0wfGFyW0ErMTg1OTY+PjJdLGE9KDB8KGM9MHxhcltBPj4yXSkpJSgwfChzPTB8YXJbYis1ODIwPj4yXSkpfDAscz0oMHxjKS8oMHxzKXwwLHI9YTw8KGU9MHxhclsoYz1iKzU4MDR8MCk+PjJdKSxpPXM8PGUsZj0wfGFyW2IrMTAzNTI+PjJdLGw9KDB8YnIoZixzKSkrYXwwLHQ9MHxhcltiKzEwMzQwPj4yXSxvclt0KygyNCpsfDApPj4xXT1hcls4MDArbj4+Ml0sbD02NTUzNSZhcltuPj4yXSxvPXI+Pih1PTB8YXJbYisxMDM0OD4+Ml0pLHU9aT4+dSwtMTwoMHxvKSYoMHxvKTwoMHxmKXx8c3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KSwoMHx1KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSksKDB8dSk+PSgwfGFyW2IrMTAzNTY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KSxiPXQrKDI0KigoMHxicihmLHUpKStvfDApfDApKzJ8MCxvcltiPj4xXT1sLDAhPSgwfHRyWzMyNStuPj4wXSl8fDAhPSgwfHRyWzMyNituPj4wXSk/KGZ1bmN0aW9uKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wO3VyPShuPXVyKSszMnwwLGk9bixhPTB8YXJbMTg2MDArKEF8PTApPj4yXSxmPTB8YXJbQSsxODU5Nj4+Ml0sbz0odD1pKSsxN3wwO2Zvcig7dHJbdD4+MF09MCx0PXQrMXwwLCgwfHQpPCgwfG8pOyk7dD0wPCgwfGUpJiYoQz0wfGJyKDB8YXJbNTgyMCtmPj4yXSxyKSxJPTB8YXJbMTAzMDgrZj4+Ml0sKDB8YXJbQT4+Ml0pPigwfGFyW2ErODAwPj4yXSkmJigwfGFyW0krKEMrZTw8Mik+PjJdKT09KDB8YXJbSSsoZSstMStDPDwyKT4+Ml0pKT8yNTUmKDB8b3QoQSsxODU1NnwwLDB8YXJbQSsxODU4MD4+Ml0pKTowO289MDwoMHxyKSYoST10PDwyND4+MjQ9PTApJiYoRT0wfGFyWzU4MjArZj4+Ml0sVz0oMHxicihFLHIpKStlfDAsWD0wfGFyWzEwMzA4K2Y+PjJdLEM9WCsoKDB8YnIoRSxyKy0xfDApKStlPDwyKXwwLCgoMHxhcltBPj4yXSktRXwwKT49KDB8YXJbYSs4MDA+PjJdKSYmKDB8YXJbWCsoVzw8Mik+PjJdKT09KDB8YXJbQz4+Ml0pKT8yNTUmKDB8b3QoQSsxODU1NnwwLDB8YXJbQSsxODU4MD4+Ml0pKTowO2lmKEM9bzw8MjQ+PjI0PT0wLCEoKG98dCk8PDI0Pj4yNCkpe0U9MD09KDB8YXJbNTc3NitmPj4yXSk/MTozLFg9YSszMjV8MCxXPUErMTg1NTZ8MCxtPUErMTg1ODB8MCxnPTU3NjArZnwwLFo9NTc2OCtmfDAscD0xMDA4NytmfDAseT0xMDA4OCtmfDAsQj1pKzF8MCx2PWErMzI2fDAsdD1vPXc9MDtkb3tpZigoYj0wPT0oMHx3KSkmMCE9KDB8dHJbWD4+MF0pfHwwPCgwfHcpJjAhPSgwfHRyW3Y+PjBdKSl7ZG97aWYoYilvPTB8b3QoVywxKygwfGFyW20+PjJdKXwwKT8obz0wPT0oMHxjdChXKSkpPzE6MjowLGE9byxvJj0yNTU7ZWxzZXtpZigxIT0oMHx3KSl7YT0oMjU1Jm8pPj4+KHc8PDEpJjM7YnJlYWt9QT0wfG90KFcsMSsoMHxhclttPj4yXSl8MCk/KEE9MD09KDB8Y3QoVykpKT8xOjI6MCxvPTI1NSYoKGE9QSk8PDR8QTw8MnwyNTUmbyl9fXdoaWxlKDApO2lmKEE9MjU1JmEpe2E9MHxhclsodT1iP2c6Wik+PjJdLGE9MjU1JigwfGx0KFcsKDE8PCgoMHxhKTwxMD9hOjEwKSstNSktMXwwKSksdHJbKHM9aSs1Kyh3PDwyKXwwKT4+MF09YSxjPTB8YXJbdT4+Ml0sYz0yNTUmKDB8bHQoVywoMTw8KCgwfGMpPDEwP2M6MTApKy01KS0xfDApKSx0clsoZD1pKzUrKHc8PDIpKzF8MCk+PjBdPWMsbD0wfGFyW3U+PjJdLGw9MjU1JigwfGx0KFcsKDE8PCgoMHxsKTwxMD9sOjEwKSstNSktMXwwKSksdHJbKGs9aSs1Kyh3PDwyKSsyfDApPj4wXT1sLHU9MHxhclt1Pj4yXSx1PTI1NSYoMHxsdChXLCgxPDwoKDB8dSk8MTA/dToxMCkrLTUpLTF8MCkpLHRyWyhoPWkrNSsodzw8MikrM3wwKT4+MF09dTtkb3tpZigxPT0oMHxBKSlBPWE8PDI0Pj4yND8oQT0wIT0oMHxjdChXKSkpPy0xOjE6MCxjPWM8PDI0Pj4yND8oYz0wIT0oMHxjdChXKSkpPy0xOjE6MCxsPWw8PDI0Pj4yND8obD0wIT0oMHxjdChXKSkpPy0xOjE6MCxhPXU8PDI0Pj4yND8oYT0wIT0oMHxjdChXKSkpPy0xOjE6MCx1PTI1NSYoMHx1dChXLDUpKSx0cltpKzIrdz4+MF09dSxiP3U9cDpHPTMwO2Vsc2V7aWYoYil7dT1wLGE9bD0tKGM9QT0xKSx0PTI1NSYoMHx1dChXLDIpKTticmVha31HPSgxPT0oMHx3KT8oRz0yNTUmKDB8dXQoVywyKSksbD1hPS0xLEE9Yz0xLHQ9MjU1JigyNTUmdHxHPDwyfEc8PDQpKToobD1hPS0xLEE9Yz0xKSwzMCl9fXdoaWxlKDApOzMwPT0oMHxHKSYmKEc9MCx1PXkpLGI9MHxjclt1Pj4wXSx1PTI1NSYoMHxicih0cltzPj4wXTw8YixBKSksdHJbcz4+MF09dSxzPTI1NSYoMHxicih0cltkPj4wXTw8YixjKSksdHJbZD4+MF09cyxkPTI1NSYoMHxicih0cltrPj4wXTw8YixsKSksdHJbaz4+MF09ZCxrPTI1NSYoMHxicih0cltoPj4wXTw8YixhKSksdHJbaD4+MF09a319dz13KzF8MH13aGlsZSgoMHx3KTwoMHxFKSk7Zm9yKHRyW2k+PjBdPW8sdHJbQj4+MF09dCx0PSgwfGJyKDB8YXJbMTAzNTIrZj4+Ml0scikpK2V8MCx0PSgwfGFyWzEwMzQwK2Y+PjJdKSsoMjQqdHwwKSs0fDAsbz10KzE3fDA7dHJbdD4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfCh0PXQrMXwwKSk8KDB8byk7KTt9aWYoIUkpZm9yKGk9MHxicigwfGFyWzEwMzUyK2Y+PjJdLHIpLG89MHxhclsxMDM0MCtmPj4yXSx0PW8rKDI0KihpK2V8MCl8MCkrNHwwLGk9bysoMjQqKGUrLTEraXwwKXwwKSs0fDAsbz10KzE3fDA7dHJbdD4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfCh0PXQrMXwwKSk8KDB8byk7KTtpZihDKXJldHVybiB1cj1uO3Q9MHxhclsxMDM1MitmPj4yXSxpPSgwfGJyKHQscistMXwwKSkrZXwwLG89MHxhclsxMDM0MCtmPj4yXSx0PW8rKDI0KigoMHxicih0LHIpKStlfDApfDApKzR8MCxpPW8rKDI0Kml8MCkrNHwwLG89dCsxN3wwO2Zvcig7dHJbdD4+MF09MHx0cltpPj4wXSx0PXQrMXwwLGk9aSsxfDAsKDB8dCk8KDB8byk7KTt1cj1ufShBLGEscywwKSxUYShBLHIsaSxzPTB8YXJbYz4+Ml0sMCkpOlRhKEEscixpLHM9ZSwwKX1mdW5jdGlvbiBUYShBLGUscixpLGYpe3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTA7Zm9yKHQ9KEF8PTApKzE4NTk2fDAsbz1BKzE4NjAwfDAsYT1BKzE4NTE2fDAsYz1BKzE4NTA4fDAsbT1BKzE4NTEyfDAscz1BKzE4NTU2fDAsbj1BKzE4NTgwfDAsQj1lfD0wLHk9cnw9MCxaPWl8PTAscD1mfD0wOzspe2lmKGc9MHxhclt0Pj4yXSwoKGU9MTw8WikrQnwwKTw9KDB8KHI9MHxhclsoYj1nKzEyNDh8MCk+PjJdKSkmJihlK3l8MCk8PSgwfChkPTB8YXJbZysxMjUyPj4yXSkpJiYoMHxhcltnKzU4MDA+PjJdKTwoMHxaKSl7aWYoZT0tMTwoKGk9QistMXwwKXx5fDApJigwfEIpPD0oMHxyKSYoMHx5KTwoMHxkKSYmKGg9MHxhcltnKzU4MDQ+PjJdLGs9KHU9MHxicih5Pj5oLDB8YXJbZys1ODIwPj4yXSkpKyhCPj5oKXwwLGg9dSsoaT4+aCl8MCx1PTB8YXJbZysxMDM0MD4+Ml0sKDB8b3JbdSsoMjQqa3wwKT4+MV0pPT0oMHxvclt1KygyNCpofDApPj4xXSkpPyhlPTB8YXJbZysxMDMwOD4+Ml0sKDB8YXJbZSsoazw8Mik+PjJdKT09KDB8YXJbZSsoaDw8Mik+PjJdKSYxKTowLGw9KDB8cik8PSgwfEIpfCgodT15Ky0xfDApfEJ8MCk8MHwoMHxkKTwoMHx5KXx8KGY9MHxhcltnKzU4MDQ+PjJdLGw9MHxhcltnKzU4MjA+PjJdLHY9Qj4+Zix3PSgwfGJyKHk+PmYsbCkpK3Z8MCx2PSgwfGJyKHU+PmYsbCkpK3Z8MCxsPTB8YXJbZysxMDM0MD4+Ml0sKDB8b3JbbCsoMjQqd3wwKT4+MV0pIT0oMHxvcltsKygyNCp2fDApPj4xXSkpPzA6KGw9MHxhcltnKzEwMzA4Pj4yXSwoMHxhcltsKyh3PDwyKT4+Ml0pPT0oMHxhcltsKyh2PDwyKT4+Ml0pJjEpLGUpe2lmKGU9aT4+KHI9MHxhcltnKzEwMzY4Pj4yXSkscj15Pj5yLCgwfGUpPD0tMSl7ZT0xNDticmVha31pZigoMHwoaT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGUpKXtlPTE0O2JyZWFrfWlmKCgwfHIpPD0tMSl7ZT0xNzticmVha31pZigoMHxyKT49KDB8YXJbZysxMDM3Nj4+Ml0pKXtlPTE3O2JyZWFrfWY9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihpLHIpKStlfDApfDApfDAsZj0oKDY1NTM1JihjcltmPj4wXXxjcltmKzE+PjBdPDw4KSk+Pj42JjN8MCk+KDB8cCk/MzoyfWVsc2UgZj0yO2lmKGwpe2lmKGk9Qj4+KHI9MHxhcltnKzEwMzY4Pj4yXSkscj11Pj5yLCgwfGkpPD0tMSl7ZT0yMjticmVha31pZigoMHwoZT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGkpKXtlPTIyO2JyZWFrfWlmKCgwfHIpPD0tMSl7ZT0yNTticmVha31pZigoMHxyKT49KDB8YXJbZysxMDM3Nj4+Ml0pKXtlPTI1O2JyZWFrfWU9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihlLHIpKStpfDApfDApfDAsZT0oKDY1NTM1JihjcltlPj4wXXxjcltlKzE+PjBdPDw4KSk+Pj42JjN8MCk+KDB8cCkmMX1lbHNlIGU9MDtlPTB8b3QocywoMHxhcltuPj4yXSkrKGUrZil8MCl9ZWxzZSBlPSgwfGFyW2crNTgwMD4+Ml0pPCgwfFopJjE7aWYoMHx0cltnKzU5NDY+PjBdJiYoMHxhcltnKzEwMDkyPj4yXSk8PSgwfFopJiYoYXJbYz4+Ml09MCxhclttPj4yXT0wKSwwfHRyWzc1MisoMHxhcltvPj4yXSk+PjBdJiYoMHxhcltnKzEwMDk2Pj4yXSk8PSgwfFopJiYoYXJbYT4+Ml09MCksIWUpe2U9NDI7YnJlYWt9aWYoaT0oZj0xPDwocj1aKy0xfDApKStCfDAsZj1mK3l8MCxUYShBLEIseSxyLGw9cCsxfDApLCgwfGkpPCgwfGFyW2I+PjJdKSYmVGEoQSxpLHkscixsKSwoMHxmKTwoMHxhclsoZT1nKzEyNTJ8MCk+PjJdKSYmVGEoQSxCLGYscixsKSwoMHxpKT49KDB8YXJbYj4+Ml0pKXtlPTQ4O2JyZWFrfWlmKCEoKDB8Zik8KDB8YXJbZT4+Ml0pKSl7ZT00ODticmVha31CPWkseT1mLFo9cixwPWx9aWYoMTQ9PSgwfGUpKXNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7ZWxzZSBpZigxNz09KDB8ZSkpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDIyPT0oMHxlKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMjU9PSgwfGUpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZXtpZig0Mj09KDB8ZSkpe2lmKGI9Qj4+KG09MHxhcltnKzEwMzY4Pj4yXSkscj15Pj5tLHM9KGU9MTw8KG09Wi1tfDApKStyfDAsMzEhPSgwfG0pKXtsPWUrYnwwLHU9ZysxMDM3MnwwLGk9ZysxMDM2MHwwLGY9KDY1NTM1JnApPDw2JjE5MixlPXI7ZG97Zm9yKHI9YjtnPSgwfGJyKDB8YXJbdT4+Ml0sZSkpK3J8MCxnPSgwfGFyW2k+PjJdKSsoMypnfDApfDAsbT0tMTkzJihjcltnPj4wXXxjcltnKzE+PjBdPDw4KXxmLHRyW2c+PjBdPW0sdHJbZysxPj4wXT1tPj44LCgwfChyPXIrMXwwKSk8KDB8bCk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHMpKX1yZXR1cm4gdm9pZCBmdW5jdGlvbihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MDtpZih1cj0oYz11cikrODB8MCxuPShEPWMpKzU2fDAsdD1jKzQwfDAsbz1jKzI0fDAsYT0wfGFyWyhDPTE4NTk2KyhBfD0wKXwwKT4+Ml0sdj0wfGFyWyhFPUErMTg2MDB8MCk+PjJdLGZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZihuPTEwMzY4KyhBfD0wKXwwLChmfD0wKSYmKGM9MHxhcltuPj4yXSxiPWU+PmMsbD1yPj5jLHU9KHQ9MTw8KGM9aS1jfDApKStsfDAsMzEhPSgwfGMpKSl7bz10K2J8MCxhPUErMTAzNzJ8MCxjPUErMTAzNjB8MCx0PWw7ZG97Zm9yKGY9YjtsPSgwfGJyKDB8YXJbYT4+Ml0sdCkpK2Z8MCxsPSgwfGFyW2M+PjJdKSsoMypsfDApfDAscz0tOCYoY3JbbD4+MF18Y3JbbCsxPj4wXTw8OCksdHJbbD4+MF09cyx0cltsKzE+PjBdPXM+PjgsKDB8KGY9ZisxfDApKTwoMHxvKTspO3Q9dCsxfDB9d2hpbGUoKDB8dCk8KDB8dSkpfXQ9MHxhcltuPj4yXSxvPWU+PnQsdD1yPj50LCgwfG8pPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KTtmPTB8YXJbQSsxMDM3Mj4+Ml0sKDB8Zik8PSgwfG8pJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpOygwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KTt7aWYoKDB8dCk8KDB8YXJbQSsxMDM3Nj4+Ml0pKXJldHVybiBzPSgwfGFyW0ErMTAzNjA+PjJdKSsoMyooKDB8YnIoZix0KSkrb3wwKXwwKXwwLGk9LTgmKGNyW3M+PjBdfGNyW3MrMT4+MF08PDgpfDcmaSx0cltzPj4wXT1pLHRyW3MrMT4+MF09aT4+ODtzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpfX0oYSxlLHIsaSwxKSxKPTB8YXJbMTA0NDgrYT4+Ml0saD1lPj5KLHU9cj4+Six3PShsPTE8PChKPWktSnwwKSkrdXwwLDMxIT0oMHxKKSl7Yj1sK2h8MCxkPTEwNDUyK2F8MCxrPTEwNDQwK2F8MCxsPXU7ZG97Zm9yKHU9aDtKPSgwfGJyKDB8YXJbZD4+Ml0sbCkpK3V8MCwoKHRyWygwfGFyW2s+PjJdKStKPj4wXT0wKXwodT11KzF8MCkpPCgwfGIpOyk7bD1sKzF8MH13aGlsZSgoMHxsKTwoMHx3KSl9Sj0xPDxpLHpuKEEsZSxyLGUsciksMHx0cls1OTY0K2E+PjBdPyhRPTB8b3QoQSsxODU1NnwwLDE2MSsoMHxhcltBKzE4NTgwPj4yXSl8MCksMHwodHJbQSszMj4+MF09USkmJmZ1bmN0aW9uKEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKGw9MHxhclsxMDM2OCsoQXw9MCk+PjJdLHQ9ZT4+bCx1PXI+Pmwsbj0oaT0xPDwobD1pLWx8MCkpK3V8MCwzMSE9KDB8bCkpe2E9aSt0fDAsYz1BKzEwMzcyfDAsbD1BKzEwMzYwfDAsbz0oMSZmKTw8MTEmNjU1MzUsaT11O2Rve2ZvcihmPXQ7dT0oMHxicigwfGFyW2M+PjJdLGkpKStmfDAsdT0oMHxhcltsPj4yXSkrKDMqdXwwKXwwLGI9LTIwNDkmKGNyW3U+PjBdfGNyW3UrMT4+MF08PDgpfG8sdHJbdT4+MF09Yix0clt1KzE+PjBdPWI+PjgsKDB8KGY9ZisxfDApKTwoMHxhKTspO2k9aSsxfDB9d2hpbGUoKDB8aSk8KDB8bikpfWk9MHxhcltBKzEwMzQ4Pj4yXSxvPWU+PmksaT1yPj5pLCgwfG8pPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KTtmPTB8YXJbQSsxMDM1Mj4+Ml0sKDB8Zik8PSgwfG8pJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpOygwfGkpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KTt7aWYoKDB8aSk8KDB8YXJbQSsxMDM1Nj4+Ml0pKXJldHVybiBiPSgwfGFyW0ErMTAzNDA+PjJdKSsoMjQqKCgwfGJyKGYsaSkpK298MCl8MCkrMjJ8MCx0cltiPj4wXT0xO3NyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSl9fShhLGUscixpLDEpKTp0cltBKzMyPj4wXT0wO3c9disyMHwwO2Rve2lmKDIhPSgwfGFyW3c+PjJdKSl7aD0wfGFyW0M+PjJdLGw9MDw9KCh1PWUrLTF8MCl8cnwwKSYmKDB8YXJbaCsxMjQ4Pj4yXSk+PSgwfGUpJiYoMHxhcltoKzEyNTI+PjJdKT4oMHxyKSYmKGc9MHxhcltoKzU4MDQ+PjJdLFE9MHxicihyPj5nLDB8YXJbaCs1ODIwPj4yXSksbT1RKyhlPj5nKXwwLGc9USsodT4+Zyl8MCxRPTB8YXJbaCsxMDM0MD4+Ml0sKDB8b3JbUSsoMjQqbXwwKT4+MV0pPT0oMHxvcltRKygyNCpnfDApPj4xXSkpPyhsPTB8YXJbaCsxMDMwOD4+Ml0sKDB8YXJbbCsobTw8Mik+PjJdKT09KDB8YXJbbCsoZzw8Mik+PjJdKSYxKTowLGQ9MDw9KChrPXIrLTF8MCl8ZXwwKSYmKDB8YXJbaCsxMjQ4Pj4yXSk+KDB8ZSkmJigwfGFyW2grMTI1Mj4+Ml0pPj0oMHxyKSYmKFk9MHxhcltoKzU4MDQ+PjJdLFE9MHxhcltoKzU4MjA+PjJdLHA9ZT4+WSxaPSgwfGJyKHI+PlksUSkpK3B8MCxwPSgwfGJyKGs+PlksUSkpK3B8MCxRPTB8YXJbaCsxMDM0MD4+Ml0sKDB8b3JbUSsoMjQqWnwwKT4+MV0pPT0oMHxvcltRKygyNCpwfDApPj4xXSkpPyhkPTB8YXJbaCsxMDMwOD4+Ml0sKDB8YXJbZCsoWjw8Mik+PjJdKT09KDB8YXJbZCsocDw8Mik+PjJdKSYxKTowO2Rve2lmKGwpe2lmKFE9MHxhcltoKzEwMzY4Pj4yXSxsPXU+PlEsdT1yPj5RLCgwfGwpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoYj0wfGFyW2grMTAzNzI+PjJdKSk8PSgwfGwpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHUpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx1KTwoMHxhcltoKzEwMzc2Pj4yXSkpe3k9KDB8YXJbaCsxMDM2MD4+Ml0pKygzKigoMHxicihiLHUpKStsfDApfDApfDAseT01MTI9PSg3NjgmKGNyW3k+PjBdfGNyW3krMT4+MF08PDgpKT82OjU7YnJlYWt9c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX1lbHNlIHk9NX13aGlsZSgwKTtkb3tpZihkKXtpZihsPTB8YXJbaCsxMDM2OD4+Ml0sYj1lPj5sLGw9az4+bCwoMHxiKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KHU9MHxhcltoKzEwMzcyPj4yXSkpPD0oMHxiKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxsKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8bCk8KDB8YXJbaCsxMDM3Nj4+Ml0pKXtCPSgwfGFyW2grMTAzNjA+PjJdKSsoMyooKDB8YnIodSxsKSkrYnwwKXwwKXwwLEI9NTEyPT0oNzY4JihjcltCPj4wXXxjcltCKzE+PjBdPDw4KSkmMTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgQj0wfXdoaWxlKDApO2lmKCEoKDI1NSYoMHxvdCh1PUErMTg1NTZ8MCwoMHxhclsobD1BKzE4NTgwfDApPj4yXSkrKEIreSl8MCkpKTw8MjQ+PjI0KSl7aWYoMj09KDB8YXJbdz4+Ml0pKXtRPTA7YnJlYWt9UT0wPT0oMHxvdCh1LDE0OSsoMHxhcltsPj4yXSl8MCkpJjE7YnJlYWt9QTpkb3tpZigyPD0oMHxhcls4MDQrKDB8YXJbRT4+Ml0pPj4yXSkmJjAhPSgwfG90KHUsMTQ4KygwfGFyW2w+PjJdKXwwKSkpaWYoMTwoKDB8YXJbODA0KygwfGFyW0U+PjJdKT4+Ml0pLTF8MCkpe2w9MTtkb3tpZighKDB8Y3QodSkpKWJyZWFrIEE7bD1sKzF8MH13aGlsZSgoMHxsKTwoKDB8YXJbODA0KygwfGFyW0U+PjJdKT4+Ml0pLTF8MCkpfWVsc2UgbD0xO2Vsc2UgbD0wfXdoaWxlKDApO2lmKHRyWyhiPUErMjZ8MCk+PjBdPTE1JnRyW2I+PjBdfCgyNTUmbCk8PDUmMjU1fDE2LGI9MHxhclsobD0xMDM2OCthfDApPj4yXSx1PWU+PmIsYj1yPj5iLCgwfHUpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTI4LDQ4NTM5KSwoMHwocz0wfGFyWyhoPTEwMzcyK2F8MCk+PjJdKSk8PSgwfHUpJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpLCgwfGIpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTI5LDQ4NTM5KSwoMHxiKT49KDB8YXJbMTAzNzYrYT4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpLEQ9KDB8YXJbKGs9MTAzNjArYXwwKT4+Ml0pKygzKigoMHxicihzLGIpKSt1fDApfDApfDAsZD0tNTcmKGNyW0Q+PjBdfGNyW0QrMT4+MF08PDgpLHRyW0Q+PjBdPWQsdHJbRCsxPj4wXT1kPj44LEQ9MHxhcltsPj4yXSxkPWU+PkQsdT1yPj5ELHM9KGw9MTw8KEQ9aS1EfDApKSt1fDAsMzEhPSgwfEQpKXtiPWwrZHwwLGw9dTtkb3tmb3IodT1kO0Q9KDB8YnIoMHxhcltoPj4yXSxsKSkrdXwwLEQ9KDB8YXJbaz4+Ml0pKygzKkR8MCl8MCxpPS03NjkmKGNyW0Q+PjBdfGNyW0QrMT4+MF08PDgpfDUxMix0cltEPj4wXT1pLHRyW0QrMT4+MF09aT4+OCwoMHwodT11KzF8MCkpPCgwfGIpOyk7bD1sKzF8MH13aGlsZSgoMHxsKTwoMHxzKSl9cmV0dXJuIG1jKDB8YXJbQSsxODU5Mj4+Ml0sMHxhcltFPj4yXSwwfGFyW0M+PjJdLEErMTZ8MCxlLHIsMCwwLEosSixKLDApLHVyPWN9UT0wfXdoaWxlKDApO2lmKFk9MHxhclsobT0xMDM2OCthfDApPj4yXSx3PWU+PlksdT1yPj5ZLHY9KGw9MTw8KFk9aS1ZfDApKSt1fDAsMzEhPSgwfFkpKXtiPWwrd3wwLGQ9MTAzNzIrYXwwLGs9MTAzNjArYXwwLGg9KDY1NTM1JlEpPDw4JjY1NTM1LGw9dTtkb3tmb3IodT13O1k9KDB8YnIoMHxhcltkPj4yXSxsKSkrdXwwLFk9KDB8YXJbaz4+Ml0pKygzKll8MCl8MCxfPS03NjkmKGNyW1k+PjBdfGNyW1krMT4+MF08PDgpfGgsdHJbWT4+MF09Xyx0cltZKzE+PjBdPV8+PjgsKDB8KHU9dSsxfDApKTwoMHxiKTspO2w9bCsxfDB9d2hpbGUoKDB8bCk8KDB8dikpfWlmKChZPTAhPSgwfFEpKXx8KDB8YXJbNTgwMCthPj4yXSk9PSgwfGkpKXt1PTB8YXJbQz4+Ml0saD0wPT0oMHxRKSxsPTB8b3QoYj1BKzE4NTU2fDAsOCsoMHxhclsoZD1BKzE4NTgwfDApPj4yXSl8MCk7ZG97aWYoaClzPTB8bD8wOjM7ZWxzZSBpZihsKXM9MDtlbHNle2lmKGs9MHxvdChiLDkrKDB8YXJbZD4+Ml0pfDApLCgwfGFyW3UrNTgwMD4+Ml0pPj0oMHxpKSl7aWYoMHxrKXtzPTE7YnJlYWt9aWYoMz09KDB8aSkpe3M9MjticmVha31zPTMtKDB8b3QoYiwxMCsoMHxhcltkPj4yXSl8MCkpfDA7YnJlYWt9aWYoISgwfHRyW3UrNTQ2Nj4+MF0pKXtzPTB8az8xOjI7YnJlYWt9aWYoMHxvdChiLDExKygwfGFyW2Q+PjJdKXwwKSl7cz0wfGs/MToyO2JyZWFrfWw9MHxjdChiKSwwIT0oMHxrKSYodT0wIT0oMHxsKSk/cz01OihiPTA9PSgwfGspKXx1P2x8az9iJnU/cz03OnNyKDU1NzM5LDM5MjQyLDE3NjAsMzkyNzUpOnM9NjpzPTR9fXdoaWxlKDApO189aCYzPT0oMHxzKSYxfWVsc2Ugcz1fPTA7dT0wfGFyW20+PjJdLGw9ZT4+dSx1PXI+PnUsKDB8bCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpO2I9MHxhclsxMDM3MithPj4yXSwoMHxiKTw9KDB8bCkmJnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSk7KDB8dSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpOygwfHUpPj0oMHxhclsxMDM3NithPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDEyOSw0ODUzOSk7Uj0oMHxhclsxMDM2MCthPj4yXSkrKDMqKCgwfGJyKGIsdSkpK2x8MCl8MCl8MCxOPS01NyYoY3JbUj4+MF18Y3JbUisxPj4wXTw8OCl8KDY1NTM1JnMpPDwzJjU2LHRyW1I+PjBdPU4sdHJbUisxPj4wXT1OPj44LFI9MD09KDB8USksTj0wPT0oMHxzKTtBOmRve2lmKFIpe2lmKE4mJjB8dHJbNTQ2OCthPj4wXSYmKDB8YXJbNTg4NCthPj4yXSk8PSgwfGkpJiYoMHxhcls1ODg4K2E+PjJdKT49KDB8aSkmJjB8YXQoRz1BKzE4NTU2fDApKXtpZihVYShhLGUscixpLDEpLGw9MHxhclsoWj1BKzE4NTYwfDApPj4yXSxhcltEPj4yXT1sLGFyW0QrND4+Ml09KDB8YXJbQSsxODU2ND4+Ml0pLWwsYXJbKGw9RCs4fDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltEKzE2Pj4yXT0wLGw9MHxhcltDPj4yXSxiPTB8YXJbbCs1NzYwPj4yXSxoPTB8dHJbbCs1NDY5Pj4wXSxrPTB8YXJbbCs0MD4+Ml0sbD0wfGFyW2wrND4+Ml0sdT0oMHxicihrLHIpKStlfDAsODwoMHxiKSl7aWYoZD1sKyh1PDwxKXwwLHM9Yi1ofDAsMzEhPSgwfGkpKXt1PTA7ZG97Zm9yKGI9MHxicih1LGspLGw9MDtpPSgwfEF0KEQsaCkpPDxzJjY1NTM1LG9yW2QrKGwrYjw8MSk+PjFdPWksKDB8KGw9bCsxfDApKSE9KDB8Sik7KTt1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHxKKSl9fWVsc2UgaWYoZD1sK3V8MCxzPWItaHwwLDMxIT0oMHxpKSl7dT0wO2Rve2ZvcihiPTB8YnIodSxrKSxsPTA7aT0oMHxBdChELGgpKTw8cyYyNTUsdHJbZCsobCtiKT4+MF09aSwoMHwobD1sKzF8MCkpIT0oMHxKKTspO3U9dSsxfDB9d2hpbGUoKDB8dSkhPSgwfEopKX11PTB8YXJbQz4+Ml07ZG97aWYoMHxhclt1KzU3NzY+PjJdKWlmKHc9MHxhclt1KzU3Njg+PjJdLGs9MHxhclt1KzU3ODA+PjJdLGg9KDB8SikvKDB8ayl8MCxiPTB8YXJbdSs1Nzg0Pj4yXSx2PSgwfEopLygwfGIpfDAsbD0wfHRyW3UrNTQ3MD4+MF0sZz1sPDwyND4+MjQsbT0wfGFyW3UrNDQ+PjJdLHM9MHxhclt1Kzg+PjJdLGQ9KDB8YnIobSwoMHxyKS8oMHxiKXwwKSkrKCgwfGUpLygwfGspfDApfDAsODwoMHx3KSl7aWYocz1zKyhkPDwxKXwwLGQ9dy1nfDAsMDwoMHxoKSYwPCgwfHYpKXt1PTA7ZG97Zm9yKGI9MHxicih1LG0pLGw9MDtpPSgwfEF0KEQsZykpPDxkJjY1NTM1LG9yW3MrKGwrYjw8MSk+PjFdPWksKDB8KGw9bCsxfDApKSE9KDB8aCk7KTt1PXUrMXwwfXdoaWxlKCgwfHUpIT0oMHx2KSk7dT0wfGFyW0M+PjJdLG09MHxhclt1KzQ0Pj4yXSx3PTB8YXJbdSs1NzY4Pj4yXSxzPTB8YXJbdSs1NzgwPj4yXSxiPTB8YXJbdSs1Nzg0Pj4yXSxsPTB8dHJbdSs1NDcwPj4wXX1lbHNlIHM9aztpZih2PSgwfEopLygwfHMpfDAsaD0oMHxKKS8oMHxiKXwwLGs9bDw8MjQ+PjI0LGQ9KDB8YXJbdSsxMj4+Ml0pKygoMHxicigoMHxyKS8oMHxiKXwwLG0pKSsoKDB8ZSkvKDB8cyl8MCk8PDEpfDAsYj13LWt8MCwhKDA8KDB8dikmMDwoMHxoKSkpYnJlYWs7dT0wO2Rve2ZvcihzPTB8YnIodSxtKSxsPTA7cj0oMHxBdChELGspKTw8YiY2NTUzNSxvcltkKyhsK3M8PDEpPj4xXT1yLCgwfChsPWwrMXwwKSkhPSgwfHYpOyk7dT11KzF8MH13aGlsZSgoMHx1KSE9KDB8aCkpfWVsc2V7aWYocz1zK2R8MCxkPXctZ3wwLDA8KDB8aCkmMDwoMHx2KSl7dT0wO2Rve2ZvcihiPTB8YnIodSxtKSxsPTA7aT0oMHxBdChELGcpKTw8ZCYyNTUsdHJbcysobCtiKT4+MF09aSwoMHwobD1sKzF8MCkpIT0oMHxoKTspO3U9dSsxfDB9d2hpbGUoKDB8dSkhPSgwfHYpKTt1PTB8YXJbQz4+Ml0sbT0wfGFyW3UrNDQ+PjJdLHc9MHxhclt1KzU3Njg+PjJdLHM9MHxhclt1KzU3ODA+PjJdLGI9MHxhclt1KzU3ODQ+PjJdLGw9MHx0clt1KzU0NzA+PjBdfWVsc2Ugcz1rO2lmKHY9KDB8SikvKDB8cyl8MCxoPSgwfEopLygwfGIpfDAsaz1sPDwyND4+MjQsZD0oMHxhclt1KzEyPj4yXSkrKCgwfGJyKCgwfHIpLygwfGIpfDAsbSkpKygoMHxlKS8oMHxzKXwwKSl8MCxiPXcta3wwLCEoMDwoMHx2KSYwPCgwfGgpKSlicmVhazt1PTA7ZG97Zm9yKHM9MHxicih1LG0pLGw9MDtyPSgwfEF0KEQsaykpPDxiJjI1NSx0cltkKyhsK3MpPj4wXT1yLCgwfChsPWwrMXwwKSkhPSgwfHYpOyk7dT11KzF8MH13aGlsZSgoMHx1KSE9KDB8aCkpfX13aGlsZSgwKTtyZXR1cm4gcnQoRCksYXJbWj4+Ml09YXJbRD4+Ml0sdHQoRyksdXI9Y31pZihHPShWPTM9PSgwfHMpKT8oMHxKKS8yfDA6SixWPShWPDwzMT4+MzEpK2l8MCwhKEM9MzE9PSgwfGkpKSl7cz1BKzE4NTU2fDAsZD1BKzE4NTgwfDAsdT1sPTA7ZG97Zm9yKGI9MDtFPTB8b3QocywxMisoMHxhcltkPj4yXSl8MCksbD0oZj1sKSsxfDAsYXJbRCsoZjw8Mik+PjJdPUUsKDB8KGI9YitHfDApKTwoMHxKKTspO3U9dStHfDB9d2hpbGUoKDB8dSk8KDB8SikpfWlmKHU9MDw9KChsPWUrLTF8MCl8cnwwKSYmKDB8YXJbMTI0OCthPj4yXSk+PSgwfGUpJiYoMHxhclsxMjUyK2E+PjJdKT4oMHxyKSYmKFc9MHxhcls1ODA0K2E+PjJdLGY9MHxicihyPj5XLDB8YXJbNTgyMCthPj4yXSksWD1mKyhlPj5XKXwwLFc9ZisobD4+Vyl8MCxmPTB8YXJbMTAzNDArYT4+Ml0sKDB8b3JbZisoMjQqWHwwKT4+MV0pPT0oMHxvcltmKygyNCpXfDApPj4xXSkpPyh1PTB8YXJbMTAzMDgrYT4+Ml0sKDB8YXJbdSsoWDw8Mik+PjJdKT09KDB8YXJbdSsoVzw8Mik+PjJdKSYxKTowLGw9MDw9KChsPXIrLTF8MCl8ZXwwKSYmKDB8YXJbMTI0OCthPj4yXSk+KDB8ZSkmJigwfGFyWzEyNTIrYT4+Ml0pPj0oMHxyKSYmKFg9MHxhcls1ODA0K2E+PjJdLFc9MHxhcls1ODIwK2E+PjJdLEY9ZT4+WCxJPSgwfGJyKHI+PlgsVykpK0Z8MCxGPSgwfGJyKGw+PlgsVykpK0Z8MCxXPTB8YXJbMTAzNDArYT4+Ml0sKDB8b3JbVysoMjQqSXwwKT4+MV0pPT0oMHxvcltXKygyNCpGfDApPj4xXSkpPyhsPTB8YXJbMTAzMDgrYT4+Ml0sKDB8YXJbbCsoSTw8Mik+PjJdKT09KDB8YXJbbCsoRjw8Mik+PjJdKSYxKTowLCFDKXtJPUErMTg1NTZ8MCxXPTAhPSgwfHUpLHY9MCE9KDB8bCksbT01ODcyK2F8MCxnPTU4NzYrYXwwLFo9MTA0MDgrYXwwLHA9MTA0MTIrYXwwLHk9MTA0MDArYXwwLEI9NCtvfDAsRT04K298MCxsPWg9MDtkb3tmPWgrcnwwLFg9dnwwPCgwfGgpLHc9MDtkb3tpZihzPTB8YXJbRCsobDw8Mik+PjJdLGI9cz8odT1uLDB8bHQoSSwyKSk6KHU9dCwwfHV0KEksNSkpLGFyW3UrKGw8PDIpPj4yXT1iLEY9dytlfDAsaz0wfGFyW20+PjJdLGs9KDB8YnIoZj4+aywwfGFyW2c+PjJdKSkrKEY+PmspfDAsQ3QobyxGLGYsayxXfDA8KDB8dyksWCxhKSx1PTE9PSgwfHMpPzB8YXJbbysoYXJbbisobDw8Mik+PjJdPDwyKT4+Ml06KHU9MHxhcltvPj4yXSwoMHwoYj0wfGFyW0I+PjJdKSk8KDB8dSk/KGFyW28+PjJdPWIsYXJbQj4+Ml09dSxzPWIpOihzPXUsdT1iKSwoMHwoYj0wfGFyW0U+PjJdKSk8KDB8cyk/KGFyW28+PjJdPWIsYXJbRT4+Ml09cyxkPXMpOihkPWIsYj1zKSwoMHxkKTwoMHx1KT8oYXJbQj4+Ml09ZCxhcltFPj4yXT11LHM9ZCk6KHM9dSx1PWQpLEY9MHxhclt0KyhsPDwyKT4+Ml0sKCgwfHUpPD0oMHwoRj0oKDB8cyk8PSgwfChGPSgoMHxiKTw9KDB8RikmMSkrRnwwKSkmMSkrRnwwKSkmMSkrRnwwKSxGPVYtKDB8YXJbWj4+Ml0pfDAsZD0xPDxGLDMxIT0oMHxGKSl7cz0yNTUmdSx1PTA7ZG97Zm9yKGI9MDtGPWIraysoMHxicigwfGFyW3A+PjJdLHUpKXwwLHRyWygwfGFyW3k+PjJdKStGPj4wXT1zLCgwfChiPWIrMXwwKSk8KDB8ZCk7KTt1PXUrMXwwfXdoaWxlKCgwfHUpPCgwfGQpKX1sPWwrMXwwLHc9dytHfDB9d2hpbGUoKDB8dyk8KDB8SikpO2g9aCtHfDB9d2hpbGUoKDB8aCk8KDB8SikpfWQ9NTc3NithfDA7ZTpkb3tzd2l0Y2goMHxhcltkPj4yXSl7Y2FzZSAzOmlmKCFDKXtoPUErMTg1NTZ8MCx3PUErMTg1ODB8MCx2PTEwNDA4K2F8MCxtPTEwNDEyK2F8MCxnPTEwNDE2K2F8MCxaPTEwNDAwK2F8MCxrPTA7cjpmb3IoOzspe3A9aytyfDAsZD0wO2Rve2lmKHk9ZCtlfDAscz0wfG90KGgsMTMrKDB8YXJbdz4+Ml0pfDApPzB8dXQoaCwyKTo0LHU9MHxhclt2Pj4yXSxsPXk+PnUsdT1wPj51LCgwfGwpPD0tMSl7bD0xNzQ7YnJlYWsgcn1pZigoMHwoYj0wfGFyW20+PjJdKSk8PSgwfGwpKXtsPTE3NDticmVhayByfWlmKCgwfHUpPD0tMSl7bD0xNzU7YnJlYWsgcn1pZigoMHx1KT49KDB8YXJbZz4+Ml0pKXtsPTE3NTticmVhayByfWw9KDB8YXJbWj4+Ml0pKygoMHxicihiLHUpKStsKXwwLGw9MHxjcltsPj4wXSwodT00PT0oMHxzKSl8fChEPTB8YXJbNzk0OCsoczw8Mik+PjJdLGw9KDB8RCk9PSgwfGwpPzM0OkQpLFNhKGEseSxwLFYsbCx1KSxkPWQrR3wwfXdoaWxlKCgwfGQpPCgwfEopKTtpZigoMHxKKTw9KDB8KGs9aytHfDApKSlicmVhayBlfTE3ND09KDB8bCk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KToxNzU9PSgwfGwpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWJyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnM9MHxvdChsPUErMTg1NTZ8MCwxMysoMHxhcltBKzE4NTgwPj4yXSl8MCk/MHx1dChsLDIpOjQsdT0wfGFyWzEwNDA4K2E+PjJdLGw9ZT4+dSx1PXI+PnUsKDB8bCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChiPTB8YXJbMTA0MTIrYT4+Ml0pKTw9KDB8bCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8dSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfHUpPj0oMHxhclsxMDQxNithPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksbD0oMHxhclsxMDQwMCthPj4yXSkrKCgwfGJyKGIsdSkpK2wpfDAsbD0wfGNyW2w+PjBdLCh1PTQ9PSgwfHMpKXx8KEo9MHxhcls3OTQ4KyhzPDwyKT4+Ml0sbD0oMHxKKT09KDB8bCk/MzQ6SiksMj09KDB8YXJbZD4+Ml0pJiYobD0wfGNyWzM5MjkyK2w+PjBdKSxTYShhLGUscixpLGwsdSl9fXdoaWxlKDApfWVsc2V7aWYoTil7T2EoQSxlLHIsMCwwLEosSixmLEosMCk7YnJlYWt9c3dpdGNoKDB8cyl7Y2FzZSAxOk9hKEEsZSxyLDAsMCxKLEQ9KDB8SikvMnwwLGYsSiwwKSxPYShBLGUsciwwLEQsSixELGYsSiwxKTticmVhayBBO2Nhc2UgMjpPYShBLGUsciwwLDAsRD0oMHxKKS8yfDAsSixmLEosMCksT2EoQSxlLHIsRCwwLEQsSixmLEosMSk7YnJlYWsgQTtjYXNlIDQ6T2EoQSxlLHIsMCwwLEosRD0oMHxKKS80fDAsZixKLDApLE9hKEEsZSxyLDAsRCxKLCgzPDxpfDApLzR8MCxmLEosMSk7YnJlYWsgQTtjYXNlIDU6T2EoQSxlLHIsMCwwLEosRD0oMzw8aXwwKS80fDAsZixKLDApLE9hKEEsZSxyLDAsRCxKLCgwfEopLzR8MCxmLEosMSk7YnJlYWsgQTtjYXNlIDY6T2EoQSxlLHIsMCwwLEQ9KDB8SikvNHwwLEosZixKLDApLE9hKEEsZSxyLEQsMCwoMzw8aXwwKS80fDAsSixmLEosMSk7YnJlYWsgQTtjYXNlIDc6T2EoQSxlLHIsMCwwLEQ9KDM8PGl8MCkvNHwwLEosZixKLDApLE9hKEEsZSxyLEQsMCwoMHxKKS80fDAsSixmLEosMSk7YnJlYWsgQTtjYXNlIDM6T2EoQSxlLHIsMCwwLEQ9KDB8SikvMnwwLEQsZixKLDApLE9hKEEsZSxyLEQsMCxELEQsZixKLDEpLE9hKEEsZSxyLDAsRCxELEQsZixKLDIpLE9hKEEsZSxyLEQsRCxELEQsZixKLDMpO2JyZWFrIEE7ZGVmYXVsdDpzcig0NDQ1NiwzOTI0Miw0NTExLDM5MzI3KX19fXdoaWxlKDApO2lmKFkmJiEoTiYwIT0oMTYmdHJbQSsyNj4+MF0pKSYmMD09KDB8b3QoQSsxODU1NnwwLDE1MysoMHxhcltBKzE4NTgwPj4yXSl8MCkpKXJldHVybiB1cj1jO2w9Uj8oMHxhclsxMzk2K2E+PjJdKStffDA6MHxhclsxMzkyK2E+PjJdO0o9MCE9KDB8YXJbNTc3NithPj4yXSkmMSxmdW5jdGlvbiBBKGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrKXtlfD0wO3J8PTA7aXw9MDtmfD0wO258PTA7dHw9MDtvfD0wO2F8PTA7Y3w9MDtsfD0wO3V8PTA7Ynw9MDtzfD0wO2R8PTA7a3w9MDt2YXIgaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wO1g9ZSsxODU5NnwwO3c9MHxhcltYPj4yXTtoPTB8YXJbdysxMDM2OD4+Ml07dj1yPj5oOygwfHYpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtXPTE9PSgwfGIpO0k9ZSsxODU1NnwwO0M9ZSsxODU4MHwwO0c9MCE9KDB8Yik7RT1pO3k9ZjtwPW47Qj1hO1o9bDtnPXc7bT12O2Y9aT4+aDtmb3IoOzspe2lmKCgwfChsPTB8YXJbZysxMDM3Mj4+Ml0pKTw9KDB8bSkpe1Y9NDticmVha31pZigoMHxmKTw9LTEpe1Y9NzticmVha31pZigoMHwodz0wfGFyW2crMTAzNzY+PjJdKSk8PSgwfGYpKXtWPTc7YnJlYWt9aWYodj0wfGFyW2crMTAzNjA+PjJdLGk9disoMyooKDB8YnIobCxmKSkrbXwwKXwwKXwwLCg2NTUzNSYoaT0oNjU1MzUmKGNyW2k+PjBdfGNyW2krMT4+MF08PDgpKT4+PjgmMyl8MCkhPSgwfHMpKXtWPTk7YnJlYWt9aWYoKG49KDB8YXJbZys1ODY4Pj4yXSk8KDB8QikpfHwoKDB8dSk8PSgwfGMpPzE6KDB8YXJbZys1ODY0Pj4yXSk+PSgwfEIpKXxHJjA9PSgwfGMpKXtpZihmPUU+PmgsISgtMTwoMHwoYT1yPj5oKSkmKDB8YSk8KDB8bCkpKXtWPTE2O2JyZWFrfWlmKCEoLTE8KDB8ZikmKDB8Zik8KDB8dykpKXtWPTE4O2JyZWFrfWw9disoMyooKDB8YnIobCxmKSkrYXwwKXwwKXwwLGw9MSYoVyYwPT0oMHxjKXxufDAhPSg1NiYoY3JbbD4+MF18Y3JbbCsxPj4wXTw8OCkpJihpPDwxNj4+MTY9PTE/MD09KGFyW2crMTM5Mj4+Ml18Y3wwKTowKSl9ZWxzZXtpZigzPD0oZj01LUJ8MCk+Pj4wKXtWPTEzO2JyZWFrfWw9MHxvdChJLCgwfGFyW0M+PjJdKSsoZisyMCl8MCl9aWYodz0wIT0oMHxsKSl7aWYobj0wfGFyW2crMTA0NDg+PjJdLGY9cj4+bixuPUU+Pm4sKDB8Zik8PS0xKXtWPTIzO2JyZWFrfWlmKCgwfChoPTB8YXJbZysxMDQ1Mj4+Ml0pKTw9KDB8Zikpe1Y9MjM7YnJlYWt9aWYoKDB8bik8PS0xKXtWPTI2O2JyZWFrfWlmKCgwfG4pPj0oMHxhcltnKzEwNDU2Pj4yXSkpe1Y9MjY7YnJlYWt9bT0oMHxhcltnKzEwNDQwPj4yXSkrKCgwfGJyKGgsbikpK2YpfDAsdHJbbT4+MF09MHxjclttPj4wXXwxPDxjfWlmKDM9PSgwfChnPTB8YXJbKGE9Zys1Nzc2fDApPj4yXSkpfDI8KDB8QikmMCE9KDB8Zyk/KGQ8PDI0Pj4yND8oZj1jKzE2fDAsbj0wfG90KEksKDB8YXJbQz4+Ml0pK2Z8MCksMj09KDB8YXJbYT4+Ml0pJiYzPT0oMHxCKXwwPT0oMHxsKSYmKG49KDB8b3QoSSwoMHxhcltDPj4yXSkrZnwwKSk8PDF8bikpOm49LTEsazw8MjQ+PjI0PyhoPWMrMTZ8MCxmPTB8b3QoSSwoMHxhcltDPj4yXSkraHwwKSwyPT0oMHxhclthPj4yXSkmJjM9PSgwfEIpfDA9PSgwfGwpJiYoZj0oMHxvdChJLCgwfGFyW0M+PjJdKStofDApKTw8MXxmKSk6Zj0tMSwoMHxuKTwwP1Y9Mzg6bD1uKTooZj0tMSxWPTM4KSwzOD09KDB8Vikpe2lmKChuPTI9PSgoVj0wKXxCKSkmMD09KDB8Yykpe1Y9Mzk7YnJlYWt9bD1uJjA8KDB8Yyk/MjU1JmQ6MH1pZihoPSgwfGYpPDA/Mj09KDB8QikmMDwoMHxjKT8yNTUmazowOmYsIXcpe1Y9NDM7YnJlYWt9aWYobj0oYT0xPDwoZj1CKy0xfDApKStyfDAsYT1hK0V8MCxBKGUscixFLHIsRSx0LG8sZixjPWMrMXwwLDAsdSxiLHMsZD0yNTUmbCxrPTI1NSZoKSxBKGUsbixFLHIsRSx0LG8sZixjLDEsdSxiLHMsZCxrKSxBKGUscixhLHIsRSx0LG8sZixjLDIsdSxiLHMsZCxrKSxnPTB8YXJbWD4+Ml0saD0wfGFyW2crMTAzNjg+PjJdLCgwfChtPW4+PmgpKTw9LTEpe1Y9NDticmVha31wPUUseT1yLHI9bixCPWYsWj0zLGY9KEU9YSk+Pmh9c3dpdGNoKDB8Vil7Y2FzZSA0OnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7YnJlYWs7Y2FzZSA3OnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7YnJlYWs7Y2FzZSA5OnNyKDM5MzQ0LDM5MjQyLDM4MjcsMzkzNjcpO2JyZWFrO2Nhc2UgMTM6c3IoMzkzODcsMzkyNDIsMTgyMCwzOTQxNik7YnJlYWs7Y2FzZSAxNjpzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2JyZWFrO2Nhc2UgMTg6c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTticmVhaztjYXNlIDIzOnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSk7YnJlYWs7Y2FzZSAyNjpzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpO2JyZWFrO2Nhc2UgMzk6c3IoMzk0NDQsMzkyNDIsMzg5NCwzOTM2Nyk7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gaTw8MTY+PjE2PT0wfDAhPShsfGN8aHwwKT8oVj0wfG90KEksKDB8YXJbQz4+Ml0pKygwPT0oMHxjKT8xNToxNCl8MCksdm9pZCB6YShlLHIsRSx5LHAsdCxvLEIsMCxaLFYsbCxoKSk6dm9pZCB6YShlLHIsRSx5LHAsdCxvLEIsMCxaLFY9MSxsLGgpfX0oQSxlLHIsZSxyLGUscixpLDAsMCxsLF8sUSxKLEopLHVyPWN9KEEsQix5LFoscCl9aWYoNDg9PSgwfGUpKXJldHVybn19ZnVuY3Rpb24gVWEoQSxlLHIsaSxmKXtyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKHQ9KGV8PTApPj4obD0wfGFyWyhBfD0wKSsxMDM2OD4+Ml0pLHU9cj4+bCxuPShpPTE8PChsPWktbHwwKSkrdXwwLDMxIT0oMHxsKSl7YT1pK3R8MCxjPUErMTAzNzJ8MCxsPUErMTAzNjB8MCxvPSgxJmYpPDwxMCY2NTUzNSxpPXU7ZG97Zm9yKGY9dDt1PSgwfGJyKDB8YXJbYz4+Ml0saSkpK2Z8MCx1PSgwfGFyW2w+PjJdKSsoMyp1fDApfDAsYj0tMTAyNSYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCl8byx0clt1Pj4wXT1iLHRyW3UrMT4+MF09Yj4+OCwoMHwoZj1mKzF8MCkpPCgwfGEpOyk7aT1pKzF8MH13aGlsZSgoMHxpKTwoMHxuKSl9aWYobz1lPj4oaT0wfGFyW0ErMTAzNDg+PjJdKSxpPXI+PmksKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMjgsNDg1MzkpLCgwfChmPTB8YXJbQSsxMDM1Mj4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDEyOCw0ODUzOSksKDB8aSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpLCgwfGkpPCgwfGFyW0ErMTAzNTY+PjJdKSlyZXR1cm4gYj0oMHxhcltBKzEwMzQwPj4yXSkrKDI0KigoMHxicihmLGkpKStvfDApfDApKzIyfDAsdm9pZCh0cltiPj4wXT0xKTtzcig0ODU0Myw0ODUxOSwxMjksNDg1MzkpfWZ1bmN0aW9uIFNhKEEsZSxyLGksZixuKXtlfD0wLHJ8PTAsZnw9MDt2YXIgdCxvLGEsYyxsPTAsdT0wO2lmKGM9MjU1Jigobnw9MCk/MTI4fGY6Ziksbz0xPDwodT0oaXw9MCktKDB8YXJbKEF8PTApKzEwNDA4Pj4yXSl8MCksbD0wfGFyW0ErNTg3Mj4+Ml0scj0oMHxicihyPj5sLDB8YXJbKGE9QSs1ODc2fDApPj4yXSkpKyhlPj5sKXwwLDMxIT0oMHx1KSl7dD1BKzU4ODB8MCxsPUErMTA0MzJ8MCx1PUErMTA0MjR8MCxpPUErMTA0MjB8MCxuPTA7QTpmb3IoOzspe2Y9MDtkb3tpZigoMHxmKT49KDB8YXJbYT4+Ml0pKXtmPTEwO2JyZWFrIEF9aWYoKDB8bik+PSgwfGFyW3Q+PjJdKSl7Zj0xMTticmVhayBBfWlmKCgwfChlPXIrZisoMHxicigwfGFyW2w+PjJdLG4pKXwwKSk+PSgwfGFyW3U+PjJdKSl7Zj0xMjticmVhayBBfXRyWygwfGFyW2k+PjJdKStlPj4wXT1jLGY9ZisxfDB9d2hpbGUoKDB8Zik8KDB8bykpO2lmKCgwfG8pPD0oMHwobj1uKzF8MCkpKXtmPTk7YnJlYWt9fTkhPSgwfGYpJiYoMTA9PSgwfGYpP3NyKDM5NTQyLDQ4NTE5LDY1OSwzOTU2NSk6MTE9PSgwfGYpP3NyKDM5NTg0LDQ4NTE5LDY2MCwzOTU2NSk6MTI9PSgwfGYpJiZzcigzOTYwOCw0ODUxOSw2NjMsMzk1NjUpKX19ZnVuY3Rpb24gT2EoQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTA7dmFyIGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wO2lmKGw9MHxhclsodz0oQXw9MCkrMTg2MDB8MCk+PjJdLGs9MHxvdChoPUErMTg1NTZ8MCwxNDcrKDB8YXJbKHU9QSsxODU4MHwwKT4+Ml0pfDApLGI9QSsxNnwwLHRyWyh2PUErMjZ8MCk+PjBdPSgyNTUmayk8PDQmMTZ8LTE3JnRyW3Y+PjBdLGspe0E6ZG97aWYoMjw9KDB8YXJbODA0KygwfGFyW3c+PjJdKT4+Ml0pJiYwIT0oMHxvdChoLDE0OCsoMHxhclt1Pj4yXSl8MCkpKWlmKDE8KCgwfGFyWzgwNCsoMHxhclt3Pj4yXSk+PjJdKS0xfDApKXtzPTE7ZG97aWYoISgwfGN0KGgpKSlicmVhayBBO3M9cysxfDB9d2hpbGUoKDB8cyk8KCgwfGFyWzgwNCsoMHxhclt3Pj4yXSk+PjJdKS0xfDApKX1lbHNlIHM9MTtlbHNlIHM9MH13aGlsZSgwKTtvPTMxJnRyW3Y+PjBdLHM9KDI1NSZzKTw8NSYyNTV9ZWxzZXtkb3tpZigwfGFyWzIwK2w+PjJdKWs9MTtlbHNle2lmKHM9MHxhclt1Pj4yXSwxMiE9KHQrbnwwKSYmMHxvdChoLHMrMTU2K298MCkpe2s9MzticmVha31rPTErKDB8b3QoaCxzKzE2MHwwKSl8MH19d2hpbGUoMCk7aWYodHJbdj4+MF09LTQmdHJbdj4+MF18MyZrLDIhPSgwfGspKXtzPSgwfGFyWzMyOCtsPj4yXSktMXwwO0E6ZG97aWYoMCE9KDB8cykmJjAhPSgwfG90KGgsMTU0KygwfGFyW3U+PjJdKXwwKSkpZm9yKG89MDs7KXtpZigoMHwoZD1vKzF8MCkpPT0oMHxzKSlicmVhayBBO2lmKCEobz1vPzB8Y3QoaCk6MHxvdChoLDE1NSsoMHxhclt1Pj4yXSl8MCkpKXtzPWQ7YnJlYWt9bz1kfWVsc2Ugcz0wfXdoaWxlKDApO2lmKHRyW2I+PjBdPXMseGEoQSwwLDAsMCksZD0yNTUmKDB8b3QoaCwxNTIrKDB8YXJbdT4+Ml0pfDApKSx0clt2Pj4wXT1kPDwyJjR8LTUmdHJbdj4+MF0sMT09KDB8aykpcmV0dXJuIHZvaWQgbWMoaD0wfGFyWyhoPUErMTg1OTJ8MCk+PjJdLHc9MHxhclt3Pj4yXSx2PTB8YXJbKHY9QSsxODU5NnwwKT4+Ml0sYixlLHIsaSxmLGEsbix0LGMpfWQ9KDB8YXJbMzMyK2w+PjJdKS0xfDA7QTpkb3tpZigwIT0oMHxkKSYmMCE9KDB8b3QoaCwxNTQrKDB8YXJbdT4+Ml0pfDApKSlmb3Iobz0wOzspe2lmKCgwfChzPW8rMXwwKSk9PSgwfGQpKXtzPWQ7YnJlYWsgQX1pZighKG89bz8wfGN0KGgpOjB8b3QoaCwxNTUrKDB8YXJbdT4+Ml0pfDApKSlicmVhaztvPXN9ZWxzZSBzPTB9d2hpbGUoMCk7dHJbQSsxNz4+MF09cywzPT0oMHxrKSYwIT0oMHx0clszNzArbD4+MF0pPyhvcltBKzIyPj4xXT0wLG9yW0ErMjQ+PjFdPTApOnhhKEEsMCwwLDEpLHM9MjU1JigwfG90KGgsMTUyKygwfGFyW3U+PjJdKXwwKSksbz0tOSZ0clt2Pj4wXSxzPXM8PDMmOH10clt2Pj4wXT1vfHMsbWMoaD0wfGFyWyhoPUErMTg1OTJ8MCk+PjJdLHc9MHxhclt3Pj4yXSx2PTB8YXJbKHY9QSsxODU5NnwwKT4+Ml0sYixlLHIsaSxmLGEsbix0LGMpfWZ1bmN0aW9uIHphKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCxifD0wO3ZhciBzLGQsayxoLHcsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7LTE9PSgwfCh1fD0wKSkmJnNyKDM5NDgxLDM5MjQyLDM1NDcsMzk0OTQpLC0xPT0oMHxiKSYmc3IoMzk1MTQsMzkyNDIsMzU0OCwzOTQ5NCksLTE9PSgwfGwpJiZzcigzOTUyNywzOTI0MiwzNTQ5LDM5NDk0KSxnPTB8YXJbKHc9QSsxODU5NnwwKT4+Ml0sWD0yPCgwfChYPSgoMV4oZD0zPT0oMHwoaz0wfGFyW2crNTc3Nj4+Ml0pKSkpPDwzMT4+MzEpK298MCkpP1g6MixaPWJ8dSx0clsodj1BKzMzfDApPj4wXT0wLHRyW3YrMT4+MF09MCx0clt2KzI+PjBdPTAsYT1lPj4odj0odHJbdiszPj4wXT0wKXxhcltnKzEwMzY4Pj4yXSksdj1yPj52LCgwfGEpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW2crMTAzNzI+PjJdKSk8PSgwfGEpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHYpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx2KT49KDB8YXJbZysxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLEU9KDB8YXJbZysxMDM2MD4+Ml0pKygzKigoMHxicihtLHYpKSthfDApfDApfDAsaD02NTUzNSYoRT0oNjU1MzUmKGNyW0U+PjBdfGNyW0UrMT4+MF08PDgpKT4+PjgmMykscz0wIT0oMHxsKSxtPTAhPSgwfFopO2Rve2lmKFp8bHwwKXtpZigwIT0oMHx0cltnKzU5NDY+PjBdKSYmMD09KDB8YXJbKHA9QSsxODUwOHwwKT4+Ml0pKXt2PUErMTg1NTZ8MCxhPUErMTg1ODB8MDtkb3tpZigwfG90KHYsMTM5KygwfGFyW2E+PjJdKXwwKSl7aWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpaWYoMHxvdCh2LDE0MCsoMHxhclthPj4yXSl8MCkpe2lmKCEoYT01KygwfGJ0KHYsMCkpfDApKXthPXY9MDticmVha319ZWxzZSBhPTQ7ZWxzZSBhPTM7ZWxzZSBhPTI7ZWxzZSBhPTE7dj0wfGN0KHYpfWVsc2UgYT12PTB9d2hpbGUoMCk7YXJbcD4+Ml09MSxnPTB8YnIoMS0odjw8MSl8MCxhKSxhcltBKzE4NTEyPj4yXT1nLGc9MX1lbHNlIGc9MDtpZihtJjAhPSgwfHRyWzc1MisoMHxhcltBKzE4NjAwPj4yXSk+PjBdKSYmMD09KDB8dHJbQSszMj4+MF0pJiYwPT0oMHxhclsoeT1BKzE4NTE2fDApPj4yXSk/KHA9MHxvdCh2PUErMTg1NTZ8MCwyMysoMHxhclsoYT1BKzE4NTgwfDApPj4yXSl8MCksbT0wfGFyW3c+PjJdLGE9cD8oYT0xPCgwfGNyW20rMTAwNzQ+PjBdKT8wfG90KHYsMjQrKDB8YXJbYT4+Ml0pfDApOjAsYXJbeT4+Ml09MSxhcltBKzE4NTIwPj4yXT10clttKzEwMDc1K2E+PjBdLDB8dHJbbSsxMDA4MSthPj4wXSk6KGFyW3k+PjJdPTEsYXJbQSsxODUyMD4+Ml09MCksYXJbQSsxODUyND4+Ml09YSk6Qj0zMywzMz09KDB8QikmJiFnKWJyZWFrO3puKEEsZSxyLG4sdCl9fXdoaWxlKDApO2lmKG09MTw8byxwPTE8PFgsQj0wfGFyW3c+PjJdLHk9MHxhcltCKzU3ODA+PjJdLEI9MHxhcltCKzU3ODQ+PjJdLGFyWyhsPUErMjh8MCk+PjJdPTAscyYmamEoQSxlLHIsbywwKSxIYShBLGUscixuLHQsbSwwLGgscyksISgyPCgwfG8pfGQpKXJldHVybiAzIT0oMHxjKT8wOigoYT0wIT0oMSZ1fDApKSYmamEoQSxpLGYsbywxKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxpKS8oMHx5KXwwLCgwfGYpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLG0sMSxoLGEpLChhPTAhPSgyJnV8MCkpJiZqYShBLGksbStmfDAsbywxKSwodj0yPT0oMHxrKSkmJkhhKEEsKDB8aSkvKDB8eSl8MCwoKDB8ZikvKDB8Qil8MCkrbXwwLCgwfG4pLygwfHkpfDAsKDB8dCkvKDB8Qil8MCxtLDEsaCxhKSwoYT0wIT0oMSZifDApKSYmamEoQSxpLGYsbywyKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxpKS8oMHx5KXwwLCgwfGYpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLG0sMixoLGEpLChhPTAhPSgyJmJ8MCkpJiZqYShBLGkscCtmfDAsbywyKSx2JiZIYShBLCgwfGkpLygwfHkpfDAsKCgwfGYpLygwfEIpfDApK218MCwoMHxuKS8oMHx5KXwwLCgwfHQpLygwfEIpfDAsbSwyLGgsYSksMCk7Zz0wfGFyW3c+PjJdO0E6ZG97aWYocyYwIT0oMHx0cltnKzEwMDcxPj4wXSkpe2Rve2lmKEU8PDE2Pj4xNiE9MSl7aWYoYT1lPj4odj0wfGFyW2crMTA0Mjg+PjJdKSx2PXI+PnYsKDB8YSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChtPTB8YXJbZysxMDQzMj4+Ml0pKTw9KDB8YSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8dik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfHYpPCgwfGFyW2crMTA0MzY+PjJdKSl7aWYobz0oMHxhcltnKzEwNDIwPj4yXSkrKCgwfGJyKG0sdikpK2EpfDAsKDB8dHJbbz4+MF0pPDApYnJlYWs7dj1hPTA7YnJlYWsgQX1zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfX13aGlsZSgwKTtmb3IobT1BKzE4NTU2fDAsZz1BKzE4NTgwfDAsdj1hPTA7dj0oMSYobz0wIT0oMHxvdChtLCgwfGFyW2c+PjJdKSsoYSsxNjIpfDApKSkpK3Z8MCwoMHwoYT1hKzF8MCkpPDQmbzspO3Y9KGE9dj8xLSgoMHxvdChtLDE3MCsoMHxhcltnPj4yXSl8MCkpPDwxKTw8distMTowLDEpfWVsc2Ugdj1hPTB9d2hpbGUoMCk7aWYoYXJbbD4+Ml09YSwoYT0wIT0oMSZ1fDApKSYmamEoQSxlLHIsWCwxKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxlKS8oMHx5KXwwLCgwfHIpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLHAsMSxoLGEpLChaPTI9PSgwfGspKSYmKChhPTAhPSgyJnV8MCkpJiZqYShBLGUsKEI8PFgpK3J8MCxYLDEpLEhhKEEsKDB8ZSkvKDB8eSl8MCwoKDB8cikvKDB8Qil8MCkrcHwwLCgwfG4pLygwfHkpfDAsKCgwfHQpLygwfEIpfDApK3B8MCxwLDEsaCxhKSksdil7Zm9yKG09QSsxODU1NnwwLGc9QSsxODU4MHwwLHY9YT0wO3Y9KDEmKHU9MCE9KDB8b3QobSwoMHxhcltnPj4yXSkrKGErMTY2KXwwKSkpKSt2fDAsKDB8KGE9YSsxfDApKTw0JnU7KTthPXY/MS0oKDB8b3QobSwxNzErKDB8YXJbZz4+Ml0pfDApKTw8MSk8PHYrLTE6MH1lbHNlIGE9MDtyZXR1cm4gYXJbbD4+Ml09YSwoYT0wIT0oMSZifDApKSYmamEoQSxlLHIsWCwyKSwwfGFyWzU3NzYrKDB8YXJbdz4+Ml0pPj4yXSYmSGEoQSwoMHxlKS8oMHx5KXwwLCgwfHIpLygwfEIpfDAsKDB8bikvKDB8eSl8MCwoMHx0KS8oMHxCKXwwLHAsMixoLGEpLFomJigoYT0wIT0oMiZifDApKSYmamEoQSxlLChCPDxYKStyfDAsWCwyKSxIYShBLCgwfGUpLygwfHkpfDAsKCgwfHIpLygwfEIpfDApK3B8MCwoMHxuKS8oMHx5KXwwLCgoMHx0KS8oMHxCKXwwKStwfDAscCwyLGgsYSkpLDB9ZnVuY3Rpb24gamEoQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGLFIsTixfLFksUSxELEosTSxULFUsUyxPLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wLEs9MCxxPTAsJD0wLEFBPTAsZUE9MCxyQT0wLGlBPTAsZkE9MCxuQT0wLHRBPTAsb0E9MCxhQT0wLGNBPTAsbEE9MCx1QT0wLGJBPTA7aWYodXI9KEo9dXIpKzE2MHwwLGlBPUorMTQ0fDAsXz1KKzgwfDAsUT0oWT1KKSs2NHwwLEQ9Sis0OHwwLE49SiszMnwwLHJBPShmQT0wfGFyWyhBfD0wKSsxODU5Nj4+Ml0pKzc2NHwwLHo9ZT4+KGo9MHxhcltmQSsxMDM2OD4+Ml0pLGo9cj4+aiwoMHx6KTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KEg9MHxhcltmQSsxMDM3Mj4+Ml0pKTw9KDB8eikmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8aik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGopPj0oMHxhcltmQSsxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLEFBPSgwfGFyW2ZBKzEwMzYwPj4yXSkrKDMqKCgwfGJyKEgsaikpK3p8MCl8MCl8MCxBQT0oNjU1MzUmKGNyW0FBPj4wXXxjcltBQSsxPj4wXTw8OCkpPj4+OCYzLChSPTA9PSgwfGYpKSYmKEs9ZT4+KHVBPTB8YXJbZkErMTA0NDg+PjJdKSxMPXI+PnVBLHE9KHg9MTw8KHVBPWktdUF8MCkpK0x8MCwzMSE9KDB8dUEpKSl7SD14K0t8MCx4PWZBKzEwNDUyfDAsUD1mQSsxMDQ0MHwwLHo9TDtkb3tmb3Ioaj1LO3VBPSgwfGJyKDB8YXJbeD4+Ml0seikpK2p8MCx1QT0oMHxhcltQPj4yXSkrdUF8MCx0clt1QT4+MF09LTEyOHx0clt1QT4+MF0sKDB8KGo9aisxfDApKTwoMHxIKTspO3o9eisxfDB9d2hpbGUoKDB8eik8KDB8cSkpfXo9MCE9KDB8dHJbZkErNTk0NT4+MF0pJiYwPT0oMHx0cltBKzMyPj4wXSkmJigwfGFyW2ZBKzEwMTAwPj4yXSk+PSgwfGkpPzI1NSYoMHxvdChBKzE4NTU2fDAsKDB8YXJbQSsxODU4MD4+Ml0pKygwfGY/MTQyOjE0MSl8MCkpOjAsdHJbKHVBPUErMzMrZnwwKT4+MF09eix0clsoRj1BKzM2fDApPj4wXT0wO2Rve2lmKEFBPDwxNj4+MTY9PTEmJjAhPSgwfHRyW2ZBKzU3NTE+PjBdKSl7aWYoMD09KDB8dHJbdUE+PjBdKSYmMD09KDB8dHJbQSszMj4+MF0pKXtiQT0yMzticmVha31IPTAhPSgwfGYpJjEsbEE9MjU1JigwfG90KGo9QSsxODU1NnwwLDE0MysoMHxhclsoej1BKzE4NTgwfDApPj4yXSkrSHwwKSksKHRyW0Y+PjBdPWxBKTw8MjQ+PjI0JiYobEE9MjU1JigwfG90KGosMTQ1KygwfGFyW3o+PjJdKStIfDApKSx0cltBKzM3Pj4wXT1sQSl9ZWxzZSBiQT0yM313aGlsZSgwKTtpZigyMz09KDB8YkEpJiYodHJbRj4+MF09MCksej1SPzI6MCwwPT0oMHx0clt1QT4+MF0pJiYwPT0oMHx0cltBKzMyPj4wXSl8fCh6fD0xKSx4PTI1KygwfGFyWyhWPUErMTg1ODB8MCk+PjJdKXwwLCQ9KGNBPWk8PDEpKy0xfDAsbEE9aSstMnwwLEw9Uj9pKzE+PjI6bEEsSz1SPygzKmxBfDApKyhpKy0xPj4yKXwwOjE1LDE8KDB8Y0EpKXtmb3IocT1BKzE4NTU2fDAsaj0kLEg9MDtqPShjQT0wPT0oMHxvdChxLHgrKChIPj5MKStLKXwwKSkpP0g6aiwoMHwoSD1IKzF8MCkpPCgwfCQpJigxXmNBKTspO2ZvcihQPTQzKygwfGFyW1Y+PjJdKXwwLHg9JCxIPTA7eD0oY0E9MD09KDB8b3QocSxQKygoSD4+TCkrSyl8MCkpKT9IOngsKDB8KEg9SCsxfDApKTwoMHwkKSYoMV5jQSk7KTt9ZWxzZSBqPXg9JDtpZihIPShqPj4xKS0xfDAsMzwoMHxqKSYmKGo9KDB8dXQoQSsxODU1NnwwLEgpKSsoKDEmanwyKTw8SCl8MCksSD0oeD4+MSktMXwwLEw9MzwoMHx4KT8oMHx1dChBKzE4NTU2fDAsSCkpKygoMSZ4fDIpPDxIKXwwOngsY0E9QUE8PDE2Pj4xNj09MCl7ZG97aWYoUil7aWYoSD1lPj4oeD0wfGFyW2ZBKzEwNDA4Pj4yXSkseD1yPj54LCgwfEgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoUD0wfGFyW2ZBKzEwNDEyPj4yXSkpPD0oMHxIKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx4KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8eCk8KDB8YXJbZkErMTA0MTY+PjJdKSl7ZUE9KDB8YXJbZkErMTA0MDA+PjJdKSsoKDB8YnIoUCx4KSkrSCl8MCxlQT0wfHRyW2VBPj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2V7aWYoSD1lPj4oeD0wfGFyW2ZBKzEwNDI4Pj4yXSkseD1yPj54LCgwfEgpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoUD0wfGFyW2ZBKzEwNDMyPj4yXSkpPD0oMHxIKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx4KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8eCk8KDB8YXJbZkErMTA0MzY+PjJdKSl7ZUE9KDB8YXJbZkErMTA0MjA+PjJdKSsoKDB8YnIoUCx4KSkrSCl8MCxlQT02MyZ0cltlQT4+MF07YnJlYWt9c3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KX19d2hpbGUoMCk7SD0oYUE9Mj09KDB8KHg9MHxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZj0wO3N3aXRjaCgwfChBfD0wKSl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpmPTI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gMH1yZXR1cm4gMj09KDB8ZikmJjB8ciYmMyE9KDB8YXJbaSs1MDEyPj4yXSk/MDowfCgoZSstNnwwKT4+PjA8OT8yOihlKy0yMnwwKT4+PjA8OSYxKX0oaSwyNTUmZUEsZixyQSkpKSk/ajpMLGo9YUE/TDpqfWVsc2UgeD0wLEg9TDtHPTB8X2EobEEseCksYUE9MHxfYSgyLHgpLE09aUEsVD1qLFU9SCxTPXgsTz1pLE18PTAsVHw9MCxVfD0wLE89KDB8YXJbNzg1MisoMjQqKFN8PTApfDApKygoT3w9MCk8PDIpPj4yXSkrKChVPDxPKStUPDwxKXwwLE89Y3JbTz4+MF18Y3JbTysxPj4wXTw8OCx0cltNPj4wXT1PLHRyW00rMT4+MF09Tz4+OCxDPTB8dHJbaUErMT4+MF0sRT0wfGNyW2lBPj4wXSx2YigwfF8sMCwxPDxsQTw8bEF8MCksVz1BKzE4NTU2fChvclsoWD1BKzE0NDA0KyhmPDwxKXwwKT4+MV09MCksST0wIT0oMHxmKSYxLHU9MCE9KDB8eCkmMSxiPSgyNTUmQyktMXwwLHM9ZkErNTc0OXwwLGQ9QSszMnwwLGs9Uj80Mjo0MyxoPUM8PDI0Pj4yNCE9MCx3PTA8KDB8Ziksdj1mQSsxMDQwOHwwLG09ZkErMTA0MTJ8MCxnPWZBKzEwNDE2fDAsWj1mQSsxMDQwMHwwLHA9ZkErNTc1MHwwLHk9ZkErNTkzNnwwLEI9ZkErNTc1NXwwLG89QSsxODU4OCt6fDAsYT1mQSsxMDQyOHwwLGM9ZkErMTA0MzJ8MCxsPWZBKzEwNDM2fDAsbj1mQSsxMDQyMHwwLHQ9MTwoMjU1JkMpLHo9MSxvQT1FLGo9QUE9MDtBOmZvcig7Oyl7Sz0wfHRyW0crKG9BPDwxKT4+MF0scT0wfHRyW0crKG9BPDwxKSsxPj4wXSwoMHxvQSk8KDB8RSkmMCE9KDB8b0EpPyh0QT0xJih0QT0wfGNyW18rKCh4PShIPTI1NSZxKTw8bEEpKyhQPTI1NSZLKSk+PjBdKXx0QT4+PjEsMHxvdChXLCgwfGFyW1Y+PjJdKSsoKFI/dEE6dEErMnwwKSs2MSl8MCk/KEw9MSxiQT01OSk6KHg9MSxIPTApKTowPT0oMHxvQSl8KDB8b0EpPT0oMHxFKT8oTD0wLEg9eD0yNTUmcSx4PDw9bEEsUD0yNTUmSyxiQT01OSk6SD14PTAsNTk9PSgwfGJBKSYmKHg9XysoUCstMSt4KXwoYkE9MCksSzw8MjQ+PjI0JiYodHJbeD4+MF09MXx0clt4Pj4wXSksSD1fKygoSCstMTw8bEEpK1ApfDAsSD0oeD0ocTw8MjQ+PjI0JiYodHJbSD4+MF09Mnx0cltIPj4wXSksTCksMSkpO2Rve2lmKEgpe2lmKHRBPSgkPTI1NSZLKTw8MixuQT0ocSY9MjU1KTw8MixxPTB8YXJbNTczMDgrKGxBPDw2KSsoSTw8NSkrKHU8PDQpKyhjcltfKygocTw8bEEpKyQpPj4wXTw8Mik+PjJdLCgkPSgwfG9BKT09KDB8RSkpPyhvcltZPj4xXT0xLHRyW04+PjBdPTEsdHJbUT4+MF09Qyx0PyhLPWIsSD14LHg9MSxiQT02Nyk6KEg9eCx4PTEpKTooSz0xNSxIPXgseD0wLGJBPTY3KSw2Nz09KDB8YkEpKWZvcig7Oyl7UD0oKGJBPTApfGNyW2FBKyhLPDwxKT4+MF0pK3RBfDAsTD0oMHxjclthQSsoSzw8MSkrMT4+MF0pK25BfDA7ZG97aWYoMHx0cltzPj4wXSl7aWYoMHx0cltkPj4wXSl7UD1rO2JyZWFrfTB8dHJbdUE+PjBdP1A9azpiQT03MH1lbHNlIGJBPTcwfXdoaWxlKDApO2lmKDcwPT0oMHxiQSkmJihQPShiQT0wKXxjcltxKyhQKyhMPDxpKSk+PjBdKSwwfG90KFcsKDB8YXJbVj4+Ml0pKyhQKzY1KXwwKSYmKG9yW1krKHg8PDEpPj4xXT0xLHRyW04reD4+MF09MSx0cltRK3g+PjBdPUsseD14KzF8KEg9MCkpLCEoMTwoMHxLKSkpYnJlYWs7Sz1LKy0xfDAsYkE9Njd9ZG97aWYoaHwxXiQpe2lmKDB8SCl7b3JbWSsoeDw8MSk+PjFdPTEsZkE9eCsodHJbTit4Pj4wXT0xKXwodHJbUSt4Pj4wXT0wKTticmVha31kb3tpZigwfHRyW3M+PjBdKXtpZigwfHRyW2Q+PjBdKXtIPWs7YnJlYWt9MHx0clt1QT4+MF0/SD1rOmJBPTc4fWVsc2UgYkE9Nzh9d2hpbGUoMCk7aWYoNzg9PSgwfGJBKSYmKEg9KGJBPTApfGNyW3ErKChuQTw8aSkrdEEpPj4wXSksISgwfG90KFcsKDB8YXJbVj4+Ml0pKyhIKzY1KXwwKSkpe2ZBPXg7YnJlYWt9b3JbWSsoeDw8MSk+PjFdPTEsZkE9eCsodHJbTit4Pj4wXT0xKXwodHJbUSt4Pj4wXT0wKX1lbHNlIGZBPXh9d2hpbGUoMCk7aWYoZkEpe3E9MD09KDB8eil8KHd8MD09KDB8b0EpPzA6MiksTD0oMHxmQSk8OD9mQTo4LCQ9MDwoMHxmQSk7ZG97aWYoJCl7aWYoSz1xPDwyLHcpZm9yKFA9MCx4PS0xLHo9MSxIPUFBO2o9UD8wPCgwfGopPzE9PSgwfEgpPzA6aisxfDA6ajoxLHo9KEg9MHxvdChXLCgwfGFyW1Y+PjJdKSsoKCgwfGopPDM/ajozKStLKzEyNSl8MCkpPyhvclsoej1ZKyhQPDwxKXwwKT4+MV09MSsoMHxvclt6Pj4xXSk8PDE2Pj4xNix4PS0xPT0oMHx4KT9QOngsMCk6KCh6Ky0xfCh0cltOK1A+PjBdPTApKT4+PjA8MiYxKSt6fDAsKDB8KFA9UCsxfDApKTwoMHxMKTspO2Vsc2UgZm9yKFA9MCx4PS0xLHo9MSxIPUFBO2o9UD8wPCgwfGopPzE9PSgwfEgpPzA6aisxfDA6ajoxLHo9KEg9MHxvdChXLCgwfGFyW1Y+PjJdKSsoKCgwfGopPDM/ajozKStLKzEwOSl8MCkpPyhvclsoej1ZKyhQPDwxKXwwKT4+MV09MSsoMHxvclt6Pj4xXSk8PDE2Pj4xNix4PS0xPT0oMHx4KT9QOngsMCk6KCh6Ky0xfCh0cltOK1A+PjBdPTApKT4+PjA8MiYxKSt6fDAsKDB8KFA9UCsxfDApKTwoMHxMKTspO2lmKC0xPT0oMHx4KSlicmVhaztpQT0wfG90KFcsKDB8YXJbVj4+Ml0pKygodz80fHE6cSkrMTMzKXwwKSxvclsockE9WSsoeDw8MSl8MCk+PjFdPSgwfGxyW3JBPj4xXSkraUEsdHJbTit4Pj4wXT1pQX1lbHNlIHo9MSxIPUFBfXdoaWxlKDApO2lmKFIpe2lmKHg9ZT4+KFA9MHxhclt2Pj4yXSksUD1yPj5QLCgwfHgpPD0tMSl7YkE9MTAyO2JyZWFrIEF9aWYoKDB8KEw9MHxhclttPj4yXSkpPD0oMHx4KSl7YkE9MTAyO2JyZWFrIEF9aWYoKDB8UCk8PS0xKXtiQT0xMDU7YnJlYWsgQX1pZigoMHxQKT49KDB8YXJbZz4+Ml0pKXtiQT0xMDU7YnJlYWsgQX14PSgwfGFyW1o+PjJdKSsoKDB8YnIoTCxQKSkreCl8MCx4PTB8dHJbeD4+MF19ZWxzZXtpZih4PWU+PihQPTB8YXJbYT4+Ml0pLFA9cj4+UCwoMHx4KTw9LTEpe2JBPTEwOTticmVhayBBfWlmKCgwfChMPTB8YXJbYz4+Ml0pKTw9KDB8eCkpe2JBPTEwOTticmVhayBBfWlmKCgwfFApPD0tMSl7YkE9MTEyO2JyZWFrIEF9aWYoKDB8UCk+PSgwfGFyW2w+PjJdKSl7YkE9MTEyO2JyZWFrIEF9eD0oMHxhcltuPj4yXSkrKCgwfGJyKEwsUCkpK3gpfDAseD02MyZ0clt4Pj4wXX1lOmRve2lmKDB8dHJbZD4+MF0pUD0wO2Vsc2V7ZG97aWYoY0Epe2lmKCEoMHx0cltwPj4wXSkpYnJlYWs7aWYoKDE2fHgpPDwyND4+MjQ9PTI2JjAhPSgwfHRyW3VBPj4wXSkpe1A9MDticmVhayBlfX19d2hpbGUoMCk7aWYoMHx0cltGPj4wXSl7UD0wO2JyZWFrfVA9MzwoKDB8dHJbUT4+MF0pLSgwfHRyW1ErKGZBKy0xKT4+MF0pfDApJjF9fXdoaWxlKDApO2lmKGlBPWZBKy0xfDAsMTwoMHxmQSkpZm9yKHg9MDtyQT0yNTUmKDB8Y3QoVykpLHRyW0QreD4+MF09ckEsKDB8KHg9eCsxfDApKSE9KDB8aUEpOyk7aWYoeD0ockE9MCE9KDB8UCkpJjAhPSgwfHRyW3k+PjBdKT8wOjI1NSYoMHxjdChXKSksdHJbRCtpQT4+MF09eCx4PTB8dHJbQj4+MF0/KDB8Y3Jbbz4+MF0pPj4+MiYyNTU6MCwhJClicmVhazskPTEsUD1lQT0wO2Rve0FBPTB8b3JbWSsoZUE8PDEpPj4xXTtkb3tpZigwfHRyW04rZUE+PjBdKXtmb3IoSz0tMTs7KXtpZihMPUsrMXwwLHE9MHxjdChXKSw2MzwoMHxLKSl7cT0wO2JyZWFrfWlmKCFxKXtiQT0xMzA7YnJlYWt9Sz1MfWlmKDEzMD09KDB8YkEpJiYoKChiQT0wKXxMKTw0P0s9MHx1dChXLHgpOihLPTB8dXQoVywoTD1LKy0yfDApK3h8MCksTD0yKygxPDxMKXwwKSxxPShMPDx4KStLfDApLEs9MD09KDB8dHJbQj4+MF0pLEw9eCsxfDAseD0oMzw8eHwwKTwocStBQXwwKT8hS3x8KDB8TCk8ND9MOjQ6eCxLfDFeJCl7JD0wO2JyZWFrfWlmKCgzPDwoSz0oMjU1JihMPTB8dHJbbz4+MF0pKT4+PjImMjU1KXwwKTw9KDB8cSkpe3RyW28+PjBdPUwrMTw8MjQ+PjI0LCQ9MDticmVha31pZihMPDwyND4+MjQ9PTB8KDE8PEt8MCk8PShxPDwxfDApKXskPTA7YnJlYWt9dHJbbz4+MF09TCstMTw8MjQ+PjI0LCQ9MH1lbHNlIHE9MH13aGlsZSgwKTtLPXErQUF8MCxMPTY1NTM1JihxPTA9PSgwfHRyW0QrZUE+PjBdKT9LOjAtKDY1NTM1JkspfDApO2Rve2lmKHJBJjAhPSgwfHRyW3k+PjBdKSl7aWYoKDB8ZUEpIT0oMHxpQSl8MD09KDEmKFA9SytQfDApfDApKWJyZWFrO0w9MC1xJjY1NTM1fX13aGlsZSgwKTtBQT0wfHRyW1ErZUE+PjBdLHE9KDB8Y3JbYUErKEFBPDwxKT4+MF0pK3RBfDAsQUE9KDB8Y3JbYUErKEFBPDwxKSsxPj4wXSkrbkF8MCxvcltBKzIxMTYrKGY8PDExKSsob3JbWD4+MV08PDEpPj4xXT1MLG9yW0ErODI2MCsoZjw8MTEpKyhvcltYPj4xXTw8MSk+PjFdPXErKEFBPDxpKSxvcltYPj4xXT0xKygwfG9yW1g+PjFdKTw8MTY+PjE2LGVBPWVBKzF8MH13aGlsZSgoMHxlQSkhPSgwfGZBKSl9ZWxzZSBIPUFBfWVsc2UgSD1BQX13aGlsZSgwKTtpZighKDA8KDB8b0EpKSl7YkE9NTQ7YnJlYWt9b0E9b0ErLTF8MCxBQT1IfXJldHVybiA1ND09KDB8YkEpP3VyPUo6MTAyPT0oMHxiQSk/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KToxMDU9PSgwfGJBKT9zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpOjEwOT09KDB8YkEpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTEyPT0oMHxiQSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksMH1mdW5jdGlvbiBIYShBLGUscixpLGYsbix0LG8sYSl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBjLGwsdSxiPTAscz0wLGQ9MDtpZihjPTB8YXJbKGw9KEF8PTApKzE4NTk2fDApPj4yXSx1PTA9PSgwfG8pKXtkb3tpZih0KXtpZihvPTB8YnIoMHxhcls1NzgwK2M+PjJdLGUpLHM9MHxicigwfGFyWzU3ODQrYz4+Ml0sciksbz4+PWI9MHxhclsxMDQyOCtjPj4yXSxiPXM+PmIsKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChzPTB8YXJbMTA0MzIrYz4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Yik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGIpPCgwfGFyWzEwNDM2K2M+PjJdKSl7ZD0oMHxhclsxMDQyMCtjPj4yXSkrKCgwfGJyKHMsYikpK28pfDAsZD02MyZ0cltkPj4wXTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2V7aWYobz1lPj4oYj0wfGFyWzEwNDA4K2M+PjJdKSxiPXI+PmIsKDB8byk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChzPTB8YXJbMTA0MTIrYz4+Ml0pKTw9KDB8bykmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Yik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGIpPCgwfGFyWzEwNDE2K2M+PjJdKSl7ZD0oMHxhclsxMDQwMCtjPj4yXSkrKCgwfGJyKHMsYikpK28pfDAsZD0wfHRyW2Q+PjBdO2JyZWFrfXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fXdoaWxlKDApO0d0KGMsZSxyLGI9MzQ8KDI1NSZkKT8xOjI1NSZkLG4sdCk7ZG97aWYoMHx0cls1NzUwKygwfGFyW2w+PjJdKT4+MF0pe2lmKDA9PSgwfHRyW0ErMzI+PjBdKSYmMD09KDB8dHJbQSszMyt0Pj4wXSkpe289MDticmVha31vPTI2PT0oMTZ8Yil9ZWxzZSBvPTB9d2hpbGUoMCk7bz0yNj09KDB8Yikmbz8yOjEmb31lbHNlIG89MHx0cltBKzM2Pj4wXT8wfHRyW0ErMzc+PjBdPzI6MTowO2E/am4oQSxlLHIsaSxmLG4sdCwwIT0oMHx0cltBKzMzK3Q+PjBdKSx1LG8pOnQmJjB8YXJbQSsyOD4+Ml0mJmpuKEEsZSxyLGksZixuLHQsKG9yW0ErMTQ0MDQrKHQ8PDEpPj4xXT0wKSE9KDB8dHJbQSszMyt0Pj4wXSksdSwwKX1mdW5jdGlvbiB4YShBLGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO3VyPShuPXVyKSsxNnwwLGw9bix0PTB8b3QoYz0oQXw9MCkrMTg1NTZ8MCwxNTArKDB8YXJbKHI9QSsxODU4MHwwKT4+Ml0pfDApLGU9MHxvdChjLDE1MCsoMHxhcltyPj4yXSl8MCksbz0odD0wPT0oMHx0KSk/MDowfG90KGMsMTUxKygwfGFyW3I+PjJdKXwwKSxhPShmPTA9PSgwfGUpKT8wOjB8b3QoYywxNTErKDB8YXJbcj4+Ml0pfDApLHQ/KHI9bCxlPTAsdT0xMSk6KHQ9bz8wfGJ0KGMsMSk6LTEsbz0wfGN0KGMpLGU9dCsyfDAsYXJbbD4+Ml09ZSxvPyhyPWwsZT0tMi10fDAsdT0xMSk6bz1lKSwxMT09KDB8dSkmJihvPWFyW3I+PjJdPWUpO2Rve2lmKCFmKXtpZih0PWE/MHxidChjLDEpOi0xLHU9MHxjdChjKSxlPXQrMnwwLGFyWyhyPWwrNHwwKT4+Ml09ZSx1KXtlPS0yLXR8MDticmVha31yZXR1cm4gdT1lLGM9NjU1MzUmbyxvclsobD1BKzE4KyhpPDwyKXwwKT4+MV09Yyx1Jj02NTUzNSxvclsoaT1BKzE4KyhpPDwyKSsyfDApPj4xXT11LHZvaWQodXI9bil9cj1sKzR8MCxlPTB9d2hpbGUoMCk7dT1hcltyPj4yXT1lLGM9NjU1MzUmbyxvclsobD1BKzE4KyhpPDwyKXwwKT4+MV09Yyx1Jj02NTUzNSxvclsoaT1BKzE4KyhpPDwyKSsyfDApPj4xXT11LHVyPW59ZnVuY3Rpb24gUGEoQSxlLHIpe0F8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2lmKGw9MHx0clsocnw9MCkrOTM3ODQrKDQ0MDAqKDB8YXJbKGV8PTApKzg+PjJdKXwwKSsyPj4wXSxkPTB8aXQoQSksNzwodHJbKGE9ZSszODB8MCk+PjBdPWQpPj4+MClyZXR1cm4odz0wKXx3O2Q9cisxMTA5NisoNTE2OCpsfDApKzQ3NnwwO2Rve2lmKDB8YXJbZD4+Ml0pe2lmKGM9MHxmdChBKSw3PChjPSgwfGNyW2E+PjBdKStjfDApPj4+MClyZXR1cm4odz0wKXx3O3RyWyhzPWUrMzgxfDApPj4wXT1jO2JyZWFrfXM9ZSszODF8MH13aGlsZSgwKTtuPWUrMzMyfDAsdD1lKzMyOHwwLG89cisxMTA5NisoNTE2OCpsfDApKzUxNjR8MCxpPXIrMTEwOTYrKDUxNjgqbHwwKSs1MTYwfDAsZj1lKzIwfDAsYj0wO0E6Zm9yKDs7KXtpZihjPTA9PSgwfGIpKXc9MTA7ZWxzZSBpZigxPT0oMHxiKSl7aWYoMHxhcltmPj4yXSl7Yz0xLHc9Mjc7YnJlYWt9dz0xMH1pZigxMD09KDB8dykmJihoPSh3PTApPCgwfChrPTB8YXJbKGM/dDpuKT4+Ml0pKSkpe2ZvcihjPTA7dT0yNTUmKDB8QXQoQSwxKSksdHJbZSszODIrKGI8PDQpK2M+PjBdPXUsKDB8KGM9YysxfDApKSE9KDB8ayk7KTtpZigwIT0oMHxhcltkPj4yXSkmaClmb3IoYz0wO3U9MjU1JigwfEF0KEEsMSkpLHRyW2UrNDE0KyhiPDw0KStjPj4wXT11LCgwfChjPWMrMXwwKSkhPSgwfGspOyk7aWYoaCl7dT0wO2Rve2lmKDB8dHJbZSszODIrKGI8PDQpK3U+PjBdKXtpZigyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbZSs0NDYrKGI8PDUpKyh1PDwxKT4+MV09KDE8PGNyW2E+PjBdKStjLGM9MHxmdChBKSwhKCgwLShsPTB8YXJbaT4+Ml0pfDApPD0oMHxjKSYoMHxjKTwoMHxsKSkpe2M9MCx3PTI3O2JyZWFrIEF9YyY9MjU1fWVsc2Ugb3JbZSs0NDYrKGI8PDUpKyh1PDwxKT4+MV09MTw8Y3JbYT4+MF0sYz0wO2lmKHRyW2UrNTEwKyhiPDw0KSt1Pj4wXT1jLDB8dHJbZSs0MTQrKGI8PDQpK3U+PjBdKXtpZigyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbKGw9ZSs1NDIrKGI8PDYpKyh1PDwyKXwwKT4+MV09KDE8PGNyW3M+PjBdKStjLGM9MHxmdChBKSxyPTB8YXJbbz4+Ml0sISgoMHxjKT49KDB8YnIociwtNCkpJigwfGMpPChyPDwyfDApKSl7Yz0wLHc9Mjc7YnJlYWsgQX1pZihjPXIrYy0oKGw9MHxicigwfG9yW2w+PjFdLHIpKT4+Y3Jbcz4+MF0pfDAsbD0wLXJ8MCx0cltlKzY3MCsoYjw8NSkrKHU8PDEpPj4wXT0oMHxjKTwoMHxsKT9sOigwfGMpPCgwfHIpP2M6cisyNTV8MCwyNTU8KChjPTB8ZnQoQSkpKzEyOHwwKT4+PjApe2M9MCx3PTI3O2JyZWFrIEF9aWYob3JbKGw9ZSs1NDIrKGI8PDYpKyh1PDwyKSsyfDApPj4xXT0oMTw8Y3Jbcz4+MF0pK2MsYz0wfGZ0KEEpLHI9MHxhcltvPj4yXSwhKCgwfGMpPj0oMHxicihyLC00KSkmKDB8Yyk8KHI8PDJ8MCkpKXtjPTAsdz0yNzticmVhayBBfWM9MjU1JigoMHwoYz1yK2MtKChsPTB8YnIoMHxvcltsPj4xXSxyKSk+PmNyW3M+PjBdKXwwKSk8KDB8KGw9MC1yfDApKT9sOigwfGMpPCgwfHIpP2M6cisyNTV8MCl9ZWxzZSBjPTE8PGNyW3M+PjBdJjY1NTM1LG9yW2UrNTQyKyhiPDw2KSsodTw8Mik+PjFdPWMsdHJbZSs2NzArKGI8PDUpKyh1PDwxKT4+MF09MCxvcltlKzU0MisoYjw8NikrKHU8PDIpKzI+PjFdPWMsYz0wO3RyW2UrNjcwKyhiPDw1KSsodTw8MSkrMT4+MF09Yyx1PXUrMXwwfXdoaWxlKCgwfHUpPCgwfGspKX19aWYoMjw9KDB8KGI9YisxfDApKSl7Yz0xLHc9Mjc7YnJlYWt9fXJldHVybiAyNz09KDB8dyk/MHxjOjB9ZnVuY3Rpb24gTGEoQSl7dmFyIGU9MCxyPTAsaT0wO2ZvcihhclsoQXw9MCk+PjJdPTAsdHJbQSs0Pj4wXT0wLHRyW0ErNT4+MF09MCxhcltBKzg+PjJdPTAsZT1BKzE2fCh0cltBKzEyPj4wXT0wKSxhcltBKzI4Pj4yXT0wLHRyW0ErMzI+PjBdPTAsYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsZ2MoQSszNHwob3JbZSs4Pj4xXT0wKSksYXJbQSsxMzY+PjJdPTAsYXJbQSsxNDA+PjJdPTAsZT1hcltBKzE0ND4+Ml09MDt0cltBKzE0OCtlPj4wXT0wLGFyW0ErMTY0KyhlPDwyKT4+Ml09MCx0cltBKzIyOCtlPj4wXT0wLDE2IT0oKHRyW0ErMjQ0K2U+PjBdPTApfChlPWUrMXwoYXJbQSsyNjArKGU8PDIpPj4yXT0wKSkpOyk7Zm9yKGU9QSszMjR8MCxhcltBKzM3Nj4+Ml09MCx0cltBKzM4MD4+MF09MCxpPShyPWUpKzQ4fCh0cltBKzM4MT4+MF09MCk7KDB8KHI9cis0fChhcltyPj4yXT0wKSkpPCgwfGkpOyk7Zm9yKGU9dHJbZSs0OD4+MF09MDt0cltBKzM4MitlPj4wXT0wLHRyW0ErNDE0K2U+PjBdPTAsb3JbQSs0NDYrKGU8PDEpPj4xXT0wLHRyW0ErNTEwK2U+PjBdPTAsb3JbQSs1NDIrKGU8PDIpKzI+PjFdPTAsb3JbQSs1NDIrKGU8PDIpPj4xXT0wLDE2IT0oKHRyW0ErNjcwKyhlPDwxKSsxPj4wXT0wKXwoZT1lKzF8KHRyW0ErNjcwKyhlPDwxKT4+MF09MCkpKTspO2ZvcihlPTA7dHJbQSszOTgrZT4+MF09MCx0cltBKzQzMCtlPj4wXT0wLG9yW0ErNDc4KyhlPDwxKT4+MV09MCx0cltBKzUyNitlPj4wXT0wLG9yW0ErNjA2KyhlPDwyKSsyPj4xXT0wLG9yW0ErNjA2KyhlPDwyKT4+MV09MCwxNiE9KCh0cltBKzcwMisoZTw8MSkrMT4+MF09MCl8KGU9ZSsxfCh0cltBKzcwMisoZTw8MSk+PjBdPTApKSk7KTtmb3Iocj1BKzczNnwwLGFyW0ErNzU2Pj4yXT0wLGFyW0ErNzYwPj4yXT0wLHRyW0ErNzY0Pj4wXT0wLGFyW0ErNzY4Pj4yXT0wLGFyW0ErNzcyPj4yXT0wLGFyW3I+PjJdPTAsYXJbcis0Pj4yXT0wLGFyW3IrOD4+Ml09MCxhcltyKzEyPj4yXT0wLG9yW3IrMTY+PjFdPTAscj0odHJbcisxOD4+MF09MCl8YXJbQSs3NzY+PjJdLCgwfChlPTB8YXJbKGk9QSs3ODB8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZSsofigoZSstNC1yfDApPj4+Mik8PDIpKSxhclsoZT1BKzc4OHwwKT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZSsxNj4+Ml09MCxnYyhBKzgxMnwoYXJbZSsyMD4+Ml09MCkpLGU9YXJbQSs5MTI+PjJdPTA7YXJbQSs5MTYrKGU8PDYpPj4yXT0wLGFyW0ErMTA0NCsoZTw8Nik+PjJdPTAsYXJbQSsxMTcyKyhlPDw2KT4+Ml09MCx0cltBKzEzMDArKGU8PDQpPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs0Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrND4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzQ+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs4Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrOD4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzg+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsyPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsxMj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzEyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMTI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSszPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsxNj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzE2Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMTY+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs0Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyMD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzIwPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjA+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs1Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyND4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzI0Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjQ+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs2Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSsyOD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzI4Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMjg+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs3Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSszMj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzMyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMzI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs4Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSszNj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzM2Pj4yXT0wLGFyW0ErMTE3MisoZTw8NikrMzY+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSs5Pj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs0MD4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzQwPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrNDA+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxMD4+MF09MCxhcltBKzkxNisoZTw8NikrNDQ+PjJdPTAsYXJbQSsxMDQ0KyhlPDw2KSs0ND4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzQ0Pj4yXT0wLHRyW0ErMTMwMCsoZTw8NCkrMTE+PjBdPTAsYXJbQSs5MTYrKGU8PDYpKzQ4Pj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrNDg+PjJdPTAsYXJbQSsxMTcyKyhlPDw2KSs0OD4+Ml09MCx0cltBKzEzMDArKGU8PDQpKzEyPj4wXT0wLGFyW0ErOTE2KyhlPDw2KSs1Mj4+Ml09MCxhcltBKzEwNDQrKGU8PDYpKzUyPj4yXT0wLGFyW0ErMTE3MisoZTw8NikrNTI+PjJdPTAsdHJbQSsxMzAwKyhlPDw0KSsxMz4+MF09MCxhcltBKzkxNisoZTw8NikrNTY+PjJdPTAsYXJbQSsxMDQ0KyhlPDw2KSs1Nj4+Ml09MCxhcltBKzExNzIrKGU8PDYpKzU2Pj4yXT0wLHRyW0ErMTMwMCsoZTw8NCkrMTQ+PjBdPTAsYXJbQSs5MTYrKGU8PDYpKzYwPj4yXT0wLGFyW0ErMTA0NCsoZTw8NikrNjA+PjJdPTAsMiE9KChhcltBKzExNzIrKGU8PDYpKzYwPj4yXT0wKXwoZT1lKzF8KHRyW0ErMTMwMCsoZTw8NCkrMTU+PjBdPTApKSk7KTtlPTB8YXJbQSsxMzQ0Pj4yXSwoMHwoaT0wfGFyWyhyPUErMTM0OHwwKT4+Ml0pKSE9KDB8ZSkmJihhcltyPj4yXT1pKyh+KChpKy00LWV8MCk+Pj4yKTw8MikpLHRyWyhBPUErMTM0MHwwKT4+MF09MH1mdW5jdGlvbiBLYSgpe3ZhciBBPTAsZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MDtpZighKEE9MHx5YygxMTI5NikpKXJldHVybihnPTApfGc7dmIoMHxBLC0xLDExMjk2KSxhclsxNDMyN109QSxhclsxNDMyOF09QSxhclsxNDMyOV09QSxhclsxNDMzMF09QSxhclsxNDMzMV09QSxhclsxNDMzMl09QSxhclsxNDMzM109QSxiPShhclsxNDMzNF09QSkrMTZ8MCxhclsxNDMzNV09YixhclsxNDMzNl09YixhclsxNDMzN109YixhclsxNDMzOF09YixhclsxNDMzOV09YixhclsxNDM0MF09YixhclsxNDM0MV09YixhclsxNDM0Ml09YixhclsxNDM0M109QSszMixhclsxNDM0NF09QSs5NixhclsxNDM0NV09QSsxNjAsYXJbMTQzNDZdPUErMjI0LGFyWzE0MzQ3XT1BKzI4OCxhclsxNDM0OF09QSszNTIsYXJbMTQzNDldPUErNDE2LGFyWzE0MzUwXT1BKzQ4MCxhclsxNDM1MV09QSs1NDQsYXJbMTQzNTJdPUErNjA4LGFyWzE0MzUzXT1BKzY3MixhclsxNDM1NF09QSs3MzYsYXJbMTQzNTVdPUErODAwLGFyWzE0MzU2XT1BKzg2NCxhclsxNDM1N109QSs5MjgsYXJbMTQzNThdPUErOTkyLGI9QSsxMDU2fDAsYXJbMTQzNTldPWIsYXJbMTQzNjNdPWIsYj1BKzEzMTJ8MCxhclsxNDM2MF09YixhclsxNDM2NF09YixiPUErMTU2OHwwLGFyWzE0MzYxXT1iLGFyWzE0MzY1XT1iLGI9QSsxODI0fDAsYXJbMTQzNjJdPWIsYXJbMTQzNjZdPWIsYj1BKzIwODB8MCxhclsxNDM2N109YixhclsxNDM3MV09YixiPUErMjMzNnwwLGFyWzE0MzY4XT1iLGFyWzE0MzcyXT1iLGI9QSsyNTkyfDAsYXJbMTQzNjldPWIsYXJbMTQzNzNdPWIsYj1BKzI4NDh8MCxhclsxNDM3MF09YixhclsxNDM3NF09YixiPUErMzEwNHwwLGFyWzE0Mzc1XT1iLGFyWzE0Mzc5XT1iLGI9QSs0MTI4fDAsYXJbMTQzNzZdPWIsYXJbMTQzODBdPWIsYj1BKzUxNTJ8MCxhclsxNDM3N109YixhclsxNDM4MV09YixiPUErNjE3NnwwLGFyWzE0Mzc4XT1iLGFyWzE0MzgyXT1iLGI9QSs3MjAwfDAsYXJbMTQzODNdPWIsYXJbMTQzODddPWIsYj1BKzgyMjR8MCxhclsxNDM4NF09YixhclsxNDM4OF09YixiPUErOTI0OHwwLGFyWzE0Mzg1XT1iLGFyWzE0Mzg5XT1iLGI9QSsxMDI3MnwwLGFyWzE0Mzg2XT1iLGFyWzE0MzkwXT1iLGI9MjtBOmZvcig7Oyl7ZD0xPT0oMHwoaD0ocz0xPDxiKT4+MikpLGs9YistMnwwLGg9Mj09KDB8aCksdT0wO2Rve3c9MD09KDB8dSksbD0wO2Rve3Y9MD09KDB8bCk/OToxNSxjPTA7ZG97bT01NzMwOCsoazw8NikrKHU8PDUpKyhsPDw0KSsoYzw8Mil8MCxhPTA7ZG97aWYoaT1hPDwyLGc9YTw8YixmPTAtYXwwLG49YT4+MixvPTA9PSgwfCh0PTMmYSkpPzI6MT09KDB8dCkmMSxkKXtlPTA7ZG97aWYoQT0wfGNyWzQxNDg5KyhlK2kpPj4wXSxBPXc/QTpBKzI3fDAscj0oMHxhclttPj4yXSkrKGUrZyl8MCwhKChvPTB8dHJbcj4+MF0pPDwyND4+MjQ9PS0xfCgyNTUmb3wwKT09KDB8QSkpKXtlPTI4O2JyZWFrIEF9dHJbcj4+MF09QSxlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHMpKX1lbHNle3I9MDtkb3tkb3tpZigoMHxyKSE9KDB8Zikpe3N3aXRjaChlPXI+PjIsQT0zJnIsMHxjKXtjYXNlIDA6QT0yPChBPUErdHwwKT4+PjA/MDowfEE/MToyO2JyZWFrO2Nhc2UgMTpBPW87YnJlYWs7Y2FzZSAyOkE9MD09KDB8QSk/MjoxPT0oMHxBKSYxO2JyZWFrO2RlZmF1bHQ6QT0yfWlmKHcpe2lmKEE9MDwoZStufDApP0ErM3wwOkEsaCl7QT1BK3Z8MDticmVha31BPUErMjF8MDticmVha31pZihoKXtBPUErOXwwO2JyZWFrfUE9QSsxMnwwO2JyZWFrfUE9MH13aGlsZSgwKTtpZihBPXc/QTpBKzI3fDAsZT0oMHxhclttPj4yXSkrKHIrZyl8MCwhKChpPTB8dHJbZT4+MF0pPDwyND4+MjQ9PS0xfCgyNTUmaXwwKT09KDB8QSkpKXtlPTI4O2JyZWFrIEF9dHJbZT4+MF09QSxyPXIrMXwwfXdoaWxlKCgwfHIpPCgwfHMpKX1hPWErMXwwfXdoaWxlKCgwfGEpPCgwfHMpKTtjPWMrMXwwfXdoaWxlKCgwfGMpPDQpO2w9bCsxfDB9d2hpbGUoKDB8bCk8Mik7dT11KzF8MH13aGlsZSgoMHx1KTwyKTtpZig2PD0oMHwoYj1iKzF8MCkpKXtBPTEsZT0zMDticmVha319aWYoMjg9PSgwfGUpKXNyKDQxNTA1LDM5MjQyLDIxMDAsNDE1ODEpO2Vsc2UgaWYoMzA9PSgwfGUpKXJldHVybiAwfEE7cmV0dXJuIDB9ZnVuY3Rpb24gcWEoKXtCYygwfGFyWzE0MzI3XSksYXJbMTQzMjddPTB9ZnVuY3Rpb24gJGEoQSl7dmFyIGUscj0wO2ZvcihhclsoQXw9MCkrNDcyMD4+Ml09MCxhcltBKzQ3MjQ+PjJdPTAsZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MDtmb3IodHJbKEF8PTApPj4wXT0wLG9yWyhyPUErMnwwKT4+MV09MCxvcltyKzI+PjFdPTAsb3Jbcis0Pj4xXT0wLHRyW3IrNj4+MF09MCxhcltBKzEyPj4yXT01LHRyW0ErMTY+PjBdPTAsdHJbQSsxNz4+MF09MCx0cltBKzE4Pj4wXT0yLHRyW0ErMTk+PjBdPTIsdHJbQSsyMD4+MF09MixhcltBKzQ4Pj4yXT0wLGFyW0ErNTI+PjJdPTAscj1BKzYwfCh0cltBKzU2Pj4wXT0wKSxlPShpPUErMjF8MCkrMjR8MDsoMHwoaT1pKzF8KHRyW2k+PjBdPTApKSk8KDB8ZSk7KTthcltyPj4yXT0xLHRyW0ErNjQ+PjBdPTAsdHJbQSs2NT4+MF09MCx0cltBKzY2Pj4wXT0wLHRyW0ErNjc+PjBdPTEsdHJbQSs2OD4+MF09MCxvcltBKzcwPj4xXT0wLHRyW0ErNzI+PjBdPTIsdHJbQSs3Mz4+MF09MSx0cltBKzc0Pj4wXT0xNSx0cltBKzc1Pj4wXT0xNX0oQSs0OTA0fChhcltBKzQ3Mjg+PjJdPTApKSxlPShyPUErNDk4NHwwKSs5fDA7KDB8KHI9cisxfCh0cltyPj4wXT0wKSkpPCgwfGUpOyk7dHJbQT4+MF09MH1mdW5jdGlvbiBBYyhBKXt2YXIgZSxyOyhyPTB8YXJbKEF8PTApKzQ3MjA+PjJdKSYmKCgwfChlPTB8YXJbKEE9QSs0NzI0fDApPj4yXSkpIT0oMHxyKSYmKGFyW0E+PjJdPWUrKDEwMCp+KCgoZS0xMDAtcnwwKT4+PjApLzEwMHwwKXwwKSksdnUocikpfWZ1bmN0aW9uIGVjKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MDt1cj0odD11cikrNjI0MHwwLG49KGY9dCkrOTZ8MCxsPTA7QTpmb3IoOzspe2s9KGQ9Mz09KDB8bCkpPzI6Nix3PTMhPSgwfGwpLGI9KGg9MD09KDB8bCkpPzE2OjY0LHM9MTwoMHxsKSx1PTA7ZG97Yz1uKyh1PDwxMCl8MCxvPWQmMT09KDB8dSk7ZG97aWYoISgoMjU1JigwfEF0KEEsMSkpKTw8MjQ+PjI0KSl7aWYoLTk5OTk5PT0oMHwoZT0wfGl0KEEpKSl8KDB8dSk8KDB8ZSkpe2E9MzE7YnJlYWsgQX1pZihhclsoaT1mKygyNCpsfDApKyh1PDwyKXwwKT4+Ml09MTYsMHxlKXtpZighKHd8MT09KDB8ZSkpKXthPTEzO2JyZWFrIEF9aGIoMHxjLG4rKChvPXUtZXwwKTw8MTApfDAsMHxiKSxvPTB8YXJbZisoMjQqbHwwKSsobzw8Mik+PjJdLGFyW2k+PjJdPW8sYT0yMTticmVha31pZihoKXtmb3IoaT00MTY0NixvPShlPWMpKzE2fDA7dHJbZT4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfChlPWUrMXwwKSk8KDB8byk7KTthPTIyO2JyZWFrfWlmKCgwfHUpPDMmKDFebykpe2ZvcihpPTQxNjYyLG89KGU9YykrNjR8MDt0cltlPj4wXT0wfHRyW2k+PjBdLGk9aSsxfDAsKDB8KGU9ZSsxfDApKTwoMHxvKTspO289MTYsYT0yMTticmVha31mb3IoaT00MTcyNixvPShlPWMpKzY0fDA7dHJbZT4+MF09MHx0cltpPj4wXSxpPWkrMXwwLCgwfChlPWUrMXwwKSk8KDB8byk7KTtvPTE2LGE9MjE7YnJlYWt9aWYocyl7aWYoMjU0PCgoZT0wfGZ0KEEpKSs3fDApPj4+MCl7YT0zMTticmVhayBBfW89ZSs4fDAsZT1hcltmKygyNCpsfDApKyh1PDwyKT4+Ml09b31lbHNlIGU9OCxvPTE2O2ZvcihhPTA7Oyl7aWYoMjU1PCgoaT0wfGZ0KEEpKSsxMjh8MCk+Pj4wKXthPTMxO2JyZWFrIEF9aWYoZT0oZSsyNTYraXwwKSUyNTZ8MCx0cltuKyh1PDwxMCkrYT4+MF09ZSwoMHxiKTw9KDB8KGE9YSsxfDApKSl7YT0yMTticmVha319fXdoaWxlKDApO2U6ZG97aWYoMjE9PSgwfGEpKXN3aXRjaCgoYT0wKXxsKXtjYXNlIDA6YT0yMjticmVhayBlO2Nhc2UgMTpmb3IoaT0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltpKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW2krKGU8PDEpPj4wXSkrKHIrOTYrKHU8PDYpKT4+MF09MHx0cltuKyh1PDwxMCkrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTticmVhaztjYXNlIDI6Zm9yKGk9MHxfYSgzLDApLGU9MDtjPWkrKGU8PDEpfDAsdj1pKyhlPDwxKSsxfDAsbT0wfHRyW24rKHU8PDEwKStlPj4wXSx0clsoKDB8Y3Jbdj4+MF0pPDw1KSsoKDB8Y3JbYz4+MF0pPDwxKSsocis0ODArKHU8PDgpKT4+MF09bSx0clsoKDB8Y3JbYz4+MF0pPDwxfDEpKygoMHxjclt2Pj4wXSk8PDUpKyhyKzQ4MCsodTw8OCkpPj4wXT1tLHRyWygoMHxjclt2Pj4wXSk8PDV8MTYpKygoMHxjcltjPj4wXSk8PDEpKyhyKzQ4MCsodTw8OCkpPj4wXT1tLHRyWygoMHxjclt2Pj4wXSk8PDV8MTYpKygoMHxjcltjPj4wXSk8PDF8MSkrKHIrNDgwKyh1PDw4KSk+PjBdPW0sNjQhPSgwfChlPWUrMXwwKSk7KTt0cltyKzQ4MCsodTw8OCk+PjBdPW87YnJlYWsgZTtjYXNlIDM6ZmMobT1yKzIwMTYrKHU8PDEwKXwwLGMsMyksdHJbbT4+MF09bzticmVhayBlO2RlZmF1bHQ6YnJlYWsgZX19d2hpbGUoMCk7aWYoMjI9PSgwfGEpKWZvcihpPTB8X2EoMiwwKSxlPTA7dHJbKCgwfGNyW2krKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbaSsoZTw8MSk+PjBdKSsocisodTw8NCkpPj4wXT0wfHRyW24rKHU8PDEwKStlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO3U9dSsxfDB9d2hpbGUoKDB8dSk8KDB8aykpO2lmKDQ8PSgwfChsPWwrMXwwKSkpe2U9MCxhPTMyO2JyZWFrfX1pZigxMz09KDB8YSkpc3IoNDE4MTAsNDE2MzksODczLDQxODQ3KTtlbHNle2lmKDMxPT0oMHxhKSlyZXR1cm4gdXI9dCwwfChtPTgpO2lmKDMyPT0oMHxhKSlyZXR1cm4gdXI9dCwwfGV9cmV0dXJuIDB9ZnVuY3Rpb24gcmMoQSl7QXw9MDt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wO2ZvcihyPTB8X2EoMiwwKSxlPTA7dHJbQSsoKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbcisoZTw8MSk+PjBdKSk+PjBdPTB8dHJbNDE2NDYrZT4+MF0sMTYhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDIsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMTYpPj4wXT0wfHRyWzQxNjQ2K2U+PjBdLDE2IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgyLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwyKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzMyKT4+MF09MHx0cls0MTY0NitlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMiwwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MikrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs0OCk+PjBdPTB8dHJbNDE2NDYrZT4+MF0sMTYhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDIsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDIpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErNjQpPj4wXT0wfHRyWzQxNjQ2K2U+PjBdLDE2IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgyLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwyKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzgwKT4+MF09MHx0cls0MTY0NitlPj4wXSwxNiE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs5Nik+PjBdPTB8dHJbNDE2NjIrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMjg4KT4+MF09MHx0cls0MTcyNitlPj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSsxNjApPj4wXT0wfHRyWzQxNjYyK2U+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zm9yKHI9MHxfYSgzLDApLGU9MDt0clsoKDB8Y3JbcisoZTw8MSkrMT4+MF0pPDwzKSsoMHxjcltyKyhlPDwxKT4+MF0pKyhBKzM1Mik+PjBdPTB8dHJbNDE3MjYrZT4+MF0sNjQhPSgwfChlPWUrMXwwKSk7KTtmb3Iocj0wfF9hKDMsMCksZT0wO3RyWygoMHxjcltyKyhlPDwxKSsxPj4wXSk8PDMpKygwfGNyW3IrKGU8PDEpPj4wXSkrKEErMjI0KT4+MF09MHx0cls0MTY2MitlPj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPTB8X2EoMywwKSxlPTA7dHJbKCgwfGNyW3IrKGU8PDEpKzE+PjBdKTw8MykrKDB8Y3JbcisoZTw8MSk+PjBdKSsoQSs0MTYpPj4wXT0wfHRyWzQxNzI2K2U+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zj0wO2Rve2ZvcihyPTB8X2EoMywwKSxlPTA7aT1yKyhlPDwxKXwwLHQ9NDE2NjIrZXwwLHRyWygoMHxjclsobj1yKyhlPDwxKSsxfDApPj4wXSk8PDUpKygoMHxjcltpPj4wXSk8PDEpKyhBKzQ4MCsoZjw8OCkpPj4wXT0wfHRyW3Q+PjBdLHRyWygoMHxjcltpPj4wXSk8PDF8MSkrKCgwfGNyW24+PjBdKTw8NSkrKEErNDgwKyhmPDw4KSk+PjBdPTB8dHJbdD4+MF0sdHJbKCgwfGNyW24+PjBdKTw8NXwxNikrKCgwfGNyW2k+PjBdKTw8MSkrKEErNDgwKyhmPDw4KSk+PjBdPTB8dHJbdD4+MF0sdHJbKCgwfGNyW24+PjBdKTw8NXwxNikrKCgwfGNyW2k+PjBdKTw8MXwxKSsoQSs0ODArKGY8PDgpKT4+MF09MHx0clt0Pj4wXSw2NCE9KDB8KGU9ZSsxfDApKTspO2ZvcihyPWYrM3wwLGk9MHxfYSgzLDApLGU9MDt0PWkrKGU8PDEpfDAsbz00MTcyNitlfDAsdHJbKCgwfGNyWyhuPWkrKGU8PDEpKzF8MCk+PjBdKTw8NSkrKCgwfGNyW3Q+PjBdKTw8MSkrKEErNDgwKyhyPDw4KSk+PjBdPTB8dHJbbz4+MF0sdHJbKCgwfGNyW3Q+PjBdKTw8MXwxKSsoKDB8Y3Jbbj4+MF0pPDw1KSsoQSs0ODArKHI8PDgpKT4+MF09MHx0cltvPj4wXSx0clsoKDB8Y3Jbbj4+MF0pPDw1fDE2KSsoKDB8Y3JbdD4+MF0pPDwxKSsoQSs0ODArKHI8PDgpKT4+MF09MHx0cltvPj4wXSx0clsoKDB8Y3Jbbj4+MF0pPDw1fDE2KSsoKDB8Y3JbdD4+MF0pPDwxfDEpKyhBKzQ4MCsocjw8OCkpPj4wXT0wfHRyW28+PjBdLDY0IT0oMHwoZT1lKzF8MCkpOyk7Zj1mKzF8MH13aGlsZSgzIT0oMHxmKSk7ZmMoQSsyMDE2fDAsNDE2NjIsMyksZmMoQSszMDQwfDAsNDE3MjYsMyl9ZnVuY3Rpb24gaWMoQSxlLHIpe3JldHVybiBBfD0wLGV8PTAsZT0yNTUmKDB8QXQocnw9MCwxKSksdHJbQT4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzE+PjBdPWUsZT0yNTUmKDB8QXQociwxKSksdHJbQSsyPj4wXT1lLGU9MjU1JigwfEF0KHIsMSkpLHRyW0ErMz4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzQ+PjBdPWUsZT0yNTUmKDB8QXQociwxKSksdHJbQSs1Pj4wXT1lLGU9MjU1JigwfEF0KHIsMSkpLHRyW0ErNj4+MF09ZSxlPTI1NSYoMHxBdChyLDEpKSx0cltBKzc+PjBdPWUscj0yNTUmKDB8QXQociwxKSksdHJbQSs4Pj4wXT1yLDB9ZnVuY3Rpb24gZmMoQSxlLHIpe0F8PTAsZXw9MDt2YXIgaT0wLGY9MCxuPTAsdD0wLG89MDtzd2l0Y2goMHwocnw9MCkpe2Nhc2UgMDpmb3IoaT0wfF9hKDIsMCkscj0wO3RyW0ErKCgoMHxjcltpKyhyPDwxKSsxPj4wXSk8PDIpKygwfGNyW2krKHI8PDEpPj4wXSkpPj4wXT0wfHRyW2Urcj4+MF0sMTYhPSgwfChyPXIrMXwwKSk7KTtyZXR1cm47Y2FzZSAxOmZvcihpPTB8X2EoMywwKSxyPTA7dHJbQSsoKCgwfGNyW2krKHI8PDEpKzE+PjBdKTw8MykrKDB8Y3JbaSsocjw8MSk+PjBdKSk+PjBdPTB8dHJbZStyPj4wXSw2NCE9KDB8KHI9cisxfDApKTspO3JldHVybjtjYXNlIDI6Zm9yKGk9MHxfYSgzLDApLHI9MDtvPWkrKHI8PDEpKzF8MCxuPWUrcnwwLHRyW0ErKCgoMHxjclsodD1pKyhyPDwxKXwwKT4+MF0pPDwxKSsoKDB8Y3Jbbz4+MF0pPDw1KSk+PjBdPTB8dHJbbj4+MF0sdHJbQSsoKCgwfGNyW3Q+PjBdKTw8MXwxKSsoKDB8Y3Jbbz4+MF0pPDw1KSk+PjBdPTB8dHJbbj4+MF0sdHJbQSsoKCgwfGNyW3Q+PjBdKTw8MSkrKCgwfGNyW28+PjBdKTw8NXwxNikpPj4wXT0wfHRyW24+PjBdLHRyW0ErKCgoMHxjclt0Pj4wXSk8PDF8MSkrKCgwfGNyW28+PjBdKTw8NXwxNikpPj4wXT0wfHRyW24+PjBdLDY0IT0oMHwocj1yKzF8MCkpOyk7cmV0dXJuO2Nhc2UgMzpmPTB8X2EoMywwKSxpPTA7ZG97Zm9yKG49ZisoaTw8MSl8MCx0PWYrKGk8PDEpKzF8MCxvPWUraXwwLHI9MDt0cltBKygoKDB8Y3Jbbj4+MF0pPDwyKSsoKCgwfGNyW3Q+PjBdKTw8Mikrcjw8NSkpPj4wXT0wfHRyW28+PjBdLHRyW0ErKCgoMHxjcltuPj4wXSk8PDJ8MSkrKCgoMHxjclt0Pj4wXSk8PDIpK3I8PDUpKT4+MF09MHx0cltvPj4wXSx0cltBKygoKDB8Y3Jbbj4+MF0pPDwyfDIpKygoKDB8Y3JbdD4+MF0pPDwyKStyPDw1KSk+PjBdPTB8dHJbbz4+MF0sdHJbQSsoKCgwfGNyW24+PjBdKTw8MnwzKSsoKCgwfGNyW3Q+PjBdKTw8Mikrcjw8NSkpPj4wXT0wfHRyW28+PjBdLDQhPSgwfChyPXIrMXwwKSk7KTtpPWkrMXwwfXdoaWxlKDY0IT0oMHxpKSk7cmV0dXJuO2RlZmF1bHQ6c3IoNDQ0NTYsNDE2MzksODEwLDQxNzkwKX19ZnVuY3Rpb24gbmMoQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPShuPXVyKSsxNDR8MCxjPW4sND09KDB8KHJ8PTApKXwxPT0oMHwoZnw9MCkpKXVyPW47ZWxzZXtzd2l0Y2goZj0oMHwobD0oMHxmKTwyNj8yNi1mfDA6ZistMjZ8MCkpPCgwfChmPSgwfGYpPDEwPzEwLWZ8MDpmKy0xMHwwKSk/bDpmLDB8cil7Y2FzZSA4OnQ9NzticmVhaztjYXNlIDE2OnQ9MTticmVhaztjYXNlIDMyOnQ9MDticmVhaztkZWZhdWx0OnNyKDU1NzM5LDQ4Mjg5LDUxOCw0ODM2MSl9aWYoKDB8Zik8PSgwfHQpKXVyPW47ZWxzZXtpZihmPTMyPT0oMHxyKSYoMD09KDB8aSkmMCE9KDB8dHJbQSs1NjY1Pj4wXSkpJiYobz0wfGNyW2U+PjBdLCgwfCgoMHwobD0oMHxjcltlKzY0Pj4wXSkrby0oY3JbZSszMj4+MF08PDEpfDApKTwwPzAtbHwwOmwpKTwoMHwoYT0xPDwoMHxhcltBKzEyNzY+PjJdKS01KSkpPygwfCgoMHwoZj0oMHxjcltlKy02ND4+MF0pK28tKGNyW2UrLTMyPj4wXTw8MSl8MCkpPDA/MC1mfDA6ZikpPCgwfGEpOjAsaT1jKzY0fDAsYT0wfGJyKHIsLTIpLHRyW2krYT4+MF09MHx0cltlK2E+PjBdLHRyW2krKGE9cjw8MSk+PjBdPTB8dHJbZSthPj4wXSxmKWZvcih0PTB8dHJbZT4+MF0sdHJbaT4+MF09dCx0Jj0yNTUsQT0oMHxjcltlKy02ND4+MF0pLXR8MCxvPSgwfGNyW2UrNjQ+PjBdKS10fDAsZj0xO2w9KCgzMisoMHxicihBLGYpKXwwKT4+PjYpK3QmMjU1LHRyW2krKDAtZik+PjBdPWwsbD0oKDMyKygwfGJyKG8sZikpfDApPj4+NikrdCYyNTUsdHJbaStmPj4wXT1sLDY0IT0oMHwoZj1mKzF8MCkpOyk7ZWxzZSBpZigoMHwoZj0xLWF8MCkpPCgwfGEpKWZvcihmPTB8dHJbZSsodD1mKT4+MF07Yz1mLGY9MHx0cltlKyh0PShsPXQpKzF8MCk+PjBdLHRyW2krbD4+MF09KDIrKDI1NSZmKSsoKDI1NSZjKTw8MSkrKDB8Y3JbZSsobCstMSk+PjBdKXwwKT4+PjIsKDB8dCkhPSgwfGEpOyk7aGIoZSsobD0wLWF8MCl8MCxpK2x8MCxyPDwyfDEpLHVyPW59fX1mdW5jdGlvbiB0YyhBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KG49dXIpKzI3MnwwLGM9biw0PT0oMHwocnw9MCkpfDE9PSgwfChmfD0wKSkpdXI9bjtlbHNle3N3aXRjaChmPSgwfChsPSgwfGYpPDI2PzI2LWZ8MDpmKy0yNnwwKSk8KDB8KGY9KDB8Zik8MTA/MTAtZnwwOmYrLTEwfDApKT9sOmYsMHxyKXtjYXNlIDg6dD03O2JyZWFrO2Nhc2UgMTY6dD0xO2JyZWFrO2Nhc2UgMzI6dD0wO2JyZWFrO2RlZmF1bHQ6c3IoNTU3MzksNDgyODksNTE4LDQ4MzYxKX1pZigoMHxmKTw9KDB8dCkpdXI9bjtlbHNle2lmKGY9MzI9PSgwfHIpJigwPT0oMHxpKSYwIT0oMHx0cltBKzU2NjU+PjBdKSkmJihvPTB8bHJbZT4+MV0sKDB8KCgwfChsPSgwfGxyW2UrMTI4Pj4xXSkrby0obHJbZSs2ND4+MV08PDEpfDApKTwwPzAtbHwwOmwpKTwoMHwoYT0xPDwoMHxhcltBKzEyNzY+PjJdKS01KSkpPygwfCgoMHwoZj0oMHxscltlKy0xMjg+PjFdKStvLShscltlKy02ND4+MV08PDEpfDApKTwwPzAtZnwwOmYpKTwoMHxhKTowLGk9YysxMjh8MCxhPTB8YnIociwtMiksb3JbaSsoYTw8MSk+PjFdPTB8b3JbZSsoYTw8MSk+PjFdLG9yW2krKChhPXI8PDEpPDwxKT4+MV09MHxvcltlKyhhPDwxKT4+MV0sZilmb3IodD0wfG9yW2U+PjFdLG9yW2k+PjFdPXQsdCY9NjU1MzUsQT0oMHxscltlKy0xMjg+PjFdKS10fDAsbz0oMHxscltlKzEyOD4+MV0pLXR8MCxmPTE7bD0oKDMyKygwfGJyKEEsZikpfDApPj4+NikrdCY2NTUzNSxvcltpKygwLWY8PDEpPj4xXT1sLGw9KCgzMisoMHxicihvLGYpKXwwKT4+PjYpK3QmNjU1MzUsb3JbaSsoZjw8MSk+PjFdPWwsNjQhPSgwfChmPWYrMXwwKSk7KTtlbHNlIGlmKCgwfChmPTEtYXwwKSk8KDB8YSkpZm9yKGY9MHxvcltlKygodD1mKTw8MSk+PjFdO2M9ZixmPTB8b3JbZSsoKHQ9KGw9dCkrMXwwKTw8MSk+PjFdLG9yW2krKGw8PDEpPj4xXT0oMisoNjU1MzUmZikrKCg2NTUzNSZjKTw8MSkrKDB8bHJbZSsobCstMTw8MSk+PjFdKXwwKT4+PjIsKDB8dCkhPSgwfGEpOyk7aGIoZSsoKGw9MC1hfDApPDwxKXwwLGkrKGw8PDEpfDAscjw8M3wyKSx1cj1ufX19ZnVuY3Rpb24gb2MoQSl7YXJbKEF8PTApKzg+PjJdPTE3MzI1ODQxOTMsYXJbQSsxMj4+Ml09LTI3MTczMzg3OSxhcltBKzE2Pj4yXT0tMTczMjU4NDE5NCxhcltBKzIwPj4yXT0yNzE3MzM4NzgsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTB9ZnVuY3Rpb24gYWMoQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTA7Zj0odD0wfGFyWyhBfD0wKT4+Ml0pK3ImNTM2ODcwOTExLGFyW0E+PjJdPWYsbj0wfGFyWyhpPUErNHwwKT4+Ml0sZj4+PjA8dD4+PjAmJihuPW4rMXwwLGFyW2k+PjJdPW4pLGFyW2k+PjJdPW4rKHI+Pj4yOSksbj02MyZ0O2Rve2lmKG4pe2lmKHQ9NjQtbnwwLG49QSsyNCtufDAsdD4+PjA8PXI+Pj4wKXtoYigwfG4sMHxlLDB8dCksY2MoQSxBKzI0fDAsNjQpLGU9ZSt0fDAscj1yLXR8MDticmVha31yZXR1cm4gdm9pZCBoYigwfG4sMHxlLDB8cil9fXdoaWxlKDApOzYzPHI+Pj4wJiYoZT0wfGNjKEEsZSwtNjQmciksciY9NjMpLGhiKEErMjR8MCwwfGUsMHxyKX1mdW5jdGlvbiBjYyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTA7Zm9yKGc9KEF8PTApKzEyfDAsWj1BKzE2fDAscD1BKzIwfDAsZj1BKzg4fDAsbj1BKzkyfDAsdD1BKzk2fDAsbz1BKzEwMHwwLGE9QSsxMDR8MCxjPUErMTA4fDAsbD1BKzExMnwwLHU9QSsxMTZ8MCxiPUErMTIwfDAscz1BKzEyNHwwLGQ9QSsxMjh8MCxrPUErMTMyfDAsaD1BKzEzNnwwLHc9QSsxNDB8MCx2PUErMTQ0fDAsaT1BKzE0OHwwLEE9MHxhclsobT1BKzh8MCk+PjJdLHk9MHxhcltnPj4yXSxCPTB8YXJbcD4+Ml0sRT0wfGFyW1o+PjJdO1g9KDB8Y3JbZSsxPj4wXSk8PDh8MHxjcltlPj4wXXwoMHxjcltlKzI+PjBdKTw8MTZ8KDB8Y3JbZSszPj4wXSk8PDI0LFg9KChYPUErLTY4MDg3NjkzNisoeSYoQl5FKV5CKSsoYXJbZj4+Ml09WCl8MCk8PDd8WD4+PjI1KSt5fDAsVz0oMHxjcltlKzU+PjBdKTw8OHwwfGNyW2UrND4+MF18KDB8Y3JbZSs2Pj4wXSk8PDE2fCgwfGNyW2UrNz4+MF0pPDwyNCxXPSgoVz1CKy0zODk1NjQ1ODYrKGFyW24+PjJdPVcpKyhYJih5XkUpXkUpfDApPDwxMnxXPj4+MjApK1h8MCxJPSgwfGNyW2UrOT4+MF0pPDw4fDB8Y3JbZSs4Pj4wXXwoMHxjcltlKzEwPj4wXSk8PDE2fCgwfGNyW2UrMTE+PjBdKTw8MjQsST0oKEk9RSs2MDYxMDU4MTkrKGFyW3Q+PjJdPUkpKyhXJihYXnkpXnkpfDApPDwxN3xJPj4+MTUpK1d8MCxqPSgwfGNyW2UrMTM+PjBdKTw8OHwwfGNyW2UrMTI+PjBdfCgwfGNyW2UrMTQ+PjBdKTw8MTZ8KDB8Y3JbZSsxNT4+MF0pPDwyNCxqPSgoaj15Ky0xMDQ0NTI1MzMwKyhhcltvPj4yXT1qKSsoSSYoV15YKV5YKXwwKTw8MjJ8aj4+PjEwKStJfDAsWT0oMHxjcltlKzE3Pj4wXSk8PDh8MHxjcltlKzE2Pj4wXXwoMHxjcltlKzE4Pj4wXSk8PDE2fCgwfGNyW2UrMTk+PjBdKTw8MjQsWT0oKFk9WCstMTc2NDE4ODk3KyhhclthPj4yXT1ZKSsoaiYoSV5XKV5XKXwwKTw8N3xZPj4+MjUpK2p8MCxYPSgwfGNyW2UrMjE+PjBdKTw8OHwwfGNyW2UrMjA+PjBdfCgwfGNyW2UrMjI+PjBdKTw8MTZ8KDB8Y3JbZSsyMz4+MF0pPDwyNCxYPSgoWD1XKzEyMDAwODA0MjYrKGFyW2M+PjJdPVgpKyhZJihqXkkpXkkpfDApPDwxMnxYPj4+MjApK1l8MCxXPSgwfGNyW2UrMjU+PjBdKTw8OHwwfGNyW2UrMjQ+PjBdfCgwfGNyW2UrMjY+PjBdKTw8MTZ8KDB8Y3JbZSsyNz4+MF0pPDwyNCxXPSgoVz1JKy0xNDczMjMxMzQxKyhhcltsPj4yXT1XKSsoWCYoWV5qKV5qKXwwKTw8MTd8Vz4+PjE1KStYfDAsST0oMHxjcltlKzI5Pj4wXSk8PDh8MHxjcltlKzI4Pj4wXXwoMHxjcltlKzMwPj4wXSk8PDE2fCgwfGNyW2UrMzE+PjBdKTw8MjQsST0oKEk9aistNDU3MDU5ODMrKGFyW3U+PjJdPUkpKyhXJihYXlkpXlkpfDApPDwyMnxJPj4+MTApK1d8MCxqPSgwfGNyW2UrMzM+PjBdKTw8OHwwfGNyW2UrMzI+PjBdfCgwfGNyW2UrMzQ+PjBdKTw8MTZ8KDB8Y3JbZSszNT4+MF0pPDwyNCxqPSgoaj1ZKzE3NzAwMzU0MTYrKGFyW2I+PjJdPWopKyhJJihXXlgpXlgpfDApPDw3fGo+Pj4yNSkrSXwwLFk9KDB8Y3JbZSszNz4+MF0pPDw4fDB8Y3JbZSszNj4+MF18KDB8Y3JbZSszOD4+MF0pPDwxNnwoMHxjcltlKzM5Pj4wXSk8PDI0LFg9KChYPShhcltzPj4yXT1ZKSstMTk1ODQxNDQxNytYKyhqJihJXlcpXlcpfDApPDwxMnxYPj4+MjApK2p8MCxZPSgwfGNyW2UrNDE+PjBdKTw8OHwwfGNyW2UrNDA+PjBdfCgwfGNyW2UrNDI+PjBdKTw8MTZ8KDB8Y3JbZSs0Mz4+MF0pPDwyNCxXPSgoVz0oYXJbZD4+Ml09WSkrLTQyMDYzK1crKFgmKGpeSSleSSl8MCk8PDE3fFc+Pj4xNSkrWHwwLFk9KDB8Y3JbZSs0NT4+MF0pPDw4fDB8Y3JbZSs0ND4+MF18KDB8Y3JbZSs0Nj4+MF0pPDwxNnwoMHxjcltlKzQ3Pj4wXSk8PDI0LEk9KChJPShhcltrPj4yXT1ZKSstMTk5MDQwNDE2MitJKyhXJihYXmopXmopfDApPDwyMnxJPj4+MTApK1d8MCxZPSgwfGNyW2UrNDk+PjBdKTw8OHwwfGNyW2UrNDg+PjBdfCgwfGNyW2UrNTA+PjBdKTw8MTZ8KDB8Y3JbZSs1MT4+MF0pPDwyNCxqPSgoaj0oYXJbaD4+Ml09WSkrMTgwNDYwMzY4MitqKyhJJihXXlgpXlgpfDApPDw3fGo+Pj4yNSkrSXwwLFk9KDB8Y3JbZSs1Mz4+MF0pPDw4fDB8Y3JbZSs1Mj4+MF18KDB8Y3JbZSs1ND4+MF0pPDwxNnwoMHxjcltlKzU1Pj4wXSk8PDI0LFg9KChYPShhclt3Pj4yXT1ZKSstNDAzNDExMDErWCsoaiYoSV5XKV5XKXwwKTw8MTJ8WD4+PjIwKStqfDAsWT0oMHxjcltlKzU3Pj4wXSk8PDh8MHxjcltlKzU2Pj4wXXwoMHxjcltlKzU4Pj4wXSk8PDE2fCgwfGNyW2UrNTk+PjBdKTw8MjQsVz0oKFc9KGFyW3Y+PjJdPVkpKy0xNTAyMDAyMjkwK1crKFgmKGpeSSleSSl8MCk8PDE3fFc+Pj4xNSkrWHwwLFk9KDB8Y3JbZSs2MT4+MF0pPDw4fDB8Y3JbZSs2MD4+MF18KDB8Y3JbZSs2Mj4+MF0pPDwxNnwoMHxjcltlKzYzPj4wXSk8PDI0LEk9KChJPShhcltpPj4yXT1ZKSsxMjM2NTM1MzI5K0krKFcmKFheaileail8MCk8PDIyfEk+Pj4xMCkrV3wwLGo9KChqPShEPTB8YXJbbj4+Ml0pKy0xNjU3OTY1MTAraisoKEleVykmWF5XKXwwKTw8NXxqPj4+MjcpK0l8MCxYPSgoWD0oXz0wfGFyW2w+PjJdKSstMTA2OTUwMTYzMitYKygoal5JKSZXXkkpfDApPDw5fFg+Pj4yMykranwwLFc9KChXPShGPTB8YXJbaz4+Ml0pKzY0MzcxNzcxMytXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oej0wfGFyW2Y+PjJdKSstMzczODk3MzAyK0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShVPTB8YXJbYz4+Ml0pKy03MDE1NTg2OTEraisoKEleVykmWF5XKXwwKTw8NXxqPj4+MjcpK0l8MCxXPSgoVz1ZKy02NjA0NzgzMzUrVysoKChYPSgoWD0oSj0wfGFyW2Q+PjJdKSszODAxNjA4MytYKygoal5JKSZXXkkpfDApPDw5fFg+Pj4yMykranwwKV5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oUj0wfGFyW2E+PjJdKSstNDA1NTM3ODQ4K0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShHPTB8YXJbcz4+Ml0pKzU2ODQ0NjQzOCtqKygoSV5XKSZYXlcpfDApPDw1fGo+Pj4yNykrSXwwLFg9KChYPShTPTB8YXJbdj4+Ml0pKy0xMDE5ODAzNjkwK1grKChqXkkpJldeSSl8MCk8PDl8WD4+PjIzKStqfDAsVz0oKFc9KE09MHxhcltvPj4yXSkrLTE4NzM2Mzk2MStXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCxJPSgoST0oUT0wfGFyW2I+PjJdKSsxMTYzNTMxNTAxK0krKChXXlgpJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwLGo9KChqPShOPTB8YXJbdz4+Ml0pKy0xNDQ0NjgxNDY3K2orKChJXlcpJlheVyl8MCk8PDV8aj4+PjI3KStJfDAsWD0oKFg9KFY9MHxhclt0Pj4yXSkrLTUxNDAzNzg0K1grKChqXkkpJldeSSl8MCk8PDl8WD4+PjIzKStqfDAsQz0oVz0oKFc9KE89MHxhclt1Pj4yXSkrMTczNTMyODQ3MytXKygoWF5qKSZJXmopfDApPDwxNHxXPj4+MTgpK1h8MCleWCxBPShDPSgoQz1SKy0xNDU1MjMwNzArKEM9KChDPVErMTg3MzMxMzM1OSsoQz0oKEM9KFQ9MHxhcltoPj4yXSkrMTcwMDQ4NTU3MSsoQz0oKEM9eistMTk4NjMwODQ0KyhDPSgoQz1HKy02NDAzNjQ0ODcrKEM9KChDPU4rNjgxMjc5MTc0KyhDPSgoQz1EKy0xNTMwOTkyMDYwKyhDPSgoQz1VKy0zNzg1NTgraisoQ14oST0oKEk9VCstMTkyNjYwNzczNCtJKyhDJmpeWCl8MCk8PDIwfEk+Pj4xMikrV3wwKSl8MCk8PDR8Qz4+PjI4KStJfDApKygoVz0oKFc9RisxODM5MDMwNTYyK1crKENeSV4oWD0oKFg9USstMjAyMjU3NDQ2MytYKyhJXldeQyl8MCk8PDExfFg+Pj4yMSkrQ3wwKSl8MCk8PDE2fFc+Pj4xNikrWHwwKV5YXihJPSgoST1TKy0zNTMwOTU1NitJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKChXPSgoVz1PKy0xNTU0OTc2MzIrVysoQ15JXihYPSgoWD1SKzEyNzI4OTMzNTMrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCkpfDApPDwxNnxXPj4+MTYpK1h8MCleWF4oST0oKEk9SistMTA5NDczMDY0MCtJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKChXPSgoVz1NKy03MjI1MjE5NzkrVysoQ15JXihYPSgoWD16Ky0zNTg1MzcyMjIrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCkpfDApPDwxNnxXPj4+MTYpK1h8MCleWF4oST0oKEk9Xys3NjAyOTE4OStJKyhYXkNeVyl8MCk8PDIzfEk+Pj45KStXfDApKXwwKTw8NHxDPj4+MjgpK0l8MCkrKCgoST0oKEk9VistOTk1MzM4NjUxK0krKChYPSgoWD1UKy00MjE4MTU4MzUrWCsoSV5XXkMpfDApPDwxMXxYPj4+MjEpK0N8MCleQ14oVz0oKFc9WSs1MzA3NDI1MjArVysoQ15JXlgpfDApPDwxNnxXPj4+MTYpK1h8MCkpfDApPDwyM3xJPj4+OSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPVUrLTU3NDM0MDU1K0krKCgoVz0oKFc9UystMTQxNjM1NDkwNStXKygoKFg9KChYPU8rMTEyNjg5MTQxNStYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPUQrLTIwNTQ5MjI3OTkrSSsoKChXPSgoVz1KKy0xMDUxNTIzK1crKCgoWD0oKFg9TSstMTg5NDk4NjYwNitYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApKygoKEk9KChJPU4rMTMwOTE1MTY0OStJKygoKFc9KChXPV8rLTE1NjAxOTgzODArVysoKChYPSgoWD1ZKy0zMDYxMTc0NCtYKygoQ3x+VyleSSl8MCk8PDEwfFg+Pj4yMikrQ3wwKXx+SSleQyl8MCk8PDE1fFc+Pj4xNykrWHwwKXx+QyleWCl8MCk8PDIxfEk+Pj4xMSkrV3wwKXx+WCleVyl8MCk8PDZ8Qz4+PjI2KStJfDApK0F8MCx5PShXPSgoVz1WKzcxODc4NzI1OStXKygoKFg9KChYPUYrLTExMjAyMTAzNzkrWCsoKEN8flcpXkkpfDApPDwxMHxYPj4+MjIpK0N8MCl8fkkpXkMpfDApPDwxNXxXPj4+MTcpK1h8MCkreSsoKEk9RystMzQzNDg1NTUxK0krKChXfH5DKV5YKXwwKTw8MjF8ST4+PjExKXwwLEU9VytFfDAsQj1YK0J8MCxlPWUrNjR8MCwwIT0oMHwocj1yKy02NHwwKSk7KTtyZXR1cm4gYXJbbT4+Ml09QSxhcltnPj4yXT15LGFyW1o+PjJdPUUsYXJbcD4+Ml09QiwwfGV9ZnVuY3Rpb24gbGMoQSxlKXtBfD0wO3ZhciByPTAsaT0wLGY9MDtyPShpPTYzJmFyWyhlfD0wKT4+Ml0pKzF8MCx0cltlKzI0K2k+PjBdPS0xMjgsZj1lKzI0fDAsKGlePTYzKT4+PjA8OD8odmIoZSsyNCtyfDAsMCwwfGkpLGNjKGUsZiw2NCksaT01NixyPTApOmk9aSstOHwwLHZiKGUrMjQrcnwwLDAsMHxpKSxyPShpPTB8YXJbZT4+Ml0pPDwzLGFyW2U+PjJdPXIsdHJbZSs4MD4+MF09cix0cltlKzgxPj4wXT1pPj4+NSx0cltlKzgyPj4wXT1pPj4+MTMsdHJbZSs4Mz4+MF09aT4+PjIxLGk9MHxhcltlKzQ+PjJdLHRyW2UrODQ+PjBdPWksdHJbZSs4NT4+MF09aT4+PjgsdHJbZSs4Nj4+MF09aT4+PjE2LHRyW2UrODc+PjBdPWk+Pj4yNCxjYyhlLGYsNjQpLGY9ZSs4fDAsdHJbQT4+MF09YXJbZj4+Ml0sdHJbQSsxPj4wXT0oMHxhcltmPj4yXSk+Pj44LHRyW0ErMj4+MF09KDB8YXJbZj4+Ml0pPj4+MTYsdHJbQSszPj4wXT0oMHxhcltmPj4yXSk+Pj4yNCxmPWUrMTJ8MCx0cltBKzQ+PjBdPWFyW2Y+PjJdLHRyW0ErNT4+MF09KDB8YXJbZj4+Ml0pPj4+OCx0cltBKzY+PjBdPSgwfGFyW2Y+PjJdKT4+PjE2LHRyW0ErNz4+MF09KDB8YXJbZj4+Ml0pPj4+MjQsZj1lKzE2fDAsdHJbQSs4Pj4wXT1hcltmPj4yXSx0cltBKzk+PjBdPSgwfGFyW2Y+PjJdKT4+PjgsdHJbQSsxMD4+MF09KDB8YXJbZj4+Ml0pPj4+MTYsdHJbQSsxMT4+MF09KDB8YXJbZj4+Ml0pPj4+MjQsZj1lKzIwfDAsdHJbQSsxMj4+MF09YXJbZj4+Ml0sdHJbQSsxMz4+MF09KDB8YXJbZj4+Ml0pPj4+OCx0cltBKzE0Pj4wXT0oMHxhcltmPj4yXSk+Pj4xNix0cltBKzE1Pj4wXT0oMHxhcltmPj4yXSk+Pj4yNCx2YigwfGUsMCwxNTIpfWZ1bmN0aW9uIHVjKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe0F8PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShaPXVyKSsyMDQ0OHwwLGQ9KFc9WikrOTA4OHwwLGs9MyYocnw9MCksaD0zJihpfD0wKSxnPShyPj4yKSsoZnw9MCl8MCxtPShpPj4yKSsobnw9MCl8MCx5PTE0LSgwfGFyWyhlfD0wKSs0OTk2Pj4yXSl8MCx2PTB8YXJbZSs0ODQ+PjJdLHc9MHxhcltlKzQ4OD4+Ml0sMyYoaXxyKSl7aWYoeT0wfGFyWzk3NjgrKGs8PDIpPj4yXSxuPTB8YXJbOTc4NCsoazw8Mik+PjJdLHM9MHxhcls5NzY4KyhoPDwyKT4+Ml0sZj0wfGFyWzk3ODQrKGg8PDIpPj4yXSxwPTAteXwwLC0xPChtLXN8Zy15fDApJiYoZytsK258MCk8KDB8dikmJihtK3UrZnwwKTwoMHx3KSlmPWErKCgwfGJyKG0sbj1jKSkrZzw8MSl8MDtlbHNle2lmKCgwfChlPTAtc3wwKSk8KDB8KGk9Zit1fDApKSYmKEU9di0xfDAsWD13LTF8MCwoMHxwKTwoMHwoQj1uK2x8MCkpKSlkb3tmb3Iobj0wfGJyKCgwfChuPWUrbXwwKSk8MD8wOigwfG4pPCgwfHcpP246WCxjKSxyPSg4MCooZStzfDApfDApK3l8MCxmPXA7ST1mK2d8MCxvcltkKyhyK2Y8PDEpPj4xXT0wfG9yW2ErKCgoMHxJKTwwPzA6KDB8SSk8KDB8dik/STpFKStuPDwxKT4+MV0sKDB8KGY9ZisxfDApKSE9KDB8Qik7KTtlPWUrMXwwfXdoaWxlKCgwfGUpIT0oMHxpKSk7Zj1kKygoKG49ODApKnN8MCkreTw8MSl8MH0oMHxiKTw5P2NzWzMxJmFyW0ErMjIwKyhrPDw0KSsoaDw8Mik+PjJdXSh0LG8sZixuLGwsdSxXKTpsc1szMSZhcltBKzMwMCsoazw8NCkrKGg8PDIpPj4yXV0odCxvLGYsbixsLHUsVyxiKSx1cj1afWVsc2V7aWYoISgobXxnfDApPDB8KDB8dik8KGcrbHwwKXwoMHx3KTwobSt1fDApKSlyZXR1cm4gZj1hKygoMHxicihtLGMpKStnPDwxKXwwLCgwfGIpPDk/Y3NbMzEmYXJbQSsyMjA+PjJdXSh0LG8sZixjLGwsdSxXKTpsc1szMSZhcltBKzMwMD4+Ml1dKHQsbyxmLGMsbCx1LFcsYiksdm9pZCh1cj1aKTtpZigoMHx1KTw9MClyZXR1cm4gdm9pZCh1cj1aKTtpZihlPXYtMXwwLHI9dy0xfDAsISgwPCgwfGwpKSlyZXR1cm4gdm9pZCh1cj1aKTtmPTA7ZG97Zm9yKGk9MHxicigoMHwoaT1mK218MCkpPDA/MDooMHxpKTwoMHx3KT9pOnIsYykscD0wfGJyKGYsbyksbj0wO1c9bitnfDAsb3JbdCsobitwPDwxKT4+MV09KDB8bHJbYSsoKCgwfFcpPDA/MDooMHxXKTwoMHx2KT9XOmUpK2k8PDEpPj4xXSk8PHksKDB8KG49bisxfDApKSE9KDB8bCk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHx1KSk7dXI9Wn19ZnVuY3Rpb24gYmMoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYil7QXw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wO3ZhciBzLGQsayxoLHcsdixtLGcsWixwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7aWYodXI9KFo9dXIpKzE0NzY4fDAsZD0oVz1aKSs5MDg4fDAsaz0zJihyfD0wKSxoPTMmKGl8PTApLGc9KHI+PjIpKyhmfD0wKXwwLG09KGk+PjIpKyhufD0wKXwwLHk9MTQtKDB8YXJbKGV8PTApKzQ5OTY+PjJdKXwwLHY9MHxhcltlKzQ4ND4+Ml0sdz0wfGFyW2UrNDg4Pj4yXSwzJihpfHIpKXtpZih5PTB8YXJbOTc2OCsoazw8Mik+PjJdLG49MHxhcls5Nzg0KyhrPDwyKT4+Ml0scz0wfGFyWzk3NjgrKGg8PDIpPj4yXSxmPTB8YXJbOTc4NCsoaDw8Mik+PjJdLHA9MC15fDAsLTE8KG0tc3xnLXl8MCkmJihnK2wrbnwwKTwoMHx2KSYmKG0rdStmfDApPCgwfHcpKWY9YSsoKDB8YnIobSxuPWMpKStnKXwwO2Vsc2V7aWYoKDB8KGU9MC1zfDApKTwoMHwoaT1mK3V8MCkpJiYoRT12LTF8MCxYPXctMXwwLCgwfHApPCgwfChCPW4rbHwwKSkpKWRve2ZvcihuPTB8YnIoKDB8KG49ZSttfDApKTwwPzA6KDB8bik8KDB8dyk/bjpYLGMpLHI9KDgwKihlK3N8MCl8MCkreXwwLGY9cDtJPWYrZ3wwLHRyW2QrKHIrZik+PjBdPTB8dHJbYSsoKCgwfEkpPDA/MDooMHxJKTwoMHx2KT9JOkUpK24pPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxCKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfGkpKTtmPWQrKCgobj04MCkqc3wwKSt5KXwwfSgwfGIpPDk/Y3NbMzEmYXJbQSsyMjArKGs8PDQpKyhoPDwyKT4+Ml1dKHQsbyxmLG4sbCx1LFcpOmxzWzMxJmFyW0ErMzAwKyhrPDw0KSsoaDw8Mik+PjJdXSh0LG8sZixuLGwsdSxXLGIpLHVyPVp9ZWxzZXtpZighKChtfGd8MCk8MHwoMHx2KTwoZytsfDApfCgwfHcpPChtK3V8MCkpKXJldHVybiBmPWErKCgwfGJyKG0sYykpK2cpfDAsKDB8Yik8OT9jc1szMSZhcltBKzIyMD4+Ml1dKHQsbyxmLGMsbCx1LFcpOmxzWzMxJmFyW0ErMzAwPj4yXV0odCxvLGYsYyxsLHUsVyxiKSx2b2lkKHVyPVopO2lmKCgwfHUpPD0wKXJldHVybiB2b2lkKHVyPVopO2lmKGU9di0xfDAscj13LTF8MCwhKDA8KDB8bCkpKXJldHVybiB2b2lkKHVyPVopO2Y9MDtkb3tmb3IoaT0wfGJyKCgwfChpPWYrbXwwKSk8MD8wOigwfGkpPCgwfHcpP2k6cixjKSxwPTB8YnIoZixvKSxuPTA7Vz1uK2d8MCxvclt0KyhuK3A8PDEpPj4xXT0oMHxjclthKygoKDB8Vyk8MD8wOigwfFcpPCgwfHYpP1c6ZSkraSk+PjBdKTw8eSwoMHwobj1uKzF8MCkpIT0oMHxsKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHUpKTt1cj1afX1mdW5jdGlvbiBzYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKG09dXI9KHY9dXIpKzMxJi0zMix1cj11cisxOTgwOHwwLG09KGs9bSkrOTA4OHwwLHk9MTQtKDB8YXJbKGV8PTApKzUwMDQ+PjJdKXwwLEU9MHxhcltlKzUwMTY+PjJdLHc9KDB8YXJbZSs0ODQ+PjJdKS8oMHxFKXwwLEI9MHxhcltlKzUwMjA+PjJdLGg9KDB8YXJbZSs0ODg+PjJdKS8oMHxCKXwwLHM9NyYocj0wfGJyKDIvKDB8RSl8MCxyKSksZD03JihpPTB8YnIoMi8oMHxCKXwwLGkpKSxFPSgoMHxmKS8oMHxFKXwwKSsocj4+Myl8MCxCPSgoMHxuKS8oMHxCKXwwKSsoaT4+Myl8MCw3JihpfHIpKXtpZigwPCgwfEUpJiYoRStsfDApPD0ody0yfDApJjA8KDB8QikmJihCK3V8MCk8PShoLTJ8MCkpZj1hKygoMHxicihCLGMpKStFPDwxKXwwLGU9YztlbHNle2lmKC0xPCgwfChpPXUrMnwwKSkmJihaPXctMXwwLHA9aC0xfDAsLTE8KDB8KGc9bCsyfDApKSkpe3I9LTE7ZG97Zm9yKGY9MHxicigoMHwoZj1yK0J8MCkpPDA/MDooMHxmKTwoMHxoKT9mOnAsYyksbj04MCsoODAqcnwwKXwwLGU9LTE7eT1lK0V8MCxvclttKyhuKyhlPWUrMXwwKTw8MSk+PjFdPTB8b3JbYSsoKCgwfHkpPDA/MDooMHx5KTwoMHx3KT95OlopK2Y8PDEpPj4xXSwoMHxlKSE9KDB8Zyk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9Zj1tKzE2MnwwLGU9ODB9cj0wIT0oMHxzKSxpPTAhPSgwfGQpO2Rve2lmKHImaSl7aWYoKDB8Yik8OSl7YnNbNyZhcltBKzIxNj4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWJzWzcmYXJbQSsyOTY+PjJdXSh0LG8sZixlLGwsdSxzLGQsayxiKTticmVha31pZihyKXtpZigoMHxiKTw5KXtic1s3JmFyW0ErMjA4Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI4OD4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWlmKGl8fHNyKDU1NzM5LDQ4NDI4LDI2OCw0ODQ3MiksKDB8Yik8OSl7YnNbNyZhcltBKzIxMj4+Ml1dKHQsbyxmLGUsbCx1LDAsZCxrLGIpO2JyZWFrfWJzWzcmYXJbQSsyOTI+PjJdXSh0LG8sZixlLGwsdSwwLGQsayxiKTticmVha313aGlsZSgwKTt1cj12fWVsc2V7aWYoLTE8KDB8RSkmJiEoKDB8Qik8MHwoMHx3KTwoRStsfDApfCgwfGgpPChCK3V8MCkpKXJldHVybiBlPWErKCgwfGJyKEIsYykpK0U8PDEpfDAsKDB8Yik8OT91c1szJmFyW0ErMjA0Pj4yXV0odCxvLGUsYyxsLHUsMCwwLDApOmJzWzcmYXJbQSsyODQ+PjJdXSh0LG8sZSxjLGwsdSwwLDAsMCxiKSx2b2lkKHVyPXYpO2lmKCgwfHUpPD0wKXJldHVybiB2b2lkKHVyPXYpO2lmKGk9dy0xfDAsZj1oLTF8MCwhKDA8KDB8bCkpKXJldHVybiB2b2lkKHVyPXYpO3I9MDtkb3tmb3Iobj0wfGJyKCgwfChuPXIrQnwwKSk8MD8wOigwfG4pPCgwfGgpP246ZixjKSxtPTB8YnIocixvKSxlPTA7Yj1lK0V8MCxvclt0KyhlK208PDEpPj4xXT0oMHxsclthKygoKDB8Yik8MD8wOigwfGIpPCgwfHcpP2I6aSkrbjw8MSk+PjFdKTw8eSwoMHwoZT1lKzF8MCkpIT0oMHxsKTspO3I9cisxfDB9d2hpbGUoKDB8cikhPSgwfHUpKTt1cj12fX1mdW5jdGlvbiBkYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKG09dXI9KHY9dXIpKzMxJi0zMix1cj11cisxNDQ0OHwwLG09KGs9bSkrOTA4OHwwLHk9MTQtKDB8YXJbKGV8PTApKzUwMDQ+PjJdKXwwLEU9MHxhcltlKzUwMTY+PjJdLHc9KDB8YXJbZSs0ODQ+PjJdKS8oMHxFKXwwLEI9MHxhcltlKzUwMjA+PjJdLGg9KDB8YXJbZSs0ODg+PjJdKS8oMHxCKXwwLHM9NyYocj0wfGJyKDIvKDB8RSl8MCxyKSksZD03JihpPTB8YnIoMi8oMHxCKXwwLGkpKSxFPSgoMHxmKS8oMHxFKXwwKSsocj4+Myl8MCxCPSgoMHxuKS8oMHxCKXwwKSsoaT4+Myl8MCw3JihpfHIpKXtpZigwPCgwfEUpJiYoRStsfDApPD0ody0yfDApJjA8KDB8QikmJihCK3V8MCk8PShoLTJ8MCkpZj1hKygoMHxicihCLGMpKStFKXwwLGU9YztlbHNle2lmKC0xPCgwfChpPXUrMnwwKSkmJihaPXctMXwwLHA9aC0xfDAsLTE8KDB8KGc9bCsyfDApKSkpe3I9LTE7ZG97Zm9yKGY9MHxicigoMHwoZj1yK0J8MCkpPDA/MDooMHxmKTwoMHxoKT9mOnAsYyksbj04MCsoODAqcnwwKXwwLGU9LTE7eT1lK0V8MCx0clttKyhuKyhlPWUrMXwwKSk+PjBdPTB8dHJbYSsoKCgwfHkpPDA/MDooMHx5KTwoMHx3KT95OlopK2YpPj4wXSwoMHxlKSE9KDB8Zyk7KTtyPXIrMXwwfXdoaWxlKCgwfHIpIT0oMHxpKSl9Zj1tKzgxfDAsZT04MH1yPTAhPSgwfHMpLGk9MCE9KDB8ZCk7ZG97aWYociZpKXtpZigoMHxiKTw5KXtic1s3JmFyW0ErMjE2Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI5Nj4+Ml1dKHQsbyxmLGUsbCx1LHMsZCxrLGIpO2JyZWFrfWlmKHIpe2lmKCgwfGIpPDkpe2JzWzcmYXJbQSsyMDg+PjJdXSh0LG8sZixlLGwsdSxzLGQsayxiKTticmVha31ic1s3JmFyW0ErMjg4Pj4yXV0odCxvLGYsZSxsLHUscyxkLGssYik7YnJlYWt9aWYoaXx8c3IoNTU3MzksNDg0MjgsMjY4LDQ4NDcyKSwoMHxiKTw5KXtic1s3JmFyW0ErMjEyPj4yXV0odCxvLGYsZSxsLHUsMCxkLGssYik7YnJlYWt9YnNbNyZhcltBKzI5Mj4+Ml1dKHQsbyxmLGUsbCx1LDAsZCxrLGIpO2JyZWFrfXdoaWxlKDApO3VyPXZ9ZWxzZXtpZigtMTwoMHxFKSYmISgoMHxCKTwwfCgwfHcpPChFK2x8MCl8KDB8aCk8KEIrdXwwKSkpcmV0dXJuIGU9YSsoKDB8YnIoQixjKSkrRSl8MCwoMHxiKTw5P3VzWzMmYXJbQSsyMDQ+PjJdXSh0LG8sZSxjLGwsdSwwLDAsMCk6YnNbNyZhcltBKzI4ND4+Ml1dKHQsbyxlLGMsbCx1LDAsMCwwLGIpLHZvaWQodXI9dik7aWYoKDB8dSk8PTApcmV0dXJuIHZvaWQodXI9dik7aWYoaT13LTF8MCxmPWgtMXwwLCEoMDwoMHxsKSkpcmV0dXJuIHZvaWQodXI9dik7cj0wO2Rve2ZvcihuPTB8YnIoKDB8KG49citCfDApKTwwPzA6KDB8bik8KDB8aCk/bjpmLGMpLG09MHxicihyLG8pLGU9MDtiPWUrRXwwLG9yW3QrKGUrbTw8MSk+PjFdPSgwfGNyW2ErKCgoMHxiKTwwPzA6KDB8Yik8KDB8dyk/YjppKStuKT4+MF0pPDx5LCgwfChlPWUrMXwwKSkhPSgwfGwpOyk7cj1yKzF8MH13aGlsZSgoMHxyKSE9KDB8dSkpO3VyPXZ9fWZ1bmN0aW9uIGtjKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscz0wLGQ9MCxrPTAsaD0wLHc9MDtpZigwfEhiWzMxJmFyWzEyKygwfGFyWyhBfD0wKT4+Ml0pPj4yXV0oQSxuKXx8c3IoNDg1ODEsNDg0MjgsMTA3NCw0ODYwNCksYj0wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxuKSwoMHxhclsyNCtiPj4yXSk+KDB8dCkmJigwfGFyWzI4K2I+PjJdKT4oMHxvKSl7aWYoaT10Pj4oZj0wfGFyWzEwMzY4K2I+PjJdKSxmPW8+PmYsKDB8aSk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChuPTB8YXJbMTAzNzIrYj4+Ml0pKTw9KDB8aSkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8Zik8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfGYpPj0oMHxhclsxMDM3NitiPj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdz0oMHxhclsxMDM2MCtiPj4yXSkrKDMqKCgwfGJyKG4sZikpK2l8MCl8MCl8MCwhKDc2OCYoY3Jbdz4+MF18Y3JbdysxPj4wXTw8OCkpKXJldHVybiBvcltsPj4xXT0wLG9yW2wrMj4+MV09MCx2b2lkKHRyW3U+PjBdPTApO2lmKDE9PSgwfHRyWzEwNTE2K2I+PjBdKSlyZXR1cm4gb3JbbD4+MV09MCxvcltsKzI+PjFdPTAsdm9pZCh0clt1Pj4wXT0wKTtpZihpPXQ+PihmPTB8YXJbMTAzODgrYj4+Ml0pLGY9bz4+ZiwoMHxpKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KG49MHxhclsxMDM5MitiPj4yXSkpPD0oMHxpKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxmKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8Zik+PSgwfGFyWzEwMzk2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx3PTB8YXJbMTAzODArYj4+Ml0saD0oMHxicihuLGYpKStpfDAsMHx0clt3KygxMipofDApPj4wXSlpZigwfHRyW3crKDEyKmh8MCkrMT4+MF0pe2lmKHM9MHxhcltlKzkyPj4yXSwwPCgwfGFyWyhuPXIrMzMyfDApPj4yXSkpZm9yKGY9MDtpPTkyKygwfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTgwKyhmPDwyKT4+Ml0pKXwwLChpPSgwfGFyW2k+PjJdKTw9KDB8cykpJigwfChmPWYrMXwwKSk8KDB8YXJbbj4+Ml0pOyk7ZWxzZSBpPTE7aWYoaSYwPCgwfGFyWyhuPXIrMzI4fDApPj4yXSkpZm9yKGY9MDtpPTkyKygwfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2KyhmPDwyKT4+Ml0pKXwwLChpPSgwfGFyW2k+PjJdKTw9KDB8cykpJigwfChmPWYrMXwwKSk8KDB8YXJbbj4+Ml0pOyk7ZD1pP2M6MHx0cltyKzM3Mj4+MF19ZWxzZSBkPTA7ZWxzZSBkPTE7cmV0dXJuKGs9bHJbKGs9dysoMTIqaHwwKSs0KyhkPDwyKXwwKT4+MV18bHJbaysyPj4xXTw8MTYscz0wfHRyW3crKDEyKmh8MCkrMitkPj4wXSxuPXQ+PihpPTB8YXJbMTAzNDgrYj4+Ml0pLGk9bz4+aSwoMHxuKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KGY9MHxhclsxMDM1MitiPj4yXSkpPD0oMHxuKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHxpKTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8aSk+PSgwfGFyWzEwMzU2K2I+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSxpPSgwfGFyWzEwMzQwK2I+PjJdKSsoMjQqKCgwfGJyKGYsaSkpK258MCl8MCkrMnwwLGk9MHxhclsoMHxhcls0OCtiPj4yXSkrKGxyW2k+PjFdPDwyKT4+Ml0sKDB8dHJbKG49cisxMzAwKyhjPDw0KSthfDApPj4wXSkhPSgwfHRyW2krMTMwMCsoZDw8NCkrcz4+MF0pKT8odHJbdT4+MF09MCxvcltsPj4xXT0wLHZvaWQob3JbbCsyPj4xXT0wKSk6KHRyW3U+PjBdPTEsaT0oMHxhcls5MitiPj4yXSktKDB8YXJbaSsxMDQ0KyhkPDw2KSsoczw8Mik+PjJdKXwwLGY9KDB8YXJbZSs5Mj4+Ml0pLSgwfGFyW3IrMTA0NCsoYzw8NikrKGE8PDIpPj4yXSl8MCwwIT0oMHx0cltuPj4wXSl8KDB8aSk9PSgwfGYpPyhvcltsPj4xXT1rLHZvaWQob3JbbCsyPj4xXT1rPj4+MTYpKTooaT0oMHxpKTwtMTI4Py0xMjg6KDB8aSk8MTI3P2k6MTI3KT8oZT0zMisoMHxicigoMTYzODQrKCgoMHxpKTwwPzAtaXwwOmkpPj4xKXwwKS8oMHxpKXwwLCgwfGYpPC0xMjg/LTEyODooMHxmKTwxMjc/ZjoxMjcpKT4+NixBPTB8YnIoZT0oMHxlKTwtNDA5Nj8tNDA5NjooMHxlKTw0MDk1P2U6NDA5NSxrPDwxNj4+MTYpLEE9MHxicigoKGM9KDB8QSk8MCk/MC1BfDA6QSkrMTI3Pj44LGM/LTE6MCE9KDB8QSkmMSksb3JbbD4+MV09KDB8QSk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8QSk8MzI3Njc/QTozMjc2NyksZT0wfGJyKGUsaz4+MTYpLGU9MHxicigoKEE9KDB8ZSk8MCk/MC1lfDA6ZSkrMTI3Pj44LEE/LTE6MCE9KDB8ZSkmMSksdm9pZChvcltsKzI+PjFdPSgwfGUpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGUpPDMyNzY3P2U6MzI3NjcpKSk6KG9yW2w+PjFdPWssb3JbbCsyPj4xXT1rPj4+MTYsZXIoQSs0fDAsMTAwOCwwKSx2b2lkKHRyW2UrMTA1MTY+PjBdPTMpKSl9ZXIoQSs0fDAsMTAyNiwwKSx0clt1Pj4wXT0wfWZ1bmN0aW9uIGhjKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgdSxiLHMsZD0wO2lmKCEoMHx0clsocnw9MCkrMzI0Pj4wXSkpcmV0dXJuIG9yW2M+PjFdPTAsb3JbYysyPj4xXT0wLHZvaWQodHJbbD4+MF09MCk7aWYocz0wfGFyW2UrNTgwND4+Ml0sZD0wfGFyW3IrMjA+PjJdPzA6MD09KDB8dHJbciszNzI+PjBdKSYxLGQ9MHxhcltyKzkxNisoZDw8NikrKGFyW3IrMzc2Pj4yXTw8Mik+PjJdLCEoMHxIYlszMSZhclsxMisoMHxhcltBPj4yXSk+PjJdXShBLGQpKSlyZXR1cm4gb3JbYz4+MV09MCxvcltjKzI+PjFdPTAsdm9pZCBlcihBKzR8KHRyW2w+PjBdPTApLDEwMTIsMCk7aWYoYj1uK2l8MCwoZj4+c3wwKT09KCh1PXQrZnwwKT4+c3wwKSYmKDB8Yik8KDB8YXJbZSsxMjQ4Pj4yXSkmJigwfHUpPCgwfGFyW2UrMTI1Mj4+Ml0pKXtpZihrYyhBLGUsciwwLDAsZCwtMTYmYiwtMTYmdSxvLGEsYyxsKSwwfHRyW2w+PjBdKXJldHVybn1lbHNlIG9yW2M+PjFdPTAsb3JbYysyPj4xXT0wLHRyW2w+PjBdPTA7a2MoQSxlLHIsMCwwLGQsKG4+PjEpK2kmLTE2LCh0Pj4xKStmJi0xNixvLGEsYyxsKX1mdW5jdGlvbiB3YyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAsbnw9MCx0fD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MDt2YXIgcyxkLGssaCx3LHYsbT0wLGc9MCxaPTA7aWYoZz11cj0odj11cikrMzEmLTMyLHVyPXVyKzE2fDAsdz1nKzh8MCxnPShtPWcpKzEyfDAsdD0wfGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTA7dmFyIGIscyxkLGssaCx3LHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7dz0wfGFyWyhBfD0wKSsxMDA2MD4+Ml0sdD1lPj4obT0wfGFyW0ErMTAzNjg+PjJdKSxtPXI+Pm0sKDB8dCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChnPTB8YXJbQSsxMDM3Mj4+Ml0pKTw9KDB8dCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8bSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfG0pPj0oMHxhcltBKzEwMzc2Pj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksWj0oMHxhcltBKzEwMzYwPj4yXSkrKDMqKCgwfGJyKGcsbSkpK3R8MCl8MCl8MCxaPSg2NTUzNSYoY3JbWj4+MF18Y3JbWisxPj4wXTw8OCkpPj4+Myx0PShkPWErbnwwKS0xfDAsKGg9KDB8KHM9Zj4+dykpPT0oKGs9ZistMXwwKT4+d3wwKSkmJihuPj53fDApPT0odD4+d3wwKT92PUk9MDpFPTk7QTpkb3tpZig5PT0oMHxFKSl7aWYoMT09KDB8Yykpc3dpdGNoKDcmWil7Y2FzZSAyOmNhc2UgNjpjYXNlIDc6dj1JPTA7YnJlYWsgQX1pZigwfGthKEEsZSxyLGksZixuLG8sYSxjLGssdCkpe2lmKHQ+Pj1YPTB8YXJbQSsxMDM4OD4+Ml0sKDB8KGc9az4+WCkpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfGcpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx0KTwoMHxhcltBKzEwMzk2Pj4yXSkpe0k9KDB8YXJbQSsxMDM4MD4+Ml0pKygxMiooKDB8YnIobSx0KSkrZ3wwKXwwKXwwLG9yW2w+PjFdPTB8b3JbST4+MV0sb3JbbCsyPj4xXT0wfG9yW0krMj4+MV0sb3JbbCs0Pj4xXT0wfG9yW0krND4+MV0sb3JbbCs2Pj4xXT0wfG9yW0krNj4+MV0sb3JbbCs4Pj4xXT0wfG9yW0krOD4+MV0sb3JbbCsxMD4+MV09MHxvcltJKzEwPj4xXSx2PUk9MTticmVha31zcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2Ugdj1JPTB9fXdoaWxlKDApO2lmKCgwfHUpPD0oMHx2KSlyZXR1cm4gMHwobD12KTtYPW4rLTF8MCwoMHxzKT09KCh0PShiPW8rZnwwKS0xfDApPj53fDApJiYobj4+d3wwKT09KFg+Pnd8MCk/Qj1wPTA6RT0yMjtBOmRve2lmKDIyPT0oMHxFKSl7aWYoMT09KDB8Yykpc3dpdGNoKDcmWil7Y2FzZSAxOmNhc2UgNDpjYXNlIDU6Qj1wPTA7YnJlYWsgQX1pZigwfGthKEEsZSxyLGksZixuLG8sYSxjLHQsWCkpe3Q+Pj1tPTB8YXJbQSsxMDM4OD4+Ml0sbT1YPj5tLCgwfHQpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwoZz0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfHQpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG0pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxtKT49KDB8YXJbQSsxMDM5Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHQ9KFo9MHxhcltBKzEwMzgwPj4yXSkrKDEyKihnPSgwfGJyKGcsbSkpK3R8MCl8MCl8MDtkb3tpZihJJiYocD0wfHRyW2w+PjBdKTw8MjQ+PjI0PT0oMHx0clt0Pj4wXSkpe2lmKHA8PDI0Pj4yNCl7aWYoKDB8b3JbbCs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKzE+PjBdKTw8MjQ+PjI0PT0oMHx0cltaKygxMipnfDApKzE+PjBdKSl7aWYoIShtPDwyND4+MjQpKXtwPTEsQj0wO2JyZWFrIEF9aWYoKDB8b3JbbCs4Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrOD4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrMTA+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSsxMD4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrMz4+MF0pPT0oMHx0cltaKygxMipnfDApKzM+PjBdKSl7cD0xLEI9MDticmVhayBBfX19fXdoaWxlKDApO29yWyhwPWwrKDEyKnZ8MCl8MCk+PjFdPTB8b3JbdD4+MV0sb3JbcCsyPj4xXT0wfG9yW3QrMj4+MV0sb3JbcCs0Pj4xXT0wfG9yW3QrND4+MV0sb3JbcCs2Pj4xXT0wfG9yW3QrNj4+MV0sb3JbcCs4Pj4xXT0wfG9yW3QrOD4+MV0sb3JbcCsxMD4+MV09MHxvclt0KzEwPj4xXSx2PShCPXYpKyhwPTEpfDB9ZWxzZSBCPXA9MH19d2hpbGUoMCk7aWYoKDB8dSk8PSgwfHYpKXJldHVybiAwfChsPXYpOygwfHMpPT0oYj4+d3wwKSYmKG4+Pnd8MCk9PShYPj53fDApfHwoRT00Nyk7QTpkb3tpZig0Nz09KDB8RSkmJjB8a2EoQSxlLHIsaSxmLG4sbyxhLGMsYixYKSl7dD1iPj4obT0wfGFyW0ErMTAzODg+PjJdKSxtPVg+Pm0sKDB8dCk8PS0xJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfChnPTB8YXJbQSsxMDM5Mj4+Ml0pKTw9KDB8dCkmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8bSk8PS0xJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLCgwfG0pPj0oMHxhcltBKzEwMzk2Pj4yXSkmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksdD0oWj0wfGFyW0ErMTAzODA+PjJdKSsoMTIqKGc9KDB8YnIoZyxtKSkrdHwwKXwwKXwwO2Rve2lmKHAmJih5PTB8dHJbbCsoMTIqQnwwKT4+MF0pPDwyND4+MjQ9PSgwfHRyW3Q+PjBdKSl7aWYoeTw8MjQ+PjI0KXtpZigoMHxvcltsKygxMipCfDApKzQ+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs0Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsoMTIqQnwwKSs2Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrNj4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrKDEyKkJ8MCkrMj4+MF0pIT0oMHx0cltaKygxMipnfDApKzI+PjBdKSlicmVha31pZigobT0wfHRyW2wrKDEyKkJ8MCkrMT4+MF0pPDwyND4+MjQ9PSgwfHRyW1orKDEyKmd8MCkrMT4+MF0pKXtpZighKG08PDI0Pj4yNCkpYnJlYWsgQTtpZigoMHxvcltsKygxMipCfDApKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsoMTIqQnwwKSsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCsoMTIqQnwwKSszPj4wXSk9PSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrIEF9fX13aGlsZSgwKTtvclsoeT1sKygxMip2fDApfDApPj4xXT0wfG9yW3Q+PjFdLG9yW3krMj4+MV09MHxvclt0KzI+PjFdLG9yW3krND4+MV09MHxvclt0KzQ+PjFdLG9yW3krNj4+MV09MHxvclt0KzY+PjFdLG9yW3krOD4+MV09MHxvclt0Kzg+PjFdLG9yW3krMTA+PjFdPTB8b3JbdCsxMD4+MV0sdj12KzF8MH19d2hpbGUoMCk7aWYoKDB8dSk8PSgwfHYpKXJldHVybiAwfChsPXYpO2gmJihuPj53fDApPT0oZD4+d3wwKXx8KEU9NzApO0E6ZG97aWYoNzA9PSgwfEUpJiYwfGthKEEsZSxyLGksZixuLG8sYSxjLGssZCkpe2c9az4+KHQ9MHxhcltBKzEwMzg4Pj4yXSksdD1kPj50LCgwfGcpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwobT0wfGFyW0ErMTAzOTI+PjJdKSk8PSgwfGcpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfHQpPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHx0KT49KDB8YXJbQSsxMDM5Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHQ9KFo9MHxhcltBKzEwMzgwPj4yXSkrKDEyKihnPSgwfGJyKG0sdCkpK2d8MCl8MCl8MDtkb3tpZihJJiYoVz0wfHRyW2w+PjBdKTw8MjQ+PjI0PT0oMHx0clt0Pj4wXSkpe2lmKFc8PDI0Pj4yNCl7aWYoKDB8b3JbbCs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKzE+PjBdKTw8MjQ+PjI0IT0oMHx0cltaKygxMipnfDApKzE+PjBdKSlicmVhaztpZighKG08PDI0Pj4yNCkpYnJlYWsgQTtpZigoMHxvcltsKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCszPj4wXSk9PSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrIEF9fXdoaWxlKDApO29yWyhXPWwrKDEyKnZ8MCl8MCk+PjFdPTB8b3JbdD4+MV0sb3JbVysyPj4xXT0wfG9yW3QrMj4+MV0sb3JbVys0Pj4xXT0wfG9yW3QrND4+MV0sb3JbVys2Pj4xXT0wfG9yW3QrNj4+MV0sb3JbVys4Pj4xXT0wfG9yW3QrOD4+MV0sb3JbVysxMD4+MV09MHxvclt0KzEwPj4xXSx2PXYrMXwwfX13aGlsZSgwKTtpZigoMHx1KTw9KDB8dil8ND09KDB8dikpcmV0dXJuIDB8KGw9dik7aWYoaCYmKG4+Pnd8MCk9PShYPj53fDApKXJldHVybiAwfChsPXYpO2lmKCEoMHxrYShBLGUscixpLGYsbixvLGEsYyxrLFgpKSlyZXR1cm4gMHwobD12KTtnPWs+Pih0PTB8YXJbQSsxMDM4OD4+Ml0pLHQ9WD4+dCwoMHxnKTw9LTEmJnNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSksKDB8KG09MHxhcltBKzEwMzkyPj4yXSkpPD0oMHxnKSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHx0KTw9LTEmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSksKDB8dCk+PSgwfGFyW0ErMTAzOTY+PjJdKSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSx0PShaPTB8YXJbQSsxMDM4MD4+Ml0pKygxMiooZz0oMHxicihtLHQpKStnfDApfDApfDA7ZG97aWYocCl7aWYoKG09MHx0cltsKygxMipCfDApPj4wXSk8PDI0Pj4yNCE9KDB8dHJbdD4+MF0pKWJyZWFrO2lmKG08PDI0Pj4yNCl7aWYoKDB8b3JbbCsoMTIqQnwwKSs0Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrND4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrKDEyKkJ8MCkrNj4+MV0pIT0oMHxvcltaKygxMipnfDApKzY+PjFdKSlicmVhaztpZigoMHx0cltsKygxMipCfDApKzI+PjBdKSE9KDB8dHJbWisoMTIqZ3wwKSsyPj4wXSkpYnJlYWt9aWYoKG09MHx0cltsKygxMipCfDApKzE+PjBdKTw8MjQ+PjI0IT0oMHx0cltaKygxMipnfDApKzE+PjBdKSlicmVhaztpZighKG08PDI0Pj4yNCkpcmV0dXJuIDB8KGw9dik7aWYoKDB8b3JbbCsoMTIqQnwwKSs4Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrOD4+MV0pKWJyZWFrO2lmKCgwfG9yW2wrKDEyKkJ8MCkrMTA+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSsxMD4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrKDEyKkJ8MCkrMz4+MF0pIT0oMHx0cltaKygxMipnfDApKzM+PjBdKSlicmVhaztyZXR1cm4gMHx2fX13aGlsZSgwKTtkb3tpZihJKXtpZigobT0wfHRyW2w+PjBdKTw8MjQ+PjI0IT0oMHx0clt0Pj4wXSkpYnJlYWs7aWYobTw8MjQ+PjI0KXtpZigoMHxvcltsKzQ+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs0Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCs2Pj4xXSkhPSgwfG9yW1orKDEyKmd8MCkrNj4+MV0pKWJyZWFrO2lmKCgwfHRyW2wrMj4+MF0pIT0oMHx0cltaKygxMipnfDApKzI+PjBdKSlicmVha31pZigobT0wfHRyW2wrMT4+MF0pPDwyND4+MjQhPSgwfHRyW1orKDEyKmd8MCkrMT4+MF0pKWJyZWFrO2lmKCEobTw8MjQ+PjI0KSlyZXR1cm4gMHwobD12KTtpZigoMHxvcltsKzg+PjFdKSE9KDB8b3JbWisoMTIqZ3wwKSs4Pj4xXSkpYnJlYWs7aWYoKDB8b3JbbCsxMD4+MV0pIT0oMHxvcltaKygxMipnfDApKzEwPj4xXSkpYnJlYWs7aWYoKDB8dHJbbCszPj4wXSkhPSgwfHRyW1orKDEyKmd8MCkrMz4+MF0pKWJyZWFrO3JldHVybiAwfHZ9fXdoaWxlKDApO3JldHVybiBvclsobD1sKygxMip2fDApfDApPj4xXT0wfG9yW3Q+PjFdLG9yW2wrMj4+MV09MHxvclt0KzI+PjFdLG9yW2wrND4+MV09MHxvclt0KzQ+PjFdLG9yW2wrNj4+MV09MHxvclt0KzY+PjFdLG9yW2wrOD4+MV09MHxvclt0Kzg+PjFdLG9yW2wrMTA+PjFdPTB8b3JbdCsxMD4+MV0sMHwobD12KzF8MCl9KHJ8PTAsaXw9MCxmfD0wLG98PTAsbj0oWj04PT0oMHxvKT8yPCgwfGFyW3IrMTAwNjA+PjJdKTowKT9pOm4scz1aP2Y6dCwwLGQ9Wj9vOmEsaz1aP286YyxaPzA6bCxiLGg9dSsxfDApLCgwfHUpPCgwfChhclt3Pj4yXT10KSk/aT1lKzIwfDA6KGhjKEEscixlLG4scyxkLGssMCwwLG0sZyksYz0wfHRyW2c+PjBdLCh0clsoYT1nKzF8MCk+PjBdPTApfGFyWyhpPWUrMjB8MCk+PjJdP2E9MDooaGMoQSxyLGUsbixzLGQsaywwLDEsbSs0fDAsYSksY3w9YT0wfHRyW2E+PjBdKSxjPDwyND4+MjQmJihhclt3Pj4yXT10KzEsWj1iKygxMip0fDApKzR8MCxyPTB8YXJbbT4+Ml0sb3JbWj4+MV09cixvcltaKzI+PjFdPXI+Pj4xNixaPWIrKDEyKnR8MCkrOHwwLG09MHxhclttKzQ+PjJdLG9yW1o+PjFdPW0sb3JbWisyPj4xXT1tPj4+MTYsdHJbYisoMTIqdHwwKT4+MF09MHx0cltnPj4wXSx0cltiKygxMip0fDApKzE+PjBdPWEsdHJbYisoMTIqdHwwKSsyPj4wXT0wLHRyW2IrKDEyKnR8MCkrMz4+MF09MCkpLChjPTB8YXJbaT4+Ml0pfHwoZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7aWYoMTwoMHwobj0wfGFyWyhpfD0wKT4+Ml0pKSYoMHxuKTwoMHxmKSl7Zm9yKHQ9MHxicihuLTF8MCxuKSx1PTA7Oyl7aWYoISgoMHwoYj0wfGFyWzk4MDArKHU8PDIpPj4yXSkpPCgwfG4pJigwfChzPTB8YXJbOTg0OCsodTw8Mik+PjJdKSk8KDB8bikpKXtvPTQ7YnJlYWt9aWYoZD0wfHRyWyhvPXIrKDEyKmJ8MCl8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbZSs5MTYrKHRyW3IrKDEyKmJ8MCkrMj4+MF08PDIpPj4yXSk6MCxrPTB8dHJbKGE9cisoMTIqc3wwKSsxfDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW2UrOTgwKyh0cltyKygxMipzfDApKzM+PjBdPDwyKT4+Ml0pOjAsISgwIT0oMHxkKXwobD0oYz0wfHRyW28+PjBdKTw8MjQ+PjI0PT0wKSkpe289MTg7YnJlYWt9aWYoISgwIT0oMHxrKXwoYT0obz0wfHRyW2E+PjBdKTw8MjQ+PjI0PT0wKSkpe289MTg7YnJlYWt9ZG97aWYoIShsfGEpKXtpZigoMHxhcltkKzkyPj4yXSk9PSgwfGFyW2srOTI+PjJdKSYmKDB8b3JbcisoMTIqYnwwKSs0Pj4xXSk9PSgwfG9yW3IrKDEyKnN8MCkrOD4+MV0pJiYoMHxvcltyKygxMipifDApKzY+PjFdKT09KDB8b3JbcisoMTIqc3wwKSsxMD4+MV0pKWJyZWFrO2s9MHxhcltpPj4yXSx0cltyKygxMiprfDApKzI+PjBdPTB8dHJbcisoMTIqYnwwKSsyPj4wXSx0cltyKygxMiprfDApKzM+PjBdPTB8dHJbcisoMTIqc3wwKSszPj4wXSx0cltyKygxMiprfDApPj4wXT1jLHRyW3IrKDEyKmt8MCkrMT4+MF09byxkPXIrKDEyKmt8MCkrNHwwLGI9bHJbKGI9cisoMTIqYnwwKSs0fDApPj4xXXxscltiKzI+PjFdPDwxNixvcltkPj4xXT1iLG9yW2QrMj4+MV09Yj4+PjE2LGs9cisoMTIqa3wwKSs4fDAsZD1sclsoZD1yKygxMipzfDApKzh8MCk+PjFdfGxyW2QrMj4+MV08PDE2LG9yW2s+PjFdPWQsb3JbaysyPj4xXT1kPj4+MTYsYXJbaT4+Ml09MSsoMHxhcltpPj4yXSl9fXdoaWxlKDApO2lmKCgwfCh1PXUrMXwwKSk9PSgwfHQpKXtvPTE4O2JyZWFrfWlmKCgwfGFyW2k+PjJdKT09KDB8Zikpe289MTg7YnJlYWt9fWlmKDQ9PSgwfG8pKXNyKDU1NzM5LDQ4NDI4LDEzNjAsNDg2MzcpO2Vsc2UgaWYoMTg9PSgwfG8pKTt9fShBLGUsYix3LGgpLGM9MHxhcltpPj4yXSksdD0wfGFyWyhhPWUrMzI4fDApPj4yXSwxIT0oMHxjKSYmKHQ9MHxhclsoKDB8dCk8KDB8YXJbKFo9ZSszMzJ8MCk+PjJdKT9hOlopPj4yXSksKDB8dSk8KDB8KGE9MHxhclt3Pj4yXSkpKXVyPXY7ZWxzZXtmb3IobD0wO249MT09KDB8YyksWj0oMHxsKTwoMHx0KT8yNTUmbDowLHRyW2IrKDEyKmF8MCkrMj4+MF09Wix0cltiKygxMiphfDApKzM+PjBdPW4/LTE6Wix0cltiKygxMiphfDApPj4wXT0xLHRyW2IrKDEyKmF8MCkrMT4+MF09MSYoMV5uKSxvclsoWj1uPWIrKDEyKmF8MCkrNHwwKT4+MV09MCxvcltaKzI+PjFdPTAsb3JbKG49bis0fDApPj4xXT0wLG49YSsxfChvcltuKzI+PjFdPTApLCEoKDB8dSk8PSgwfGEpKTspbD1sKzF8MCxjPTB8YXJbaT4+Ml0sYT1uO2FyW3c+PjJdPW4sdXI9dn19ZnVuY3Rpb24gdmMoQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzKXtzfD0wO3ZhciBkLGs9MCxoPTAsdz0wLHY9MCxtPTA7aWYobT11cj0oZD11cikrMzEmLTMyLHVyPXVyKzMyfDAsdj1tKzE2fDAsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsdXw9MCxifD0wLGR8PTA7dmFyIGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsSSxDLEcsVixGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MDtpZihQPXVyPShWPXVyKSszMSYtMzIsdXI9dXIrNDh8MCx2PVArMzJ8MCxtPVArMjR8MCxnPVArNDR8MCxJPVArMTJ8MCxQPShDPVApKzQwfDAsWj0odHw9MCkrLTF8KHRyWyhHPShzfD0wKSsxfDApPj4wXT0wKSxhclt2Pj4yXT1aLHg9YytvfDAsYXJbbT4+Ml09eCxhcls0K3Y+PjJdPVosTD14Ky0xfDAsYXJbNCttPj4yXT1MLHRyW3M+PjBdPTAsb3JbZD4+MV09MCxSPTEmKHg9KG9yWyhTPWQrMnwwKT4+MV09MCl8a2EoZSxpLGYsbix0LG8sYSxjLGIsWix4KSksdHJbZz4+MF09UixMPTB8a2EoZSxpLGYsbix0LG8sYSxjLGIsWixMKSx0clsxK2c+PjBdPTEmTCx4fD1MLEw9cis5MTYrKGw8PDYpKyh1PDwyKXwwLEY9MHxIYlszMSZhcls4KygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltMPj4yXSkpe3A9MHxhcltGKzkyPj4yXSxNPWUrMTAzNjh8MCxrPWUrMTAzNzJ8MCxoPWUrMTAzNzZ8MCx3PWUrMTAzNjB8MCx5PTEtbHwwLEI9ZSsxMDM4OHwwLEU9ZSsxMDM5MnwwLFg9ZSsxMDM5NnwwLFc9ZSsxMDM4MHwwLEQ9LTEsSj0wLEY9UjtBOmZvcig7Oyl7ZG97aWYoRjw8MjQ+PjI0IT0wJiYwPT0oMHx0cltzPj4wXSkpe2lmKEY9MHxhclt2KyhKPDwyKT4+Ml0sWT0wfGFyW20rKEo8PDIpPj4yXSxSPUY+PihOPTB8YXJbTT4+Ml0pLE49WT4+TiwoMHxSKTw9LTEpe0Y9ODticmVhayBBfWlmKCgwfChfPTB8YXJbaz4+Ml0pKTw9KDB8Uikpe0Y9ODticmVhayBBfWlmKCgwfE4pPD0tMSl7Rj0xMTticmVhayBBfWlmKCgwfE4pPj0oMHxhcltoPj4yXSkpe0Y9MTE7YnJlYWsgQX1pZihIPSgwfGFyW3c+PjJdKSsoMyooKDB8YnIoXyxOKSkrUnwwKXwwKXwwLDc2OCYoY3JbSD4+MF18Y3JbSCsxPj4wXTw8OCkpe2lmKE49Rj4+KEg9MHxhcltCPj4yXSksRj1ZPj5ILCgwfE4pPD0tMSl7Rj0xNTticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9MTU7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9MTg7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTE4O2JyZWFrIEF9aWYoUT0wfGFyW1c+PjJdLF89KDB8YnIoUixGKSkrTnwwLEY9MHx0clsoWT1RKygxMipffDApK2x8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKGw8PDYpKyh0cltRKygxMipffDApKzIrbD4+MF08PDIpPj4yXSk6MCxSPTB8dHJbKE49USsoMTIqX3wwKSt5fDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2Kyh5PDw2KSsodHJbUSsoMTIqX3wwKSsyK3k+PjBdPDwyKT4+Ml0pOjAsMCE9KDB8RikmMCE9KDB8dHJbWT4+MF0pJiYoMHxhcltGKzkyPj4yXSk9PSgwfHApKXt0cltzPj4wXT0xLFI9bHJbKFI9USsoMTIqX3wwKSs0KyhsPDwyKXwwKT4+MV18bHJbUisyPj4xXTw8MTYsb3JbZD4+MV09UixvcltkKzI+PjFdPVI+Pj4xNixSPTB8dHJbUSsoMTIqX3wwKSsyK2w+PjBdO2JyZWFrfVI9MCE9KDB8UikmMCE9KDB8dHJbTj4+MF0pJiYoMHxhcltSKzkyPj4yXSk9PSgwfHApPyh0cltzPj4wXT0xLFI9bHJbKFI9USsoMTIqX3wwKSs0Kyh5PDwyKXwwKT4+MV18bHJbUisyPj4xXTw8MTYsb3JbZD4+MV09UixvcltkKzI+PjFdPVI+Pj4xNiwwfHRyW1ErKDEyKl98MCkrMit5Pj4wXSk6RH1lbHNlIFI9RH1lbHNlIFI9RH13aGlsZSgwKTtpZigyPD0oMHwoRj1KKzF8MCkpKXtGPTM7YnJlYWt9RD1SLEY9MHx0cltnKyhKPUYpPj4wXX1pZigzPT0oMHxGKSl7Tz1yKzEzMDArKGw8PDQpK3V8MCx6PWUrOTJ8MCxqPUErNHwwLEg9ZSsxMDUxNnwwLEQ9MCxfPVI7QTpmb3IoOzspe2lmKDB8dHJbcz4+MF0pe0Y9NjI7YnJlYWt9ZG97aWYoMHx0cltnK0Q+PjBdKXtpZihGPTB8YXJbdisoRDw8Mik+PjJdLFE9MHxhclttKyhEPDwyKT4+Ml0sUj1GPj4oTj0wfGFyW00+PjJdKSxOPVE+Pk4sKDB8Uik8PS0xKXtGPTM1O2JyZWFrIEF9aWYoKDB8KFk9MHxhcltrPj4yXSkpPD0oMHxSKSl7Rj0zNTticmVhayBBfWlmKCgwfE4pPD0tMSl7Rj0zODticmVhayBBfWlmKCgwfE4pPj0oMHxhcltoPj4yXSkpe0Y9Mzg7YnJlYWsgQX1pZih1PSgwfGFyW3c+PjJdKSsoMyooKDB8YnIoWSxOKSkrUnwwKXwwKXwwLDc2OCYoY3JbdT4+MF18Y3JbdSsxPj4wXTw8OCkpe2lmKE49Rj4+KHU9MHxhcltCPj4yXSksRj1RPj51LCgwfE4pPD0tMSl7Rj00MjticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9NDI7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9NDU7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTQ1O2JyZWFrIEF9aWYoWT0wfGFyW1c+PjJdLEY9KDB8YnIoUixGKSkrTnwwLDE9PSgwfHRyW1krKDEyKkZ8MCkrbD4+MF0pJiYoVD1ZKygxMipGfDApKzIrbHwwLCgwfHRyW08+PjBdKT09KDB8dHJbKDB8dHJbVD4+MF0pKyhyKzEzMDArKGw8PDQpKT4+MF0pKSl7dHJbcz4+MF09MSxSPWxyWyhSPVkrKDEyKkZ8MCkrNCsobDw8Mil8MCk+PjFdfGxyW1IrMj4+MV08PDE2LG9yW2Q+PjFdPVIsb3JbZCsyPj4xXT1SPj4+MTYsUj1sLF89MHx0cltUPj4wXTticmVha30xPT0oMHx0cltZKygxMipGfDApK3k+PjBdKSYmKFU9WSsoMTIqRnwwKSsyK3l8MCwoMHx0cltPPj4wXSk9PSgwfHRyWygwfHRyW1U+PjBdKSsocisxMzAwKyh5PDw0KSk+PjBdKSk/KHRyW3M+PjBdPTEsUj1sclsoUj1ZKygxMipGfDApKzQrKHk8PDIpfDApPj4xXXxscltSKzI+PjFdPDwxNixvcltkPj4xXT1SLG9yW2QrMj4+MV09Uj4+PjE2LFI9eSxfPTB8dHJbVT4+MF0pOlI9LTF9ZWxzZSBSPS0xfWVsc2UgUj0tMX13aGlsZSgwKTtkb3tpZigxPT0oMHx0cltzPj4wXSkpe2lmKCgwfF8pPDApe0Y9NjE7YnJlYWsgQX1pZigoMHxSKTw9LTEpe0Y9NTU7YnJlYWsgQX1pZihGPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKFI8PDYpKyhfPDwyKT4+Ml0pLEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW0w+PjJdKSwhKCh0cltPPj4wXXx0cltyKzEzMDArKFI8PDQpK18+PjBdKTw8MjQ+PjI0KSl7aWYoTj0oUj0wfGFyW3o+PjJdKS0oMHxhcltGKzkyPj4yXSl8MCxGPVItcHwwLFI9bHJbZD4+MV18bHJbZCsyPj4xXTw8MTYsTj0oMHxOKTwtMTI4Py0xMjg6KDB8Tik8MTI3P046MTI3KXt1PTMyKygwfGJyKCgxNjM4NCsoKCgwfE4pPDA/MC1OfDA6Tik+PjEpfDApLygwfE4pfDAsKDB8Rik8LTEyOD8tMTI4OigwfEYpPDEyNz9GOjEyNykpPj42LEo9MHxicih1PSgwfHUpPC00MDk2Py00MDk2OigwfHUpPDQwOTU/dTo0MDk1LFI8PDE2Pj4xNiksSj0wfGJyKCgoUT0oMHxKKTwwKT8wLUp8MDpKKSsxMjc+PjgsUT8tMTowIT0oMHxKKSYxKSxvcltkPj4xXT0oMHxKKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxKKTwzMjc2Nz9KOjMyNzY3KSx1PTB8YnIodSxSPj4xNiksdT0wfGJyKCgoSj0oMHx1KTwwKT8wLXV8MDp1KSsxMjc+PjgsSj8tMTowIT0oMHx1KSYxKSxvcltTPj4xXT0oMHx1KTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHx1KTwzMjc2Nz91OjMyNzY3KTticmVha31lcihqLDEwMDgsMCksdHJbSD4+MF09MzticmVha319fXdoaWxlKDApO2lmKDI8PSgwfChEPUQrMXwwKSkpe0Y9NjI7YnJlYWt9fWlmKDM1PT0oMHxGKSlzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpO2Vsc2UgaWYoMzg9PSgwfEYpKXNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk7ZWxzZSBpZig0Mj09KDB8Rikpc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTtlbHNlIGlmKDQ1PT0oMHxGKSlzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpO2Vsc2UgaWYoNTU9PSgwfEYpKXNyKDQ4Njg1LDQ4NDI4LDE2OTgsNDg2OTkpO2Vsc2V7aWYoNjE9PSgwfEYpKXJldHVybiB0cltHPj4wXT0wLHRyW3M+PjBdPTAsdXI9VjtpZig2Mj09KDB8Rikpe0Y9YSt0fDAsYXJbST4+Ml09RixSPW8rLTF8MCxhcltDPj4yXT1SLGFyWzQrST4+Ml09RistMSxhcltDKzQ+PjJdPVIsYXJbOCtJPj4yXT1aLGFyW0MrOD4+Ml09Uix0cltHPj4wXT0wLG9yWyh1PWQrNHwwKT4+MV09MCxZPS0xLEo9b3JbKE09ZCs2fDApPj4xXT0wO0E6Zm9yKDs7KXtTPTB8a2EoZSxpLGYsbix0LG8sYSxjLGIsRixSKSx0cltQK0o+PjBdPTEmUztkb3tpZihTJiYwPT0oMHx0cltHPj4wXSkpe2lmKE49Rj4+KFM9MHxhcltCPj4yXSksRj1SPj5TLCgwfE4pPD0tMSl7Rj02ODticmVhayBBfWlmKCgwfChSPTB8YXJbRT4+Ml0pKTw9KDB8Tikpe0Y9Njg7YnJlYWsgQX1pZigoMHxGKTw9LTEpe0Y9NzE7YnJlYWsgQX1pZigoMHxGKT49KDB8YXJbWD4+Ml0pKXtGPTcxO2JyZWFrIEF9aWYoRD0wfGFyW1c+PjJdLE49KDB8YnIoUixGKSkrTnwwLFI9MHx0clsoXz1EKygxMipOfDApK2x8MCk+PjBdPzB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKGw8PDYpKyh0cltEKygxMipOfDApKzIrbD4+MF08PDIpPj4yXSk6MCxGPTB8dHJbKFE9RCsoMTIqTnwwKSt5fDApPj4wXT8wfEhiWzMxJmFyWzgrKDB8YXJbQT4+Ml0pPj4yXV0oQSwwfGFyW3IrOTE2Kyh5PDw2KSsodHJbRCsoMTIqTnwwKSsyK3k+PjBdPDwyKT4+Ml0pOjAsMCE9KDB8UikmMCE9KDB8dHJbXz4+MF0pJiYoMHxhcltSKzkyPj4yXSk9PSgwfHApKXt0cltHPj4wXT0xLFk9bHJbKFk9RCsoMTIqTnwwKSs0KyhsPDwyKXwwKT4+MV18bHJbWSsyPj4xXTw8MTYsb3JbdT4+MV09WSxvclt1KzI+PjFdPVk+Pj4xNixZPTB8dHJbRCsoMTIqTnwwKSsyK2w+PjBdO2JyZWFrfTAhPSgwfEYpJjAhPSgwfHRyW1E+PjBdKSYmKDB8YXJbRis5Mj4+Ml0pPT0oMHxwKSYmKHRyW0c+PjBdPTEsWT1sclsoWT1EKygxMipOfDApKzQrKHk8PDIpfDApPj4xXXxscltZKzI+PjFdPDwxNixvclt1Pj4xXT1ZLG9yW3UrMj4+MV09WT4+PjE2LFk9MHx0cltEKygxMipOfDApKzIreT4+MF0pfX13aGlsZSgwKTtpZigzPD0oMHwoUj1KKzF8MCkpKXtGPTYzO2JyZWFrfUY9MHxhcltJKygoSj1SKTw8Mik+PjJdLFI9MHxhcltDKyhSPDwyKT4+Ml19aWYoNjM9PSgwfEYpKXtBOmRve2lmKCF4KXswfHRyW0c+PjBdJiYodHJbcz4+MF09MSx4PWxyW3U+PjFdfGxyW3UrMj4+MV08PDE2LG9yW2Q+PjFdPXgsb3JbZCsyPj4xXT14Pj4+MTYpLEQ9ZSsxMDMzMnwodHJbRz4+MF09MCksUT0wO2U6Zm9yKDs7KXtkb3tpZigwfHRyW1ArUT4+MF0pe2lmKFI9MHxhcltCPj4yXSxGPWFyW0krKFE8PDIpPj4yXT4+UixSPWFyW0MrKFE8PDIpPj4yXT4+UiwoMHxGKTw9LTEpe0Y9OTA7YnJlYWsgZX1pZigoMHwoTj0wfGFyW0U+PjJdKSk8PSgwfEYpKXtGPTkwO2JyZWFrIGV9aWYoKDB8Uik8PS0xKXtGPTkzO2JyZWFrIGV9aWYoKDB8Uik+PSgwfGFyW1g+PjJdKSl7Rj05MzticmVhayBlfWlmKF89MHxhcltXPj4yXSxGPSgwfGJyKE4sUikpK0Z8MCwxPT0oMHx0cltfKygxMipGfDApK2w+PjBdKSYmKEs9XysoMTIqRnwwKSsyK2x8MCwoMHx0cltPPj4wXSk9PSgwfHRyWygwfHRyW0s+PjBdKSsocisxMzAwKyhsPDw0KSk+PjBdKSkpe3RyW0c+PjBdPTEsTj1sclsoTj1fKygxMipGfDApKzQrKGw8PDIpfDApPj4xXXxscltOKzI+PjFdPDwxNixvclt1Pj4xXT1OLG9yW3UrMj4+MV09Tj4+PjE2LE49bCxZPTB8dHJbSz4+MF07YnJlYWt9MT09KDB8dHJbXysoMTIqRnwwKSt5Pj4wXSkmJihxPV8rKDEyKkZ8MCkrMit5fDAsKDB8dHJbTz4+MF0pPT0oMHx0clsoMHx0cltxPj4wXSkrKHIrMTMwMCsoeTw8NCkpPj4wXSkpPyh0cltHPj4wXT0xLE49bHJbKE49XysoMTIqRnwwKSs0Kyh5PDwyKXwwKT4+MV18bHJbTisyPj4xXTw8MTYsb3JbdT4+MV09Tixvclt1KzI+PjFdPU4+Pj4xNixOPXksWT0wfHRyW3E+PjBdKTpOPS0xfWVsc2UgTj0tMX13aGlsZSgwKTtkb3tpZigxPT0oMHx0cltHPj4wXSkpe2lmKCgwfFkpPDApe0Y9MTEwO2JyZWFrIGV9aWYoKDB8Tik8PS0xKXtGPTEwMzticmVhayBlfWlmKDA9PSgwfChGPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbcis5MTYrKE48PDYpKyhZPDwyKT4+Ml0pKSl8MD09KDB8KFI9MHxIYlszMSZhcls4KygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltMPj4yXSkpKSl7ZXIoNCsoMHxhcltEPj4yXSl8MCwxMDEyLDApLHRyW0g+PjBdPTM7YnJlYWt9aWYoKDB8KEY9MHxhcltGKzkyPj4yXSkpIT0oMHxhcltSKzkyPj4yXSkmJih0cltyKzEzMDArKE48PDQpK1k+PjBdfHRyW08+PjBdKTw8MjQ+PjI0PT0wKXtpZihOPShSPTB8YXJbej4+Ml0pLUZ8MCxGPVItcHwwLFI9bHJbdT4+MV18bHJbdSsyPj4xXTw8MTYsTj0oMHxOKTwtMTI4Py0xMjg6KDB8Tik8MTI3P046MTI3KXt4PTMyKygwfGJyKCgxNjM4NCsoKCgwfE4pPDA/MC1OfDA6Tik+PjEpfDApLygwfE4pfDAsKDB8Rik8LTEyOD8tMTI4OigwfEYpPDEyNz9GOjEyNykpPj42LGM9MHxicih4PSgwfHgpPC00MDk2Py00MDk2OigwfHgpPDQwOTU/eDo0MDk1LFI8PDE2Pj4xNiksYz0wfGJyKCgoYT0oMHxjKTwwKT8wLWN8MDpjKSsxMjc+PjgsYT8tMTowIT0oMHxjKSYxKSxvclt1Pj4xXT0oMHxjKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxjKTwzMjc2Nz9jOjMyNzY3KSx4PTB8YnIoeCxSPj4xNikseD0wfGJyKCgoYz0oMHx4KTwwKT8wLXh8MDp4KSsxMjc+PjgsYz8tMTowIT0oMHx4KSYxKSxvcltNPj4xXT0oMHx4KTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHx4KTwzMjc2Nz94OjMyNzY3KTticmVha31lcihqLDEwMDgsMCksdHJbSD4+MF09MzticmVha319fXdoaWxlKDApO2lmKDM8PSgwfChRPVErMXwwKSkpYnJlYWsgQTtpZigwfHRyW0c+PjBdKWJyZWFrIEF9aWYoOTA9PSgwfEYpKXNyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk7ZWxzZSBpZig5Mz09KDB8Rikpc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KTtlbHNlIGlmKDEwMz09KDB8Rikpc3IoNDg2ODUsNDg0MjgsMTgzOSw0ODY5OSk7ZWxzZSBpZigxMTA9PSgwfEYpKXt0cltHPj4wXT0wLHRyW3M+PjBdPTA7YnJlYWt9fX13aGlsZSgwKTtyZXR1cm4gdXI9Vn02OD09KDB8Rik/c3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KTo3MT09KDB8RikmJnNyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSl9fX1lbHNlIDg9PSgwfEYpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTE9PSgwfEYpP3NyKDQ4NTQzLDQ4NTE5LDExOSw0ODUzOSk6MTU9PSgwfEYpP3NyKDQ4NDgyLDQ4NTE5LDExOCw0ODUzOSk6MTg9PSgwfEYpJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpfWVsc2UgdXI9Vn0oQXw9MCxyfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MCxoPW0rMTh8MCx3PW0rOHwwKSwwfHRyW2g+PjBdKXtkb3tpZigwfHRyW2grMT4+MF0pe2lmKCgwfG9yW3c+PjFdKT09KDB8b3Jbdys0Pj4xXSkmJigwfG9yW3crMj4+MV0pPT0oMHxvclt3KzY+PjFdKSl7az02O2JyZWFrfXRyW3Y+PjBdPTB9ZWxzZSBrPTZ9d2hpbGUoMCk7Nj09KDB8aykmJmhjKEEscixlLHQsbyxhLGMsdSxsLG0sdiksQT0wfGFyW3c+PjJdLG9yW3M+PjFdPUEsb3JbcysyPj4xXT1BPj4+MTYsZT1BPTF9ZWxzZSBoYyhBLHIsZSx0LG8sYSxjLHUsbCxtLHYpLGU9QT0wO2Rve2lmKDB8dHJbaCsxPj4wXSl7aWYoZSYmKDB8b3Jbdz4+MV0pPT0oMHxvclt3KzQ+PjFdKSYmKDB8b3JbdysyPj4xXSk9PSgwfG9yW3crNj4+MV0pKWJyZWFrO2g9cysoQTw8Mil8MCx3PTB8YXJbdys0Pj4yXSxvcltoPj4xXT13LG9yW2grMj4+MV09dz4+PjE2LEE9QSsxfDB9fXdoaWxlKDApO2lmKDB8dHJbdj4+MF0mJih2PXMrKEE8PDIpfDAsbT0wfGFyW20+PjJdLG9yW3Y+PjFdPW0sb3JbdisyPj4xXT1tPj4+MTYsQT1BKzF8MCksKDB8QSk8MilyZXR1cm4gdmIocysoQTw8Mil8MCwwLDgtKEE8PDIpfDApLHZvaWQodXI9ZCk7MiE9KDB8QSk/c3IoNDg3MzcsNDg0MjgsMTk0Myw0ODc1Myk6dXI9ZH1mdW5jdGlvbiBtYyhBLGUscixpLGYsbix0LG8sYSxjLGwsdSl7dmFyIGIscztzPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAsaXw9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTA7dmFyIHMsZCxrLGgsdyx2PTAsbT0wLGc9MDtzd2l0Y2goZD11cj0odz11cikrMzEmLTMyLHVyPXVyKzgwfDAsaD04K2R8MCxrPSh0fD0wKSsoZnw9MCl8MCxzPShvfD0wKSsobnw9MCl8MCx0PWY+PihvPTB8YXJbKHJ8PTApKzEwMzY4Pj4yXSksbz1uPj5vLCgwfHQpPD0tMSYmc3IoNDg0ODIsNDg1MTksMTE4LDQ4NTM5KSwoMHwodj0wfGFyW3IrMTAzNzI+PjJdKSk8PSgwfHQpJiZzcig0ODQ4Miw0ODUxOSwxMTgsNDg1MzkpLCgwfG8pPD0tMSYmc3IoNDg1NDMsNDg1MTksMTE5LDQ4NTM5KSwoMHxvKT49KDB8YXJbcisxMDM3Nj4+Ml0pJiZzcig0ODU0Myw0ODUxOSwxMTksNDg1MzkpLHY9KDB8YXJbcisxMDM2MD4+Ml0pKygzKigoMHxicih2LG8pKSt0fDApfDApfDAsKDY1NTM1Jihjclt2Pj4wXXxjclt2KzE+PjBdPDw4KSk+Pj44JjMpe2Nhc2UgMjp0PTB8dHJbaSsxMD4+MF0sZz0xMTticmVhaztjYXNlIDE6MTYmKHQ9MHx0clsobz1pKzEwfDApPj4wXSk/Zz0xMTp0PW87YnJlYWs7ZGVmYXVsdDp0PWkrMTB8MH1pZigxMT09KDB8ZykpcmV0dXJuIHdjKEEsZSxyLGYsbixrLHMsYSxjLGwsdSxnPSgyNTUmdCk+Pj41JjI1NSxoKSxnPWgrKDEyKmd8MCl8MCxvcltiPj4xXT0wfG9yW2c+PjFdLG9yW2IrMj4+MV09MHxvcltnKzI+PjFdLG9yW2IrND4+MV09MHxvcltnKzQ+PjFdLG9yW2IrNj4+MV09MHxvcltnKzY+PjFdLG9yW2IrOD4+MV09MHxvcltnKzg+PjFdLG9yW2IrMTA+PjFdPTB8b3JbZysxMD4+MV0sMHx0cltiPj4wXSYmMTI9PShsK2N8MCkmMCE9KDB8dHJbKG09YisxfDApPj4wXSkmJih0cltiKzM+PjBdPS0xLHRyW20+PjBdPTApLHVyPXc7c3dpdGNoKDMmdHJbdD4+MF0pe2Nhc2UgMTpjYXNlIDM6dj0wfHRyW2k+PjBdLHRyW2IrMj4+MF09dix0cltiPj4wXT0xLGc9MHxscltpKzQ+PjFdLG09MHxscltpKzI+PjFdLHZjKEEsZSxyLGYsbixhLGsscyxjLGwsMCx2PDwyND4+MjQsdSxoKSx2PWgrKCgoMHxjclt0Pj4wXSk+Pj4yJjEpPDwyKXwwLHY9bHJbdj4+MV18bHJbdisyPj4xXTw8MTYsYXJbZD4+Ml09dixnPSgwfGxyWzIrZD4+MV0pK2d8MCxvcltiKzQ+PjFdPXYrbSxvcltiKzY+PjFdPWc7YnJlYWs7ZGVmYXVsdDp0cltiKzI+PjBdPS0xLHRyW2I+PjBdPTB9KCgzJnRyW3Q+PjBdKS0yJjI1NSk8Mj8odj0wfHRyW2krMT4+MF0sdHJbYiszPj4wXT12LHRyW2IrMT4+MF09MSxnPTB8bHJbaSs4Pj4xXSxtPTB8bHJbaSs2Pj4xXSx2YyhBLGUscixmLG4sYSxrLHMsYyxsLDEsdjw8MjQ+PjI0LHUsaCksYz1oKygoKDB8Y3JbdD4+MF0pPj4+MyYxKTw8Mil8MCxjPWxyW2M+PjFdfGxyW2MrMj4+MV08PDE2LGFyWzQrZD4+Ml09YyxnPSgwfGxyWzYrZD4+MV0pK2d8MCxvcltiKzg+PjFdPWMrbSxvcltiKzEwPj4xXT1nKToodHJbYiszPj4wXT0tMSx0cltiKzE+PjBdPTApLHVyPXd9KEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLHMpLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCl7QXw9MCxlfD0wLG98PTAsYXw9MCxjfD0wLGx8PTA7dmFyIHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MDt1cj0oQj11cikrNDkxNjh8MCx3PUIrMzI3Njh8MCxZPSh5PUIpKzQ5MTUyfDAsTj0obnw9MCkrKGl8PTApfDAsVj0odHw9MCkrKGZ8PTApfDAsRj0ocnw9MCkrNzY0fDAsdj0wfGFyW3IrNTc4MD4+Ml0sbT0wfGFyW3IrNTc4ND4+Ml0saz0wfGFyW3IrNDA+PjJdLEo9KDB8YnIoayxWKSkrTnwwLEo9KDB8YXJbcis0Pj4yXSkrKEo8PGNyW3IrMTY+PjBdKXwwLGc9MHxhcltyKzQ0Pj4yXSxNPSgwfGJyKGcsKDB8VikvKDB8bSl8MCkpKygoMHxOKS8oMHx2KXwwKXwwLFo9KDB8YXJbcis4Pj4yXSkrKE08PGNyW3IrMTc+PjBdKXwwLE09KDB8YXJbcisxMj4+Ml0pKyhNPDxjcltyKzE4Pj4wXSl8MCxmPTI1NSYodT0wfHRyW2w+PjBdKSxhcltZPj4yXT1mLGk9MjU1JihEPTB8dHJbbCsxPj4wXSksYXJbKG49WSs0fDApPj4yXT1pLGg9MHxhclsoUj1yKzU3NjB8MCk+PjJdLHA9MHxhclsoXz1yKzU3Njh8MCk+PjJdLGQ9dTw8MjQ+PjI0PT0wLEQ8PDI0Pj4yND09MHwwIT0oMHx0clsoYj1yKzU5NjF8MCk+PjBdKXxkfHwoMHxvcltsKzQ+PjFdKSE9KDB8b3JbbCs4Pj4xXSl8fCgwfG9yW2wrNj4+MV0pIT0oMHxvcltsKzEwPj4xXSl8fCgwfGFyW2UrOTE2Kyh0cltsKzI+PjBdPDwyKT4+Ml0pIT0oMHxhcltlKzk4MCsodHJbbCszPj4wXTw8Mik+PjJdKXx8KGk9YXJbbj4+Ml09MCkscz1yKzEwNTE2fDAsRD1BKzR8MCxHPTAsbj1mO0E6Zm9yKDs7KXtkb3tpZigwfG4pe2lmKDE1PChuPTB8dHJbbCsyK0c+PjBdKTw8MjQ+PjI0KXtRPTk7YnJlYWsgQX1pZihDPTB8SGJbMzEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbZSs5MTYrKEc8PDYpKyhuPDwyND4+MjQ8PDIpPj4yXSksISgwfGFyW0MrOTY+PjJdKSl7dHJbcz4+MF09MyxlcihELDEwMTIsMCk7YnJlYWt9aWYobj0wfG9yWyhXPWwrNCsoRzw8Mil8MCk+PjFdLGY9MHxvclsoST1sKzQrKEc8PDIpKzJ8MCk+PjFdLHQ9dysoRzw8MTMpfDAsRT0wfGFyW0MrND4+Ml0sWD0wfGFyW0MrNDA+PjJdLCg4PCgwfGFyW1I+PjJdKT91YzpiYykoQSxGLG4sZixOLFYsdCxvLEUsWCxhLGMsaCksbj0wfG9yW1c+PjFdLGY9MHxvcltJPj4xXSx0PXkrKEc8PDEzKXwwLEU9MHxhcltDKzg+PjJdLDg8KDB8YXJbUj4+Ml0pKXtUPSgwfGEpLygwfHYpfDAsWD0oMHxjKS8oMHxtKXwwLHNjKEEsRixuLGYsTixWLHQsbyxFLDB8YXJbKFU9Qys0NHwwKT4+Ml0sVCxYLHApLHNjKEEsRiwwfG9yW1c+PjFdLDB8b3JbST4+MV0sTixWLHkrMTYzODQrKEc8PDEzKXwwLG8sMHxhcltDKzEyPj4yXSwwfGFyW1U+PjJdLFQsWCxwKTticmVha31UPSgwfGEpLygwfHYpfDAsVT0oMHxjKS8oMHxtKXwwLGRjKEEsRixuLGYsTixWLHQsbyxFLDB8YXJbKFg9Qys0NHwwKT4+Ml0sVCxVLHApLGRjKEEsRiwwfG9yW1c+PjFdLDB8b3JbST4+MV0sTixWLHkrMTYzODQrKEc8PDEzKXwwLG8sMHxhcltDKzEyPj4yXSwwfGFyW1g+PjJdLFQsVSxwKTticmVha319d2hpbGUoMCk7aWYoMjw9KDB8KG49RysxfDApKSlicmVhaztuPTB8YXJbWSsoKEc9bik8PDIpPj4yXX1pZig5PT0oMHxRKSlyZXR1cm4gdHJbcz4+MF09MyxlcihELDEwMTIsMCksdXI9Qjtzd2l0Y2goZj0yPCgwfChmPTE0LSgwfGFyW1I+PjJdKXwwKSk/ZjoyLFY9MHxjcltyKzU5MjA+PjBdLFc9MjwoMHwoVz0xNC0oMHxhcltfPj4yXSl8MCkpP1c6MixZPTB8Y3Jbcis1OTIxPj4wXSwwfGFyW2UrMjA+PjJdKXtjYXNlIDE6cmV0dXJuIGk9dTw8MjQ+PjI0PT0xJjA9PSgwfGkpLDB8dHJbYj4+MF0/aT8oVT0wfHRyW2wrMj4+MF0sdD0oMHxjcltlKzM4MD4+MF0pK2Z8MCxJPSgwfGNyW2UrMzgxPj4wXSkrV3wwLG49MHxvcltlKzQ0NisoVTw8MSk+PjFdLGk9dHJbZSs1MTArVT4+MF08PFYsRT0wfG9yW2UrNTQyKyhVPDwyKT4+MV0sWD10cltlKzY3MCsoVTw8MSk+PjBdPDxZLFc9MHxvcltlKzU0MisoVTw8MikrMj4+MV0sZj10cltlKzY3MCsoVTw8MSkrMT4+MF08PFksKDB8aCk8OT91c1szJmFyW0ErMTgwPj4yXV0oSixrLHcsbyxhLGMsbixpLHQpOmJzWzcmYXJbQSsxOTY+PjJdXShKLGssdyxvLGEsYyxuLGksdCxoKSxuPSgwfGEpLygwfHYpfDAsaT0oMHxjKS8oMHxtKXwwLCgwfHApPDk/KHVzWzMmYXJbKFU9QSsxODB8MCk+PjJdXShaLGcseSxvLG4saSxFLFgsSSksdXNbMyZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxXLGYsSSkpOihic1s3JmFyWyhVPUErMTk2fDApPj4yXV0oWixnLHksbyxuLGksRSxYLEkscCksYnNbNyZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxXLGYsSSxwKSkpOihlcihELDEwMTEsMCksdHJbcz4+MF09Myk6aT8oKDB8aCk8OT9hc1sxNSZhcltBKzE3Nj4+Ml1dKEosayx3LG8sYSxjKTpjc1szMSZhcltBKzE5Mj4+Ml1dKEosayx3LG8sYSxjLGgpLG49KDB8YSkvKDB8dil8MCxpPSgwfGMpLygwfG0pfDAsKDB8cCk8OT8oYXNbMTUmYXJbKFU9QSsxNzZ8MCk+PjJdXShaLGcseSxvLG4saSksYXNbMTUmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0fDAsbyxuLGkpKTooY3NbMzEmYXJbKFU9QSsxOTJ8MCk+PjJdXShaLGcseSxvLG4saSxwKSxjc1szMSZhcltVPj4yXV0oTSxnLHkrMTYzODR8MCxvLG4saSxwKSkpOihlcihELDEwMTEsMCksdHJbcz4+MF09MyksdXI9QjtjYXNlIDA6cmV0dXJuKG49dTw8MjQ+PjI0PT0xKSYoaT0xPT0oMHxpKSk/MHx0cltyKzU5NjI+PjBdPyhGPTB8dHJbbCsyPj4wXSxpPTB8dHJbbCszPj4wXSxYPSgwfGNyW2UrMzgwPj4wXSkrZnwwLF89KDB8Y3JbZSszODE+PjBdKStXfDAsZj0wfG9yW2UrNDQ2KyhGPDwxKT4+MV0sdD10cltlKzUxMCtGPj4wXTw8VixFPTB8b3JbZSs0NzgrKGk8PDEpPj4xXSxuPXRyW2UrNTI2K2k+PjBdPDxWLEk9MHxvcltlKzU0MisoRjw8Mik+PjFdLEM9dHJbZSs2NzArKEY8PDEpPj4wXTw8WSxHPTB8b3JbZSs1NDIrKEY8PDIpKzI+PjFdLFY9dHJbZSs2NzArKEY8PDEpKzE+PjBdPDxZLEY9MHxvcltlKzYwNisoaTw8Mik+PjFdLFI9dHJbZSs3MDIrKGk8PDEpPj4wXTw8WSxOPTB8b3JbZSs2MDYrKGk8PDIpKzI+PjFdLFc9dHJbZSs3MDIrKGk8PDEpKzE+PjBdPDxZLGk9ODE5Mit3fDAsKDB8aCk8OT9zc1sxJmFyW0ErMTg0Pj4yXV0oSixrLHcsaSxvLGEsYyxmLHQsRSxuLFgpOmRzWzEmYXJbQSsyMDA+PjJdXShKLGssdyxpLG8sYSxjLGYsdCxFLG4sWCxoKSxmPXkrODE5MnwwLHQ9eSsxNjM4NHwwLEU9eSsyNDU3NnwwLG49KDB8YSkvKDB8dil8MCxpPSgwfGMpLygwfG0pfDAsKDB8cCk8OT8oc3NbMSZhclsoVT1BKzE4NHwwKT4+Ml1dKFosZyx5LGYsbyxuLGksSSxDLEYsUixfKSxzc1sxJmFyW1U+PjJdXShNLGcsdCxFLG8sbixpLEcsVixOLFcsXykpOihkc1sxJmFyWyhVPUErMjAwfDApPj4yXV0oWixnLHksZixvLG4saSxJLEMsRixSLF8scCksZHNbMSZhcltVPj4yXV0oTSxnLHQsRSxvLG4saSxHLFYsTixXLF8scCkpKTooaT04MTkyK3d8MCxYPUErMTcyfDAsKDB8aCk8OT9jc1szMSZhcltYPj4yXV0oSixrLHcsaSxvLGEsYyk6bHNbMzEmYXJbQSsxODg+PjJdXShKLGssdyxpLG8sYSxjLGgpLGY9eSs4MTkyfDAsdD15KzE2Mzg0fDAsRT15KzI0NTc2fDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyhjc1szMSZhcltYPj4yXV0oWixnLHksZixvLG4saSksY3NbMzEmYXJbWD4+Ml1dKE0sZyx0LEUsbyxuLGkpKToobHNbMzEmYXJbKFU9QSsxODh8MCk+PjJdXShaLGcseSxmLG8sbixpLHApLGxzWzMxJmFyW1U+PjJdXShNLGcsdCxFLG8sbixpLHApKSk6bnxpPyhHPTEmZCwwfHRyW3IrNTk2Mj4+MF0/KHQ9MHx0cltsKzIrRz4+MF0sRT0oMHxjcltlKzM4MD4+MF0pK2Z8MCxDPSgwfGNyW2UrMzgxPj4wXSkrV3wwLGY9MHxvcltlKzQ0NisoRzw8NSkrKHQ8PDEpPj4xXSxuPXRyW2UrNTEwKyhHPDw0KSt0Pj4wXTw8VixYPTB8b3JbZSs1NDIrKEc8PDYpKyh0PDwyKT4+MV0sVz10cltlKzY3MCsoRzw8NSkrKHQ8PDEpPj4wXTw8WSxJPTB8b3JbZSs1NDIrKEc8PDYpKyh0PDwyKSsyPj4xXSx0PXRyW2UrNjcwKyhHPDw1KSsodDw8MSkrMT4+MF08PFksaT13KyhHPDwxMyl8MCwoMHxoKTw5P3VzWzMmYXJbQSsxODA+PjJdXShKLGssaSxvLGEsYyxmLG4sRSk6YnNbNyZhcltBKzE5Nj4+Ml1dKEosayxpLG8sYSxjLGYsbixFLGgpLGY9eSsoRzw8MTMpfDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyh1c1szJmFyWyhVPUErMTgwfDApPj4yXV0oWixnLGYsbyxuLGksWCxXLEMpLHVzWzMmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0KyhHPDwxMyl8MCxvLG4saSxJLHQsQykpOihic1s3JmFyWyhVPUErMTk2fDApPj4yXV0oWixnLGYsbyxuLGksWCxXLEMscCksYnNbNyZhcltVPj4yXV0oTSxnLHkrMTYzODQrKEc8PDEzKXwwLG8sbixpLEksdCxDLHApKSk6KGk9dysoRzw8MTMpfDAsKDB8aCk8OT9hc1sxNSZhcltBKzE3Nj4+Ml1dKEosayxpLG8sYSxjKTpjc1szMSZhcltBKzE5Mj4+Ml1dKEosayxpLG8sYSxjLGgpLGY9eSsoRzw8MTMpfDAsbj0oMHxhKS8oMHx2KXwwLGk9KDB8YykvKDB8bSl8MCwoMHxwKTw5Pyhhc1sxNSZhclsoVT1BKzE3NnwwKT4+Ml1dKFosZyxmLG8sbixpKSxhc1sxNSZhcltVPj4yXV0oTSxnLHkrMTYzODQrKEc8PDEzKXwwLG8sbixpKSk6KGNzWzMxJmFyWyhVPUErMTkyfDApPj4yXV0oWixnLGYsbyxuLGkscCksY3NbMzEmYXJbVT4+Ml1dKE0sZyx5KzE2Mzg0KyhHPDwxMyl8MCxvLG4saSxwKSkpKTooZXIoRCwxMDExLDApLHRyW3M+PjBdPTMpLHVyPUI7ZGVmYXVsdDpzcig0ODM5NSw0ODQyOCw0ODksNDg0MzgpfX0oQSxlLHIsZixuLHQsbyxhLGMsbCxzKSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtpZihufD0wLGw9KGV8PTApPj4yLGM9KHJ8PTApPj4yLGE9KGl8PTApPj4yLG89KGZ8PTApPj4yLHQ9MHxhclsoQXw9MCkrMTAzOTI+PjJdLCEoKDB8byk8PTApJiYoaT1BKzEwMzgwfDAsMDwoMHxhKSkpe2U9MDtkb3tmb3IoZj0oMHxicihlK2N8MCx0KSkrbHwwLHI9MDtBPSgwfGFyW2k+PjJdKSsoMTIqKGYrcnwwKXwwKXwwLG9yW0E+PjFdPTB8b3Jbbj4+MV0sb3JbQSsyPj4xXT0wfG9yW24rMj4+MV0sb3JbQSs0Pj4xXT0wfG9yW24rND4+MV0sb3JbQSs2Pj4xXT0wfG9yW24rNj4+MV0sb3JbQSs4Pj4xXT0wfG9yW24rOD4+MV0sb3JbQSsxMD4+MV09MHxvcltuKzEwPj4xXSwoMHwocj1yKzF8MCkpIT0oMHxhKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfG8pKX19KHIsdCtmfDAsbytufDAsYyxsLHMpLHVyPWJ9ZnVuY3Rpb24gZ2MoQSl7dmFyIGU7Zm9yKGU9KEF8PTApKzEwMHwwOygwfChBPUErMnwob3JbQT4+MV09MCkpKTwoMHxlKTspO31mdW5jdGlvbiBaYyhBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTAsdHw9MDt2YXIgbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtpZihvPXVyLDAhPSgwfChmfD0wKSkmJigyNTUmKDB8QXQociwxKSkpPDwyND4+MjQhPTApe2Rve2lmKHQpe2lmKC05OTk5OSE9KDB8KHQ9MHxpdChyKSkpJigwfHQpPCgwfGYpKXt0PXQrMXwwO2JyZWFrfXJldHVybiB1cj1vLChpPTApfGl9dD0xfXdoaWxlKDApO2lmKCgwfChYPWYtdHwwKSk8PS0xJiZzcig0ODc4OCw0ODc5NiwxMjksNDg4MDYpLGw9MHxBdChyLDEpLC05OTk5OT09KDB8KHQ9MHxpdChyKSkpKXJldHVybiB1cj1vLChpPTApfGk7Zm9yKHU9dCsxfDAsYT1+dCx5PTB8Y3JbKDB8YXJbbj4+Ml0pKygxMDAqWHwwKSs5OD4+MF0sdXI9KEU9dXI9KEI9dXIpKygxNSsoMHwrKGM9eSsxfDApKSYtMTYpfDApKygxNSsoMHwrYykmLTE2KXwwLHQ9MDtwPTI1NSYoMHxBdChyLDEpKSxmPSh0cltCK3Q+PjBdPXApPDwyND4+MjQ/MToyNTUmKDB8QXQociwxKSksdHJbRSt0Pj4wXT1mLCgwfCh0PXQrMXwwKSkhPSgwfGMpOyk7Zz0wfGw/YTp1LHQ9MHxhcltuPj4yXSxaPTI1NSYodT0wfHRyW3QrKDEwMCpYfDApKzk2Pj4wXSkscD0yNTUmKHc9MHx0clt0KygxMDAqWHwwKSs5Nz4+MF0pLHc9dzw8MjQ+PjI0PT0wO0E6ZG97aWYodylkPTA7ZWxzZXtYPj4+MDwoKCgwfGFyWyhsPW4rNHwwKT4+Ml0pLXR8MCkvMTAwfDApPj4+MD8oYj1wLGs9MCxzPXQpOnNyKDQ4ODM0LDQ4Nzk2LDE3NCw0ODgwNik7ZTpmb3IoOzspe2Zvcih0PWI7Oyl7aWYoYT10Ky0xfDAsMTc8PSgwfHQpKXtJPTE4O2JyZWFrIGV9aWYoKDB8KGY9KDB8b3JbcysoMTAwKlh8MCkrMzIrKGE8PDEpPj4xXSkrZ3wwKSk8MCYmMHx0cltFKyhoPWErWnwwKT4+MF0pYnJlYWs7aWYoISgxPCgwfHQpKSl7ZD1rO2JyZWFrIEF9dD1hfWlmKDE1PCgwfGspKXt2PTAsST03NDticmVha31pZihjPWsrMXwwLG9yW2krKGs8PDEpPj4xXT1mLHRyW2krNjQraz4+MF09MHx0cltCK2g+PjBdLCgwfHQpPD0xKXtkPWM7YnJlYWsgQX1pZih0PTB8YXJbbj4+Ml0sIShYPj4+MDwoKCgwfGFyW2w+PjJdKS10fDApLzEwMHwwKT4+PjApKXtJPTE3O2JyZWFrfWI9YSxrPWMscz10fWlmKDE3PT0oMHxJKSlzcig0ODgzNCw0ODc5NiwxNzQsNDg4MDYpO2Vsc2UgaWYoMTg9PSgwfEkpKXNyKDQ4ODY2LDQ4Nzk2LDE3NSw0ODgwNik7ZWxzZSBpZig3ND09KDB8SSkpcmV0dXJuIHVyPW8sMHx2fX13aGlsZSgwKTtkb3tpZigoMHxnKTwwJiYwIT0oMHx0cltFK3k+PjBdKSl7aWYoMTU8KDB8ZCkpcmV0dXJuIHVyPW8sKGk9MCl8aTtvcltpKyhkPDwxKT4+MV09Zyx0cltpKzY0K2Q+PjBdPTB8dHJbQit5Pj4wXSx0PWQrMXwwO2JyZWFrfXQ9ZH13aGlsZSgwKTtjPXU8PDI0Pj4yND09MDtBOmRve2lmKGMpdHJbKHU9aSs5NnwwKT4+MF09dCx0PTA7ZWxzZXtmb3IoYT0wOzspe2lmKCgwfChmPSgwfG9yWygwfGFyW24+PjJdKSsoMTAwKlh8MCkrKGE8PDEpPj4xXSkrZ3wwKSk8MCYmMCE9KDB8dHJbRSthPj4wXSkpe2lmKDE1PCgwfHQpKXt2PTAsST03NDticmVha31vcltpKyh0PDwxKT4+MV09Zix0cltpKzY0K3Q+PjBdPTB8dHJbQithPj4wXSxtPXQrMXwwfWVsc2UgbT10O2lmKCgwfFopPD0oMHwoYT1hKzF8MCkpKWJyZWFrO3Q9bX1pZig3ND09KDB8SSkpcmV0dXJuIHVyPW8sMHx2O2lmKHRyWyh1PWkrOTZ8MCk+PjBdPW0sIWMpe2ZvcihmPVosdD0wOzspe2ZvcihjPTB8YXJbbj4+Ml0sYT1mOyEoMDwoMHwobD0oMHxvcltjKygxMDAqWHwwKSsoKGY9YSstMXwwKTw8MSk+PjFdKStnfDApKSYmMHx0cltFK2Y+PjBdKTspe2lmKCEoMTwoMHxhKSkpYnJlYWsgQTthPWZ9aWYoMTU8KDB8dCkpe3Y9MDticmVha31pZihjPXQrMXwwLG9yW2krMzIrKHQ8PDEpPj4xXT1sLHRyW2krODArdD4+MF09MHx0cltCK2Y+PjBdLCEoMTwoMHxhKSkpe3Q9YzticmVhayBBfXQ9Y31yZXR1cm4gdXI9bywwfHZ9dD0wfX13aGlsZSgwKTtkb3tpZigwPCgwfGcpJiYwIT0oMHx0cltFK3k+PjBdKSl7aWYoMTU8KDB8dCkpcmV0dXJuIHVyPW8sKGk9MCl8aTtvcltpKzMyKyh0PDwxKT4+MV09Zyx0cltpKzgwK3Q+PjBdPTB8dHJbQit5Pj4wXSx0PXQrMXwwO2JyZWFrfX13aGlsZSgwKTtBOmRve2lmKCF3KXtmb3IoYT0wOzspe2lmKDA8KDB8KGY9KDB8b3JbKDB8YXJbbj4+Ml0pKygxMDAqWHwwKSszMisoYTw8MSk+PjFdKStnfDApKSYmMCE9KDB8dHJbRSsoVz1hK1p8MCk+PjBdKSl7aWYoMTU8KDB8dCkpe3Y9MDticmVha31vcltpKzMyKyh0PDwxKT4+MV09Zix0cltpKzgwK3Q+PjBdPTB8dHJbQitXPj4wXSx0PXQrMXwwfWlmKCgwfHApPD0oMHwoYT1hKzF8MCkpKWJyZWFrIEF9cmV0dXJuIHVyPW8sMHx2fX13aGlsZSgwKTt0cltpKzk3Pj4wXT10fWVsc2UgST01NDtBOmRve2lmKDU0PT0oMHxJKSl7aWYobD0wfGl0KHIpLCgoYj0wfGl0KHIpKStsfDApPigwfGFyW2UrNTI4KygoMHx0cltlKzI+PjBdKS0xPDwyKT4+Ml0pKXJldHVybiBvclsoaT1pKzk2fDApPj4xXT0wLGVyKEEsMTAxOCxvcltpKzI+PjFdPTApLHVyPW8sKGk9MCl8aTtpZigxNjwoMHxsKXwxNjwoMHxiKSlyZXR1cm4gZXIoQSwxMDE4LDApLHVyPW8sKGk9MCl8aTt0clsodT1pKzk2fDApPj4wXT1sLHRyW2krOTc+PjBdPWI7ZTpkb3tpZigwPCgwfGwpKXtmb3IoZj10PTA7Oyl7aWYoLTk5OTk5PT0oMHwoYT0wfGl0KHIpKSkpe3Y9MDticmVha31pZihlPTI1NSYoMHxBdChyLDEpKSxvclsoYz1pKyh0PDwxKXwwKT4+MV09Zis2NTUzNS1hLHRyW2krNjQrdD4+MF09ZSwoMHxsKTw9KDB8KHQ9dCsxfDApKSlicmVhayBlO2Y9MHxvcltjPj4xXX1yZXR1cm4gdXI9bywwfHZ9fXdoaWxlKDApO2lmKDA8KDB8Yikpe2ZvcihmPXQ9MDs7KXtpZigtOTk5OTk9PSgwfChhPTB8aXQocikpKSl7dj0wO2JyZWFrfWlmKGU9MjU1JigwfEF0KHIsMSkpLG9yWyhjPWkrMzIrKHQ8PDEpfDApPj4xXT1mKzErYSx0cltpKzgwK3Q+PjBdPWUsKDB8Yik8PSgwfCh0PXQrMXwwKSkpYnJlYWsgQTtmPTB8b3JbYz4+MV19cmV0dXJuIHVyPW8sMHx2fX19d2hpbGUoMCk7aWYoKGw9KHRyWyhiPWkrOTl8MCk+PjBdPTApfHRyW3U+PjBdKTw8MjQ+PjI0KWZvcihjPTI1NSZsLGY9YT0wO3Q9ZisxPDwyND4+MjQsMHx0cltpKzY0K2E+PjBdP3RyW2I+PjBdPXQ6dD1mLCgwfChhPWErMXwwKSkhPSgwfGMpOylmPXQ7ZWxzZSB0PTA7aWYoYz0yNTUmKHI9MHx0cltpKzk3Pj4wXSkscjw8MjQ+PjI0KWZvcihhPTA7Zj10KzE8PDI0Pj4yNCwwfHRyW2krODArYT4+MF0mJih0PXRyW2I+PjBdPWYpLCgwfChhPWErMXwwKSkhPSgwfGMpOyk7cmV0dXJuIHRyW2krOTg+PjBdPWMrKDI1NSZsKSx1cj1vLDB8KGk9MSl9ZnVuY3Rpb24gcGMoQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodD0xNisoaT11cj0obz11cikrMzEmLTMyKXwwLG49OCtpfDAsdXI9KGY9dXI9dXIrMzJ8MCkrKDE1KygoYT0oZXw9MCk8PDEpKzJ8MCkmLTE2KXwwLCh0cltmKyhhfD0xKT4+MF09MCk8KDB8YSkmJnZiKDB8Ziw0NiwwfGEpLHRyW2YrZT4+MF09MTI0LChhPTB8dHJbQSs5Nj4+MF0pPDwyND4+MjQpZm9yKGI9MC1lfDAsYSY9MjU1O3U9MHxvcltBKygoYT0oYz1hKSstMXwwKTw8MSk+PjFdLGw9MHx0cltBKzY0K2E+PjBdPzg4OjExMSwoMHx1KTwoMHxiKT8oYXJbaT4+Ml09dSxhcls0K2k+PjJdPTI1NSZsLFBuKHIsNDg4OTUsaSkpOnRyW2YrKHUrZSk+PjBdPWwsMTwoMHxjKTspO2lmKCEoKGE9MHx0cltBKzk3Pj4wXSk8PDI0Pj4yNCkpcmV0dXJuIGFyW24+PjJdPWYsUG4ociw0ODkwMixuKSx2b2lkKHVyPW8pO2ZvcihhJj0yNTU7dT0wfG9yW0ErMzIrKChhPShjPWEpKy0xfDApPDwxKT4+MV0sbD0wfHRyW0ErODArYT4+MF0/ODg6MTExLCgwfGUpPCgwfHUpPyhhclt0Pj4yXT11LGFyWzQrdD4+Ml09MjU1JmwsUG4ociw0ODg5NSx0KSk6dHJbZisodStlKT4+MF09bCwxPCgwfGMpOyk7YXJbbj4+Ml09ZixQbihyLDQ4OTAyLG4pLHVyPW99ZnVuY3Rpb24geWMoQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO3M9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwO2Rve2lmKEE+Pj4wPDI0NSl7aWYoQT0obD1BPj4+MDwxMT8xNjpBKzExJi04KT4+PjMsMyYoaT0oYj0wfGFyWzE0MzkyXSk+Pj5BKXwwKXJldHVybiBmPTB8YXJbKGk9KEE9NTc2MDgrKChyPSgxJmleMSkrQXwwKTw8MTw8Mil8MCkrOHwwKT4+Ml0sKDB8QSk9PSgwfCh0PTB8YXJbKG49Zis4fDApPj4yXSkpP2FyWzE0MzkyXT1iJn4oMTw8cik6KGFyW3QrMTI+PjJdPUEsYXJbaT4+Ml09dCksWj1yPDwzLGFyW2YrND4+Ml09M3xaLGFyWyhaPWYrWis0fDApPj4yXT0xfGFyW1o+PjJdLHVyPWUsMHwoWj1uKTtpZigodT0wfGFyWzE0Mzk0XSk+Pj4wPGw+Pj4wKXtpZigwfGkpcmV0dXJuIHI9KChyPWk8PEEmKChyPTI8PEEpfDAtcikpJjAtciktMXwwLG49MHxhclsoQT0ocj01NzYwOCsoKGY9KChpPShyPj4+PW89cj4+PjEyJjE2KT4+PjUmOCl8b3wobj0ocj4+Pj1pKT4+PjImNCl8KEE9KHI+Pj49bik+Pj4xJjIpfChmPShyPj4+PUEpPj4+MSYxKSkrKHI+Pj5mKXwwKTw8MTw8Mil8MCkrOHwwKT4+Ml0sKDB8cik9PSgwfChpPTB8YXJbKG89bis4fDApPj4yXSkpPyhBPWImfigxPDxmKSxhclsxNDM5Ml09QSk6KGFyW2krMTI+PjJdPXIsYXJbQT4+Ml09aSxBPWIpLHQ9KGY8PDMpLWx8MCxhcltuKzQ+PjJdPTN8bCxhclsoZj1uK2x8MCkrND4+Ml09MXx0LGFyW2YrdD4+Ml09dCwwfHUmJihuPTB8YXJbMTQzOTddLGk9NTc2MDgrKChyPXU+Pj4zKTw8MTw8Mil8MCxBJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT1uLGFyW3IrMTI+PjJdPW4sYXJbbis4Pj4yXT1yLGFyW24rMTI+PjJdPWkpLGFyWzE0Mzk0XT10LGFyWzE0Mzk3XT1mLHVyPWUsMHwoWj1vKTtpZihhPTB8YXJbMTQzOTNdKXtpZihpPShhJjAtYSktMXwwLEE9MHxhcls1Nzg3MisoKCh0PShpPj4+PW89aT4+PjEyJjE2KT4+PjUmOCl8b3woYz0oaT4+Pj10KT4+PjImNCl8KGY9KGk+Pj49Yyk+Pj4xJjIpfChBPShpPj4+PWYpPj4+MSYxKSkrKGk+Pj5BKTw8Mik+PjJdLGk9KC04JmFyW0ErND4+Ml0pLWx8MCxmPTB8YXJbQSsxNisoKDA9PSgwfGFyW0ErMTY+PjJdKSYxKTw8Mik+PjJdKXtmb3IoO2k9KGM9KG89KC04JmFyW2YrND4+Ml0pLWx8MCk+Pj4wPGk+Pj4wKT9vOmksQT1jP2Y6QSwwIT0oMHwoZj0wfGFyW2YrMTYrKCgwPT0oMHxhcltmKzE2Pj4yXSkmMSk8PDIpPj4yXSkpOyk7Yz1BLHQ9aX1lbHNlIGM9QSx0PWk7aWYoYz4+PjA8KG89YytsfDApPj4+MCl7bj0wfGFyW2MrMjQ+PjJdLHI9MHxhcltjKzEyPj4yXTtkb3tpZigoMHxyKT09KDB8Yykpe2lmKCEocj0wfGFyWyhBPWMrMjB8MCk+PjJdKSYmIShyPTB8YXJbKEE9YysxNnwwKT4+Ml0pKXtpPTA7YnJlYWt9Zm9yKDs7KWlmKDB8KGY9MHxhclsoaT1yKzIwfDApPj4yXSkpcj1mLEE9aTtlbHNle2lmKCEoZj0wfGFyWyhpPXIrMTZ8MCk+PjJdKSlicmVhaztyPWYsQT1pfWFyW0E+PjJdPTAsaT1yfWVsc2UgaT0wfGFyW2MrOD4+Ml0sYXJbaSsxMj4+Ml09cixhcltyKzg+PjJdPWksaT1yfXdoaWxlKDApO2Rve2lmKDB8bil7aWYocj0wfGFyW2MrMjg+PjJdLCgwfGMpPT0oMHxhclsoQT01Nzg3Misocjw8Mil8MCk+PjJdKSl7aWYoIShhcltBPj4yXT1pKSl7YXJbMTQzOTNdPWEmfigxPDxyKTticmVha319ZWxzZSBpZighKGFyW24rMTYrKCgoMHxhcltuKzE2Pj4yXSkhPSgwfGMpJjEpPDwyKT4+Ml09aSkpYnJlYWs7YXJbaSsyND4+Ml09biwwfChyPTB8YXJbYysxNj4+Ml0pJiYoYXJbaSsxNj4+Ml09cixhcltyKzI0Pj4yXT1pKSwwfChyPTB8YXJbYysyMD4+Ml0pJiYoYXJbaSsyMD4+Ml09cixhcltyKzI0Pj4yXT1pKX19d2hpbGUoMCk7cmV0dXJuIHQ+Pj4wPDE2PyhaPXQrbHwwLGFyW2MrND4+Ml09M3xaLGFyWyhaPWMrWis0fDApPj4yXT0xfGFyW1o+PjJdKTooYXJbYys0Pj4yXT0zfGwsYXJbbys0Pj4yXT0xfHQsYXJbbyt0Pj4yXT10LDB8dSYmKGY9MHxhclsxNDM5N10saT01NzYwOCsoKHI9dT4+PjMpPDwxPDwyKXwwLGImKHI9MTw8cik/cj0wfGFyWyhBPWkrOHwwKT4+Ml06KGFyWzE0MzkyXT1ifHIsQT0ocj1pKSs4fDApLGFyW0E+PjJdPWYsYXJbcisxMj4+Ml09ZixhcltmKzg+PjJdPXIsYXJbZisxMj4+Ml09aSksYXJbMTQzOTRdPXQsYXJbMTQzOTddPW8pLHVyPWUsMHwoWj1jKzh8MCl9Yj1sfWVsc2UgYj1sfWVsc2UgYj1sfWVsc2UgaWYoQT4+PjA8PTQyOTQ5NjcyMzEpaWYobD0tOCYoQT1BKzExfDApLGM9MHxhclsxNDM5M10pe2Y9MC1sfDAsYT0oQT4+Pj04KT8xNjc3NzIxNTxsPj4+MD8zMTpsPj4+KChhPTE0LSgodT0oKGc9QTw8KGI9KEErMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXxifChhPSgoZzw8PXUpKzI0NTc2MHwwKT4+PjE2JjIpKSsoZzw8YT4+PjE1KXwwKSs3fDApJjF8YTw8MTowLGk9MHxhcls1Nzg3MisoYTw8Mik+PjJdO0E6ZG97aWYoaSlmb3Iobz1sPDwoMzE9PSgoQT0wKXxhKT8wOjI1LShhPj4+MSl8MCksdD0wOzspe2lmKChuPSgtOCZhcltpKzQ+PjJdKS1sfDApPj4+MDxmPj4+MCl7aWYoIW4pe2Y9MCxuPUE9aSxnPTYxO2JyZWFrIEF9QT1pLGY9bn1pZih0PTA9PSgwfChuPTB8YXJbaSsyMD4+Ml0pKXwoMHxuKT09KDB8KGk9MHxhcltpKzE2KyhvPj4+MzE8PDIpPj4yXSkpP3Q6bixuPTA9PSgwfGkpKXtpPXQsZz01NzticmVha31vPDw9MSYoMV5uKX1lbHNlIEE9aT0wLGc9NTd9d2hpbGUoMCk7aWYoNTc9PSgwfGcpKXtpZigwPT0oMHxpKSYwPT0oMHxBKSl7aWYoIShBPWMmKChBPTI8PGEpfDAtQSkpKXtiPWw7YnJlYWt9Yj0oQSYwLUEpLTF8MCxpPShBPTApfGFyWzU3ODcyKygoKHQ9KGI+Pj49bz1iPj4+MTImMTYpPj4+NSY4KXxvfChhPShiPj4+PXQpPj4+MiY0KXwodT0oYj4+Pj1hKT4+PjEmMil8KGk9KGI+Pj49dSk+Pj4xJjEpKSsoYj4+PmkpPDwyKT4+Ml19aT8obj1pLGc9NjEpOihhPUEsbz1mKX1pZig2MT09KDB8ZykpZm9yKDs7KXtpZihnPTAsaT0oYj0oaT0oLTgmYXJbbis0Pj4yXSktbHwwKT4+PjA8Zj4+PjApP2k6ZixBPWI/bjpBLCEobj0wfGFyW24rMTYrKCgwPT0oMHxhcltuKzE2Pj4yXSkmMSk8PDIpPj4yXSkpe2E9QSxvPWk7YnJlYWt9Zj1pLGc9NjF9aWYoMCE9KDB8YSkmJm8+Pj4wPCgoMHxhclsxNDM5NF0pLWx8MCk+Pj4wKXtpZigodD1hK2x8MCk+Pj4wPD1hPj4+MClyZXR1cm4gdXI9ZSwoWj0wKXxaO249MHxhclthKzI0Pj4yXSxyPTB8YXJbYSsxMj4+Ml07ZG97aWYoKDB8cik9PSgwfGEpKXtpZighKHI9MHxhclsoQT1hKzIwfDApPj4yXSkmJiEocj0wfGFyWyhBPWErMTZ8MCk+PjJdKSl7cj0wO2JyZWFrfWZvcig7OylpZigwfChmPTB8YXJbKGk9cisyMHwwKT4+Ml0pKXI9ZixBPWk7ZWxzZXtpZighKGY9MHxhclsoaT1yKzE2fDApPj4yXSkpYnJlYWs7cj1mLEE9aX1hcltBPj4yXT0wfWVsc2UgWj0wfGFyW2ErOD4+Ml0sYXJbWisxMj4+Ml09cixhcltyKzg+PjJdPVp9d2hpbGUoMCk7ZG97aWYobil7aWYoQT0wfGFyW2ErMjg+PjJdLCgwfGEpPT0oMHxhclsoaT01Nzg3MisoQTw8Mil8MCk+PjJdKSl7aWYoIShhcltpPj4yXT1yKSl7Zj1jJn4oMTw8QSksYXJbMTQzOTNdPWY7YnJlYWt9fWVsc2UgaWYoIShhcltuKzE2KygoKDB8YXJbbisxNj4+Ml0pIT0oMHxhKSYxKTw8Mik+PjJdPXIpKXtmPWM7YnJlYWt9YXJbcisyND4+Ml09biwwfChBPTB8YXJbYSsxNj4+Ml0pJiYoYXJbcisxNj4+Ml09QSxhcltBKzI0Pj4yXT1yKSxmPSgoQT0wfGFyW2ErMjA+PjJdKSYmKGFyW3IrMjA+PjJdPUEsYXJbQSsyND4+Ml09ciksYyl9ZWxzZSBmPWN9d2hpbGUoMCk7ZG97aWYoMTY8PW8+Pj4wKXtpZihhclthKzQ+PjJdPTN8bCxhclt0KzQ+PjJdPTF8byxyPShhclt0K28+PjJdPW8pPj4+MyxvPj4+MDwyNTYpe2k9NTc2MDgrKHI8PDE8PDIpfDAsKEE9MHxhclsxNDM5Ml0pJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT10LGFyW3IrMTI+PjJdPXQsYXJbdCs4Pj4yXT1yLGFyW3QrMTI+PjJdPWk7YnJlYWt9aWYoaT01Nzg3MisoKHI9KHI9bz4+PjgpPzE2Nzc3MjE1PG8+Pj4wPzMxOm8+Pj4oKHI9MTQtKChtPSgoWj1yPDwoZz0ocisxMDQ4MzIwfDApPj4+MTYmOCkpKzUyMDE5MnwwKT4+PjE2JjQpfGd8KHI9KChaPDw9bSkrMjQ1NzYwfDApPj4+MTYmMikpKyhaPDxyPj4+MTUpfDApKzd8MCkmMXxyPDwxOjApPDwyKXwwLGFyW3QrMjg+PjJdPXIsYXJbKEE9dCsxNnwwKSs0Pj4yXT0wLGFyW0E+PjJdPTAsIShmJihBPTE8PHIpKSl7YXJbMTQzOTNdPWZ8QSxhcltpPj4yXT10LGFyW3QrMjQ+PjJdPWksYXJbdCsxMj4+Ml09dCxhclt0Kzg+PjJdPXQ7YnJlYWt9Zm9yKEE9bzw8KDMxPT0oMHxyKT8wOjI1LShyPj4+MSl8MCksaT0wfGFyW2k+PjJdOzspe2lmKCgtOCZhcltpKzQ+PjJdfDApPT0oMHxvKSl7Zz05NzticmVha31pZighKHI9MHxhclsoZj1pKzE2KyhBPj4+MzE8PDIpfDApPj4yXSkpe2c9OTY7YnJlYWt9QTw8PTEsaT1yfWlmKDk2PT0oMHxnKSl7YXJbZj4+Ml09dCxhclt0KzI0Pj4yXT1pLGFyW3QrMTI+PjJdPXQsYXJbdCs4Pj4yXT10O2JyZWFrfWlmKDk3PT0oMHxnKSl7Wj0wfGFyWyhnPWkrOHwwKT4+Ml0sYXJbWisxMj4+Ml09dCxhcltnPj4yXT10LGFyW3QrOD4+Ml09Wixhclt0KzEyPj4yXT1pLGFyW3QrMjQ+PjJdPTA7YnJlYWt9fWVsc2UgWj1vK2x8MCxhclthKzQ+PjJdPTN8WixhclsoWj1hK1orNHwwKT4+Ml09MXxhcltaPj4yXX13aGlsZSgwKTtyZXR1cm4gdXI9ZSwwfChaPWErOHwwKX1iPWx9ZWxzZSBiPWw7ZWxzZSBiPS0xfXdoaWxlKDApO2lmKGI+Pj4wPD0oaT0wfGFyWzE0Mzk0XSk+Pj4wKXJldHVybiByPWktYnwwLEE9MHxhclsxNDM5N10sMTU8cj4+PjA/KFo9QStifDAsYXJbMTQzOTddPVosYXJbMTQzOTRdPXIsYXJbWis0Pj4yXT0xfHIsYXJbWityPj4yXT1yLGFyW0ErND4+Ml09M3xiKTooYXJbMTQzOTRdPTAsYXJbMTQzOTddPTAsYXJbQSs0Pj4yXT0zfGksYXJbKFo9QStpKzR8MCk+PjJdPTF8YXJbWj4+Ml0pLHVyPWUsMHwoWj1BKzh8MCk7aWYoYj4+PjA8KG89MHxhclsxNDM5NV0pPj4+MClyZXR1cm4gbT1vLWJ8MCxhclsxNDM5NV09bSxnPShaPTB8YXJbMTQzOThdKStifDAsYXJbMTQzOThdPWcsYXJbZys0Pj4yXT0xfG0sYXJbWis0Pj4yXT0zfGIsdXI9ZSwwfChaPVorOHwwKTtpZihhPWIrNDh8MCwobD0odD0oQT0wfGFyWzE0NTEwXT8wfGFyWzE0NTEyXTooYXJbMTQ1MTJdPTQwOTYsYXJbMTQ1MTFdPTQwOTYsYXJbMTQ1MTNdPS0xLGFyWzE0NTE0XT0tMSxhclsxNDUxNV09MCxhclsxNDUwM109MCxBPS0xNiZzXjE0MzE2NTU3NjgsYXJbcz4+Ml09QSxhclsxNDUxMF09QSw0MDk2KSkrKGM9Yis0N3wwKXwwKSYobj0wLUF8MCkpPj4+MDw9Yj4+PjApcmV0dXJuIHVyPWUsKFo9MCl8WjtpZigwfChBPTB8YXJbMTQ1MDJdKSYmKHM9KHU9MHxhclsxNDUwMF0pK2x8MCk+Pj4wPD11Pj4+MHxBPj4+MDxzPj4+MClyZXR1cm4gdXI9ZSwoWj0wKXxaO0E6ZG97aWYoNCZhclsxNDUwM10pcj0wLGc9MTMzO2Vsc2V7aT0wfGFyWzE0Mzk4XTtlOmRve2lmKGkpe2ZvcihmPTU4MDE2OyEoKEE9MHxhcltmPj4yXSk+Pj4wPD1pPj4+MCYmKEErKDB8YXJbKGg9Zis0fDApPj4yXSl8MCk+Pj4wPmk+Pj4wKTspe2lmKCEoQT0wfGFyW2YrOD4+Ml0pKXtnPTExODticmVhayBlfWY9QX1pZigocj10LW8mbik+Pj4wPDIxNDc0ODM2NDcpaWYoKDB8KEE9MHx5YigwfHIpKSk9PSgoMHxhcltmPj4yXSkrKDB8YXJbaD4+Ml0pfDApKXtpZigtMSE9KDB8QSkpe289cix0PUEsZz0xMzU7YnJlYWsgQX19ZWxzZSBmPUEsZz0xMjY7ZWxzZSByPTB9ZWxzZSBnPTExOH13aGlsZSgwKTtkb3tpZigxMTg9PSgwfGcpKWlmKC0xIT0oMHwoaT0wfHliKDApKSkmJihyPWksaz0ocj0oMD09KChrPShkPTB8YXJbMTQ1MTFdKSstMXwwKSZyfDApPzA6KGsrciYwLWQpLXJ8MCkrbHwwKSsoZD0wfGFyWzE0NTAwXSl8MCxiPj4+MDxyPj4+MCZyPj4+MDwyMTQ3NDgzNjQ3KSl7aWYoMHwoaD0wfGFyWzE0NTAyXSkmJms+Pj4wPD1kPj4+MHxoPj4+MDxrPj4+MCl7cj0wO2JyZWFrfWlmKCgwfChBPTB8eWIoMHxyKSkpPT0oMHxpKSl7bz1yLHQ9aSxnPTEzNTticmVhayBBfWY9QSxnPTEyNn1lbHNlIHI9MH13aGlsZSgwKTtkb3tpZigxMjY9PSgwfGcpKXtpZihpPTAtcnwwLCEocj4+PjA8YT4+PjAmcj4+PjA8MjE0NzQ4MzY0NyYtMSE9KDB8ZikpKXtpZigtMT09KDB8Zikpe3I9MDticmVha31vPXIsdD1mLGc9MTM1O2JyZWFrIEF9aWYoMjE0NzQ4MzY0Nzw9KEE9Yy1yKyhBPTB8YXJbMTQ1MTJdKSYwLUEpPj4+MCl7bz1yLHQ9ZixnPTEzNTticmVhayBBfWlmKC0xPT0oMHx5YigwfEEpKSl7eWIoMHxpKSxyPTA7YnJlYWt9bz1BK3J8MCx0PWYsZz0xMzU7YnJlYWsgQX19d2hpbGUoMCk7YXJbMTQ1MDNdPTR8YXJbMTQ1MDNdLGc9MTMzfX13aGlsZSgwKTtpZigxMzM9PSgwfGcpJiZsPj4+MDwyMTQ3NDgzNjQ3JiYhKC0xPT0oMHwobT0wfHliKDB8bCkpKXwxXih2PShiKzQwfDApPj4+MDwodz0oaD0wfHliKDApKS1tfDApPj4+MCl8bT4+PjA8aD4+PjAmLTEhPSgwfG0pJi0xIT0oMHxoKV4xKSYmKG89dj93OnIsdD1tLGc9MTM1KSwxMzU9PSgwfGcpKXtyPSgwfGFyWzE0NTAwXSkrb3wwLChhclsxNDUwMF09cik+Pj4wPigwfGFyWzE0NTAxXSk+Pj4wJiYoYXJbMTQ1MDFdPXIpLGM9MHxhclsxNDM5OF07ZG97aWYoYyl7Zm9yKHI9NTgwMTY7Oyl7aWYoKDB8dCk9PSgoQT0wfGFyW3I+PjJdKSsoZj0wfGFyWyhpPXIrNHwwKT4+Ml0pfDApKXtnPTE0NTticmVha31pZighKG49MHxhcltyKzg+PjJdKSlicmVhaztyPW59aWYoMTQ1PT0oMHxnKSYmMD09KDgmYXJbcisxMj4+Ml18MCkmJmM+Pj4wPHQ+Pj4wJkE+Pj4wPD1jPj4+MCl7YXJbaT4+Ml09ZitvLGc9YysoWj0wPT0oNyYoWj1jKzh8MCl8MCk/MDowLVomNyl8MCxaPSgwfGFyWzE0Mzk1XSkrKG8tWil8MCxhclsxNDM5OF09ZyxhclsxNDM5NV09WixhcltnKzQ+PjJdPTF8WixhcltnK1orND4+Ml09NDAsYXJbMTQzOTldPWFyWzE0NTE0XTticmVha31mb3IodD4+PjA8KDB8YXJbMTQzOTZdKT4+PjAmJihhclsxNDM5Nl09dCksaT10K298MCxyPTU4MDE2Ozspe2lmKCgwfGFyW3I+PjJdKT09KDB8aSkpe2c9MTUzO2JyZWFrfWlmKCEoQT0wfGFyW3IrOD4+Ml0pKWJyZWFrO3I9QX1pZigxNTM9PSgwfGcpJiYwPT0oOCZhcltyKzEyPj4yXXwwKSl7YXJbcj4+Ml09dCxhclsodT1yKzR8MCk+PjJdPSgwfGFyW3U+PjJdKStvLGw9KHU9dCsoMD09KDcmKHU9dCs4fDApfDApPzA6MC11JjcpfDApK2J8MCxhPShyPWkrKDA9PSg3JihyPWkrOHwwKXwwKT8wOjAtciY3KXwwKS11LWJ8MCxhclt1KzQ+PjJdPTN8Yjtkb3tpZigoMHxyKSE9KDB8Yykpe2lmKCgwfHIpPT0oMHxhclsxNDM5N10pKXtaPSgwfGFyWzE0Mzk0XSkrYXwwLGFyWzE0Mzk0XT1aLGFyWzE0Mzk3XT1sLGFyW2wrND4+Ml09MXxaLGFyW2wrWj4+Ml09WjticmVha31pZigxPT0oMyYoQT0wfGFyW3IrND4+Ml0pfDApKXtvPS04JkEsZj1BPj4+MztBOmRve2lmKEE+Pj4wPDI1Nil7aWYoQT0wfGFyW3IrOD4+Ml0sKDB8KGk9MHxhcltyKzEyPj4yXSkpPT0oMHxBKSl7YXJbMTQzOTJdPWFyWzE0MzkyXSZ+KDE8PGYpO2JyZWFrfWFyW0ErMTI+PjJdPWksYXJbaSs4Pj4yXT1BO2JyZWFrfXQ9MHxhcltyKzI0Pj4yXSxBPTB8YXJbcisxMj4+Ml07ZG97aWYoKDB8QSk9PSgwfHIpKXtpZighKEE9MHxhclsoaT0oZj1yKzE2fDApKzR8MCk+PjJdKSl7aWYoIShBPTB8YXJbZj4+Ml0pKXtBPTA7YnJlYWt9aT1mfWZvcig7OylpZigwfChuPTB8YXJbKGY9QSsyMHwwKT4+Ml0pKUE9bixpPWY7ZWxzZXtpZighKG49MHxhclsoZj1BKzE2fDApPj4yXSkpYnJlYWs7QT1uLGk9Zn1hcltpPj4yXT0wfWVsc2UgWj0wfGFyW3IrOD4+Ml0sYXJbWisxMj4+Ml09QSxhcltBKzg+PjJdPVp9d2hpbGUoMCk7aWYoIXQpYnJlYWs7Zj01Nzg3MisoKGk9MHxhcltyKzI4Pj4yXSk8PDIpfDA7ZG97aWYoKDB8cik9PSgwfGFyW2Y+PjJdKSl7aWYoMHwoYXJbZj4+Ml09QSkpYnJlYWs7YXJbMTQzOTNdPWFyWzE0MzkzXSZ+KDE8PGkpO2JyZWFrIEF9aWYoIShhclt0KzE2KygoKDB8YXJbdCsxNj4+Ml0pIT0oMHxyKSYxKTw8Mik+PjJdPUEpKWJyZWFrIEF9d2hpbGUoMCk7aWYoYXJbQSsyND4+Ml09dCwwfChmPTB8YXJbKGk9cisxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09ZixhcltmKzI0Pj4yXT1BKSwhKGk9MHxhcltpKzQ+PjJdKSlicmVhazthcltBKzIwPj4yXT1pLGFyW2krMjQ+PjJdPUF9d2hpbGUoMCk7cj1yK298MCxuPW8rYXwwfWVsc2Ugbj1hO2lmKGFyWyhyPXIrNHwwKT4+Ml09LTImYXJbcj4+Ml0sYXJbbCs0Pj4yXT0xfG4scj0oYXJbbCtuPj4yXT1uKT4+PjMsbj4+PjA8MjU2KXtpPTU3NjA4KyhyPDwxPDwyKXwwLChBPTB8YXJbMTQzOTJdKSYocj0xPDxyKT9yPTB8YXJbKEE9aSs4fDApPj4yXTooYXJbMTQzOTJdPUF8cixBPShyPWkpKzh8MCksYXJbQT4+Ml09bCxhcltyKzEyPj4yXT1sLGFyW2wrOD4+Ml09cixhcltsKzEyPj4yXT1pO2JyZWFrfXI9bj4+Pjg7ZG97aWYocil7aWYoMTY3NzcyMTU8bj4+PjApe3I9MzE7YnJlYWt9cj1uPj4+KChyPTE0LSgobT0oKFo9cjw8KGc9KHIrMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXxnfChyPSgoWjw8PW0pKzI0NTc2MHwwKT4+PjE2JjIpKSsoWjw8cj4+PjE1KXwwKSs3fDApJjF8cjw8MX1lbHNlIHI9MH13aGlsZSgwKTtpZihmPTU3ODcyKyhyPDwyKXwwLGFyW2wrMjg+PjJdPXIsYXJbKEE9bCsxNnwwKSs0Pj4yXT0wLCEoKEE9KGFyW0E+PjJdPTApfGFyWzE0MzkzXSkmKGk9MTw8cikpKXthclsxNDM5M109QXxpLGFyW2Y+PjJdPWwsYXJbbCsyND4+Ml09ZixhcltsKzEyPj4yXT1sLGFyW2wrOD4+Ml09bDticmVha31mb3IoQT1uPDwoMzE9PSgwfHIpPzA6MjUtKHI+Pj4xKXwwKSxpPTB8YXJbZj4+Ml07Oyl7aWYoKC04JmFyW2krND4+Ml18MCk9PSgwfG4pKXtnPTE5NDticmVha31pZighKHI9MHxhclsoZj1pKzE2KyhBPj4+MzE8PDIpfDApPj4yXSkpe2c9MTkzO2JyZWFrfUE8PD0xLGk9cn1pZigxOTM9PSgwfGcpKXthcltmPj4yXT1sLGFyW2wrMjQ+PjJdPWksYXJbbCsxMj4+Ml09bCxhcltsKzg+PjJdPWw7YnJlYWt9aWYoMTk0PT0oMHxnKSl7Wj0wfGFyWyhnPWkrOHwwKT4+Ml0sYXJbWisxMj4+Ml09bCxhcltnPj4yXT1sLGFyW2wrOD4+Ml09WixhcltsKzEyPj4yXT1pLGFyW2wrMjQ+PjJdPTA7YnJlYWt9fWVsc2UgWj0oMHxhclsxNDM5NV0pK2F8MCxhclsxNDM5NV09WixhclsxNDM5OF09bCxhcltsKzQ+PjJdPTF8Wn13aGlsZSgwKTtyZXR1cm4gdXI9ZSwwfChaPXUrOHwwKX1mb3Iocj01ODAxNjshKChBPTB8YXJbcj4+Ml0pPj4+MDw9Yz4+PjAmJmM+Pj4wPChaPUErKDB8YXJbcis0Pj4yXSl8MCk+Pj4wKTspcj0wfGFyW3IrOD4+Ml07Zm9yKHI9KEE9KEE9KG49WistNDd8MCkrKDA9PSg3JihBPW4rOHwwKXwwKT8wOjAtQSY3KXwwKT4+PjA8KG49YysxNnwwKT4+PjA/YzpBKSs4fDAsZz10KyhpPTA9PSg3JihpPXQrOHwwKXwwKT8wOjAtaSY3KXwwLGk9bystNDAtaXwwLGFyWzE0Mzk4XT1nLGFyWzE0Mzk1XT1pLGFyW2crND4+Ml09MXxpLGFyW2craSs0Pj4yXT00MCxhclsxNDM5OV09YXJbMTQ1MTRdLGFyWyhpPUErNHwwKT4+Ml09MjcsYXJbcj4+Ml09YXJbMTQ1MDRdLGFyW3IrND4+Ml09YXJbMTQ1MDVdLGFyW3IrOD4+Ml09YXJbMTQ1MDZdLGFyW3IrMTI+PjJdPWFyWzE0NTA3XSxhclsxNDUwNF09dCxhclsxNDUwNV09byxhclsxNDUwN109MCxhclsxNDUwNl09cixyPUErMjR8MDthclsocj0oZz1yKSs0fDApPj4yXT03LChnKzh8MCk+Pj4wPFo+Pj4wOyk7aWYoKDB8QSkhPSgwfGMpKXtpZih0PUEtY3wwLGFyW2k+PjJdPS0yJmFyW2k+PjJdLGFyW2MrND4+Ml09MXx0LHI9KGFyW0E+PjJdPXQpPj4+Myx0Pj4+MDwyNTYpe2k9NTc2MDgrKHI8PDE8PDIpfDAsKEE9MHxhclsxNDM5Ml0pJihyPTE8PHIpP3I9MHxhclsoQT1pKzh8MCk+PjJdOihhclsxNDM5Ml09QXxyLEE9KHI9aSkrOHwwKSxhcltBPj4yXT1jLGFyW3IrMTI+PjJdPWMsYXJbYys4Pj4yXT1yLGFyW2MrMTI+PjJdPWk7YnJlYWt9aWYoZj01Nzg3MisoKGk9KHI9dD4+PjgpPzE2Nzc3MjE1PHQ+Pj4wPzMxOnQ+Pj4oKGk9MTQtKChtPSgoWj1yPDwoZz0ocisxMDQ4MzIwfDApPj4+MTYmOCkpKzUyMDE5MnwwKT4+PjE2JjQpfGd8KGk9KChaPDw9bSkrMjQ1NzYwfDApPj4+MTYmMikpKyhaPDxpPj4+MTUpfDApKzd8MCkmMXxpPDwxOjApPDwyKXwwLGFyW2MrMjg+PjJdPWksYXJbYysyMD4+Ml09MCwhKChyPShhcltuPj4yXT0wKXxhclsxNDM5M10pJihBPTE8PGkpKSl7YXJbMTQzOTNdPXJ8QSxhcltmPj4yXT1jLGFyW2MrMjQ+PjJdPWYsYXJbYysxMj4+Ml09YyxhcltjKzg+PjJdPWM7YnJlYWt9Zm9yKEE9dDw8KDMxPT0oMHxpKT8wOjI1LShpPj4+MSl8MCksaT0wfGFyW2Y+PjJdOzspe2lmKCgtOCZhcltpKzQ+PjJdfDApPT0oMHx0KSl7Zz0yMTY7YnJlYWt9aWYoIShyPTB8YXJbKGY9aSsxNisoQT4+PjMxPDwyKXwwKT4+Ml0pKXtnPTIxNTticmVha31BPDw9MSxpPXJ9aWYoMjE1PT0oMHxnKSl7YXJbZj4+Ml09YyxhcltjKzI0Pj4yXT1pLGFyW2MrMTI+PjJdPWMsYXJbYys4Pj4yXT1jO2JyZWFrfWlmKDIxNj09KDB8Zykpe1o9MHxhclsoZz1pKzh8MCk+PjJdLGFyW1orMTI+PjJdPWMsYXJbZz4+Ml09YyxhcltjKzg+PjJdPVosYXJbYysxMj4+Ml09aSxhcltjKzI0Pj4yXT0wO2JyZWFrfX19ZWxzZXtmb3IoMD09KDB8KFo9MHxhclsxNDM5Nl0pKXx0Pj4+MDxaPj4+MCYmKGFyWzE0Mzk2XT10KSxhclsxNDUwNF09dCxhclsxNDUwNV09byxhclsxNDUwN109MCxhclsxNDQwMV09YXJbMTQ1MTBdLGFyWzE0NDAwXT0tMSxyPTA7YXJbKFo9NTc2MDgrKHI8PDE8PDIpfDApKzEyPj4yXT1aLGFyW1orOD4+Ml09WiwzMiE9KDB8KHI9cisxfDApKTspO2c9dCsoWj0wPT0oNyYoWj10Kzh8MCl8MCk/MDowLVomNyl8MCxaPW8rLTQwLVp8MCxhclsxNDM5OF09ZyxhclsxNDM5NV09WixhcltnKzQ+PjJdPTF8WixhcltnK1orND4+Ml09NDAsYXJbMTQzOTldPWFyWzE0NTE0XX19d2hpbGUoMCk7aWYoYj4+PjA8KHI9MHxhclsxNDM5NV0pPj4+MClyZXR1cm4gbT1yLWJ8MCxhclsxNDM5NV09bSxnPShaPTB8YXJbMTQzOThdKStifDAsYXJbMTQzOThdPWcsYXJbZys0Pj4yXT0xfG0sYXJbWis0Pj4yXT0zfGIsdXI9ZSwwfChaPVorOHwwKX1yZXR1cm4gYXJbKFo9MTAzNjQpPj4yXT0xMix1cj1lLChaPTApfFp9ZnVuY3Rpb24gQmMoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoQXw9MCl7cj1BKy04fDAsZj0wfGFyWzE0Mzk2XSxhPXIrKGU9LTgmKEE9MHxhcltBKy00Pj4yXSkpfDA7ZG97aWYoMSZBKXQ9bz1yO2Vsc2V7aWYoaT0wfGFyW3I+PjJdLCEoMyZBKSlyZXR1cm47aWYobj1pK2V8MCwodD1yKygwLWkpfDApPj4+MDxmPj4+MClyZXR1cm47aWYoKDB8dCk9PSgwfGFyWzE0Mzk3XSkpe2lmKDM9PSgzJihlPTB8YXJbKEE9YSs0fDApPj4yXSl8MCkpcmV0dXJuIGFyWzE0Mzk0XT1uLGFyW0E+PjJdPS0yJmUsYXJbdCs0Pj4yXT0xfG4sdm9pZChhclt0K24+PjJdPW4pO289dCxlPW47YnJlYWt9aWYocj1pPj4+MyxpPj4+MDwyNTYpe2lmKEE9MHxhclt0Kzg+PjJdLCgwfChlPTB8YXJbdCsxMj4+Ml0pKT09KDB8QSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxyKSxvPXQsZT1uO2JyZWFrfWFyW0ErMTI+PjJdPWUsYXJbZSs4Pj4yXT1BLG89dCxlPW47YnJlYWt9Zj0wfGFyW3QrMjQ+PjJdLEE9MHxhclt0KzEyPj4yXTtkb3tpZigoMHxBKT09KDB8dCkpe2lmKCEoQT0wfGFyWyhlPShyPXQrMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltyPj4yXSkpe0E9MDticmVha31lPXJ9Zm9yKDs7KWlmKDB8KGk9MHxhclsocj1BKzIwfDApPj4yXSkpQT1pLGU9cjtlbHNle2lmKCEoaT0wfGFyWyhyPUErMTZ8MCk+PjJdKSlicmVhaztBPWksZT1yfWFyW2U+PjJdPTB9ZWxzZSBvPTB8YXJbdCs4Pj4yXSxhcltvKzEyPj4yXT1BLGFyW0ErOD4+Ml09b313aGlsZSgwKTtpZihmKXtpZihlPTB8YXJbdCsyOD4+Ml0sKDB8dCk9PSgwfGFyWyhyPTU3ODcyKyhlPDwyKXwwKT4+Ml0pKXtpZighKGFyW3I+PjJdPUEpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8ZSksbz10LGU9bjticmVha319ZWxzZSBpZighKGFyW2YrMTYrKCgoMHxhcltmKzE2Pj4yXSkhPSgwfHQpJjEpPDwyKT4+Ml09QSkpe289dCxlPW47YnJlYWt9YXJbQSsyND4+Ml09ZiwwfChyPTB8YXJbKGU9dCsxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09cixhcltyKzI0Pj4yXT1BKSxlPShvPSgoZT0wfGFyW2UrND4+Ml0pJiYoYXJbQSsyMD4+Ml09ZSxhcltlKzI0Pj4yXT1BKSx0KSxuKX1lbHNlIG89dCxlPW59fXdoaWxlKDApO2lmKCEoYT4+PjA8PXQ+Pj4wKSYmMSYoaT0wfGFyWyhBPWErNHwwKT4+Ml0pKXtpZigyJmkpYXJbQT4+Ml09LTImaSxhcltvKzQ+PjJdPTF8ZSxmPWFyW3QrZT4+Ml09ZTtlbHNle2lmKEE9MHxhclsxNDM5N10sKDB8YSk9PSgwfGFyWzE0Mzk4XSkpe2lmKGE9KDB8YXJbMTQzOTVdKStlfDAsYXJbMTQzOTVdPWEsYXJbMTQzOThdPW8sYXJbbys0Pj4yXT0xfGEsKDB8bykhPSgwfEEpKXJldHVybjtyZXR1cm4gYXJbMTQzOTddPTAsdm9pZChhclsxNDM5NF09MCl9aWYoKDB8YSk9PSgwfEEpKXJldHVybiBhPSgwfGFyWzE0Mzk0XSkrZXwwLGFyWzE0Mzk0XT1hLGFyWzE0Mzk3XT10LGFyW28rND4+Ml09MXxhLHZvaWQoYXJbdCthPj4yXT1hKTtmPSgtOCZpKStlfDAscj1pPj4+Mztkb3tpZihpPj4+MDwyNTYpe2lmKGU9MHxhclthKzg+PjJdLCgwfChBPTB8YXJbYSsxMj4+Ml0pKT09KDB8ZSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxyKTticmVha31hcltlKzEyPj4yXT1BLGFyW0ErOD4+Ml09ZTticmVha31uPTB8YXJbYSsyND4+Ml0sQT0wfGFyW2ErMTI+PjJdO2Rve2lmKCgwfEEpPT0oMHxhKSl7aWYoIShBPTB8YXJbKGU9KHI9YSsxNnwwKSs0fDApPj4yXSkpe2lmKCEoQT0wfGFyW3I+PjJdKSl7cj0wO2JyZWFrfWU9cn1mb3IoOzspaWYoMHwoaT0wfGFyWyhyPUErMjB8MCk+PjJdKSlBPWksZT1yO2Vsc2V7aWYoIShpPTB8YXJbKHI9QSsxNnwwKT4+Ml0pKWJyZWFrO0E9aSxlPXJ9YXJbZT4+Ml09MCxyPUF9ZWxzZSByPTB8YXJbYSs4Pj4yXSxhcltyKzEyPj4yXT1BLGFyW0ErOD4+Ml09cixyPUF9d2hpbGUoMCk7aWYoMHxuKXtpZihBPTB8YXJbYSsyOD4+Ml0sKDB8YSk9PSgwfGFyWyhlPTU3ODcyKyhBPDwyKXwwKT4+Ml0pKXtpZighKGFyW2U+PjJdPXIpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8QSk7YnJlYWt9fWVsc2UgaWYoIShhcltuKzE2KygoKDB8YXJbbisxNj4+Ml0pIT0oMHxhKSYxKTw8Mik+PjJdPXIpKWJyZWFrO2FyW3IrMjQ+PjJdPW4sMHwoZT0wfGFyWyhBPWErMTZ8MCk+PjJdKSYmKGFyW3IrMTY+PjJdPWUsYXJbZSsyND4+Ml09ciksMHwoQT0wfGFyW0ErND4+Ml0pJiYoYXJbcisyMD4+Ml09QSxhcltBKzI0Pj4yXT1yKX19d2hpbGUoMCk7aWYoYXJbbys0Pj4yXT0xfGYsYXJbdCtmPj4yXT1mLCgwfG8pPT0oMHxhclsxNDM5N10pKXJldHVybiB2b2lkKGFyWzE0Mzk0XT1mKX1pZihBPWY+Pj4zLGY+Pj4wPDI1NilyZXR1cm4gcj01NzYwOCsoQTw8MTw8Mil8MCwoZT0wfGFyWzE0MzkyXSkmKEE9MTw8QSk/QT0wfGFyWyhlPXIrOHwwKT4+Ml06KGFyWzE0MzkyXT1lfEEsZT0oQT1yKSs4fDApLGFyW2U+PjJdPW8sYXJbQSsxMj4+Ml09byxhcltvKzg+PjJdPUEsdm9pZChhcltvKzEyPj4yXT1yKTtpPTU3ODcyKygoQT0oQT1mPj4+OCk/MTY3NzcyMTU8Zj4+PjA/MzE6Zj4+PigoQT0xNC0oKG49KChhPUE8PCh0PShBKzEwNDgzMjB8MCk+Pj4xNiY4KSkrNTIwMTkyfDApPj4+MTYmNCl8dHwoQT0oKGE8PD1uKSsyNDU3NjB8MCk+Pj4xNiYyKSkrKGE8PEE+Pj4xNSl8MCkrN3wwKSYxfEE8PDE6MCk8PDIpfDAsYXJbbysyOD4+Ml09QSxhcltvKzIwPj4yXT0wLGU9KGFyW28rMTY+PjJdPTApfGFyWzE0MzkzXSxyPTE8PEE7ZG97aWYoZSZyKXtmb3IoZT1mPDwoMzE9PSgwfEEpPzA6MjUtKEE+Pj4xKXwwKSxyPTB8YXJbaT4+Ml07Oyl7aWYoKC04JmFyW3IrND4+Ml18MCk9PSgwfGYpKXtBPTczO2JyZWFrfWlmKCEoQT0wfGFyWyhpPXIrMTYrKGU+Pj4zMTw8Mil8MCk+PjJdKSl7QT03MjticmVha31lPDw9MSxyPUF9aWYoNzI9PSgwfEEpKXthcltpPj4yXT1vLGFyW28rMjQ+PjJdPXIsYXJbbysxMj4+Ml09byxhcltvKzg+PjJdPW87YnJlYWt9aWYoNzM9PSgwfEEpKXthPTB8YXJbKHQ9cis4fDApPj4yXSxhclthKzEyPj4yXT1vLGFyW3Q+PjJdPW8sYXJbbys4Pj4yXT1hLGFyW28rMTI+PjJdPXIsYXJbbysyND4+Ml09MDticmVha319ZWxzZSBhclsxNDM5M109ZXxyLGFyW2k+PjJdPW8sYXJbbysyND4+Ml09aSxhcltvKzEyPj4yXT1vLGFyW28rOD4+Ml09b313aGlsZSgwKTtpZihhPSgwfGFyWzE0NDAwXSktMXwwLCEoYXJbMTQ0MDBdPWEpKXtmb3IoQT01ODAyNDtBPTB8YXJbQT4+Ml07KUE9QSs4fDA7YXJbMTQ0MDBdPS0xfX19fWZ1bmN0aW9uIEVjKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MDtyZXR1cm4oQXw9MCk/NDI5NDk2NzIzMTxlPj4+MD8oYXJbKGU9MTAzNjQpPj4yXT0xMiwoZT0wKXxlKTowfChyPTB8ZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZihsPTB8YXJbKHU9NCsoQXw9MCl8MCk+PjJdLHI9QSsoZj0tOCZsKXwwLCEoMyZsKSlyZXR1cm4hKGU+Pj4wPDI1NikmJihlKzR8MCk+Pj4wPD1mPj4+MCYmKGYtZXwwKT4+PjA8PWFyWzE0NTEyXTw8MT4+PjA/MHxBOihBPTApfEE7aWYoZT4+PjA8PWY+Pj4wKXJldHVybihmPWYtZXwwKT4+PjA8PTE1fHwoYz1BK2V8MCxhclt1Pj4yXT0xJmx8ZXwyLGFyW2MrND4+Ml09M3xmLGFyWyh1PWMrZis0fDApPj4yXT0xfGFyW3U+PjJdLFhjKGMsZikpLDB8QTtpZigoMHxyKT09KDB8YXJbMTQzOThdKSlyZXR1cm4gYz0oMHxhclsxNDM5NV0pK2Z8MCxmPWMtZXwwLG49QStlfDAsYz4+PjA8PWU+Pj4wPyhBPTApfEE6KGFyW3U+PjJdPTEmbHxlfDIsYXJbbis0Pj4yXT0xfGYsYXJbMTQzOThdPW4sYXJbMTQzOTVdPWYsMHxBKTtpZigoMHxyKT09KDB8YXJbMTQzOTddKSlyZXR1cm4odD0oMHxhclsxNDM5NF0pK2Z8MCk+Pj4wPGU+Pj4wPyhBPTApfEE6KG49MSZsLDE1PChmPXQtZXwwKT4+PjA/KGM9KGw9QStlfDApK2Z8MCxhclt1Pj4yXT1ufGV8MixhcltsKzQ+PjJdPTF8ZixhcltjPj4yXT1mLGFyWyhuPWMrNHwwKT4+Ml09LTImYXJbbj4+Ml0sbj1sKTooYXJbdT4+Ml09bnx0fDIsYXJbKG49QSt0KzR8MCk+PjJdPTF8YXJbbj4+Ml0sZj1uPTApLGFyWzE0Mzk0XT1mLGFyWzE0Mzk3XT1uLDB8QSk7aWYoMiYobj0wfGFyWzQrcj4+Ml0pfDApcmV0dXJuKEE9MCl8QTtpZigoaT0oLTgmbikrZnwwKT4+PjA8ZT4+PjApcmV0dXJuKEE9MCl8QTtjPWktZXwwLHQ9bj4+PjM7ZG97aWYobj4+PjA8MjU2KXtpZihuPTB8YXJbOCtyPj4yXSwoMHwoZj0wfGFyWzEyK3I+PjJdKSk9PSgwfG4pKXthclsxNDM5Ml09YXJbMTQzOTJdJn4oMTw8dCk7YnJlYWt9YXJbbisxMj4+Ml09ZixhcltmKzg+PjJdPW47YnJlYWt9YT0wfGFyWzI0K3I+PjJdLGY9MHxhclsxMityPj4yXTtkb3tpZigoMHxmKT09KDB8cikpe2lmKGY9MHxhclsobj0odD0xNityfDApKzR8MCk+PjJdKW89bjtlbHNle2lmKCEoZj0wfGFyW3Q+PjJdKSl7dD0wO2JyZWFrfW89dH1mb3IoOzspaWYoMHwobj0wfGFyWyh0PWYrMjB8MCk+PjJdKSlmPW4sbz10O2Vsc2V7aWYoISh0PTB8YXJbKG49ZisxNnwwKT4+Ml0pKWJyZWFrO2Y9dCxvPW59YXJbbz4+Ml09MCx0PWZ9ZWxzZSB0PTB8YXJbOCtyPj4yXSxhclt0KzEyPj4yXT1mLGFyW2YrOD4+Ml09dCx0PWZ9d2hpbGUoMCk7aWYoMHxhKXtpZihmPTB8YXJbMjgrcj4+Ml0sKDB8cik9PSgwfGFyWyhuPTU3ODcyKyhmPDwyKXwwKT4+Ml0pKXtpZighKGFyW24+PjJdPXQpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8Zik7YnJlYWt9fWVsc2UgaWYoIShhclthKzE2KygoKDB8YXJbYSsxNj4+Ml0pIT0oMHxyKSYxKTw8Mik+PjJdPXQpKWJyZWFrO2FyW3QrMjQ+PjJdPWEsMHwobj0wfGFyWyhmPTE2K3J8MCk+PjJdKSYmKGFyW3QrMTY+PjJdPW4sYXJbbisyND4+Ml09dCksMHwoZj0wfGFyW2YrND4+Ml0pJiYoYXJbdCsyMD4+Ml09ZixhcltmKzI0Pj4yXT10KX19d2hpbGUoMCk7cmV0dXJuIGY9MSZsLGM+Pj4wPDE2Pyhhclt1Pj4yXT1pfGZ8MixhclsodT1BK2krNHwwKT4+Ml09MXxhclt1Pj4yXSk6KGw9QStlfDAsYXJbdT4+Ml09ZnxlfDIsYXJbbCs0Pj4yXT0zfGMsYXJbKHU9bCtjKzR8MCk+PjJdPTF8YXJbdT4+Ml0sWGMobCxjKSksMHxBfShBKy04fDAsZT4+PjA8MTE/MTY6ZSsxMSYtOCkpPzB8KGU9cis4fDApOihyPTB8eWMoZSkpPyhoYigwfHIsMHxBLDB8KChpPSgtOCYoaT0wfGFyW0ErLTQ+PjJdKSktKDA9PSgzJml8MCk/ODo0KXwwKT4+PjA8ZT4+PjA/aTplKSksQmMoQSksMHwoZT1yKSk6KGU9MCl8ZTowfChlPTB8eWMoZSkpfWZ1bmN0aW9uIFhjKEEsZSl7dmFyIHI9MCxpPTAsZj0wLG49MCx0PTAsbz0wLGE9MDthPShBfD0wKSsoZXw9MCl8MCxyPTB8YXJbQSs0Pj4yXTtkb3tpZigxJnIpbz1BLHI9ZTtlbHNle2lmKGk9MHxhcltBPj4yXSwhKDMmcikpcmV0dXJuO2lmKHQ9aStlfDAsKDB8KG49QSsoMC1pKXwwKSk9PSgwfGFyWzE0Mzk3XSkpe2lmKDM9PSgzJihyPTB8YXJbKEE9YSs0fDApPj4yXSl8MCkpcmV0dXJuIGFyWzE0Mzk0XT10LGFyW0E+PjJdPS0yJnIsYXJbbis0Pj4yXT0xfHQsdm9pZChhcltuK3Q+PjJdPXQpO289bixyPXQ7YnJlYWt9aWYoZT1pPj4+MyxpPj4+MDwyNTYpe2lmKEE9MHxhcltuKzg+PjJdLCgwfChyPTB8YXJbbisxMj4+Ml0pKT09KDB8QSkpe2FyWzE0MzkyXT1hclsxNDM5Ml0mfigxPDxlKSxvPW4scj10O2JyZWFrfWFyW0ErMTI+PjJdPXIsYXJbcis4Pj4yXT1BLG89bixyPXQ7YnJlYWt9Zj0wfGFyW24rMjQ+PjJdLEE9MHxhcltuKzEyPj4yXTtkb3tpZigoMHxBKT09KDB8bikpe2lmKCEoQT0wfGFyWyhyPShlPW4rMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltlPj4yXSkpe0E9MDticmVha31yPWV9Zm9yKDs7KWlmKDB8KGk9MHxhclsoZT1BKzIwfDApPj4yXSkpQT1pLHI9ZTtlbHNle2lmKCEoaT0wfGFyWyhlPUErMTZ8MCk+PjJdKSlicmVhaztBPWkscj1lfWFyW3I+PjJdPTB9ZWxzZSBvPTB8YXJbbis4Pj4yXSxhcltvKzEyPj4yXT1BLGFyW0ErOD4+Ml09b313aGlsZSgwKTtpZihmKXtpZihyPTB8YXJbbisyOD4+Ml0sKDB8bik9PSgwfGFyWyhlPTU3ODcyKyhyPDwyKXwwKT4+Ml0pKXtpZighKGFyW2U+PjJdPUEpKXthclsxNDM5M109YXJbMTQzOTNdJn4oMTw8ciksbz1uLHI9dDticmVha319ZWxzZSBpZighKGFyW2YrMTYrKCgoMHxhcltmKzE2Pj4yXSkhPSgwfG4pJjEpPDwyKT4+Ml09QSkpe289bixyPXQ7YnJlYWt9YXJbQSsyND4+Ml09ZiwwfChlPTB8YXJbKHI9bisxNnwwKT4+Ml0pJiYoYXJbQSsxNj4+Ml09ZSxhcltlKzI0Pj4yXT1BKSxyPShvPSgocj0wfGFyW3IrND4+Ml0pJiYoYXJbQSsyMD4+Ml09cixhcltyKzI0Pj4yXT1BKSxuKSx0KX1lbHNlIG89bixyPXR9fXdoaWxlKDApO2lmKDImKGk9MHxhclsoQT1hKzR8MCk+PjJdKSlhcltBPj4yXT0tMiZpLGFyW28rND4+Ml09MXxyLGFyW28rcj4+Ml09cjtlbHNle2lmKEE9MHxhclsxNDM5N10sKDB8YSk9PSgwfGFyWzE0Mzk4XSkpcmV0dXJuIGE9KDB8YXJbMTQzOTVdKStyfDAsYXJbMTQzOTVdPWEsYXJbMTQzOThdPW8sYXJbbys0Pj4yXT0xfGEsKDB8byk9PSgwfEEpJiYoYXJbMTQzOTddPTAsdm9pZChhclsxNDM5NF09MCkpO2lmKCgwfGEpPT0oMHxBKSlyZXR1cm4gYT0oMHxhclsxNDM5NF0pK3J8MCxhclsxNDM5NF09YSxhclsxNDM5N109byxhcltvKzQ+PjJdPTF8YSx2b2lkKGFyW28rYT4+Ml09YSk7bj0oLTgmaSkrcnwwLGU9aT4+PjM7ZG97aWYoaT4+PjA8MjU2KXtpZihyPTB8YXJbYSs4Pj4yXSwoMHwoQT0wfGFyW2ErMTI+PjJdKSk9PSgwfHIpKXthclsxNDM5Ml09YXJbMTQzOTJdJn4oMTw8ZSk7YnJlYWt9YXJbcisxMj4+Ml09QSxhcltBKzg+PjJdPXI7YnJlYWt9Zj0wfGFyW2ErMjQ+PjJdLEE9MHxhclthKzEyPj4yXTtkb3tpZigoMHxBKT09KDB8YSkpe2lmKCEoQT0wfGFyWyhyPShlPWErMTZ8MCkrNHwwKT4+Ml0pKXtpZighKEE9MHxhcltlPj4yXSkpe2U9MDticmVha31yPWV9Zm9yKDs7KWlmKDB8KGk9MHxhclsoZT1BKzIwfDApPj4yXSkpQT1pLHI9ZTtlbHNle2lmKCEoaT0wfGFyWyhlPUErMTZ8MCk+PjJdKSlicmVhaztBPWkscj1lfWFyW3I+PjJdPTAsZT1BfWVsc2UgZT0wfGFyW2ErOD4+Ml0sYXJbZSsxMj4+Ml09QSxhcltBKzg+PjJdPWUsZT1BfXdoaWxlKDApO2lmKDB8Zil7aWYoQT0wfGFyW2ErMjg+PjJdLCgwfGEpPT0oMHxhclsocj01Nzg3MisoQTw8Mil8MCk+PjJdKSl7aWYoIShhcltyPj4yXT1lKSl7YXJbMTQzOTNdPWFyWzE0MzkzXSZ+KDE8PEEpO2JyZWFrfX1lbHNlIGlmKCEoYXJbZisxNisoKCgwfGFyW2YrMTY+PjJdKSE9KDB8YSkmMSk8PDIpPj4yXT1lKSlicmVhazthcltlKzI0Pj4yXT1mLDB8KHI9MHxhclsoQT1hKzE2fDApPj4yXSkmJihhcltlKzE2Pj4yXT1yLGFyW3IrMjQ+PjJdPWUpLDB8KEE9MHxhcltBKzQ+PjJdKSYmKGFyW2UrMjA+PjJdPUEsYXJbQSsyND4+Ml09ZSl9fXdoaWxlKDApO2lmKGFyW28rND4+Ml09MXxuLGFyW28rbj4+Ml09biwoMHxvKT09KDB8YXJbMTQzOTddKSlyZXR1cm4gdm9pZChhclsxNDM5NF09bik7cj1ufWlmKEE9cj4+PjMscj4+PjA8MjU2KXJldHVybiBlPTU3NjA4KyhBPDwxPDwyKXwwLChyPTB8YXJbMTQzOTJdKSYoQT0xPDxBKT9BPTB8YXJbKHI9ZSs4fDApPj4yXTooYXJbMTQzOTJdPXJ8QSxyPShBPWUpKzh8MCksYXJbcj4+Ml09byxhcltBKzEyPj4yXT1vLGFyW28rOD4+Ml09QSx2b2lkKGFyW28rMTI+PjJdPWUpO2lmKGY9NTc4NzIrKChBPShBPXI+Pj44KT8xNjc3NzIxNTxyPj4+MD8zMTpyPj4+KChBPTE0LSgobj0oKGE9QTw8KHQ9KEErMTA0ODMyMHwwKT4+PjE2JjgpKSs1MjAxOTJ8MCk+Pj4xNiY0KXx0fChBPSgoYTw8PW4pKzI0NTc2MHwwKT4+PjE2JjIpKSsoYTw8QT4+PjE1KXwwKSs3fDApJjF8QTw8MTowKTw8Mil8MCxhcltvKzI4Pj4yXT1BLGFyW28rMjA+PjJdPTAsISgoZT0oYXJbbysxNj4+Ml09MCl8YXJbMTQzOTNdKSYoaT0xPDxBKSkpcmV0dXJuIGFyWzE0MzkzXT1lfGksYXJbZj4+Ml09byxhcltvKzI0Pj4yXT1mLGFyW28rMTI+PjJdPW8sdm9pZChhcltvKzg+PjJdPW8pO2ZvcihlPXI8PCgzMT09KDB8QSk/MDoyNS0oQT4+PjEpfDApLGk9MHxhcltmPj4yXTs7KXtpZigoLTgmYXJbaSs0Pj4yXXwwKT09KDB8cikpe0E9Njk7YnJlYWt9aWYoIShBPTB8YXJbKGY9aSsxNisoZT4+PjMxPDwyKXwwKT4+Ml0pKXtBPTY4O2JyZWFrfWU8PD0xLGk9QX1yZXR1cm4gNjg9PSgwfEEpPyhhcltmPj4yXT1vLGFyW28rMjQ+PjJdPWksYXJbbysxMj4+Ml09byx2b2lkKGFyW28rOD4+Ml09bykpOjY5PT0oMHxBKSYmKGE9MHxhclsodD1pKzh8MCk+PjJdLGFyW2ErMTI+PjJdPW8sYXJbdD4+Ml09byxhcltvKzg+PjJdPWEsYXJbbysxMj4+Ml09aSx2b2lkKGFyW28rMjQ+PjJdPTApKX1mdW5jdGlvbiBXYyhBLGUpe3JldHVybiBlfD0wLChBfD0wKT4+PjA8OT8wfChlPTB8eWMoZSkpOjB8KGU9MHxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MDtpZigoQT0xNjwoQXw9MCk+Pj4wP0E6MTYpKy0xJkEpZm9yKGk9MTY7Oyl7aWYoIShpPj4+MDxBPj4+MCkpe0E9aTticmVha31pPDw9MX1pZigoLTY0LUF8MCk+Pj4wPD1lPj4+MClyZXR1cm4gYXJbKHQ9MTAzNjQpPj4yXT0xMiwodD0wKXx0O2lmKCEoaT0wfHljKDEyKyhuPWU+Pj4wPDExPzE2OmUrMTEmLTgpK0F8MCkpKXJldHVybih0PTApfHQ7cj1pKy04fDA7ZG97aWYoaSZBKy0xKXtpZihlPShmPTE1PCgoZj0oaStBKy0xJjAtQSktOHwwKS0oZT1yKXwwKT4+PjA/ZjpmK0F8MCktZXwwLG89MHxhclsoQT1pKy00fDApPj4yXSxpPSgtOCZvKS1lfDAsMyZvKXthclsobz1mKzR8MCk+PjJdPWl8MSZhcltvPj4yXXwyLGFyWyhpPWYraSs0fDApPj4yXT0xfGFyW2k+PjJdLGFyW0E+PjJdPWV8MSZhcltBPj4yXXwyLGFyW28+PjJdPTF8YXJbbz4+Ml0sWGMocixlKSxlPUE9ZjticmVha31hcltmPj4yXT0oMHxhcltyPj4yXSkrZSxhcltmKzQ+PjJdPWksZT1BPWY7YnJlYWt9ZT1BPXJ9d2hpbGUoMCk7MyYoaT0wfGFyWyhBPUErNHwwKT4+Ml0pfDAmJih0PS04JmkpPj4+MD4obisxNnwwKT4+PjAmJihvPXQtbnwwLHQ9ZStufDAsYXJbQT4+Ml09bnwxJml8Mixhclt0KzQ+PjJdPTN8byxhclsobj10K28rNHwwKT4+Ml09MXxhcltuPj4yXSxYYyh0LG8pKTtyZXR1cm4gMHwobz1lKzh8MCl9KEEsZSkpfWZ1bmN0aW9uIEljKEEpe3JldHVybiA0Mjk0OTYzMjAwPChBfD0wKT4+PjAmJihhclsxMDM2ND4+Ml09MC1BLEE9LTEpLDB8QX1mdW5jdGlvbiBDYygpe3JldHVybiAxMDM2NH1mdW5jdGlvbiBHYyhBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7Yz11cj0obz11cikrMzEmLTMyLHVyPXVyKzQ4fDAsdD1jKzE2fDAsYz0obD1jKSszMnwwLGE9MHxhclsoZj0oQXw9MCkrMjh8MCk+PjJdLGFyW2M+PjJdPWEsYT0oMHxhclsobj1BKzIwfDApPj4yXSktYXwwLGFyW2MrND4+Ml09YSxhcltjKzg+PjJdPWUsYT1hKyhhcltjKzEyPj4yXT1yKXwwLGk9QSs2MHwwLGFyW2w+PjJdPWFyW2k+PjJdLGFyW2wrND4+Ml09YyxhcltsKzg+PjJdPTIsbD0wfEljKDB8XygxNDYsMHxsKSk7QTpkb3tpZigoMHxhKSE9KDB8bCkpe2ZvcihlPTI7ISgoMHxsKTwwKTspaWYoYT1hLWx8MCxlPSgoYj0ocz0wfGFyW2MrND4+Ml0pPj4+MDxsPj4+MCk8PDMxPj4zMSkrZXwwLHM9bC0oYj9zOjApfDAsYXJbKGM9Yj9jKzh8MDpjKT4+Ml09KDB8YXJbYz4+Ml0pK3MsYXJbKGI9Yys0fDApPj4yXT0oMHxhcltiPj4yXSktcyxhclt0Pj4yXT1hcltpPj4yXSxhcls0K3Q+PjJdPWMsYXJbOCt0Pj4yXT1lLCgwfGEpPT0oMHwobD0wfEljKDB8XygxNDYsMHx0KSkpKSl7dT0zO2JyZWFrIEF9YXJbQSsxNj4+Ml09MCxhcltmPj4yXT0wLGFyW24+PjJdPTAsYXJbQT4+Ml09MzJ8YXJbQT4+Ml0scj0yPT0oMHxlKT8wOnItKDB8YXJbYys0Pj4yXSl8MH1lbHNlIHU9M313aGlsZSgwKTtyZXR1cm4gMz09KDB8dSkmJihzPTB8YXJbQSs0ND4+Ml0sYXJbQSsxNj4+Ml09cysoMHxhcltBKzQ4Pj4yXSksYXJbZj4+Ml09cyxhcltuPj4yXT1zKSx1cj1vLDB8cn1mdW5jdGlvbiBWYyhBKXt2YXIgZSxyPTAsaT0wO2U9QXw9MDtBOmRve2lmKDMmZSlmb3Iocj1lOzspe2lmKCEoMHx0cltBPj4wXSkpe0E9cjticmVhayBBfWlmKCEoMyYocj1BPUErMXwwKSkpe2k9NDticmVha319ZWxzZSBpPTR9d2hpbGUoMCk7aWYoND09KDB8aSkpe2Zvcig7ISgoLTIxMzkwNjIxNDQmKHI9MHxhcltBPj4yXSleLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KTspQT1BKzR8MDtpZigoMjU1JnIpPDwyND4+MjQpZm9yKDswIT0oMHx0clsoQT1BKzF8MCk+PjBdKTspO31yZXR1cm4gQS1lfDB9ZnVuY3Rpb24gRmMoQSxlKXtlfD0wO3ZhciByPTAsaT0wO2lmKHI9MHx0clsoQXw9MCk+PjBdLGk9MHx0cltlPj4wXSxyPDwyND4+MjQ9PTB8fHI8PDI0Pj4yNCE9aTw8MjQ+PjI0KUE9aTtlbHNle2Zvcig7ZT1lKzF8MCxyPTB8dHJbKEE9QSsxfDApPj4wXSxpPTB8dHJbZT4+MF0scjw8MjQ+PjI0IT0wJiZyPDwyND4+MjQ9PWk8PDI0Pj4yNDspO0E9aX1yZXR1cm4oMjU1JnIpLSgyNTUmQSl8MH1mdW5jdGlvbiBSYyhBLGUscil7QXw9MDt2YXIgaT0wLGY9MCxuPTAsdD0wO249MjU1JihlfD0wKSxpPTAhPSgwfChyfD0wKSk7QTpkb3tpZihpJjAhPSgzJkF8MCkpZm9yKGY9MjU1JmU7Oyl7aWYoKDB8dHJbQT4+MF0pPT1mPDwyND4+MjQpe3Q9NjticmVhayBBfWlmKCEoKGk9MCE9KDB8KHI9cistMXwwKSkpJjAhPSgzJihBPUErMXwwKXwwKSkpe3Q9NTticmVha319ZWxzZSB0PTV9d2hpbGUoMCk7NT09KDB8dCkmJihpP3Q9NjpyPTApO0E6ZG97aWYoNj09KDB8dCkmJihmPTI1NSZlLCgwfHRyW0E+PjBdKSE9Zjw8MjQ+PjI0KSl7aT0wfGJyKG4sMTY4NDMwMDkpO2U6ZG97aWYoMzxyPj4+MCl7Zm9yKDshKCgtMjEzOTA2MjE0NCYobj1hcltBPj4yXV5pKV4tMjEzOTA2MjE0NCkmbistMTY4NDMwMDl8MCk7KWlmKEE9QSs0fDAsKHI9cistNHwwKT4+PjA8PTMpe3Q9MTE7YnJlYWsgZX19ZWxzZSB0PTExfXdoaWxlKDApO2lmKDExPT0oMHx0KSYmIXIpe3I9MDticmVha31mb3IoOzspe2lmKCgwfHRyW0E+PjBdKT09Zjw8MjQ+PjI0KWJyZWFrIEE7aWYoQT1BKzF8MCwhKHI9cistMXwwKSl7cj0wO2JyZWFrfX19fXdoaWxlKDApO3JldHVybiAwfCgwfHI/QTowKX1mdW5jdGlvbiBOYyhBLGUpe0F8PTA7dmFyIHI9MCxpPTAsZj0wO2k9MjU1JihlfD0wKTtBOmRve2lmKGkpe2lmKDMmQSl7cj0yNTUmZTtkb3tpZigoZj0wfHRyW0E+PjBdKTw8MjQ+PjI0PT0wfHxmPDwyND4+MjQ9PXI8PDI0Pj4yNClicmVhayBBO0E9QSsxfDB9d2hpbGUoMCE9KDMmQXwwKSl9aT0wfGJyKGksMTY4NDMwMDkpLHI9MHxhcltBPj4yXTtlOmRve2lmKCEoKC0yMTM5MDYyMTQ0JnJeLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KSlkb3tpZigoLTIxMzkwNjIxNDQmKGY9cl5pKV4tMjEzOTA2MjE0NCkmZistMTY4NDMwMDl8MClicmVhayBlO3I9MHxhclsoQT1BKzR8MCk+PjJdfXdoaWxlKCEoKC0yMTM5MDYyMTQ0JnJeLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5fDApKX13aGlsZSgwKTtmb3Iocj0yNTUmZTsoZj0wfHRyW0E+PjBdKTw8MjQ+PjI0IT0wJiZmPDwyND4+MjQhPXI8PDI0Pj4yNDspQT1BKzF8MH1lbHNlIEE9QSsoMHxWYyhBKSl8MH13aGlsZSgwKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIF9jKEEsZSxyLGkpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIGYsbjtyZXR1cm4gbj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbbj4+Ml09aSxpPTB8WWMoQSxlLHIsbiksdXI9ZiwwfGl9ZnVuY3Rpb24gWWMoQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7Zm9yKGw9dXI9KG49dXIpKzMxJi0zMix1cj11cisxMjh8MCx0PWwrMTI0fDAsYT0xMDgwNCxmPShvPWwpKzEyNHwwO2FyW28+PjJdPWFyW2E+PjJdLGE9YSs0fDAsKDB8KG89bys0fDApKTwoMHxmKTspO3JldHVybiAyMTQ3NDgzNjQ2PChlKy0xfDApPj4+MD9lPyhhclsoZT0xMDM2NCk+PjJdPTc1LGU9LTEpOihBPXQsZT0xLGM9NCk6Yz00LDQ9PSgwfGMpJiYoYz0oYz0tMi1BfDApPj4+MDxlPj4+MD9jOmUsYXJbbCs0OD4+Ml09YyxhclsodD1sKzIwfDApPj4yXT1BLGU9KGFyW2wrNDQ+PjJdPUEpK2N8MCxhclsoQT1sKzE2fDApPj4yXT1lLGFyW2wrMjg+PjJdPWUsZT0wfFFjKGwscixpKSxjJiYobD0wfGFyW3Q+PjJdLHRyW2wrKCgoMHxsKT09KDB8YXJbQT4+Ml0pKTw8MzE+PjMxKT4+MF09MCkpLHVyPW4sMHxlfWZ1bmN0aW9uIFFjKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtmb3Ioaz11cj0odD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGk9aysxMjB8MCxmPWsrODB8MCxrPShuPWspKzEzNnwwLGE9KG89ZikrNDB8MDsoMHwobz1vKzR8KGFyW28+PjJdPTApKSk8KDB8YSk7KTtyZXR1cm4gYXJbaT4+Ml09YXJbcj4+Ml0scj0oMHxEYygwLGUsaSxuLGYpKTwwPy0xOihkPS0xPCgwfGFyW0ErNzY+PjJdKT8wfEpjKCk6MCxzPTMyJihyPTB8YXJbQT4+Ml0pLCgwfHRyW0ErNzQ+PjBdKTwxJiYoYXJbQT4+Ml09LTMzJnIpLDB8YXJbKG89QSs0OHwwKT4+Ml0/cj0wfERjKEEsZSxpLG4sZik6KGM9MHxhclsoYT1BKzQ0fDApPj4yXSxhclthPj4yXT1rLGFyWyhsPUErMjh8MCk+PjJdPWssYXJbKHU9QSsyMHwwKT4+Ml09ayxhcltvPj4yXT04MCxhclsoYj1BKzE2fDApPj4yXT1rKzgwLHI9MHxEYyhBLGUsaSxuLGYpLGMmJih4Yls2MyZhcltBKzM2Pj4yXV0oQSwwLDApLHI9MD09KDB8YXJbdT4+Ml0pPy0xOnIsYXJbYT4+Ml09YyxhcltvPj4yXT0wLGFyW2I+PjJdPTAsYXJbbD4+Ml09MCxhclt1Pj4yXT0wKSksbz0wfGFyW0E+PjJdLGFyW0E+PjJdPW98cywwfGQmJk1jKCksMD09KDMyJm98MCk/cjotMSksdXI9dCwwfHJ9ZnVuY3Rpb24gRGMoQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MDtXPXVyPShiPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxjPVcrMTZ8MCxYPShsPVcpKzI0fDAsdT1XKzh8MCxXPVcrMjB8MCxhcltjPj4yXT1lLG49MCE9KDB8QSksbz10PVgrNDB8MCxYPVgrMzl8MCxhPTQrdXwwLHY9cz1kPTA7QTpmb3IoOzspe2Rve2lmKC0xPCgwfHMpKXtpZigoMjE0NzQ4MzY0Ny1zfDApPCgwfGQpKXthclsocz0xMDM2NCk+PjJdPTc1LHM9LTE7YnJlYWt9cz1kK3N8MDticmVha319d2hpbGUoMCk7aWYoISgoZD0wfHRyW2U+PjBdKTw8MjQ+PjI0KSl7RT04NzticmVha31rPWU7ZTpmb3IoOzspe3N3aXRjaChkPDwyND4+MjQpe2Nhc2UgMzc6ZD1rLEU9OTticmVhayBlO2Nhc2UgMDpkPWs7YnJlYWsgZX1CPWsrMXwwLGFyW2M+PjJdPUIsZD0wfHRyW0I+PjBdLGs9Qn1lOmRve2lmKDk9PSgwfEUpKWZvcig7Oyl7aWYoMzchPSgoRT0wKXx0cltrKzE+PjBdKSlicmVhayBlO2lmKGQ9ZCsxfDAsaz1rKzJ8MCxhcltjPj4yXT1rLDM3IT0oMHx0cltrPj4wXSkpYnJlYWs7RT05fX13aGlsZSgwKTtpZihkPWQtZXwwLG4mJlRjKEEsZSxkKSwwfGQpZT1rO2Vsc2V7KGQ9KDB8dHJbKGg9aysxfDApPj4wXSktNDh8MCk+Pj4wPDEwPyh5PShCPTM2PT0oMHx0cltrKzI+PjBdKSk/ZDotMSx2PUI/MTp2LGg9Qj9rKzN8MDpoKTp5PS0xLGFyW2M+PjJdPWgsaz0oKGQ9MHx0cltoPj4wXSk8PDI0Pj4yNCktMzJ8MDtlOmRve2lmKGs+Pj4wPDMyKWZvcih3PTAsbT1kOzspe2lmKCEoNzU5MTMmKGQ9MTw8aykpKXtkPW07YnJlYWsgZX1pZih3fD1kLGg9aCsxfDAsYXJbYz4+Ml09aCwzMjw9KGs9KChkPTB8dHJbaD4+MF0pPDwyND4+MjQpLTMyfDApPj4+MClicmVhazttPWR9ZWxzZSB3PTB9d2hpbGUoMCk7aWYoZDw8MjQ+PjI0PT00Mil7aWYoKGQ9KDB8dHJbKGs9aCsxfDApPj4wXSktNDh8MCk+Pj4wPDEwJiYzNj09KDB8dHJbaCsyPj4wXSkpYXJbZisoZDw8Mik+PjJdPTEwLGQ9MHxhcltpKygoMHx0cltrPj4wXSktNDg8PDMpPj4yXSx2PTEsaD1oKzN8MDtlbHNle2lmKDB8dil7cz0tMTticmVha31oPSh2PW4/KHY9MysoMHxhcltyPj4yXSkmLTQsZD0wfGFyW3Y+PjJdLGFyW3I+PjJdPXYrNCwwKTpkPTAsayl9YXJbYz4+Ml09aCxkPShCPSgwfGQpPDApPzAtZHwwOmQsdz1CPzgxOTJ8dzp3fWVsc2V7aWYoKDB8KGQ9MHxVYyhjKSkpPDApe3M9LTE7YnJlYWt9aD0wfGFyW2M+PjJdfWRve2lmKDQ2PT0oMHx0cltoPj4wXSkpe2lmKDQyIT0oMHx0cltoKzE+PjBdKSl7YXJbYz4+Ml09aCsxLGs9MHxVYyhjKSxoPTB8YXJbYz4+Ml07YnJlYWt9aWYoKGs9KDB8dHJbKG09aCsyfDApPj4wXSktNDh8MCk+Pj4wPDEwJiYzNj09KDB8dHJbaCszPj4wXSkpe2FyW2YrKGs8PDIpPj4yXT0xMCxrPTB8YXJbaSsoKDB8dHJbbT4+MF0pLTQ4PDwzKT4+Ml0saD1oKzR8MCxhcltjPj4yXT1oO2JyZWFrfWlmKDB8dil7cz0tMTticmVhayBBfW4/KEI9MysoMHxhcltyPj4yXSkmLTQsaz0wfGFyW0I+PjJdLGFyW3I+PjJdPUIrNCk6az0wLGg9YXJbYz4+Ml09bX1lbHNlIGs9LTF9d2hpbGUoMCk7Zm9yKHA9MDs7KXtpZig1NzwoKDB8dHJbaD4+MF0pLTY1fDApPj4+MCl7cz0tMTticmVhayBBfWlmKEI9aCsxfDAsYXJbYz4+Ml09QiwhKCgoZz0yNTUmKG09MHx0clsoMHx0cltoPj4wXSktNjUrKDUwMjAyKyg1OCpwfDApKT4+MF0pKSstMXwwKT4+PjA8OCkpYnJlYWs7cD1nLGg9Qn1pZighKG08PDI0Pj4yNCkpe3M9LTE7YnJlYWt9Wj0tMTwoMHx5KTtkb3tpZihtPDwyND4+MjQ9PTE5KXtpZihaKXtzPS0xO2JyZWFrIEF9RT00OX1lbHNle2lmKFope2FyW2YrKHk8PDIpPj4yXT1nLHk9MHxhclsoWj1pKyh5PDwzKXwwKSs0Pj4yXSxhclsoRT1sKT4+Ml09YXJbWj4+Ml0sYXJbRSs0Pj4yXT15LEU9NDk7YnJlYWt9aWYoIW4pe3M9MDticmVhayBBfVNjKGwsZyxyKX19d2hpbGUoMCk7aWYoNDkhPSgwfEUpfHwoRT0wLG4pKXtoPTAhPSgwfHApJjM9PSgxNSYoaD0wfHRyW2g+PjBdKXwwKT8tMzMmaDpoLFo9LTY1NTM3JncseT0wPT0oODE5MiZ3fDApP3c6WjtlOmRve3N3aXRjaCgwfGgpe2Nhc2UgMTEwOnN3aXRjaCgoMjU1JnApPDwyND4+MjQpe2Nhc2UgMDpjYXNlIDE6YXJbYXJbbD4+Ml0+PjJdPXMsZD0wLGU9Qjtjb250aW51ZSBBO2Nhc2UgMjpkPTB8YXJbbD4+Ml0sYXJbZD4+Ml09cyxhcltkKzQ+PjJdPSgoMHxzKTwwKTw8MzE+PjMxLGQ9MCxlPUI7Y29udGludWUgQTtjYXNlIDM6b3JbYXJbbD4+Ml0+PjFdPXMsZD0wLGU9Qjtjb250aW51ZSBBO2Nhc2UgNDp0clthcltsPj4yXT4+MF09cyxkPTAsZT1CO2NvbnRpbnVlIEE7Y2FzZSA2OmFyW2FyW2w+PjJdPj4yXT1zLGQ9MCxlPUI7Y29udGludWUgQTtjYXNlIDc6ZD0wfGFyW2w+PjJdLGFyW2Q+PjJdPXMsYXJbZCs0Pj4yXT0oKDB8cyk8MCk8PDMxPj4zMSxkPTAsZT1CO2NvbnRpbnVlIEE7ZGVmYXVsdDpkPTAsZT1CO2NvbnRpbnVlIEF9Y2FzZSAxMTI6aD0xMjAsaz04PGs+Pj4wP2s6OCxlPTh8eSxFPTYxO2JyZWFrO2Nhc2UgODg6Y2FzZSAxMjA6ZT15LEU9NjE7YnJlYWs7Y2FzZSAxMTE6bT01MDY2NixrPSh3PTApPT0oOCZ5fDApfCgwfChaPW8tKGc9MHx6YyhlPTB8YXJbKGg9bCk+PjJdLGg9MHxhcltoKzQ+PjJdLHQpKXwwKSk8KDB8ayk/azpaKzF8MCxaPXksRT02NzticmVhaztjYXNlIDEwNTpjYXNlIDEwMDppZihlPTB8YXJbKGg9bCk+PjJdLCgwfChoPTB8YXJbaCs0Pj4yXSkpPDApe2U9MHxvYigwLDAsMHxlLDB8aCksaD1ELGFyWyh3PWwpPj4yXT1lLGFyW3crND4+Ml09aCx3PTEsbT01MDY2NixFPTY2O2JyZWFrIGV9dz0wIT0oMjA0OSZ5fDApJjEsbT0wPT0oMjA0OCZ5fDApPzA9PSgxJnl8MCk/NTA2NjY6NTA2Njg6NTA2NjcsRT02NjticmVhayBlO2Nhc2UgMTE3Om09NTA2NjYsZT0odz0wKXxhclsoaD1sKT4+Ml0saD0wfGFyW2grND4+Ml0sRT02NjticmVhaztjYXNlIDk5OnRyW1g+PjBdPWFyW2w+PjJdLGU9WCx3PTAsbT01MDY2NixnPXQsaD0xLGs9WjticmVhaztjYXNlIDEwOTpoPTB8SGMoMHxhclsoaD0xMDM2NCk+PjJdKSxFPTcxO2JyZWFrO2Nhc2UgMTE1Omg9MHwoaD0wfGFyW2w+PjJdKT9oOjUwNjc2LEU9NzE7YnJlYWs7Y2FzZSA2Nzphclt1Pj4yXT1hcltsPj4yXSxhclthPj4yXT0wLGc9LTEsaD1hcltsPj4yXT11LEU9NzU7YnJlYWs7Y2FzZSA4MzplPTB8YXJbbD4+Ml0sRT1rPyhnPWssaD1lLDc1KTooeGMoQSwzMixkLDAseSksZT0wLDg0KTticmVhaztjYXNlIDY1OmNhc2UgNzE6Y2FzZSA3MDpjYXNlIDY5OmNhc2UgOTc6Y2FzZSAxMDM6Y2FzZSAxMDI6Y2FzZSAxMDE6ZD0wfExjKEEsK1FbbD4+M10sZCxrLHksaCksZT1CO2NvbnRpbnVlIEE7ZGVmYXVsdDp3PTAsbT01MDY2NixnPXQsaD1rLGs9eX19d2hpbGUoMCk7ZTpkb3tpZig2MT09KDB8RSkpZz0wfE9jKHA9MHxhclsoeT1sKT4+Ml0seT0wfGFyW3krND4+Ml0sdCwzMiZoKSx3PShtPTA9PSg4JmV8MCl8MD09KDB8cCkmMD09KDB8eSkpPzA6MixtPW0/NTA2NjY6NTA2NjYrKGg+PjQpfDAsWj1lLGU9cCxoPXksRT02NztlbHNlIGlmKDY2PT0oMHxFKSlnPTB8amMoZSxoLHQpLFo9eSxFPTY3O2Vsc2UgaWYoNzE9PSgwfEUpKXc9RT0wLG09NTA2NjYsZz0ocD0wPT0oMHwoeT0wfFJjKGU9aCwwLGspKSkpP2gra3wwOnksaD1wP2s6eS1ofDAsaz1aO2Vsc2UgaWYoNzU9PSgwfEUpKXtmb3IobT1oLGs9ZT1FPTA7KHc9MHxhclttPj4yXSkmJiEoKDB8KGs9MHxQYyhXLHcpKSk8MHwoZy1lfDApPj4+MDxrPj4+MCkmJihlPWsrZXwwKT4+PjA8Zz4+PjA7KW09bSs0fDA7aWYoKDB8ayk8MCl7cz0tMTticmVhayBBfWlmKHhjKEEsMzIsZCxlLHkpLGUpZm9yKHc9MDs7KXtpZighKGs9MHxhcltoPj4yXSkpe0U9ODQ7YnJlYWsgZX1pZigoMHxlKTwoMHwodz0oaz0wfFBjKFcsaykpK3d8MCkpKXtFPTg0O2JyZWFrIGV9aWYoVGMoQSxXLGspLGU+Pj4wPD13Pj4+MCl7RT04NDticmVha31oPWgrNHwwfWVsc2UgZT0wLEU9ODR9fXdoaWxlKDApO2lmKDY3PT0oMHxFKSl5PShFPTApIT0oMHxrKXwoaD0wIT0oMHxlKXwwIT0oMHxoKSksaD1vLWcrKDEmKDFeaCkpfDAsZT15P2c6dCxnPXQsaD0heXx8KDB8aCk8KDB8ayk/azpoLGs9LTE8KDB8ayk/LTY1NTM3Jlo6WjtlbHNlIGlmKDg0PT0oMHxFKSl7RT0wLHhjKEEsMzIsZCxlLDgxOTJeeSksZD0oMHxlKTwoMHxkKT9kOmUsZT1CO2NvbnRpbnVlfXhjKEEsMzIsZD0oMHxkKTwoMHwoeT0oWj0oMHxoKTwoMHwocD1nLWV8MCkpP3A6aCkrd3wwKSk/eTpkLHksayksVGMoQSxtLHcpLHhjKEEsNDgsZCx5LDY1NTM2XmspLHhjKEEsNDgsWixwLDApLFRjKEEsZSxwKSx4YyhBLDMyLGQseSw4MTkyXmspLGU9Qn1lbHNlIGQ9MCxlPUJ9fUE6ZG97aWYoODc9PSgwfEUpJiYhQSlpZih2KXtmb3Iocz0xO2U9MHxhcltmKyhzPDwyKT4+Ml07KWlmKFNjKGkrKHM8PDMpfDAsZSxyKSwxMDw9KDB8KHM9cysxfDApKSl7cz0xO2JyZWFrIEF9Zm9yKDs7KXtpZigwfGFyW2YrKHM8PDIpPj4yXSl7cz0tMTticmVhayBBfWlmKDEwPD0oMHwocz1zKzF8MCkpKXtzPTE7YnJlYWt9fX1lbHNlIHM9MH13aGlsZSgwKTtyZXR1cm4gdXI9YiwwfHN9ZnVuY3Rpb24gSmMoKXtyZXR1cm4gMH1mdW5jdGlvbiBNYygpezB9ZnVuY3Rpb24gVGMoQSxlLHIpe2V8PTAscnw9MCwzMiZhclsoQXw9MCk+PjJdfHxlbChlLHIsQSl9ZnVuY3Rpb24gVWMoQSl7dmFyIGU9MCxyPTAsaT0wO2lmKHI9MHxhclsoQXw9MCk+PjJdLChpPSgwfHRyW3I+PjBdKS00OHwwKT4+PjA8MTApZm9yKGU9MDtlPWkrKDEwKmV8MCl8MCxyPXIrMXwwLGFyW0E+PjJdPXIsKGk9KDB8dHJbcj4+MF0pLTQ4fDApPj4+MDwxMDspO2Vsc2UgZT0wO3JldHVybiAwfGV9ZnVuY3Rpb24gU2MoQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MDtBOmRve2lmKGU+Pj4wPD0yMCl7c3dpdGNoKDB8ZSl7Y2FzZSA5Omk9MysoMHxhcltyPj4yXSkmLTQsZT0wfGFyW2k+PjJdLGFyW3I+PjJdPWkrNCxhcltBPj4yXT1lO2JyZWFrIEE7Y2FzZSAxMDppPTMrKDB8YXJbcj4+Ml0pJi00LGU9MHxhcltpPj4yXSxhcltyPj4yXT1pKzQsYXJbKGk9QSk+PjJdPWUsYXJbaSs0Pj4yXT0oKDB8ZSk8MCk8PDMxPj4zMTticmVhayBBO2Nhc2UgMTE6aT0zKygwfGFyW3I+PjJdKSYtNCxlPTB8YXJbaT4+Ml0sYXJbcj4+Ml09aSs0LGFyWyhpPUEpPj4yXT1lLGFyW2krND4+Ml09MDticmVhayBBO2Nhc2UgMTI6aT03KygwfGFyW3I+PjJdKSYtOCxmPTB8YXJbKGU9aSk+PjJdLGU9MHxhcltlKzQ+PjJdLGFyW3I+PjJdPWkrOCxhclsoaT1BKT4+Ml09ZixhcltpKzQ+PjJdPWU7YnJlYWsgQTtjYXNlIDEzOmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxpPSg2NTUzNSZpKTw8MTY+PjE2LGFyWyhmPUEpPj4yXT1pLGFyW2YrND4+Ml09KCgwfGkpPDApPDwzMT4+MzE7YnJlYWsgQTtjYXNlIDE0OmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxhclsoZj1BKT4+Ml09NjU1MzUmaSxhcltmKzQ+PjJdPTA7YnJlYWsgQTtjYXNlIDE1OmY9MysoMHxhcltyPj4yXSkmLTQsaT0wfGFyW2Y+PjJdLGFyW3I+PjJdPWYrNCxpPSgyNTUmaSk8PDI0Pj4yNCxhclsoZj1BKT4+Ml09aSxhcltmKzQ+PjJdPSgoMHxpKTwwKTw8MzE+PjMxO2JyZWFrIEE7Y2FzZSAxNjpmPTMrKDB8YXJbcj4+Ml0pJi00LGk9MHxhcltmPj4yXSxhcltyPj4yXT1mKzQsYXJbKGY9QSk+PjJdPTI1NSZpLGFyW2YrND4+Ml09MDticmVhayBBO2Nhc2UgMTc6Y2FzZSAxODpmPTcrKDB8YXJbcj4+Ml0pJi04LG49K1FbZj4+M10sYXJbcj4+Ml09Zis4LFFbQT4+M109bjticmVhayBBO2RlZmF1bHQ6YnJlYWsgQX19fXdoaWxlKDApfWZ1bmN0aW9uIE9jKEEsZSxyLGkpe2lmKHJ8PTAsaXw9MCwhKDA9PSgwfChBfD0wKSkmMD09KDB8KGV8PTApKSkpZm9yKDt0clsocj1yKy0xfDApPj4wXT0wfGNyWzUwNzE0KygxNSZBKT4+MF18aSwhKDA9PSgwfChBPTB8c2IoMHxBLDB8ZSw0KSkpJjA9PSgwfChlPUQpKSk7KTtyZXR1cm4gMHxyfWZ1bmN0aW9uIHpjKEEsZSxyKXtpZihyfD0wLCEoMD09KDB8KEF8PTApKSYwPT0oMHwoZXw9MCkpKSlmb3IoO3RyWyhyPXIrLTF8MCk+PjBdPTcmQXw0OCwhKDA9PSgwfChBPTB8c2IoMHxBLDB8ZSwzKSkpJjA9PSgwfChlPUQpKSk7KTtyZXR1cm4gMHxyfWZ1bmN0aW9uIGpjKEEsZSxyKXtyfD0wO3ZhciBpPTA7aWYoMDwoZXw9MCk+Pj4wfDA9PSgwfGUpJjQyOTQ5NjcyOTU8KEF8PTApPj4+MCl7Zm9yKDtpPTB8dWIoMHxBLDB8ZSwxMCwwKSx0clsocj1yKy0xfDApPj4wXT0yNTUmaXw0OCxBPTB8bGIoMHwoaT1BKSwwfGUsMTAsMCksOTxlPj4+MHw5PT0oMHxlKSY0Mjk0OTY3Mjk1PGk+Pj4wOyllPUQ7ZT1BfWVsc2UgZT1BO2lmKGUpZm9yKDt0clsocj1yKy0xfDApPj4wXT0oZT4+PjApJTEwfDQ4LCEoZT4+PjA8MTApOyllPShlPj4+MCkvMTB8MDtyZXR1cm4gMHxyfWZ1bmN0aW9uIEhjKEEpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByPTAsaT0wO2k9MDtmb3IoOzspe2lmKCgwfGNyWzUwNzMyK2k+PjBdKT09KDB8QSkpe0E9MjticmVha31pZig4Nz09KDB8KHI9aSsxfDApKSl7cj01MDgyMCxpPTg3LEE9NTticmVha31pPXJ9Mj09KDB8QSkmJihpPyhyPTUwODIwLEE9NSk6cj01MDgyMCk7aWYoNT09KDB8QSkpZm9yKDs7KXtmb3IoO3I9KEE9cikrMXwwLDAhPSgwfHRyW0E+PjBdKTspO2lmKCEoaT1pKy0xfDApKWJyZWFrO0E9NX1yZXR1cm4gMHxmdW5jdGlvbihBLGUpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSl7QXw9MCxlPShlfD0wKT8wfGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aT0xNzk0ODk1MTM4KygwfGFyWyhBfD0wKT4+Ml0pfDAsdD0wfEFsKDB8YXJbQSs4Pj4yXSxpKSxmPTB8QWwoMHxhcltBKzEyPj4yXSxpKSxuPTB8QWwoMHxhcltBKzE2Pj4yXSxpKTtBOmRve2lmKHQ+Pj4wPGU+Pj4yPj4+MCYmKGI9ZS0odDw8Mil8MCxmPj4+MDxiPj4+MCZuPj4+MDxiPj4+MCkmJjA9PSgzJihufGYpfDApKXtmb3IoYj1mPj4+Mix1PW4+Pj4yLGw9MDs7KXtpZihmPTB8QWwoMHxhcltBKygobj0obz0oYz1sKyhhPXQ+Pj4xKXwwKTw8MSkrYnwwKTw8Mik+PjJdLGkpLCEoKG49MHxBbCgwfGFyW0ErKG4rMTw8Mik+PjJdLGkpKT4+PjA8ZT4+PjAmZj4+PjA8KGUtbnwwKT4+PjApKXtmPTA7YnJlYWsgQX1pZigwfHRyW0ErKG4rZik+PjBdKXtmPTA7YnJlYWsgQX1pZighKGY9MHxGYyhyLEErbnwwKSkpYnJlYWs7aWYoZj0oMHxmKTwwLDE9PSgwfHQpKXtmPTA7YnJlYWsgQX1sPWY/bDpjLHQ9Zj9hOnQtYXwwfW49MHxBbCgwfGFyW0ErKChmPW8rdXwwKTw8Mik+PjJdLGkpLGY9KGY9MHxBbCgwfGFyW0ErKGYrMTw8Mik+PjJdLGkpKT4+PjA8ZT4+PjAmbj4+PjA8KGUtZnwwKT4+PjAmJjA9PSgwfHRyW0ErKGYrbik+PjBdKT9BK2Z8MDowfWVsc2UgZj0wfXdoaWxlKDApO3JldHVybiAwfGZ9KDB8YXJbZT4+Ml0sMHxhcltlKzQ+PjJdLEEpOjA7cmV0dXJuIDB8KDB8ZT9lOkEpfShBfD0wLGV8PTApfShyLDB8YXJbZSsyMD4+Ml0pfShBfD0wLDB8YXJbMjYyMl0pfWZ1bmN0aW9uIHhjKEEsZSxyLGksZil7QXw9MCxlfD0wO3ZhciBuLHQ7aWYobj11cj0odD11cikrMzEmLTMyLHVyPXVyKzI1NnwwLCgwfChpfD0wKSk8KDB8KHJ8PTApKSYwPT0oNzM3MjgmKGZ8PTApfDApKXtpZih2YigwfG4sMHxlLDB8KChmPXItaXwwKT4+PjA8MjU2P2Y6MjU2KSksMjU1PGY+Pj4wKXtmb3IoZT1yLWl8MDtUYyhBLG4sMjU2KSwyNTU8KGY9ZistMjU2fDApPj4+MDspO2Y9MjU1JmV9VGMoQSxuLGYpfXVyPXR9ZnVuY3Rpb24gUGMoQSxlKXtyZXR1cm4gZXw9MCwwfChBPShBfD0wKT8wfCRjKEEsZSk6MCl9ZnVuY3Rpb24gTGMoQSxlLHIsaSxmLG4pe0F8PTAsZT0rZSxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtsPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrNTYwfDAsYz1sKzh8MCxXPUk9KHc9bCkrNTI0fDAsWD0obD1sKzUxMnwwKSsxMnwoYXJbdz4+Ml09MCksS2MoZSkseT0oMHxEKTwwPyhlPS1lLEI9MSw1MDY4Myk6KEI9MCE9KDIwNDkmZnwwKSYxLDA9PSgyMDQ4JmZ8MCk/MD09KDEmZnwwKT81MDY4NDo1MDY4OTo1MDY4NiksS2MoZSksRT0yMTQ2NDM1MDcyJkQ7ZG97aWYoRT4+PjA8MjE0NjQzNTA3MnwyMTQ2NDM1MDcyPT0oMHxFKSYhMSl7aWYoKG89MCE9KGQ9MipxYyhlLHcpKSkmJihhclt3Pj4yXT0oMHxhclt3Pj4yXSktMSksOTc9PSgwfChtPTMyfG4pKSl7cz0wPT0oMHwoaz0zMiZuKSk/eTp5Kzl8MCxiPTJ8QixvPTEyLWl8MDtkb3tpZighKDExPGk+Pj4wfDA9PSgwfG8pKSl7Zm9yKGU9ODtlKj0xNiwwIT0oMHwobz1vKy0xfDApKTspO2lmKDQ1PT0oMHx0cltzPj4wXSkpe2U9LShlKygtZC1lKSk7YnJlYWt9ZT1kK2UtZTticmVha31lPWR9d2hpbGUoMCk7Zm9yKCgwfChvPTB8amMobz0oMHwoYT0wfGFyW3c+PjJdKSk8MD8wLWF8MDphLCgoMHxvKTwwKTw8MzE+PjMxLFgpKSk9PSgwfFgpJiYodHJbKG89bCsxMXwwKT4+MF09NDgpLHRyW28rLTE+PjBdPTQzKyhhPj4zMSYyKSx0clsodT1vKy0yfDApPj4wXT1uKzE1LGw9KDB8aSk8MSxjPTA9PSg4JmZ8MCksbz1JO0U9fn5lLGE9bysxfDAsdHJbbz4+MF09Y3JbNTA3MTQrRT4+MF18ayxlPTE2KihlLSgwfEUpKSxvPTEhPShhLVd8MCl8fGMmbCYwPT1lP2E6KHRyW2E+PjBdPTQ2LG8rMnwwKSwwIT1lOyk7RT1vLVd8MCx4YyhBLDMyLHIsbz0oVz1YLXV8MCkrYisoWD0wIT0oMHxpKSYoRSstMnwwKTwoMHxpKT9pKzJ8MDpFKXwwLGYpLFRjKEEscyxiKSx4YyhBLDQ4LHIsbyw2NTUzNl5mKSxUYyhBLEksRSkseGMoQSw0OCxYLUV8MCwwLDApLFRjKEEsdSxXKSx4YyhBLDMyLHIsbyw4MTkyXmYpO2JyZWFrfWZvcihhPSgwfGkpPDA/NjppLG8/KG89KDB8YXJbdz4+Ml0pLTI4fDAsYXJbdz4+Ml09byxlPTI2ODQzNTQ1NipkKTooZT1kLG89MHxhclt3Pj4yXSksYz1FPSgwfG8pPDA/YzpjKzI4OHwwO1o9fn5lPj4+MCxhcltjPj4yXT1aLGM9Yys0fDAsMCE9KGU9MWU5KihlLShaPj4+MCkpKTspO2lmKDA8KDB8bykpZm9yKGw9RSxiPWM7Oyl7aWYodT0oMHxvKTwyOT9vOjI5LGw+Pj4wPD0obz1iKy00fDApPj4+MCl7Zm9yKGM9MDt2PTB8dWIoMHwoZz0wfHRiKDB8KGc9MHxkYigwfGFyW28+PjJdLDAsMHx1KSksMHxELDB8YywwKSksMHwoWj1EKSwxZTksMCksYXJbbz4+Ml09dixjPTB8bGIoMHxnLDB8WiwxZTksMCksbD4+PjA8PShvPW8rLTR8MCk+Pj4wOyk7YyYmKGFyWyhsPWwrLTR8MCk+PjJdPWMpfWZvcihjPWI7IShjPj4+MDw9bD4+PjB8fDB8YXJbKG89YystNHwwKT4+Ml0pOyljPW87aWYobz0oMHxhclt3Pj4yXSktdXwwLCEoMDwoMHwoYXJbdz4+Ml09bykpKSlicmVhaztiPWN9ZWxzZSBsPUU7aWYoKDB8byk8MCl7aT0xKygoYSsyNXwwKS85fDApfDAsaD0xMDI9PSgwfG0pO2Rve2lmKGs9KDB8KGs9MC1vfDApKTw5P2s6OSxsPj4+MDxjPj4+MCl7Zm9yKHU9KDE8PGspLTF8MCxiPTFlOT4+Pmsscz0wLG89bDtaPTB8YXJbbz4+Ml0sYXJbbz4+Ml09KFo+Pj5rKStzLHM9MHxicihaJnUsYiksKG89bys0fDApPj4+MDxjPj4+MDspO289MD09KDB8YXJbbD4+Ml0pP2wrNHwwOmwsbz1zPyhhcltjPj4yXT1zLGw9byxjKzR8MCk6KGw9byxjKX1lbHNlIGw9MD09KDB8YXJbbD4+Ml0pP2wrNHwwOmwsbz1jO2M9KDB8aSk8KG8tKGM9aD9FOmwpPj4yfDApP2MrKGk8PDIpfDA6byxvPSgwfGFyW3c+PjJdKStrfDAsYXJbdz4+Ml09b313aGlsZSgoMHxvKTwwKTtvPWwsaT1jfWVsc2Ugbz1sLGk9YztpZihaPUUsbz4+PjA8aT4+PjApe2lmKGM9OSooWi1vPj4yKXwwLDEwPD0odT0wfGFyW28+PjJdKT4+PjApZm9yKGw9MTA7Yz1jKzF8MCwobD0xMCpsfDApPj4+MDw9dT4+PjA7KTt9ZWxzZSBjPTA7aWYoKDB8KGw9YS0oMTAyIT0oMHxtKT9jOjApKygoKHY9MCE9KDB8YSkpJihoPTEwMz09KDB8bSkpKTw8MzE+PjMxKXwwKSk8KCg5KihpLVo+PjIpfDApLTl8MCkpe2lmKGs9RSs0KygoKDB8KGw9bCs5MjE2fDApKS85fDApLTEwMjQ8PDIpfDAsKDB8KGw9MSsoKDB8bCklOXwwKXwwKSk8OSlmb3IodT0xMDt1PTEwKnV8MCw5IT0oMHwobD1sKzF8MCkpOyk7ZWxzZSB1PTEwO2lmKChsPShrKzR8MCk9PSgwfGkpKSYwPT0oMHwocz0oKGI9MHxhcltrPj4yXSk+Pj4wKSUodT4+PjApfDApKSlsPWs7ZWxzZSBpZihkPTA9PSgxJigoYj4+PjApLyh1Pj4+MCl8MCl8MCk/OTAwNzE5OTI1NDc0MDk5Mjo5MDA3MTk5MjU0NzQwOTk0LGU9cz4+PjA8KGc9KDB8dSkvMnwwKT4+PjA/LjU6bCYoMHxzKT09KDB8Zyk/MToxLjUsQiYmKGU9KGc9NDU9PSgwfHRyW3k+PjBdKSk/LWU6ZSxkPWc/LWQ6ZCksbD1iLXN8MCxhcltrPj4yXT1sLGQrZSE9ZCl7aWYoZz1sK3V8MCw5OTk5OTk5OTk8KGFyW2s+PjJdPWcpPj4+MClmb3IoYz1rOyhsPWMrLTR8MCk+Pj4oYXJbYz4+Ml09MCk8bz4+PjAmJihhclsobz1vKy00fDApPj4yXT0wKSxnPTErKDB8YXJbbD4+Ml0pfDAsOTk5OTk5OTk5PChhcltsPj4yXT1nKT4+PjA7KWM9bDtlbHNlIGw9aztpZihjPTkqKFotbz4+Mil8MCwxMDw9KGI9MHxhcltvPj4yXSk+Pj4wKWZvcih1PTEwO2M9YysxfDAsKHU9MTAqdXwwKT4+PjA8PWI+Pj4wOyk7fWVsc2UgbD1rO2w9KGw9bCs0fDApPj4+MDxpPj4+MD9sOmksZz1vfWVsc2UgbD1pLGc9bztmb3IobT1sOzspe2lmKG0+Pj4wPD1nPj4+MCl7dz0wO2JyZWFrfWlmKDB8YXJbKG89bSstNHwwKT4+Ml0pe3c9MTticmVha31tPW99aT0wLWN8MDtkb3tpZihoKXtpZihhPSgwfGMpPCgwfChvPSgxJigxXnYpKSthfDApKSYtNTwoMHxjKT8odT1uKy0xfDAsbystMS1jfDApOih1PW4rLTJ8MCxvKy0xfDApLCEobz04JmYpKXtpZih3JiYwIT0oMHwocD0wfGFyW20rLTQ+PjJdKSkpaWYoKHA+Pj4wKSUxMHwwKWw9MDtlbHNlIGZvcihsPTAsbz0xMDtsPWwrMXwwLCEoKHA+Pj4wKSUoKG89MTAqb3wwKT4+PjApfDApOyk7ZWxzZSBsPTk7aWYobz0oOSoobS1aPj4yKXwwKS05fDAsMTAyPT0oMzJ8dSkpe2E9KDB8YSk8KDB8KGs9MDwoMHwoaz1vLWx8MCkpP2s6MCkpP2E6ayxrPTA7YnJlYWt9YT0oMHxhKTwoMHwoaz0wPCgwfChrPW8rYy1sfDApKT9rOjApKT9hOmssaz0wO2JyZWFrfWs9b31lbHNlIHU9bixrPTgmZn13aGlsZSgwKTtpZihiPTAhPSgwfChoPWF8aykpJjEscz0xMDI9PSgzMnx1KSlvPSh2PTApPCgwfGMpP2M6MDtlbHNle2lmKCgobD1YKS0obz0wfGpjKG89KDB8Yyk8MD9pOmMsKCgwfG8pPDApPDwzMT4+MzEsWCkpfDApPDIpZm9yKDt0clsobz1vKy0xfDApPj4wXT00OCwobC1vfDApPDI7KTt0cltvKy0xPj4wXT00MysoYz4+MzEmMiksdHJbKG89bystMnwwKT4+MF09dSxvPWwtKHY9byl8MH1pZih4YyhBLDMyLHIsbz1CKzErYStiK298MCxmKSxUYyhBLHksQikseGMoQSw0OCxyLG8sNjU1MzZeZikscyl7Yj1rPUkrOXwwLHM9SSs4fDAsbD11PUU+Pj4wPGc+Pj4wP0U6Zztkb3tpZihjPTB8amMoMHxhcltsPj4yXSwwLGspLCgwfGwpPT0oMHx1KSkoMHxjKT09KDB8aykmJih0cltzPj4wXT00OCxjPXMpO2Vsc2UgaWYoST4+PjA8Yz4+PjApZm9yKHZiKDB8SSw0OCxjLVd8MCk7ST4+PjA8KGM9YystMXwwKT4+PjA7KTtUYyhBLGMsYi1jfDApLGw9bCs0fDB9d2hpbGUobD4+PjA8PUU+Pj4wKTtpZigwfGgmJlRjKEEsNTA3MzAsMSksbD4+PjA8bT4+PjAmMDwoMHxhKSlmb3IoOzspe2lmKEk+Pj4wPChjPTB8amMoMHxhcltsPj4yXSwwLGspKT4+PjApZm9yKHZiKDB8SSw0OCxjLVd8MCk7ST4+PjA8KGM9YystMXwwKT4+PjA7KTtpZihUYyhBLGMsKDB8YSk8OT9hOjkpLGM9YSstOXwwLCEoKGw9bCs0fDApPj4+MDxtPj4+MCY5PCgwfGEpKSl7YT1jO2JyZWFrfWE9Y314YyhBLDQ4LGErOXwwLDksMCl9ZWxzZXtpZihoPXc/bTpnKzR8MCwtMTwoMHxhKSl7az0wPT0oMHxrKSxpPXc9SSs5fDAsYj0wLVd8MCxzPUkrOHwwLHU9Zztkb3soMHwoYz0wfGpjKDB8YXJbdT4+Ml0sMCx3KSkpPT0oMHx3KSYmKHRyW3M+PjBdPTQ4LGM9cyk7ZG97aWYoKDB8dSk9PSgwfGcpKXtpZihsPWMrMXwwLFRjKEEsYywxKSxrJigwfGEpPDEpe2M9bDticmVha31UYyhBLDUwNzMwLDEpLGM9bH1lbHNle2lmKGM+Pj4wPD1JPj4+MClicmVhaztmb3IodmIoMHxJLDQ4LGMrYnwwKTtJPj4+MDwoYz1jKy0xfDApPj4+MDspO319d2hpbGUoMCk7VGMoQSxjLCgwfChXPWktY3wwKSk8KDB8YSk/VzphKSxhPWEtV3wwLHU9dSs0fDB9d2hpbGUodT4+PjA8aD4+PjAmLTE8KDB8YSkpfXhjKEEsNDgsYSsxOHwwLDE4LDApLFRjKEEsdixYLXZ8MCl9eGMoQSwzMixyLG8sODE5Ml5mKX1lbHNlIEk9MCE9KDMyJm58MCkseGMoQSwzMixyLG89QiszfDAsLTY1NTM3JmYpLFRjKEEseSxCKSxUYyhBLGUhPWV8ITE/ST81Mjg5OTo1MDcxMDpJPzUwNzAyOjUwNzA2LDMpLHhjKEEsMzIscixvLDgxOTJeZil9d2hpbGUoMCk7cmV0dXJuIHVyPXQsMHwoKDB8byk8KDB8cik/cjpvKX1mdW5jdGlvbiBLYyhBKXtBPStBO3ZhciBlO3JldHVybiBRW2Q+PjNdPUEsZT0wfGFyW2Q+PjJdLEQ9MHxhcltkKzQ+PjJdLDB8ZX1mdW5jdGlvbiBxYyhBLGUpe3JldHVybisgK2Z1bmN0aW9uIEEoZSxyKXtlPStlO3J8PTA7dmFyIGk9MCxmPTAsbj0wO1FbZD4+M109ZTtpPTB8YXJbZD4+Ml07Zj0wfGFyW2QrND4+Ml07bj0wfHNiKDB8aSwwfGYsNTIpO3N3aXRjaCgyMDQ3Jm4pe2Nhc2UgMDppPTAhPWU/KGU9K0EoMHgxMDAwMDAwMDAwMDAwMDAwMCplLHIpLCgwfGFyW3I+PjJdKS02NHwwKTowLGFyW3I+PjJdPWk7YnJlYWs7Y2FzZSAyMDQ3OmJyZWFrO2RlZmF1bHQ6YXJbcj4+Ml09KDIwNDcmbiktMTAyMixhcltkPj4yXT1pLGFyW2QrND4+Ml09LTIxNDY0MzUwNzMmZnwxMDcxNjQ0NjcyLGU9K1FbZD4+M119cmV0dXJuK2V9KEE9K0EsZXw9MCl9ZnVuY3Rpb24gJGMoQSxlKXtBfD0wLGV8PTA7ZG97aWYoQSl7aWYoZT4+PjA8MTI4KXt0cltBPj4wXT1lLEE9MTticmVha31pZighKDB8YXJbYXJbMTA0ODg+PjJdPj4yXSkpe2lmKDU3MjE2PT0oLTEyOCZlfDApKXt0cltBPj4wXT1lLEE9MTticmVha31hclsoQT0xMDM2NCk+PjJdPTg0LEE9LTE7YnJlYWt9aWYoZT4+PjA8MjA0OCl7dHJbQT4+MF09ZT4+PjZ8MTkyLHRyW0ErMT4+MF09NjMmZXwxMjgsQT0yO2JyZWFrfWlmKGU+Pj4wPDU1Mjk2fDU3MzQ0PT0oLTgxOTImZXwwKSl7dHJbQT4+MF09ZT4+PjEyfDIyNCx0cltBKzE+PjBdPWU+Pj42JjYzfDEyOCx0cltBKzI+PjBdPTYzJmV8MTI4LEE9MzticmVha31pZigoZSstNjU1MzZ8MCk+Pj4wPDEwNDg1NzYpe3RyW0E+PjBdPWU+Pj4xOHwyNDAsdHJbQSsxPj4wXT1lPj4+MTImNjN8MTI4LHRyW0ErMj4+MF09ZT4+PjYmNjN8MTI4LHRyW0ErMz4+MF09NjMmZXwxMjgsQT00O2JyZWFrfWFyWyhBPTEwMzY0KT4+Ml09ODQsQT0tMTticmVha31BPTF9d2hpbGUoMCk7cmV0dXJuIDB8QX1mdW5jdGlvbiBBbChBLGUpe3ZhciByO3JldHVybiByPTB8a2IoMHwoQXw9MCkpLDB8KDA9PSgwfChlfD0wKSk/QTpyKX1mdW5jdGlvbiBlbChBLGUscil7QXw9MCxlfD0wO3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wOyhmPTB8YXJbKGk9KHJ8PTApKzE2fDApPj4yXSk/bj01OjB8cmwocik/aT0wOihmPTB8YXJbaT4+Ml0sbj01KTtBOmRve2lmKDU9PSgwfG4pKXtpZigoZi0oaT10PTB8YXJbKG89cisyMHwwKT4+Ml0pfDApPj4+MDxlPj4+MCl7aT0wfHhiWzYzJmFyW3IrMzY+PjJdXShyLEEsZSk7YnJlYWt9ZTpkb3tpZigtMTwoMHx0cltyKzc1Pj4wXSkpe2Zvcih0PWU7Oyl7aWYoIXQpe249MCxmPUE7YnJlYWsgZX1pZigxMD09KDB8dHJbQSsoZj10Ky0xfDApPj4wXSkpYnJlYWs7dD1mfWlmKChpPTB8eGJbNjMmYXJbciszNj4+Ml1dKHIsQSx0KSk+Pj4wPHQ+Pj4wKWJyZWFrIEE7Zj1BKyhuPXQpfDAsZT1lLXR8MCxpPTB8YXJbbz4+Ml19ZWxzZSBuPTAsZj1BfXdoaWxlKDApO2hiKDB8aSwwfGYsMHxlKSxhcltvPj4yXT0oMHxhcltvPj4yXSkrZSxpPW4rZXwwfX13aGlsZSgwKTtyZXR1cm4gMHxpfWZ1bmN0aW9uIHJsKEEpe3ZhciBlPTAscj0wO3JldHVybiByPTB8dHJbKGU9KEF8PTApKzc0fDApPj4wXSx0cltlPj4wXT1yKzI1NXxyLDB8KEE9OCYoZT0wfGFyW0E+PjJdKT8oYXJbQT4+Ml09MzJ8ZSwtMSk6KGFyW0ErOD4+Ml09MCxyPShhcltBKzQ+PjJdPTApfGFyW0ErNDQ+PjJdLGFyW0ErMjg+PjJdPXIsYXJbQSsyMD4+Ml09cixhcltBKzE2Pj4yXT1yKygwfGFyW0ErNDg+PjJdKSwwKSl9ZnVuY3Rpb24gaWwoQSxlLHIpe3ZhciBpLGYsbjtyZXR1cm4gMHwoMHwoaT1BfD0wLGY9ZXw9MCxuPXJ8PTAsMHwobj0wfGZsKGl8PTAsZnw9MCxufD0wLC0xLC0xKSkpKX1mdW5jdGlvbiBmbChBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYTtyZXR1cm4gdD11cj0oYT11cikrMzEmLTMyLHVyPXVyKzEyOHwwLGFyW3Q+PjJdPTAsYXJbKG89NCt0fDApPj4yXT1BLGFyWzQ0K3Q+PjJdPUEsYXJbKG49OCt0fDApPj4yXT0oMHxBKTwwPy0xOkErMjE0NzQ4MzY0N3wwLGFyWzc2K3Q+PjJdPS0xLG5sKHQsMCkscj0wfHdpKHQsciwxLGksZiksMHxlJiYoYXJbZT4+Ml09QSsoKDB8YXJbbz4+Ml0pKygwfGFyWzEwOCt0Pj4yXSktKDB8YXJbbj4+Ml0pKSksdXI9YSwwfHJ9ZnVuY3Rpb24gbmwoQSxlKXtlfD0wO3ZhciByLGksZjthclsoQXw9MCkrMTA0Pj4yXT1lLGY9KHI9MHxhcltBKzg+PjJdKS0oaT0wfGFyW0ErND4+Ml0pfDAsYXJbQSsxMDg+PjJdPWYsYXJbQSsxMDA+PjJdPTAhPSgwfGUpJigwfGUpPCgwfGYpP2krZXwwOnJ9ZnVuY3Rpb24gdGwoQSl7c3dpdGNoKDB8KEF8PTApKXtjYXNlIDE1OmNhc2UgMTM6Y2FzZSAxMTpyZXR1cm4gMHwoQT0xKTtjYXNlIDE0OmNhc2UgMTI6Y2FzZSAxMDpjYXNlIDM6Y2FzZSAyOmNhc2UgMTpjYXNlIDA6Y2FzZSA5OTpyZXR1cm4oQT0wKXxBO2RlZmF1bHQ6c3IoNTU3MzksMjU1OTcsNDk1LDI1ODAyKX1yZXR1cm4gMH1mdW5jdGlvbiBvbChBLGUscixpKXtBfD0wLGV8PTAsaXw9MDt2YXIgZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2lmKCEocnw9MCkpcmV0dXJuIHQ9MHxhcltlPj4yXSwoZj0wfGFyW2UrND4+Ml0pfHwoQT0wfFgoNCksYXJbQT4+Ml09MTc1MzYsSSgwfEEsMzkyMCw0MjEpKSwobj0wfGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTA7cj0wfGFyWyhlPTQrKEF8PTApfDApPj4yXTtmb3IoOzspe2lmKC0xPT0oMHxyKSl7QT0wO2JyZWFrfWlmKCgwfChpPTB8YXJbZT4+Ml0pKT09KDB8cikmJihhcltlPj4yXT1yKzEpLCgwfGkpPT0oMHxyKSlicmVhaztyPWl9cmV0dXJuIDB8QX0oZikpfHwoQT0wfFgoNCksYXJbQT4+Ml09MTc1MzYsSSgwfEEsMzkyMCw0MjEpKSxhcltpPj4yXT10LGY9MHxhclsoZT1pKzR8MCk+PjJdLGFyW2U+PjJdPW4sMHxmJiZkdShmKSxaPTB8YXJbKGc9NTY1OTIpKzQ+PjJdLGFyWyhlPUEpPj4yXT1hcltnPj4yXSxhcltlKzQ+PjJdPVosdm9pZCB5dShBKzh8MCw1NjYwMCk7c3dpdGNoKGY9MHxhcltlKzI0Pj4yXSxuPTB8YXJbZSsyOD4+Ml0sZz05MD09KDB8ciksWj0yNzA9PSgwfHIpLDB8cil7Y2FzZSA5MDpjYXNlIDI3MDpsPW47YnJlYWs7ZGVmYXVsdDpsPWYsZj1ufW89MHxodSg4MCksYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxhcltvPj4yXT02MjA4LGFyWyhuPW8rMTJ8MCk+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxhcltuKzEyPj4yXT0wLGFyW24rMTY+PjJdPTAsYXJbbyszMj4+Ml09MzIyMTUsYXJbbyszNj4+Ml09MCxhcltvKzQwPj4yXT0wLGFyW28rNDQ+PjJdPTk5LGFyW28rNDg+PjJdPTk5LGM9bys1MnwwLGFyWyhhPW8rNzJ8MCk+PjJdPTAsYXJbbys3Nj4+Ml09MCxhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsYXJbYysxMj4+Ml09MCxhcltvKzY4Pj4yXT1hLGE9bixtPShjPW8pKzE2fDAsYnUobyksc3UobyksdD0wfGFyW20+PjJdLGFyW24+PjJdPWEsYXJbbT4+Ml09YywwfHQmJmt1KHQpLGR1KG8pLGFyW2k+PjJdPWEsdD0wfGFyWyhtPWkrNHwwKT4+Ml0sYXJbbT4+Ml09Yyx0PyhkdSh0KSxuPTB8YXJbKG09aSk+PjJdKTptPWksdj0wfGFyW2UrMzI+PjJdLHc9MHxhcltlKzM2Pj4yXSxhcltuKzI0Pj4yXT1sLGFyW24rMjg+PjJdPWYsYXJbbiszMj4+Ml09dixhcltuKzM2Pj4yXT13LGY9MHxhcltlKzU2Pj4yXSx3PWUrNjB8MDtBOmRve2lmKCgwfGYpIT0oMHx3KSlmb3Iodj0xODA9PSgwfHIpLGg9Zjs7KXtzd2l0Y2goYz0wfGFyW2grMTY+PjJdLGY9MHxhclsobz1oKzI0fDApPj4yXSxuPTB8YXJbKGE9aCsyOHwwKT4+Ml0sMHxyKXtjYXNlIDkwOmNhc2UgMjcwOnQ9ZixmPW47YnJlYWs7ZGVmYXVsdDp0PW59aWYobD1oKzIwfDAsQm8oMHxhclttPj4yXSxjLGYsdCwwfGNyW2w+PjBdKSxrPTB8YXJbbz4+Ml0sYj0wfGFyW2E+PjJdLHM9MHxhcltoKzQ4Pj4yXSxkPTB8YXJbaCs0MD4+Ml0sbz02MCsoMHxhclttPj4yXSl8MCxuPTB8YXJbbz4+Ml0pe2Y9bztlOmZvcig7Oyl7Zm9yKHQ9bjshKCgwfGFyW3QrMTY+PjJdKT49KDB8YykpOyl7aWYoIShuPTB8YXJbdCs0Pj4yXSkpYnJlYWsgZTt0PW59aWYoIShuPTB8YXJbdD4+Ml0pKXtmPXQ7YnJlYWt9Zj10fWk9KDB8ZikhPSgwfG8pJiYoMHxhcltmKzE2Pj4yXSk8PSgwfGMpPyh1PTB8YXJbZis0MD4+Ml0sMHxhcltmKzQ4Pj4yXSk6dT0wfWVsc2UgaT11PTA7Zj0wPCgwfGIpO2U6ZG97aWYoOD09KDB8dHJbbD4+MF0pKXtpZihaKXtpZighZilicmVhaztpZih0PWIrLTF8MCwhKDA8KDB8aykpKWJyZWFrO2ZvcihuPTA7Oyl7Zm9yKG89MHxicih0LW58MCxzKSxmPTA7bD11KygoMHxicihmLGkpKStuKXwwLHRyW2w+PjBdPTB8dHJbZCsoZitvKT4+MF0sKDB8KGY9ZisxfDApKSE9KDB8ayk7KTtpZigoMHwobj1uKzF8MCkpPT0oMHxiKSlicmVhayBlfX1pZih2KXtpZighZilicmVhaztpZih0PWIrLTF8MCxvPWsrLTF8MCwhKDA8KDB8aykpKWJyZWFrO249MDtkb3tmb3IoYT1vKygwfGJyKHQtbnwwLHMpKXwwLGM9MHxicihuLGkpLGY9MDt0clt1KyhmK2MpPj4wXT0wfHRyW2QrKGEtZik+PjBdLCgwfChmPWYrMXwwKSkhPSgwfGspOyk7bj1uKzF8MH13aGlsZSgoMHxuKSE9KDB8YikpfWVsc2V7aWYoIShnJmYpKWJyZWFrO2lmKHQ9aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7bj0wO2Rve2ZvcihvPXQrKDB8YnIobixzKSl8MCxmPTA7bD11KygoMHxicihmLGkpKStuKXwwLHRyW2w+PjBdPTB8dHJbZCsoby1mKT4+MF0sKDB8KGY9ZisxfDApKSE9KDB8ayk7KTtuPW4rMXwwfXdoaWxlKCgwfG4pIT0oMHxiKSl9fWVsc2V7aWYoWil7aWYoIWYpYnJlYWs7aWYodD1iKy0xfDAsISgwPCgwfGspKSlicmVhaztmb3Iobj0wOzspe2ZvcihvPTB8YnIodC1ufDAscyksYT1uPDwxLGY9MDtjPShmPDwxKStvfDAsbD0oMHxicihmLGkpKSthfDAsdHJbdStsPj4wXT0wfHRyW2QrYz4+MF0sdHJbdSsobCsxKT4+MF09MHx0cltkKyhjKzEpPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxrKTspO2lmKCgwfChuPW4rMXwwKSk9PSgwfGIpKWJyZWFrIGV9fWlmKHYpe2lmKCFmKWJyZWFrO2lmKHQ9YistMXwwLG89aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7bj0wO2Rve2ZvcihhPTB8YnIodC1ufDAscyksYz0wfGJyKG4saSksZj0wO3A9KG8tZjw8MSkrYXwwLHRyW3UrKGw9KGY8PDEpK2N8MCk+PjBdPTB8dHJbZCtwPj4wXSx0clt1KyhsKzEpPj4wXT0wfHRyW2QrKHArMSk+PjBdLCgwfChmPWYrMXwwKSkhPSgwfGspOyk7bj1uKzF8MH13aGlsZSgoMHxuKSE9KDB8YikpfWVsc2V7aWYoIShnJmYpKWJyZWFrO2lmKHQ9aystMXwwLCEoMDwoMHxrKSkpYnJlYWs7Zj0wO2Rve2ZvcihvPTB8YnIoZixzKSxhPWY8PDEsbj0wO2w9KHQtbjw8MSkrb3wwLHA9KDB8YnIobixpKSkrYXwwLHRyW3UrcD4+MF09MHx0cltkK2w+PjBdLHRyW3UrKHArMSk+PjBdPTB8dHJbZCsobCsxKT4+MF0sKDB8KG49bisxfDApKSE9KDB8ayk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxiKSl9fX13aGlsZSgwKTtpZihmPTB8YXJbaCs0Pj4yXSlmb3IoO249MHxhcltmPj4yXTspZj1uO2Vsc2UgaWYoZj0wfGFyWyhuPWgrOHwwKT4+Ml0sKDB8YXJbZj4+Ml0pIT0oMHxoKSlmb3IoO3A9MHxhcltuPj4yXSxmPTB8YXJbKG49cCs4fDApPj4yXSwoMHxhcltmPj4yXSkhPSgwfHApOyk7aWYoKDB8Zik9PSgwfHcpKWJyZWFrIEE7aD1mfX13aGlsZSgwKTtmPTB8YXJbbT4+Ml0sbj0wfGFyW2UrNDA+PjJdLChvPTA9PSgwfCh0PTB8YXJbZSs0ND4+Ml0pKSl8fChidSh0KSxidSh0KSksYXJbZis0MD4+Ml09bixmPTB8YXJbKHA9Zis0NHwwKT4+Ml0sYXJbcD4+Ml09dCwwfGYmJmR1KGYpLG98fGR1KHQpLGY9MHxhclttPj4yXSxuPTB8YXJbZSs0OD4+Ml0sKG89MD09KDB8KHQ9MHxhcltlKzUyPj4yXSkpKXx8KGJ1KHQpLGJ1KHQpKSxhcltmKzQ4Pj4yXT1uLGY9MHxhclsocD1mKzUyfDApPj4yXSxhcltwPj4yXT10LDB8ZiYmZHUoZiksb3x8ZHUodCksZT0wfGFyWyhaPTU2NTkyKSs0Pj4yXSxhclsocD1BKT4+Ml09YXJbWj4+Ml0sYXJbcCs0Pj4yXT1lLHl1KEErOHwwLDU2NjAwKX1mdW5jdGlvbiBhbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTA7dXI9KGY9dXIpKzE2fDAsdz1mLG49MHxhclsoZXw9MCkrNTY+PjJdLGk9ZSs2MHwwO0E6ZG97aWYoKDB8bikhPSgwfGkpKXtmb3IoOzg9PSgwfHRyW24rMjA+PjBdKTspe2lmKGM9MHxhcltuKzI0Pj4yXSxsPTB8YXJbbisyOD4+Ml0sYj0wfGFyW24rNDg+PjJdLHM9MHxhcltuKzQwPj4yXSxyKXtpZigwPCgwfGwpJiYoaz0oMHxjKS8yfDAsaD1jKy0xfDAsMTwoMHxjKSkpe3Q9MDtkb3tmb3IoYT1oKyhvPTB8YnIodCxiKSl8MCxlPTA7dT1zKyhhLWUpfDAsYz0wfHRyWyh2PXMrKGUrbyl8MCk+PjBdLHRyW3Y+PjBdPTB8dHJbdT4+MF0sdHJbdT4+MF09YywoMHwoZT1lKzF8MCkpPCgwfGspOyk7dD10KzF8MH13aGlsZSgoMHx0KSE9KDB8bCkpfX1lbHNlIGlmKHU9KDB8bCkvMnwwLDE8KDB8bCkmJihkPWwrLTF8MCwwPCgwfGMpKSl7ZT0wO2Rve2ZvcihvPTB8YnIoZSxiKSxhPTB8YnIoZC1lfDAsYiksdD0wO3Y9cysodCthKXwwLGw9MHx0clsobT1zKyh0K28pfDApPj4wXSx0clttPj4wXT0wfHRyW3Y+PjBdLHRyW3Y+PjBdPWwsKDB8KHQ9dCsxfDApKSE9KDB8Yyk7KTtlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHUpKX1pZihlPTB8YXJbbis0Pj4yXSlmb3IoO249MHxhcltlPj4yXTspZT1uO2Vsc2UgaWYoZT0wfGFyWyh0PW4rOHwwKT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxuKSlmb3Iobj10O209MHxhcltuPj4yXSxlPTB8YXJbKG49bSs4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfG0pOyk7aWYoKDB8ZSk9PSgwfGkpKWJyZWFrIEE7bj1lfWZvcihlPTB8aHUoNjQpLGFyW3c+PjJdPWUsYXJbdys4Pj4yXT0tMjE0NzQ4MzU4NCx0PTI1ODk4LG89KG49ZSkrKGFyW3crND4+Ml09NTQpfDA7dHJbbj4+MF09MHx0clt0Pj4wXSx0PXQrMXwwLCgwfChuPW4rMXwwKSk8KDB8byk7KTtyZXR1cm4ob28oQSw0LHRyW2UrNTQ+PjBdPTAsdyksMDw9KDB8dHJbdysxMT4+MF0pKT92b2lkKHVyPWYpOih2dSgwfGFyW3c+PjJdKSx2b2lkKHVyPWYpKX19d2hpbGUoMCk7dj0wfGFyWyh3PTU2NTkyKSs0Pj4yXSxhclsobT1BKT4+Ml09YXJbdz4+Ml0sYXJbbSs0Pj4yXT12LHl1KEErOHwwLDU2NjAwKSx1cj1mfWZ1bmN0aW9uIGNsKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MDtpZihsPTB8aHUoODApLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbD4+Ml09NjIwOCxhclsobz1sKzEyfDApPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbysxMj4+Ml09MCxhcltvKzE2Pj4yXT0wLGFyW2wrMzI+PjJdPTMyMjE1LGFyW2wrMzY+PjJdPTAsYXJbbCs0MD4+Ml09MCxhcltsKzQ0Pj4yXT05OSxhcltsKzQ4Pj4yXT05OSx1PWwrNTJ8MCxhclsoYz1sKzcyfDApPj4yXT0wLGFyW2wrNzY+PjJdPTAsYXJbdT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbbCs2OD4+Ml09YyxjPW8scD0odT1sKSsxNnwwLGJ1KGwpLHN1KGwpLGE9MHxhcltwPj4yXSxhcltvPj4yXT1jLGFyW3A+PjJdPXUsMHxhJiZrdShhKSxkdShsKSxhclt0Pj4yXT1jLGE9MHxhclsocD10KzR8MCk+PjJdLGFyW3A+PjJdPXUsYT8oZHUoYSksbz0wfGFyWyhwPXQpPj4yXSk6cD10LFo9MHxhcltlKzMyPj4yXSxtPTB8YXJbZSszNj4+Ml0sYXJbbysyND4+Ml09MS1yK2ksYXJbbysyOD4+Ml09MS1mK24sYXJbbyszMj4+Ml09WixhcltvKzM2Pj4yXT1tLCgwfChvPTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KG09ZSs2MHwwKSkpZm9yKGc9ZSsyNHwwLFo9ZSsyOHwwLHY9bzs7KXtpZih1PTB8YXJbdisxNj4+Ml0saD0wfGFyW3YrMjQ+PjJdLHQ9MHxhclt2KzI4Pj4yXSxiPSgwfChiPTB8YnIoaCxyKSkpLygwfChzPTB8YXJbZz4+Ml0pKXwwLHM9KDB8YnIoaCxpKSkvKDB8cyl8MCxoPSgwfChoPTB8YnIodCxmKSkpLygwfCh3PTB8YXJbWj4+Ml0pKXwwLHc9KDB8YnIodCxuKSkvKDB8dyl8MCxzPXMtYisxfDAsdD12KzIwfDAsQm8oMHxhcltwPj4yXSx1LHMsMS1oK3d8MCwwfGNyW3Q+PjBdKSxkPTB8YXJbdis0OD4+Ml0saz0wfGFyW3YrNDA+PjJdLGw9NjArKDB8YXJbcD4+Ml0pfDAsYT0wfGFyW2w+PjJdKXtvPWw7QTpmb3IoOzspe2ZvcihjPWE7ISgoMHxhcltjKzE2Pj4yXSk+PSgwfHUpKTspe2lmKCEoYT0wfGFyW2MrND4+Ml0pKWJyZWFrIEE7Yz1hfWlmKCEoYT0wfGFyW2M+PjJdKSl7bz1jO2JyZWFrfW89Y31sPSgwfG8pIT0oMHxsKSYmKDB8YXJbbysxNj4+Ml0pPD0oMHx1KT8odT0wfGFyW28rNDA+PjJdLDB8YXJbbys0OD4+Ml0pOnU9MH1lbHNlIGw9dT0wO2lmKG89KDB8dyk8KDB8aCksOD09KDB8dHJbdD4+MF0pKXtpZighbylmb3Iobz1oO2hiKHUrKDB8YnIoby1ofDAsbCkpfDAsaysoKDB8YnIobyxkKSkrYil8MCwwfHMpLCgwfG8pPCgwfHcpOylvPW8rMXwwfWVsc2UgaWYoIW8pZm9yKGM9Yjw8MSxhPXM8PDEsbz1oO2hiKHUrKDB8YnIoby1ofDAsbCkpfDAsaysoKDB8YnIobyxkKSkrYyl8MCwwfGEpLCgwfG8pPCgwfHcpOylvPW8rMXwwO2lmKG89MHxhclt2KzQ+PjJdKWZvcig7YT0wfGFyW28+PjJdOylvPWE7ZWxzZSBpZihvPTB8YXJbKGE9dis4fDApPj4yXSwoMHxhcltvPj4yXSkhPSgwfHYpKWZvcig7dj0wfGFyW2E+PjJdLG89MHxhclsoYT12Kzh8MCk+PjJdLCgwfGFyW28+PjJdKSE9KDB8dik7KTtpZigoMHxvKT09KDB8bSkpYnJlYWs7dj1vfWlmKG89MHxhcltwPj4yXSxhPTB8YXJbZSs0MD4+Ml0sKGw9MD09KDB8KGM9MHxhcltlKzQ0Pj4yXSkpKXx8KGJ1KGMpLGJ1KGMpKSxhcltvKzQwPj4yXT1hLG89MHxhclsobj1vKzQ0fDApPj4yXSxhcltuPj4yXT1jLDB8byYmZHUobyksbHx8ZHUoYyksbz0wfGFyW3A+PjJdLGE9MHxhcltlKzQ4Pj4yXSwobD0wPT0oMHwoYz0wfGFyW2UrNTI+PjJdKSkpfHwoYnUoYyksYnUoYykpLGFyW28rNDg+PjJdPWEsbz0wfGFyWyhlPW8rNTJ8MCk+PjJdLGFyW2U+PjJdPWMsMHxvJiZkdShvKSxsKXJldHVybiBpPTB8YXJbKGk9bj01NjU5Mik+PjJdLG49MHxhclsobj1uKzR8MCk+PjJdLGFyWyhmPWU9QSk+PjJdPWksYXJbKGU9ZSs0fDApPj4yXT1uLHZvaWQgeXUoQT1BKzh8MCw1NjYwMCk7ZHUoYyksaT0wfGFyWyhpPW49NTY1OTIpPj4yXSxuPTB8YXJbKG49bis0fDApPj4yXSxhclsoZj1lPUEpPj4yXT1pLGFyWyhlPWUrNHwwKT4+Ml09bix5dShBPUErOHwwLDU2NjAwKX1mdW5jdGlvbiBsbChBLGUscixpLGYsbil7QXw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wO3VyPSh1PXVyKSszMnwwLHM9dSsxMnwwLGs9dSxsPShlfD0wKSs2MHwwLGM9KDY1NTM1JihpfD0wKSk+Pj44JjI1NSxhPSg2NTUzNSYocnw9MCkpPj4+OCYyNTUsbz0oNjU1MzUmKGZ8PTApKT4+PjgmMjU1LHQ9KDY1NTM1JihufD0wKSk+Pj44JjI1NSxuPTYyMjg7QTpmb3IoOzspe2lmKGU9MHxhcltsPj4yXSxiPTB8YXJbbj4+Ml0sZSl7cj1sLGk9ZTtlOmZvcig7Oyl7Zm9yKGU9aTshKCgwfGFyW2UrMTY+PjJdKT49KDB8YikpOylpZighKGU9MHxhcltlKzQ+PjJdKSl7ZT1yO2JyZWFrIGV9aWYoIShpPTB8YXJbZT4+Ml0pKWJyZWFrO3I9ZX1pZigoMHxlKSE9KDB8bCkmJigwfGIpPj0oMHxhcltlKzE2Pj4yXSkpe2lmKDghPSgwfHRyW2UrMjA+PjBdKSl7ZD0xMzticmVha31zd2l0Y2gocj0wfGFyW2UrMjg+PjJdLGY9MHxhcltlKzQ4Pj4yXSxpPTB8YXJbZSs0MD4+Ml0sMHxiKXtjYXNlIDM6ZT1hO2JyZWFrO2Nhc2UgNDplPWM7YnJlYWs7Y2FzZSA1OmU9bzticmVhaztjYXNlIDY6ZT10O2JyZWFrO2RlZmF1bHQ6ZD0xOTticmVhayBBfXZiKDB8aSwwfGUsMHxicihmLHIpKX1lbHNlIGQ9OX1lbHNlIGQ9OTtpZig5PT0oMHxkKSYmNiE9KChkPTApfGIpKXtkPTEwO2JyZWFrfWlmKDYyNDQ9PSgwfChuPW4rNHwwKSkpe2Q9MjI7YnJlYWt9fWlmKDEwPT0oMHxkKSlyZXR1cm4gYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLG9vKEEsNSwyMDAyLHMpLDA8PSgwfHRyW3MrMTE+PjBdKXx8dnUoMHxhcltzPj4yXSksdm9pZCh1cj11KTtpZigxMz09KDB8ZCkpe2ZvcihlPTB8aHUoNjQpLGFyW2s+PjJdPWUsYXJbays4Pj4yXT0tMjE0NzQ4MzU4NCxyPTI1OTUzLGY9KGk9ZSkrKGFyW2srND4+Ml09NTIpfDA7dHJbaT4+MF09MHx0cltyPj4wXSxyPXIrMXwwLCgwfChpPWkrMXwwKSk8KDB8Zik7KTtyZXR1cm4ob28oQSw0LHRyW2UrNTI+PjBdPTAsayksMDw9KDB8dHJbaysxMT4+MF0pKT92b2lkKHVyPXUpOih2dSgwfGFyW2s+PjJdKSx2b2lkKHVyPXUpKX1pZigxOT09KDB8ZCkpc3IoNTU3MzksMjU1OTcsNzU2LDI2MDA2KTtlbHNlIGlmKDIyPT0oMHxkKSlyZXR1cm4gZD0wfGFyWyhzPTU2NTkyKSs0Pj4yXSxhclsoaz1BKT4+Ml09YXJbcz4+Ml0sYXJbays0Pj4yXT1kLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPXUpfWZ1bmN0aW9uIHVsKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShhPXVyKSs0OHwwLFc9YSsxMnwwLElvKG89KEk9YSkrMjR8MCwwfGFyWyhyfD0wKT4+Ml0pLGs9NjArKDB8YXJbcj4+Ml0pfDAscz0wPT0oMHwodT0wfGFyW2s+PjJdKSkpZD04O2Vsc2V7Yz1rLGI9dTtBOmZvcig7Oyl7Zm9yKGw9YjshKDY8PSgwfGFyW2wrMTY+PjJdKSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIEE7aWYoIShiPTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD02fHwoZD04KX1pZig4PT0oMHxkKSYmKGM9ayksdD0oMHxjKT09KDB8aykscylYPTA7ZWxzZXtjPWs7QTpmb3IoOzspe2ZvcihsPXU7ISg2PD0oMHxhcltsKzE2Pj4yXSkpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBBO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1YPSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD02PzB8YXJbYys0MD4+Ml06MH1jPTB8YXJbbz4+Ml0sbj00K298MDtBOmRve2lmKCgwfGMpIT0oMHxuKSl7RT1lKzYwfDAseT0oQj0oMHxpKTwwKT8wLWl8MDowLEI9Qj8wOmkscD0oMHxmKTwwPzAtZnwwOjAsWj1jO2U6Zm9yKDs7KXt2PTB8YXJbWisxNj4+Ml0saD0wfGFyW0U+PjJdO3I6ZG97aWYoMHxoKXtjPUUsdT1oO2k6Zm9yKDs7KXtmb3IobD11OyEoKDB8YXJbbCsxNj4+Ml0pPj0oMHx2KSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIGk7aWYoISh1PTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfWlmKCgwfGMpIT0oMHxFKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KSl7aWYoaz02MCsoMHxhcltyPj4yXSl8MCxiPTA9PSgwfChzPTB8YXJbaz4+Ml0pKSlnPW09MDtlbHNle2M9ayx1PXM7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9Zz0oMHxjKSE9KDB8aykmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/KG09MHxhcltjKzQwPj4yXSwwfGFyW2MrNDg+PjJdKTptPTB9Yz1FLHU9aDtpOmZvcig7Oyl7Zm9yKGw9dTshKCgwfGFyW2wrMTY+PjJdKT49KDB8dikpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBpO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1pZihlPSgwfGMpIT0oMHxFKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KT8odz0wfGFyW2MrNDg+PjJdLDB8YXJbYys0MD4+Ml0pOnc9MCxiKXtkPTU5O2JyZWFrIGV9Yz1rLHU9cztpOmZvcig7Oyl7Zm9yKGw9dTshKCgwfGFyW2wrMTY+PjJdKT49KDB8dikpOylpZighKGw9MHxhcltsKzQ+PjJdKSlicmVhayBpO2lmKCEodT0wfGFyW2w+PjJdKSl7Yz1sO2JyZWFrfWM9bH1pZihkPSgwfGMpIT0oMHxrKSYmKDB8YXJbYysxNj4+Ml0pPD0oMHx2KT8wfGFyW2MrMjQ+PjJdOi0xLGIpcz0tMTtlbHNle2M9ayx1PXM7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9cz0oMHxjKSE9KDB8aykmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/MHxhcltjKzI4Pj4yXTotMX1pZigoMHxkKTw9LTEpe2Q9NTk7YnJlYWsgZX1pZighKC0xPCgwfHMpKSl7ZD02MTticmVhayBlfWM9RSx1PWg7aTpmb3IoOzspe2ZvcihsPXU7ISgoMHxhcltsKzE2Pj4yXSk+PSgwfHYpKTspaWYoIShsPTB8YXJbbCs0Pj4yXSkpYnJlYWsgaTtpZighKHU9MHxhcltsPj4yXSkpe2M9bDticmVha31jPWx9Yj0oMHxjKSE9KDB8RSkmJigwfGFyW2MrMTY+PjJdKTw9KDB8dik/MHxhcltjKzI0Pj4yXTotMSxjPUUsdT1oO2k6Zm9yKDs7KXtmb3IobD11OyEoKDB8YXJbbCsxNj4+Ml0pPj0oMHx2KSk7KWlmKCEobD0wfGFyW2wrND4+Ml0pKWJyZWFrIGk7aWYoISh1PTB8YXJbbD4+Ml0pKXtjPWw7YnJlYWt9Yz1sfWlmKGM9KDB8YykhPSgwfEUpJiYoMHxhcltjKzE2Pj4yXSk8PSgwfHYpPzB8YXJbYysyOD4+Ml06LTEsKDB8Yik8PS0xKXtkPTc4O2JyZWFrIGV9aWYoKDB8Yyk8PS0xKXtkPTgwO2JyZWFrIGV9aWYoKChzPSgwfGMpPChzK2Z8MCk/Yy1mfDA6cyl8KGQ9KDB8Yik8KGQraXwwKT9iLWl8MDpkKXwwKTwwKXtkPTgyO2JyZWFrIGV9aWYoISgoMHx5KTwoMHxkKSYoMHxwKTwoMHxzKSkpe2Q9OTA7YnJlYWsgZX1pZihsPWUrQnwwLHU9bSt5fDAsYj1kLXl8MCx0KXtmb3IoYz1wOzspaWYoaGIobCsoMHxicihjK2Z8MCx3KSl8MCx1KygwfGJyKGMsZykpfDAsMHxiKSwoMHxzKTw9KDB8KGM9YysxfDApKSlicmVhayByfWVsc2UgbD1wO2Rve2Zvcih1PSgwfGJyKGwrZnwwLHcpKStCfDAsYj0oMHxicihsLGcpKSt5fDAsYz15O3Y9ZSsodStjKXwwLGs9MHxjcltYKyhoPWIrY3wwKT4+MF0saD0wfGJyKGssMHxjclttK2g+PjBdKSxoPTI1NSYoKCgoMHxicigwfGNyW3Y+PjBdLDI1NV5rKSkraHwwKT4+PjApLzI1NXwwKSx0clt2Pj4wXT1oLCgwfChjPWMrMXwwKSk8KDB8ZCk7KTtsPWwrMXwwfXdoaWxlKCgwfGwpPCgwfHMpKX19fXdoaWxlKDApO2lmKGM9MHxhcltaKzQ+PjJdKWZvcig7bD0wfGFyW2M+PjJdOyljPWw7ZWxzZSBpZihjPTB8YXJbKGw9Wis4fDApPj4yXSwoMHxhcltjPj4yXSkhPSgwfFopKWZvcig7Wj0wfGFyW2w+PjJdLGM9MHxhclsobD1aKzh8MCk+PjJdLCgwfGFyW2M+PjJdKSE9KDB8Wik7KTtpZigoMHxjKT09KDB8bikpYnJlYWsgQTtaPWN9aWYoNTk9PSgwfGQpKXNyKDI2MDIxLDI1NTk3LDc5NSwyNjAzMSk7ZWxzZSBpZig2MT09KDB8ZCkpc3IoMjYwMzksMjU1OTcsNzk2LDI2MDMxKTtlbHNlIGlmKDc4PT0oMHxkKSlzcigyNjA0OSwyNTU5Nyw4MDAsMjYwMzEpO2Vsc2UgaWYoODA9PSgwfGQpKXNyKDI2MDYwLDI1NTk3LDgwMSwyNjAzMSk7ZWxzZXtpZig4Mj09KDB8ZCkpe2ZvcihhcltXPj4yXT0wLGFyW1crND4+Ml09MCxjPShhcltXKzg+PjJdPTApfGh1KDY0KSxhcltXPj4yXT1jLGFyW1crOD4+Ml09LTIxNDc0ODM1ODQsdT0yNjA3MSxiPShsPWMpKyhhcltXKzQ+PjJdPTU0KXwwO3RyW2w+PjBdPTB8dHJbdT4+MF0sdT11KzF8MCwoMHwobD1sKzF8MCkpPCgwfGIpOyk7cmV0dXJuKHRyW2MrNTQ+PjBdPTAsb28oQSwyLDEyMixXKSwwPD0oMHx0cltXKzExPj4wXSkpPyhDbyhvLEE9MHxhcltuPj4yXSksdm9pZCh1cj1hKSk6KHZ1KDB8YXJbVz4+Ml0pLENvKG8sQT0wfGFyW24+PjJdKSx2b2lkKHVyPWEpKX1pZig5MD09KDB8ZCkpe2ZvcihhcltJPj4yXT0wLGFyW0krND4+Ml09MCxjPShhcltJKzg+PjJdPTApfGh1KDY0KSxhcltJPj4yXT1jLGFyW0krOD4+Ml09LTIxNDc0ODM1ODQsdT0yNjEyNixiPShsPWMpKyhhcltJKzQ+PjJdPTUwKXwwO3RyW2w+PjBdPTB8dHJbdT4+MF0sdT11KzF8MCwoMHwobD1sKzF8MCkpPCgwfGIpOyk7cmV0dXJuKHRyW2MrNTA+PjBdPTAsb28oQSwyLDEyMixJKSwwPD0oMHx0cltJKzExPj4wXSkpPyhDbyhvLEE9MHxhcltuPj4yXSksdm9pZCh1cj1hKSk6KHZ1KDB8YXJbST4+Ml0pLENvKG8sQT0wfGFyW24+PjJdKSx2b2lkKHVyPWEpKX19fX13aGlsZSgwKTtXPTB8YXJbKGY9NTY1OTIpKzQ+PjJdLGFyWyhJPUEpPj4yXT1hcltmPj4yXSxhcltJKzQ+PjJdPVcseXUoQSs4fDAsNTY2MDApLENvKG8sQT0wfGFyW24+PjJdKSx1cj1hfWZ1bmN0aW9uIGJsKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBfD0wKT4+Ml0sZT0wfHRBKDB8ZSksYXJbZj4+Ml09YXJbcj4+Ml0scj0wfGNBKDQxNDQsMHxmKSxhQSgwfEEsMHxlLDB8ciksaUEoMHxyKSxpQSgwfGUpLHVyPWl9ZnVuY3Rpb24gc2woQSxlKXtlfD0wO3ZhciByLGksZixuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09MCxhclsoZj1BKzR8MCk+PjJdPTAsKHI9KG49KChhcltBKzg+PjJdPTApfGFyWyhpPWUrNHwwKT4+Ml0pLSgwfGFyW2U+PjJdKXwwKT4+MykmJig1MzY4NzA5MTE8cj4+PjAmJnpsKCksdD0wfGh1KG4pLGFyW2Y+PjJdPXQsYXJbQT4+Ml09dCxhcltBKzg+PjJdPXQrKHI8PDMpLCgwfChuPTB8YXJbZT4+Ml0pKSE9KDB8KGU9MHxhcltpPj4yXSkpKSlmb3IoO2FyW3Q+PjJdPWFyW24+PjJdLEE9MHxhcltuKzQ+PjJdLDB8KGFyW3QrND4+Ml09QSkmJmJ1KEEpLG49bis4fDAsdD04KygwfGFyW2Y+PjJdKXwwLGFyW2Y+PjJdPXQsKDB8bikhPSgwfGUpOyk7fWZ1bmN0aW9uIGRsKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBfD0wKT4+Ml0sYXJbZj4+Ml09YXJbZT4+Ml0sZT0wfGNBKDQxNDQsMHxmKSxhcltmPj4yXT1hcltyPj4yXSxyPTB8Y0EoNDE1MiwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX1mdW5jdGlvbiBrbChBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2Y9MHxhclsodT0oQXw9MCkrNHwwKT4+Ml0sYz1uPTB8YXJbQT4+Ml0sNTM2ODcwOTExPCh0PTErKHI9Zi1uPj4zKXwwKT4+PjAmJnpsKCksbz0obD0oMHxhclsoaT1BKzh8MCk+PjJdKS1ufDApPj4yLG89bD4+Mz4+PjA8MjY4NDM1NDU1P28+Pj4wPHQ+Pj4wP3Q6bzo1MzY4NzA5MTE7ZG97aWYobyl7aWYoISg1MzY4NzA5MTE8bz4+PjApKXthPTB8aHUobzw8Myk7YnJlYWt9WnUodT0wfFgoOCksNDQ1MTkpLGFyW3U+PjJdPTE3NjYwLEkoMHx1LDQwMTYsNDI4KX1lbHNlIGE9MH13aGlsZSgwKTtpZihsPWErKG88PDMpfDAsYXJbKHQ9bj1hKyhyPDwzKXwwKT4+Ml09YXJbZT4+Ml0sbz0wfGFyW2UrND4+Ml0sbz0oYXJbYSsocjw8MykrND4+Ml09byk/KGJ1KG8pLGY9MHxhclt1Pj4yXSwwfGFyW0E+PjJdKTpjLGE9bis4fDAsKDB8ZikhPSgwfG8pKXtmb3IoO2Y9KGM9ZikrLTh8MCxhcltuKy04Pj4yXT1hcltmPj4yXSxjPWMrLTR8MCxhcltuKy00Pj4yXT1hcltjPj4yXSxhcltmPj4yXT0wLHQ9bj10Ky04fChhcltjPj4yXT0wKSwoMHxmKSE9KDB8byk7KTtvPTB8YXJbQT4+Ml0sZj0wfGFyW3U+PjJdfWlmKGFyW0E+PjJdPXQsYXJbdT4+Ml09YSxhcltpPj4yXT1sLCgwfGYpIT0oMHwodD1vKSkpZm9yKDtuPTB8YXJbZistND4+Ml0sZj1mKy04fDAsMHxuJiZkdShuKSwoMHxmKSE9KDB8dCk7KTtvJiZ2dShvKX1mdW5jdGlvbiBobChBKXt2YXIgZTsoQXw9MCkmJigwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX1mdW5jdGlvbiB3bChBLGUpe3ZhciByPTAsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aWYoKGV8PTApPj4+MDw9KGY9MHxhclsobz0oQXw9MCkrOHwwKT4+Ml0pLShyPTB8YXJbKGE9QSs0fDApPj4yXSk+PjM+Pj4wKWZvcig7YXJbKG89cik+PjJdPTAscj04KygoYXJbbys0Pj4yXT0wKXxhclthPj4yXSl8MCxhclthPj4yXT1yLDAhPSgwfChlPWUrLTF8MCkpOyk7ZWxzZXs1MzY4NzA5MTE8KHI9KG49ci0oaT0wfGFyW0E+PjJdKT4+MykrZXwwKT4+PjAmJnpsKCksdD0oZj1mLWl8MCk+PjIscj1mPj4zPj4+MDwyNjg0MzU0NTU/dD4+PjA8cj4+PjA/cjp0OjUzNjg3MDkxMTtkb3tpZihyKXtpZighKDUzNjg3MDkxMTxyPj4+MCkpe2k9MHxodShyPDwzKTticmVha31adShhPTB8WCg4KSw0NDUxOSksYXJbYT4+Ml09MTc2NjAsSSgwfGEsNDAxNiw0MjgpfWVsc2UgaT0wfXdoaWxlKDApO2Zvcih0PWkrKG48PDMpfDAsbj1pKyhyPDwzKXwwLGY9cj10O2FyWyhpPXIpPj4yXT0wLGY9cj1mKzh8KGFyW2krND4+Ml09MCksMCE9KDB8KGU9ZSstMXwwKSk7KTtlPTB8YXJbQT4+Ml0scj10KygwLSgoaT0oMHxhclthPj4yXSktZXwwKT4+Myk8PDMpfDAsMDwoMHxpKSYmaGIoMHxyLDB8ZSwwfGkpLGFyW0E+PjJdPXIsYXJbYT4+Ml09ZixhcltvPj4yXT1uLGUmJnZ1KGUpfX1mdW5jdGlvbiB2bChBLGUpe0F8PTAsKGV8PTApJiYodmwoQSwwfGFyW2U+PjJdKSx2bChBLDB8YXJbZSs0Pj4yXSksMHwoQT0wfGFyW2UrMjQ+PjJdKSYmZHUoQSksdnUoZSkpfWZ1bmN0aW9uIG1sKEEsZSl7cmV0dXJuIEF8PTAsKGV8PTApJiYobWwoQSwwfGFyW2U+PjJdKSxtbChBLDB8YXJbZSs0Pj4yXSksdm9pZCB2dShlKSl9ZnVuY3Rpb24gZ2woQSl7dmFyIGUscixpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KGY9dXIpKzE2fDAsZT1mLCgwfChuPTB8YXJbKHI9KEF8PTApKzI4fDApPj4yXSkpIT0oMHwoaT1BKzMyfDApKSlmb3Iocz1iPWUrNHwwLHU9bjs7KXtpZihhPTB8YXJbdSsyMD4+Ml0sKGw9MD09KDB8KGM9MHxhclt1KzI0Pj4yXSkpKXx8YnUoYyksc2woZSxhKzQ4fDApLG89MHxhcltlPj4yXSwoMHwobj0wfGFyW2I+PjJdKSk9PSgwfG8pKW49bztlbHNle2Zvcig7dD1uKy04fDAsYXJbYj4+Ml09dCwoMHwobj0obj0wfGFyW24rLTQ+PjJdKT8oZHUobiksMHxhcltiPj4yXSk6dCkpIT0oMHxvKTspO249MHxhcltlPj4yXX1pZigwfG4pe2lmKCgwfG8pIT0oMHxuKSl7Zm9yKDt0PW8rLTh8MCxhcltiPj4yXT10LChvPTB8YXJbbystND4+Ml0pJiYoZHUobyksdD0wfGFyW2I+PjJdKSwoMHx0KSE9KDB8bik7KW89dDtuPTB8YXJbZT4+Ml19dnUobil9aWYobj0oYXJbYSs2OD4+Ml09MCl8YXJbKG89YSs3MnwwKT4+Ml0sKGFyW28+PjJdPTApfG4mJmR1KG4pLG49KGFyW2ErODQ+PjJdPTApfGFyWyhvPWErODh8MCk+PjJdLChhcltvPj4yXT0wKXxuJiZkdShuKSxzbChlLGErMTcyfDApLG89MHxhcltlPj4yXSwoMHwobj0wfGFyW3M+PjJdKSk9PSgwfG8pKW49bztlbHNle2Zvcig7dD1uKy04fDAsYXJbcz4+Ml09dCwoMHwobj0obj0wfGFyW24rLTQ+PjJdKT8oZHUobiksMHxhcltzPj4yXSk6dCkpIT0oMHxvKTspO249MHxhcltlPj4yXX1pZigwfG4pe2lmKCgwfG8pIT0oMHxuKSl7Zm9yKDt0PW8rLTh8MCxhcltzPj4yXT10LChvPTB8YXJbbystND4+Ml0pJiYoZHUobyksdD0wfGFyW3M+PjJdKSwoMHx0KSE9KDB8bik7KW89dDtuPTB8YXJbZT4+Ml19dnUobil9aWYobHx8ZHUoYyksbj0wfGFyW3UrND4+Ml0pZm9yKDt0PTB8YXJbbj4+Ml07KW49dDtlbHNlIGlmKG49MHxhclsodD11Kzh8MCk+PjJdLCgwfGFyW24+PjJdKSE9KDB8dSkpZm9yKDt1PTB8YXJbdD4+Ml0sbj0wfGFyWyh0PXUrOHwwKT4+Ml0sKDB8YXJbbj4+Ml0pIT0oMHx1KTspO2lmKCgwfG4pPT0oMHxpKSlicmVhazt1PW59aWYoMHwobj0wfGFyW0ErNjQ+PjJdKSYmZHUobiksMHwobj0wfGFyW0ErNTY+PjJdKSYmZHUobiksMHwobj0wfGFyWyhhPUErNDB8MCk+PjJdKSl7aWYoKDB8KHQ9MHxhclsoYz1BKzQ0fDApPj4yXSkpIT0oMHxuKSl7Zm9yKDtvPXQrLTh8MCxhcltjPj4yXT1vLCgwfCh0PSh0PTB8YXJbdCstND4+Ml0pPyhkdSh0KSwwfGFyW2M+PjJdKTpvKSkhPSgwfG4pOyk7bj0wfGFyW2E+PjJdfXZ1KG4pfXZsKHIsMHxhcltpPj4yXSksbWwoQSsxNnwwLDB8YXJbQSsyMD4+Ml0pLHVyPSgwPD0oMHx0cltBKzExPj4wXSl8fHZ1KDB8YXJbQT4+Ml0pLGYpfWZ1bmN0aW9uIFpsKEEsZSl7QXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpZihyPTB8YXJbKGV8PTApPj4yXSl7bj0ocj0wfHF1KHIsNDE2LDQwMCwwKSk/KDB8KGY9aT0wfGFyW2UrND4+Ml0pJiZidShpKSxyPyhhcltBKzIwND4+Ml09cixyPTB8YXJbKG49QSsyMDh8MCk+PjJdLGFyW24+PjJdPWYsciYmZHUociksMCk6Zik6MCxyPTB8YXJbZT4+Ml07ZG97aWYoMHxyJiYwfCh0PTB8cXUociw0MTYsNDQwLDApKSl7aWYoaT10LDB8KGY9cj0wfGFyW2UrND4+Ml0pJiZidShyKSx0KXtpZihhcltBKzE5Nj4+Ml09aSxyPTB8YXJbKHQ9QSsyMDB8MCk+PjJdLGFyW3Q+PjJdPWYsIXIpYnJlYWs7ZHUocik7YnJlYWt9aWYoIXIpYnJlYWs7ZHUocik7YnJlYWt9fXdoaWxlKDApO24mJmR1KG4pfX1mdW5jdGlvbiBwbChBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSszMnwwLGFyWyhuPShpPW8pKzh8MCk+PjJdPTAsYXJbKHQ9NCtufDApPj4yXT0wLCgoYXJbOCtuPj4yXT0wKXwoYT0wfGFyWyhmPUErNDB8MCk+PjJdKSkhPSgwfChyPTB8YXJbQSs0ND4+Ml0pKSl7bD1pKzR8MCx1PTgrbnwwO2Rve2M9MHxhclthPj4yXSxhcltpPj4yXT1jLEE9MHxhclthKzQ+PjJdLEE9KGFyW2w+PjJdPUEpPyhidShBKSxjPTB8YXJbaT4+Ml0pOmM7ZG97aWYoKDB8QSkhPSgwfGFyW2U+PjJdKSl7aWYoKDB8KEE9MHxhclt0Pj4yXSkpPT0oMHxhclt1Pj4yXSkpe2tsKG4saSk7YnJlYWt9YXJbQT4+Ml09YyxjPTB8YXJbbD4+Ml0sKGFyW0ErND4+Ml09YykmJihidShjKSxBPTB8YXJbdD4+Ml0pLGFyW3Q+PjJdPUErOH19d2hpbGUoMCk7MHwoQT0wfGFyW2w+PjJdKSYmZHUoQSksYT1hKzh8MH13aGlsZSgoMHxhKSE9KDB8cikpfWlmKCgwfGYpIT0oMHxuKSYmZnVuY3Rpb24oQSxlLHIpe3ZhciBpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7aWYobz0ocnw9MCktKGV8PTApPj4zLGk9MHxhclsoYT04KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLG8+Pj4wPmktKGY9bik+PjM+Pj4wKXtpZihuKXtpZigoMHwoaT0wfGFyWyh0PUErNHwwKT4+Ml0pKT09KDB8ZikpaT1uO2Vsc2V7Zm9yKG49aTtpPW4rLTh8MCxhclt0Pj4yXT1pLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksaT0wfGFyW3Q+PjJdKSwoMHxpKSE9KDB8Zik7KW49aTtpPTB8YXJbQT4+Ml19dnUoaSksYXJbYT4+Ml09MCxhclt0Pj4yXT0wLGFyW0E+PjJdPTAsaT0wfWlmKDUzNjg3MDkxMTxvPj4+MCYmemwoKSxmPWk+PjIsNTM2ODcwOTExPChmPWk+PjM+Pj4wPDI2ODQzNTQ1NT9mPj4+MDxvPj4+MD9vOmY6NTM2ODcwOTExKT4+PjAmJnpsKCksaT0wfGh1KGY8PDMpLGFyWyhuPUErNHwwKT4+Ml09aSxhcltBPj4yXT1pLGFyW2E+PjJdPWkrKGY8PDMpLCgwfGUpPT0oMHxyKSlyZXR1cm47Zm9yKDthcltpPj4yXT1hcltlPj4yXSxmPTB8YXJbZSs0Pj4yXSwwfChhcltpKzQ+PjJdPWYpJiZidShmKSxlPWUrOHwwLGk9OCsoMHxhcltuPj4yXSl8MCxhcltuPj4yXT1pLCgwfGUpIT0oMHxyKTspO3JldHVybn1pZihpPSgwfGFyWyhhPUErNHwwKT4+Ml0pLW4+PjMsQT1pPj4+MDxvPj4+MCxpPWUrKGk8PDMpfDAsKDB8KG89QT9pOnIpKT09KDB8ZSkpZT1mO2Vsc2V7Zm9yKDtuPTB8YXJbZT4+Ml0sMHwodD0wfGFyW2UrND4+Ml0pJiZidSh0KSxhcltmPj4yXT1uLG49MHxhclsoYz1mKzR8MCk+PjJdLGFyW2M+PjJdPXQsMHxuJiZkdShuKSxmPWYrOHwwLCgwfChlPWUrOHwwKSkhPSgwfG8pOyk7ZT1mfWlmKCFBKXtpZigoMHwoaT0wfGFyW2E+PjJdKSk9PSgwfGUpKXJldHVybjtmb3IoO2Y9aSstOHwwLGFyW2E+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbYT4+Ml0pOmYpKSE9KDB8ZSk7KTtyZXR1cm59aWYoKDB8byk9PSgwfHIpKXJldHVybjtmPTB8YXJbYT4+Ml07Zm9yKDthcltmPj4yXT1hcltpPj4yXSxlPTB8YXJbaSs0Pj4yXSwwfChhcltmKzQ+PjJdPWUpJiZidShlKSxpPWkrOHwwLGY9OCsoMHxhclthPj4yXSl8MCxhclthPj4yXT1mLCgwfGkpIT0oMHxyKTspO30oZiwwfGFyW24+PjJdLDB8YXJbdD4+Ml0pLEE9MHxhcltuPj4yXSl7aWYoKDB8KGE9MHxhclt0Pj4yXSkpIT0oMHxBKSl7Zm9yKDtjPWErLTh8MCxhclt0Pj4yXT1jLCgwfChhPShhPTB8YXJbYSstND4+Ml0pPyhkdShhKSwwfGFyW3Q+PjJdKTpjKSkhPSgwfEEpOyk7QT0wfGFyW24+PjJdfXZ1KEEpLHVyPW99ZWxzZSB1cj1vfWZ1bmN0aW9uIHlsKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIEJsKEEsZSl7ZXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO3Q9MHxhclsoYj0oQXw9MCkrNHwwKT4+Ml0scj1vPTB8YXJbQT4+Ml0sNTM2ODcwOTExPChmPShsPXQtbz4+MykrMXwwKT4+PjAmJnpsKCksYT0odT0oMHxhclsoaT1BKzh8MCk+PjJdKS1vfDApPj4yLGE9dT4+Mz4+PjA8MjY4NDM1NDU1P2E+Pj4wPGY+Pj4wP2Y6YTo1MzY4NzA5MTE7ZG97aWYoYSl7aWYoISg1MzY4NzA5MTE8YT4+PjApKXtjPTB8aHUoYTw8Myk7YnJlYWt9WnUoYj0wfFgoOCksNDQ1MTkpLGFyW2I+PjJdPTE3NjYwLEkoMHxiLDQwMTYsNDI4KX1lbHNlIGM9MH13aGlsZSgwKTtpZih1PWMrKGE8PDMpfDAsYXJbKGY9bj1jKyhsPDwzKXwwKT4+Ml09YXJbZT4+Ml0sYT1lKzR8MCxhcltjKyhsPDwzKSs0Pj4yXT1hclthPj4yXSxhcltlPj4yXT0wLGE9bis4fChhclthPj4yXT0wKSwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstOHwwLGFyW24rLTg+PjJdPWFyW3Q+PjJdLGw9bCstNHwwLGFyW24rLTQ+PjJdPWFyW2w+PjJdLGFyW3Q+PjJdPTAsZj1uPWYrLTh8KGFyW2w+PjJdPTApLCgwfHQpIT0oMHxyKTspO289MHxhcltBPj4yXX1pZihhcltBPj4yXT1mLGY9MHxhcltiPj4yXSxhcltiPj4yXT1hLGFyW2k+PjJdPXUsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIEVsKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wO2lmKDB8KGU9MHxhclsoQXw9MCkrMjA4Pj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzIwMD4+Ml0pJiZkdShlKSwwfChlPTB8YXJbKG49QSsxODR8MCk+PjJdKSl7aWYoKDB8KHI9MHxhclsoZj1BKzE4OHwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbZj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltmPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltuPj4yXX12dShlKX1pZigwfChlPTB8YXJbKGY9QSsxNzJ8MCk+PjJdKSl7aWYoKDB8KHI9MHxhclsobj1BKzE3NnwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbbj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltuPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltmPj4yXX12dShlKX1pZigoMHx0clsoZT1BKzE2MHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLDB8KGU9MHxhcltBKzg4Pj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzcyPj4yXSkmJmR1KGUpLDB8KGU9MHxhclsoZj1BKzQ4fDApPj4yXSkpe2lmKCgwfChyPTB8YXJbKG49QSs1MnwwKT4+Ml0pKSE9KDB8ZSkpe2Zvcig7aT1yKy04fDAsYXJbbj4+Ml09aSwoMHwocj0ocj0wfGFyW3IrLTQ+PjJdKT8oZHUociksMHxhcltuPj4yXSk6aSkpIT0oMHxlKTspO2U9MHxhcltmPj4yXX12dShlKX0wPD0oMHx0cltBKzExPj4wXSl8fHZ1KDB8YXJbQT4+Ml0pfWZ1bmN0aW9uIFhsKEEsZSxyLGksZixuKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MDt1cj0oaz11cikrMjcyfDAscz1rKzk2fDAsQj1rKzIzNnwwLFU9ays3MnwwLFM9ays0OHwwLHQ9aysyNHwwLEk9aysyMjR8MCxDPShvPWspKzIwMHwwLEY9aysyMTJ8MCxHPWsrMTg4fDAsVz1rKzE3NnwwLFY9aysxNjh8MCxSPWsrMTUyfDAseT1rKzE0MHwwLGE9aysxMjh8MCxiPWsrMTE2fDAsaG8oZD1rKzI0OHwwLDB8YXJbKE49KGV8PTApKzYwfDApPj4yXSxyKSwoWj0wfGFyWyhjPWUrMzJ8MCk+PjJdKT8odj1jLGc9Wik6c3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2Mik7QTpmb3IoOzspe2ZvcihtPWc7ISgoMHxhclttKzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEobT0wfGFyW20rND4+Ml0pKWJyZWFrIEE7aWYoIShnPTB8YXJbbT4+Ml0pKXt2PW07YnJlYWt9dj1tfSgwfHYpPT0oMHxjKSYmc3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2MiksKDB8YXJbdisxNj4+Ml0pPj4+MD5yPj4+MD9zcigzMTM1NCwzMDIwMywxMDQ3LDMxMzYyKToodz1jLHA9Wik7QTpmb3IoOzspe2Zvcih2PXA7ISgoMHxhclt2KzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEodj0wfGFyW3YrND4+Ml0pKWJyZWFrIEE7aWYoIShwPTB8YXJbdj4+Ml0pKXt3PXY7YnJlYWt9dz12fSgwfHcpIT0oMHxjKSYmKDB8YXJbdysxNj4+Ml0pPj4+MDw9cj4+PjB8fCh3PWMpLHY9MHxhclt3KzIwPj4yXSwwfCh1PTB8YXJbdysyND4+Ml0pJiZidSh1KSwoRT12KXx8c3IoMzEzNTQsMzAyMDMsMTA0NywzMTM2MiksaD1zLGFyWyhofD0wKT4+Ml09MCxhcltoKzQ+PjJdPTAsYXJbaCs4Pj4yXT0wLGFyW2grMTI+PjJdPTAsdj0oYXJbaCsxNj4+Ml09MCl8dHJbKGw9MTErZHwwKT4+MF0sdz0wfGFyWyhtPTQrZHwwKT4+Ml0sTT00PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpPzB8WXUoZCwwLC0xLDMwMjk4LDQpPyh2PTB8dHJbbD4+MF0sdz0wfGFyW20+PjJdLDIyKToyNToyMjtBOmRve2lmKDIyPT0oMHxNKSl7aWYoND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKSl7aWYoISgwfFl1KGQsMCwtMSwzMDMxOCw0KSkpe009MjU7YnJlYWt9dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXX1kb3tpZig0PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpKXtpZigwfFl1KGQsMCwtMSwzMDMwMyw0KSl7dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXTticmVha31pZihhcltVPj4yXT0wLGFyWyhnPVUrNHwwKT4+Ml09MCxtbyhTLChhcltVKzg+PjJdPTApfGFyW04+PjJdLHIsVSksdz0wfGFyWyhtPVMpKzQ+PjJdLGFyWyh2PXMpPj4yXT1hclttPj4yXSxhclt2KzQ+PjJdPXcsdz1TKzh8MCwoMHx0clsobT0odj04K3N8MCkrMTF8MCk+PjBdKTwwPyh0clthclt2Pj4yXT4+MF09MCxhclsxMitzPj4yXT0wKToodHJbdj4+MF09MCx0clttPj4wXT0wKSxDdSh2LDApLGFyW3Y+PjJdPWFyW3c+PjJdLGFyW3YrND4+Ml09YXJbdys0Pj4yXSxhclt2Kzg+PjJdPWFyW3crOD4+Ml0sMHxhcltzPj4yXSl7Uz0wfGFyWyhpPXMpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltpPj4yXSxhclt3KzQ+PjJdPVMsYXJbKHc9QSs4fDApPj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLChhclt2Kzg+PjJdPTApfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKTticmVhayBBfWlmKFdsKFMsZSxyLGksVSksSj0wfGFyWyhEPVMpKzQ+PjJdLGFyWyh3PXMpPj4yXT1hcltEPj4yXSxhclt3KzQ+PjJdPUosdz1TKzh8MCwoMHx0clttPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbbT4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hclt3Pj4yXSxhclt2KzQ+PjJdPWFyW3crND4+Ml0sYXJbdis4Pj4yXT1hclt3Kzg+PjJdLDB8YXJbcz4+Ml0pe1M9MHxhclsoaT1zKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaT4+Ml0sYXJbdys0Pj4yXT1TLGFyWyh3PUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwodz0wfGFyW1U+PjJdKSYmKCgwfGFyW2c+PjJdKSE9KDB8dykmJihhcltnPj4yXT13KSx2dSh3KSk7YnJlYWsgQX0wfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKSxNPTE3ODticmVhayBBfX13aGlsZSgwKTtkb3tpZig0PT0oMHwodjw8MjQ+PjI0PDA/dzoyNTUmdikpKXtpZigwfFl1KGQsMCwtMSwzMDMwOCw0KSl7dj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXTticmVha31pZihJbChVLGUscixpKSx2PTB8YXJbKG09VSkrND4+Ml0sYXJbKHc9cyk+PjJdPWFyW20+PjJdLGFyW3crND4+Ml09dix2PVUrOHwwLCgwfHRyWyhtPSh3PTgrc3wwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW3c+PjJdPj4wXT0wLGFyWzEyK3M+PjJdPTApOih0clt3Pj4wXT0wLHRyW20+PjBdPTApLEN1KHcsMCksYXJbdz4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSwhKDB8YXJbcz4+Ml0pKXtNPTE3ODticmVhayBBfVU9MHxhclsoaT1zKSs0Pj4yXSxhclsoUz1BKT4+Ml09YXJbaT4+Ml0sYXJbUys0Pj4yXT1VLGFyWyhBPUErOHwwKT4+Ml09YXJbdz4+Ml0sYXJbQSs0Pj4yXT1hclt3KzQ+PjJdLGFyW0ErOD4+Ml09YXJbdys4Pj4yXSxhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTA7YnJlYWsgQX19d2hpbGUoMCk7aWYoND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKSYmMD09KDB8WXUoZCwwLC0xLDMwMzEzLDQpKSl7aWYoYXJbVT4+Ml09MCxhclsoZz1VKzR8MCk+PjJdPTAsbW8oUywoYXJbVSs4Pj4yXT0wKXxhcltOPj4yXSxyLFUpLHc9MHxhclsobT1TKSs0Pj4yXSxhclsodj1zKT4+Ml09YXJbbT4+Ml0sYXJbdis0Pj4yXT13LHc9Uys4fDAsKDB8dHJbKG09KHY9OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbdj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3Y+PjBdPTAsdHJbbT4+MF09MCksQ3UodiwwKSxhclt2Pj4yXT1hclt3Pj4yXSxhclt2KzQ+PjJdPWFyW3crND4+Ml0sYXJbdis4Pj4yXT1hclt3Kzg+PjJdLDB8YXJbcz4+Ml0pe1M9MHxhclsoaT1zKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaT4+Ml0sYXJbdys0Pj4yXT1TLGFyWyh3PUErOHwwKT4+Ml09YXJbdj4+Ml0sYXJbdys0Pj4yXT1hclt2KzQ+PjJdLGFyW3crOD4+Ml09YXJbdis4Pj4yXSxhclt2Pj4yXT0wLGFyW3YrND4+Ml09MCwoYXJbdis4Pj4yXT0wKXwodz0wfGFyW1U+PjJdKSYmKCgwfGFyW2c+PjJdKSE9KDB8dykmJihhcltnPj4yXT13KSx2dSh3KSk7YnJlYWt9aWYoQ2woUyxlLHIsaSxVKSxKPTB8YXJbKEQ9UykrND4+Ml0sYXJbKHc9cyk+PjJdPWFyW0Q+PjJdLGFyW3crND4+Ml09Six3PVMrOHwwLCgwfHRyW20+PjBdKTwwPyh0clthclt2Pj4yXT4+MF09MCxhclsxMitzPj4yXT0wKToodHJbdj4+MF09MCx0clttPj4wXT0wKSxDdSh2LDApLGFyW3Y+PjJdPWFyW3c+PjJdLGFyW3YrND4+Ml09YXJbdys0Pj4yXSxhclt2Kzg+PjJdPWFyW3crOD4+Ml0sMHxhcltzPj4yXSl7Uz0wfGFyWyhpPXMpKzQ+PjJdLGFyWyh3PUEpPj4yXT1hcltpPj4yXSxhclt3KzQ+PjJdPVMsYXJbKHc9QSs4fDApPj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLChhclt2Kzg+PjJdPTApfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKTticmVha30wfCh3PTB8YXJbVT4+Ml0pJiYoKDB8YXJbZz4+Ml0pIT0oMHx3KSYmKGFyW2c+PjJdPXcpLHZ1KHcpKSxNPTE3ODticmVha31hclt5Pj4yXT0wLGFyW3krND4+Ml09MCxhclt5Kzg+PjJdPTAsb28oQSw0LDMwMDEseSksKDB8dHJbeSsxMT4+MF0pPDAmJnZ1KDB8YXJbeT4+Ml0pfX13aGlsZSgwKTtkb3tpZigyNT09KDB8TSkpe2lmKHY9MHx0cltsPj4wXSx3PTB8YXJbbT4+Ml0sND09KDB8KHY8PDI0Pj4yNDwwP3c6MjU1JnYpKT8wfFl1KGQsMCwtMSwzMDI5OCw0KT8odj0wfHRyW2w+PjBdLHc9MHxhclttPj4yXSxNPTI4KTpwPTE6TT0yOCwyOD09KDB8TSkmJihwPTQ9PSgwfCh2PDwyND4+MjQ8MD93OjI1NSZ2KSkmJihwPTA9PSgwfFl1KGQsMCwtMSwzMDMxOCw0KSkpPzQ6MCksbT0odz0wfFJsKHApKT8wfGpiWzEyNyZhclt3KzE2Pj4yXV0ocCk6MCwoMHwodj0wfGFyW2UrMTY+PjJdKSk9PSgwfCh5PWUrMjB8MCkpKWc9dztlbHNle2Rve2lmKEQ9MHxhclt2KzE2Pj4yXSx3PShKPSgwfG0pPCgwfChnPTB8amJbMTI3JmFyW0QrMTY+PjJdXShwKSkpKT9EOncsbT1KP2c6bSxnPTB8YXJbdis0Pj4yXSlmb3Iodj1nO2c9MHxhclt2Pj4yXTspdj1nO2Vsc2UgaWYoWj0wfGFyWyhnPXYrOHwwKT4+Ml0sKDB8YXJbWj4+Ml0pPT0oMHx2KSl2PVo7ZWxzZSBmb3IoO0o9MHxhcltnPj4yXSx2PTB8YXJbKGc9Sis4fDApPj4yXSwoMHxhclt2Pj4yXSkhPSgwfEopOyk7fXdoaWxlKCgwfHYpIT0oMHx5KSk7Zz13fWlmKCFnKXtpZihhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTAsb28oQSw0LDNlMyxCKSwwPD0oMHx0cltCKzExPj4wXSkpYnJlYWs7dnUoMHxhcltCPj4yXSk7YnJlYWt9aWYoYXJbVT4+Ml09MCxhclsoWD1VKzR8MCk+PjJdPTAsbW8oUywoYXJbVSs4Pj4yXT0wKXxhcltOPj4yXSxyLFUpLHY9MHxhclsobT1TKSs0Pj4yXSxhclsodz1zKT4+Ml09YXJbbT4+Ml0sYXJbdys0Pj4yXT12LHY9Uys4fDAsKDB8dHJbKG09KHc9OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbdz4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW3c+PjBdPTAsdHJbbT4+MF09MCksQ3UodywwKSxhclt3Pj4yXT1hclt2Pj4yXSxhclt3KzQ+PjJdPWFyW3YrND4+Ml0sYXJbdys4Pj4yXT1hclt2Kzg+PjJdLDB8YXJbcz4+Ml0pRD0wfGFyWyhRPXMpKzQ+PjJdLGFyWyhKPUEpPj4yXT1hcltRPj4yXSxhcltKKzQ+PjJdPUQsYXJbKEo9QSs4fDApPj4yXT1hclt3Pj4yXSxhcltKKzQ+PjJdPWFyW3crND4+Ml0sYXJbSis4Pj4yXT1hclt3Kzg+PjJdLGFyW3c+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCx3PTE7ZWxzZXtmc1s2MyZhcltnKzIwPj4yXV0odCxTKSxaPTB8YXJbdD4+Ml07ZG97aWYoWiltPTB8YXJbNCt0Pj4yXSx2PTB8YXJbOCt0Pj4yXSxhcltJPj4yXT0wLGFyW0krND4+Ml09MCw0Mjk0OTY3Mjc5PChnPShhcltJKzg+PjJdPTApfFZjKHYpKT4+PjAmJnB1KCksZz4+PjA8MTE/KHRyW0krMTE+PjBdPWcpPyh3PUksTT01Myk6dz1JOih3PTB8aHUoTT1nKzE2Ji0xNiksYXJbST4+Ml09dyxhcltJKzg+PjJdPS0yMTQ3NDgzNjQ4fE0sYXJbSSs0Pj4yXT1nLE09NTMpLDUzPT0oMHxNKSYmaGIoMHx3LDB8diwwfGcpLHRyW3crZz4+MF09MCxvbyhBLFosbSxJKSx3PSgoMHx0cltJKzExPj4wXSk8MCYmdnUoMHxhcltJPj4yXSksMSk7ZWxzZXtpZihKPTB8YXJbVT4+Ml0sdHNbMzEmYXJbZysyOD4+Ml1dKG8sMHxhcltTPj4yXSxKLCgwfGFyW1g+PjJdKS1KfDApLGFyW3Q+PjJdPWFyW28+PjJdLGFyWzQrdD4+Ml09YXJbbys0Pj4yXSxhcls4K3Q+PjJdPWFyW28rOD4+Ml0sMHxhclt0Pj4yXSl7aWYoaXNbNTExJmFyW2crMjQ+PjJdXSgwfGFyW1M+PjJdKSxtPTB8YXJbdD4+Ml0sZz0wfGFyWzQrdD4+Ml0sdj0wfGFyWzgrdD4+Ml0sYXJbQz4+Ml09MCxhcltDKzQ+PjJdPTAsNDI5NDk2NzI3OTwoWj0oYXJbQys4Pj4yXT0wKXxWYyh2KSk+Pj4wJiZwdSgpLFo+Pj4wPDExPyh0cltDKzExPj4wXT1aKT8odz1DLE09NjIpOnc9Qzoodz0wfGh1KE09WisxNiYtMTYpLGFyW0M+PjJdPXcsYXJbQys4Pj4yXT0tMjE0NzQ4MzY0OHxNLGFyW0MrND4+Ml09WixNPTYyKSw2Mj09KDB8TSkmJmhiKDB8dywwfHYsMHxaKSx0clt3K1o+PjBdPTAsb28oQSxtLGcsQyksMDw9KDB8dHJbQysxMT4+MF0pKXt3PTE7YnJlYWt9dnUoMHxhcltDPj4yXSksdz0xO2JyZWFrfWFyW28+PjJdPTAsbnNbMTI3JmFyW2crMzI+PjJdXShGLDB8YXJbUz4+Ml0sbyksYXJbdD4+Ml09YXJbRj4+Ml0sYXJbNCt0Pj4yXT1hcltGKzQ+PjJdLGFyWzgrdD4+Ml09YXJbRis4Pj4yXTtkb3tpZigwfGFyW3Q+PjJdKXtpZihpc1s1MTEmYXJbZysyND4+Ml1dKDB8YXJbUz4+Ml0pLG09MHxhclt0Pj4yXSxnPTB8YXJbNCt0Pj4yXSx2PTB8YXJbOCt0Pj4yXSxhcltHPj4yXT0wLGFyW0crND4+Ml09MCw0Mjk0OTY3Mjc5PChaPShhcltHKzg+PjJdPTApfFZjKHYpKT4+PjAmJnB1KCksWj4+PjA8MTE/KHRyW0crMTE+PjBdPVopPyh3PUcsTT03MSk6dz1HOih3PTB8aHUoTT1aKzE2Ji0xNiksYXJbRz4+Ml09dyxhcltHKzg+PjJdPS0yMTQ3NDgzNjQ4fE0sYXJbRys0Pj4yXT1aLE09NzEpLDcxPT0oMHxNKSYmaGIoMHx3LDB8diwwfFopLHRyW3crWj4+MF09MCxvbyhBLG0sZyxHKSwwPD0oMHx0cltHKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW0c+PjJdKSx3PTF9ZWxzZXtpZighKHc9MHxhcltvPj4yXSkpe2lmKGlzWzUxMSZhcltnKzI0Pj4yXV0oMHxhcltTPj4yXSksYXJbVz4+Ml09MCxhcltXKzQ+PjJdPTAsb28oQSw3LGFyW1crOD4+Ml09MCxXKSwwPD0oMHx0cltXKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW1c+PjJdKSx3PTE7YnJlYWt9cD0wfGFyW3c+PjJdLEo9MHxhclsoRD13KzR8MCk+PjJdLGFyW3c+PjJdPTAsYXJbRD4+Ml09MCxhcltpPj4yXT1wLHc9MHxhclsocD1pKzR8MCk+PjJdLGFyW3A+PjJdPUosMHx3JiZkdSh3KSxobCgwfGFyW28+PjJdKSxpc1s1MTEmYXJbZysyND4+Ml1dKDB8YXJbUz4+Ml0pLHc9MHxhcltFKzE5Nj4+Ml0sKEI9MD09KDB8KHk9MHxhcltFKzIwMD4+Ml0pKSl8fGJ1KHkpO2Rve2lmKDB8dyl7aWYodj0wfGFyW2k+PjJdLEJ8fChidSh5KSxidSh5KSksYXJbdis0MD4+Ml09dyx3PTB8YXJbKEo9dis0NHwwKT4+Ml0sYXJbSj4+Ml09eSwwfHcmJmR1KHcpLEIpYnJlYWs7ZHUoeSl9fXdoaWxlKDApO3Y9MHxhcltFKzIwND4+Ml0sKFo9MD09KDB8KGc9MHxhcltFKzIwOD4+Ml0pKSl8fGJ1KGcpO2Rve2lmKDB8dil7aWYodz0wfGFyW2k+PjJdLFp8fChidShnKSxidShnKSksYXJbdys0OD4+Ml09dix3PTB8YXJbKEo9dys1MnwwKT4+Ml0sYXJbSj4+Ml09ZywwfHcmJmR1KHcpLFopYnJlYWs7ZHUoZyl9fXdoaWxlKDApO0o9MHxhcltpPj4yXSxEPTB8YXJbSiszMj4+Ml0sdj0yPT0oMHwodz0wPT0oMHwodz05OT09KDB8Zik/RDpmKSk/MTp3KSk/MDozO2Rve2lmKCgwfHcpPT0oMHxEKSYmKDB8dik9PSgwfGFyW0orMzY+PjJdKSl3PTA7ZWxzZXthcltWPj4yXT0wLG1lKEYsaSx3LHYsVixhclsobT1WKzR8MCk+PjJdPTApLHc9MHxhcltGPj4yXSxKPTB8YXJbKHY9Ris0fDApPj4yXSxhcltGPj4yXT0wLGFyW3Y+PjJdPTAsYXJbaT4+Ml09dyx3PTB8YXJbcD4+Ml0sYXJbcD4+Ml09Sjtkb3tpZigwfHcpe2lmKGR1KHcpLCEodz0wfGFyW3Y+PjJdKSlicmVhaztkdSh3KX19d2hpbGUoMCk7aWYoMHwodz0wfGFyW20+PjJdKSYmZHUodyksMHxhcltpPj4yXSl7dz0wO2JyZWFrfWlmKGFyW1I+PjJdPTAsYXJbUis0Pj4yXT0wLGFyW1IrOD4+Ml09MCxvbyhBLDQsMzAwMyxSKSwwPD0oMHx0cltSKzExPj4wXSkpe3c9MTticmVha312dSgwfGFyW1I+PjJdKSx3PTF9fXdoaWxlKDApO2lmKFp8fGR1KGcpLEIpYnJlYWs7ZHUoeSl9fXdoaWxlKDApfX13aGlsZSgwKX0wfCh2PTB8YXJbVT4+Ml0pJiYoKDB8YXJbWD4+Ml0pIT0oMHx2KSYmKGFyW1g+PjJdPXYpLHZ1KHYpKSx3fHwoTT0xNzgpfX13aGlsZSgwKTtkb3tpZigxNzg9PSgwfE0pKXtpZigwPT0oMHxuKXx8MD09KDB8dHJbbisxPj4wXSkpe2FyW1U+PjJdPTAsYXJbKEo9VSs0fDApPj4yXT0wLHc9KGFyW1UrOD4+Ml09MCl8YXJbTj4+Ml0sdj0wfGFyW3crNDQ+PjJdLChEPTA9PSgwfChRPTB8YXJbdys0OD4+Ml0pKSl8fChidShRKSx3PTB8YXJbTj4+Ml0pLGFyW1M+PjJdPWFyW3crNTI+PjJdLFk9Uys0fDAsdz0wfGFyW3crNTY+PjJdLDB8KGFyW1k+PjJdPXcpJiZidSh3KSxIdCh0LHYscixTLFUpLHc9MHxhclsoXz10KSs0Pj4yXSxhclsoTj1zKT4+Ml09YXJbXz4+Ml0sYXJbTis0Pj4yXT13LHc9OCt0fDAsKDB8dHJbKF89KE49OCtzfDApKzExfDApPj4wXSk8MD8odHJbYXJbTj4+Ml0+PjBdPTAsYXJbMTIrcz4+Ml09MCk6KHRyW04+PjBdPTAsdHJbXz4+MF09MCksQ3UoTiwwKSxhcltOPj4yXT1hclt3Pj4yXSxhcltOKzQ+PjJdPWFyW3crND4+Ml0sYXJbTis4Pj4yXT1hclt3Kzg+PjJdLHc9MHxhcltVPj4yXSxYPTB8YXJbSj4+Ml07QTpkb3tpZigoMHx3KSE9KDB8WCkpe1c9MTErYXwwLEc9MTIrc3wwLGY9aSs0fDAsVj1BKzh8MCxGPTgrdHwwLFI9ST00K3R8MCxuPUM9bys4fDA7ZTpmb3IoOzspe3Y9MHxhclsoWj13KzR8MCk+PjJdO3I6ZG97aWYodil7aWYobT0wfHF1KHYsMTI4LDgwOCwwKSl7KHY9MHxhclt3Kzg+PjJdKT9idSh2KTp2PTAsYXJbdD4+Ml09MCxvbChvLChhcltSPj4yXT0wKXxhcltpPj4yXSwwfGFyW20rNTY+PjJdLHQpLEI9MHxhclsoeT1vKSs0Pj4yXSxhclsoRT1zKT4+Ml09YXJbeT4+Ml0sYXJbRSs0Pj4yXT1CLCgwfHRyW18+PjBdKTwwPyh0clthcltOPj4yXT4+MF09MCxhcltHPj4yXT0wKToodHJbTj4+MF09MCx0cltfPj4wXT0wKSxDdShOLDApLGFyW04+PjJdPWFyW24+PjJdLGFyW04rND4+Ml09YXJbbis0Pj4yXSxhcltOKzg+PjJdPWFyW24rOD4+Ml07ZG97aWYoMHxhcltzPj4yXSlFPTB8YXJbKEI9cykrND4+Ml0sYXJbKG09QSk+PjJdPWFyW0I+PjJdLGFyW20rND4+Ml09RSxhcltWPj4yXT1hcltOPj4yXSxhcltWKzQ+PjJdPWFyW04rND4+Ml0sYXJbVis4Pj4yXT1hcltOKzg+PjJdLGFyW04+PjJdPTAsYXJbTis0Pj4yXT0wLGFyW04rOD4+Ml09MCxtPTE7ZWxzZXtpZihtPTB8YXJbdD4+Ml0sMHwoZz0wfGFyW1I+PjJdKSYmYnUoZyksYXJbaT4+Ml09bSxtPTB8YXJbZj4+Ml0sYXJbZj4+Ml09ZywhbSl7bT0wO2JyZWFrfWR1KG0pLG09MH19d2hpbGUoMCk7aWYoMHwoZz0wfGFyW1I+PjJdKSYmZHUoZyksbSl7bT0xO2JyZWFrfUU9dn1lbHNlIEU9MDtpZih2PTB8YXJbWj4+Ml0pe209MHxxdSh2LDEyOCw3NzYsMCk7ZG97aWYobSl7aWYoKHY9MHxhclt3Kzg+PjJdKT9idSh2KTp2PTAsYWwodCwwfGFyW2k+PjJdLDE9PSgwfHRyW20rNTY+PjBdKSksQj0wfGFyWyh5PXQpKzQ+PjJdLGFyWyhNPXMpPj4yXT1hclt5Pj4yXSxhcltNKzQ+PjJdPUIsKDB8dHJbXz4+MF0pPDA/KHRyW2FyW04+PjJdPj4wXT0wLGFyW0c+PjJdPTApOih0cltOPj4wXT0wLHRyW18+PjBdPTApLEN1KE4sMCksYXJbTj4+Ml09YXJbRj4+Ml0sYXJbTis0Pj4yXT1hcltGKzQ+PjJdLGFyW04rOD4+Ml09YXJbRis4Pj4yXSwhKDB8YXJbcz4+Ml0pKXtCPXY7YnJlYWt9Zz0wfGFyWyhNPXMpKzQ+PjJdLGFyWyhtPUEpPj4yXT1hcltNPj4yXSxhclttKzQ+PjJdPWcsYXJbVj4+Ml09YXJbTj4+Ml0sYXJbVis0Pj4yXT1hcltOKzQ+PjJdLGFyW1YrOD4+Ml09YXJbTis4Pj4yXSxhcltOPj4yXT0wLGFyW04rND4+Ml09MCxhcltOKzg+PjJdPTAsbT0xLGc9dix2PUUsTT0yNDE7YnJlYWsgcn1CPTB9d2hpbGUoMCk7aWYoISh2PTB8YXJbWj4+Ml0pKXtaPTAsZz1CLHY9RSxNPTIzODticmVha31pZighKG09MHxxdSh2LDEyOCw3NDQsMCkpKXtaPTAsZz1CLHY9RSxNPTIzODticmVha31pZigodj0wfGFyW3crOD4+Ml0pP2J1KHYpOnY9MCx5PTB8YXJbaT4+Ml0sZz0wfGFyW3krMjQ+PjJdLHk9MHxhclt5KzI4Pj4yXSwoMHxnKTw9LTEpe009MjIwO2JyZWFrIGV9aWYoKDB8eSk8PS0xKXtNPTIyMjticmVhayBlfWlmKHA9MHxLdChtLGcpLE09MHxxdChtLGcpLFo9MHwkdChtLHkpLCgwfChnPSgwfE0pPCgwfGcpP006ZystMXwwKSk8KDB8KHA9MDwoMHxwKT9wOjApKXwoMHwobT0oMHwobT0wfEFvKG0seSkpKTwoMHx5KT9tOnkrLTF8MCkpPCgwfChaPTA8KDB8Wik/WjowKSkpe2lmKGFyW2E+PjJdPTAsYXJbNCthPj4yXT0wLGFyWzgrYT4+Ml09MCxvbyhBLDIsMTIwLGEpLDA8PSgwfHRyW1c+PjBdKSl7bT0xLFo9dixnPUIsdj1FLE09MjM5O2JyZWFrfXZ1KDB8YXJbYT4+Ml0pLG09MSxaPXYsZz1CLHY9RSxNPTIzOTticmVha31hclt0Pj4yXT0wLGNsKG8sKGFyW0k+PjJdPTApfGFyW2k+PjJdLHAsZyxaLG0sdCkseT0wfGFyWyhwPW8pKzQ+PjJdLGFyWyhNPXMpPj4yXT1hcltwPj4yXSxhcltNKzQ+PjJdPXksKDB8dHJbXz4+MF0pPDA/KHRyW2FyW04+PjJdPj4wXT0wLGFyW0c+PjJdPTApOih0cltOPj4wXT0wLHRyW18+PjBdPTApLEN1KE4sMCksYXJbTj4+Ml09YXJbQz4+Ml0sYXJbTis0Pj4yXT1hcltDKzQ+PjJdLGFyW04rOD4+Ml09YXJbQys4Pj4yXTtkb3tpZigwfGFyW3M+PjJdKU09MHxhclsoeT1zKSs0Pj4yXSxhclsobT1BKT4+Ml09YXJbeT4+Ml0sYXJbbSs0Pj4yXT1NLGFyW1Y+PjJdPWFyW04+PjJdLGFyW1YrND4+Ml09YXJbTis0Pj4yXSxhcltWKzg+PjJdPWFyW04rOD4+Ml0sYXJbTj4+Ml09MCxhcltOKzQ+PjJdPTAsYXJbTis4Pj4yXT0wLG09MTtlbHNle2lmKG09MHxhclt0Pj4yXSwwfChnPTB8YXJbST4+Ml0pJiZidShnKSxhcltpPj4yXT1tLG09MHxhcltmPj4yXSxhcltmPj4yXT1nLCFtKXttPTA7YnJlYWt9ZHUobSksbT0wfX13aGlsZSgwKTswfChnPTB8YXJbST4+Ml0pJiZkdShnKSxNPW0/KG09MSxaPXYsZz1CLHY9RSwyMzkpOihaPXYsZz1CLHY9RSwyMzgpfWVsc2UgZz1aPTAsdj1FLE09MjM4fWVsc2Ugdj1nPVo9MCxNPTIzOH13aGlsZSgwKTtpZigyMzg9PSgwfE0pJiYobT0wLE09MjM5KSwyMzk9PSgwfE0pJiYoTT0oWiYmZHUoWiksMjQxKSksMjQxPT0oMHxNKSYmKE09MCxnJiZkdShnKSksMHx2JiZkdSh2KSx3PXcrMTJ8MCwwfG0pe1Q9bTticmVhayBBfWlmKCgwfHcpPT0oMHxYKSl7VD0yO2JyZWFrIEF9fTIyMD09KDB8TSk/c3IoMzEzODIsMzAyMDMsMTIyMSwzMTM2Mik6MjIyPT0oMHxNKSYmc3IoMzEzOTcsMzAyMDMsMTIyMiwzMTM2Mil9ZWxzZSBUPTJ9d2hpbGUoMCk7aWYoMHwodz0wfGFyW1k+PjJdKSYmZHUodyksRHx8ZHUoUSksMHwodz0wfGFyW1U+PjJdKSl7aWYoKDB8KHY9MHxhcltKPj4yXSkpIT0oMHx3KSl7Zm9yKDttPXYrLTEyfDAsYXJbSj4+Ml09bSwoMHwodj0odj0wfGFyW3YrLTQ+PjJdKT8oZHUodiksMHxhcltKPj4yXSk6bSkpIT0oMHx3KTspO3c9MHxhcltVPj4yXX12dSh3KX1pZigyIT0oMnxUKSlicmVha31pZigwfChtPTB8YXJbYz4+Ml0pKXt3PWMsZz1tO0E6Zm9yKDs7KXtmb3Iodj1nOyEoKDB8YXJbdisxNj4+Ml0pPj4+MD49cj4+PjApOylpZighKHY9MHxhclt2KzQ+PjJdKSlicmVhayBBO2lmKCEoZz0wfGFyW3Y+PjJdKSl7dz12O2JyZWFrfXc9dn1pZigoMHx3KSE9KDB8YykmJigwfGFyW3crMTY+PjJdKT4+PjA8PXI+Pj4wKXt3PWM7QTpmb3IoOzspe2Zvcih2PW07ISgoMHxhclt2KzE2Pj4yXSk+Pj4wPj1yPj4+MCk7KWlmKCEodj0wfGFyW3YrND4+Ml0pKWJyZWFrIEE7aWYoIShtPTB8YXJbdj4+Ml0pKXt3PXY7YnJlYWt9dz12fWlmKCgwfHcpIT0oMHxjKSYmKDB8YXJbdysxNj4+Ml0pPj4+MDw9cj4+PjB8fCh3PWMpLHY9MHxhclt3KzIwPj4yXSwoeT0wPT0oMHwocD0wfGFyW3crMjQ+PjJdKSkpfHxidShwKSx3PTB8YXJbdis2OD4+Ml0sKFo9MD09KDB8KGc9MHxhclt2KzcyPj4yXSkpKXx8YnUoZyksdyl7YXJbVT4+Ml09MCxYbChTLGUsKGFyWyhtPVUrNHwwKT4+Ml09MCl8YXJbdysyMD4+Ml0sVSw5OSwwKTtBOmRve2lmKDB8YXJbUz4+Ml0pdz0wfGFyWyhpPVMpKzQ+PjJdLGFyWyhVPUEpPj4yXT1hcltpPj4yXSxhcltVKzQ+PjJdPXcsdz1TKzh8MCxhclsoVT1BKzh8MCk+PjJdPWFyW3c+PjJdLGFyW1UrND4+Ml09YXJbdys0Pj4yXSxhcltVKzg+PjJdPWFyW3crOD4+Ml0sYXJbdz4+Ml09MCxhclt3KzQ+PjJdPTAsYXJbdys4Pj4yXT0wLHc9MTtlbHNle3N3aXRjaCgwfGFyWzMyKygwfGFyW1U+PjJdKT4+Ml0pe2Nhc2UgMjpjYXNlIDA6dz0wO2JyZWFrO2Nhc2UgMTp3PTM7YnJlYWs7ZGVmYXVsdDppZihhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxhcls4K2I+PjJdPTAsb28oQSwyLDMwMDMsYiksMDw9KDB8dHJbMTErYj4+MF0pKXt3PTE7YnJlYWsgQX12dSgwfGFyW2I+PjJdKSx3PTE7YnJlYWsgQX1fbygwfGFyW2k+PjJdLFUsdyw2KSx3PTB9fXdoaWxlKDApOygwfHRyWyh2PVMrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbdj4+Ml0pLDB8KHY9MHxhclttPj4yXSkmJmR1KHYpLHd8fChNPTI4OSl9ZWxzZSBNPTI4OTtpZigyODk9PSgwfE0pJiYodz0wKSxafHxkdShnKSx5fHxkdShwKSwwfHcpYnJlYWt9fVU9MHxhclsoaT01NjU5MikrND4+Ml0sYXJbKFM9QSk+PjJdPWFyW2k+PjJdLGFyW1MrND4+Ml09VSx5dShBKzh8MCw1NjYwMCl9fXdoaWxlKDApOygwfHRyWyh3PTgrc3wwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbdz4+Ml0pLDB8dSYmZHUodSksdXI9KDA8PSgwfHRyW2w+PjBdKXx8dnUoMHxhcltkPj4yXSksayl9ZnVuY3Rpb24gV2woQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wO2lmKHVyPShhPXVyKSs0ODB8MCxKPWErMjR8MCxzPShvPWEpKzQ2MHwwLGM9YSs0MzZ8MCxaPWErMjgwfDAsaz1hKzQyNHwwLHY9YSsyNjR8MCx0PWErMjU2fDAscD1hKzk2fDAseT1hKzI0MHwwLEI9YSs4MHwwLEU9YSs2OHwwLFE9YSs1NnwwLG49YSs0OHwwLGFyWyhnPWErNDQ4fDApPj4yXT0wLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTAsZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTA7aWYodXI9KGk9dXIpKzMyfDAsdD1pKzEyfDAsbz1pLG49MHxhclsocnw9MCk+PjJdLChyPSgwfGFyW3IrND4+Ml0pLW58MCk+Pj4wPDgpe2ZvcihyPTB8aHUoMzIpLGFyW3Q+PjJdPXIsYXJbdCs4Pj4yXT0tMjE0NzQ4MzYxNixuPTMwMDMzLGU9KGY9cikrKGFyW3QrND4+Ml09MjUpfDA7dHJbZj4+MF09MHx0cltuPj4wXSxuPW4rMXwwLCgwfChmPWYrMXwwKSk8KDB8ZSk7KTtyZXR1cm4odHJbcisyNT4+MF09MCxvbyhBLDIsMTE4LHQpLDA8PSgwfHRyW3QrMTE+PjBdKSk/dXI9aToodnUoMHxhclt0Pj4yXSksdXI9aSl9dD0wPT0oMSZ0cltuKzE+PjBdKSxvcltlPj4xXT0xKygwfGNyW24rMj4+MF0pLG9yW2UrMj4+MV09MSsoMHxjcltuKzM+PjBdKTtkb3tpZighdCl7aWYoMTI8PXI+Pj4wKXthcltlKzQ+PjJdPWNyW24rNT4+MF08PDE2fGNyW24rND4+MF08PDI0fGNyW24rNj4+MF08PDh8Y3Jbbis3Pj4wXSxyPTExLGY9Y3Jbbis5Pj4wXTw8MTZ8Y3Jbbis4Pj4wXTw8MjR8Y3JbbisxMD4+MF08PDg7YnJlYWt9Zm9yKHI9MHxodSgzMiksYXJbbz4+Ml09cixhcltvKzg+PjJdPS0yMTQ3NDgzNjE2LG49MzAwNTksZT0oZj1yKSsoYXJbbys0Pj4yXT0yNil8MDt0cltmPj4wXT0wfHRyW24+PjBdLG49bisxfDAsKDB8KGY9ZisxfDApKTwoMHxlKTspO3JldHVybih0cltyKzI2Pj4wXT0wLG9vKEEsMiwxMTgsbyksMDw9KDB8dHJbbysxMT4+MF0pKT91cj1pOih2dSgwfGFyW28+PjJdKSx1cj1pKX1hcltlKzQ+PjJdPWNyW24rND4+MF08PDh8Y3Jbbis1Pj4wXSxyPTcsZj1jcltuKzY+PjBdPDw4fXdoaWxlKDApO2FyW2UrOD4+Ml09Y3JbbityPj4wXXxmLHQ9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW2U+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9aX0obyxnLGYpLDB8YXJbbz4+Ml0pVT0wfGFyWyhNPW8pKzQ+PjJdLGFyWyhUPUEpPj4yXT1hcltNPj4yXSxhcltUKzQ+PjJdPVUsVT1vKzh8MCxhclsoVD1BKzh8MCk+PjJdPWFyW1U+PjJdLGFyW1QrND4+Ml09YXJbVSs0Pj4yXSxhcltUKzg+PjJdPWFyW1UrOD4+Ml0sYXJbVT4+Ml09MCxhcltVKzQ+PjJdPTAsYXJbVSs4Pj4yXT0wO2Vsc2V7aWYoVD0wfGFyWyh3PWUrNjB8MCk+PjJdLGY9MHxhcltUKzc2Pj4yXSwoVT0wPT0oMHwoVD0wfGFyW1QrODA+PjJdKSkpfHxidShUKSxmKXtmbyhjLGYsciwxNjg0NjMwODg3KSxmPTB8YXJbKE09Yys0fDApPj4yXSx1PWw9MHxhcltjPj4yXSxoPWYsMjU3PD0oNjU1MzUmKEc9MHxvcltnPj4xXSkpJiZzcigzMTY3OCwzMDIwMywxMzMsMzE2OTIpLDI1Nzw9KDY1NTM1JihzPTB8b3JbZysyPj4xXSkpJiZzcigzMTcwMSwzMDIwMywxMzksMzE3MTgpLGQ9MHxicihZPTY1NTM1JnMsXz02NTUzNSZHKTtBOmRve2lmKChmLWw+PjJ8MCk9PSgwfGQpKXtlOmRve2lmKCgwfHUpIT0oMHxoKSl7ZD0wfGFyW2UrMjg+PjJdLGs9ZSszMnwwO3I6ZG97aWYoKDB8ZCk9PSgwfGspKXM9MHxhclt1Pj4yXTtlbHNlIGZvcihiPXU7Oyl7Zm9yKHM9MHxhcltiPj4yXSx1PWQ7KDB8YXJbdSsxNj4+Ml0pIT0oMHxzKTspe2lmKGY9MHxhclt1KzQ+PjJdKWZvcig7bD0wfGFyW2Y+PjJdOylmPWw7ZWxzZSBpZihmPTB8YXJbKGw9dSs4fDApPj4yXSwoMHxhcltmPj4yXSkhPSgwfHUpKWZvcig7Tj0wfGFyW2w+PjJdLGY9MHxhclsobD1OKzh8MCk+PjJdLCgwfGFyW2Y+PjJdKSE9KDB8Tik7KTtpZigoMHxmKT09KDB8aykpYnJlYWsgcjt1PWZ9aWYoKDB8KGI9Yis0fDApKT09KDB8aCkpYnJlYWsgZX19d2hpbGUoMCk7bD1aKzY0fDAsYXJbKGI9Wis4fDApPj4yXT00NTI0LHU9WisxMnwwLGFyW1o+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYoWis2NHwoYXJbWis0Pj4yXT0wKSx1KSxhcltaKzEzNj4+Ml09MCxhcltaKzE0MD4+Ml09LTEsYXJbWj4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2I+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoYj1aKzQ0fDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltaKzYwPj4yXT0yNCxhcltKPj4yXT0wLGFyW0orND4+Ml09MCxhcltKKzg+PjJdPTAsWGUodSxKKSwoMHx0cltKKzExPj4wXSk8MCYmdnUoMHxhcltKPj4yXSksV2UoMHxMZigwfFdlKGY9Wis4fDAsMzE3ODksMTQpLHMpLDMxODA0LDIzKSxJZSh2LHUpLG9vKEEsMiwxMTksdiksKDB8dHJbdisxMT4+MF0pPDAmJnZ1KDB8YXJbdj4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltmPj4yXT00NTI0LGFyW3U+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKHUpLGJmKGwpO2JyZWFrIEF9fXdoaWxlKDApO2Y9MHxhclt3Pj4yXSxhcltaPj4yXT1hcltmKzUyPj4yXSxOPVorNHwwLGw9MHxhcltmKzU2Pj4yXSwoYXJbTj4+Ml09bCkmJihidShsKSxmPTB8YXJbdz4+Ml0pLGw9MHxhcltmKzQ0Pj4yXSwoUj0wPT0oMHwoRj0wfGFyW2YrNDg+PjJdKSkpfHxidShGKSxMdCh0LGwscixaLDE4ODU5NjAyOTcpLFY9MCE9KDB8KGY9MHxhclt0Pj4yXSkpJiYwIT0oMHwobT0wfHF1KGYsMTI4LDM1MiwwKSkpPyhmPTB8YXJbNCt0Pj4yXSk/KGJ1KGYpLGQ9bSxmKTooZD1tLDApOmQ9MCxoPTB8YXJbZys0Pj4yXSxrPTB8YXJbZys4Pj4yXSwoMHxhcltjPj4yXSk9PSgwfGFyW00+PjJdKSYmc3IoMzE4MjgsMzAyMDMsMTM1OSwzMTg1NCkscz1lKzcyfDA7ZTpkb3tpZihoPj4+MDwoMHxhcltzPj4yXSk+Pj4wJiZrPj4+MDwoMHxhcltlKzc2Pj4yXSk+Pj4wKXt1PTB8aHUoODApLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjIwOCxhclsoZj11KzEyfDApPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZisxMj4+Ml09MCxhcltmKzE2Pj4yXT0wLGFyW3UrMzI+PjJdPTMwMDI1LGFyW3UrMzY+PjJdPTAsYXJbdSs0MD4+Ml09MCxhclt1KzQ0Pj4yXT05OSxhclt1KzQ4Pj4yXT05OSxzPXUrNTJ8MCxhclsoYj11KzcyfDApPj4yXT0wLGFyW3UrNzY+PjJdPTAsYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYXJbcys4Pj4yXT0wLGFyW3MrMTI+PjJdPTAsYXJbdSs2OD4+Ml09YixiPWYsQz0ocz11KSsxNnwwLGJ1KHUpLHN1KHUpLGw9MHxhcltDPj4yXSxhcltmPj4yXT1iLGFyW0M+PjJdPXMsMHxsJiZrdShsKSxkdSh1KSxhcltpPj4yXT1iLGw9MHxhclsoQz1pKzR8MCk+PjJdLGFyW0M+PjJdPXMsbD8oZHUobCksZj0wfGFyWyhiPWkpPj4yXSk6Yj1pLHlvKGYsaCxrLDEsMyksdT0wIT0oMHxkKTtkb3tpZih1KXtpZihmPTB8YXJbZCs1Nj4+Ml0sMTw9KCgwfGFyW2QrNjA+PjJdKS1mfDApKXtsPTB8Y3JbZj4+MF07YnJlYWt9Zm9yKGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGY9KGFyW0IrOD4+Ml09MCl8aHUoNDgpLGFyW0I+PjJdPWYsYXJbQis4Pj4yXT0tMjE0NzQ4MzYwMCx1PTMxODc3LGI9KGw9ZikrKGFyW0IrND4+Ml09MzcpfDA7dHJbbD4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChsPWwrMXwwKSk8KDB8Yik7KTtpZih0cltmKzM3Pj4wXT0wLG9vKEEsMiwxMzAsQiksMDw9KDB8dHJbQisxMT4+MF0pKWJyZWFrIGU7dnUoMHxhcltCPj4yXSk7YnJlYWsgZX1sPTh9d2hpbGUoMCk7Qm8oMHxhcltiPj4yXSwzLGgsayxsKTtkb3tpZih1KXtpZihmPUk9MHxhcltkKzU2Pj4yXSwzIT0oKDB8YXJbZCs2MD4+Ml0pLUl8MCkpYnJlYWs7aWYoKDB8Y3JbZisxPj4wXSk9PSgwfGwpJiYoMHxjcltmKzI+PjBdKT09KDB8bCkpYnJlYWs7Zm9yKGFyW0U+PjJdPTAsYXJbRSs0Pj4yXT0wLGY9KGFyW0UrOD4+Ml09MCl8aHUoNjQpLGFyW0U+PjJdPWYsYXJbRSs4Pj4yXT0tMjE0NzQ4MzU4NCx1PTMxOTE1LGI9KGw9ZikrKGFyW0UrND4+Ml09NTEpfDA7dHJbbD4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChsPWwrMXwwKSk8KDB8Yik7KTtpZih0cltmKzUxPj4wXT0wLG9vKEEsMiwxMzAsRSksMDw9KDB8dHJbRSsxMT4+MF0pKWJyZWFrIGU7dnUoMHxhcltFPj4yXSk7YnJlYWsgZX19d2hpbGUoMCk7Qm8oMHxhcltiPj4yXSw0LGgsayxsKSxCbygwfGFyW2I+PjJdLDUsaCxrLGwpLFo9ZSszMnwwLHA9NCtufDAsQj0oeT1KKzh8MCkrMTF8MCxFPUErOHwwLFg9USs4fDAsVz1RKzR8MCxJPVErMTF8MDtyOmRve2lmKEc8PDE2Pj4xNil7Zz1mPW09MDtpOmZvcig7Oyl7Zm9yKHY9dz1yPTA7ISgoMHxZKTw9KDB8cikpOyl7aWYoZD0wfGFyWygwfGFyW2M+PjJdKSsoZjw8Mik+PjJdLCEodT0wfGFyW1o+PjJdKSlicmVhayBpO2w9WjtmOmZvcig7Oyl7Zm9yKGI9dTshKCgwfGFyW2IrMTY+PjJdKT4+PjA+PWQ+Pj4wKTspe2lmKCEodT0wfGFyW2IrND4+Ml0pKWJyZWFrIGY7Yj11fWlmKCEodT0wfGFyW2I+PjJdKSl7bD1iO2JyZWFrfWw9Yn1pZigoMHxsKT09KDB8WikpYnJlYWsgaTtpZihkPj4+MDwoMHxhcltsKzE2Pj4yXSk+Pj4wKWJyZWFrIGk7dT0wfGFyW2wrMjA+PjJdLChoPTA9PSgwfChrPTB8YXJbbCsyND4+Ml0pKSl8fGJ1KGspLHM9MHxhclt1KzI0Pj4yXSxiPTB8YXJbdSsyOD4+Ml0sYXJbbj4+Ml09YXJbaT4+Ml0sbD0wfGFyW0M+PjJdLChhcltwPj4yXT1sKT8oYnUobCksR2woSixlLGQsbix2LGcpLGR1KGwpKTpHbChKLGUsZCxuLHYsZyk7ZG97aWYoMHxhcltKPj4yXSl1PTB8YXJbKGw9SikrND4+Ml0sYXJbKGI9QSk+PjJdPWFyW2w+PjJdLGFyW2IrND4+Ml09dSxhcltFPj4yXT1hclt5Pj4yXSxhcltFKzQ+PjJdPWFyW3krND4+Ml0sYXJbRSs4Pj4yXT1hclt5Kzg+PjJdLGFyW3k+PjJdPTAsYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxiPXcsdT12LGw9MTtlbHNle2lmKGw9cyt2fDAsZj1mKzF8MCwwPD0oMHx0cltCPj4wXSkpe3U9bCxsPTA7YnJlYWt9dnUoMHxhclt5Pj4yXSksdT1sLGw9MH19d2hpbGUoMCk7aWYoaHx8ZHUoayksbClicmVhayBlO3I9cisxfDAsdz1iLHY9dX1pZigoMHxfKTw9KDB8KG09bSsxfDApKSlicmVhayByO2c9dytnfDB9Zm9yKGFyW1E+PjJdPTAsYXJbUSs0Pj4yXT0wLGY9KGFyW1ErOD4+Ml09MCl8aHUoNDgpLGFyW1E+PjJdPWYsYXJbWD4+Ml09LTIxNDc0ODM2MDAsdT0zMTk2NyxiPShsPWYpKyhhcltXPj4yXT0zMil8MDt0cltsPj4wXT0wfHRyW3U+PjBdLHU9dSsxfDAsKDB8KGw9bCsxfDApKTwoMHxiKTspO2lmKHRyW2YrMzI+PjBdPTAsb28oQSwyLDExOSxRKSwwPD0oMHx0cltJPj4wXSkpYnJlYWsgZTt2dSgwfGFyW1E+PjJdKTticmVhayBlfX13aGlsZSgwKTtKPTB8YXJbKFE9NTY1OTIpKzQ+PjJdLGFyW0E+PjJdPWFyW1E+PjJdLGFyW0ErND4+Ml09Six5dShFLDU2NjAwKX1lbHNlIEQ9NTF9d2hpbGUoMCk7NTE9PSgwfEQpJiYobD1wKzY0fDAsYXJbKGI9cCs4fDApPj4yXT00NTI0LHU9cCsxMnwwLGFyW3A+PjJdPTE4OCxhcltsPj4yXT0yMDgsSmYocCs2NHwoYXJbcCs0Pj4yXT0wKSx1KSxhcltwKzEzNj4+Ml09MCxhcltwKzE0MD4+Ml09LTEsYXJbcD4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2I+PjJdPTQ1MjQsU2YodSksYXJbdT4+Ml09NDM0MCxhclsoYj1wKzQ0fDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltwKzYwPj4yXT0yNCxhcltKPj4yXT0wLGFyW0orND4+Ml09MCxhcltKKzg+PjJdPTAsWGUodSxKKSwoMHx0cltKKzExPj4wXSk8MCYmdnUoMHxhcltKPj4yXSksSj0wfFdlKDB8TGYoMHxXZSgwfExmKDB8V2UoZj1wKzh8MCwzMDM2NiwxMSksaCksMzAxNzAsMSksayksMzAzNzgsMzIpLEo9MHxXZSgwfExmKEosMHxhcltzPj4yXSksMzAxNzAsMSksV2UoMHxMZihKLDB8YXJbZSs3Nj4+Ml0pLDMwMDg2LDEpLEllKHksdSksb28oQSw2LDFlMyx5KSwoMHx0clt5KzExPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksYXJbcD4+Ml09NDUwNCxhcltsPj4yXT00NTQ0LGFyW2Y+PjJdPTQ1MjQsYXJbdT4+Ml09NDM0MCwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSksa2YodSksYmYobCkpLDB8ViYmZHUoViksMHwoZj0wfGFyWzQrdD4+Ml0pJiZkdShmKSxSfHxkdShGKSwwfChmPTB8YXJbTj4+Ml0pJiZkdShmKX1lbHNlIGw9Wis2NHwwLGFyWyhiPVorOHwwKT4+Ml09NDUyNCx1PVorMTJ8MCxhcltaPj4yXT0xODgsYXJbbD4+Ml09MjA4LEpmKForNjR8KGFyW1orND4+Ml09MCksdSksYXJbWisxMzY+PjJdPTAsYXJbWisxNDA+PjJdPS0xLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKHUpLGFyW3U+PjJdPTQzNDAsYXJbKGI9Wis0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbWis2MD4+Ml09MjQsYXJbSj4+Ml09MCxhcltKKzQ+PjJdPTAsYXJbSis4Pj4yXT0wLFhlKHUsSiksKDB8dHJbSisxMT4+MF0pPDAmJnZ1KDB8YXJbSj4+Ml0pLEo9MHxXZSgwfFBmKDB8V2UoMHx4ZigwfFdlKDB8eGYoMHxXZShmPVorOHwwLDMxNzMwLDE3KSxHKSwzMDE3MCwxKSxzKSwzMTc0OCwxKSxkKSwzMTc1MCwxNyksV2UoMHxMZihKLCgwfGFyW00+PjJdKS0oMHxhcltjPj4yXSk+PjIpLDMxNzY4LDIwKSxJZShrLHUpLG9vKEEsMiwxMTksayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLGFyW1o+PjJdPTQ1MDQsYXJbbD4+Ml09NDU0NCxhcltmPj4yXT00NTI0LGFyW3U+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKHUpLGJmKGwpfXdoaWxlKDApOzB8KGM9MHxhcltjPj4yXSkmJigoMHwoZj0wfGFyW00+PjJdKSkhPSgwfGMpJiYoYXJbTT4+Ml09ZisofigoZistNC1jfDApPj4+Mik8PDIpKSx2dShjKSl9ZWxzZXtmb3IoYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsYz0oYXJbcys4Pj4yXT0wKXxodSg2NCksYXJbcz4+Ml09YyxhcltzKzg+PjJdPS0yMTQ3NDgzNTg0LHU9MzE2MjksYj0obD1jKSsoYXJbcys0Pj4yXT00OCl8MDt0cltsPj4wXT0wfHRyW3U+PjBdLHU9dSsxfDAsKDB8KGw9bCsxfDApKTwoMHxiKTspO3RyW2MrNDg+PjBdPTAsb28oQSwyLDExMyxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSl9VXx8ZHUoVCl9dXI9KDA8PSgwfHRyWyhjPW8rOHwwKSsxMT4+MF0pfHx2dSgwfGFyW2M+PjJdKSxhKX1mdW5jdGlvbiBJbChBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzY0fDAsYz1vKzMyfDAsbj1vKzQ0fDAsbD1vKzIwfDAsZj1vLHU9MHxhclsoZXw9MCkrNjA+PjJdLGE9MHxhclt1Kzc2Pj4yXSwodD0wPT0oMHwodT0wfGFyW3UrODA+PjJdKSkpfHxidSh1KSxhKXtpZihmbyhuLGEsciwxNjg0NjMwODg3KSxjPTQrbnwwLGE9MHxhcltuPj4yXSw0IT0oKDB8YXJbYz4+Ml0pLWF8MCkpe2ZvcihhcltsPj4yXT0wLGFyW2wrND4+Ml09MCxhPShhcltsKzg+PjJdPTApfGh1KDQ4KSxhcltsPj4yXT1hLGFyW2wrOD4+Ml09LTIxNDc0ODM2MDAsZT0zMTU4MSxpPShyPWEpKyhhcltsKzQ+PjJdPTQ3KXwwO3RyW3I+PjBdPTB8dHJbZT4+MF0sZT1lKzF8MCwoMHwocj1yKzF8MCkpPCgwfGkpOyk7dHJbYSs0Nz4+MF09MCxvbyhBLDIsMTE5LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKX1lbHNlIFhsKGYsZSwwfGFyW2E+PjJdLGksMSwwKSxpPTB8YXJbKGU9ZikrND4+Ml0sYXJbKGw9QSk+PjJdPWFyW2U+PjJdLGFyW2wrND4+Ml09aSxsPWYrOHwwLGFyWyhBPUErOHwwKT4+Ml09YXJbbD4+Ml0sYXJbQSs0Pj4yXT1hcltsKzQ+PjJdLGFyW0ErOD4+Ml09YXJbbCs4Pj4yXTswfChhPTB8YXJbbj4+Ml0pJiYoKDB8KHI9MHxhcltjPj4yXSkpIT0oMHxhKSYmKGFyW2M+PjJdPXIrKH4oKHIrLTQtYXwwKT4+PjIpPDwyKSksdnUoYSkpfWVsc2V7Zm9yKGFyW2M+PjJdPTAsYXJbYys0Pj4yXT0wLGE9KGFyW2MrOD4+Ml09MCl8aHUoNjQpLGFyW2M+PjJdPWEsYXJbYys4Pj4yXT0tMjE0NzQ4MzU4NCxlPTMxNTMyLGk9KHI9YSkrKGFyW2MrND4+Ml09NDgpfDA7dHJbcj4+MF09MHx0cltlPj4wXSxlPWUrMXwwLCgwfChyPXIrMXwwKSk8KDB8aSk7KTt0clthKzQ4Pj4wXT0wLG9vKEEsMiwxMTMsYyksKDB8dHJbYysxMT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pfXVyPSh0fHxkdSh1KSxvKX1mdW5jdGlvbiBDbChBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MDtpZih1cj0obD11cikrMjg4fDAsWD1sKzE2OHwwLHM9bCsyNjR8MCxhPWwrMjc2fDAsdz1sKzIzMnwwLG89bCsxNDR8MCxkPWwrMjIwfDAsaz0oVz1sKSsyMDh8MCxuPWwrMjAwfDAsdD1sKzE4OHwwLFY9MHxhclsoZXw9MCkrNjA+PjJdLHU9MHxhcltWKzc2Pj4yXSwoYz0wPT0oMHwoVj0wfGFyW1YrODA+PjJdKSkpfHxidShWKSx1KXtmbyhhLHUsciwxNjg0NjMwODg3KSxhclsoST13KzIwfDApPj4yXT0wLGFyWyhDPXcrMjR8MCk+PjJdPTAsZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wO2Zvcih1cj0obj11cikrMjA4fDAsdT1uKzE5MnwwLHQ9KGY9bikrMzJ8MCxiPW4rNDh8MCxzPW4rMjB8MCxvPTB8aHUoMzIpLGFyW3Q+PjJdPW8sYXJbdCs4Pj4yXT0tMjE0NzQ4MzYxNixjPTMwMDg4LGw9KGE9bykrKGFyW3QrND4+Ml09MjkpfDA7dHJbYT4+MF09MHx0cltjPj4wXSxjPWMrMXwwLCgwfChhPWErMXwwKSk8KDB8bCk7KTt0cltvKzI5Pj4wXT0wLG9vKGYsMiwxMTgsdCksKDB8dHJbdCsxMT4+MF0pPDAmJnZ1KDB8YXJbdD4+Ml0pLGw9MHxhcltpPj4yXSxvPSgwfGFyW2krND4+Ml0pLWx8MDtkb3tpZihvPj4+MDwxMCl3PTB8YXJbKGk9ZikrND4+Ml0sYXJbKHI9QSk+PjJdPWFyW2k+PjJdLGFyW3IrND4+Ml09dyxyPUErOHwwLEE9Zis4fDAsYXJbcj4+Ml09YXJbQT4+Ml0sYXJbcis0Pj4yXT1hcltBKzQ+PjJdLGFyW3IrOD4+Ml09YXJbQSs4Pj4yXSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTA7ZWxzZXtpZih3PTB8dHJbbD4+MF0sdHJbZT4+MF09dyx0PTB8dHJbbCsxPj4wXSx0cltlKzE+PjBdPXQsdzw8MjQ+PjI0KXtvPWIrNjR8MCxhclsoYz1iKzh8MCk+PjJdPTQ1MjQsYT1iKzEyfDAsYXJbYj4+Ml09MTg4LGFyW28+PjJdPTIwOCxKZihiKzY0fChhcltiKzQ+PjJdPTApLGEpLGFyW2IrMTM2Pj4yXT0wLGFyW2IrMTQwPj4yXT0tMSxhcltiPj4yXT00NTA0LGFyW28+PjJdPTQ1NDQsYXJbYz4+Ml09NDUyNCxTZihhKSxhclthPj4yXT00MzQwLGFyWyhjPWIrNDR8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxhcltjKzEyPj4yXT0wLGFyW2IrNjA+PjJdPTI0LGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCxYZShhLHUpLCgwfHRyW3UrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSxyPTB8V2UodD1iKzh8MCwzMDExOCwyNyksV2UoMHxQZihyLDB8Y3JbZT4+MF0pLDMwMTQ2LDIzKSxJZShzLGEpLG9vKEEsNCwzMDAyLHMpLCgwfHRyW3MrMTE+PjBdKTwwJiZ2dSgwfGFyW3M+PjJdKSxhcltiPj4yXT00NTA0LGFyW28+PjJdPTQ1NDQsYXJbdD4+Ml09NDUyNCxhclthPj4yXT00MzQwLCgwfHRyW2MrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSxrZihhKSxiZihvKTticmVha31pZigoKDEwKygodT0oYj10PDwxJjIpKzI8PDI0Pj4yNCk8PDEmMjU1KSYyNTUpKygwfGJyKHI8PDEsdz0yNTUmdSkpfDApPj4+MD5vPj4+MCl7dz0wfGFyWyhpPWYpKzQ+PjJdLGFyWyhyPUEpPj4yXT1hcltpPj4yXSxhcltyKzQ+PjJdPXcscj1BKzh8MCxBPWYrOHwwLGFyW3I+PjJdPWFyW0E+PjJdLGFyW3IrND4+Ml09YXJbQSs0Pj4yXSxhcltyKzg+PjJdPWFyW0ErOD4+Ml0sYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wO2JyZWFrfWZvcihvcltlKzI+PjFdPWNyW2wrMz4+MF18Y3JbbCsyPj4wXTw8OCxvcltlKzQ+PjFdPWNyW2wrNT4+MF18Y3JbbCs0Pj4wXTw8OCxvcltlKzY+PjFdPWNyW2wrNz4+MF18Y3JbbCs2Pj4wXTw8OCxvcltlKzg+PjFdPWNyW2wrOT4+MF18Y3JbbCs4Pj4wXTw8OCxhPTI1NSZiLHQ9MCxvPXcsYz0xMDtvPW8rLTF8MCx0PWNyW2wrYz4+MF18dDw8OCxvOyljPWMrMXwwO2ZvcihrPTEyfGEsYXJbZSsxMj4+Ml09dCxvPWsrYXwwLGM9MCx0PXcsYT1rO3Q9dCstMXwwLGM9Y3JbbCthPj4wXXxjPDw4LHQ7KWE9YSsxfDA7aWYobD1vKzJ8MCxhcltlKzE2Pj4yXT1jLGs9ZSsyMHwwLHI+Pj4wPD0obz0oYz0wfGFyWyh0PWUrMjR8MCk+PjJdKS0oYT0wfGFyW2s+PjJdKT4+Myk+Pj4wPyhyPj4+MDxvPj4+MCYmKDB8YykhPSgwfChkPWErKHI8PDMpfDApKSYmKGFyW3Q+PjJdPWMrKH4oKGMrLTgtZHwwKT4+PjMpPDwzKSksMHxyJiYoaD0yNSkpOih3bChrLHItb3wwKSxoPTI1KSwyNT09KDB8aCkpZm9yKGQ9fihlPTEyODw8KHU8PDMmMjU1KS04KSxzPTQrKGI8PDEmMjU1KSYyNTUsYj0wfGFyW2k+PjJdLHU9MDs7KXtmb3IoYT0wLHQ9dyxvPWw7dD10Ky0xfDAsYT1jcltiK28+PjBdfGE8PDgsdDspbz1vKzF8MDtmb3IoYz0wfGFyW2s+PjJdLGFyW2MrKHU8PDMpPj4yXT0oYSZkKS0oMD09KGEmZXwwKT8wOmUpLGE9KG89dykrbHwodD0wKTtvPW8rLTF8MCx0PWNyW2IrYT4+MF18dDw8OCxvOylhPWErMXwwO2lmKGFyW2MrKHU8PDMpKzQ+PjJdPSh0JmQpLSgwPT0odCZlfDApPzA6ZSksKDB8KHU9dSsxfDApKT09KDB8cikpYnJlYWs7bD1zK2x8MH13PTB8YXJbKGk9NTY1OTIpKzQ+PjJdLGFyWyhyPUEpPj4yXT1hcltpPj4yXSxhcltyKzQ+PjJdPXcseXUoQSs4fDAsNTY2MDApfX13aGlsZSgwKTt1cj0oMDw9KDB8dHJbKHQ9Zis4fDApKzExPj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLG4pfShvLHcsKChhclt3KzI4Pj4yXT0wKXxhclsoRz00K2F8MCk+PjJdKS0oMHxhclthPj4yXSk+PjIsZik7QTpkb3tpZigwfGFyW28+PjJdKVc9MHxhclsoZT1vKSs0Pj4yXSxhclsoRj1BKT4+Ml09YXJbZT4+Ml0sYXJbRis0Pj4yXT1XLEY9OCtvfDAsYXJbKEE9QSs4fDApPj4yXT1hcltGPj4yXSxhcltBKzQ+PjJdPWFyW0YrND4+Ml0sYXJbQSs4Pj4yXT1hcltGKzg+PjJdLGFyW0Y+PjJdPTAsYXJbRis0Pj4yXT0wLGFyW0YrOD4+Ml09MDtlbHNle2lmKHk9dysyMHwwLCgoMHxhcltHPj4yXSktKDB8YXJbYT4+Ml0pPj4yfDApIT0oKDB8YXJbQz4+Ml0pLSgwfGFyW3k+PjJdKT4+M3wwKSl7Zm9yKGFyW2Q+PjJdPTAsYXJbZCs0Pj4yXT0wLHU9KGFyW2QrOD4+Ml09MCl8aHUoODApLGFyW2Q+PjJdPXUsYXJbZCs4Pj4yXT0tMjE0NzQ4MzU2OCxmPTMxNDYyLGI9KHI9dSkrKGFyW2QrND4+Ml09NjkpfDA7dHJbcj4+MF09MHx0cltmPj4wXSxmPWYrMXwwLCgwfChyPXIrMXwwKSk8KDB8Yik7KTtpZih0clt1KzY5Pj4wXT0wLG9vKEEsMiwxMjEsZCksMDw9KDB8dHJbZCsxMT4+MF0pKWJyZWFrO3Z1KDB8YXJbZD4+Ml0pO2JyZWFrfWlmKGQ9MHxhclt3KzEyPj4yXSxoPTB8YXJbdysxNj4+Ml0sZD4+PjA8KDB8YXJbKHM9ZSs3MnwwKT4+Ml0pPj4+MCYmaD4+PjA8KDB8YXJbZSs3Nj4+Ml0pPj4+MCl7aWYoZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKHU9ZisxMnwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMDAyNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTkscz1mKzUyfDAsYXJbKGI9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW3M+PjJdPTAsYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzKzEyPj4yXT0wLGFyW2YrNjg+PjJdPWIsYj11LHA9KHM9ZikrMTZ8MCxidShmKSxzdShmKSxyPTB8YXJbcD4+Ml0sYXJbdT4+Ml09YixhcltwPj4yXT1zLDB8ciYma3UociksZHUoZiksYXJbaT4+Ml09YixyPTB8YXJbKHA9aSs0fDApPj4yXSxhcltwPj4yXT1zLHI/KGR1KHIpLHU9MHxhclsocD1pKT4+Ml0pOnA9aSx5byh1LGQsaCwxLDMpLEJvKDB8YXJbcD4+Ml0sMyxkLGgsOCksQm8oMHxhcltwPj4yXSw0LGQsaCw4KSxCbygwfGFyW3A+PjJdLDUsZCxoLDgpLGxsKFgsMHxhcltwPj4yXSwwfG9yW3crMj4+MV0sMHxvclt3KzQ+PjFdLDB8b3Jbdys2Pj4xXSwwfG9yW3crOD4+MV0pLHU9MHxhclsoWj1YKSs0Pj4yXSxhclsoZz1vKT4+Ml09YXJbWj4+Ml0sYXJbZys0Pj4yXT11LHU9WCs4fDAsKDB8dHJbKFo9KGc9OCtvfDApKzExfDApPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbMTIrbz4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hclt1Pj4yXSxhcltnKzQ+PjJdPWFyW3UrND4+Ml0sYXJbZys4Pj4yXT1hclt1Kzg+PjJdLDB8YXJbbz4+Ml0pe2U9MHxhclsoWD1vKSs0Pj4yXSxhclsoVz1BKT4+Ml09YXJbWD4+Ml0sYXJbVys0Pj4yXT1lLGFyWyhBPUErOHwwKT4+Ml09YXJbZz4+Ml0sYXJbQSs0Pj4yXT1hcltnKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZys4Pj4yXSxhcltnPj4yXT0wLGFyW2crND4+Ml09MCxhcltnKzg+PjJdPTA7YnJlYWt9dT0wfGFyW2E+PjJdO2U6ZG97aWYoKDB8YXJbRz4+Ml0pPT0oMHx1KSlFPShCPUEpKzh8MDtlbHNle2I9WCs0fDAsZD0xMitvfDAsaz00K258MCxpPVcrNHwwLGg9MTErdHwwLHc9cz1XKzh8MCx2PUErOHwwLG09NCtvfDAsZj0wO3I6Zm9yKDs7KXthcltYPj4yXT0wLFhsKFcsZSwoYXJbYj4+Ml09MCl8YXJbdSsoZjw8Mik+PjJdLFgsMSwwKSx1PTB8YXJbKEY9VykrND4+Ml0sYXJbKHI9byk+PjJdPWFyW0Y+PjJdLGFyW3IrND4+Ml09dSwoMHx0cltaPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbZD4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hcltzPj4yXSxhcltnKzQ+PjJdPWFyW3MrND4+Ml0sYXJbZys4Pj4yXT1hcltzKzg+PjJdO2k6ZG97aWYoKDB8YXJbbz4+Ml0pPT0oMHxhclsxNDE0OF0pKXthcltuPj4yXT0wLG1lKFcsWCwxLDMsbixhcltrPj4yXT0wKSx1PTB8YXJbVz4+Ml0sRj0wfGFyW2k+PjJdLGFyW1c+PjJdPTAsYXJbaT4+Ml09MCxhcltYPj4yXT11LHU9MHxhcltiPj4yXSxhcltiPj4yXT1GO2Rve2lmKDB8dSl7aWYoZHUodSksISh1PTB8YXJbaT4+Ml0pKWJyZWFrO2R1KHUpfX13aGlsZSgwKTtpZigwfCh1PTB8YXJbaz4+Ml0pJiZkdSh1KSwhKDB8YXJbWD4+Ml0pKXtpZihhclt0Pj4yXT0wLGFyWzQrdD4+Ml09MCxhcls4K3Q+PjJdPTAsb28oQSw0LDMwMDMsdCksMDw9KDB8dHJbaD4+MF0pKXt1PTE7YnJlYWt9dnUoMHxhclt0Pj4yXSksdT0xO2JyZWFrfWlmKHU9Rj0wfGFyW3k+PjJdLCgwfGFyW0M+PjJdKS1GPj4zPj4+MDw9Zj4+PjApYnJlYWsgcjt1bChXLDB8YXJbcD4+Ml0sWCwwfGFyW3UrKGY8PDMpPj4yXSwwfGFyW3UrKGY8PDMpKzQ+PjJdKSxyPTB8YXJbKHU9VykrND4+Ml0sYXJbKEY9byk+PjJdPWFyW3U+PjJdLGFyW0YrND4+Ml09ciwoMHx0cltaPj4wXSk8MD8odHJbYXJbZz4+Ml0+PjBdPTAsYXJbZD4+Ml09MCk6KHRyW2c+PjBdPTAsdHJbWj4+MF09MCksQ3UoZywwKSxhcltnPj4yXT1hclt3Pj4yXSxhcltnKzQ+PjJdPWFyW3crND4+Ml0sYXJbZys4Pj4yXT1hclt3Kzg+PjJdO2Y6ZG97c3dpdGNoKDB8YXJbbz4+Ml0pe2Nhc2UgMDp1PTA7YnJlYWsgaTtjYXNlIDI6aWYoMTIyIT0oMHxhclttPj4yXSkpYnJlYWsgZjtGPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyh1PW8pPj4yXT1hcltyPj4yXSxhclt1KzQ+PjJdPUYsRXUoZyw1NjYwMCksdT0wO2JyZWFrIGl9fXdoaWxlKDApO0Y9MHxhclsocj1vKSs0Pj4yXSxhclsodT1BKT4+Ml09YXJbcj4+Ml0sYXJbdSs0Pj4yXT1GLGFyW3Y+PjJdPWFyW2c+PjJdLGFyW3YrND4+Ml09YXJbZys0Pj4yXSxhclt2Kzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLHU9MX1lbHNlIEY9MHxhclsocj1vKSs0Pj4yXSxhclsodT1BKT4+Ml09YXJbcj4+Ml0sYXJbdSs0Pj4yXT1GLGFyW3Y+PjJdPWFyW2c+PjJdLGFyW3YrND4+Ml09YXJbZys0Pj4yXSxhclt2Kzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLHU9MX13aGlsZSgwKTtpZigwfChyPTB8YXJbYj4+Ml0pJiZkdShyKSxmPWYrMXwwLDB8dSlicmVhayBBO2lmKHU9MHxhclthPj4yXSxmPj4+MD49KDB8YXJbRz4+Ml0pLXU+PjI+Pj4wKXtCPUEsRT12O2JyZWFrIGV9fXNyKDMwMTcyLDMwMjAzLDM4MiwzMDIxOSl9fXdoaWxlKDApO0E9MHxhclsoVz1vKSs0Pj4yXSxhclsoRj1CKT4+Ml09YXJbVz4+Ml0sYXJbRis0Pj4yXT1BLGFyW0U+PjJdPWFyW2c+PjJdLGFyW0UrND4+Ml09YXJbZys0Pj4yXSxhcltFKzg+PjJdPWFyW2crOD4+Ml0sYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wO2JyZWFrfXI9Vys2NHwwLGFyWyhiPVcrOHwwKT4+Ml09NDUyNCxmPVcrMTJ8MCxhcltXPj4yXT0xODgsYXJbcj4+Ml09MjA4LEpmKFcrNjR8KGFyW1crND4+Ml09MCksZiksYXJbVysxMzY+PjJdPTAsYXJbVysxNDA+PjJdPS0xLGFyW1c+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhcltiPj4yXT00NTI0LFNmKGYpLGFyW2Y+PjJdPTQzNDAsYXJbKGI9Vys0NHwwKT4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLGFyW2IrMTI+PjJdPTAsYXJbVys2MD4+Ml09MjQsYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsYXJbWCs4Pj4yXT0wLFhlKGYsWCksKDB8dHJbWCsxMT4+MF0pPDAmJnZ1KDB8YXJbWD4+Ml0pLEY9MHxXZSgwfExmKDB8V2UoMHxMZigwfFdlKHU9Vys4fDAsMzAzNjYsMTEpLGQpLDMwMTcwLDEpLGgpLDMwMzc4LDMyKSxGPTB8V2UoMHxMZihGLDB8YXJbcz4+Ml0pLDMwMTcwLDEpLFdlKDB8TGYoRiwwfGFyW2UrNzY+PjJdKSwzMDA4NiwxKSxJZShrLGYpLG9vKEEsNiwxZTMsayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pLGFyW1c+PjJdPTQ1MDQsYXJbcj4+Ml09NDU0NCxhclt1Pj4yXT00NTI0LGFyW2Y+PjJdPTQzNDAsKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGtmKGYpLGJmKHIpfX13aGlsZSgwKTsoMHx0clsodT04K298MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSwwfCh1PTB8YXJbST4+Ml0pJiYoKDB8KHI9MHxhcltDPj4yXSkpIT0oMHx1KSYmKGFyW0M+PjJdPXIrKH4oKHIrLTgtdXwwKT4+PjMpPDwzKSksdnUodSkpLDB8KHU9MHxhclthPj4yXSkmJigoMHwocj0wfGFyW0c+PjJdKSkhPSgwfHUpJiYoYXJbRz4+Ml09cisofigocistNC11fDApPj4+Mik8PDIpKSx2dSh1KSl9ZWxzZXtmb3IoYXJbcz4+Ml09MCxhcltzKzQ+PjJdPTAsdT0oYXJbcys4Pj4yXT0wKXxodSg2NCksYXJbcz4+Ml09dSxhcltzKzg+PjJdPS0yMTQ3NDgzNTg0LGY9MzE0MTMsYj0ocj11KSsoYXJbcys0Pj4yXT00OCl8MDt0cltyPj4wXT0wfHRyW2Y+PjBdLGY9ZisxfDAsKDB8KHI9cisxfDApKTwoMHxiKTspO3RyW3UrNDg+PjBdPTAsb28oQSwyLDExMyxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSl9dXI9KGN8fGR1KFYpLGwpfWZ1bmN0aW9uIEdsKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTA7aWYodXI9KGw9dXIpKzgwfDAsWj0oYz1sKSs1MnwwLGs9bCszNnwwLHQ9bCs0OHwwLG89bCszMnwwLGg9bCsyMHwwLGFyWyhnPWwrNjR8MCk+PjJdPTAsWGwoYyxlLHIsZywoYXJbKGE9Zys0fDApPj4yXT0wKXxhclszMisoMHxhcltpPj4yXSk+PjJdLDApLCgwfGFyW2M+PjJdKT09KDB8YXJbMTQxNDhdKSl7ZT0wfGFyW2k+PjJdLHM9MHxhcltlKzI0Pj4yXSxkPTB8YXJbZSsyOD4+Ml0scj0wfGFyW2c+PjJdLHU9MHxhcltyKzI0Pj4yXSxyPTB8YXJbcisyOD4+Ml0sKDB8dSk8PS0xJiZzcigzMmUzLDMwMjAzLDE1NDAsMzIwMTUpLCgwfHIpPD0tMSYmc3IoMzIwNDMsMzAyMDMsMTU0MSwzMjAxNSksbT0wfGFyW2UrMzY+PjJdLElvKFosZSksZT0wfGFyW2c+PjJdO0E6ZG97aWYoKDB8bSkhPSgwfGFyW2UrMzY+PjJdKSl7Zm9yKGFyW2s+PjJdPTAsYXJbays0Pj4yXT0wLGU9KGFyW2srOD4+Ml09MCl8aHUoNjQpLGFyW2s+PjJdPWUsYXJbays4Pj4yXT0tMjE0NzQ4MzU4NCx1PTMyMDU5LGI9KHI9ZSkrKGFyW2srND4+Ml09NTgpfDA7dHJbcj4+MF09MHx0clt1Pj4wXSx1PXUrMXwwLCgwfChyPXIrMXwwKSk8KDB8Yik7KTt0cltlKzU4Pj4wXT0wLG9vKEEsMiwxMjcsayksKDB8dHJbaysxMT4+MF0pPDAmJnZ1KDB8YXJbaz4+Ml0pfWVsc2V7Yj0wfGFyW1o+PjJdLG09Wis0fDA7ZTpkb3tpZigoMHxiKSE9KDB8bSkpe2lmKGs9KDB8KGs9cy1mfDApKTwoMHx1KT9rOnUsdz0wPCgwfCh2PSgwfCh2PWQtbnwwKSk8KDB8cik/djpyKSksISgoMHxmKTwoMHxzKSYoMHxuKTwoMHxkKSkpe0ZvKGUsZz0wfGFyW2IrMTY+PjJdLHQpLEZvKDB8YXJbaT4+Ml0sZyxvKSxhcltoPj4yXT0wLGFyW2grND4+Ml09MCxhcltoKzg+PjJdPTAsb28oQSwyLDExOCxoKSwoMHx0cltoKzExPj4wXSk8MCYmdnUoMHxhcltoPj4yXSk7YnJlYWsgQX1mb3IoOzspe2lmKHU9MHxGbyhlLHM9MHxhcltiKzE2Pj4yXSx0KSxlPTB8Rm8oMHxhcltpPj4yXSxzLG8pLHM9MHxicigoMjU1JigwfEdvKDB8YXJbZz4+Ml0sMykpKT4+PjMmMjU1LGspLHI9MHxHbygwfGFyW2c+PjJdLDMpLHcpZm9yKHI9ZSsoMHxicigoMjU1JnIpPj4+MyYyNTUsZikpfDAsZT0wO2hiKDB8KGg9cisoMHxicigwfGFyW28+PjJdLGUrbnwwKSl8MCksdSsoMHxicigwfGFyW3Q+PjJdLGUpKXwwLDB8cyksKDB8KGU9ZSsxfDApKTwoMHx2KTspO2lmKGU9MHxhcltiKzQ+PjJdKWZvcig7cj0wfGFyW2U+PjJdOyllPXI7ZWxzZSBpZihlPTB8YXJbKHI9Yis4fDApPj4yXSwoMHxhcltlPj4yXSkhPSgwfGIpKWZvcig7aD0wfGFyW3I+PjJdLGU9MHxhclsocj1oKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8aCk7KTtpZigoMHxlKT09KDB8bSkpYnJlYWsgZTtiPWUsZT0wfGFyW2c+PjJdfX19d2hpbGUoMCk7bj0wfGFyWyhmPTU2NTkyKSs0Pj4yXSxhclsoZz1BKT4+Ml09YXJbZj4+Ml0sYXJbZys0Pj4yXT1uLHl1KEErOHwwLDU2NjAwKX19d2hpbGUoMCk7Q28oWiwwfGFyW1orND4+Ml0pLCgwfHRyW2MrOCsxMT4+MF0pPDAmJnZ1KDB8YXJbYys4Pj4yXSl9ZWxzZSBnPTB8YXJbKG49YykrND4+Ml0sYXJbKFo9QSk+PjJdPWFyW24+PjJdLGFyW1orND4+Ml09ZyxaPWMrOHwwLGFyWyhBPUErOHwwKT4+Ml09YXJbWj4+Ml0sYXJbQSs0Pj4yXT1hcltaKzQ+PjJdLGFyW0ErOD4+Ml09YXJbWis4Pj4yXSxhcltaPj4yXT0wLGFyW1orND4+Ml09MCxhcltaKzg+PjJdPTA7dXI9KChlPTB8YXJbYT4+Ml0pJiZkdShlKSxsKX1mdW5jdGlvbiBWbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYodXI9KGY9dXIpKzgwfDAsaT1mKzc2fDAsYj1mKzcyfDAsZD0ocz1mKSs2NHwwLFlBKG49ZiszMnwwLHU9MHxhclsoZXw9MCk+PjJdLCgwfGFyWyh0PWUrNHwwKT4+Ml0pLXV8MCksKDB8KHU9MHxRQShuLDMyKSkpPD0oMHwobj0oKDB8YXJbbisyND4+Ml0pLy04fDApKygoMHxhcltuKzQ+PjJdKS0oMHxhcltuKzg+PjJdKSl8MCkpKXJldHVybiBiPTB8YXJbKGI9cj01NjU5Mik+PjJdLHI9MHxhclsocj1yKzR8MCk+PjJdLGFyWyhzPWQ9QSk+PjJdPWIsYXJbKGQ9ZCs0fDApPj4yXT1yLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9Zik7aWYoWUEocywodT0wfGFyW2U+PjJdKStufDAsKDB8YXJbdD4+Ml0pLSh1K24pfDApLFFBKHMsMzIpLHU9KDB8UUEocyw4KSk+Pj4xLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKCgwfChpPTB8YXJbKHI9KEF8PTApKzI0fDApPj4yXSkpPCgwfGUpKXtpPTY0LWl8MCxuPUErOHwwO0E6ZG97aWYoNzwoMHxpKSl7dD1BKzE2fDAsZj0wfGFyW24+PjJdO2Rve2lmKCFmKWJyZWFrIEE7Yz0wfGFyW0E+PjJdLGFyW0E+PjJdPWMrMSxjPTB8Y3JbYz4+MF0sZj1mKy0xfDAsYXJbbj4+Ml09ZixjPTB8ZGIoMHxjLDAsMHwoaT1pKy04fDApKSxhPWFyWyhsPXQpKzQ+PjJdfEQsYXJbKG89dCk+PjJdPWFyW2w+PjJdfGMsYXJbbys0Pj4yXT1hfXdoaWxlKDc8KDB8aSkpfX13aGlsZSgwKTtpPTY0LWl8MCxhcltyPj4yXT1pfWM9MHxkYigwfGFyWyhjPWw9QSsxNnwwKT4+Ml0sMHxhcltjKzQ+PjJdLDB8ZSksYXJbbD4+Ml09YyxhcltsKzQ+PjJdPUQsYXJbcj4+Ml09aS1lfShzLDgpLCgoMjU1JnUpLTM5fDApPj4+MDwyJiYodT0wfFFBKHMsOCksUUEocyw4KSwxNzc9PSgyNTUmdXwwKSkpe2Zvcih1PTB8aHUoODApLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjQ0OCx0PShuPWU9dSsxNnwwKSs2NHwwOygwfChuPW4rNHwoYXJbbj4+Ml09MCkpKTwoMHx0KTspO2FyW2U+PjJdPTY0NzYsbD1lLHRyWyhjPXUpKzI0Pj4wXT0xLGFyWyhlPXUrNjh8MCk+PjJdPTAsYXJbdSs3Mj4+Ml09MCxrPTI1NSYoKGFyW3UrNzY+PjJdPTApfFFBKHMsMSkpLHRyWyhuPXUrMjV8MCk+PjBdPWssaz0yNTUmKDB8UUEocywxKSksdHJbKHQ9dSsyNnwwKT4+MF09ayxrPTI1NSYoMHxRQShzLDEpKSx0clsobz11KzI3fDApPj4wXT1rLGs9MjU1JigwfFFBKHMsMSkpLHRyWyhhPXUrMjh8MCk+PjBdPWssREEocyxpKSxhclt1KzY0Pj4yXT1hcltpPj4yXSwoMCE9KDB8dHJbbz4+MF0pfHwwfHRyW2E+PjBdKSYmKERBKHMsYiksYXJbZT4+Ml09YXJbYj4+Ml0pLDB8dHJbbj4+MF0mJihoPStGbChzKSxRW3UrMzI+PjNdPWgpLDB8dHJbdD4+MF0mJihoPStGbChzKSxRW3UrNDA+PjNdPWgpLDB8dHJbbz4+MF0mJihoPStGbChzKSxRW3UrNDg+PjNdPWgpLDB8dHJbYT4+MF0mJihoPStGbChzKSxRW3UrNTY+PjNdPWgpLGFyW2Q+PjJdPWwsYXJbKHQ9ZCs0fDApPj4yXT1jLCgwfChuPTB8YXJbKGU9cis0fDApPj4yXSkpPT0oMHxhcltyKzg+PjJdKT9mdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2Y9MHxhclsodT00KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLDUzNjg3MDkxMTwodD0xKyhyPWYtKGM9bik+PjMpfDApPj4+MCYmemwoKTtsPSgwfGFyWyhpPUErOHwwKT4+Ml0pLW58MCxvPWw+PjIsbz1sPj4zPj4+MDwyNjg0MzU0NTU/bz4+PjA8dD4+PjA/dDpvOjUzNjg3MDkxMTtkb3tpZihvKXtpZighKDUzNjg3MDkxMTxvPj4+MCkpe2E9MHxodShvPDwzKTticmVha31adSh1PTB8WCg4KSw0NDUxOSksYXJbdT4+Ml09MTc2NjAsSSgwfHUsNDAxNiw0MjgpfWVsc2UgYT0wfXdoaWxlKDApO2w9YSsobzw8Myl8MCxhclsodD1uPWErKHI8PDMpfDApPj4yXT1hcltlPj4yXSxvPTB8YXJbZSs0Pj4yXSxvPShhclthKyhyPDwzKSs0Pj4yXT1vKT8oYnUobyksZj0wfGFyW3U+PjJdLDB8YXJbQT4+Ml0pOmM7aWYoYT1uKzh8MCwoMHxmKSE9KDB8bykpe2Zvcig7Zj0oYz1mKSstOHwwLGFyW24rLTg+PjJdPWFyW2Y+PjJdLGM9YystNHwwLGFyW24rLTQ+PjJdPWFyW2M+PjJdLGFyW2Y+PjJdPTAsYXJbYz4+Ml09MCx0PW49dCstOHwwLCgwfGYpIT0oMHxvKTspO289MHxhcltBPj4yXSxmPTB8YXJbdT4+Ml19aWYoYXJbQT4+Ml09dCxhclt1Pj4yXT1hLGFyW2k+PjJdPWwsKDB8ZikhPSgwfCh0PW8pKSlmb3IoO249MHxhcltmKy00Pj4yXSxmPWYrLTh8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO2lmKCFvKXJldHVybjt2dShvKX0ocixkKTooYXJbbj4+Ml09bCxidShhcltuKzQ+PjJdPXUpLGFyW2U+PjJdPTgrKDB8YXJbZT4+Ml0pKSwwfChlPTB8YXJbdD4+Ml0pJiZkdShlKX1zPTB8YXJbKHM9ZD01NjU5Mik+PjJdLGQ9MHxhclsoZD1kKzR8MCk+PjJdLGFyWyhyPWs9QSk+PjJdPXMsYXJbKGs9ays0fDApPj4yXT1kLHl1KGs9QSs4fDAsNTY2MDApLHVyPWZ9ZnVuY3Rpb24gRmwoQSl7dmFyIGUscixpLGY9MCxuPTAsdD0wO3JldHVybiBlPTB8UUEoQXw9MCwxKSxyPTB8UUEoQSw3KSxpPTB8UUEoQSw1KSxBPTB8UUEoQSxmPTEraXwwKSwwPCgwfHIpPyh0PStBZigxLHItMzF8MCksbj0tKHQqPSgwfEEpL0FmKDEsZikrMSksKyhuPShmPTA9PSgwfGUpKT90Om4pKToodD0tKG49KDB8QSkqQWYoMSwtMzEtaXwwKSksKyh0PShmPTA9PSgwfGUpKT9uOnQpKX1mdW5jdGlvbiBSbChBKXtBfD0wO3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MDtpZig1NzI4ND09KDB8KHI9MHxhclsxNDMyMF0pKSlyZXR1cm4oQT0wKXxBO249ZT0wO2Rve2lmKHQ9MHxhcltyKzE2Pj4yXSxlPShmPSgwfG4pPCgwfChpPTB8amJbMTI3JmFyW3QrMTY+PjJdXShBKSkpKT90OmUsbj1mP2k6bixpPTB8YXJbcis0Pj4yXSlmb3Iocj1pO2k9MHxhcltyPj4yXTspcj1pO2Vsc2UgaWYoZj0wfGFyWyhpPXIrOHwwKT4+Ml0sKDB8YXJbZj4+Ml0pPT0oMHxyKSlyPWY7ZWxzZSBmb3IoO3Q9MHxhcltpPj4yXSxyPTB8YXJbKGk9dCs4fDApPj4yXSwoMHxhcltyPj4yXSkhPSgwfHQpOyk7fXdoaWxlKDU3Mjg0IT0oMHxyKSk7cmV0dXJuIDB8ZX1mdW5jdGlvbiBObChBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7bz0wfGFyWyhiPShBfD0wKSs0fDApPj4yXSxyPWY9MHxhcltBPj4yXSwxMTkzMDQ2NDc8KG49KGw9KCh0PW8pLWZ8MCkvMzZ8MCkrMXwwKT4+PjAmJnpsKCksYT0odT0oKDB8YXJbKGk9QSs4fDApPj4yXSktZnwwKS8zNnwwKTw8MSxhPXU+Pj4wPDU5NjUyMzIzP2E+Pj4wPG4+Pj4wP246YToxMTkzMDQ2NDc7ZG97aWYoYSl7aWYoISgxMTkzMDQ2NDc8YT4+PjApKXtjPTB8aHUoMzYqYXwwKTticmVha31adShiPTB8WCg4KSw0NDUxOSksYXJbYj4+Ml09MTc2NjAsSSgwfGIsNDAxNiw0MjgpfWVsc2UgYz0wfXdoaWxlKDApO2lmKHU9YysoMzYqYXwwKXwwLGFyWyhmPW49YysoMzYqbHwwKXwwKT4+Ml09YXJbZT4+Ml0sYXJbbis0Pj4yXT1hcltlKzQ+PjJdLGFyW24rOD4+Ml09YXJbZSs4Pj4yXSxhcltuKzEyPj4yXT1hcltlKzEyPj4yXSxzPWUrMTZ8MCxhcltjKygzNipsfDApKzE2Pj4yXT1hcltzPj4yXSxhPWUrMjB8MCxhcltjKygzNipsfDApKzIwPj4yXT1hclthPj4yXSxhcltzPj4yXT0wLGE9YysoMzYqbHwoYXJbYT4+Ml09MCkpKzI0fDAsbD1lKzI0fDAsYXJbYT4+Ml09YXJbbD4+Ml0sYXJbYSs0Pj4yXT1hcltsKzQ+PjJdLGFyW2ErOD4+Ml09YXJbbCs4Pj4yXSxhPW4rMzZ8MCwoMHx0KSE9KDB8cikpe2Zvcig7dD0obD10KSstMzZ8MCxhclsoZT1uKy0zNnwwKT4+Ml09YXJbdD4+Ml0sYXJbZSs0Pj4yXT1hclt0KzQ+PjJdLGFyW2UrOD4+Ml09YXJbdCs4Pj4yXSxhcltlKzEyPj4yXT1hclt0KzEyPj4yXSxlPWwrLTIwfDAsYXJbbistMjA+PjJdPWFyW2U+PjJdLHM9bCstMTZ8MCxhcltuKy0xNj4+Ml09YXJbcz4+Ml0sYXJbZT4+Ml09MCxsPWwrLTEyfChhcltzPj4yXT0wKSxhclsocz1uKy0xMnwwKT4+Ml09YXJbbD4+Ml0sYXJbcys0Pj4yXT1hcltsKzQ+PjJdLGFyW3MrOD4+Ml09YXJbbCs4Pj4yXSxmPW49ZistMzZ8MCwoMHx0KSE9KDB8cik7KTtvPTB8YXJbQT4+Ml19aWYoYXJbQT4+Ml09ZixmPTB8YXJbYj4+Ml0sYXJbYj4+Ml09YSxhcltpPj4yXT11LCgwfGYpIT0oMHwodD1vKSkpZm9yKDtuPTB8YXJbZistMTY+PjJdLGY9ZistMzZ8MCwwfG4mJmR1KG4pLCgwfGYpIT0oMHx0KTspO28mJnZ1KG8pfWZ1bmN0aW9uIF9sKEEsZSxyLGksZixuLHQsbyxhLGMpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wO3ZhciBsLHUsYjtpZih1PXVyPShiPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxsPTEyK3V8MCxBfD0wKXtpZihyPTB8dW4ociw2MDk2OCksZSl7Zm9yKGZzWzYzJmFyWzQ0KygwfGFyW3I+PjJdKT4+Ml1dKGwsciksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclszMisoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8oaT0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4oaSxsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KX1lbHNle2Zvcihmc1s2MyZhcls0MCsoMHxhcltyPj4yXSk+PjJdXShsLHIpLEE9MHxhcltsPj4yXSx0cltpPj4wXT1BLHRyW2krMT4+MF09QT4+OCx0cltpKzI+PjBdPUE+PjE2LHRyW2krMz4+MF09QT4+MjQsZnNbNjMmYXJbMjgrKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSwoMHx0clsoQT1hKzgrM3wwKT4+MF0pPDA/KGk9MHxhclthPj4yXSxhcltsPj4yXT0wLGxuKGksbCksYXJbYSs0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihhLGwpLHRyW0E+PjBdPTApLE11KGEsMCksYXJbYT4+Ml09YXJbdT4+Ml0sYXJbYSs0Pj4yXT1hcls0K3U+PjJdLGFyW2ErOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7UXUodSl9Zm9yKEE9MHxqYlsxMjcmYXJbMTIrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbZj4+Ml09QSxBPTB8amJbMTI3JmFyWzE2KygwfGFyW3I+PjJdKT4+Ml1dKHIpLGFyW24+PjJdPUEsZnNbNjMmYXJbMjArKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSxBPSgoMHx0clsoQT10KzExfDApPj4wXSk8MD8oQT0wfGFyW3Q+PjJdLHRyW2w+PjBdPTAsUWYoQSxsKSxhclt0KzQ+PjJdPTApOih0cltsPj4wXT0wLFFmKHQsbCksdHJbQT4+MF09MCksdCksQ3UodCwwKSxhcltBPj4yXT1hclt1Pj4yXSxhcltBKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbQSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtmb3IoQnUodSksZnNbNjMmYXJbMjQrKDB8YXJbcj4+Ml0pPj4yXV0odSxyKSwoMHx0clsoQT1vKzgrM3wwKT4+MF0pPDA/KHQ9MHxhcltvPj4yXSxhcltsPj4yXT0wLGxuKHQsbCksYXJbbys0Pj4yXT0wKTooYXJbbD4+Ml09MCxsbihvLGwpLHRyW0E+PjBdPTApLE11KG8sMCksYXJbbz4+Ml09YXJbdT4+Ml0sYXJbbys0Pj4yXT1hcls0K3U+PjJdLGFyW28rOD4+Ml09YXJbOCt1Pj4yXSxBPTA7MyE9KDB8QSk7KUE9QSsxfChhclt1KyhBPDwyKT4+Ml09MCk7UXUodSksQT0wfGpiWzEyNyZhclszNisoMHxhcltyPj4yXSk+PjJdXShyKX1lbHNle2lmKHI9MHx1bihyLDYwOTYwKSxlKXtmb3IoZnNbNjMmYXJbNDQrKDB8YXJbcj4+Ml0pPj4yXV0obCxyKSxBPTB8YXJbbD4+Ml0sdHJbaT4+MF09QSx0cltpKzE+PjBdPUE+PjgsdHJbaSsyPj4wXT1BPj4xNix0cltpKzM+PjBdPUE+PjI0LGZzWzYzJmFyWzMyKygwfGFyW3I+PjJdKT4+Ml1dKHUsciksKDB8dHJbKEE9YSs4KzN8MCk+PjBdKTwwPyhpPTB8YXJbYT4+Ml0sYXJbbD4+Ml09MCxsbihpLGwpLGFyW2ErND4+Ml09MCk6KGFyW2w+PjJdPTAsbG4oYSxsKSx0cltBPj4wXT0wKSxNdShhLDApLGFyW2E+PjJdPWFyW3U+PjJdLGFyW2ErND4+Ml09YXJbNCt1Pj4yXSxhclthKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO1F1KHUpfWVsc2V7Zm9yKGZzWzYzJmFyWzQwKygwfGFyW3I+PjJdKT4+Ml1dKGwsciksQT0wfGFyW2w+PjJdLHRyW2k+PjBdPUEsdHJbaSsxPj4wXT1BPj44LHRyW2krMj4+MF09QT4+MTYsdHJbaSszPj4wXT1BPj4yNCxmc1s2MyZhclsyOCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPWErOCszfDApPj4wXSk8MD8oaT0wfGFyW2E+PjJdLGFyW2w+PjJdPTAsbG4oaSxsKSxhclthKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKGEsbCksdHJbQT4+MF09MCksTXUoYSwwKSxhclthPj4yXT1hclt1Pj4yXSxhclthKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbYSs4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KX1mb3IoQT0wfGpiWzEyNyZhclsxMisoMHxhcltyPj4yXSk+PjJdXShyKSxhcltmPj4yXT1BLEE9MHxqYlsxMjcmYXJbMTYrKDB8YXJbcj4+Ml0pPj4yXV0ociksYXJbbj4+Ml09QSxmc1s2MyZhclsyMCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLEE9KCgwfHRyWyhBPXQrMTF8MCk+PjBdKTwwPyhBPTB8YXJbdD4+Ml0sdHJbbD4+MF09MCxRZihBLGwpLGFyW3QrND4+Ml09MCk6KHRyW2w+PjBdPTAsUWYodCxsKSx0cltBPj4wXT0wKSx0KSxDdSh0LDApLGFyW0E+PjJdPWFyW3U+PjJdLGFyW0ErND4+Ml09YXJbNCt1Pj4yXSxhcltBKzg+PjJdPWFyWzgrdT4+Ml0sQT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdSsoQTw8Mik+PjJdPTApO2ZvcihCdSh1KSxmc1s2MyZhclsyNCsoMHxhcltyPj4yXSk+PjJdXSh1LHIpLCgwfHRyWyhBPW8rOCszfDApPj4wXSk8MD8odD0wfGFyW28+PjJdLGFyW2w+PjJdPTAsbG4odCxsKSxhcltvKzQ+PjJdPTApOihhcltsPj4yXT0wLGxuKG8sbCksdHJbQT4+MF09MCksTXUobywwKSxhcltvPj4yXT1hclt1Pj4yXSxhcltvKzQ+PjJdPWFyWzQrdT4+Ml0sYXJbbys4Pj4yXT1hcls4K3U+PjJdLEE9MDszIT0oMHxBKTspQT1BKzF8KGFyW3UrKEE8PDIpPj4yXT0wKTtRdSh1KSxBPTB8amJbMTI3JmFyWzM2KygwfGFyW3I+PjJdKT4+Ml1dKHIpfWFyW2M+PjJdPUEsdXI9Yn1mdW5jdGlvbiBZbChBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTAsc3w9MCxkfD0wO3ZhciBrLGgsdyx2LG0sZyxaLHAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MDtmb3IoYXJbKHJ8PTApPj4yXT1BLGs9cys4KzN8MCxwPXMrNHwwLGg9Yis4KzN8MCx3PWIrNHwwLHY9MD09KDUxMiZpfDApLG09MDwoMHxkKSxnPXUrMTF8MCxaPXUrNHwwLEY9MDs0IT0oMHxGKTspe0E6ZG97c3dpdGNoKDB8dHJbYStGPj4wXSl7Y2FzZSAwOmFyW2U+PjJdPWFyW3I+PjJdO2JyZWFrO2Nhc2UgMTphcltlPj4yXT1hcltyPj4yXSxHPTB8SGJbMzEmYXJbNDQrKDB8YXJbdD4+Ml0pPj4yXV0odCwzMiksVj0wfGFyW3I+PjJdLGFyW3I+PjJdPVYrNCxhcltWPj4yXT1HO2JyZWFrO2Nhc2UgMzowfCgoeT0oVj0wfHRyW2s+PjBdKTw8MjQ+PjI0PDApPzB8YXJbcD4+Ml06MjU1JlYpJiYoRz0wfGFyWyh5PzB8YXJbcz4+Ml06cyk+PjJdLFY9MHxhcltyPj4yXSxhcltyPj4yXT1WKzQsYXJbVj4+Ml09Ryk7YnJlYWs7Y2FzZSAyOmlmKCEodnwwPT0oMHwoVz0oeT0oVz0wfHRyW2g+PjBdKTw8MjQ+PjI0PDApPzB8YXJbdz4+Ml06MjU1JlcpKSkpe2ZvcihCPShYPXk/MHxhcltiPj4yXTpiKSsoVzw8Mil8MCx5PUU9MHxhcltyPj4yXTsoMHxYKSE9KDB8Qik7KWFyW3k+PjJdPWFyW1g+PjJdLHk9eSs0fDAsWD1YKzR8MDthcltyPj4yXT1FKyhXPDwyKX1icmVhaztjYXNlIDQ6Zm9yKEI9MHxhcltyPj4yXSx5PWY9bz9mKzR8MDpmOyEobj4+PjA8PXk+Pj4wKSYmMHx4Yls2MyZhclsxMisoMHxhclt0Pj4yXSk+PjJdXSh0LDIwNDgsMHxhclt5Pj4yXSk7KXk9eSs0fDA7aWYobSl7Zm9yKFg9ZDtmPj4+MDx5Pj4+MCYoRT0wPCgwfFgpKTspQz0wfGFyWyhWPXkrLTR8MCk+PjJdLEc9MHxhcltyPj4yXSxhcltyPj4yXT1HKzQsYXJbRz4+Ml09QyxYPVgrLTF8MCx5PVY7Zm9yKEk9RT8wfEhiWzMxJmFyWzQ0KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpOjAsVz0wfGFyW3I+PjJdO0U9Vys0fDAsISgoMHxYKTw9MCk7KWFyW1c+PjJdPUksWD1YKy0xfDAsVz1FO2FyW3I+PjJdPUUsYXJbVz4+Ml09Y31pZigoMHx5KT09KDB8ZikpRz0wfEhiWzMxJmFyWzQ0KygwfGFyW3Q+PjJdKT4+Ml1dKHQsNDgpLHk9KFY9MHxhcltyPj4yXSkrNHwwLGFyW3I+PjJdPXksYXJbVj4+Ml09RztlbHNle2ZvcihHPShWPTB8dHJbZz4+MF0pPDwyND4+MjQ8MCxWJj0yNTUsST1FPShXPTB8KEc/MHxhcltaPj4yXTpWKT8wfHRyWyhHPzB8YXJbdT4+Ml06dSk+PjBdOi0xLDApOygwfHkpIT0oMHxmKTspWD0wfGFyW3I+PjJdLCgwfEkpPT0oMHxXKSYmKEM9WCs0fDAsYXJbcj4+Ml09QyxhcltYPj4yXT1sLFg9KEk9KFc9KEU9RSsxfDApPj4+MDwoRz8wfGFyW1o+PjJdOlYpPj4+MD8oVz0wfHRyWyhHPzB8YXJbdT4+Ml06dSkrRT4+MF0pPDwyND4+MjQ9PTEyNz8tMTpXPDwyND4+MjQ6SSwwKSxDKSksUj0wfGFyWyhDPXkrLTR8MCk+PjJdLGFyW3I+PjJdPVgrNCxhcltYPj4yXT1SLEk9SSsxfDAseT1DO3k9MHxhcltyPj4yXX1pZigoMHxCKSE9KDB8eSkpZm9yKDs7KXtpZigoeT15Ky00fDApPj4+MDw9Qj4+PjApYnJlYWsgQTtSPTB8YXJbQj4+Ml0sYXJbQj4+Ml09YXJbeT4+Ml0sYXJbeT4+Ml09UixCPUIrNHwwfX19d2hpbGUoMCk7Rj1GKzF8MH1pZigxPChmPSh5PShmPTB8dHJbaz4+MF0pPDwyND4+MjQ8MCk/MHxhcltwPj4yXToyNTUmZik+Pj4wKXtmb3IoWD0oeT15PzB8YXJbcz4+Ml06cykrNHwwLEU9KHk9eSsoZjw8Mil8MCktWHwwLGY9Qj0wfGFyW3I+PjJdOygwfFgpIT0oMHx5KTspYXJbZj4+Ml09YXJbWD4+Ml0sZj1mKzR8MCxYPVgrNHwwO2FyW3I+PjJdPUIrKEU+Pj4yPDwyKX1zd2l0Y2goKDE3NiZpKTw8MjQ+PjI0KXtjYXNlIDMyOmFyW2U+PjJdPWFyW3I+PjJdO2JyZWFrO2Nhc2UgMTY6YnJlYWs7ZGVmYXVsdDphcltlPj4yXT1BfX1mdW5jdGlvbiBRbChBKXt2YXIgZTthclsoQXw9MCk+PjJdPTE2OTg4LCgwfCgwfGFyWyhlPUErOHwwKT4+Ml0pKSE9KDB8ZG4oKSkmJm9mKDB8YXJbZT4+Ml0pLGFuKCl9ZnVuY3Rpb24gRGwoQSl7dmFyIGUscixpPTAsZj0wO2ZvcihhclsoQXw9MCk+PjJdPTE3MDM2LGU9QSs4fDAscj1BKzEyfDAsZj0wO2k9MHxhcltlPj4yXSwhKGY+Pj4wPj0oMHxhcltyPj4yXSktaT4+Mj4+PjApOykwfChpPTB8YXJbaSsoZjw8Mik+PjJdKSYmbHUoaSksZj1mKzF8MDtCdShBKzE0NHwwKSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MDtlPTB8YXJbKEF8PTApPj4yXTtkb3tpZigwfGUpe2ZvcihpPTB8YXJbKHI9QSs0fDApPj4yXTsoMHxpKSE9KDB8ZSk7KWY9aSstNHwwLGFyW3I+PjJdPWYsaT1mO2lmKChBKzE2fDApPT0oMHxlKSl7dHJbQSsxMjg+PjBdPTA7YnJlYWt9dnUoZSk7YnJlYWt9fXdoaWxlKDApfShlKSxhbigpfWZ1bmN0aW9uIEpsKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09MTcwNTYsMHwoZT0wfGFyW0ErOD4+Ml0pJiYwfHRyW0ErMTI+PjBdJiZtdShlKSxhbigpfWZ1bmN0aW9uIE1sKCl7cmV0dXJuIDB8YXJbMzExOF19ZnVuY3Rpb24gVGwoKXtyZXR1cm4gMHxhclsyNzMzXX1mdW5jdGlvbiBVbCgpe3JldHVybiAwfGFyWzI3MzJdfWZ1bmN0aW9uIFNsKEEpe2FyWyhBfD0wKT4+Ml09MTcxMDgsQnUoQSsxMnwwKSxhbigpfWZ1bmN0aW9uIE9sKEEpe2FyWyhBfD0wKT4+Ml09MTcxNDgsQnUoQSsxNnwwKSxhbigpfWZ1bmN0aW9uIHpsKCl7bEEoKX1mdW5jdGlvbiBqbChBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJLEMsRyxWLEYsUixOLF8sWSxRLEQsSixNLFQsVSxTLE8seixqLEgseCxQLEwsSyxxLCQsQUEsZUEsckEsaUEsZkEsbkEsdEEsb0EsYUEsY0EsbEE9MCx1QT0wLGJBPTAsc0E9MDtmb3Iocj11cj0oaT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApKzQ+PjJdPWUrLTEsYXJbQT4+Ml09MTcwMzYsZj1sQT1BKzh8MCxuPTI4LG58PTAsYXJbKGZ8PTApPj4yXT0wLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsKHRyW2YrMTI4Pj4wXT0wKXxuJiYoZnVuY3Rpb24oQSxlKXt2YXIgcj0wOygwfExsKEF8PTApKT4+PjA8KGV8PTApPj4+MCYmemwoKTtyPWU+Pj4wPDI5JjA9PSgwfHRyWyhyPUErMTI4fDApPj4wXSk/KHRyW3I+PjBdPTEsQSsxNnwwKTowfGh1KGU8PDIpO2FyW0ErND4+Ml09cixhcltBPj4yXT1yLGFyW0ErOD4+Ml09cisoZTw8Mil9KGYsbiksUGwoZixuKSksYXJbKGU9QSsxNDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KHVBPShhcltlKzg+PjJdPTApfFlmKDUzNjg0KSk+Pj4wJiZwdSgpLHVBPj4+MDwxMT90cltlKzExPj4wXT11QTooYkE9MHxodShzQT11QSsxNiYtMTYpLGFyW2U+PjJdPWJBLGFyW0ErMTUyPj4yXT0tMjE0NzQ4MzY0OHxzQSxhcltBKzE0OD4+Ml09dUEsZT1iQSksd2YoZSw1MzY4NCx1QSksUWYoZSt1QXwodHJbcj4+MF09MCksciksZT0wfGFyW2xBPj4yXSx1QT0wfGFyWyhsQT1BKzEyfDApPj4yXTsoMHx1QSkhPSgwfGUpOylzQT11QSstNHwwLHVBPWFyW2xBPj4yXT1zQTthclsxNDE5OV09MCxhclsxNDE5OF09MTQ3MDAsdD1BLG89NTY3OTIsSGwodHw9MCxvfD0wLDB8aG4oNTkyMTYpKSxhclsxNDIwMV09MCxhclsxNDIwMF09MTQ3MzIsYT1BLGM9NTY4MDAsSGwoYXw9MCxjfD0wLDB8aG4oNTkyMjQpKSxmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MCxhcls0KyhBfD0wKT4+Ml09aSstMSxhcltBPj4yXT0xNzA1NixhclsoaT1BKzh8MCk+PjJdPWUsdHJbQSsxMj4+MF09MSZyLGV8fChyPTB8VWwoKSxhcltpPj4yXT1yKX0oNTY4MDgsMCwwLDEpLGw9QSx1PTU2ODA4LEhsKGx8PTAsdXw9MCwwfGhuKDU5MjMyKSksYXJbMTQyMDddPTAsYXJbMTQyMDZdPTE3MjUyLGI9QSxzPTU2ODI0LEhsKGJ8PTAsc3w9MCwwfGhuKDU5MjY0KSksYXJbMTQyMDldPTAsYXJbMTQyMDhdPTE3MzIwLGQ9QSxrPTU2ODMyLEhsKGR8PTAsa3w9MCwwfGhuKDYxMDI0KSksZnVuY3Rpb24oQSxlKXtlfD0wLGFyWzQrKEF8PTApPj4yXT1lKy0xLGFyW0E+PjJdPTE2OTg4LGU9MHxkbigpLGFyW0ErOD4+Ml09ZX0oNTY4NDAsMSksaD1BLHc9NTY4NDAsSGwoaHw9MCx3fD0wLDB8aG4oNjEwMzIpKSxhclsxNDIxNV09MCxhclsxNDIxNF09MTczNjgsdj1BLG09NTY4NTYsSGwodnw9MCxtfD0wLDB8aG4oNjEwNDApKSxhclsxNDIxN109MCxhclsxNDIxNl09MTc0MTYsZz1BLFo9NTY4NjQsSGwoZ3w9MCxafD0wLDB8aG4oNjEwNDgpKSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWzQrKEF8PTApPj4yXT1lKy0xLGFyW0E+PjJdPTE3MTA4LHRyW0ErOD4+MF09NDYsdHJbQSs5Pj4wXT00NCxhclsoZT1BKzEyfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwfSg1Njg3MiwxKSxwPUEseT01Njg3MixIbChwfD0wLHl8PTAsMHxobig1OTI0OCkpLGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbNCsoQXw9MCk+PjJdPWUrLTEsYXJbQT4+Ml09MTcxNDgsYXJbQSs4Pj4yXT00NixhcltBKzEyPj4yXT00NCxhclsoZT1BKzE2fDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwfSg1Njg5NiwxKSxCPUEsRT01Njg5NixIbChCfD0wLEV8PTAsMHxobig1OTI3MikpLGFyWzE0MjMzXT0wLGFyWzE0MjMyXT0xNDc2NCxYPUEsVz01NjkyOCxIbChYfD0wLFd8PTAsMHxobig1OTI1NikpLGFyWzE0MjM1XT0wLGFyWzE0MjM0XT0xNDgyOCxJPUEsQz01NjkzNixIbChJfD0wLEN8PTAsMHxobig1OTI4MCkpLGFyWzE0MjM3XT0wLGFyWzE0MjM2XT0xNDg5MixHPUEsVj01Njk0NCxIbChHfD0wLFZ8PTAsMHxobig1OTI4OCkpLGFyWzE0MjM5XT0wLGFyWzE0MjM4XT0xNDk0NCxGPUEsUj01Njk1MixIbChGfD0wLFJ8PTAsMHxobig1OTI5NikpLGFyWzE0MjQxXT0wLGFyWzE0MjQwXT0xNjQ5MixOPUEsXz01Njk2MCxIbChOfD0wLF98PTAsMHxobig2MDk0NCkpLGFyWzE0MjQzXT0wLGFyWzE0MjQyXT0xNjU0OCxZPUEsUT01Njk2OCxIbChZfD0wLFF8PTAsMHxobig2MDk1MikpLGFyWzE0MjQ1XT0wLGFyWzE0MjQ0XT0xNjYwNCxEPUEsSj01Njk3NixIbChEfD0wLEp8PTAsMHxobig2MDk2MCkpLGFyWzE0MjQ3XT0wLGFyWzE0MjQ2XT0xNjY2MCxNPUEsVD01Njk4NCxIbChNfD0wLFR8PTAsMHxobig2MDk2OCkpLGFyWzE0MjQ5XT0wLGFyWzE0MjQ4XT0xNjcxNixVPUEsUz01Njk5MixIbChVfD0wLFN8PTAsMHxobig2MDk3NikpLGFyWzE0MjUxXT0wLGFyWzE0MjUwXT0xNjc0NCxPPUEsej01N2UzLEhsKE98PTAsenw9MCwwfGhuKDYwOTg0KSksYXJbMTQyNTNdPTAsYXJbMTQyNTJdPTE2NzcyLGo9QSxIPTU3MDA4LEhsKGp8PTAsSHw9MCwwfGhuKDYwOTkyKSksYXJbMTQyNTVdPTAsYXJbMTQyNTRdPTE2ODAwLHg9QSxQPTU3MDE2LEhsKHh8PTAsUHw9MCwwfGhuKDYxZTMpKSxhclsxNDI1N109MCxhclsxNDI1Nl09MTcyMzIsZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT0xNzQ2NH0oNTcwMzIpLGFyWzE0MjU2XT0xNDk5NixhclsxNDI1OF09MTUwNDQsTD1BLEs9NTcwMjQsSGwoTHw9MCxLfD0wLDB8aG4oNjAxMDgpKSxhclsxNDI2MV09MCxhclsxNDI2MF09MTcyMzIsZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT0xNzUwMH0oNTcwNDgpLGFyWzE0MjYwXT0xNTA4MCxhclsxNDI2Ml09MTUxMjgscT1BLCQ9NTcwNDAsSGwocXw9MCwkfD0wLDB8aG4oNjA5MjApKSxhclsxNDI2NV09MCxhclsxNDI2NF09MTcyMzIsQUE9MHxkbigpLGFyWzE0MjY2XT1BQSxhclsxNDI2NF09MTY0NDQsZUE9QSxyQT01NzA1NixIbChlQXw9MCxyQXw9MCwwfGhuKDYwOTI4KSksYXJbMTQyNjldPTAsYXJbMTQyNjhdPTE3MjMyLGlBPTB8ZG4oKSxhclsxNDI3MF09aUEsYXJbMTQyNjhdPTE2NDY4LGZBPUEsbkE9NTcwNzIsSGwoZkF8PTAsbkF8PTAsMHxobig2MDkzNikpLGFyWzE0MjczXT0wLGFyWzE0MjcyXT0xNjgyOCx0QT1BLG9BPTU3MDg4LEhsKHRBfD0wLG9BfD0wLDB8aG4oNjEwMDgpKSxhclsxNDI3NV09MCxhclsxNDI3NF09MTY4NjAsYUE9QSxjQT01NzA5NixIbChhQXw9MCxjQXw9MCwwfGhuKDYxMDE2KSksdXI9aX1mdW5jdGlvbiBIbChBLGUscil7QXw9MCxyfD0wO3ZhciBpLGY9MDthdShlfD0wKSxmPTB8YXJbKGk9QSs4fDApPj4yXSwoMHxhcltBKzEyPj4yXSktZj4+Mj4+PjA+cj4+PjA/QT1pOihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wO2Y9MHxhclsoaT00KyhBfD0wKXwwKT4+Ml0sbj0wfGFyW0E+PjJdLHI9Zi1uPj4yO0E6ZG97aWYoZT4+PjA8PXI+Pj4wKXtpZihlPj4+MDxyPj4+MClmb3IoQT1uKyhlPDwyKXwwOzspe2lmKCgwfGYpPT0oMHxBKSlicmVhayBBO249ZistNHwwLGFyW2k+PjJdPW4sZj1ufX1lbHNlIHhsKEEsZS1yfDApfXdoaWxlKDApfShpLHIrMXwwKSxmPTB8YXJbKEE9aSk+PjJdKSwwfChmPTB8YXJbZisocjw8Mik+PjJdKSYmbHUoZiksYXJbKDB8YXJbQT4+Ml0pKyhyPDwyKT4+Ml09ZX1mdW5jdGlvbiB4bChBLGUpe2V8PTA7dmFyIHIsaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzMyfDAsbz0oQXw9MCkrOHwwLG49MHxhclsoaT1BKzR8MCk+PjJdO2Rve2lmKCgwfGFyW28+PjJdKS1uPj4yPj4+MDxlPj4+MCl7aWYobj0obi0oMHxhcltBPj4yXSk+PjIpK2V8MCwhKCh0PTB8TGwoKSk+Pj4wPG4+Pj4wKSl7YT0wfGFyW0E+PjJdLG89KGM9KDB8YXJbbz4+Ml0pLWF8MCk+PjEsS2wocixjPj4yPj4+MDx0Pj4+MT4+PjA/bz4+PjA8bj4+PjA/bjpvOnQsKDB8YXJbaT4+Ml0pLWE+PjIsQSsxNnwwKSxxbChyLGUpLCRsKEEsciksQXUocik7YnJlYWt9emwoKX1lbHNlIFBsKEEsZSl9d2hpbGUoMCk7dXI9Zn1mdW5jdGlvbiBQbChBLGUpe3ZhciByO2ZvcihyPShBfD0wKSs0fDAsQT1lfD0wLGU9MHxhcltyPj4yXTtlPTQrKChhcltlPj4yXT0wKXxhcltyPj4yXSl8MCxhcltyPj4yXT1lLDAhPSgwfChBPUErLTF8MCkpOyk7fWZ1bmN0aW9uIExsKCl7cmV0dXJuIDEwNzM3NDE4MjN9ZnVuY3Rpb24gS2woQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGY9MDthclsoQXw9MCkrMTI+PjJdPTAsYXJbQSsxNj4+Ml09aTtkb3tpZihlKXtpZihlPj4+MDwyOSYwPT0oMHx0clsoZj1pKzExMnwwKT4+MF0pKXt0cltmPj4wXT0xO2JyZWFrfWk9MHxodShlPDwyKTticmVha31pPTB9d2hpbGUoMCk7cj0oYXJbQT4+Ml09aSkrKHI8PDIpfDAsYXJbQSs4Pj4yXT1yLGFyW0ErND4+Ml09cixhcltBKzEyPj4yXT1pKyhlPDwyKX1mdW5jdGlvbiBxbChBLGUpe3ZhciByO2ZvcihyPShBfD0wKSs4fDAsQT1lfD0wLGU9MHxhcltyPj4yXTtlPTQrKChhcltlPj4yXT0wKXxhcltyPj4yXSl8MCxhcltyPj4yXT1lLDAhPSgwfChBPUErLTF8MCkpOyk7fWZ1bmN0aW9uICRsKEEsZSl7ZXw9MDt2YXIgcj0wLGk9MCxmPTAsbj0wLHQ9MDtpPTB8YXJbKEF8PTApPj4yXSxuPWUrNHwwLGY9KDB8YXJbKHQ9QSs0fDApPj4yXSktaXwwLHI9KDB8YXJbbj4+Ml0pKygwLShmPj4yKTw8Mil8MCxhcltuPj4yXT1yLDA8KDB8Zik/KGhiKDB8ciwwfGksMHxmKSxyPTB8YXJbKGk9bik+PjJdKTppPW4sbj0wfGFyW0E+PjJdLGFyW0E+PjJdPXIsYXJbaT4+Ml09bixuPWUrOHwwLGY9MHxhclt0Pj4yXSxhclt0Pj4yXT1hcltuPj4yXSxhcltuPj4yXT1mLHQ9ZSsxMnwwLEE9MHxhclsobj1BKzh8MCk+PjJdLGFyW24+PjJdPWFyW3Q+PjJdLGFyW3Q+PjJdPUEsYXJbZT4+Ml09YXJbaT4+Ml19ZnVuY3Rpb24gQXUoQSl7dmFyIGU9MCxyPTAsaT0wLGY9MDtmb3IoZT0wfGFyWyhBfD0wKSs0Pj4yXSxpPTB8YXJbKHI9QSs4fDApPj4yXTsoMHxpKSE9KDB8ZSk7KWY9aSstNHwwLGk9YXJbcj4+Ml09ZjtyPTB8YXJbQT4+Ml07ZG97aWYoMHxyKXtpZigoMHwoZT0wfGFyW0ErMTY+PjJdKSk9PSgwfHIpKXt0cltlKzExMj4+MF09MDticmVha312dShyKTticmVha319d2hpbGUoMCl9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gMD09KDB8dHJbNTcxMDRdKSYmMHxpYig1NzEwNCkmJihqbCg1NzExMiwxKSxhclsxNTI2NF09NTcxMTIsYXJbMTUyNjVdPTYxMDU2KSwwfGFyWzE1MjY1XX1mdW5jdGlvbiBydShBLGUpe0F8PTAsZT0wfGFyWyhlfD0wKT4+Ml0sYXUoYXJbQT4+Ml09ZSl9ZnVuY3Rpb24gaXUoKXtyZXR1cm4gMD09KDB8dHJbNTcyNzJdKSYmMHxpYig1NzI3MikmJihydSg2MTA2NCwwfGV1KCkpLGFyWzE1MjY3XT02MTA2NCksMHxhclsxNTI2N119ZnVuY3Rpb24gZnUoQSl7QXw9MDt2YXIgZT0wO2U9MHxpdSgpLGU9MHxhcltlPj4yXSxhdShhcltBPj4yXT1lKX1mdW5jdGlvbiBudShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChBPShyfD0wKT8wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaT0wLGY9MDtBOmRve2lmKHIpe2Zvcig7KGk9MHx0cltBPj4wXSk8PDI0Pj4yND09KGY9MHx0cltlPj4wXSk8PDI0Pj4yNDspe2lmKCEocj1yKy0xfDApKXtBPTA7YnJlYWsgQX1BPUErMXwwLGU9ZSsxfDB9QT0oMjU1JmkpLSgyNTUmZil8MH1lbHNlIEE9MH13aGlsZSgwKTtyZXR1cm4gMHxBfShBLGUscik6MCl9ZnVuY3Rpb24gdHUoKXswfWZ1bmN0aW9uIG91KEEpezB9ZnVuY3Rpb24gYXUoQSl7Y3UoKEF8PTApKzR8MCl9ZnVuY3Rpb24gY3UoQSl7YXJbKEF8PTApPj4yXT0xKygwfGFyW0E+PjJdKX1mdW5jdGlvbiBsdShBKXtyZXR1cm4gMHwoQT0tMT09KDB8dXUoKEF8PTApKzR8MCkpPyhpc1s1MTEmYXJbOCsoMHxhcltBPj4yXSk+PjJdXShBKSwxKTowKX1mdW5jdGlvbiB1dShBKXt2YXIgZTtyZXR1cm4gZT0wfGFyWyhBfD0wKT4+Ml0sYXJbQT4+Ml09ZS0xLGUtMXwwfWZ1bmN0aW9uIGJ1KEEpe2F1KEF8PTApfWZ1bmN0aW9uIHN1KEEpe2N1KChBfD0wKSs4fDApfWZ1bmN0aW9uIGR1KEEpezB8bHUoQXw9MCkmJmt1KEEpfWZ1bmN0aW9uIGt1KEEpe3ZhciBlOzAhPSgwfGFyWyhlPShBfD0wKSs4fDApPj4yXSkmJi0xIT0oMHx1dShlKSl8fGlzWzUxMSZhclsxNisoMHxhcltBPj4yXSk+PjJdXShBKX1mdW5jdGlvbiBodShBKXt2YXIgZTtmb3IoZT0wPT0oMHwoQXw9MCkpPzE6QTshKDB8KEE9MHx5YyhlKSkpOyl7aWYoIShBPTB8ZmIoKSkpe0E9MDticmVha31yc1s3JkFdKCl9cmV0dXJuIDB8QX1mdW5jdGlvbiB3dShBKXtyZXR1cm4gMHxodShBfD0wKX1mdW5jdGlvbiB2dShBKXtCYyhBfD0wKX1mdW5jdGlvbiBtdShBKXt2dShBfD0wKX1mdW5jdGlvbiBndSgpe2xBKCl9ZnVuY3Rpb24gWnUoQSxlKXtlfD0wLGFyWyhBfD0wKT4+Ml09MTc2NDAsZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wO2Y9MHxodSgxMysocj0wfFZjKGV8PTApKXwwKSxhcltmPj4yXT1yLGFyW2YrND4+Ml09cixoYigoYXJbZis4Pj4yXT0wKXwoZj0wfChpPWYsMTIrKGl8PTApfDApKSwwfGUsMStyfDApLGFyW0E+PjJdPWZ9KEErNHwwLGUpfWZ1bmN0aW9uIHB1KCl7bEEoKX1mdW5jdGlvbiB5dShBLGUpe2V8PTA7dmFyIHIsaSxmPTAsbj0wLHQ9MDtyPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLCgoYXJbQSs4Pj4yXT0wKXx0cltlKzExPj4wXSk8MD8oZj0wfGFyW2U+PjJdLDQyOTQ5NjcyNzk8KGU9MHxhcltlKzQ+PjJdKT4+PjAmJnB1KCksZT4+PjA8MTE/dHJbQSsxMT4+MF09ZToobj0wfGh1KHQ9ZSsxNiYtMTYpLGFyW0E+PjJdPW4sYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHx0LGFyW0ErND4+Ml09ZSxBPW4pLHdmKEEsZixlKSxRZihBK2V8KHRyW3I+PjBdPTApLHIpKTooYXJbQT4+Ml09YXJbZT4+Ml0sYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZSs4Pj4yXSksdXI9aX1mdW5jdGlvbiBCdShBKXsoMHx0clsoQXw9MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW0E+PjJdKX1mdW5jdGlvbiBFdShBLGUpe3ZhciByPTAsaT0wO3JldHVybigwfChBfD0wKSkhPSgwfChlfD0wKSkmJlh1KEEsKGk9KHI9MHx0cltlKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2U+PjJdOmUsaT8wfGFyW2UrND4+Ml06MjU1JnIpLDB8QX1mdW5jdGlvbiBYdShBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG89MCxhPTA7Zj11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsYT0oaT0obz0wfHRyWyhuPShBfD0wKSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/KDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwOjEwO2Rve2lmKHI+Pj4wPD1hPj4+MCl7aWYoV3Uobz1pPzB8YXJbQT4+Ml06QSxlLHIpLFFmKG8rcnwodHJbZj4+MF09MCksZiksKDB8dHJbbj4+MF0pPDApe2FyW0ErND4+Ml09cjticmVha310cltuPj4wXT1yO2JyZWFrfWk/bz0wfGFyW0ErND4+Ml06byY9MjU1LEl1KEEsYSxyLWF8MCxvLDAsbyxyLGUpfXdoaWxlKDApO3JldHVybiB1cj10LDB8QX1mdW5jdGlvbiBXdShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChyfD0wKSYmd2IoMHxBLDB8ZSwwfHIpLDB8QX1mdW5jdGlvbiBJdShBLGUscixpLGYsbix0LG8pe0F8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbD0wLHU9MCxiPTA7YT11cj0oYz11cikrMzEmLTMyLHVyPXVyKzE2fDAsKC0xOC0oZXw9MCl8MCk+Pj4wPChyfD0wKT4+PjAmJnB1KCksYj0oMHx0cltBKzExPj4wXSk8MD8wfGFyW0E+PjJdOkEsdT0wfGh1KGw9ZT4+PjA8MjE0NzQ4MzYyMz8obD0obD1yK2V8MCk+Pj4wPCh1PWU8PDEpPj4+MD91OmwpPj4+MDwxMT8xMTpsKzE2Ji0xNjotMTcpLDB8ZiYmd2YodSxiLGYpLDB8dCYmd2YodStmfDAsbyx0KSwwfChpPShyPWktbnwwKS1mfDApJiZ3Zih1K2YrdHwwLGIrZitufDAsaSksMTAhPSgwfGUpJiZ2dShiKSxhcltBPj4yXT11LGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8bCx0PXIrdHwwLFFmKHUrKGFyW0ErND4+Ml09dCl8KHRyW2E+PjBdPTApLGEpLHVyPWN9ZnVuY3Rpb24gQ3UoQSxlKXtBfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTA7NDI5NDk2NzI3OTwoZXw9MCk+Pj4wJiZwdSgpLGk9KG49KGY9MHx0clsocj1BKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8obz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwKToobz0yNTUmZiwxMCksdD0oZT0odD1lPj4+MDxvPj4+MD9vOmUpPj4+MDwxMSk/MTA6KHQrMTYmLTE2KS0xfDA7ZG97aWYoKDB8dCkhPSgwfGkpKXtkb3tpZighZSl7aWYoZT0wfGh1KHQrMXwwKSxuKXtuPTEsaT0wfGFyW0E+PjJdLGY9MTM7YnJlYWt9d2YoZSxBLDErKDI1NSZmKXwwKSxmPTE0O2JyZWFrfWU9MHxhcltBPj4yXSxmPW4/KG49MCxpPWUsZT1BLDEzKTood2YoQSxlLDErKDI1NSZmKXwwKSx2dShlKSwxNSl9d2hpbGUoMCk7aWYoMTM9PSgwfGYpJiYod2YoZSxpLDErKDB8YXJbQSs0Pj4yXSl8MCksdnUoaSksZj1uPzE0OjE1KSwxND09KDB8Zikpe2FyW0ErOD4+Ml09dCsxfC0yMTQ3NDgzNjQ4LGFyW0ErND4+Ml09byxhcltBPj4yXT1lO2JyZWFrfWlmKDE1PT0oMHxmKSl7dHJbcj4+MF09bzticmVha319fXdoaWxlKDApfWZ1bmN0aW9uIEd1KEEsZSl7cmV0dXJuIDB8WHUoQXw9MCxlfD0wLDB8WWYoZSkpfWZ1bmN0aW9uIFZ1KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQ9MCxvPTA7aT11cj0obj11cikrMzEmLTMyLHVyPXVyKzE2fDAsKG89KHQ9MHx0clsoZj0oQXw9MCkrMTF8MCk+PjBdKTw8MjQ+PjI0PDApP3Q9MHxhcltBKzQ+PjJdOnQmPTI1NTtkb3tpZihlPj4+MDw9dD4+PjApe2lmKG8pe289KDB8YXJbQT4+Ml0pK2V8MCx0cltpPj4wXT0wLFFmKG8saSksYXJbQSs0Pj4yXT1lO2JyZWFrfVFmKEErZXwodHJbaT4+MF09MCksaSksdHJbZj4+MF09ZTticmVha31GdShBLGUtdHwwLHIpfXdoaWxlKDApO3VyPW59ZnVuY3Rpb24gRnUoQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTA7cmV0dXJuIGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLDB8KGV8PTApJiYodD0obj0wfHRyWyhjPUErMTF8MCk+PjBdKTw8MjQ+PjI0PDA/KG89MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW0ErOD4+Ml0pLTF8MCk6KG89MjU1Jm4sMTApLGE9bytlfDAsKHQtb3wwKT4+PjA8ZT4+PjAmJihSdShBLHQsYS10fDAsbyxvLDAsMCksbj0wfHRyW2M+PjBdKSxvaSgobj1uPDwyND4+MjQ8MD8wfGFyW0E+PjJdOkEpK298MCxlLHIpLCgwfHRyW2M+PjBdKTwwP2FyW0ErND4+Ml09YTp0cltjPj4wXT1hLFFmKG4rYXwodHJbaT4+MF09MCksaSkpLHVyPWYsMHxBfWZ1bmN0aW9uIFJ1KEEsZSxyLGksZixuLHQpe0F8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbz0wLGE9MCxjPTA7KC0xNy0oZXw9MCl8MCk+Pj4wPChyfD0wKT4+PjAmJnB1KCksYz0oMHx0cltBKzExPj4wXSk8MD8wfGFyW0E+PjJdOkEsYT0wfGh1KG89ZT4+PjA8MjE0NzQ4MzYyMz8obz0obz1yK2V8MCk+Pj4wPChhPWU8PDEpPj4+MD9hOm8pPj4+MDwxMT8xMTpvKzE2Ji0xNjotMTcpLDB8ZiYmd2YoYSxjLGYpLDB8KHI9aS1uLWZ8MCkmJndmKGErZit0fDAsYytmK258MCxyKSwxMCE9KDB8ZSkmJnZ1KGMpLGFyW0E+PjJdPWEsYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxvfWZ1bmN0aW9uIE51KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO3JldHVybiBuPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhPShmPShhPTB8dHJbKHQ9KEF8PTApKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8oYz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbQSs4Pj4yXSktMXwwKTooYz0yNTUmYSwxMCksaT1jK3J8MCxyPj4+MDw9KGEtY3wwKT4+PjA/MHxyJiYod2YoKGE9Zj8wfGFyW0E+PjJdOkEpK2N8MCxlLHIpLCgwfHRyW3Q+PjBdKTwwP2FyW0ErND4+Ml09aTp0clt0Pj4wXT1pLFFmKGEraXwodHJbbj4+MF09MCksbikpOkl1KEEsYSxpLWF8MCxjLGMsMCxyLGUpLHVyPW8sMHxBfWZ1bmN0aW9uIF91KEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wO289dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLG89KHI9bykrMXwwLHRyW3I+PjBdPWUsZT0oZj0oZT0wfHRyWyhuPUErMTF8MCk+PjBdKTw8MjQ+PjI0PDApPyh0PTB8YXJbQSs0Pj4yXSwoMjE0NzQ4MzY0NyZhcltBKzg+PjJdKS0xfDApOih0PTI1NSZlLDEwKSw3PT0oMHwoZj0oMHx0KT09KDB8ZSk/KFJ1KEEsZSwxLGUsZSwwLDApLGU9ZSsxfDAsKDB8dHJbbj4+MF0pPDA/ODo3KTooZT10KzF8MCxmPzg6NykpKT8odHJbbj4+MF09ZSxlPUEpOjg9PSgwfGYpJiYobj0wfGFyW0E+PjJdLGFyW0ErND4+Ml09ZSxlPW4pLFFmKEE9ZSt0fDAsciksUWYoQSsxfCh0cltvPj4wXT0wKSxvKSx1cj1pfWZ1bmN0aW9uIFl1KEEsZSxyLGksZil7ZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0PTA7cmV0dXJuKG49KHQ9MHx0clsoQXw9MCkrMTE+PjBdKTw8MjQ+PjI0PDApP3Q9MHxhcltBKzQ+PjJdOnQmPTI1NSwtMT09KDB8Zil8dD4+PjA8ZT4+PjAmJmxBKCkscj0odD10LWV8MCk+Pj4wPHI+Pj4wP3Q6cixuJiYoQT0wfGFyW0E+PjJdKSwoQT0wfG51KEErZXwwLGksKHQ9Zj4+PjA8cj4+PjApP2Y6cikpPzB8QTowfChyPj4+MDxmPj4+MD8tMToxJnQpfWZ1bmN0aW9uIFF1KEEpeygwfHRyWyhBfD0wKSs4KzM+PjBdKTwwJiZ2dSgwfGFyW0E+PjJdKX1mdW5jdGlvbiBEdShBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwocnw9MCkmJmZ1bmN0aW9uKEEsZSxyKXt2YXIgaT0wO2lmKChyfD0wKT4+PjA8PShBfD0wKS0oZXw9MCk+PjI+Pj4wKXtpZigwfHIpZm9yKGk9QTtyPXIrLTF8MCxhcltpPj4yXT1hcltlPj4yXSxyOyllPWUrNHwwLGk9aSs0fDB9ZWxzZSBmb3IoO2FyW0ErKChyPXIrLTF8MCk8PDIpPj4yXT1hcltlKyhyPDwyKT4+Ml0sMCE9KDB8cik7KTt9KEEsZSxyKSwwfEF9ZnVuY3Rpb24gSnUoQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdT0wLGI9MCxzPTA7Yz11cj0obD11cikrMzEmLTMyLHVyPXVyKzE2fDAsKDEwNzM3NDE4MDYtKGV8PTApfDApPj4+MDwocnw9MCk+Pj4wJiZwdSgpLHM9KDB8dHJbMysoYT1BKzh8MCk+PjBdKTwwPzB8YXJbQT4+Ml06QSxlPj4+MDw1MzY4NzA4ODc/MTA3Mzc0MTgyMzwocj0ocj0ocj1yK2V8MCk+Pj4wPCh1PWU8PDEpPj4+MD91OnIpPj4+MDwyPzI6cis0Ji00KT4+PjA/bEEoKTpiPXI6Yj0xMDczNzQxODA3LHU9MHxodShiPDwyKSwwfGYmJlpmKHUscyxmKSwwfHQmJlpmKHUrKGY8PDIpfDAsbyx0KSwwfChpPShyPWktbnwwKS1mfDApJiZaZih1KyhmPDwyKSsodDw8Mil8MCxzKyhmPDwyKSsobjw8Mil8MCxpKSwxIT0oMHxlKSYmdnUocyksYXJbQT4+Ml09dSxhclthPj4yXT0tMjE0NzQ4MzY0OHxiLHQ9cit0fDAsbG4odSsoKGFyW0ErND4+Ml09dCk8PDIpfChhcltjPj4yXT0wKSxjKSx1cj1sfWZ1bmN0aW9uIE11KEEsZSl7QXw9MDt2YXIgcixpLGY9MCxuPTAsdD0wLG89MCxhPTA7MTA3Mzc0MTgwNzwoZXw9MCk+Pj4wJiZwdSgpLGY9KHQ9KG49MHx0clsocj0zKyhpPUErOHwwKXwwKT4+MF0pPDwyND4+MjQ8MCk/KGE9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW2k+PjJdKS0xfDApOihhPTI1NSZuLDEpLG89KGU9KG89ZT4+PjA8YT4+PjA/YTplKT4+PjA8Mik/MToobys0Ji00KS0xfDA7ZG97aWYoKDB8bykhPSgwfGYpKXtkb3tpZighZSl7aWYoMTA3Mzc0MTgyMzwoZT1vKzF8MCk+Pj4wJiZsQSgpLGU9MHxodShlPDwyKSx0KXt0PTEsZj0wfGFyW0E+PjJdLG49MTU7YnJlYWt9WmYoZSxBLDErKDI1NSZuKXwwKSxuPTE2O2JyZWFrfWU9MHxhcltBPj4yXSxuPXQ/KHQ9MCxmPWUsZT1BLDE1KTooWmYoQSxlLDErKDI1NSZuKXwwKSx2dShlKSwxNyl9d2hpbGUoMCk7aWYoMTU9PSgwfG4pJiYoWmYoZSxmLDErKDB8YXJbQSs0Pj4yXSl8MCksdnUoZiksbj10PzE2OjE3KSwxNj09KDB8bikpe2FyW2k+PjJdPW8rMXwtMjE0NzQ4MzY0OCxhcltBKzQ+PjJdPWEsYXJbQT4+Ml09ZTticmVha31pZigxNz09KDB8bikpe3RyW3I+PjBdPWE7YnJlYWt9fX13aGlsZSgwKX1mdW5jdGlvbiBUdShBLGUpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO249dXI9KG89dXIpKzMxJi0zMix1cj11cisxNnwwLGM9KGY9KGk9MHx0clsodD0oYT0oQXw9MCkrOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjE7ZG97aWYocj4+PjA8PWM+Pj4wKXtpZihEdShhPWY/MHxhcltBPj4yXTpBLGUsciksbG4oYSsocjw8Mil8KGFyW24+PjJdPTApLG4pLCgwfHRyW3Q+PjBdKTwwKXthcltBKzQ+PjJdPXI7YnJlYWt9dHJbdD4+MF09cjticmVha31KdShBLGMsci1jfDAsYT1mPzB8YXJbQSs0Pj4yXToyNTUmaSwwLGEscixlKX13aGlsZSgwKTtyZXR1cm4gdXI9bywwfEF9KEF8PTAsZXw9MCwwfE1yKGUpKX1mdW5jdGlvbiBVdShBLGUscixpLGYsbix0KXtBfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYT0wLGM9MCxsPTA7KDEwNzM3NDE4MDctKGV8PTApfDApPj4+MDwocnw9MCk+Pj4wJiZwdSgpLGw9KDB8dHJbMysobz1BKzh8MCk+PjBdKTwwPzB8YXJbQT4+Ml06QSxlPj4+MDw1MzY4NzA4ODc/MTA3Mzc0MTgyMzwocj0ocj0ocj1yK2V8MCk+Pj4wPChhPWU8PDEpPj4+MD9hOnIpPj4+MDwyPzI6cis0Ji00KT4+PjA/bEEoKTpjPXI6Yz0xMDczNzQxODA3LGE9MHxodShjPDwyKSwwfGYmJlpmKGEsbCxmKSwwfChyPWktbi1mfDApJiZaZihhKyhmPDwyKSsodDw8Mil8MCxsKyhmPDwyKSsobjw8Mil8MCxyKSwxIT0oMHxlKSYmdnUobCksYXJbQT4+Ml09YSxhcltvPj4yXT0tMjE0NzQ4MzY0OHxjfWZ1bmN0aW9uIFN1KEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTA7cmV0dXJuIGY9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89KGk9KG89MHx0clsobj0oYT0oQXw9MCkrOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8oYz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MCk6KGM9MjU1Jm8sMSksYT1jK3J8MCxyPj4+MDw9KG8tY3wwKT4+PjA/MHxyJiYoWmYoKG89aT8wfGFyW0E+PjJdOkEpKyhjPDwyKXwwLGUsciksKDB8dHJbbj4+MF0pPDA/YXJbQSs0Pj4yXT1hOnRyW24+PjBdPWEsbG4obysoYTw8Mil8KGFyW2Y+PjJdPTApLGYpKTpKdShBLG8sYS1vfDAsYyxjLDAscixlKSx1cj10LDB8QX1mdW5jdGlvbiBPdShBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbj0wLHQ9MCxvPTAsYT0wO2E9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLGE9KGk9YSkrNHwwLGFyW2k+PjJdPWUsZT0ocj0oZT0wfHRyWyh0PShuPUErOHwwKSszfDApPj4wXSk8PDI0Pj4yNDwwKT8obz0wfGFyW0ErND4+Ml0sKDIxNDc0ODM2NDcmYXJbbj4+Ml0pLTF8MCk6KG89MjU1JmUsMSksNz09KDB8KG49KDB8byk9PSgwfGUpPyhVdShBLGUsMSxlLGUsMCwwKSxlPWUrMXwwLCgwfHRyW3Q+PjBdKTwwPzg6Nyk6KGU9bysxfDAscj84OjcpKSk/KHRyW3Q+PjBdPWUsZT1BKTo4PT0oMHxuKSYmKHQ9MHxhcltBPj4yXSxhcltBKzQ+PjJdPWUsZT10KSxsbihBPWUrKG88PDIpfDAsaSksbG4oQSs0fChhclthPj4yXT0wKSxhKSx1cj1mfWZ1bmN0aW9uIHp1KCl7dmFyIEEsZT0wO3JldHVybiBlPXVyPShBPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwfHlBKDYxMTQ4LDUpPyhqdSg1NjE1OCxlKSwwKTooZT0wfHdBKDB8YXJbMTUyODhdKSx1cj1BLDB8ZSl9ZnVuY3Rpb24ganUoQSxlKXtBfD0wLGV8PTA7dmFyIHI7cj11cj11ciszMSYtMzIsdXI9dXIrMTZ8MCxhcltyPj4yXT1lLFFjKGU9MHxhclsyNjY5XSxBLHIpLGZ1bmN0aW9uKEEsZSl7dmFyIHIsaT0wLGY9MCxuPTAsdD0wLG89MCxhPTA7aT1yPTI1NSYoQXw9MCksMDw9KDB8YXJbKGV8PTApKzc2Pj4yXSkmJjAhPSgwfEpjKCkpPygoMHxpKSE9KDB8dHJbZSs3NT4+MF0pJiYobz0wfGFyWyh0PWUrMjB8MCk+PjJdKT4+PjA8KDB8YXJbZSsxNj4+Ml0pPj4+MD8oYXJbdD4+Ml09bysxLHRyW28+PjBdPXIpOmk9MHxTaShlLEEpLE1jKCkpOmE9Mztkb3tpZigzPT0oMHxhKSl7aWYoKDB8aSkhPSgwfHRyW2UrNzU+PjBdKSYmKG49MHxhclsoZj1lKzIwfDApPj4yXSk+Pj4wPCgwfGFyW2UrMTY+PjJdKT4+PjApe2FyW2Y+PjJdPW4rMSx0cltuPj4wXT1yO2JyZWFrfWk9MHxTaShlLEEpfX13aGlsZSgwKX0oMTAsZSksbEEoKX1mdW5jdGlvbiBIdShBKXswfWZ1bmN0aW9uIHh1KEEsZSl7cmV0dXJuKDB8KEF8PTApKT09KDB8KGV8PTApKXwwfWZ1bmN0aW9uIFB1KEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmLG4sdDtmPTB8YXJbKEE9KGV8PTApKzE2fDApPj4yXSxuPWUrMzZ8MCx0PWUrMjR8MDtkb3tpZihmKXtpZigoMHxmKSE9KDB8cikpe2FyW24+PjJdPTErKDB8YXJbbj4+Ml0pLGFyW3Q+PjJdPTIsdHJbZSs1ND4+MF09MTticmVha30yPT0oMHxhclt0Pj4yXSkmJihhclt0Pj4yXT1pKX1lbHNlIGFyW0E+PjJdPXIsYXJbdD4+Ml09aSxhcltuPj4yXT0xfXdoaWxlKDApfWZ1bmN0aW9uIEx1KEEsZSxyLGkpe3J8PTAsaXw9MDt2YXIgZj0wOygwfGFyWyhlfD0wKSs0Pj4yXSk9PSgwfHIpJiYxIT0oMHxhclsoZj1lKzI4fDApPj4yXSkmJihhcltmPj4yXT1pKX1mdW5jdGlvbiBLdShBLGUscixpLGYpe0F8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG49MCx0PTAsbz0wLGE9MDt0clsoZXw9MCkrNTM+PjBdPTE7ZG97aWYoKDB8YXJbZSs0Pj4yXSk9PSgwfGkpKXtpZih0cltlKzUyPj4wXT0xLG89ZSs1NHwwLGE9ZSs0OHwwLHQ9ZSsyNHwwLEE9ZSszNnwwLCEobj0wfGFyWyhpPWUrMTZ8MCk+PjJdKSl7aWYoYXJbaT4+Ml09cixhclt0Pj4yXT1mLCEoKGFyW0E+PjJdPTEpPT0oMHxhclthPj4yXSkmMT09KDB8ZikpKWJyZWFrO3RyW28+PjBdPTE7YnJlYWt9aWYoKDB8bikhPSgwfHIpKXthcltBPj4yXT0xKygwfGFyW0E+PjJdKSx0cltvPj4wXT0xO2JyZWFrfTI9PSgwfChBPTB8YXJbdD4+Ml0pKSYmKEE9YXJbdD4+Ml09ZiksMT09KDB8YXJbYT4+Ml0pJjE9PSgwfEEpJiYodHJbbz4+MF09MSl9fXdoaWxlKDApfWZ1bmN0aW9uIHF1KEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvLGEsYyxsLHU9MCxiPTA7Zm9yKGE9dXI9KGw9dXIpKzMxJi0zMix1cj11cis2NHwwLGI9MHxhclsoQXw9MCk+PjJdLGM9QSsoMHxhcltiKy04Pj4yXSl8MCxiPTB8YXJbYistND4+Ml0sYXJbYT4+Ml09cixhcls0K2E+PjJdPUEsYXJbOCthPj4yXT1lLGFyWzEyK2E+PjJdPWksZT0yMCthfDAsaT0yNCthfDAsZj0yOCthfDAsbj0zMithfDAsdD00MCthfDAsbz0odT1BPTE2K2F8MCkrMzZ8MDsoMHwodT11KzR8KGFyW3U+PjJdPTApKSk8KDB8byk7KTtvcltBKzM2Pj4xXT0wLHRyW0ErMzg+PjBdPTA7QTpkb3tpZigwfHh1KGIscikpYXJbNDgrYT4+Ml09MSxhc1sxNSZhclsyMCsoMHxhcltiPj4yXSk+PjJdXShiLGEsYyxjLDEsMCksQT0xPT0oMHxhcltpPj4yXSk/YzowO2Vsc2V7c3dpdGNoKG9zWzYzJmFyWzI0KygwfGFyW2I+PjJdKT4+Ml1dKGIsYSxjLDEsMCksMHxhclszNithPj4yXSl7Y2FzZSAwOkE9MT09KDB8YXJbdD4+Ml0pJjE9PSgwfGFyW2Y+PjJdKSYxPT0oMHxhcltuPj4yXSk/MHxhcltlPj4yXTowO2JyZWFrIEE7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6QT0wO2JyZWFrIEF9aWYoMSE9KDB8YXJbaT4+Ml0pJiYhKDA9PSgwfGFyW3Q+PjJdKSYxPT0oMHxhcltmPj4yXSkmMT09KDB8YXJbbj4+Ml0pKSl7QT0wO2JyZWFrfUE9MHxhcltBPj4yXX19d2hpbGUoMCk7cmV0dXJuIHVyPWwsMHxBfWZ1bmN0aW9uICR1KEEpe3ZhciBlLHIsaTthclsoQXw9MCk+PjJdPTE3NjQwLGU9QSs0fDAsKGk9cj0wKXwoZXw9MCwxKSYmKHI9MHxmdW5jdGlvbihBKXtyZXR1cm4oQXw9MCkrLTEyfDB9KDB8YXJbZT4+Ml0pLGU9MHxhclsoaT1yKzh8MCk+PjJdLGFyW2k+PjJdPWUrLTEsKGUrLTF8MCk8MCkmJnZ1KHIpfWZ1bmN0aW9uIEFiKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG49MDtuPShmPTB8YXJbKEF8PTApKzQ+PjJdKT4+OCwxJmYmJihuPTB8YXJbKDB8YXJbcj4+Ml0pK24+PjJdKSxBPTB8YXJbQT4+Ml0sdHNbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxlLHIrbnwwLDImZnwwP2k6Mil9ZnVuY3Rpb24gZWIoQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvPTA7bz0odD0wfGFyWyhBfD0wKSs0Pj4yXSk+PjgsMSZ0JiYobz0wfGFyWygwfGFyW2k+PjJdKStvPj4yXSksQT0wfGFyW0E+PjJdLGFzWzE1JmFyWzIwKygwfGFyW0E+PjJdKT4+Ml1dKEEsZSxyLGkrb3wwLDImdHwwP2Y6MixuKX1mdW5jdGlvbiByYihBLGUscixpLGYpe2V8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wO3Q9KG49MHxhclsoQXw9MCkrND4+Ml0pPj44LDEmbiYmKHQ9MHxhclsoMHxhcltyPj4yXSkrdD4+Ml0pLEE9MHxhcltBPj4yXSxvc1s2MyZhclsyNCsoMHxhcltBPj4yXSk+PjJdXShBLGUscit0fDAsMiZufDA/aToyLGYpfWZ1bmN0aW9uIGliKEEpe3JldHVybiAwfChBPTE9PSgwfHRyWyhBfD0wKT4+MF0pPzA6dHJbQT4+MF09MSl9ZnVuY3Rpb24gZmIoKXt2YXIgQTtyZXR1cm4gQT0wfGFyWzE1Mjg5XSwwfChhclsxNTI4OV09QSl9ZnVuY3Rpb24gbmIoQSxlLHIsaSl7ZXw9MCxpfD0wO3ZhciBmLG4sdCxvLGEsYyxsLHU7cmV0dXJuIHI9MHwodD1mPUF8PTAsbz1uPXJ8PTAsdD0oKGE9KHU9MCl8YnIodT02NTUzNSYob3w9MCksbD02NTUzNSYodHw9MCkpKT4+PjE2KSsoMHxicih1LGM9dD4+PjE2KSl8MCxvPTB8YnIodT1vPj4+MTYsbCksMHwoRD0odD4+PjE2KSsoMHxicih1LGMpKSsoKCg2NTUzNSZ0KStvfDApPj4+MTYpfDAsdCtvPDwxNnw2NTUzNSZhfDApKSxBPUQsMHwoRD0oMHxicihlLG4pKSsoMHxicihpLGYpKStBfDAmQSwwfHIpfWZ1bmN0aW9uIHRiKEEsZSxyLGkpe3JldHVybiAwfChEPShlfD0wKSsoaXw9MCkrKChyPShBfD0wKSsocnw9MCk+Pj4wKT4+PjA8QT4+PjB8MCk+Pj4wLDB8cil9ZnVuY3Rpb24gb2IoQSxlLHIsaSl7cmV0dXJuIDB8KEQ9aT0oZXw9MCktKGl8PTApLSgoQXw9MCk+Pj4wPChyfD0wKT4+PjB8MCk+Pj4wLEEtcj4+PjB8MCl9ZnVuY3Rpb24gYWIoQSl7dmFyIGU9MDtyZXR1cm4oMHwoZT0wfHRyW3MrKDI1NSYoQXw9MCkpPj4wXSkpPDg/MHxlOigwfChlPTB8dHJbcysoQT4+OCYyNTUpPj4wXSkpPDg/ZSs4fDA6KDB8KGU9MHx0cltzKyhBPj4xNiYyNTUpPj4wXSkpPDg/ZSsxNnwwOjI0KygwfHRyW3MrKEE+Pj4yNCk+PjBdKXwwfWZ1bmN0aW9uIGNiKEEsZSxyLGksZil7Znw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2lmKGw9QXw9MCx0PXJ8PTAsbz1iPWl8PTAsIShjPWE9ZXw9MCkpcmV0dXJuIG49MCE9KDB8Ziksbz8obiYmKGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPTAmZSksKGY9Yj0wKXwoRD1iLGYpKToobiYmKGFyW2Y+PjJdPShsPj4+MCklKHQ+Pj4wKSxhcltmKzQ+PjJdPTApLChiPTApfChEPWIsZj0obD4+PjApLyh0Pj4+MCk+Pj4wKSk7bj0wPT0oMHxvKTtkb3tpZih0KXtpZighbil7aWYoKG49KDB8ZygwfG8pKS0oMHxnKDB8YykpfDApPj4+MDw9MzEpe0E9bD4+PigodD11PW4rMXwwKT4+PjApJihlPW4tMzE+PjMxKXxjPDwobz0zMS1ufDApLGUmPWM+Pj4odT4+PjApLG49MCxvPWw8PG87YnJlYWt9cmV0dXJuIGY/KGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPWF8MCZlLChmPWI9MCl8KEQ9YixmKSk6KGY9Yj0wKXwoRD1iLGYpfWlmKChuPXQtMXwwKSZ0fDApe0E9KHU9MzItKG89MzMrKDB8ZygwfHQpKS0oMHxnKDB8YykpfDApfDApLTE+PjMxJmM+Pj4oKHM9by0zMnwwKT4+PjApfChjPDx1fGw+Pj4oKHQ9byk+Pj4wKSkmKGU9cz4+MzEpLGUmPWM+Pj4obz4+PjApLG49bDw8KGQ9NjQtb3wwKSYoYT11Pj4zMSksbz0oYzw8ZHxsPj4+KHM+Pj4wKSkmYXxsPDx1Jm8tMzM+PjMxO2JyZWFrfXJldHVybiAwfGYmJihhcltmPj4yXT1uJmwsYXJbZis0Pj4yXT0wKSwxPT0oMHx0KT8wfChEPXM9YXwwJmUsZD0wfEEpOihkPTB8YWIoMHx0KSwwfChEPXM9Yz4+PihkPj4+MCl8MCxkPWM8PDMyLWR8bD4+PihkPj4+MCl8MCkpfWlmKG4pcmV0dXJuIDB8ZiYmKGFyW2Y+PjJdPShjPj4+MCklKHQ+Pj4wKSxhcltmKzQ+PjJdPTApLChzPTApfChEPXMsZD0oYz4+PjApLyh0Pj4+MCk+Pj4wKTtpZighbClyZXR1cm4gMHxmJiYoYXJbZj4+Ml09MCxhcltmKzQ+PjJdPShjPj4+MCklKG8+Pj4wKSksKHM9MCl8KEQ9cyxkPShjPj4+MCkvKG8+Pj4wKT4+PjApO2lmKCEoKG49by0xfDApJm8pKXJldHVybiAwfGYmJihhcltmPj4yXT0wfEEsYXJbZis0Pj4yXT1uJmN8MCZlKSxkPWM+Pj4oKChzPTApfGFiKDB8bykpPj4+MCksMHwoRD1zLGQpO2lmKChuPSgwfGcoMHxvKSktKDB8ZygwfGMpKXwwKT4+PjA8PTMwKXtBPWM8PChvPTMxLW58MCl8bD4+PigodD1lPW4rMXwwKT4+PjApLGU9Yz4+PihlPj4+MCksbj0wLG89bDw8bzticmVha31yZXR1cm4gZiYmKGFyW2Y+PjJdPTB8QSxhcltmKzQ+PjJdPWF8MCZlKSwoZD1zPTApfChEPXMsZCl9d2hpbGUoMCk7aWYodCl7Zm9yKGM9MHx0YigwfCh1PTB8ciksMHwobD1ifDAmaSksLTEsLTEpLHI9RCxhPW8sbz0wO2E9bj4+PjMxfChpPWEpPDwxLG49b3xuPDwxLG9iKDB8YywwfHIsMHwoaT1BPDwxfGk+Pj4zMXwwKSwwfChiPUE+Pj4zMXxlPDwxfDApKSxvPTEmKHM9KGQ9RCk+PjMxfCgoMHxkKTwwPy0xOjApPDwxKSxBPTB8b2IoMHxpLDB8YixzJnV8MCwoKCgwfGQpPDA/LTE6MCk+PjMxfCgoMHxkKTwwPy0xOjApPDwxKSZsfDApLGU9RCwwIT0oMHwodD10LTF8MCkpOyk7Yz1hLGE9MH1lbHNlIGM9byxvPWE9MDtyZXR1cm4odD0wKXxmJiYoYXJbZj4+Ml09QSxhcltmKzQ+PjJdPWUpLDB8KEQ9cz0oMHxuKT4+PjMxfChjfHQpPDwxfDAmKHQ8PDF8bj4+PjMxKXxhLGQ9LTImKG48PDF8MCl8byl9ZnVuY3Rpb24gbGIoQSxlLHIsaSl7cmV0dXJuIDB8Y2IoQXw9MCxlfD0wLHJ8PTAsaXw9MCwwKX1mdW5jdGlvbiB1YihBLGUscixpKXt2YXIgZixuO3JldHVybiB1cj0obj11cikrMTZ8MCxjYihBfD0wLGV8PTAscnw9MCxpfD0wLGY9MHxuKSx1cj1uLDB8KEQ9MHxhcls0K2Y+PjJdLDB8YXJbZj4+Ml0pfWZ1bmN0aW9uIGJiKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLCgwfChyfD0wKSk8MzI/KEQ9ZT4+cixBPj4+cnwoZSYoMTw8ciktMSk8PDMyLXIpOihEPSgwfGUpPDA/LTE6MCxlPj5yLTMyfDApfWZ1bmN0aW9uIHNiKEEsZSxyKXtyZXR1cm4gQXw9MCxlfD0wLCgwfChyfD0wKSk8MzI/KEQ9ZT4+PnIsQT4+PnJ8KGUmKDE8PHIpLTEpPDwzMi1yKTplPj4+ci0zMnwoRD0wKX1mdW5jdGlvbiBkYihBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwoMHwocnw9MCkpPDMyPyhEPWU8PHJ8KEEmKDE8PHIpLTE8PDMyLXIpPj4+MzItcixBPDxyKTooRD1BPDxyLTMyLDApfWZ1bmN0aW9uIGtiKEEpe3JldHVybigyNTUmKEF8PTApKTw8MjR8KEE+PjgmMjU1KTw8MTZ8KEE+PjE2JjI1NSk8PDh8QT4+PjI0fDB9ZnVuY3Rpb24gaGIoQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MDtpZig4MTkyPD0oMHwocnw9MCkpKXJldHVybiAwfHVBKDB8QSwwfGUsMHxyKTtpZihmPTB8QSxpPUErcnwwLCgzJkEpPT0oMyZlKSl7Zm9yKDszJkE7KXtpZighcilyZXR1cm4gMHxmO3RyW0E+PjBdPTB8dHJbZT4+MF0sQT1BKzF8MCxlPWUrMXwwLHI9ci0xfDB9Zm9yKG49KHI9LTQmaXwwKS02NHwwOygwfEEpPD0oMHxuKTspYXJbQT4+Ml09YXJbZT4+Ml0sYXJbQSs0Pj4yXT1hcltlKzQ+PjJdLGFyW0ErOD4+Ml09YXJbZSs4Pj4yXSxhcltBKzEyPj4yXT1hcltlKzEyPj4yXSxhcltBKzE2Pj4yXT1hcltlKzE2Pj4yXSxhcltBKzIwPj4yXT1hcltlKzIwPj4yXSxhcltBKzI0Pj4yXT1hcltlKzI0Pj4yXSxhcltBKzI4Pj4yXT1hcltlKzI4Pj4yXSxhcltBKzMyPj4yXT1hcltlKzMyPj4yXSxhcltBKzM2Pj4yXT1hcltlKzM2Pj4yXSxhcltBKzQwPj4yXT1hcltlKzQwPj4yXSxhcltBKzQ0Pj4yXT1hcltlKzQ0Pj4yXSxhcltBKzQ4Pj4yXT1hcltlKzQ4Pj4yXSxhcltBKzUyPj4yXT1hcltlKzUyPj4yXSxhcltBKzU2Pj4yXT1hcltlKzU2Pj4yXSxhcltBKzYwPj4yXT1hcltlKzYwPj4yXSxBPUErNjR8MCxlPWUrNjR8MDtmb3IoOygwfEEpPCgwfHIpOylhcltBPj4yXT1hcltlPj4yXSxBPUErNHwwLGU9ZSs0fDB9ZWxzZSBmb3Iocj1pLTR8MDsoMHxBKTwoMHxyKTspdHJbQT4+MF09MHx0cltlPj4wXSx0cltBKzE+PjBdPTB8dHJbZSsxPj4wXSx0cltBKzI+PjBdPTB8dHJbZSsyPj4wXSx0cltBKzM+PjBdPTB8dHJbZSszPj4wXSxBPUErNHwwLGU9ZSs0fDA7Zm9yKDsoMHxBKTwoMHxpKTspdHJbQT4+MF09MHx0cltlPj4wXSxBPUErMXwwLGU9ZSsxfDA7cmV0dXJuIDB8Zn1mdW5jdGlvbiB3YihBLGUscil7dmFyIGk9MDtpZigoMHwoZXw9MCkpPCgwfChBfD0wKSkmKDB8QSk8KGUrKHJ8PTApfDApKXtmb3IoZT1lK3J8MCxBPShpPUEpK3J8MDswPCgwfHIpOyllPWUtMXwwLHI9ci0xfDAsdHJbKEE9QS0xfDApPj4wXT0wfHRyW2U+PjBdO0E9aX1lbHNlIGhiKEEsZSxyKTtyZXR1cm4gMHxBfWZ1bmN0aW9uIHZiKEEsZSxyKXtlfD0wO3ZhciBpLGY9MCxuPTAsdD0wO2lmKGk9KEF8PTApKyhyfD0wKXwwLGUmPTI1NSw2Nzw9KDB8cikpe2Zvcig7MyZBOyl0cltBPj4wXT1lLEE9QSsxfDA7Zm9yKG49KGY9LTQmaXwwKS02NHwwLHQ9ZXxlPDw4fGU8PDE2fGU8PDI0OygwfEEpPD0oMHxuKTspYXJbQT4+Ml09dCxhcltBKzQ+PjJdPXQsYXJbQSs4Pj4yXT10LGFyW0ErMTI+PjJdPXQsYXJbQSsxNj4+Ml09dCxhcltBKzIwPj4yXT10LGFyW0ErMjQ+PjJdPXQsYXJbQSsyOD4+Ml09dCxhcltBKzMyPj4yXT10LGFyW0ErMzY+PjJdPXQsYXJbQSs0MD4+Ml09dCxhcltBKzQ0Pj4yXT10LGFyW0ErNDg+PjJdPXQsYXJbQSs1Mj4+Ml09dCxhcltBKzU2Pj4yXT10LGFyW0ErNjA+PjJdPXQsQT1BKzY0fDA7Zm9yKDsoMHxBKTwoMHxmKTspYXJbQT4+Ml09dCxBPUErNHwwfWZvcig7KDB8QSk8KDB8aSk7KXRyW0E+PjBdPWUsQT1BKzF8MDtyZXR1cm4gaS1yfDB9ZnVuY3Rpb24gbWIoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gZ2IoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gWmIoQSl7cmV0dXJuIDB9ZnVuY3Rpb24gcGIoQSl7cmV0dXJuIDA8PShBPStBKT8rdihBKy41KTorbShBLS41KX1mdW5jdGlvbiB5YihBKXt2YXIgZSxyO3JldHVybiAwPCgwfChyPShBfD0wKSsxNSYtMTZ8MCkpJigwfChBPShlPTB8YXJbYj4+Ml0pK3J8MCkpPCgwfGUpfCgwfEEpPDA/KEIoKSxGKDEyKSwtMSk6KDB8KGFyW2I+PjJdPUEpKT4oMHx5KCkpJiYwPT0oMHxwKCkpPyhhcltiPj4yXT1lLEYoMTIpLC0xKTowfGV9ZnVuY3Rpb24gQmIoKXtyZXR1cm4gWigwKSwwfWZ1bmN0aW9uIEViKEEpe3JldHVybiBaKDEpLDB9ZnVuY3Rpb24gWGIoQSxlKXtyZXR1cm4gWigyKSwwfWZ1bmN0aW9uIFdiKEEsZSxyKXtyZXR1cm4gWigzKSwwfWZ1bmN0aW9uIEliKEEsZSxyLGksZil7cmV0dXJuIFooNSksMH1mdW5jdGlvbiBDYihBLGUscixpLGYpe3JldHVybiBaKDYpLDB9ZnVuY3Rpb24gR2IoQSxlLHIsaSxmLG4pe3JldHVybiBaKDcpLDB9ZnVuY3Rpb24gVmIoQSxlLHIsaSxmLG4pe3JldHVybiBaKDgpLDB9ZnVuY3Rpb24gRmIoQSxlLHIsaSxmLG4sdCl7cmV0dXJuIFooOSksMH1mdW5jdGlvbiBSYihBLGUscixpLGYsbix0LG8pe3JldHVybiBaKDEwKSwwfWZ1bmN0aW9uIE5iKCl7WigxMSl9ZnVuY3Rpb24gX2IoQSl7WigxMil9ZnVuY3Rpb24gWWIoQSxlKXtaKDEzKX1mdW5jdGlvbiBRYihBLGUscil7WigxNCl9ZnVuY3Rpb24gRGIoQSxlLHIsaSl7WigxNSl9ZnVuY3Rpb24gSmIoQSxlLHIsaSxmKXtaKDE2KX1mdW5jdGlvbiBNYihBLGUscixpLGYsbil7WigxNyl9ZnVuY3Rpb24gVGIoQSxlLHIsaSxmLG4sdCl7WigxOCl9ZnVuY3Rpb24gVWIoQSxlLHIsaSxmLG4sdCxvKXtaKDE5KX1mdW5jdGlvbiBTYihBLGUscixpLGYsbix0LG8sYSl7WigyMCl9ZnVuY3Rpb24gT2IoQSxlLHIsaSxmLG4sdCxvLGEsYyl7WigyMSl9dmFyIHpiPVtCYixmdW5jdGlvbigpe3ZhciBBLGUscj0wLGk9MCxmPTA7Zm9yKGk9MzQ1MDksZj0ocj02MTE2MSkrMjJ8MDt0cltyPj4wXT0wfHRyW2k+PjBdLGk9aSsxfDAsKDB8KHI9cisxfDApKTwoMHxmKTspO2lmKDgwPD0oMTArKDB8VmMoMzQ1NDIpKXwwKT4+PjApcmV0dXJuIDYxMTYxO2ZvcihpPTM0NTMxLGY9KHI9NjExNjErKDB8VmMoNjExNjEpKXwwKSsxMXwwO3RyW3I+PjBdPTB8dHJbaT4+MF0saT1pKzF8MCwoMHwocj1yKzF8MCkpPCgwfGYpOyk7cmV0dXJuIEE9NjExNjEsZT0zNDU0MixlfD0wLGZ1bmN0aW9uKEEsZSl7IWZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcj0wLGk9MDtyPWV8PTA7QTpkb3tpZigzJihyXkEpKWk9ODtlbHNle2lmKDMmcilkb3tpZihyPTB8dHJbZT4+MF0sISgodHJbQT4+MF09cik8PDI0Pj4yNCkpYnJlYWsgQTtlPWUrMXwwLEE9QSsxfDB9d2hpbGUoMCE9KDMmZXwwKSk7aWYoISgoLTIxMzkwNjIxNDQmKHI9MHxhcltlPj4yXSleLTIxMzkwNjIxNDQpJnIrLTE2ODQzMDA5KSlmb3IoaT1BO2U9ZSs0fDAsQT1pKzR8MCxhcltpPj4yXT1yLCEoKC0yMTM5MDYyMTQ0JihyPTB8YXJbZT4+Ml0pXi0yMTM5MDYyMTQ0KSZyKy0xNjg0MzAwOXwwKTspaT1BO2k9OH19d2hpbGUoMCk7aWYoOD09KDB8aSkmJihpPTB8dHJbZT4+MF0sKHRyW0E+PjBdPWkpPDwyND4+MjQpKWZvcig7QT1BKzF8MCxpPTB8dHJbKGU9ZSsxfDApPj4wXSwodHJbQT4+MF09aSk8PDI0Pj4yNCE9MDspO30oQXw9MCxlfD0wKX0oKEF8PTApKygwfFZjKEEpKXwwLGUpLDYxMTYxfSxmdW5jdGlvbigpe3JldHVybiAxNzQzMjU3Nn0sZnVuY3Rpb24oKXt2YXIgQSxlLHIsaSxmLG47cmV0dXJuIEE9MHxodSg4KSxhcltBPj4yXT0wLHI9KGFyWyhlPTQrQXwwKT4+Ml09MCl8aHUoOTIpLGFyWzQrcj4+Ml09MCxhcls4K3I+PjJdPTAsYXJbcj4+Ml09NjMzNixmPWk9MTIrcnwwLGFyWyhmfD0wKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTMwMDI1LGFyW2YrMjA+PjJdPTAsYXJbZisyND4+Ml09MCxhcltmKzE2Pj4yXT1mKzIwLGFyW2YrMzI+PjJdPTAsYXJbZiszNj4+Ml09MCxhcltmKzI4Pj4yXT1mKzMyLGFyWyhuPWYrNDB8MCk+PjJdPTAsYXJbNCtuPj4yXT0wLGFyWzgrbj4+Ml09MCxhclsxMituPj4yXT0wLGFyWzE2K24+PjJdPTAsYXJbMjArbj4+Ml09MCxhclsyNCtuPj4yXT0wLGFyW2YrNjg+PjJdPTQsYXJbZis3Mj4+Ml09MzI3NjgsYXJbZis3Nj4+Ml09MzI3NjgsZnVuY3Rpb24oQSl7QXw9MDt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MDtpZihuPTB8aHUoMTMyKSxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLGFyW24+PjJdPTYzNjQsY28oZT1uKzEyfDApLGFyWyhyPUErNjB8MCk+PjJdPWUsaT0wfGFyWyhmPUErNjR8MCk+PjJdLGFyW2Y+PjJdPW4saSYmKGR1KGkpLGU9MHxhcltyPj4yXSksZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wO2lmKHVyPSh3PXVyKSs2NHwwLGY9dys0OHwwLHQ9dys0MHwwLG89dyszMnwwLGE9dysyNHwwLGw9dysxNnwwLGI9dys4fDAsaD0oZD13KSs1NnwwLHY9KGFyWyhBfD0wKT4+Ml09MCl8YXJbKE49QSs0fDApPj4yXSwoYXJbTj4+Ml09MCl8diYmZHUodiksZz0wfGFyWyhrPUErOHwwKT4+Ml0sKDB8KHY9MHxhclsoTj1BKzEyfDApPj4yXSkpIT0oMHxnKSlmb3IoO209distOHwwLGFyW04+PjJdPW0sKDB8KHY9KHY9MHxhclt2Ky00Pj4yXSk/KGR1KHYpLDB8YXJbTj4+Ml0pOm0pKSE9KDB8Zyk7KTtSPTB8aHUoOTYpLGFyW1IrND4+Ml09MCxhcltSKzg+PjJdPTAsYXJbUj4+Ml09NDYwMCxNdChGPVIrMTZ8MCksYXJbUis2MD4+Ml09MCxhcltSKzY0Pj4yXT0wLGFyW1IrNjg+PjJdPTAsYXJbRj4+Ml09NDQzNixhclsoVj1SKzcyfDApPj4yXT0wLGFyW1YrND4+Ml09MCxhcltWKzg+PjJdPTAsYXJbVisxMj4+Ml09MCxhcltWKzE2Pj4yXT0wLGFyW1IrMzY+PjJdPTE3MTg5MDkyOTYsdHJbUis1Mj4+MF09MCxhclsoVj1BKzIwfDApPj4yXT1GLHY9MHxhclsoRj1BKzI0fDApPj4yXSxhcltGPj4yXT1SLDB8diYmZHUodiksUj0wfGh1KDEwNCksYXJbUis0Pj4yXT0wLGFyW1IrOD4+Ml09MCxhcltSPj4yXT00NjU2LE10KGc9UisxNnwwKSxhcltSKzYwPj4yXT0wLGFyW1IrNjQ+PjJdPTAsYXJbUis2OD4+Ml09MCxhcltnPj4yXT00Njg0LGFyW1IrNzI+PjJdPTAsYXJbUis3Nj4+Ml09MTg4NTk1NDkzMixhclsobT1SKzgwfDApPj4yXT0wLGFyW20rND4+Ml09MCxhclttKzg+PjJdPTAsYXJbbSsxMj4+Ml09MCxhclttKzE2Pj4yXT0wLGFyW20rMjA+PjJdPTAsYXJbUiszNj4+Ml09MTc1MTQxMTgyNix0cltSKzUyPj4wXT0xLGFyWyhtPUErMjh8MCk+PjJdPWcsdj0wfGFyWyhnPUErMzJ8MCk+PjJdLGFyW2c+PjJdPVIsMHx2JiZkdSh2KSxHPTB8aHUoNzIpLGFyW0crND4+Ml09MCxhcltHKzg+PjJdPTAsYXJbRz4+Ml09NDYyOCxNdChSPUcrMTZ8MCksYXJbRys2MD4+Ml09MCxhcltHKzY0Pj4yXT0wLGFyW0crNjg+PjJdPTAsYXJbUj4+Ml09NDQ2OCxhcltHKzM2Pj4yXT0xODM1MzY1NDczLHRyW0crNTI+PjBdPTEsYXJbKHM9QSszNnwwKT4+Ml09Uix2PTB8YXJbKFI9QSs0MHwwKT4+Ml0sYXJbUj4+Ml09RywwfHYmJmR1KHYpLEc9MHxodSg3MiksYXJbRys0Pj4yXT0wLGFyW0crOD4+Ml09MCxhcltHPj4yXT01MDE2LE10KEk9RysxNnwwKSxhcltHKzYwPj4yXT0wLGFyW0crNjQ+PjJdPTAsYXJbRys2OD4+Ml09MCxhcltJPj4yXT01MDQ0LGFyW0crMzY+PjJdPTE3Njg5NzMxNjcsdHJbRys1Mj4+MF09MCxhclsoYz1BKzQ0fDApPj4yXT1JLHY9MHxhclsoST1BKzQ4fDApPj4yXSxhcltJPj4yXT1HLDB8diYmZHUodiksQz0wfGh1KDg4KSxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0M+PjJdPTUwNzYsTXQoRz1DKzE2fDApLGFyW0MrNjA+PjJdPTAsYXJbQys2ND4+Ml09MCxhcltDKzY4Pj4yXT0wLGFyW0c+PjJdPTUxMDQsYXJbQys3Mj4+Ml09MCxhcltDKzc2Pj4yXT0wLGFyW0MrODA+PjJdPTAsYXJbQyszNj4+Ml09MTc2ODk3NTcxMyx0cltDKzUyPj4wXT0xLGFyWyh1PUErNTJ8MCk+PjJdPUcsdj0wfGFyWyhHPUErNTZ8MCk+PjJdLGFyW0c+PjJdPUMsMHx2JiZkdSh2KSxDPTB8aHUoMTA0KSxhcltDKzQ+PjJdPTAsYXJbQys4Pj4yXT0wLGFyW0M+PjJdPTQ3NzYsTXQoRT1DKzE2fDApLGFyW0MrNjA+PjJdPTAsYXJbQys2ND4+Ml09MCxhcltDKzY4Pj4yXT0wLGFyW0U+PjJdPTQ4MDQsQj1DKzcyfDAsYXJbQys5Nj4+Ml09MCxhcltCPj4yXT0wLGFyW0IrND4+Ml09MCxhcltCKzg+PjJdPTAsYXJbQisxMj4+Ml09MCxhcltCKzE2Pj4yXT0wLHRyW0IrMjA+PjBdPTAsYXJbQyszNj4+Ml09MTc2ODcxNDA4Myx0cltDKzUyPj4wXT0xLGFyWyhCPUErNjB8MCk+PjJdPUUsdj0wfGFyWyhFPUErNjR8MCk+PjJdLGFyW0U+PjJdPUMsMHx2JiZkdSh2KSxDPTB8aHUoNzIpLGFyW0MrND4+Ml09MCxhcltDKzg+PjJdPTAsYXJbQz4+Ml09NDgzNixNdChYPUMrMTZ8MCksYXJbQys2MD4+Ml09MCxhcltDKzY0Pj4yXT0wLGFyW0MrNjg+PjJdPTAsYXJbWD4+Ml09NDg2NCxhcltDKzM2Pj4yXT0xNzY4NTE3MjIyLHRyW0MrNTI+PjBdPTEsYXJbKG49QSs5MnwwKT4+Ml09WCx2PTB8YXJbKFg9QSs5NnwwKT4+Ml0sYXJbWD4+Ml09QywwfHYmJmR1KHYpLHk9MHxodSg3MiksYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5Pj4yXT00OTU2LE10KFc9eSsxNnwwKSxhclt5KzYwPj4yXT0wLGFyW3krNjQ+PjJdPTAsYXJbeSs2OD4+Ml09MCxhcltXPj4yXT00OTg0LGFyW3krMzY+PjJdPTE3Njg5NzcwMDgsdHJbeSs1Mj4+MF09MCxhclsoQz1BKzEwMHwwKT4+Ml09Vyx2PTB8YXJbKFc9QSsxMDR8MCk+PjJdLGFyW1c+PjJdPXksMHx2JiZkdSh2KSxwPTB8aHUoODApLGFyW3ArND4+Ml09MCxhcltwKzg+PjJdPTAsYXJbcD4+Ml09NDcxNixNdCh5PXArMTZ8MCksYXJbcCs2MD4+Ml09MCxhcltwKzY0Pj4yXT0wLGFyW3ArNjg+PjJdPTAsYXJbeT4+Ml09NDc0NCxhcltwKzcyPj4yXT0wLGFyW3ArMzY+PjJdPTE4ODU5NTkyNzcsdHJbcCs1Mj4+MF09MSxhclsoaT1BKzg0fDApPj4yXT15LHY9MHxhclsoeT1BKzg4fDApPj4yXSxhclt5Pj4yXT1wLDB8diYmZHUodikscj0wfGFyW3M+PjJdLFo9MHxhclttPj4yXSxhcltmPj4yXT1aLHA9NCtmfDAsbT0wfGFyW2c+PjJdLChnPTA9PSgwfChhcltwPj4yXT1tKSkpfHxidShtKSwoMHwodj0wfGFyWyhlPTQ4K3J8MCk+PjJdKSk9PSgwfGFyWzUyK3I+PjJdKT9VdCg0NCtyfDAsZik6KGFyW3Y+PjJdPVosYXJbdis0Pj4yXT1tLGd8fChidShtKSx2PTB8YXJbZT4+Ml0pLGFyW2U+PjJdPXYrOCksMHwodj0wfGFyW3A+PjJdKSYmZHUodiksbT0wfGFyW3M+PjJdLGFyW3Q+PjJdPWFyW2k+PjJdLFo9NCt0fDAsdj0wfGFyW3k+PjJdLDB8KGFyW1o+PjJdPXYpJiZidSh2KSwoMHwodj0wfGFyWyhnPW0rNDh8MCk+PjJdKSk9PSgwfGFyW20rNTI+PjJdKT9VdChtKzQ0fDAsdCk6KGFyW3Y+PjJdPWFyW3Q+PjJdLG09MHxhcltaPj4yXSwoYXJbdis0Pj4yXT1tKSYmKGJ1KG0pLHY9MHxhcltnPj4yXSksYXJbZz4+Ml09dis4KSwwfCh2PTB8YXJbWj4+Ml0pJiZkdSh2KSxtPTB8YXJbcz4+Ml0sYXJbbz4+Ml09YXJbQj4+Ml0sWj00K298MCx2PTB8YXJbRT4+Ml0sMHwoYXJbWj4+Ml09dikmJmJ1KHYpLCgwfCh2PTB8YXJbKGc9bSs0OHwwKT4+Ml0pKT09KDB8YXJbbSs1Mj4+Ml0pP1V0KG0rNDR8MCxvKTooYXJbdj4+Ml09YXJbbz4+Ml0sbT0wfGFyW1o+PjJdLChhclt2KzQ+PjJdPW0pJiYoYnUobSksdj0wfGFyW2c+PjJdKSxhcltnPj4yXT12KzgpLDB8KHY9MHxhcltaPj4yXSkmJmR1KHYpLG09MHxhcltzPj4yXSxhclthPj4yXT1hcltuPj4yXSxaPTQrYXwwLHY9MHxhcltYPj4yXSwwfChhcltaPj4yXT12KSYmYnUodiksKDB8KHY9MHxhclsoZz1tKzQ4fDApPj4yXSkpPT0oMHxhclttKzUyPj4yXSk/VXQobSs0NHwwLGEpOihhclt2Pj4yXT1hclthPj4yXSxtPTB8YXJbWj4+Ml0sKGFyW3YrND4+Ml09bSkmJihidShtKSx2PTB8YXJbZz4+Ml0pLGFyW2c+PjJdPXYrOCksMHwodj0wfGFyW1o+PjJdKSYmZHUodiksbT0wfGFyW3M+PjJdLGFyW2w+PjJdPWFyW0M+PjJdLFo9NCtsfDAsdj0wfGFyW1c+PjJdLDB8KGFyW1o+PjJdPXYpJiZidSh2KSwoMHwodj0wfGFyWyhnPW0rNDh8MCk+PjJdKSk9PSgwfGFyW20rNTI+PjJdKT9VdChtKzQ0fDAsbCk6KGFyW3Y+PjJdPWFyW2w+PjJdLG09MHxhcltaPj4yXSwoYXJbdis0Pj4yXT1tKSYmKGJ1KG0pLHY9MHxhcltnPj4yXSksYXJbZz4+Ml09dis4KSwwfCh2PTB8YXJbWj4+Ml0pJiZkdSh2KSxtPTB8YXJbQz4+Ml0sYXJbYj4+Ml09YXJbYz4+Ml0sWj00K2J8MCx2PTB8YXJbST4+Ml0sMHwoYXJbWj4+Ml09dikmJmJ1KHYpLCgwfCh2PTB8YXJbKGc9bSs0OHwwKT4+Ml0pKT09KDB8YXJbbSs1Mj4+Ml0pP1V0KG0rNDR8MCxiKTooYXJbdj4+Ml09YXJbYj4+Ml0sbT0wfGFyW1o+PjJdLChhclt2KzQ+PjJdPW0pJiYoYnUobSksdj0wfGFyW2c+PjJdKSxhcltnPj4yXT12KzgpLDB8KHY9MHxhcltaPj4yXSkmJmR1KHYpLG09MHxhcltDPj4yXSxhcltkPj4yXT1hclt1Pj4yXSxaPWQrNHwwLHY9MHxhcltHPj4yXSwwfChhcltaPj4yXT12KSYmYnUodiksKDB8KHY9MHxhclsoZz1tKzQ4fDApPj4yXSkpPT0oMHxhclttKzUyPj4yXSk/VXQobSs0NHwwLGQpOihhclt2Pj4yXT1hcltkPj4yXSxtPTB8YXJbWj4+Ml0sKGFyW3YrND4+Ml09bSkmJihidShtKSx2PTB8YXJbZz4+Ml0pLGFyW2c+PjJdPXYrOCksMHwodj0wfGFyW1o+PjJdKSYmZHUodiksdW8odj1BKzEwOHwwLDB8YXJbKG09QSsxMTJ8MCk+PjJdKSxhcltBKzExNj4+Ml09MCxhclt2Pj4yXT1tLGFyW20+PjJdPTAsYXJbaD4+Ml09YXJbVj4+Ml0sbT00K2h8MCx2PTB8YXJbRj4+Ml0sMHwoYXJbbT4+Ml09dikmJmJ1KHYpLHY9MHxhcltOPj4yXSxnPUErMTZ8MDtkb3tpZih2Pj4+MDwoMHxhcltnPj4yXSk+Pj4wKWFyW3Y+PjJdPWFyW2g+PjJdLGFyW3YrND4+Ml09YXJbbT4+Ml0sYXJbaD4+Ml09MCxhclttPj4yXT0wLGFyW04+PjJdPXYrODtlbHNle2lmKGVlKGssaCksISh2PTB8YXJbbT4+Ml0pKWJyZWFrO2R1KHYpfX13aGlsZSgwKTtpZihhcltoPj4yXT1hcltzPj4yXSxtPTQraHwwLHY9MHxhcltSPj4yXSwwfChhclttPj4yXT12KSYmYnUodiksKHY9MHxhcltOPj4yXSk+Pj4wPCgwfGFyW2c+PjJdKT4+PjApcmV0dXJuIGFyW3Y+PjJdPWFyW2g+PjJdLGFyW3YrND4+Ml09YXJbbT4+Ml0sYXJbaD4+Ml09MCxhclttPj4yXT0wLGFyW04+PjJdPXYrOCx1cj13O2VlKGssaCksKHY9MHxhclttPj4yXSkmJmR1KHYpLHVyPXd9KGUpLHZsKGY9QSsyOHwwLDB8YXJbKGk9QSszMnwwKT4+Ml0pLGFyW0ErMzY+PjJdPTAsYXJbZj4+Ml09aSxhcltpPj4yXT0wLGk9MHxhcltBKzQwPj4yXSwoMHwoZT0wfGFyWyhmPUErNDR8MCk+PjJdKSkhPSgwfGkpKWZvcig7cj1lKy04fDAsYXJbZj4+Ml09ciwoMHwoZT0oZT0wfGFyW2UrLTQ+PjJdKT8oZHUoZSksMHxhcltmPj4yXSk6cikpIT0oMHxpKTspO2FyW0ErNTI+PjJdPTAsZT0wfGFyWyhuPUErNTZ8MCk+PjJdLGFyW24+PjJdPTAsZSYmZHUoZSl9KGYpLGFyW0E+PjJdPWksYXJbZT4+Ml09ciwwfEF9LGZ1bmN0aW9uKCl7dmFyIEE7cmV0dXJuIEE9MHxodSgxMiksYXJbQT4+Ml09MCxhcls0K0E+PjJdPTAsKGFyWzgrQT4+Ml09MCl8QX0sQmIsQmIsQmJdLGpiPVtFYixmdW5jdGlvbihBKXtyZXR1cm4gRD0wfGFyWyhBPShBfD0wKSsxNnwwKSs0Pj4yXSwwfGFyW0E+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MDtyZXR1cm4oaT0wfGFyWyhlPShBfD0wKSs0NHwwKT4+Ml0pPj4+MDwocj0wfGFyW0ErMjQ+PjJdKT4+PjAmJihpPWFyW2U+PjJdPXIpLDgmYXJbQSs0OD4+Ml0/KChyPTB8YXJbKGU9QSsxNnwwKT4+Ml0pPj4+MDxpPj4+MCYmKHI9YXJbZT4+Ml09aSkscj4+PjA8PShlPTB8YXJbQSsxMj4+Ml0pPj4+MD8wfChBPS0xKTowfChBPTB8Y3JbZT4+MF0pKTowfChBPS0xKX0sZnVuY3Rpb24oQSl7dmFyIGU9MDtyZXR1cm4gMHwoQT0tMT09KDB8KGU9MHxqYlsxMjcmYXJbMzYrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSkpPy0xOihBPTB8YXJbKGU9QSsxMnwwKT4+Ml0sYXJbZT4+Ml09QSsxLDB8aGYoMHx0cltBPj4wXSkpKX0sZnVuY3Rpb24oQSl7cmV0dXJuIDE4NTIwMDk1OTJ9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGFyWyhBfD0wKSs0Pj4yXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB8KDE9PSgwfChBfD0wKSk/MTAwOjApfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7cmV0dXJuIHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLEE9MHwoaT0wfGFyWyhBfD0wKSs2MD4+Ml0sMHwoaXw9MCkpLGFyW3I+PjJdPUEsQT0wfEljKDB8Sig2LDB8cikpLHVyPWUsMHxBfSxmdW5jdGlvbihBKXtyZXR1cm4tMX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4tMX0sZnVuY3Rpb24oQSl7dmFyIGU9MDtyZXR1cm4gMHwoQT0tMT09KDB8KGU9MHxqYlsxMjcmYXJbMzYrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSkpPy0xOihBPTB8YXJbKGU9QSsxMnwwKT4+Ml0sYXJbZT4+Ml09QSs0LDB8Z2YoMHxhcltBPj4yXSkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG8sYSxjPTAsbD0wO2k9dXI9KGE9dXIpKzMxJi0zMix1cj11cisxNnwwLGY9KEF8PTApKzM2fDAsbj1BKzQwfDAsdD04KyhyPTgraXwwKXwwLG89cixlPUErMzJ8MDtBOmZvcig7Oyl7aWYoQT0wfGFyW2Y+PjJdLEE9MHxLYlszMSZhclsyMCsoMHxhcltBPj4yXSk+PjJdXShBLDB8YXJbbj4+Ml0scix0LGkpLCgwfFVpKHIsMSxsPSgwfGFyW2k+PjJdKS1vfDAsMHxhcltlPj4yXSkpIT0oMHxsKSl7QT0tMTticmVha31zd2l0Y2goMHxBKXtjYXNlIDE6YnJlYWs7Y2FzZSAyOkE9LTE7YnJlYWsgQTtkZWZhdWx0OmM9NDticmVhayBBfX1yZXR1cm4gND09KDB8YykmJihBPSgwIT0oMHxPaSgwfGFyW2U+PjJdKSkpPDwzMT4+MzEpLHVyPWEsMHxBfSxmdW5jdGlvbihBKXt2YXIgZSxyLGksZixuLHQsbyxhLGM9MCxsPTA7aT11cj0oYT11cikrMzEmLTMyLHVyPXVyKzE2fDAsZj0oQXw9MCkrMzZ8MCxuPUErNDB8MCx0PTgrKHI9OCtpfDApfDAsbz1yLGU9QSszMnwwO0E6Zm9yKDs7KXtpZihBPTB8YXJbZj4+Ml0sQT0wfEtiWzMxJmFyWzIwKygwfGFyW0E+PjJdKT4+Ml1dKEEsMHxhcltuPj4yXSxyLHQsaSksKDB8VWkociwxLGw9KDB8YXJbaT4+Ml0pLW98MCwwfGFyW2U+PjJdKSkhPSgwfGwpKXtBPS0xO2JyZWFrfXN3aXRjaCgwfEEpe2Nhc2UgMTpicmVhaztjYXNlIDI6QT0tMTticmVhayBBO2RlZmF1bHQ6Yz00O2JyZWFrIEF9fXJldHVybiA0PT0oMHxjKSYmKEE9KDAhPSgwfE9pKDB8YXJbZT4+Ml0pKSk8PDMxPj4zMSksdXI9YSwwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGZuKEF8PTAsMCl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfGZuKEF8PTAsMSl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRuKEF8PTAsMCl9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRuKEF8PTAsMSl9LGZ1bmN0aW9uKEEpe3JldHVybiAyfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY2OTZdKSYmMHxpYig1NjY5NikmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2NzA0XSkmJjB8aWIoNTY3MDQpKXtlPTU5OTM2O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwMTA0IT0oMHxlKSl9R3UoNTk5MzYsNTQzMDIpLEd1KDU5OTQ4LDU0MzA5KSxHdSg1OTk2MCw1NDMxNiksR3UoNTk5NzIsNTQzMjQpLEd1KDU5OTg0LDU0MzM0KSxHdSg1OTk5Niw1NDM0MyksR3UoNjAwMDgsNTQzNTApLEd1KDYwMDIwLDU0MzU5KSxHdSg2MDAzMiw1NDM2MyksR3UoNjAwNDQsNTQzNjcpLEd1KDYwMDU2LDU0MzcxKSxHdSg2MDA2OCw1NDM3NSksR3UoNjAwODAsNTQzNzkpLEd1KDYwMDkyLDU0MzgzKX0oKSxhclsxNTAyNl09NTk5MzYpLDB8YXJbMTUwMjZdfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY2ODBdKSYmMHxpYig1NjY4MCkmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2Njg4XSkmJjB8aWIoNTY2ODgpKXtlPTU5NjQ0O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDU5OTMyIT0oMHxlKSl9R3UoNTk2NDQsNTQxNzIpLEd1KDU5NjU2LDU0MTgwKSxHdSg1OTY2OCw1NDE4OSksR3UoNTk2ODAsNTQxOTUpLEd1KDU5NjkyLDU0MjAxKSxHdSg1OTcwNCw1NDIwNSksR3UoNTk3MTYsNTQyMTApLEd1KDU5NzI4LDU0MjE1KSxHdSg1OTc0MCw1NDIyMiksR3UoNTk3NTIsNTQyMzIpLEd1KDU5NzY0LDU0MjQwKSxHdSg1OTc3Niw1NDI0OSksR3UoNTk3ODgsNTQyNTgpLEd1KDU5ODAwLDU0MjYyKSxHdSg1OTgxMiw1NDI2NiksR3UoNTk4MjQsNTQyNzApLEd1KDU5ODM2LDU0MjAxKSxHdSg1OTg0OCw1NDI3NCksR3UoNTk4NjAsNTQyNzgpLEd1KDU5ODcyLDU0MjgyKSxHdSg1OTg4NCw1NDI4NiksR3UoNTk4OTYsNTQyOTApLEd1KDU5OTA4LDU0Mjk0KSxHdSg1OTkyMCw1NDI5OCl9KCksYXJbMTQ5ODNdPTU5NjQ0KSwwfGFyWzE0OTgzXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDA9PSgwfHRyWzU2NjY0XSkmJjB8aWIoNTY2NjQpJiYoZnVuY3Rpb24oKXt2YXIgQT0wLGU9MDtpZigwPT0oMHx0cls1NjY3Ml0pJiYwfGliKDU2NjcyKSl7ZT01OTM1Mjtkb3tmb3IoYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLEE9MDszIT0oMHxBKTspYXJbZSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtlPWUrMTJ8MH13aGlsZSg1OTY0MCE9KDB8ZSkpfUd1KDU5MzUyLDU0MTY2KSxHdSg1OTM2NCw1NDE2OSl9KCksYXJbMTQ5MTBdPTU5MzUyKSwwfGFyWzE0OTEwXX0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyLGk9MCxmPTA7cmV0dXJuIGU9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NjU2XSkmJjB8aWIoNTY2NTYpJiYoYXJbMTQ4MzVdPTAsYXJbMTQ4MzZdPTAsNDI5NDk2NzI3OTwoaT0oYXJbMTQ4MzddPTApfFlmKDU0MTQ1KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cls1OTM1MV09aSxBPTU5MzQwKTooQT0wfGh1KGY9aSsxNiYtMTYpLGFyWzE0ODM1XT1BLGFyWzE0ODM3XT0tMjE0NzQ4MzY0OHxmLGFyWzE0ODM2XT1pKSx3ZihBLDU0MTQ1LGkpLFFmKEEraXwodHJbZT4+MF09MCksZSkpLHVyPXIsNTkzNDB9LGZ1bmN0aW9uKEEpe0F8PTA7dmFyIGUscixpPTAsZj0wO3JldHVybiBlPXVyPShyPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjY0OF0pJiYwfGliKDU2NjQ4KSYmKGFyWzE0ODMyXT0wLGFyWzE0ODMzXT0wLDQyOTQ5NjcyNzk8KGk9KGFyWzE0ODM0XT0wKXxZZig1NDEzMykpPj4+MCYmcHUoKSxpPj4+MDwxMT8odHJbNTkzMzldPWksQT01OTMyOCk6KEE9MHxodShmPWkrMTYmLTE2KSxhclsxNDgzMl09QSxhclsxNDgzNF09LTIxNDc0ODM2NDh8ZixhclsxNDgzM109aSksd2YoQSw1NDEzMyxpKSxRZihBK2l8KHRyW2U+PjBdPTApLGUpKSx1cj1yLDU5MzI4fSxmdW5jdGlvbihBKXtBfD0wO3ZhciBlLHIsaT0wLGY9MDtyZXR1cm4gZT11cj0ocj11cikrMzEmLTMyLHVyPXVyKzE2fDAsMD09KDB8dHJbNTY2NDBdKSYmMHxpYig1NjY0MCkmJihhclsxNDgyOV09MCxhclsxNDgzMF09MCw0Mjk0OTY3Mjc5PChpPShhclsxNDgzMV09MCl8WWYoNTQxMjQpKT4+PjAmJnB1KCksaT4+PjA8MTE/KHRyWzU5MzI3XT1pLEE9NTkzMTYpOihBPTB8aHUoZj1pKzE2Ji0xNiksYXJbMTQ4MjldPUEsYXJbMTQ4MzFdPS0yMTQ3NDgzNjQ4fGYsYXJbMTQ4MzBdPWkpLHdmKEEsNTQxMjQsaSksUWYoQStpfCh0cltlPj4wXT0wKSxlKSksdXI9ciw1OTMxNn0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyLGk9MCxmPTA7cmV0dXJuIGU9dXI9KHI9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NjMyXSkmJjB8aWIoNTY2MzIpJiYoYXJbMTQ4MjZdPTAsYXJbMTQ4MjddPTAsNDI5NDk2NzI3OTwoaT0oYXJbMTQ4MjhdPTApfFlmKDU0MTE1KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cls1OTMxNV09aSxBPTU5MzA0KTooQT0wfGh1KGY9aSsxNiYtMTYpLGFyWzE0ODI2XT1BLGFyWzE0ODI4XT0tMjE0NzQ4MzY0OHxmLGFyWzE0ODI3XT1pKSx3ZihBLDU0MTE1LGkpLFFmKEEraXwodHJbZT4+MF09MCksZSkpLHVyPXIsNTkzMDR9LGZ1bmN0aW9uKEEpe3JldHVybiAyfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY3NzZdKSYmMHxpYig1Njc3NikmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2Nzg0XSkmJjB8aWIoNTY3ODQpKXtlPTYwNzQ4O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwOTE2IT0oMHxlKSl9VHUoNjA3NDgsMTU5MDQpLFR1KDYwNzYwLDE1OTMyKSxUdSg2MDc3MiwxNTk2MCksVHUoNjA3ODQsMTU5OTIpLFR1KDYwNzk2LDE2MDMyKSxUdSg2MDgwOCwxNjA2OCksVHUoNjA4MjAsMTYwOTYpLFR1KDYwODMyLDE2MTMyKSxUdSg2MDg0NCwxNjE0OCksVHUoNjA4NTYsMTYxNjQpLFR1KDYwODY4LDE2MTgwKSxUdSg2MDg4MCwxNjE5NiksVHUoNjA4OTIsMTYyMTIpLFR1KDYwOTA0LDE2MjI4KX0oKSxhclsxNTIyOV09NjA3NDgpLDB8YXJbMTUyMjldfSxmdW5jdGlvbihBKXtyZXR1cm4gMD09KDB8dHJbNTY3NjBdKSYmMHxpYig1Njc2MCkmJihmdW5jdGlvbigpe3ZhciBBPTAsZT0wO2lmKDA9PSgwfHRyWzU2NzY4XSkmJjB8aWIoNTY3NjgpKXtlPTYwNDU2O2Rve2ZvcihhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsQT0wOzMhPSgwfEEpOylhcltlKyhBPDwyKT4+Ml09MCxBPUErMXwwO2U9ZSsxMnwwfXdoaWxlKDYwNzQ0IT0oMHxlKSl9VHUoNjA0NTYsMTUzODQpLFR1KDYwNDY4LDE1NDE2KSxUdSg2MDQ4MCwxNTQ1MiksVHUoNjA0OTIsMTU0NzYpLFR1KDYwNTA0LDE1NTAwKSxUdSg2MDUxNiwxNTUxNiksVHUoNjA1MjgsMTU1MzYpLFR1KDYwNTQwLDE1NTU2KSxUdSg2MDU1MiwxNTU4NCksVHUoNjA1NjQsMTU2MjQpLFR1KDYwNTc2LDE1NjU2KSxUdSg2MDU4OCwxNTY5MiksVHUoNjA2MDAsMTU3MjgpLFR1KDYwNjEyLDE1NzQ0KSxUdSg2MDYyNCwxNTc2MCksVHUoNjA2MzYsMTU3NzYpLFR1KDYwNjQ4LDE1NTAwKSxUdSg2MDY2MCwxNTc5MiksVHUoNjA2NzIsMTU4MDgpLFR1KDYwNjg0LDE1ODI0KSxUdSg2MDY5NiwxNTg0MCksVHUoNjA3MDgsMTU4NTYpLFR1KDYwNzIwLDE1ODcyKSxUdSg2MDczMiwxNTg4OCl9KCksYXJbMTUxODZdPTYwNDU2KSwwfGFyWzE1MTg2XX0sZnVuY3Rpb24oQSl7cmV0dXJuIDA9PSgwfHRyWzU2NzQ0XSkmJjB8aWIoNTY3NDQpJiYoZnVuY3Rpb24oKXt2YXIgQT0wLGU9MDtpZigwPT0oMHx0cls1Njc1Ml0pJiYwfGliKDU2NzUyKSl7ZT02MDE2NDtkb3tmb3IoYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLEE9MDszIT0oMHxBKTspYXJbZSsoQTw8Mik+PjJdPTAsQT1BKzF8MDtlPWUrMTJ8MH13aGlsZSg2MDQ1MiE9KDB8ZSkpfVR1KDYwMTY0LDE1MzYwKSxUdSg2MDE3NiwxNTM3Mil9KCksYXJbMTUxMTNdPTYwMTY0KSwwfGFyWzE1MTEzXX0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtpZihBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjczNl0pJiYwfGliKDU2NzM2KSl7YXJbMTUwMzhdPTAsYXJbMTUwMzldPTAsMTA3Mzc0MTgwNzwoaT0oYXJbMTUwNDBdPTApfE1yKDE1Mjc2KSk+Pj4wJiZwdSgpO2Rve2lmKDI8PWk+Pj4wKXtpZighKDEwNzM3NDE4MjM8KHI9aSs0Ji00KT4+PjApKXtmPTB8aHUocjw8MiksYXJbMTUwMzhdPWYsYXJbMTUwNDBdPS0yMTQ3NDgzNjQ4fHIsYXJbMTUwMzldPWk7YnJlYWt9bEEoKX1lbHNlIHRyWzYwMTYzXT1pLGY9NjAxNTJ9d2hpbGUoMCk7WmYoZiwxNTI3NixpKSxsbihmKyhpPDwyKXwoYXJbQT4+Ml09MCksQSl9cmV0dXJuIHVyPWUsNjAxNTJ9LGZ1bmN0aW9uKEEpe0F8PTA7dmFyIGUscj0wLGk9MCxmPTA7aWYoQT11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsMD09KDB8dHJbNTY3MjhdKSYmMHxpYig1NjcyOCkpe2FyWzE1MDM1XT0wLGFyWzE1MDM2XT0wLDEwNzM3NDE4MDc8KGk9KGFyWzE1MDM3XT0wKXxNcigxNTIyOCkpPj4+MCYmcHUoKTtkb3tpZigyPD1pPj4+MCl7aWYoISgxMDczNzQxODIzPChyPWkrNCYtNCk+Pj4wKSl7Zj0wfGh1KHI8PDIpLGFyWzE1MDM1XT1mLGFyWzE1MDM3XT0tMjE0NzQ4MzY0OHxyLGFyWzE1MDM2XT1pO2JyZWFrfWxBKCl9ZWxzZSB0cls2MDE1MV09aSxmPTYwMTQwfXdoaWxlKDApO1pmKGYsMTUyMjgsaSksbG4oZisoaTw8Mil8KGFyW0E+PjJdPTApLEEpfXJldHVybiB1cj1lLDYwMTQwfSxmdW5jdGlvbihBKXtBfD0wO3ZhciBlLHI9MCxpPTAsZj0wO2lmKEE9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLDA9PSgwfHRyWzU2NzIwXSkmJjB8aWIoNTY3MjApKXthclsxNTAzMl09MCxhclsxNTAzM109MCwxMDczNzQxODA3PChpPShhclsxNTAzNF09MCl8TXIoMTUxOTIpKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwocj1pKzQmLTQpPj4+MCkpe2Y9MHxodShyPDwyKSxhclsxNTAzMl09ZixhclsxNTAzNF09LTIxNDc0ODM2NDh8cixhclsxNTAzM109aTticmVha31sQSgpfWVsc2UgdHJbNjAxMzldPWksZj02MDEyOH13aGlsZSgwKTtaZihmLDE1MTkyLGkpLGxuKGYrKGk8PDIpfChhcltBPj4yXT0wKSxBKX1yZXR1cm4gdXI9ZSw2MDEyOH0sZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtpZihBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCwwPT0oMHx0cls1NjcxMl0pJiYwfGliKDU2NzEyKSl7YXJbMTUwMjldPTAsYXJbMTUwMzBdPTAsMTA3Mzc0MTgwNzwoaT0oYXJbMTUwMzFdPTApfE1yKDE1MTU2KSk+Pj4wJiZwdSgpO2Rve2lmKDI8PWk+Pj4wKXtpZighKDEwNzM3NDE4MjM8KHI9aSs0Ji00KT4+PjApKXtmPTB8aHUocjw8MiksYXJbMTUwMjldPWYsYXJbMTUwMzFdPS0yMTQ3NDgzNjQ4fHIsYXJbMTUwMzBdPWk7YnJlYWt9bEEoKX1lbHNlIHRyWzYwMTI3XT1pLGY9NjAxMTZ9d2hpbGUoMCk7WmYoZiwxNTE1NixpKSxsbihmKyhpPDwyKXwoYXJbQT4+Ml09MCksQSl9cmV0dXJuIHVyPWUsNjAxMTZ9LGZ1bmN0aW9uKEEpe3JldHVybiAxMjd9LGZ1bmN0aW9uKEEpe3JldHVybiAxMjd9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3fSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDIxNDc0ODM2NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAyMTQ3NDgzNjQ3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDIxNDc0ODM2NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAyMTQ3NDgzNjQ3fSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXtyZXR1cm4gNH0sZnVuY3Rpb24oQSl7dmFyIGUscj0wO2lmKHI9MHxyZigwfGFyWyhBPShBfD0wKSs4fDApPj4yXSksZT0wfGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MDtmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MDtBOmRve2lmKGUpe2Rve2lmKDB8cil7aWYodD0wPT0oMHxBKT9mOkEsLTE8KEE9MHx0cltlPj4wXSk8PDI0Pj4yNCl7YXJbdD4+Ml09MjU1JkEsQT1BPDwyND4+MjQhPTAmMTticmVhayBBfWlmKG49MTA0ODgsQT0wfHRyW2U+PjBdLCEoMHxhclthcltuPj4yXT4+Ml0pKXthclt0Pj4yXT1BPDwyND4+MjQmNTczNDMsQT0xO2JyZWFrIEF9aWYoKEE9KDI1NSZBKS0xOTR8MCk+Pj4wPD01MCl7aWYoZj1lKzF8MCxuPTB8YXJbOTg5NisoQTw8Mik+PjJdLHI+Pj4wPDQmJm4mLTIxNDc0ODM2NDg+Pj4oKDYqcnwwKS02fDApfDApYnJlYWs7aWYoKChyPShBPTB8Y3JbZj4+MF0pPj4+MykrLTE2fHIrKG4+PjI2KSk+Pj4wPD03KXtpZigwPD0oMHwoQT1BKy0xMjh8bjw8NikpKXthclt0Pj4yXT1BLEE9MjticmVhayBBfWlmKChmPSgwfGNyW2UrMj4+MF0pLTEyOHwwKT4+PjA8PTYzKXtpZigwPD0oMHwoZnw9QTw8NikpKXthclt0Pj4yXT1mLEE9MzticmVhayBBfWlmKChBPSgwfGNyW2UrMz4+MF0pLTEyOHwwKT4+PjA8PTYzKXthclt0Pj4yXT1BfGY8PDYsQT00O2JyZWFrIEF9fX19fX13aGlsZSgwKTthclsoQT0xMDM2NCk+PjJdPTg0LEE9LTF9ZWxzZSBBPTB9d2hpbGUoMCk7cmV0dXJuIHVyPWksMHxBfSgwLDAsNCksMHxyJiZyZihyKSxlKUE9LTE7ZWxzZXtpZihBPTB8YXJbQT4+Ml0pcmV0dXJuIHI9MHxyZihBKSxBPTB8eWkoKSwwfHImJnJmKHIpLDE9PSgwfEEpfDA7QT0xfXJldHVybiAwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfSxmdW5jdGlvbihBKXt2YXIgZT0wO3JldHVybihBPTB8YXJbKEF8PTApKzg+PjJdKT8oZT0wfHJmKEEpLEE9MHx5aSgpLGUmJnJmKGUpKTpBPTEsMHxBfSxmdW5jdGlvbihBKXtyZXR1cm4gMHx0clsoQXw9MCkrOD4+MF19LGZ1bmN0aW9uKEEpe3JldHVybiAwfHRyWyhBfD0wKSs5Pj4wXX0sZnVuY3Rpb24oQSl7cmV0dXJuIDB8YXJbKEF8PTApKzg+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMHxhclsoQXw9MCkrMTI+PjJdfSxmdW5jdGlvbihBKXtyZXR1cm4gMX0sZnVuY3Rpb24oQSl7cmV0dXJuIDF9LGZ1bmN0aW9uKEEpe3JldHVybiAxfSxmdW5jdGlvbihBKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSl7cmV0dXJuIDB9LGZ1bmN0aW9uKEEpe3JldHVybiA0fSxmdW5jdGlvbihBKXtyZXR1cm4gNTU4NDd9LGZ1bmN0aW9uKEEpe3JldHVybiAwfChlPShBfD0wKSs0fDAsMHxhclsoZXw9MCk+PjJdKTt2YXIgZX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbj0wO3JldHVybiB1cj0ocj11cikrMTZ8MCxmPXIsaXNbNTExJihBfD0wKV0oZiksQT0wfHljKChuPShpPShuPTB8dHJbZisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmKzQ+PjJdOjI1NSZuKSs0fDApLGFyW0E+PjJdPW4sZT0wfGFyW2Y+PjJdLGhiKEErNHwwLDB8KGk/ZTpmKSwwfG4pLHVyPShpJiZ2dShlKSxyKSwwfEF9LGZ1bmN0aW9uKEEpe3JldHVybiAwfHpiWzcmKEF8PTApXSgpfSxmdW5jdGlvbihBKXtyZXR1cm4gMHx6Yls3JihBfD0wKV0oKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0PTA7aWYodXI9KG49dXIpKzE2fDAsc2woaT1uLDQwKygwfGFyWyhBfD0wKT4+Ml0pfDApLGY9KHQ9MHxhclsocj1pKzR8MCk+PjJdKS0oQT0wfGFyW2k+PjJdKT4+MywhKGU9QSkpcmV0dXJuIHVyPW4sMHxmO2lmKCgwfHQpIT0oMHxlKSl7Zm9yKDtBPXQrLTh8MCxhcltyPj4yXT1BLCh0PTB8YXJbdCstND4+Ml0pJiYoZHUodCksQT0wfGFyW3I+PjJdKSwoMHxBKSE9KDB8ZSk7KXQ9QTtBPTB8YXJbaT4+Ml19cmV0dXJuIHZ1KEEpLHVyPW4sMHxmfSxmdW5jdGlvbihBKXtyZXR1cm4gMTI3Mn0sZnVuY3Rpb24oQSl7cmV0dXJuIDEzMTJ9LGZ1bmN0aW9uKEEpe3JldHVybiAxMzUyfSxFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYixFYl0sSGI9W1hiLGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpPTAsZj0wLG49MDtpZigoaT0wfGFyWyhmPShBfD0wKSs0NHwwKT4+Ml0pPj4+MDwobj0wfGFyW0ErMjQ+PjJdKT4+PjAmJihpPWFyW2Y+PjJdPW4pLGY9MHxhclsocj1BKzEyfDApPj4yXSwoMHxhcltBKzg+PjJdKT4+PjA+PWY+Pj4wKXJldHVybiAwfChlPS0xKTtpZigtMT09KDB8ZSkpcmV0dXJuIGFyW3I+PjJdPWYrLTEsYXJbQSsxNj4+Ml09aSwoZT0wKXxlO2lmKDE2JmFyW0ErNDg+PjJdKW49MjU1JmUsZj1mKy0xfDA7ZWxzZSBpZigobj0yNTUmZSk8PDI0Pj4yNCE9KDB8dHJbKGY9ZistMXwwKT4+MF0pKXJldHVybiAwfChlPS0xKTtyZXR1cm4gYXJbcj4+Ml09ZixhcltBKzE2Pj4yXT1pLHRyW2Y+PjBdPW4sMHxlfSxmdW5jdGlvbihBLGUpe3ZhciByLGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7aWYodXI9KG89dXIpKzE2fDAsaT1vLC0xPT0oMHwoZXw9MCkpKXJldHVybiB1cj1vLCh3PTApfHc7aWYobj0oQXw9MCkrOHwwLHQ9KDB8YXJbKGY9QSsxMnwwKT4+Ml0pLSgwfGFyW24+PjJdKXwwLCgwfChkPTB8YXJbKHc9QSsyNHwwKT4+Ml0pKT09KDB8KGE9MHxhclsocj1BKzI4fDApPj4yXSkpKXtpZighKDE2JmFyWyhzPUErNDh8MCk+PjJdKSlyZXR1cm4gdXI9bywwfCh3PS0xKTtiPTB8YXJbKHU9QSsyMHwwKT4+Ml0saz0oMHxhclsoaD1BKzQ0fDApPj4yXSktYnwwLF91KGw9QSszMnwwLDApLFZ1KGwsYz0oMHx0clsoYT1sKzExfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhcltBKzQwPj4yXSktMXwwOjEwLDApLChhPTB8dHJbYT4+MF0pPDwyND4+MjQ8MD8oYz0wfGFyW2w+PjJdLGE9MHxhcltBKzM2Pj4yXSk6KGM9bCxhJj0yNTUpLGE9YythfDAsYXJbdT4+Ml09YyxhcltyPj4yXT1hLGQ9YysoZC1iKXwwLGFyW3c+PjJdPWQsYz1jK2t8MCxhcltoPj4yXT1jLGw9az1oLGI9YX1lbHNlIHM9QSs0OHwwLGM9MHxhclsobD1rPWM9QSs0NHwwKT4+Ml0sYj1hO3JldHVybiB1PWQrMXwwLGFyW2k+PjJdPXUsYz0wfGFyWyh1Pj4+MDxjPj4+MD9sOmkpPj4yXSxhcltrPj4yXT1jLDgmYXJbcz4+Ml18MCYmKCgwfHRyWyhhPUErMzJ8MCkrMTE+PjBdKTwwJiYoYT0wfGFyW2E+PjJdKSxhcltuPj4yXT1hLGFyW2Y+PjJdPWErdCxhcltBKzE2Pj4yXT1jKSwoMHxkKT09KDB8Yik/KHc9MHxIYlszMSZhcls1MisoMHxhcltBPj4yXSk+PjJdXShBLDI1NSZlKSx1cj1vLDB8dyk6KGFyW3c+PjJdPXUsdHJbZD4+MF09ZSx1cj1vLDB8KHc9MjU1JmUpKX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gMH0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByPTA7cmV0dXJuIHI9MHxhclsoQXw9MCkrMzc2MTU2Pj4yXSwoMHxhcltBKzM3NjE2MD4+Ml0pLXI+PjI+Pj4wPD1lPj4+MD8ocj0wKXxyOjB8KHI9MHxhcltyKyhlPDwyKT4+Ml0pfSxmdW5jdGlvbihBLGUpe3JldHVybigwfChlfD0wKSk8PS0xPyhlPTApfGU6MHwoZT0oKDB8YXJbKEF8PTApKzM3NjE2MD4+Ml0pLSgwfGFyW0ErMzc2MTU2Pj4yXSk+PjJ8MCk+KDB8ZSkpfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe3JldHVybi0xfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Y9dXI9KG49dXIpKzMxJi0zMix1cj11ciszMnwwLHI9MTYrZnwwLG89OCtmfDAsaT00K2Z8MDtkb3tpZigwfFVmKGUsLTEpKXQ9MTU7ZWxzZXtpZihzPTB8cGYoZSksYXJbbz4+Ml09cyxzPUErMzJ8MCwwfHRyW0ErNDQ+PjBdKXtpZigxPT0oMHxVaShvLDQsMSwwfGFyW3M+PjJdKSkpe3Q9MTU7YnJlYWt9QT0tMTticmVha31mb3IodT1vKzR8MCxiPUErMzZ8MCxhPUErNDB8MCxjPTgrKGFyW2k+PjJdPXIpfDAsbD1yLEE9bzs7KXtpZih0PTB8YXJbYj4+Ml0sbz0xPT0oMHwodD0wfGVzWzE1JmFyWzEyKygwfGFyW3Q+PjJdKT4+Ml1dKHQsMHxhclthPj4yXSxBLHUsZixyLGMsaSkpKSwoMHxhcltmPj4yXSk9PSgwfEEpKXt0PTE0O2JyZWFrfWlmKDM9PSgwfHQpKXtpZigxIT0oMHxVaShBLDEsMSwwfGFyW3M+PjJdKSkpe3Q9MTQ7YnJlYWt9fWVsc2V7aWYoMSE9KDF8dCkpe3Q9MTQ7YnJlYWt9aWYoKDB8VWkociwxLHQ9KDB8YXJbaT4+Ml0pLWx8MCwwfGFyW3M+PjJdKSkhPSgwfHQpKXt0PTE0O2JyZWFrfUE9bz8wfGFyW2Y+PjJdOkF9aWYoIW8pe3Q9MTM7YnJlYWt9fWlmKDEzPT0oMHx0KSl7dD0xNTticmVha31pZigxND09KDB8dCkpe0E9LTE7YnJlYWt9fX13aGlsZSgwKTtyZXR1cm4gMTU9PSgwfHQpJiYoQT0wfGZ1bmN0aW9uKEEpezB8VWYoQXw9MCwtMSkmJihBPTApO3JldHVybiAwfEF9KGUpKSx1cj1uLDB8QX0sZnVuY3Rpb24oQSxlKXtBfD0wLGV8PTA7dmFyIHIsaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtmPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxyPTE2K2Z8MCxvPTgrZnwwLGk9NCtmfDA7ZG97aWYoMHxNZihlLC0xKSl0PTE1O2Vsc2V7aWYocz0wfHZmKGUpLHRyW28+PjBdPXMscz1BKzMyfDAsMHx0cltBKzQ0Pj4wXSl7aWYoMT09KDB8VWkobywxLDEsMHxhcltzPj4yXSkpKXt0PTE1O2JyZWFrfUE9LTE7YnJlYWt9Zm9yKHU9bysxfDAsYj1BKzM2fDAsYT1BKzQwfDAsYz04KyhhcltpPj4yXT1yKXwwLGw9cixBPW87Oyl7aWYodD0wfGFyW2I+PjJdLG89MT09KDB8KHQ9MHxlc1sxNSZhclsxMisoMHxhclt0Pj4yXSk+PjJdXSh0LDB8YXJbYT4+Ml0sQSx1LGYscixjLGkpKSksKDB8YXJbZj4+Ml0pPT0oMHxBKSl7dD0xNDticmVha31pZigzPT0oMHx0KSl7aWYoMSE9KDB8VWkoQSwxLDEsMHxhcltzPj4yXSkpKXt0PTE0O2JyZWFrfX1lbHNle2lmKDEhPSgxfHQpKXt0PTE0O2JyZWFrfWlmKCgwfFVpKHIsMSx0PSgwfGFyW2k+PjJdKS1sfDAsMHxhcltzPj4yXSkpIT0oMHx0KSl7dD0xNDticmVha31BPW8/MHxhcltmPj4yXTpBfWlmKCFvKXt0PTEzO2JyZWFrfX1pZigxMz09KDB8dCkpe3Q9MTU7YnJlYWt9aWYoMTQ9PSgwfHQpKXtBPS0xO2JyZWFrfX19d2hpbGUoMCk7cmV0dXJuIDE1PT0oMHx0KSYmKEE9MHxmdW5jdGlvbihBKXswfE1mKEF8PTAsLTEpJiYoQT0wKTtyZXR1cm4gMHxBfShlKSksdXI9biwwfEF9LGZ1bmN0aW9uKEEsZSl7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MCxsPTA7Yz11cj0odD11cikrMzEmLTMyLHVyPXVyKzMyfDAscj1jKzE2fDAsaT1jKzh8MCxhPWMrNHwwLGw9MHxVZihlfD0wLC0xKSxvPTAhPSgwfHRyWyhuPShBfD0wKSs1MnwwKT4+MF0pLGY9QSs0OHwwO2Rve2lmKGwpbz9vPWU6KGw9MSYoMV4oMHxVZihvPTB8YXJbZj4+Ml0sLTEpKSksdHJbbj4+MF09bCk7ZWxzZXtpZihvKXtzd2l0Y2gobD0wfHBmKDB8YXJbZj4+Ml0pLGFyW2E+PjJdPWwsbD0wfGFyW0ErMzY+PjJdLDB8ZXNbMTUmYXJbMTIrKDB8YXJbbD4+Ml0pPj4yXV0obCwwfGFyW0ErNDA+PjJdLGEsYSs0fDAsYyxyLDgrcnwwLGkpKXtjYXNlIDE6Y2FzZSAyOmM9MTA7YnJlYWs7Y2FzZSAzOnRyW3I+PjBdPWFyW2Y+PjJdLGFyW2k+PjJdPTErcixjPTc7YnJlYWs7ZGVmYXVsdDpjPTd9QTpkb3tpZig3PT0oMHxjKSlmb3Iobz1BKzMyfDA7Oyl7aWYoKGE9MHxhcltpPj4yXSk+Pj4wPD1yPj4+MCl7YT0xLG89MDticmVhayBBfWlmKGw9YSstMXwwLGFyW2k+PjJdPWwsLTE9PSgwfHVmKDB8dHJbbD4+MF0sMHxhcltvPj4yXSkpKXtjPTEwO2JyZWFrfX19d2hpbGUoMCk7aWYoMTA9PSgwfGMpJiYoYT0wLG89LTEpLCFhKWJyZWFrfWFyW2Y+PjJdPWUsdHJbbj4+MF09MSxvPWV9fXdoaWxlKDApO3JldHVybiB1cj10LDB8b30sZnVuY3Rpb24oQSxlKXt2YXIgcixpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxyPWMrMTZ8MCxpPWMrNHwwLGE9Yys4fDAsbD0wfE1mKGV8PTAsLTEpLG89MCE9KDB8dHJbKG49KEF8PTApKzUyfDApPj4wXSksZj1BKzQ4fDA7ZG97aWYobClvP289ZToobD0xJigxXigwfE1mKG89MHxhcltmPj4yXSwtMSkpKSx0cltuPj4wXT1sKTtlbHNle2lmKG8pe3N3aXRjaChsPTB8dmYoMHxhcltmPj4yXSksdHJbYT4+MF09bCxsPTB8YXJbQSszNj4+Ml0sMHxlc1sxNSZhclsxMisoMHxhcltsPj4yXSk+PjJdXShsLDB8YXJbQSs0MD4+Ml0sYSxhKzF8MCxjLHIsOCtyfDAsaSkpe2Nhc2UgMTpjYXNlIDI6Yz0xMDticmVhaztjYXNlIDM6dHJbcj4+MF09YXJbZj4+Ml0sYXJbaT4+Ml09MStyLGM9NzticmVhaztkZWZhdWx0OmM9N31BOmRve2lmKDc9PSgwfGMpKWZvcihvPUErMzJ8MDs7KXtpZigoYT0wfGFyW2k+PjJdKT4+PjA8PXI+Pj4wKXthPTEsbz0wO2JyZWFrIEF9aWYobD1hKy0xfDAsYXJbaT4+Ml09bCwtMT09KDB8dWYoMHx0cltsPj4wXSwwfGFyW28+PjJdKSkpe2M9MTA7YnJlYWt9fX13aGlsZSgwKTtpZigxMD09KDB8YykmJihhPTAsbz0tMSksIWEpYnJlYWt9YXJbZj4+Ml09ZSx0cltuPj4wXT0xLG89ZX19d2hpbGUoMCk7cmV0dXJuIHVyPXQsMHxvfSxmdW5jdGlvbihBLGUpe3JldHVybi0xPChlfD0wKTw8MjQ+PjI0JiYoZT0oMHxUbCgpKSsoKDI1NSZlKTw8Mil8MCxlPTI1NSZhcltlPj4yXSksMHxlfSxmdW5jdGlvbihBLGUpe3JldHVybi0xPChlfD0wKTw8MjQ+PjI0JiYoZT0oMHxNbCgpKSsoZTw8MjQ+PjI0PDwyKXwwLGU9MjU1JmFyW2U+PjJdKSwwfGV9LGZ1bmN0aW9uKEEsZSl7cmV0dXJuIDB8KGV8PTApfSxmdW5jdGlvbihBLGUpe3JldHVybihlfD0wKT4+PjA8MTI4JiYoZT0oMHxUbCgpKSsoZTw8Mil8MCxlPTB8YXJbZT4+Ml0pLDB8ZX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4oZXw9MCk+Pj4wPDEyOCYmKGU9KDB8TWwoKSkrKGU8PDIpfDAsZT0wfGFyW2U+PjJdKSwwfGV9LGZ1bmN0aW9uKEEsZSl7cmV0dXJuKGV8PTApPDwyND4+MjR8MH0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gZXw9MCwwfGpiWzEyNyYoQXw9MCldKGUpfSxmdW5jdGlvbihBLGUpe3ZhciByLGk7cmV0dXJuIGV8PTAsdXI9KHI9dXIpKzE2fDAsaT1yLGZzWzYzJihBfD0wKV0oaSxlKSxmQSgwfGFyW2k+PjJdKSxlPTB8YXJbaT4+Ml0saUEoMHxlKSx1cj1yLDB8ZX0sZnVuY3Rpb24oQSxlKXtyZXR1cm4gMHxhclsoZXw9MCkrKDB8YXJbKEF8PTApPj4yXSk+PjJdfSxmdW5jdGlvbihBLGUpe3JldHVybiAwfGFyWyhlfD0wKSsoMHxhclsoQXw9MCk+PjJdKT4+Ml19LFhiLFhiLFhiLFhiLFhiLFhiLFhiLFhiXSx4Yj1bV2IsZnVuY3Rpb24oQSxlLHIpe3ZhciBpO3JldHVybiBlfD0wLHJ8PTAsMHwoKDB8KGk9MHxhclsoQT0oQXw9MCkrOHwwKSs0Pj4yXSkpPCgwfHIpfCgoMHxpKT09KDB8cik/KDB8YXJbQT4+Ml0pPj4+MDxlPj4+MDowKT8yOjApfSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0PTAsbz0wLGE9MDtyZXR1cm4gdD0wfHRiKDB8KGY9MHxhclsodD1pPShBfD0wKSsxNnwwKT4+Ml0pLDB8YXJbdCs0Pj4yXSwwfHIsMCksYT1ELCgwfChvPTB8YXJbNCsobj1BKzh8MCk+PjJdKSk8KDB8YSl8KCgwfGEpPT0oMHxvKT90Pj4+MD4oMHxhcltuPj4yXSk+Pj4wOjApPyhhPTApfGE6KGhiKDB8ZSwoMHxhcltBKzQ+PjJdKStmfDAsMHxyKSxvPTB8dGIoMHxhclsobz1pKT4+Ml0sMHxhcltvKzQ+PjJdLDB8ciwwKSxhclsoYT1pKT4+Ml09byxhclthKzQ+PjJdPUQsMHwoYT0xKSl9LGZ1bmN0aW9uKEEsZSxyKXtlfD0wO3ZhciBpLGY9MDtyZXR1cm4oMHwocnw9MCkpPDB8KCgwfChmPTB8YXJbNCsoaT0oQXw9MCkrOHwwKT4+Ml0pKTwoMHxyKXwoKDB8Zik9PSgwfHIpPygwfGFyW2k+PjJdKT4+PjA8ZT4+PjA6MCkpPyhmPTApfGY6KGFyWyhmPUErMTZ8MCk+PjJdPWUsYXJbZis0Pj4yXT1yLDB8KGY9MSkpfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIDB8KEF8PTApfSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2ZvcihpPShBfD0wKSsxMnwwLGY9QSsxNnwwLG89MDshKCgwfHIpPD0oMHxvKSk7KWlmKChuPTB8YXJbaT4+Ml0pPj4+MDwodD0wfGFyW2Y+PjJdKT4+PjApd2YoZSxuLHQ9KDB8KGE9ci1vfDApKTwoMHwodD10LW58MCkpP2E6dCksYXJbaT4+Ml09KDB8YXJbaT4+Ml0pK3QsZT1lK3R8MCxvPXQrb3wwO2Vsc2V7aWYoLTE9PSgwfChuPTB8amJbMTI3JmFyWzQwKygwfGFyW0E+PjJdKT4+Ml1dKEEpKSkpYnJlYWs7YT0wfHZmKG4pLHRyW2U+PjBdPWEsZT1lKzF8MCxvPW8rMXwwfXJldHVybiAwfG99LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTA7Zm9yKGk9KEF8PTApKzI0fDAsZj1BKzI4fDAsbj0wOyEoKDB8cik8PSgwfG4pKTspaWYoKHQ9MHxhcltpPj4yXSk+Pj4wPChvPTB8YXJbZj4+Ml0pPj4+MCl3Zih0LGUsbz0oMHwoYT1yLW58MCkpPCgwfChvPW8tdHwwKSk/YTpvKSxhcltpPj4yXT0oMHxhcltpPj4yXSkrbyxlPWUrb3wwLG49bytufDA7ZWxzZXtpZihvPTB8YXJbNTIrKDB8YXJbQT4+Ml0pPj4yXSxhPTB8aGYoMHx0cltlPj4wXSksLTE9PSgwfEhiWzMxJm9dKEEsYSkpKWJyZWFrO2U9ZSsxfDAsbj1uKzF8MH1yZXR1cm4gMHxufSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbj0wO3JldHVybiBuPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxpPW4sYXJbKEF8PTApKzM2Pj4yXT0xMCwwPT0oNjQmYXJbQT4+Ml18MCkmJihhcltpPj4yXT1hcltBKzYwPj4yXSxhcltpKzQ+PjJdPTIxNTIzLGFyW2krOD4+Ml09bisxNiwwfFkoNTQsMHxpKSkmJih0cltBKzc1Pj4wXT0tMSksbj0wfEdjKEEsZSxyKSx1cj1mLDB8bn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbj0wO3JldHVybiBuPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxuPShmPW4pKzIwfDAsYXJbZj4+Ml09YXJbQSs2MD4+Ml0sYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09ZSxhcltmKzEyPj4yXT1uLGFyW2YrMTY+PjJdPXIsQT0oMHxJYygwfFIoMTQwLDB8ZikpKTwwP2FyW24+PjJdPS0xOjB8YXJbbj4+Ml0sdXI9aSwwfEF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wO3JldHVybiBjPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMzJ8MCxhclsoYz0odD1jKSsxNnwwKT4+Ml09ZSxvPWMrNHwwLG49MHxhclsoaT1BKzQ4fDApPj4yXSxhcltvPj4yXT1yLSgwIT0oMHxuKSYxKSxhPUErNDR8MCxhcltjKzg+PjJdPWFyW2E+PjJdLGFyW2MrMTI+PjJdPW4sYXJbdD4+Ml09YXJbQSs2MD4+Ml0sYXJbdCs0Pj4yXT1jLGFyW3QrOD4+Ml09MiwxPD0oMHwodD0wfEljKDB8TigxNDUsMHx0KSkpKT8oYz0wfGFyW28+PjJdKT4+PjA8dD4+PjAmJihvPTB8YXJbYT4+Ml0sYXJbKGE9QSs0fDApPj4yXT1vLGFyW0ErOD4+Ml09bysodC1jKSx0PSgwfGFyW2k+PjJdJiYoYXJbYT4+Ml09bysxLHRyW2UrKHIrLTEpPj4wXT0wfHRyW28+PjBdKSxyKSk6YXJbQT4+Ml09YXJbQT4+Ml18NDgmdF4xNix1cj1mLDB8dH0sR2MsZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7cmV0dXJuIGV8PTAscnw9MCxoYigwfChmPTB8YXJbKGk9KEF8PTApKzIwfDApPj4yXSksMHxlLDB8KEE9cj4+PjA8KEE9KDB8YXJbQSsxNj4+Ml0pLWZ8MCk+Pj4wP3I6QSkpLGFyW2k+PjJdPSgwfGFyW2k+PjJdKStBLDB8cn0sZnVuY3Rpb24oQSxlLHIpe3JldHVybiAwfChBfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MDtmb3IoaT0oQXw9MCkrMTJ8MCxmPUErMTZ8MCxvPTA7ISgoMHxyKTw9KDB8bykpOylpZigobj0wfGFyW2k+PjJdKT4+PjA8KHQ9MHxhcltmPj4yXSk+Pj4wKVpmKGUsbix0PSgwfChhPXItb3wwKSk8KDB8KHQ9dC1uPj4yKSk/YTp0KSxhcltpPj4yXT0oMHxhcltpPj4yXSkrKHQ8PDIpLGU9ZSsodDw8Mil8MCxvPXQrb3wwO2Vsc2V7aWYoLTE9PSgwfChuPTB8amJbMTI3JmFyWzQwKygwfGFyW0E+PjJdKT4+Ml1dKEEpKSkpYnJlYWs7YT0wfHBmKG4pLGFyW2U+PjJdPWEsZT1lKzR8MCxvPW8rMXwwfXJldHVybiAwfG99LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTA7Zm9yKGk9KEF8PTApKzI0fDAsZj1BKzI4fDAsbj0wOyEoKDB8cik8PSgwfG4pKTspaWYoKHQ9MHxhcltpPj4yXSk+Pj4wPChvPTB8YXJbZj4+Ml0pPj4+MClaZih0LGUsbz0oMHwoYT1yLW58MCkpPCgwfChvPW8tdD4+MikpP2E6byksYXJbaT4+Ml09KDB8YXJbaT4+Ml0pKyhvPDwyKSxlPWUrKG88PDIpfDAsbj1vK258MDtlbHNle2lmKG89MHxhcls1MisoMHxhcltBPj4yXSk+PjJdLGE9MHxnZigwfGFyW2U+PjJdKSwtMT09KDB8SGJbMzEmb10oQSxhKSkpYnJlYWs7ZT1lKzR8MCxuPW4rMXwwfXJldHVybiAwfG59LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaT0wLGY9MCxuPTA7QTpkb3tpZigwfHRyW0ErNDQ+PjBdKWk9MHxVaShlLDQsciwwfGFyW0ErMzI+PjJdKTtlbHNlIGZvcihpPTA7Oyl7aWYoKDB8cik8PSgwfGkpKWJyZWFrIEE7aWYobj0wfGFyWzUyKygwfGFyW0E+PjJdKT4+Ml0sZj0wfGdmKDB8YXJbZT4+Ml0pLC0xPT0oMHwoZj0wfEhiWzMxJm5dKEEsZikpKSlicmVhayBBO2k9aSsxfDAsZT1lKzR8MH19d2hpbGUoMCk7cmV0dXJuIDB8aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wLG49MDtBOmRve2lmKDB8dHJbQSs0ND4+MF0paT0wfFVpKGUsMSxyLDB8YXJbQSszMj4+Ml0pO2Vsc2UgZm9yKGk9MDs7KXtpZigoMHxyKTw9KDB8aSkpYnJlYWsgQTtpZihuPTB8YXJbNTIrKDB8YXJbQT4+Ml0pPj4yXSxmPTB8aGYoMHx0cltlPj4wXSksLTE9PSgwfChmPTB8SGJbMzEmbl0oQSxmKSkpKWJyZWFrIEE7aT1pKzF8MCxlPWUrMXwwfX13aGlsZSgwKTtyZXR1cm4gMHxpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGk9MCxmPTA7Zm9yKEE9MDsoMHxlKSE9KDB8cik7KUE9KChmPS0yNjg0MzU0NTYmKGk9KDB8dHJbZT4+MF0pKyhBPDw0KXwwKSk+Pj4yNHxmKV5pLGU9ZSsxfDA7cmV0dXJuIDB8QX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpPTAsZj0wO2ZvcihBPTA7KDB8ZSkhPSgwfHIpOylBPSgoZj0tMjY4NDM1NDU2JihpPSgwfGFyW2U+PjJdKSsoQTw8NCl8MCkpPj4+MjR8ZileaSxlPWUrNHwwO3JldHVybiAwfEF9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwocj0wfGNmKCgwfHRyWyhlfD0wKSsxMT4+MF0pPDAmJmFyW2U+PjJdKSk+Pj4oLTEhPSgwfHIpJjEpfDB9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwocj0wfGNmKCgwfHRyWyhlfD0wKSsxMT4+MF0pPDAmJmFyW2U+PjJdKSk+Pj4oLTEhPSgwfHIpJjEpfDB9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOyktMTwoQT0wfHRyW2U+PjBdKTw8MjQ+PjI0JiYoQT0wfFRsKCksQT0yNTUmYXJbQSsodHJbZT4+MF08PDIpPj4yXSksdHJbZT4+MF09QSxlPWUrMXwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOyktMTwoQT0wfHRyW2U+PjBdKTw8MjQ+PjI0JiYoQT0wfE1sKCksQT0yNTUmYXJbQSsodHJbZT4+MF08PDIpPj4yXSksdHJbZT4+MF09QSxlPWUrMXwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gcnw9MCwwfCgtMTwoZXw9MCk8PDI0Pj4yND9lOnIpfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIEF8PTAsZXw9MCwwfChBPShyfD0wKT4+PjA8MTI4PyhBPSgwfFVsKCkpKyhyPDwxKXwwLChvcltBPj4xXSZlKTw8MTY+PjE2IT0wKTowKX0sZnVuY3Rpb24oQSxlLHIpe2ZvcihBfD0wLGV8PTAscnw9MDsoMHxlKSE9KDB8cik7KShBPTB8YXJbZT4+Ml0pPj4+MDwxMjgmJihBPTB8VGwoKSxBPTB8YXJbQSsoYXJbZT4+Ml08PDIpPj4yXSksYXJbZT4+Ml09QSxlPWUrNHwwO3JldHVybiAwfHJ9LGZ1bmN0aW9uKEEsZSxyKXtmb3IoQXw9MCxlfD0wLHJ8PTA7KDB8ZSkhPSgwfHIpOykoQT0wfGFyW2U+PjJdKT4+PjA8MTI4JiYoQT0wfE1sKCksQT0wfGFyW0ErKGFyW2U+PjJdPDwyKT4+Ml0pLGFyW2U+PjJdPUEsZT1lKzR8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIHJ8PTAsMHwoKGV8PTApPj4+MDwxMjg/MjU1JmU6cil9LGZ1bmN0aW9uKEEsZSxyKXtyfD0wO3ZhciBpLGYsbj0wLHQ9MDtpZihpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrNjR8MCwwfHh1KEF8PTAsZXw9MCkpZT0xO2Vsc2UgaWYoMCE9KDB8ZSkmJjAhPSgwfCh0PTB8cXUoZSwzOTYwLDM5NDQsMCkpKSl7Zm9yKG49KGU9NCtpfDApKzUyfDA7KDB8KGU9ZSs0fChhcltlPj4yXT0wKSkpPCgwfG4pOyk7YXJbaT4+Ml09dCxhcls4K2k+PjJdPUEsYXJbMTIraT4+Ml09LTEsYXJbNDgraT4+Ml09MSx0c1szMSZhclsyOCsoMHxhclt0Pj4yXSk+PjJdXSh0LGksMHxhcltyPj4yXSwxKSxlPTE9PSgwfGFyWzI0K2k+PjJdKT8oYXJbcj4+Ml09YXJbMTYraT4+Ml0sMSk6MH1lbHNlIGU9MDtyZXR1cm4gdXI9ZiwwfGV9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gMHx4dShBfD0wLGV8PTApfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2lmKGk9dXI9KGY9dXIpKzMxJi0zMix1cj11cis2NHwwLGFyWyhyfD0wKT4+Ml09YXJbYXJbcj4+Ml0+PjJdLDB8ZnVuY3Rpb24oQSxlKXtBPTB8eHUoQXw9MCxlfD0wKT8xOjB8eHUoZSw0MDg4KTtyZXR1cm4gMHxBfShBLGUpKUE9MTtlbHNlIGlmKDAhPSgwfGUpJiYwIT0oMHwobj0wfHF1KGUsMzk2MCw0MDQ4LDApKSkmJjA9PShhcltuKzg+PjJdJn5hcltBKzg+PjJdfDApKWlmKGU9bisxMnwwLDB8eHUoMHxhclsoQT1BKzEyfDApPj4yXSwwfGFyW2U+PjJdKXx8MHx4dSgwfGFyW0E+PjJdLDQwODApKUE9MTtlbHNlIGlmKDAhPSgwfChBPTB8YXJbQT4+Ml0pKSYmMCE9KDB8KG89MHxxdShBLDM5NjAsMzk0NCwwKSkpJiYwIT0oMHwodD0wfGFyW2U+PjJdKSkmJjAhPSgwfChhPTB8cXUodCwzOTYwLDM5NDQsMCkpKSl7Zm9yKGU9KEE9NCtpfDApKzUyfDA7KDB8KEE9QSs0fChhcltBPj4yXT0wKSkpPCgwfGUpOyk7YXJbaT4+Ml09YSxhcls4K2k+PjJdPW8sYXJbMTIraT4+Ml09LTEsYXJbNDgraT4+Ml09MSx0c1szMSZhclsyOCsoMHxhclthPj4yXSk+PjJdXShhLGksMHxhcltyPj4yXSwxKSxBPTE9PSgwfGFyWzI0K2k+PjJdKT8oYXJbcj4+Ml09YXJbMTYraT4+Ml0sMSk6MH1lbHNlIEE9MDtlbHNlIEE9MDtyZXR1cm4gdXI9ZiwwfEF9LGZ1bmN0aW9uKEEsZSxyKXtyZXR1cm4gMHx4dShBfD0wLGV8PTApfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYT0wO3JldHVybiB1cj0obz11cikrMzJ8MCxuPW8rMTJ8MCx0PW8saT0ocnw9MCkrNHwwLGY9MHxhcltyPj4yXSxhclt0Pj4yXT0wLGFyW3QrND4+Ml09MCw0Mjk0OTY3Mjc5PGY+Pj4oYXJbdCs4Pj4yXT0wKSYmcHUoKSxmPj4+MDwxMT8odHJbdCsxMT4+MF09Zik/KHI9dCxhPTYpOnI9dDoocj0wfGh1KGE9MTYrZiYtMTYpLGFyW3Q+PjJdPXIsYXJbdCs4Pj4yXT0tMjE0NzQ4MzY0OHxhLGFyW3QrND4+Ml09ZixhPTYpLDY9PSgwfGEpJiZoYigwfHIsMHxpLDB8ZiksdHJbcitmPj4wXT0wLG5zWzEyNyZBXShuLGUsdCkscj0wfGh1KDEyKSxhcltyPj4yXT1hcltuPj4yXSxhcltyKzQ+PjJdPWFyWzQrbj4+Ml0sYXJbcis4Pj4yXT1hcls4K24+PjJdLHVyPSgwPD0oMHx0clt0KzExPj4wXSl8fHZ1KDB8YXJbdD4+Ml0pLG8pLDB8cn0sZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7cmV0dXJuIGV8PTAscnw9MCx1cj0oaT11cikrMTZ8MCxmPWksbnNbMTI3JihBfD0wKV0oZixlLHIpLGZBKDB8YXJbZj4+Ml0pLHI9MHxhcltmPj4yXSxpQSgwfHIpLHVyPWksMHxyfSxmdW5jdGlvbihBLGUscil7cmV0dXJuIDB8ZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmLG4sdD0wO3JldHVybiBmPTB8YXJbKGk9KEE9QXwwKSs4NHwwKT4+Ml0sdD0wfFJjKGYsMCxuPXIrMjU2fDApLGhiKDB8ZSwwfGYsMHwocj0odD0wPT0oMHx0KT9uOnQtZnwwKT4+PjA8cj4+PjA/dDpyKSksYXJbQSs0Pj4yXT1mK3IsZT1mK3R8MCxhcltBKzg+PjJdPWUsYXJbaT4+Ml09ZSwwfHJ9KEF8PTAsZXw9MCxyfD0wKX0sV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2IsV2JdLFBiPVtmdW5jdGlvbihBLGUscixpKXtyZXR1cm4gWig0KSwwfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbz0wLGE9MCxjPTA7aWYoQT0wfGFyWyhlfD0wKSs0Pj4yXSxhPSgwfChpPTB8YXJbZSs4Pj4yXSkpLygwfGFyW3IrNTc4ND4+Ml0pfDAsYz0oYz1BKy0xKyhlPTB8YXJbZSsxMj4+Ml0pfDApLSgoMHxjKSUoMHxlKXwwKXwwLGU9KEE9KCgwfEEpLygwfGFyW3IrNTc4MD4+Ml0pfDApLTErZXwwKS0oKDB8QSklKDB8ZSl8MCl8MCw5PD0oKEE9MHxhcltyKzU3NjA+PjJdKSstOHwwKT4+PjAmJnNyKDM2NjA5LDM2NjYzLDExNSwzNjY3MiksOTw9KChvPTB8YXJbcis1NzY4Pj4yXSkrLTh8MCk+Pj4wJiZzcigzNjY5NSwzNjY2MywxMTYsMzY2NzIpLG49MD09KDB8KGY9MHxXYygxNiwwfGJyKDB8YnIoYyxpKSwoQSs3fDApLzh8MCkpKSksdD1mLDB8YXJbcisyMD4+Ml0pe2lmKDA9PSgwfChpPW89MHxXYygxNixhPTB8YnIoMHxicihlLGEpLChvKzd8MCkvOHwwKSkpKXwwPT0oMHwoQT1hPTB8V2MoMTYsYSkpKXxuKXJldHVybiBufHxCYyhmKSwwfG8mJkJjKG8pLGEmJkJjKGEpLChyPTApfHJ9ZWxzZXtpZihuKXJldHVybihyPTApfHI7QT1pPWU9MH1yZXR1cm4gYXJbcis0Pj4yXT10LGFyW3IrMTA0OTI+PjJdPTAsYXJbcis0MD4+Ml09YyxhcltyKzg+PjJdPWksYXJbcisxMDQ5Nj4+Ml09MCxhcltyKzEyPj4yXT1BLGFyW3IrMTA1MDA+PjJdPTAsYXJbcis0ND4+Ml09ZSwwfChyPTEpfSxmdW5jdGlvbihBLGUscixpKXtmb3IoZXw9MCxyfD0wLGl8PTA7KDB8ZSkhPSgwfHIpOyl0cltpPj4wXT0wfHRyW2U+PjBdLGk9aSsxfDAsZT1lKzF8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoQXw9MCxlfD0wLHJ8PTAsaXw9MDsoMHxlKSE9KDB8cik7KUE9KDB8YXJbZT4+Ml0pPj4+MDwxMjg/KEE9MHxVbCgpLDB8bHJbQSsoYXJbZT4+Ml08PDEpPj4xXSk6MCxvcltpPj4xXT1BLGk9aSsyfDAsZT1lKzR8MDtyZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoQXw9MCxlfD0wLHJ8PTAsaXw9MDs7KXtpZigoMHxyKT09KDB8aSkpe3I9aTticmVha31pZigoMHxhcltyPj4yXSk+Pj4wPDEyOCYmKEE9MHxVbCgpLChvcltBKyhhcltyPj4yXTw8MSk+PjFdJmUpPDwxNj4+MTYpKWJyZWFrO3I9cis0fDB9cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSl7Zm9yKEF8PTAsZXw9MCxyfD0wLGl8PTA7Oyl7aWYoKDB8cik9PSgwfGkpKXtyPWk7YnJlYWt9aWYoMTI4PD0oMHxhcltyPj4yXSk+Pj4wKWJyZWFrO2lmKEE9MHxVbCgpLCEoKG9yW0ErKGFyW3I+PjJdPDwxKT4+MV0mZSk8PDE2Pj4xNikpYnJlYWs7cj1yKzR8MH1yZXR1cm4gMHxyfSxmdW5jdGlvbihBLGUscixpKXtmb3IoZXw9MCxyfD0wLGl8PTA7KDB8ZSkhPSgwfHIpOylhcltpPj4yXT10cltlPj4wXSxpPWkrNHwwLGU9ZSsxfDA7cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSl7dmFyIGYsbjtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsdXI9KGY9dXIpKzE2fDAsbj1mLHRzWzMxJihBfD0wKV0obixlLHIsaSksZkEoMHxhcltuPj4yXSksaT0wfGFyW24+PjJdLGlBKDB8aSksdXI9ZiwwfGl9XSxMYj1bSWIsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGY9K2Y7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7cmV0dXJuIG09dXI9KGQ9dXIpKzMxJi0zMix1cj11cisxNzZ8MCx1PW0rNzJ8MCxvPW0rNDh8MCx0PW0rMzJ8MCxoPW0rMjR8MCxrPW0rOHwwLGM9KG49bSkrMTM0fDAsYT1tKzY4fDAsbD1tKzc2fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNzk2NTksMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLHk9cD1BKTpndSgpKToodj1BLHk9KHA9MCl8YXJbYT4+Ml0pLGg9MHxucih5LGs9eSt2fDAsciksKDB8eSkhPSgwfGMpPyhBPTB8eWModjw8MSkpP1o9Zz1BOmd1KCk6KGc9bCxaPTApLFRmKHUsciksaHIoeSxoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sZT0wfGFyW3M+PjJdLHk9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSx5PTB8UEEodSxnLGUseSxyLGkpLEJjKFopLEJjKHApLHVyPWQsMHx5fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZj0rZjt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MDtyZXR1cm4gbT11cj0oZD11cikrMzEmLTMyLHVyPXVyKzE3NnwwLHU9bSs3MnwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSsxMzR8MCxhPW0rNjh8MCxsPW0rNzZ8MCxzPW0rNjR8MCxiPW0rNjB8MCxtPW0rNTZ8MCxhclsodz1uKT4+Ml09Mzcsdz0oYXJbdys0Pj4yXT0wKXxkcihuKzF8MCw1Mzg5NywwfGFyW3IrND4+Ml0pLGFyW2E+PjJdPWMsQT0wfGRuKCksMjk8KDB8KEE9dz8oYXJbaz4+Ml09YXJbcis4Pj4yXSxRW2srOD4+M109ZiwwfGZyKGMsMzAsQSxuLGspKTooUVtoPj4zXT1mLDB8ZnIoYywzMCxBLG4saCkpKSk/KEE9MHxkbigpLGs9dz8oYXJbdD4+Ml09YXJbcis4Pj4yXSxRWzgrdD4+M109ZiwwfGtyKGEsQSxuLHQpKTooUVtvPj4zXT1mLDB8a3IoYSxBLG4sbykpLChBPTB8YXJbYT4+Ml0pPyh2PWsseT1wPUEpOmd1KCkpOih2PUEseT0ocD0wKXxhclthPj4yXSksaD0wfG5yKHksaz15K3Z8MCxyKSwoMHx5KSE9KDB8Yyk/KEE9MHx5Yyh2PDwxKSk/Wj1nPUE6Z3UoKTooZz1sLFo9MCksVGYodSxyKSxocih5LGgsayxnLHMsYix1KSxibih1KSxhclttPj4yXT1hcltlPj4yXSxlPTB8YXJbcz4+Ml0seT0wfGFyW2I+PjJdLGFyW3U+PjJdPWFyW20+PjJdLHk9MHxQQSh1LGcsZSx5LHIsaSksQmMoWiksQmMocCksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmPStmO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDttPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMzM2fDAsdT1tKzMwMHwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSszMDR8MCxhPW0rMjk2fDAsbD1tKzY4fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNzk2NTksMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLFo9eT1BKTpndSgpKToodj1BLFo9KHk9MCl8YXJbYT4+Ml0pLGg9MHxucihaLGs9Wit2fDAscik7ZG97aWYoKDB8WikhPSgwfGMpKXtpZihBPTB8eWModjw8Mykpe3A9MCxCPWc9QTticmVha31ndSgpfWVsc2UgZz1sLHA9MSxCPTB9d2hpbGUoMCk7cmV0dXJuIFRmKHUsciksWnIoWixoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sWj0wfGFyW3M+PjJdLEE9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSxBPTB8bXIodSxnLFosQSxyLGkpLGFyW2U+PjJdPUEscHx8QmMoQiksQmMoeSksdXI9ZCwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmPStmO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDttPXVyPShkPXVyKSszMSYtMzIsdXI9dXIrMzM2fDAsdT1tKzMwMHwwLG89bSs0OHwwLHQ9bSszMnwwLGg9bSsyNHwwLGs9bSs4fDAsYz0obj1tKSszMDR8MCxhPW0rMjk2fDAsbD1tKzY4fDAscz1tKzY0fDAsYj1tKzYwfDAsbT1tKzU2fDAsYXJbKHc9bik+PjJdPTM3LHc9KGFyW3crND4+Ml09MCl8ZHIobisxfDAsNTM4OTcsMHxhcltyKzQ+PjJdKSxhclthPj4yXT1jLEE9MHxkbigpLDI5PCgwfChBPXc/KGFyW2s+PjJdPWFyW3IrOD4+Ml0sUVtrKzg+PjNdPWYsMHxmcihjLDMwLEEsbixrKSk6KFFbaD4+M109ZiwwfGZyKGMsMzAsQSxuLGgpKSkpPyhBPTB8ZG4oKSxrPXc/KGFyW3Q+PjJdPWFyW3IrOD4+Ml0sUVs4K3Q+PjNdPWYsMHxrcihhLEEsbix0KSk6KFFbbz4+M109ZiwwfGtyKGEsQSxuLG8pKSwoQT0wfGFyW2E+PjJdKT8odj1rLFo9eT1BKTpndSgpKToodj1BLFo9KHk9MCl8YXJbYT4+Ml0pLGg9MHxucihaLGs9Wit2fDAscik7ZG97aWYoKDB8WikhPSgwfGMpKXtpZihBPTB8eWModjw8Mykpe3A9MCxCPWc9QTticmVha31ndSgpfWVsc2UgZz1sLHA9MSxCPTB9d2hpbGUoMCk7cmV0dXJuIFRmKHUsciksWnIoWixoLGssZyxzLGIsdSksYm4odSksYXJbbT4+Ml09YXJbZT4+Ml0sWj0wfGFyW3M+PjJdLEE9MHxhcltiPj4yXSxhclt1Pj4yXT1hclttPj4yXSxBPTB8bXIodSxnLFosQSxyLGkpLGFyW2U+PjJdPUEscHx8QmMoQiksQmMoeSksdXI9ZCwwfEF9LEliLEliLEliXSxLYj1bQ2IsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wO2ZvcihBPWV8PTA7Oyl7aWYoKDB8aSk9PSgwfGYpKXt0PTc7YnJlYWt9aWYoKDB8QSk9PSgwfHIpKXtBPS0xO2JyZWFrfWlmKChlPTB8dHJbQT4+MF0pPDwyND4+MjQ8KG49MHx0cltpPj4wXSk8PDI0Pj4yNCl7QT0tMTticmVha31pZihuPDwyND4+MjQ8ZTw8MjQ+PjI0KXtBPTE7YnJlYWt9aT1pKzF8MCxBPUErMXwwfXJldHVybiA3PT0oMHx0KSYmKEE9KDB8QSkhPSgwfHIpJjEpLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wO2ZvcihBPWV8PTA7Oyl7aWYoKDB8aSk9PSgwfGYpKXt0PTc7YnJlYWt9aWYoKDB8QSk9PSgwfHIpKXtBPS0xO2JyZWFrfWlmKCgwfChlPTB8YXJbQT4+Ml0pKTwoMHwobj0wfGFyW2k+PjJdKSkpe0E9LTE7YnJlYWt9aWYoKDB8bik8KDB8ZSkpe0E9MTticmVha31pPWkrNHwwLEE9QSs0fDB9cmV0dXJuIDc9PSgwfHQpJiYoQT0oMHxBKSE9KDB8cikmMSksMHxBfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MDtpZihvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxuPW8rNHwwLDEmYXJbKHJ8PTApKzQ+PjJdKXtmb3IoVGYobixyKSxBPTB8dW4obiw1OTI0OCksYm4obikscj0wfGFyW0E+PjJdLGY/ZnNbNjMmYXJbcisyND4+Ml1dKG4sQSk6ZnNbNjMmYXJbcisyOD4+Ml1dKG4sQSksKEE9MHx0clsoYT0xMStufDApPj4wXSk8PDI0Pj4yNDwwPyhyPUEsQT0wfGFyW24+PjJdLGM9OCk6Zj1uOzg9PSgwfGMpJiYoZj1BLEE9ciksKDB8ZikhPSgoKGM9QTw8MjQ+PjI0PDApPzB8YXJbbj4+Ml06bikrKGM/MHxhcls0K24+PjJdOjI1NSZBKXwwKTspQT0wfHRyW2Y+PjBdLDB8KHI9MHxhcltlPj4yXSkmJjB8TWYoQT0oMHwobz0wfGFyWyhpPXIrMjR8MCk+PjJdKSk9PSgwfGFyW3IrMjg+PjJdKT8oYz0wfGFyWzUyKygwfGFyW3I+PjJdKT4+Ml0sQT0wfGhmKEEpLDB8SGJbMzEmY10ocixBKSk6KGFyW2k+PjJdPW8rMSwwfGhmKHRyW28+PjBdPUEpKSwtMSkmJihhcltlPj4yXT0wKSxyPTB8dHJbYT4+MF0sQT1mKzF8MCxjPTg7QT0wfGFyW2U+PjJdLEJ1KG4pfWVsc2UgYz0wfGFyWzI0KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbj4+Ml09YXJbbz4+Ml0sQT0wfEtiWzMxJmNdKEEsbixyLGksMSZmKTtyZXR1cm4gdXI9dCwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1PTAsYj0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxiPSh0PXUpKzUyfDAsYz11KzM5fDAsbj11KzE2fDAsYT11KzEyfDAsbz11KzR8MCx1PXUrOHwwLHRyW2I+PjBdPTB8dHJbNTM5MDJdLHRyW2IrMT4+MF09MHx0cls1MzkwM10sdHJbYisyPj4wXT0wfHRyWzUzOTA0XSx0cltiKzM+PjBdPTB8dHJbNTM5MDVdLHRyW2IrND4+MF09MHx0cls1MzkwNl0sdHJbYis1Pj4wXT0wfHRyWzUzOTA3XSx3cihiKzF8MCw1MzkwOCwxLDB8YXJbcis0Pj4yXSksbD0wfGRuKCksYXJbdD4+Ml09ZixiPTB8bnIoYyxmPWMrKDB8ZnIoYywxMyxsLGIsdCkpfDAsciksVGYodCxyKSx2cihjLGIsZixuLGEsbyx0KSxibih0KSxhclt1Pj4yXT1hcltlPj4yXSxlPTB8YXJbYT4+Ml0sZj0wfGFyW28+PjJdLGFyW3Q+PjJdPWFyW3U+PjJdLGY9MHxQQSh0LG4sZSxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1PTAsYj0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrNjR8MCxiPSh0PXUpKzUyfDAsYz11KzQwfDAsbj11KzE2fDAsYT11KzEyfDAsbz11KzR8MCx1PXUrOHwwLHRyW2I+PjBdPTB8dHJbNTM5MDJdLHRyW2IrMT4+MF09MHx0cls1MzkwM10sdHJbYisyPj4wXT0wfHRyWzUzOTA0XSx0cltiKzM+PjBdPTB8dHJbNTM5MDVdLHRyW2IrND4+MF09MHx0cls1MzkwNl0sdHJbYis1Pj4wXT0wfHRyWzUzOTA3XSx3cihiKzF8MCw1MzkwOCwwLDB8YXJbcis0Pj4yXSksbD0wfGRuKCksYXJbdD4+Ml09ZixiPTB8bnIoYyxmPWMrKDB8ZnIoYywxMixsLGIsdCkpfDAsciksVGYodCxyKSx2cihjLGIsZixuLGEsbyx0KSxibih0KSxhclt1Pj4yXT1hcltlPj4yXSxlPTB8YXJbYT4+Ml0sZj0wfGFyW28+PjJdLGFyW3Q+PjJdPWFyW3U+PjJdLGY9MHxQQSh0LG4sZSxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGM9MCxsPTAsdT0wO3JldHVybiB1PXVyPShBPXVyKSszMSYtMzIsdXI9dXIrODB8MCxsPShvPXUpKzY4fDAsbj11KzQ4fDAsdD11Kzh8MCx1PXUrNHwwLHRyW2w+PjBdPTB8dHJbNTM4OTFdLHRyW2wrMT4+MF09MHx0cls1Mzg5Ml0sdHJbbCsyPj4wXT0wfHRyWzUzODkzXSx0cltsKzM+PjBdPTB8dHJbNTM4OTRdLHRyW2wrND4+MF09MHx0cls1Mzg5NV0sdHJbbCs1Pj4wXT0wfHRyWzUzODk2XSxjPTB8ZG4oKSxhcltvPj4yXT1mLGM9MHxucihuLGw9bisoZj0wfGZyKG4sMjAsYyxsLG8pKXwwLHIpLFRmKG8sciksYT0wfHVuKG8sNTkyMzIpLGJuKG8pLFBiWzcmYXJbMzIrKDB8YXJbYT4+Ml0pPj4yXV0oYSxuLGwsdCksZj10K2Z8MCxhclt1Pj4yXT1hcltlPj4yXSxhcltvPj4yXT1hclt1Pj4yXSxmPTB8UEEobyx0LCgwfGMpPT0oMHxsKT9mOmMtbit0fDAsZixyLGkpLHVyPUEsMHxmfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MDtpZihvPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxuPW8rNHwwLDEmYXJbKHJ8PTApKzQ+PjJdKXtmb3IoVGYobixyKSxBPTB8dW4obiw1OTI3MiksYm4obikscj0wfGFyW0E+PjJdLGY/ZnNbNjMmYXJbcisyND4+Ml1dKG4sQSk6ZnNbNjMmYXJbcisyOD4+Ml1dKG4sQSksQT0wfHRyWyhhPTgrbiszfDApPj4wXSxyPTB8YXJbbj4+Ml0sYz00K258MCxmPUE8PDI0Pj4yNDwwP3I6bjsoMHxmKSE9KCgobz1BPDwyND4+MjQ8MCk/cjpuKSsoKG8/MHxhcltjPj4yXToyNTUmQSk8PDIpfDApOylBPTB8YXJbZj4+Ml0sMHwocj0wfGFyW2U+PjJdKSYmMHxVZihBPSgwfChvPTB8YXJbKGk9cisyNHwwKT4+Ml0pKT09KDB8YXJbcisyOD4+Ml0pPyhvPTB8YXJbNTIrKDB8YXJbcj4+Ml0pPj4yXSxBPTB8Z2YoQSksMHxIYlszMSZvXShyLEEpKTooYXJbaT4+Ml09bys0LDB8Z2YoYXJbbz4+Ml09QSkpLC0xKSYmKGFyW2U+PjJdPTApLGY9Zis0fDAsQT0wfHRyW2E+PjBdLHI9MHxhcltuPj4yXTtBPTB8YXJbZT4+Ml0sUXUobil9ZWxzZSBjPTB8YXJbMjQrKDB8YXJbQT4+Ml0pPj4yXSxhcltvPj4yXT1hcltlPj4yXSxhcltuPj4yXT1hcltvPj4yXSxBPTB8S2JbMzEmY10oQSxuLHIsaSwxJmYpO3JldHVybiB1cj10LDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxMjh8MCxiPSh0PXUpKzEyMnwwLGM9dSsxMDh8MCxuPXUrMTZ8MCxhPXUrMTJ8MCxvPXUrNHwwLHU9dSs4fDAsdHJbYj4+MF09MHx0cls1MzkwMl0sdHJbYisxPj4wXT0wfHRyWzUzOTAzXSx0cltiKzI+PjBdPTB8dHJbNTM5MDRdLHRyW2IrMz4+MF09MHx0cls1MzkwNV0sdHJbYis0Pj4wXT0wfHRyWzUzOTA2XSx0cltiKzU+PjBdPTB8dHJbNTM5MDddLHdyKGIrMXwwLDUzOTA4LDEsMHxhcltyKzQ+PjJdKSxsPTB8ZG4oKSxhclt0Pj4yXT1mLGI9MHxucihjLGY9YysoMHxmcihjLDEzLGwsYix0KSl8MCxyKSxUZih0LHIpLHByKGMsYixmLG4sYSxvLHQpLGJuKHQpLGFyW3U+PjJdPWFyW2U+PjJdLGU9MHxhclthPj4yXSxmPTB8YXJbbz4+Ml0sYXJbdD4+Ml09YXJbdT4+Ml0sZj0wfG1yKHQsbixlLGYscixpKSx1cj1BLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxMjh8MCxiPSh0PXUpKzExMnwwLGM9dSsxMDB8MCxuPXUrMTZ8MCxhPXUrMTJ8MCxvPXUrNHwwLHU9dSs4fDAsdHJbYj4+MF09MHx0cls1MzkwMl0sdHJbYisxPj4wXT0wfHRyWzUzOTAzXSx0cltiKzI+PjBdPTB8dHJbNTM5MDRdLHRyW2IrMz4+MF09MHx0cls1MzkwNV0sdHJbYis0Pj4wXT0wfHRyWzUzOTA2XSx0cltiKzU+PjBdPTB8dHJbNTM5MDddLHdyKGIrMXwwLDUzOTA4LDAsMHxhcltyKzQ+PjJdKSxsPTB8ZG4oKSxhclt0Pj4yXT1mLGI9MHxucihjLGY9YysoMHxmcihjLDEyLGwsYix0KSl8MCxyKSxUZih0LHIpLHByKGMsYixmLG4sYSxvLHQpLGJuKHQpLGFyW3U+PjJdPWFyW2U+PjJdLGU9MHxhclthPj4yXSxmPTB8YXJbbz4+Ml0sYXJbdD4+Ml09YXJbdT4+Ml0sZj0wfG1yKHQsbixlLGYscixpKSx1cj1BLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7cmV0dXJuIHU9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxOTJ8MCxsPShvPXUpKzE3NnwwLG49dSsxNTZ8MCx0PXUrNHwwLHU9dSsxNTJ8MCx0cltsPj4wXT0wfHRyWzUzODkxXSx0cltsKzE+PjBdPTB8dHJbNTM4OTJdLHRyW2wrMj4+MF09MHx0cls1Mzg5M10sdHJbbCszPj4wXT0wfHRyWzUzODk0XSx0cltsKzQ+PjBdPTB8dHJbNTM4OTVdLHRyW2wrNT4+MF09MHx0cls1Mzg5Nl0sYz0wfGRuKCksYXJbbz4+Ml09ZixjPTB8bnIobixsPW4rKGY9MHxmcihuLDIwLGMsbCxvKSl8MCxyKSxUZihvLHIpLGE9MHx1bihvLDU5MjY0KSxibihvKSxQYls3JmFyWzQ4KygwfGFyW2E+PjJdKT4+Ml1dKGEsbixsLHQpLGY9dCsoZjw8Mil8MCxhclt1Pj4yXT1hcltlPj4yXSxhcltvPj4yXT1hclt1Pj4yXSxmPTB8bXIobyx0LCgwfGMpPT0oMHxsKT9mOnQrKGMtbjw8Mil8MCxmLHIsaSksdXI9QSwwfGZ9LGZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIHJ8PTAsYXJbKGZ8PTApPj4yXT1yLDN9LGZ1bmN0aW9uKEEsZSxyLGksZil7cmV0dXJuIDB8ZnVuY3Rpb24oQSxlLHIsaSxmKXtyfD0wLGl8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7MjwoKG49ZXw9MCktKHQ9QXw9MCl8MCkmMCE9KDQmKGZ8PTApfDApJiYtMTc9PSgwfHRyW0E+PjBdKSYmLTY5PT0oMHx0cltBKzE+PjBdKT9BPS02NT09KChzPTApfHRyW0ErMj4+MF0pP0ErM3wwOkE6cz0wO0E6Zm9yKDs7KXtpZighKHM+Pj4wPHI+Pj4wJkE+Pj4wPGU+Pj4wKSl7MDticmVha31sPTB8dHJbQT4+MF0sYj0yNTUmbCxvPUErMXwwO2Rve2lmKC0xPGw8PDI0Pj4yNCl7aWYoaT4+PjA8Yj4+PjApezA7YnJlYWsgQX1BPW99ZWxzZXtpZigoMjU1JmwpPDE5NCl7MDticmVhayBBfWlmKGE9QSsyfDAsZj1uLSh1PUEpfDAsKDI1NSZsKTwyMjQpe2lmKCgwfGYpPDIpezA7YnJlYWsgQX1pZigxMjghPSgxOTImKGY9MHxjcltvPj4wXSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwoNjMmZnxiPDw2JjE5ODQpPj4+MCl7MDticmVhayBBfUE9YTticmVha31pZihjPUErM3wwLCgyNTUmbCk8MjQwKXtpZigoMHxmKTwzKXswO2JyZWFrIEF9c3dpdGNoKGE9MHx0clthPj4wXSxvPTB8Y3Jbbz4+MF0sZj0yMjQmbyxsPDwyND4+MjQpe2Nhc2UtMzI6aWYoMTYwPT0oMHxmKSlicmVhaztBPXU7YnJlYWsgQTtjYXNlLTE5OmlmKDEyOD09KDB8ZikpYnJlYWs7QT11O2JyZWFrIEE7ZGVmYXVsdDppZigxMjghPSgxOTImb3wwKSl7QT11O2JyZWFrIEF9fWlmKDEyOCE9KDE5MiYoZj0yNTUmYSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwobzw8NiY0MDMyfGI8PDEyJjYxNDQwfDYzJmYpPj4+MCl7MDticmVhayBBfUE9YzticmVha31pZigoMHxmKTw0fDI0NDwoMjU1JmwpKXswO2JyZWFrIEF9c3dpdGNoKG89MHx0cltvPj4wXSxmPTB8dHJbYT4+MF0sYT0wfHRyW2M+PjBdLGM9MjU1Jm8sbDw8MjQ+PjI0KXtjYXNlLTE2OmlmKDQ4PD0obysxMTImMjU1KSl7QT11O2JyZWFrIEF9YnJlYWs7Y2FzZS0xMjppZigxMjg9PSgyNDAmY3wwKSlicmVhaztBPXU7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZjfDApKXtBPXU7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihvPTI1NSZmKXwwKSl7MDticmVhayBBfWlmKDEyOCE9KDE5MiYoZj0yNTUmYSl8MCkpezA7YnJlYWsgQX1pZihpPj4+MDwoYzw8MTImMjU4MDQ4fGI8PDE4JjE4MzUwMDh8bzw8NiY0MDMyfDYzJmYpPj4+MCl7MDticmVhayBBfUE9QSs0fDB9fXdoaWxlKDApO3M9cysxfDB9cmV0dXJuIEEtdHwwfShyfD0wLGl8PTAsZnw9MCwxMTE0MTExLDApfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTA7dmFyIG4sdD0wO3Q9dXI9KG49dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhmfD0wKT4+Ml09cixyPTB8cmYoMHxhcltBKzg+PjJdKSxBPTB8JGModCwwKSwwfHImJnJmKHIpO0E6ZG97c3dpdGNoKDB8QSl7Y2FzZSAwOmNhc2UtMTpBPTI7YnJlYWs7ZGVmYXVsdDppZigoQT1BKy0xfDApPj4+MD4oaS0oMHxhcltmPj4yXSl8MCk+Pj4wKUE9MTtlbHNlIGZvcig7Oyl7aWYoIUEpe0E9MDticmVhayBBfWU9MHx0clt0Pj4wXSxpPTB8YXJbZj4+Ml0sYXJbZj4+Ml09aSsxLHRyW2k+PjBdPWUsdD10KzF8MCxBPUErLTF8MH19fXdoaWxlKDApO3JldHVybiB1cj1uLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGw9MCx1PTAsYj0wO3Q9aXw9MCxuPShBfD0wKSs4fDAsYj11PTA7QTpmb3IoOyEoKDB8cik9PSgwfGkpfGY+Pj4wPD11Pj4+MCk7KXtzd2l0Y2gobD0wfHJmKDB8YXJbbj4+Ml0pLEE9MHwoYT10LShvPXIpfDAsYz1lLDB8R2koMCxvfD0wLGF8PTAsMHwoY3w9MCk/Yzo1ODE1NikpLDB8bCYmcmYobCksMHxBKXtjYXNlLTI6Y2FzZS0xOmJyZWFrIEE7Y2FzZSAwOkE9MX11PXUrMXwwLGI9QStifDAscj1yK0F8MH1yZXR1cm4gMHxifSxmdW5jdGlvbihBLGUscixpLGYpe2ZvcihBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7KDB8ZSkhPSgwfHIpOylBPTB8dHJbZT4+MF0sdHJbZj4+MF09LTE8QTw8MjQ+PjI0P0E6aSxmPWYrMXwwLGU9ZSsxfDA7cmV0dXJuIDB8cn0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGl8PTA7dmFyIG4sdD0wO2ZvcihuPSgocnw9MCktKGV8PTApfDApPj4+MixBPWZ8PTAsZj1lOygwfGYpIT0oMHxyKTspdD0wfGFyW2Y+PjJdLHRyW0E+PjBdPXQ+Pj4wPDEyOD8yNTUmdDppLEE9QSsxfDAsZj1mKzR8MDtyZXR1cm4gZSsobjw8Mil8MH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gcnw9MCxhclsoZnw9MCk+PjJdPXIsM30sZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gMHwoKGk9KGl8PTApLShyfD0wKXwwKT4+PjA8KGZ8PTApPj4+MD9pOmYpfSxmdW5jdGlvbihBLGUscixpLGYpe3JldHVybiByfD0wLGFyWyhmfD0wKT4+Ml09ciwzfSxmdW5jdGlvbihBLGUscixpLGYpe3JldHVybiAwfGZ1bmN0aW9uKEEsZSxyLGksZil7cnw9MCxpfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDsyPCgobj1lfD0wKS0odD1BfD0wKXwwKSYwIT0oNCYoZnw9MCl8MCkmJi0xNz09KDB8dHJbQT4+MF0pJiYtNjk9PSgwfHRyW0ErMT4+MF0pP0E9LTY1PT0oKGQ9MCl8dHJbQSsyPj4wXSk/QSszfDA6QTpkPTA7QTpmb3IoOzspe2lmKCEoZD4+PjA8cj4+PjAmQT4+PjA8ZT4+PjApKXswO2JyZWFrfWlmKGw9MHx0cltBPj4wXSxpPj4+MDwocz0yNTUmbCk+Pj4wKXswO2JyZWFrfWE9QSsxfDA7ZG97aWYobDw8MjQ+PjI0PD0tMSl7aWYoKDI1NSZsKTwxOTQpezA7YnJlYWsgQX1pZihjPUErMnwwLGY9bi0odT1BKXwwLCgyNTUmbCk8MjI0KXtpZigoMHxmKTwyKXswO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihmPTB8Y3JbYT4+MF0pfDApKXswO2JyZWFrIEF9aWYoaT4+PjA8KDYzJmZ8czw8NiYxOTg0KT4+PjApezA7YnJlYWsgQX1mPWQsQT1jO2JyZWFrfWlmKGI9QSszfDAsKDI1NSZsKTwyNDApe2lmKCgwfGYpPDMpezA7YnJlYWsgQX1zd2l0Y2gobz0wfHRyW2M+PjBdLGE9MHxjclthPj4wXSxmPTIyNCZhLGw8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfGYpKWJyZWFrO0E9dTticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxmKSlicmVhaztBPXU7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZhfDApKXtBPXU7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihmPTI1NSZvKXwwKSl7MDticmVhayBBfWlmKGk+Pj4wPChhPDw2JjQwMzJ8czw8MTImNjE0NDB8NjMmZik+Pj4wKXswO2JyZWFrIEF9Zj1kLEE9YjticmVha31pZigyNDU8PSgyNTUmbCkpezA7YnJlYWsgQX1pZigoci1kfDApPj4+MDwyfCgwfGYpPDQpezA7YnJlYWsgQX1zd2l0Y2gobz0wfHRyW2E+PjBdLGY9MHx0cltjPj4wXSxhPTB8dHJbYj4+MF0sYz0yNTUmbyxsPDwyND4+MjQpe2Nhc2UtMTY6aWYoNDg8PShvKzExMiYyNTUpKXtBPXU7YnJlYWsgQX1icmVhaztjYXNlLTEyOmlmKDEyOD09KDI0MCZjfDApKWJyZWFrO0E9dTticmVhayBBO2RlZmF1bHQ6aWYoMTI4IT0oMTkyJmN8MCkpe0E9dTticmVhayBBfX1pZigxMjghPSgxOTImKG89MjU1JmYpfDApKXswO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihmPTI1NSZhKXwwKSl7MDticmVhayBBfWlmKGk+Pj4wPChjPDwxMiYyNTgwNDh8czw8MTgmMTgzNTAwOHxvPDw2JjQwMzJ8NjMmZik+Pj4wKXswO2JyZWFrIEF9Zj1kKzF8MCxBPUErNHwwfWVsc2UgZj1kLEE9YX13aGlsZSgwKTtkPWYrMXwwfXJldHVybiBBLXR8MH0ocnw9MCxpfD0wLGZ8PTAsMTExNDExMSwwKX0sQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2IsQ2JdLHFiPVtHYixmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG49K247dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wO2ZvcihCPXVyPShtPXVyKSszMSYtMzIsdXI9dXIrMzg0fDAsYz1CKzh8MCxBPShaPUIpKzI4NHwwLHA9Qis3MnwwLGc9QisxODR8MCx2PUIrNjh8MCxsPUIrMTgwfDAsdT1CKzE3N3wwLGI9QisxNzZ8MCxrPUIrNTZ8MCxoPUIrNDR8MCx3PUIrMzJ8MCxvPUIrMjh8MCxhPUIrNzZ8MCxzPUIrMjR8MCxkPUIrMTZ8MCxCPUIrMjB8MCxhcltwPj4yXT1BLFFbYz4+M109biw5OTwoQT0wfF9jKEEsMTAwLDU1MTY4LGMpKT4+PjA/KEE9MHxkbigpLFFbWj4+M109bixBPTB8a3IocCxBLDU1MTY4LFopLChnPTB8YXJbcD4+Ml0pfHxndSgpLChaPTB8eWMoQSkpPyhXPUEsQz1FPVosRz1nKTpndSgpKTooRT1nLFc9QSxHPUM9MCksVGYodixpKSx0PTB8dW4odiw1OTIzMikseT0wfGFyW3A+PjJdLFBiWzcmYXJbMzIrKDB8YXJbdD4+Ml0pPj4yXV0odCx5LHkrV3wwLEUpLHk9Vz80NT09KDB8dHJbYXJbcD4+Ml0+PjBdKTowLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLEE9YXJbOCtrPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbaysoQTw8Mik+PjJdPTApO2ZvcihhcltoPj4yXT0wLGFyWzQraD4+Ml09MCxBPWFyWzgraD4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2grKEE8PDIpPj4yXT0wKTtmb3IoYXJbdz4+Ml09MCxhcls0K3c+PjJdPTAsQT1hcls4K3c+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclt3KyhBPDwyKT4+Ml09MCk7cmV0dXJuIGtpKHIseSx2LGwsdSxiLGssaCx3LG8pLDEwMDwoQT0oWj0oMHwocD0wfGFyW28+PjJdKSk8KDB8Vyk/KGc9MHx0clsxMSt3Pj4wXSxaPTB8dHJbMTEraD4+MF0sQT0xLGc9KGc8PDI0Pj4yNDwwPzB8YXJbNCt3Pj4yXToyNTUmZykrKFctcDw8MSl8MCxaPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JlopOihaPTB8dHJbMTErdz4+MF0sQT0yLGc9KGc9MHx0clsxMStoPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtoPj4yXToyNTUmZyxaPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JlopKStwK2crQXwwKT4+PjA/KEE9MHx5YyhBKSk/ST1YPUE6Z3UoKTooWD1hLEk9MCksaGkoWCxzLGQsMHxhcltpKzQ+PjJdLEUsRStXfDAsdCx5LGwsMHx0clt1Pj4wXSwwfHRyW2I+PjBdLGssaCx3LHApLGFyW0I+PjJdPWFyW2U+PjJdLGU9MHxhcltzPj4yXSxBPTB8YXJbZD4+Ml0sYXJbYz4+Ml09YXJbQj4+Ml0sQT0wfFBBKGMsWCxlLEEsaSxmKSwwfEkmJkJjKEkpLEJ1KHcpLEJ1KGgpLEJ1KGspLGJuKHYpLDB8QyYmQmMoQyksMHxHJiZCYyhHKSx1cj1tLDB8QX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxuPStuO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MDtmb3IoQj11cj0obT11cikrMzEmLTMyLHVyPXVyKzEwMDh8MCxjPUIrOHwwLEE9KFo9QikrODk2fDAscD1CKzg4OHwwLGc9Qis0ODh8MCx2PUIrNDgwfDAsbD1CKzg5MnwwLHU9Qis0NzZ8MCxiPUIrNDcyfDAsaz1CKzQ2MHwwLGg9Qis0NDh8MCx3PUIrNDM2fDAsbz1CKzQzMnwwLGE9QiszMnwwLHM9QisyNHwwLGQ9QisxNnwwLEI9QisyMHwwLGFyW3A+PjJdPUEsUVtjPj4zXT1uLDk5PChBPTB8X2MoQSwxMDAsNTUxNjgsYykpPj4+MD8oQT0wfGRuKCksUVtaPj4zXT1uLEE9MHxrcihwLEEsNTUxNjgsWiksKGc9MHxhcltwPj4yXSl8fGd1KCksKFo9MHx5YyhBPDwyKSk/KFc9QSxDPUU9WixHPWcpOmd1KCkpOihFPWcsVz1BLEc9Qz0wKSxUZih2LGkpLHQ9MHx1bih2LDU5MjY0KSx5PTB8YXJbcD4+Ml0sUGJbNyZhcls0OCsoMHxhclt0Pj4yXSk+PjJdXSh0LHkseStXfDAsRSkseT1XPzQ1PT0oMHx0clthcltwPj4yXT4+MF0pOjAsYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsQT1hcls4K2s+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhcltrKyhBPDwyKT4+Ml09MCk7Zm9yKGFyW2g+PjJdPTAsYXJbNCtoPj4yXT0wLEE9YXJbOCtoPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbaCsoQTw8Mik+PjJdPTApO2Zvcihhclt3Pj4yXT0wLGFyWzQrdz4+Ml09MCxBPWFyWzgrdz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3crKEE8PDIpPj4yXT0wKTtyZXR1cm4gX2wocix5LHYsbCx1LGIsayxoLHcsbyksMTAwPChBPShaPSgwfChwPTB8YXJbbz4+Ml0pKTwoMHxXKT8oZz0wfHRyWzgrdyszPj4wXSxaPTB8dHJbOCtoKzM+PjBdLEE9MSxnPShnPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JmcpKyhXLXA8PDEpfDAsWjw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZaKTooWj0wfHRyWzgrdyszPj4wXSxBPTIsZz0oZz0wfHRyWzgraCszPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtoPj4yXToyNTUmZyxaPDwyND4+MjQ8MD8wfGFyWzQrdz4+Ml06MjU1JlopKStwK2crQXwwKT4+PjA/KEE9MHx5YyhBPDwyKSk/ST1YPUE6Z3UoKTooWD1hLEk9MCksWWwoWCxzLGQsMHxhcltpKzQ+PjJdLEUsRSsoVzw8Mil8MCx0LHksbCwwfGFyW3U+PjJdLDB8YXJbYj4+Ml0sayxoLHcscCksYXJbQj4+Ml09YXJbZT4+Ml0sZT0wfGFyW3M+PjJdLEE9MHxhcltkPj4yXSxhcltjPj4yXT1hcltCPj4yXSxBPTB8bXIoYyxYLGUsQSxpLGYpLDB8SSYmQmMoSSksUXUodyksUXUoaCksQnUoayksYm4odiksMHxDJiZCYyhDKSwwfEcmJkJjKEcpLHVyPW0sMHxBfSxHYl0sJGI9W1ZiLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1PXVyPShhPXVyKSszMSYtMzIsdXI9dXIrNDh8MCxjPXUrNDB8MCxiPXUrMTZ8MCx0PXUrOHwwLG89dSsxMnwwLGw9dSs0fDAsMSZhclsoaXw9MCkrND4+Ml0pZm9yKFRmKGMsaSksbD0wfHVuKGMsNTkyMzIpLGJuKGMpLFRmKGMsaSksQT0wfHVuKGMsNTkyNDgpLGJuKGMpLGZzWzYzJmFyWzI0KygwfGFyW0E+PjJdKT4+Ml1dKGIsQSksZnNbNjMmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oYisxMnwwLEEpLGFyW3U+PjJdPWFyW3I+PjJdLEE9YisyNHwwLGFyW2M+PjJdPWFyW3U+PjJdLGM9KDB8Vm4oZSxjLGIsQSxsLGYsMSkpPT0oMHxiKSYxLHRyW24+PjBdPWMsYz0wfGFyW2U+PjJdO0J1KEE9QSstMTJ8MCksKDB8QSkhPSgwfGIpOyk7ZWxzZXtzd2l0Y2goYXJbdD4+Ml09LTEsdT0wfGFyWzE2KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbD4+Ml09YXJbcj4+Ml0sYXJbYj4+Ml09YXJbbz4+Ml0sYXJbYz4+Ml09YXJbbD4+Ml0sYj0wfCRiWzYzJnVdKEEsYixjLGksZix0KSxhcltlPj4yXT1iLDB8YXJbdD4+Ml0pe2Nhc2UgMDp0cltuPj4wXT0wO2JyZWFrO2Nhc2UgMTp0cltuPj4wXT0xO2JyZWFrO2RlZmF1bHQ6dHJbbj4+MF09MSxhcltmPj4yXT00fWM9MHxhcltlPj4yXX1yZXR1cm4gdXI9YSwwfGN9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8R24oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/KEE9KDB8KEE9MHxhcltaKzEyPj4yXSkpPT0oMHxhcltaKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYodyl7aWYoMHxNZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7NDc9PSgwfEUpJiZpJiYoRT00OSk7NDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGM9eSsxOTh8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxCbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxzbigyNTUmKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW2k+PjBdKSkscyxBLGwseSwwfHRyW3A+PjBdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzEsaGYoMHx0cltpPj4wXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfENuKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsYXJbbis0Pj4yXT1ELGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfE1mKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8SW4oQSwwfGFyW2w+PjJdLGYscyksb3Jbbj4+MV09QixnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/KEE9KDB8KEE9MHxhcltaKzEyPj4yXSkpPT0oMHxhcltaKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYodyl7aWYoMHxNZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7NDc9PSgwfEUpJiZpJiYoRT00OSk7NDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzIyNHwwLGM9eSsxOTh8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxCbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxzbigyNTUmKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxoZigwfHRyW2k+PjBdKSkscyxBLGwseSwwfHRyW3A+PjBdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzEsaGYoMHx0cltpPj4wXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfFduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO3k9dXI9KGg9dXIpKzMxJi0zMix1cj11cisyMjR8MCxjPXkrMTk4fDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksQm4oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsYXJbeT4+Ml09MCx0PTQra3wwLHY9MHxhcltlPj4yXSx3PXY7QTpmb3IoOzspe209dz8wfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsdj1aPTAsMSk6KFo9dywwKToodj1aPTAsMSksdz0wfGFyW3I+PjJdO2Rve2lmKHcpe2lmKDB8TWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTE5O2JyZWFrfWlmKG0pYnJlYWs7YnJlYWsgQX1FPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxFKSl7aWYoRT0wLG0pe3c9MDticmVha313PTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltsPj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8c24oMjU1JihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltpPj4wXSkpLHMsQSxsLHksMHx0cltwPj4wXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpO0I9MHxYbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfE1mKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMjI0fDAsYz15KzE5OHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLEJuKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxNZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8aGYoMHx0cltpPj4wXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfE1mKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGhmKDB8dHJbaT4+MF0pKSxzLEEsbCx5LDB8dHJbcD4+MF0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8RW4oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixhcltuKzQ+PjJdPUQsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8TWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzI0MHwwLGM9QisyMDB8MCxsPUIrMTk5fDAsRT1CKzE5OHwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzE5N3wwLEI9QisxOTZ8MCx3bihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfE1mKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8dm4oMjU1JihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltpPj4wXSkpLFgsQixBLHUsMHx0cltsPj4wXSwwfHRyW0U+PjBdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rcG4oQSwwfGFyW3U+PjJdLGYpLGdBW24+PjJdPXYsZ24oaCxiLDB8YXJbcz4+Ml0sZiksaT15PyhBPSgwfChBPTB8YXJbeSsxMj4+Ml0pKT09KDB8YXJbeSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2c+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltBPj4wXSksMHxNZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKG0pe2lmKDB8TWYoQT0oMHwoQT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTQ3O2JyZWFrfWlmKGkpYnJlYWs7ST00OTticmVha31JPTQ3fXdoaWxlKDApOzQ3PT0oMHxJKSYmaSYmKEk9NDkpOzQ5PT0oMHxJKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBJPTB8YXJbZT4+Ml0sQnUoayksQnUoaCksdXI9dywwfEl9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzI0MHwwLGM9QisyMDB8MCxsPUIrMTk5fDAsRT1CKzE5OHwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzE5N3wwLEI9QisxOTZ8MCx3bihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfE1mKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW2k+PjBdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8dm4oMjU1JihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8aGYoMHx0cltpPj4wXSkpLFgsQixBLHUsMHx0cltsPj4wXSwwfHRyW0U+PjBdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrMSxoZigwfHRyW2k+PjBdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rWm4oQSwwfGFyW3U+PjJdLGYpLFFbbj4+M109dixnbihoLGIsMHxhcltzPj4yXSxmKSxpPXk/KEE9KDB8KEE9MHxhclt5KzEyPj4yXSkpPT0oMHxhclt5KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZz4+Ml0pPj4yXV0oeSk6MHxoZigwfHRyW0E+PjBdKSwwfE1mKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYobSl7aWYoMHxNZihBPSgwfChBPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8aGYoMHx0cltBPj4wXSksLTEpKXthcltyPj4yXT0wLEk9NDc7YnJlYWt9aWYoaSlicmVhaztJPTQ5O2JyZWFrfUk9NDd9d2hpbGUoMCk7NDc9PSgwfEkpJiZpJiYoST00OSk7NDk9PSgwfEkpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEk9MHxhcltlPj4yXSxCdShrKSxCdShoKSx1cj13LDB8SX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtCPXVyPSh3PXVyKSszMSYtMzIsdXI9dXIrMjQwfDAsYz1CKzIwMHwwLGw9QisxOTl8MCxFPUIrMTk4fDAsaD1CKzE4NHwwLGs9QisxNzJ8MCx1PUIrMTY4fDAsYj1CKzh8MCxzPUIrNHwwLFg9KGQ9QikrMTk3fDAsQj1CKzE5NnwwLHduKGgsaXw9MCxjLGwsRSksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BLGFyW3M+PjJdPWIsYXJbZD4+Ml09MCx0cltYPj4wXT0xLHRyW0I+PjBdPTY5LHQ9NCtrfDAsZz0wfGFyW2U+PjJdLG09ZztBOmZvcig7Oyl7Wj1tPzB8TWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oYXJbZT4+Ml09MCxnPXk9MCwxKTooeT1tLDApOihnPXk9MCwxKSxtPTB8YXJbcj4+Ml07ZG97aWYobSl7aWYoMHxNZihpPSgwfChpPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8aGYoMHx0cltpPj4wXSksLTEpKXthcltyPj4yXT0wLEk9MTk7YnJlYWt9aWYoWilicmVhazticmVhayBBfUk9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEkpKXtpZihJPTAsWil7bT0wO2JyZWFrfW09MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW3U+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW3U+PjJdPUEraSksMHx2bigyNTUmKGk9KDB8KGk9MHxhclsoWj15KzEyfDApPj4yXSkpPT0oMHxhclsocD15KzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbeT4+Ml0pPj4yXV0oeSk6MHxoZigwfHRyW2k+PjBdKSksWCxCLEEsdSwwfHRyW2w+PjBdLDB8dHJbRT4+MF0saCxiLHMsZCxjKSlicmVhazsoMHwoaT0wfGFyW1o+PjJdKSkhPSgwfGFyW3A+PjJdKT8oYXJbWj4+Ml09aSsxLGhmKDB8dHJbaT4+MF0pLG09eSk6KGpiWzEyNyZhcls0MCsoMHxhclt5Pj4yXSk+PjJdXSh5KSxtPXkpfUU9MHx0clsxMStoPj4wXSwwIT0oMHx0cltYPj4wXSkmJjAhPSgwfChFPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JkUpKSYmKChXPTB8YXJbcz4+Ml0pLWJ8MCk8MTYwJiYoWD0wfGFyW2Q+PjJdLGFyW3M+PjJdPVcrNCxhcltXPj4yXT1YKTt2PSttbihBLDB8YXJbdT4+Ml0sZiksUVtuPj4zXT12LGduKGgsYiwwfGFyW3M+PjJdLGYpLGk9eT8oQT0oMHwoQT0wfGFyW3krMTI+PjJdKSk9PSgwfGFyW3krMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltnPj4yXSk+PjJdXSh5KTowfGhmKDB8dHJbQT4+MF0pLDB8TWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZihtKXtpZigwfE1mKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsST00NzticmVha31pZihpKWJyZWFrO0k9NDk7YnJlYWt9ST00N313aGlsZSgwKTs0Nz09KDB8SSkmJmkmJihJPTQ5KTs0OT09KDB8SSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gST0wfGFyW2U+PjJdLEJ1KGspLEJ1KGgpLHVyPXcsMHxJfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7Zm9yKGc9dXI9KGQ9dXIpKzMxJi0zMix1cj11cisyNDB8MCxaPSh1PWcpKzIwNHwwLGI9ZysxOTJ8MCxzPWcrMTgwfDAscD1nKzE3NnwwLGM9ZysxNnwwLGw9Zys4fDAsZz1nKzR8MCxhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxBPWFyWzgrYj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2IrKEE8PDIpPj4yXT0wKTtmb3IoVGYocyxpKSxBPTB8dW4ocyw1OTIzMiksUGJbNyZhclszMisoMHxhcltBPj4yXSk+PjJdXShBLDUzNjQ4LDUzNjc0LFopLGJuKHMpLGFyW3M+PjJdPTAsYXJbNCtzPj4yXT0wLEE9YXJbOCtzPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbcysoQTw8Mik+PjJdPTApO289OCtzfDAsVnUocyxBPSgwfHRyWyhhPTExK3N8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QSxhcltsPj4yXT1jLHQ9NCtzfChhcltnPj4yXT0wKSxrPWg9MHxhcltlPj4yXTtBOmZvcig7Oyl7dz1rPzB8TWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaT4+MF0pLC0xKT8oaD1tPWFyW2U+PjJdPTAsMSk6KG09aywwKTooaD1tPTAsMSksaz0wfGFyW3I+PjJdO2Rve2lmKGspe2lmKDB8TWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTIyO2JyZWFrfWlmKHcpYnJlYWs7YnJlYWsgQX15PTIyfXdoaWxlKDApO2lmKDIyPT0oMHx5KSl7aWYoeT0wLHcpe2s9MDticmVha31rPTB9aWYoaT0oaT0wfHRyW2E+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltwPj4yXSk9PShBK2l8MCkmJihWdShzLGk8PDEsMCksVnUocyxBPSgwfHRyW2E+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QStpKSwwfHNuKDI1NSYoaT0oMHwoaT0wfGFyWyh3PW0rMTJ8MCk+PjJdKSk9PSgwfGFyWyh2PW0rMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGhmKDB8dHJbaT4+MF0pKSwxNixBLHAsZywwLGIsYyxsLFopKWJyZWFrOygwfChpPTB8YXJbdz4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhclt3Pj4yXT1pKzEsaGYoMHx0cltpPj4wXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW20+PjJdKT4+Ml1dKG0pLGs9bSl9VnUocywoMHxhcltwPj4yXSktQXwwLDApLFo9KDB8dHJbYT4+MF0pPDA/MHxhcltzPj4yXTpzLHA9MHxkbigpLGFyW3U+PjJdPW4sMSE9KDB8a24oWixwLDUzNjgxLHUpKSYmKGFyW2Y+PjJdPTQpLGk9bT8wfE1mKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaD4+Ml0pPj4yXV0obSk6MHxoZigwfHRyW0E+PjBdKSwtMSk/KGFyW2U+PjJdPTAsMSk6MDoxO2Rve2lmKGspe2lmKDB8TWYoQT0oMHwoQT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGhmKDB8dHJbQT4+MF0pLC0xKSl7YXJbcj4+Ml09MCx5PTQ5O2JyZWFrfWlmKGkpYnJlYWs7eT01MTticmVha315PTQ5fXdoaWxlKDApO3JldHVybiA0OT09KDB8eSkmJmkmJih5PTUxKSw1MT09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx5PTB8YXJbZT4+Ml0sQnUocyksQnUoYiksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1PXVyPShhPXVyKSszMSYtMzIsdXI9dXIrNDh8MCxjPXUrNDB8MCxiPXUrMTZ8MCx0PXUrOHwwLG89dSsxMnwwLGw9dSs0fDAsMSZhclsoaXw9MCkrND4+Ml0pZm9yKFRmKGMsaSksbD0wfHVuKGMsNTkyNjQpLGJuKGMpLFRmKGMsaSksQT0wfHVuKGMsNTkyNzIpLGJuKGMpLGZzWzYzJmFyWzI0KygwfGFyW0E+PjJdKT4+Ml1dKGIsQSksZnNbNjMmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oYisxMnwwLEEpLGFyW3U+PjJdPWFyW3I+PjJdLEE9YisyNHwwLGFyW2M+PjJdPWFyW3U+PjJdLGM9KDB8aXIoZSxjLGIsQSxsLGYsMSkpPT0oMHxiKSYxLHRyW24+PjBdPWMsYz0wfGFyW2U+PjJdO1F1KEE9QSstMTJ8MCksKDB8QSkhPSgwfGIpOyk7ZWxzZXtzd2l0Y2goYXJbdD4+Ml09LTEsdT0wfGFyWzE2KygwfGFyW0E+PjJdKT4+Ml0sYXJbbz4+Ml09YXJbZT4+Ml0sYXJbbD4+Ml09YXJbcj4+Ml0sYXJbYj4+Ml09YXJbbz4+Ml0sYXJbYz4+Ml09YXJbbD4+Ml0sYj0wfCRiWzYzJnVdKEEsYixjLGksZix0KSxhcltlPj4yXT1iLDB8YXJbdD4+Ml0pe2Nhc2UgMDp0cltuPj4wXT0wO2JyZWFrO2Nhc2UgMTp0cltuPj4wXT0xO2JyZWFrO2RlZmF1bHQ6dHJbbj4+MF09MSxhcltmPj4yXT00fWM9MHxhcltlPj4yXX1yZXR1cm4gdXI9YSwwfGN9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtmb3IoeT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxBPWFyWzgraz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2srKEE8PDIpPj4yXT0wKTthPTgra3wwLFZ1KGssQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSx0PTQra3woYXJbeT4+Ml09MCksdz12PTB8YXJbZT4+Ml07QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KHY9Wj1hcltlPj4yXT0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLFZ1KGssQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSksQj0wfEduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPzB8VWYoQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCwxKTowOjE7ZG97aWYodyl7aWYoMHxVZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7cmV0dXJuIDQ3PT0oMHxFKSYmaSYmKEU9NDkpLDQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pLEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7Zm9yKHk9dXI9KGg9dXIpKzMxJi0zMix1cj11ciszMDR8MCxjPXkrMjAwfDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksX24oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsQT1hcls4K2s+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhcltrKyhBPDwyKT4+Ml09MCk7YT04K2t8MCxWdShrLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsdD00K2t8KGFyW3k+PjJdPTApLHc9dj0wfGFyW2U+PjJdO0E6Zm9yKDs7KXttPXc/MHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpPyh2PVo9YXJbZT4+Ml09MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxWdShrLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8Rm4oaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGdmKDB8YXJbaT4+Ml0pLHMsQSxsLHksMHxhcltwPj4yXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpLEI9MHxDbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGFyW24rND4+Ml09RCxnbihkLHUsMHxhcltiPj4yXSxmKSxpPVo/MHxVZihBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksLTEpPyhhcltlPj4yXT0wLDEpOjA6MTtkb3tpZih3KXtpZigwfFVmKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTtyZXR1cm4gNDc9PSgwfEUpJiZpJiYoRT00OSksNDk9PSgwfEUpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSksRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtmb3IoeT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxBPWFyWzgraz4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2srKEE8PDIpPj4yXT0wKTthPTgra3wwLFZ1KGssQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSx0PTQra3woYXJbeT4+Ml09MCksdz12PTB8YXJbZT4+Ml07QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KHY9Wj1hcltlPj4yXT0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLFZ1KGssQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSksQj0wfEluKEEsMHxhcltsPj4yXSxmLHMpLG9yW24+PjFdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPzB8VWYoQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCwxKTowOjE7ZG97aWYodyl7aWYoMHxVZihBPSgwfChBPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEU9NDc7YnJlYWt9aWYoaSlicmVhaztFPTQ5O2JyZWFrfUU9NDd9d2hpbGUoMCk7cmV0dXJuIDQ3PT0oMHxFKSYmaSYmKEU9NDkpLDQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pLEU9MHxhcltlPj4yXSxCdShrKSxCdShkKSx1cj1oLDB8RX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTA7eT11cj0oaD11cikrMzEmLTMyLHVyPXVyKzMwNHwwLGM9eSsyMDB8MCxwPXkrMTk2fDAsZD15KzE4NHwwLGs9eSsxNzJ8MCxsPXkrMTY4fDAsdT15Kzh8MCxiPXkrNHwwLHM9MHx5bihpfD0wKSxfbihkLGksYyxwKSxhcltrPj4yXT0wLGFyWzQraz4+Ml09MCxhcls4K2s+PjJdPTAsQT0wO2Zvcig7MyE9KDB8QSk7KWFyW2srKEE8PDIpPj4yXT0wLEE9QSsxfDA7YT04K2t8MCxBPSgwfHRyWyhvPTExK2t8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTA7VnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEsYXJbYj4+Ml09dSxhclt5Pj4yXT0wLHQ9NCtrfDAsdj0wfGFyW2U+PjJdLHc9djtBOmZvcig7Oyl7bT13PzB8VWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCx2PVo9MCwxKTooWj13LDApOih2PVo9MCwxKSx3PTB8YXJbcj4+Ml07ZG97aWYodyl7aWYoMHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEU9MTk7YnJlYWt9aWYobSlicmVhazticmVhayBBfUU9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEUpKXtpZihFPTAsbSl7dz0wO2JyZWFrfXc9MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW2w+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW2w+PjJdPUEraSksMHxGbihpPSgwfChpPTB8YXJbKG09WisxMnwwKT4+Ml0pKT09KDB8YXJbKGc9WisxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW1o+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltpPj4yXSkscyxBLGwseSwwfGFyW3A+PjJdLGQsdSxiLGMpKWJyZWFrOygwfChpPTB8YXJbbT4+Ml0pKSE9KDB8YXJbZz4+Ml0pPyhhclttPj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksdz1aKTooamJbMTI3JmFyWzQwKygwfGFyW1o+PjJdKT4+Ml1dKFopLHc9Wil9MHwoKHA9MHx0clsxMStkPj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCtkPj4yXToyNTUmcCkmJigoQj0wfGFyW2I+PjJdKS11fDApPDE2MCYmKHk9MHxhclt5Pj4yXSxhcltiPj4yXT1CKzQsYXJbQj4+Ml09eSk7Qj0wfFduKEEsMHxhcltsPj4yXSxmLHMpLGFyW24+PjJdPUIsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO3k9dXI9KGg9dXIpKzMxJi0zMix1cj11ciszMDR8MCxjPXkrMjAwfDAscD15KzE5NnwwLGQ9eSsxODR8MCxrPXkrMTcyfDAsbD15KzE2OHwwLHU9eSs4fDAsYj15KzR8MCxzPTB8eW4oaXw9MCksX24oZCxpLGMscCksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BLGFyW2I+PjJdPXUsYXJbeT4+Ml09MCx0PTQra3wwLHY9MHxhcltlPj4yXSx3PXY7QTpmb3IoOzspe209dz8wfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsdj1aPTAsMSk6KFo9dywwKToodj1aPTAsMSksdz0wfGFyW3I+PjJdO2Rve2lmKHcpe2lmKDB8VWYoaT0oMHwoaT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTE5O2JyZWFrfWlmKG0pYnJlYWs7YnJlYWsgQX1FPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxFKSl7aWYoRT0wLG0pe3c9MDticmVha313PTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltsPj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhcltsPj4yXT1BK2kpLDB8Rm4oaT0oMHwoaT0wfGFyWyhtPVorMTJ8MCk+PjJdKSk9PSgwfGFyWyhnPVorMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltaPj4yXSk+PjJdXShaKTowfGdmKDB8YXJbaT4+Ml0pLHMsQSxsLHksMHxhcltwPj4yXSxkLHUsYixjKSlicmVhazsoMHwoaT0wfGFyW20+PjJdKSkhPSgwfGFyW2c+PjJdKT8oYXJbbT4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLHc9Wik6KGpiWzEyNyZhcls0MCsoMHxhcltaPj4yXSk+PjJdXShaKSx3PVopfTB8KChwPTB8dHJbMTErZD4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrZD4+Ml06MjU1JnApJiYoKEI9MHxhcltiPj4yXSktdXwwKTwxNjAmJih5PTB8YXJbeT4+Ml0sYXJbYj4+Ml09Qis0LGFyW0I+PjJdPXkpO0I9MHxYbihBLDB8YXJbbD4+Ml0sZixzKSxhcltuPj4yXT1CLGduKGQsdSwwfGFyW2I+PjJdLGYpLGk9Wj8oQT0oMHwoQT0wfGFyW1orMTI+PjJdKSk9PSgwfGFyW1orMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt2Pj4yXSk+PjJdXShaKTowfGdmKDB8YXJbQT4+Ml0pLDB8VWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZih3KXtpZigwfFVmKEE9KDB8KEE9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT00NzticmVha31pZihpKWJyZWFrO0U9NDk7YnJlYWt9RT00N313aGlsZSgwKTs0Nz09KDB8RSkmJmkmJihFPTQ5KTs0OT09KDB8RSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gRT0wfGFyW2U+PjJdLEJ1KGspLEJ1KGQpLHVyPWgsMHxFfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDt5PXVyPShoPXVyKSszMSYtMzIsdXI9dXIrMzA0fDAsYz15KzIwMHwwLHA9eSsxOTZ8MCxkPXkrMTg0fDAsaz15KzE3MnwwLGw9eSsxNjh8MCx1PXkrOHwwLGI9eSs0fDAscz0wfHluKGl8PTApLF9uKGQsaSxjLHApLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QSxhcltiPj4yXT11LGFyW3k+PjJdPTAsdD00K2t8MCx2PTB8YXJbZT4+Ml0sdz12O0E6Zm9yKDs7KXttPXc/MHxVZihpPSgwfChpPTB8YXJbdysxMj4+Ml0pKT09KDB8YXJbdysxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3c+PjJdKT4+Ml1dKHcpOjB8Z2YoMHxhcltpPj4yXSksLTEpPyhhcltlPj4yXT0wLHY9Wj0wLDEpOihaPXcsMCk6KHY9Wj0wLDEpLHc9MHxhcltyPj4yXTtkb3tpZih3KXtpZigwfFVmKGk9KDB8KGk9MHxhclt3KzEyPj4yXSkpPT0oMHxhclt3KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbdz4+Ml0pPj4yXV0odyk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW3I+PjJdPTAsRT0xOTticmVha31pZihtKWJyZWFrO2JyZWFrIEF9RT0xOX13aGlsZSgwKTtpZigxOT09KDB8RSkpe2lmKEU9MCxtKXt3PTA7YnJlYWt9dz0wfWlmKGk9KGk9MHx0cltvPj4wXSk8PDI0Pj4yNDwwPzB8YXJbdD4+Ml06MjU1JmksKDB8YXJbbD4+Ml0pPT0oQStpfDApJiYoVnUoayxpPDwxLDApLEE9KDB8dHJbbz4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMCxWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbbD4+Ml09QStpKSwwfEZuKGk9KDB8KGk9MHxhclsobT1aKzEyfDApPj4yXSkpPT0oMHxhclsoZz1aKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbWj4+Ml0pPj4yXV0oWik6MHxnZigwfGFyW2k+PjJdKSxzLEEsbCx5LDB8YXJbcD4+Ml0sZCx1LGIsYykpYnJlYWs7KDB8KGk9MHxhclttPj4yXSkpIT0oMHxhcltnPj4yXSk/KGFyW20+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSx3PVopOihqYlsxMjcmYXJbNDArKDB8YXJbWj4+Ml0pPj4yXV0oWiksdz1aKX0wfCgocD0wfHRyWzExK2Q+PjBdKTw8MjQ+PjI0PDA/MHxhcls0K2Q+PjJdOjI1NSZwKSYmKChCPTB8YXJbYj4+Ml0pLXV8MCk8MTYwJiYoeT0wfGFyW3k+PjJdLGFyW2I+PjJdPUIrNCxhcltCPj4yXT15KTtCPTB8RW4oQSwwfGFyW2w+PjJdLGYscyksYXJbbj4+Ml09QixhcltuKzQ+PjJdPUQsZ24oZCx1LDB8YXJbYj4+Ml0sZiksaT1aPyhBPSgwfChBPTB8YXJbWisxMj4+Ml0pKT09KDB8YXJbWisxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3Y+PjJdKT4+Ml1dKFopOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKHcpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW3crMTI+PjJdKSk9PSgwfGFyW3crMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt3Pj4yXSk+PjJdXSh3KTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxFPTQ3O2JyZWFrfWlmKGkpYnJlYWs7RT00OTticmVha31FPTQ3fXdoaWxlKDApOzQ3PT0oMHxFKSYmaSYmKEU9NDkpOzQ5PT0oMHxFKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBFPTB8YXJbZT4+Ml0sQnUoayksQnUoZCksdXI9aCwwfEV9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzM1MnwwLGM9QisyMDh8MCxsPUIrMjAwfDAsRT1CKzE5NnwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzMzN3wwLEI9QiszMzZ8MCxSbihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfFVmKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8Tm4oaT0oMHwoaT0wfGFyWyhaPXkrMTJ8MCk+PjJdKSk9PSgwfGFyWyhwPXkrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt5Pj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbaT4+Ml0pLFgsQixBLHUsMHxhcltsPj4yXSwwfGFyW0U+PjJdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rcG4oQSwwfGFyW3U+PjJdLGYpLGdBW24+PjJdPXYsZ24oaCxiLDB8YXJbcz4+Ml0sZiksaT15PyhBPSgwfChBPTB8YXJbeSsxMj4+Ml0pKT09KDB8YXJbeSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW2c+PjJdKT4+Ml1dKHkpOjB8Z2YoMHxhcltBPj4yXSksMHxVZihBLC0xKT8oYXJbZT4+Ml09MCwxKTowKToxO2Rve2lmKG0pe2lmKDB8VWYoQT0oMHwoQT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTQ3O2JyZWFrfWlmKGkpYnJlYWs7ST00OTticmVha31JPTQ3fXdoaWxlKDApOzQ3PT0oMHxJKSYmaSYmKEk9NDkpOzQ5PT0oMHxJKSYmKGFyW2Y+PjJdPTJ8YXJbZj4+Ml0pO3JldHVybiBJPTB8YXJbZT4+Ml0sQnUoayksQnUoaCksdXI9dywwfEl9KEEsYSxvLGksZixuKSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTA7Qj11cj0odz11cikrMzEmLTMyLHVyPXVyKzM1MnwwLGM9QisyMDh8MCxsPUIrMjAwfDAsRT1CKzE5NnwwLGg9QisxODR8MCxrPUIrMTcyfDAsdT1CKzE2OHwwLGI9Qis4fDAscz1CKzR8MCxYPShkPUIpKzMzN3wwLEI9QiszMzZ8MCxSbihoLGl8PTAsYyxsLEUpLGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxBPTA7Zm9yKDszIT0oMHxBKTspYXJbaysoQTw8Mik+PjJdPTAsQT1BKzF8MDthPTgra3wwLEE9KDB8dHJbKG89MTEra3wwKT4+MF0pPDA/KDIxNDc0ODM2NDcmYXJbYT4+Ml0pLTF8MDoxMDtWdShrLEEsMCksQT0oMHx0cltvPj4wXSk8MD8wfGFyW2s+PjJdOmssYXJbdT4+Ml09QSxhcltzPj4yXT1iLGFyW2Q+PjJdPTAsdHJbWD4+MF09MSx0cltCPj4wXT02OSx0PTQra3wwLGc9MHxhcltlPj4yXSxtPWc7QTpmb3IoOzspe1o9bT8wfFVmKGk9KDB8KGk9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwtMSk/KGFyW2U+PjJdPTAsZz15PTAsMSk6KHk9bSwwKTooZz15PTAsMSksbT0wfGFyW3I+PjJdO2Rve2lmKG0pe2lmKDB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCxJPTE5O2JyZWFrfWlmKFopYnJlYWs7YnJlYWsgQX1JPTE5fXdoaWxlKDApO2lmKDE5PT0oMHxJKSl7aWYoST0wLFope209MDticmVha31tPTB9aWYoaT0oaT0wfHRyW28+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhclt1Pj4yXSk9PShBK2l8MCkmJihWdShrLGk8PDEsMCksQT0oMHx0cltvPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwLFZ1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BK2kpLDB8Tm4oaT0oMHwoaT0wfGFyWyhaPXkrMTJ8MCk+PjJdKSk9PSgwfGFyWyhwPXkrMTZ8MCk+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclt5Pj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbaT4+Ml0pLFgsQixBLHUsMHxhcltsPj4yXSwwfGFyW0U+PjJdLGgsYixzLGQsYykpYnJlYWs7KDB8KGk9MHxhcltaPj4yXSkpIT0oMHxhcltwPj4yXSk/KGFyW1o+PjJdPWkrNCxnZigwfGFyW2k+PjJdKSxtPXkpOihqYlsxMjcmYXJbNDArKDB8YXJbeT4+Ml0pPj4yXV0oeSksbT15KX1FPTB8dHJbMTEraD4+MF0sMCE9KDB8dHJbWD4+MF0pJiYwIT0oMHwoRTw8MjQ+PjI0PDA/MHxhcls0K2g+PjJdOjI1NSZFKSkmJigoVz0wfGFyW3M+PjJdKS1ifDApPDE2MCYmKFg9MHxhcltkPj4yXSxhcltzPj4yXT1XKzQsYXJbVz4+Ml09WCk7dj0rWm4oQSwwfGFyW3U+PjJdLGYpLFFbbj4+M109dixnbihoLGIsMHxhcltzPj4yXSxmKSxpPXk/KEE9KDB8KEE9MHxhclt5KzEyPj4yXSkpPT0oMHxhclt5KzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbZz4+Ml0pPj4yXV0oeSk6MHxnZigwfGFyW0E+PjJdKSwwfFVmKEEsLTEpPyhhcltlPj4yXT0wLDEpOjApOjE7ZG97aWYobSl7aWYoMHxVZihBPSgwfChBPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8Z2YoMHxhcltBPj4yXSksLTEpKXthcltyPj4yXT0wLEk9NDc7YnJlYWt9aWYoaSlicmVhaztJPTQ5O2JyZWFrfUk9NDd9d2hpbGUoMCk7NDc9PSgwfEkpJiZpJiYoST00OSk7NDk9PSgwfEkpJiYoYXJbZj4+Ml09MnxhcltmPj4yXSk7cmV0dXJuIEk9MHxhcltlPj4yXSxCdShrKSxCdShoKSx1cj13LDB8SX0oQSxhLG8saSxmLG4pLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGMsbDtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsYz11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsbz0xMitjfDAsYT04K2N8MCxhclsobD00K2N8MCk+PjJdPWFyW2U+PjJdLGFyW2M+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtCPXVyPSh3PXVyKSszMSYtMzIsdXI9dXIrMzUyfDAsYz1CKzIwOHwwLGw9QisyMDB8MCxFPUIrMTk2fDAsaD1CKzE4NHwwLGs9QisxNzJ8MCx1PUIrMTY4fDAsYj1CKzh8MCxzPUIrNHwwLFg9KGQ9QikrMzM3fDAsQj1CKzMzNnwwLFJuKGgsaXw9MCxjLGwsRSksYXJbaz4+Ml09MCxhcls0K2s+PjJdPTAsYXJbOCtrPj4yXT0wLEE9MDtmb3IoOzMhPSgwfEEpOylhcltrKyhBPDwyKT4+Ml09MCxBPUErMXwwO2E9OCtrfDAsQT0oMHx0clsobz0xMStrfDApPj4wXSk8MD8oMjE0NzQ4MzY0NyZhclthPj4yXSktMXwwOjEwO1Z1KGssQSwwKSxBPSgwfHRyW28+PjBdKTwwPzB8YXJbaz4+Ml06ayxhclt1Pj4yXT1BLGFyW3M+PjJdPWIsYXJbZD4+Ml09MCx0cltYPj4wXT0xLHRyW0I+PjBdPTY5LHQ9NCtrfDAsZz0wfGFyW2U+PjJdLG09ZztBOmZvcig7Oyl7Wj1tPzB8VWYoaT0oMHwoaT0wfGFyW20rMTI+PjJdKSk9PSgwfGFyW20rMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhclttPj4yXSk+PjJdXShtKTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oYXJbZT4+Ml09MCxnPXk9MCwxKTooeT1tLDApOihnPXk9MCwxKSxtPTB8YXJbcj4+Ml07ZG97aWYobSl7aWYoMHxVZihpPSgwfChpPTB8YXJbbSsxMj4+Ml0pKT09KDB8YXJbbSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW20+PjJdKT4+Ml1dKG0pOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLEk9MTk7YnJlYWt9aWYoWilicmVhazticmVhayBBfUk9MTl9d2hpbGUoMCk7aWYoMTk9PSgwfEkpKXtpZihJPTAsWil7bT0wO2JyZWFrfW09MH1pZihpPShpPTB8dHJbbz4+MF0pPDwyND4+MjQ8MD8wfGFyW3Q+PjJdOjI1NSZpLCgwfGFyW3U+PjJdKT09KEEraXwwKSYmKFZ1KGssaTw8MSwwKSxBPSgwfHRyW28+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDA6MTAsVnUoayxBLDApLEE9KDB8dHJbbz4+MF0pPDA/MHxhcltrPj4yXTprLGFyW3U+PjJdPUEraSksMHxObihpPSgwfChpPTB8YXJbKFo9eSsxMnwwKT4+Ml0pKT09KDB8YXJbKHA9eSsxNnwwKT4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW3k+PjJdKT4+Ml1dKHkpOjB8Z2YoMHxhcltpPj4yXSksWCxCLEEsdSwwfGFyW2w+PjJdLDB8YXJbRT4+Ml0saCxiLHMsZCxjKSlicmVhazsoMHwoaT0wfGFyW1o+PjJdKSkhPSgwfGFyW3A+PjJdKT8oYXJbWj4+Ml09aSs0LGdmKDB8YXJbaT4+Ml0pLG09eSk6KGpiWzEyNyZhcls0MCsoMHxhclt5Pj4yXSk+PjJdXSh5KSxtPXkpfUU9MHx0clsxMStoPj4wXSwwIT0oMHx0cltYPj4wXSkmJjAhPSgwfChFPDwyND4+MjQ8MD8wfGFyWzQraD4+Ml06MjU1JkUpKSYmKChXPTB8YXJbcz4+Ml0pLWJ8MCk8MTYwJiYoWD0wfGFyW2Q+PjJdLGFyW3M+PjJdPVcrNCxhcltXPj4yXT1YKTt2PSttbihBLDB8YXJbdT4+Ml0sZiksUVtuPj4zXT12LGduKGgsYiwwfGFyW3M+PjJdLGYpLGk9eT8oQT0oMHwoQT0wfGFyW3krMTI+PjJdKSk9PSgwfGFyW3krMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltnPj4yXSk+PjJdXSh5KTowfGdmKDB8YXJbQT4+Ml0pLDB8VWYoQSwtMSk/KGFyW2U+PjJdPTAsMSk6MCk6MTtkb3tpZihtKXtpZigwfFVmKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW0E+PjJdKSwtMSkpe2FyW3I+PjJdPTAsST00NzticmVha31pZihpKWJyZWFrO0k9NDk7YnJlYWt9ST00N313aGlsZSgwKTs0Nz09KDB8SSkmJmkmJihJPTQ5KTs0OT09KDB8SSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKTtyZXR1cm4gST0wfGFyW2U+PjJdLEJ1KGspLEJ1KGgpLHVyPXcsMHxJfShBLGEsbyxpLGYsbiksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTA7Zm9yKGc9dXI9KGQ9dXIpKzMxJi0zMix1cj11ciszMjB8MCxaPSh1PWcpKzIwOHwwLGI9ZysxOTJ8MCxzPWcrMTgwfDAscD1nKzE3NnwwLGM9ZysxNnwwLGw9Zys4fDAsZz1nKzR8MCxhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxBPWFyWzgrYj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW2IrKEE8PDIpPj4yXT0wKTtmb3IoVGYocyxpKSxBPTB8dW4ocyw1OTI2NCksUGJbNyZhcls0OCsoMHxhcltBPj4yXSk+PjJdXShBLDUzNjQ4LDUzNjc0LFopLGJuKHMpLGFyW3M+PjJdPTAsYXJbNCtzPj4yXT0wLEE9YXJbOCtzPj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbcysoQTw8Mik+PjJdPTApO289OCtzfDAsVnUocyxBPSgwfHRyWyhhPTExK3N8MCk+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QSxhcltsPj4yXT1jLHQ9NCtzfChhcltnPj4yXT0wKSxrPWg9MHxhcltlPj4yXTtBOmZvcig7Oyl7dz1rPzB8VWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbaT4+Ml0pLC0xKT8oaD1tPWFyW2U+PjJdPTAsMSk6KG09aywwKTooaD1tPTAsMSksaz0wfGFyW3I+PjJdO2Rve2lmKGspe2lmKDB8VWYoaT0oMHwoaT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbaT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx5PTIyO2JyZWFrfWlmKHcpYnJlYWs7YnJlYWsgQX15PTIyfXdoaWxlKDApO2lmKDIyPT0oMHx5KSl7aWYoeT0wLHcpe2s9MDticmVha31rPTB9aWYoaT0oaT0wfHRyW2E+PjBdKTw8MjQ+PjI0PDA/MHxhclt0Pj4yXToyNTUmaSwoMHxhcltwPj4yXSk9PShBK2l8MCkmJihWdShzLGk8PDEsMCksVnUocyxBPSgwfHRyW2E+PjBdKTwwPygyMTQ3NDgzNjQ3JmFyW28+PjJdKS0xfDA6MTAsMCksQT0oMHx0clthPj4wXSk8MD8wfGFyW3M+PjJdOnMsYXJbcD4+Ml09QStpKSwwfEZuKGk9KDB8KGk9MHxhclsodz1tKzEyfDApPj4yXSkpPT0oMHxhclsodj1tKzE2fDApPj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbbT4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW2k+PjJdKSwxNixBLHAsZywwLGIsYyxsLFopKWJyZWFrOygwfChpPTB8YXJbdz4+Ml0pKSE9KDB8YXJbdj4+Ml0pPyhhclt3Pj4yXT1pKzQsZ2YoMHxhcltpPj4yXSksaz1tKTooamJbMTI3JmFyWzQwKygwfGFyW20+PjJdKT4+Ml1dKG0pLGs9bSl9VnUocywoMHxhcltwPj4yXSktQXwwLDApLFo9KDB8dHJbYT4+MF0pPDA/MHxhcltzPj4yXTpzLHA9MHxkbigpLGFyW3U+PjJdPW4sMSE9KDB8a24oWixwLDUzNjgxLHUpKSYmKGFyW2Y+PjJdPTQpLGk9bT8wfFVmKEE9KDB8KEE9MHxhclttKzEyPj4yXSkpPT0oMHxhclttKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbaD4+Ml0pPj4yXV0obSk6MHxnZigwfGFyW0E+PjJdKSwtMSk/KGFyW2U+PjJdPTAsMSk6MDoxO2Rve2lmKGspe2lmKDB8VWYoQT0oMHwoQT0wfGFyW2srMTI+PjJdKSk9PSgwfGFyW2srMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltrPj4yXSk+PjJdXShrKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx5PTQ5O2JyZWFrfWlmKGkpYnJlYWs7eT01MTticmVha315PTQ5fXdoaWxlKDApO3JldHVybiA0OT09KDB8eSkmJmkmJih5PTUxKSw1MT09KDB8eSkmJihhcltmPj4yXT0yfGFyW2Y+PjJdKSx5PTB8YXJbZT4+Ml0sQnUocyksQnUoYiksdXI9ZCwwfHl9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYixzPTAsZD0wO3JldHVybiBzPXVyPShBPXVyKSszMSYtMzIsdXI9dXIrOTZ8MCxvPXMrOHwwLGw9KHU9cykrNzF8MCx0PXMrMjh8MCxjPXMrMjR8MCxhPXMrMTZ8MCxzPXMrMjB8MCxhclsoZD11KT4+Ml09Mzcsd3IodSsxfChhcltkKzQ+PjJdPTApLDUzODk5LDEsMHxhcltyKzQ+PjJdKSxkPTB8ZG4oKSxhclsoYj1vKT4+Ml09Zixhcls0K2I+PjJdPW4sbj0wfG5yKGwsZj1sKygwfGZyKGwsMjMsZCx1LG8pKXwwLHIpLFRmKG8sciksdnIobCxuLGYsdCxjLGEsbyksYm4obyksYXJbcz4+Ml09YXJbZT4+Ml0sZj0wfGFyW2M+PjJdLG49MHxhclthPj4yXSxhcltvPj4yXT1hcltzPj4yXSxuPTB8UEEobyx0LGYsbixyLGkpLHVyPUEsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscz0wLGQ9MDtyZXR1cm4gcz11cj0oQT11cikrMzEmLTMyLHVyPXVyKzk2fDAsbz1zKzh8MCxsPSh1PXMpKzcxfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwwLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHZyKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfFBBKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHM9MCxkPTA7cmV0dXJuIHM9dXI9KEE9dXIpKzMxJi0zMix1cj11cisyMjR8MCxvPXMrOHwwLGw9KHU9cykrMjAwfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwxLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHByKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfG1yKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHM9MCxkPTA7cmV0dXJuIHM9dXI9KEE9dXIpKzMxJi0zMix1cj11cisyMjR8MCxvPXMrOHwwLGw9KHU9cykrMjAwfDAsdD1zKzI4fDAsYz1zKzI0fDAsYT1zKzE2fDAscz1zKzIwfDAsYXJbKGQ9dSk+PjJdPTM3LHdyKHUrMXwoYXJbZCs0Pj4yXT0wKSw1Mzg5OSwwLDB8YXJbcis0Pj4yXSksZD0wfGRuKCksYXJbKGI9byk+PjJdPWYsYXJbNCtiPj4yXT1uLG49MHxucihsLGY9bCsoMHxmcihsLDIzLGQsdSxvKSl8MCxyKSxUZihvLHIpLHByKGwsbixmLHQsYyxhLG8pLGJuKG8pLGFyW3M+PjJdPWFyW2U+PjJdLGY9MHxhcltjPj4yXSxuPTB8YXJbYT4+Ml0sYXJbbz4+Ml09YXJbcz4+Ml0sbj0wfG1yKG8sdCxmLG4scixpKSx1cj1BLDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3ZhciB0LG8sYSxjLGw7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsYXJbKGw9NCtjfDApPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltsPj4yXSxhcltvPj4yXT1hcltjPj4yXSxuPTB8RXIoQSxhLG8saSxmLG4sNTQ0MjcsNTQ0MzUpLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiPTA7cmV0dXJuIGM9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLG89MTIrY3wwLGE9OCtjfDAsbD00K2N8MCxiPTB8amJbMTI3JmFyWzIwKygwfGFyWyhiPShBfD0wKSs4fDApPj4yXSk+PjJdXShiKSxhcltsPj4yXT1hcltlPj4yXSxhcltjPj4yXT1hcltyPj4yXSxyPShlPSh1PShyPTB8dHJbYisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltiPj4yXTpiKSsodT8wfGFyW2IrND4+Ml06MjU1JnIpfDAsYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfEVyKEEsYSxvLGksZixuLGUsciksdXI9dCwwfG59LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSx5cihBLG4rMjR8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSxCcihBLG4rMTZ8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGZ8PTAsbnw9MCxhPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxUZihvPTQrYXwwLGl8PTApLGk9MHx1bihvLDU5MjMyKSxibihvKSxhclthPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclthPj4yXSxZcihBLG4rMjB8MCxlLG8sZixpKSx1cj10LDB8YXJbZT4+Ml19LGZ1bmN0aW9uKEEsZSxyLGksZixuKXt2YXIgdCxvLGEsYyxsO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGFyWyhsPTQrY3wwKT4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sYXJbbz4+Ml09YXJbYz4+Ml0sbj0wfFNyKEEsYSxvLGksZixuLDE2NDA0LDE2NDM2KSx1cj10LDB8bn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wO3JldHVybiBjPXVyPSh0PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxvPTEyK2N8MCxhPTgrY3wwLGw9NCtjfDAsYj0wfGpiWzEyNyZhclsyMCsoMHxhclsoYj0oQXw9MCkrOHwwKT4+Ml0pPj4yXV0oYiksYXJbbD4+Ml09YXJbZT4+Ml0sYXJbYz4+Ml09YXJbcj4+Ml0scj0oZT0odT0ocj0wfHRyW2IrOCszPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2I+PjJdOmIpKygodT8wfGFyW2IrND4+Ml06MjU1JnIpPDwyKXwwLGFyW2E+PjJdPWFyW2w+PjJdLGFyW28+PjJdPWFyW2M+PjJdLG49MHxTcihBLGEsbyxpLGYsbixlLHIpLHVyPXQsMHxufSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sVHIoQSxuKzI0fDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sVXIoQSxuKzE2fDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhO3JldHVybiBBfD0wLGV8PTAscnw9MCxmfD0wLG58PTAsYT11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsVGYobz00K2F8MCxpfD0wKSxpPTB8dW4obyw1OTI2NCksYm4obyksYXJbYT4+Ml09YXJbcj4+Ml0sYXJbbz4+Ml09YXJbYT4+Ml0sQWkoQSxuKzIwfDAsZSxvLGYsaSksdXI9dCwwfGFyW2U+PjJdfSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsZnw9MCxufD0wO3ZhciB0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wO2ZvcihiPXVyPShaPXVyKSszMSYtMzIsdXI9dXIrMTc2fDAsYz01NitifDAsZD0xNjQrYnwwLGs9MTYxK2J8MCxoPTE2MCtifDAsdz00MCtifDAsdj0yOCtifDAsbT0xNitifDAsdD0xMitifDAsYT02MCtifDAsbD04K2J8MCx1PTQrYnwwLFRmKGc9NTIrYnwwLGl8PTApLHM9MHx1bihnLDU5MjMyKSx5PW4rNHwwLEU9MHwoKEE9KEU9MHx0clsocD1uKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZFKT8oRT0wfHRyWyhBPzB8YXJbbj4+Ml06bik+PjBdKTw8MjQ+PjI0PT0oMHxIYlszMSZhclsyOCsoMHxhcltzPj4yXSk+PjJdXShzLDQ1KSk8PDI0Pj4yNDowLGFyW3c+PjJdPTAsYXJbNCt3Pj4yXT0wLEE9YXJbOCt3Pj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdysoQTw8Mik+PjJdPTApO2Zvcihhclt2Pj4yXT0wLGFyWzQrdj4+Ml09MCxBPWFyWzgrdj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3YrKEE8PDIpPj4yXT0wKTtmb3IoYXJbbT4+Ml09MCxhcls0K20+PjJdPTAsQT1hcls4K20+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclttKyhBPDwyKT4+Ml09MCk7cmV0dXJuIGtpKHIsRSxnLGQsayxoLHcsdixtLHQpLEI9KG89KEI9MHx0cltwPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZCLDEwMDwoQT0ocj0oMHwoeT0wfGFyW3Q+PjJdKSk8KDB8Qik/KHA9MHx0clsxMSttPj4wXSxyPTB8dHJbMTErdj4+MF0sQT0xLHA9KHA8PDI0Pj4yNDwwPzB8YXJbNCttPj4yXToyNTUmcCkrKEIteTw8MSl8MCxyPDwyND4+MjQ8MD8wfGFyWzQrdj4+Ml06MjU1JnIpOihyPTB8dHJbMTErbT4+MF0sQT0yLHA9KHA9MHx0clsxMSt2Pj4wXSk8PDI0Pj4yNDwwPzB8YXJbNCt2Pj4yXToyNTUmcCxyPDwyND4+MjQ8MD8wfGFyWzQrbT4+Ml06MjU1JnIpKSt5K3ArQXwwKT4+PjA/KEE9MHx5YyhBKSk/Vz1YPUE6Z3UoKTooWD1hLFc9MCksbj1vPzB8YXJbbj4+Ml06bixoaShYLGwsdSwwfGFyW2krND4+Ml0sbixuK0J8MCxzLEUsZCwwfHRyW2s+PjBdLDB8dHJbaD4+MF0sdyx2LG0seSksYXJbYj4+Ml09YXJbZT4+Ml0sbj0wfGFyW2w+PjJdLEE9MHxhclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxBPTB8UEEoYyxYLG4sQSxpLGYpLDB8VyYmQmMoVyksQnUobSksQnUodiksQnUodyksYm4oZyksdXI9WiwwfEF9LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxmfD0wLG58PTA7dmFyIHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTA7Zm9yKGI9dXI9KFo9dXIpKzMxJi0zMix1cj11cis0ODB8MCxjPTQ2OCtifDAsZD00NzIrYnwwLGs9NDYwK2J8MCxoPTQ1NitifDAsdz00NDQrYnwwLHY9NDMyK2J8MCxtPTQyMCtifDAsdD00MTYrYnwwLGE9MTYrYnwwLGw9OCtifDAsdT00K2J8MCxUZihnPTQ2NCtifDAsaXw9MCkscz0wfHVuKGcsNTkyNjQpLHk9bis0fDAsRT0wfCgoQT0oRT0wfHRyWyhwPW4rOCszfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZFKT8oMHwoRT0wfGFyWyhBPzB8YXJbbj4+Ml06bik+PjJdKSk9PSgwfEhiWzMxJmFyWzQ0KygwfGFyW3M+PjJdKT4+Ml1dKHMsNDUpKTowLGFyW3c+PjJdPTAsYXJbNCt3Pj4yXT0wLEE9YXJbOCt3Pj4yXT0wOzMhPSgwfEEpOylBPUErMXwoYXJbdysoQTw8Mik+PjJdPTApO2Zvcihhclt2Pj4yXT0wLGFyWzQrdj4+Ml09MCxBPWFyWzgrdj4+Ml09MDszIT0oMHxBKTspQT1BKzF8KGFyW3YrKEE8PDIpPj4yXT0wKTtmb3IoYXJbbT4+Ml09MCxhcls0K20+PjJdPTAsQT1hcls4K20+PjJdPTA7MyE9KDB8QSk7KUE9QSsxfChhclttKyhBPDwyKT4+Ml09MCk7cmV0dXJuIF9sKHIsRSxnLGQsayxoLHcsdixtLHQpLEI9KG89KEI9MHx0cltwPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3k+PjJdOjI1NSZCLDEwMDwoQT0ocj0oMHwoeT0wfGFyW3Q+PjJdKSk8KDB8Qik/KHA9MHx0cls4K20rMz4+MF0scj0wfHRyWzgrdiszPj4wXSxBPTEscD0ocDw8MjQ+PjI0PDA/MHxhcls0K20+PjJdOjI1NSZwKSsoQi15PDwxKXwwLHI8PDI0Pj4yNDwwPzB8YXJbNCt2Pj4yXToyNTUmcik6KHI9MHx0cls4K20rMz4+MF0sQT0yLHA9KHA9MHx0cls4K3YrMz4+MF0pPDwyND4+MjQ8MD8wfGFyWzQrdj4+Ml06MjU1JnAscjw8MjQ+PjI0PDA/MHxhcls0K20+PjJdOjI1NSZyKSkreStwK0F8MCk+Pj4wPyhBPTB8eWMoQTw8MikpP1c9WD1BOmd1KCk6KFg9YSxXPTApLG49bz8wfGFyW24+PjJdOm4sWWwoWCxsLHUsMHxhcltpKzQ+PjJdLG4sbisoQjw8Mil8MCxzLEUsZCwwfGFyW2s+PjJdLDB8YXJbaD4+Ml0sdyx2LG0seSksYXJbYj4+Ml09YXJbZT4+Ml0sbj0wfGFyW2w+PjJdLEE9MHxhclt1Pj4yXSxhcltjPj4yXT1hcltiPj4yXSxBPTB8bXIoYyxYLG4sQSxpLGYpLDB8VyYmQmMoVyksUXUobSksUXUodiksQnUodyksYm4oZyksdXI9WiwwfEF9LFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiLFZiXSxBcz1bRmIsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7dmFyIG87Zm9yKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsaT11cj0obz11cikrMzEmLTMyLHVyPXVyKzExMnwwLHI9aSs0fDAsYXJbaT4+Ml09cisxMDAsZmkoQSs4fDAscixpLGYsbix0KSx0PTB8YXJbaT4+Ml0sbj1yLHI9MHxhcltlPj4yXTsoMHxuKSE9KDB8dCk7KWk9MHx0cltuPj4wXSxyPSFyfHwoZT0wfE1mKGk9KDB8KGY9MHxhclsoQT1yKzI0fDApPj4yXSkpPT0oMHxhcltyKzI4Pj4yXSk/KGU9MHxhcls1MisoMHxhcltyPj4yXSk+PjJdLGk9MHxoZihpKSwwfEhiWzMxJmVdKHIsaSkpOihhcltBPj4yXT1mKzEsMHxoZih0cltmPj4wXT1pKSksLTEpKT8wOnIsbj1uKzF8MDtyZXR1cm4gdXI9bywwfHJ9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3ZhciBvO2ZvcihBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLGk9dXI9KG89dXIpKzMxJi0zMix1cj11cis0MTZ8MCxyPWkrOHwwLGFyW2k+PjJdPXIrNDAwLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYyxsPTA7bD11cj0odD11cikrMzEmLTMyLHVyPXVyKzEyOHwwLGE9bCsxNnwwLGM9bCsxMnwwLGw9KG89bCkrOHwwLGFyW2M+PjJdPTEwMCthLGZpKEEsYSxjLGksZixuKSxhclsoaT1vKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbbD4+Ml09YSxpPTB8ZnVuY3Rpb24oQSxlKXtyZXR1cm4oZXw9MCktKEF8PTApPj4yfDB9KGUsMHxhcltyPj4yXSksQT0wfHJmKDB8YXJbQT4+Ml0pLGk9MHxYaShlLGwsaSxvKSwwfEEmJnJmKEEpO3tpZigtMSE9KDB8aSkpcmV0dXJuIGFyW3I+PjJdPWUrKGk8PDIpLHVyPXQ7dGkoKX19KEErOHwwLHIsaSxmLG4sdCksdD0wfGFyW2k+PjJdLG49cixyPTB8YXJbZT4+Ml07KDB8bikhPSgwfHQpOylpPTB8YXJbbj4+Ml0scj0hcnx8KGU9MHxVZihpPSgwfChmPTB8YXJbKEE9cisyNHwwKT4+Ml0pKT09KDB8YXJbcisyOD4+Ml0pPyhlPTB8YXJbNTIrKDB8YXJbcj4+Ml0pPj4yXSxpPTB8Z2YoaSksMHxIYlszMSZlXShyLGkpKTooYXJbQT4+Ml09Zis0LDB8Z2YoYXJbZj4+Ml09aSkpLC0xKSk/MDpyLG49bis0fDA7cmV0dXJuIHVyPW8sMHxyfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wO3ZhciBvLGEsYyxsLHUsYixzLGQsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wO2lmKG09dXI9KHM9dXIpKzMxJi0zMix1cj11cisyNDB8MCxvPW0rMjR8MCx2PShjPW0pKzE0MHwwLGI9bSsxNnwwLGE9bSsxMnwwLGw9bSs4fDAsaz1tKzEzNnwwLGQ9bSs0fDAsbT1tKzM2fDAsYXJbYj4+Ml09dixhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLEE9MHx1bihsLDU5MjMyKSx0cltrPj4wXT0wLGFyW2Q+PjJdPWFyW3I+PjJdLHc9MHxhcltmKzQ+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLDB8YWkoZSxvLGksbCx3LG4sayxBLGIsYSx2KzEwMHwwKSl7Zm9yKFBiWzcmYXJbMzIrKDB8YXJbQT4+Ml0pPj4yXV0oQSw1NDk1Miw1NDk2MixvKSw5ODwoMHwoQT0odz0wfGFyW2E+PjJdKS0oaT0wfGFyW2I+PjJdKXwwKSk/KEE9MHx5YyhBKzJ8MCkpP2c9aD1BOmd1KCk6KGg9bSxnPTApLEE9MHx0cltrPj4wXT8odHJbaD4+MF09NDUsaCsxfDApOmgsaD0xMCtvfDAsdj1vLGs9aSxmPUEsQT13OyEoQT4+PjA8PWs+Pj4wKTspe2ZvcihpPTB8dHJbaz4+MF0sQT1vOzspe2lmKCgwfEEpPT0oMHxoKSl7QT1oO2JyZWFrfWlmKCgwfHRyW0E+PjBdKT09aTw8MjQ+PjI0KWJyZWFrO0E9QSsxfDB9dHJbZj4+MF09MHx0cltBLXYrNTQ5NTI+PjBdLGs9aysxfDAsZj1mKzF8MCxBPTB8YXJbYT4+Ml19dHJbZj4+MF09MCxhcltjPj4yXT10LDEhPSgwfGppKG0sNTQ5NjMsYykpJiZ0aSgpLDB8ZyYmQmMoZyl9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8TWYoQT0oMHwoaT0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGhmKDB8dHJbaT4+MF0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO0E9MHxhcltyPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGk9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2k+PjBdKSwtMSkpe2FyW3I+PjJdPTAsWj0zMjticmVha31pZihmKWJyZWFrO1o9MzQ7YnJlYWt9Wj0zMn13aGlsZSgwKTtyZXR1cm4gMzI9PSgwfFopJiZmJiYoWj0zNCksMzQ9PSgwfFopJiYoYXJbbj4+Ml09MnxhcltuPj4yXSksaT0wfGFyW2U+PjJdLGJuKGwpLEE9MHxhcltiPj4yXSwoYXJbYj4+Ml09MCl8QSYmaXNbNTExJmFyW3U+PjJdXShBKSx1cj1zLDB8aX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkPTAsaz0wLGg9MCx3PTA7aWYoaD11cj0ocz11cikrMzEmLTMyLHVyPXVyKzE0NHwwLGQ9aCsyNHwwLEE9aCszMnwwLGI9aCsxNnwwLGE9aCs4fDAsaz0obD1oKSsyOHwwLGg9aCs0fDAsYXJbYj4+Ml09QSxhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLG89MHx1bihsLDU5MjMyKSxjPSh0cltrPj4wXT0wKXxhcltyPj4yXSxhcltoPj4yXT1jLGY9MHxhcltmKzQ+PjJdLGFyW2Q+PjJdPWFyW2g+PjJdLGg9YywwfGFpKGUsZCxpLGwsZixuLGssbyxiLGEsQSsxMDB8MCkpe2ZvcigoMHx0clsoQT10KzExfDApPj4wXSk8MD8oaT0wfGFyW3Q+PjJdLHRyW2Q+PjBdPTAsUWYoaSxkKSxhclt0KzQ+PjJdPTApOih0cltkPj4wXT0wLFFmKHQsZCksdHJbQT4+MF09MCksMHx0cltrPj4wXSYmX3UodCwwfEhiWzMxJmFyWzI4KygwfGFyW28+PjJdKT4+Ml1dKG8sNDUpKSxrPTB8SGJbMzEmYXJbMjgrKDB8YXJbbz4+Ml0pPj4yXV0obyw0OCksZD0oZj0wfGFyW2E+PjJdKSstMXwwLEE9MHxhcltiPj4yXTshKGQ+Pj4wPD1BPj4+MCkmJigwfHRyW0E+PjBdKT09azw8MjQ+PjI0OylBPUErMXwwOyFmdW5jdGlvbihBLGUscil7cnw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtjPXVyPShuPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxpPWV8PTAscz1jKzEyfDAsbz0wfHRyWyhiPTExKyhBfD0wKXwwKT4+MF0sbD0odD1vPDwyND4+MjQ8MCk/KHU9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW0ErOD4+Ml0pLTF8MCk6KHU9MjU1Jm8sMTApO2Y9ci1pfDA7ZG97aWYoMHxmKXtpZih0PyhvPTB8YXJbQT4+Ml0sYT1vLHQ9MHxhcltBKzQ+PjJdKToodD0yNTUmbyxvPWE9QSksMHxjaShlLG8sYSt0fDApKXtmb3IoYXJbYz4+Ml09MCxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLDQyOTQ5NjcyNzk8Zj4+PjAmJnB1KCksZj4+PjA8MTE/KHRyW2MrMTE+PjBdPWYsbz1jKToobz0wfGh1KGI9MTYrZiYtMTYpLGFyW2M+PjJdPW8sYXJbYys4Pj4yXT0tMjE0NzQ4MzY0OHxiLGFyW2MrND4+Ml09ZiksdD1vOygwfGUpIT0oMHxyKTspUWYodCxlKSxlPWUrMXwwLHQ9dCsxfDA7dHJbcz4+MF09MCxRZihvK2Z8MCxzKSxzPTB8dHJbYysxMT4+MF0sTnUoQSwocj1zPDwyND4+MjQ8MCk/MHxhcltjPj4yXTpjLHI/MHxhcltjKzQ+PjJdOjI1NSZzKSxCdShjKTticmVha31mb3IoYz11K2Z8MCwobC11fDApPj4+MDxmPj4+MCYmUnUoQSxsLGMtbHwwLHUsdSwwLDApLGE9KDB8dHJbYj4+MF0pPDA/MHxhcltBPj4yXTpBLG89cisodS1pKXwwLHQ9YSt1fDA7KDB8ZSkhPSgwfHIpOylRZih0LGUpLHQ9dCsxfDAsZT1lKzF8MDtpZih0cltzPj4wXT0wLFFmKGErb3wwLHMpLCgwfHRyW2I+PjBdKTwwKXthcltBKzQ+PjJdPWM7YnJlYWt9dHJbYj4+MF09YzticmVha319d2hpbGUoMCk7dXI9bn0odCxBLGYpfUE9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfE1mKEE9KDB8KGY9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxoZigwfHRyW2Y+PjBdKSwtMSkpe2FyW2U+PjJdPTAsZj0xO2JyZWFrfWY9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfWY9MX13aGlsZSgwKTtkb3tpZihjKXtpZigwfE1mKEE9KDB8KEE9MHxhcltoKzEyPj4yXSkpPT0oMHxhcltoKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbYz4+Ml0pPj4yXV0oaCk6MHxoZigwfHRyW0E+PjBdKSwtMSkpe2FyW3I+PjJdPTAsdz0yNTticmVha31pZihmKWJyZWFrO3c9Mjc7YnJlYWt9dz0yNX13aGlsZSgwKTtyZXR1cm4gMjU9PSgwfHcpJiZmJiYodz0yNyksMjc9PSgwfHcpJiYoYXJbbj4+Ml09MnxhcltuPj4yXSksZj0wfGFyW2U+PjJdLGJuKGwpLEE9MHxhcltiPj4yXSwoYXJbYj4+Ml09MCl8QSYmaXNbNTExJmFyW3U+PjJdXShBKSx1cj1zLDB8Zn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MDt2YXIgbyxhLGMsbCx1LGIscyxkLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MDtpZihtPXVyPShzPXVyKSszMSYtMzIsdXI9dXIrNTc2fDAsbz1tKzQyNHwwLHY9KGM9bSkrMjR8MCxiPW0rMTZ8MCxhPW0rMTJ8MCxsPW0rOHwwLGs9bSs1NjR8MCxkPW0rNHwwLG09bSs0NjR8MCxhcltiPj4yXT12LGFyWyh1PTQrYnwwKT4+Ml09NDQ0LFRmKGwsZiksQT0wfHVuKGwsNTkyNjQpLHRyW2s+PjBdPTAsYXJbZD4+Ml09YXJbcj4+Ml0sdz0wfGFyW2YrND4+Ml0sYXJbbz4+Ml09YXJbZD4+Ml0sMHxiaShlLG8saSxsLHcsbixrLEEsYixhLHYrNDAwfDApKXtmb3IoUGJbNyZhcls0OCsoMHxhcltBPj4yXSk+PjJdXShBLDU1MDYyLDU1MDcyLG8pLDM5MjwoMHwoQT0odz0wfGFyW2E+PjJdKS0oaT0wfGFyW2I+PjJdKXwwKSk/KEE9MHx5YygyKyhBPj4+Mil8MCkpP2c9aD1BOmd1KCk6KGg9bSxnPTApLEE9MHx0cltrPj4wXT8odHJbaD4+MF09NDUsaCsxfDApOmgsaD00MCtvfDAsdj1vLGs9aSxmPUEsQT13OyEoQT4+PjA8PWs+Pj4wKTspe2ZvcihpPTB8YXJbaz4+Ml0sQT1vOzspe2lmKCgwfEEpPT0oMHxoKSl7QT1oO2JyZWFrfWlmKCgwfGFyW0E+PjJdKT09KDB8aSkpYnJlYWs7QT1BKzR8MH10cltmPj4wXT0wfHRyWzU1MDYyKyhBLXY+PjIpPj4wXSxrPWsrNHwwLGY9ZisxfDAsQT0wfGFyW2E+PjJdfXRyW2Y+PjBdPTAsYXJbYz4+Ml09dCwxIT0oMHxqaShtLDU0OTYzLGMpKSYmdGkoKSwwfGcmJkJjKGcpfUE9MHxhcltlPj4yXTtkb3tpZihBKXtpZigwfFVmKEE9KDB8KGk9MHxhcltBKzEyPj4yXSkpPT0oMHxhcltBKzE2Pj4yXSk/MHxqYlsxMjcmYXJbMzYrKDB8YXJbQT4+Ml0pPj4yXV0oQSk6MHxnZigwfGFyW2k+PjJdKSwtMSkpe2FyW2U+PjJdPTAsZj0xO2JyZWFrfWY9MD09KDB8YXJbZT4+Ml0pO2JyZWFrfWY9MX13aGlsZSgwKTtBPTB8YXJbcj4+Ml07ZG97aWYoQSl7aWYoMHxVZihBPSgwfChpPTB8YXJbQSsxMj4+Ml0pKT09KDB8YXJbQSsxNj4+Ml0pPzB8amJbMTI3JmFyWzM2KygwfGFyW0E+PjJdKT4+Ml1dKEEpOjB8Z2YoMHxhcltpPj4yXSksLTEpKXthcltyPj4yXT0wLFo9MzI7YnJlYWt9aWYoZilicmVhaztaPTM0O2JyZWFrfVo9MzJ9d2hpbGUoMCk7cmV0dXJuIDMyPT0oMHxaKSYmZiYmKFo9MzQpLDM0PT0oMHxaKSYmKGFyW24+PjJdPTJ8YXJbbj4+Ml0pLGk9MHxhcltlPj4yXSxibihsKSxBPTB8YXJbYj4+Ml0sKGFyW2I+PjJdPTApfEEmJmlzWzUxMSZhclt1Pj4yXV0oQSksdXI9cywwfGl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTA7dmFyIG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wO2lmKGg9dXI9KHM9dXIpKzMxJi0zMix1cj11cis0MzJ8MCxkPWgrNDI0fDAsQT1oKzI0fDAsYj1oKzE2fDAsYT1oKzh8MCxrPShsPWgpKzQyOHwwLGg9aCs0fDAsYXJbYj4+Ml09QSxhclsodT00K2J8MCk+PjJdPTQ0NCxUZihsLGYpLG89MHx1bihsLDU5MjY0KSxjPSh0cltrPj4wXT0wKXxhcltyPj4yXSxhcltoPj4yXT1jLGY9MHxhcltmKzQ+PjJdLGFyW2Q+PjJdPWFyW2g+PjJdLGg9YywwfGJpKGUsZCxpLGwsZixuLGssbyxiLGEsQSs0MDB8MCkpe2ZvcigoMHx0clsoQT10KzgrM3wwKT4+MF0pPDA/KGk9MHxhclt0Pj4yXSxhcltkPj4yXT0wLGxuKGksZCksYXJbdCs0Pj4yXT0wKTooYXJbZD4+Ml09MCxsbih0LGQpLHRyW0E+PjBdPTApLDB8dHJbaz4+MF0mJk91KHQsMHxIYlszMSZhcls0NCsoMHxhcltvPj4yXSk+PjJdXShvLDQ1KSksaz0wfEhiWzMxJmFyWzQ0KygwfGFyW28+PjJdKT4+Ml1dKG8sNDgpLGQ9KGY9MHxhclthPj4yXSkrLTR8MCxBPTB8YXJbYj4+Ml07IShkPj4+MDw9QT4+PjApJiYoMHxhcltBPj4yXSk9PSgwfGspOylBPUErNHwwOyFmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDtuPXVyPShvPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxrPTEyK258MCxpPTB8dHJbKHQ9MysoYT04KyhBfD0wKXwwKXwwKT4+MF0sdT0oYz1pPDwyND4+MjQ8MCk/KGQ9MHxhcltBKzQ+PjJdLCgyMTQ3NDgzNjQ3JmFyW2E+PjJdKS0xfDApOihkPTI1NSZpLDEpO2Y9ci1lPj4yO2Rve2lmKDB8Zil7aWYoYz8oYz0wfGFyW0E+PjJdLGw9YyxhPTB8YXJbQSs0Pj4yXSk6KGE9MjU1JmksYz1sPUEpLDB8c2koZSxjLGwrKGE8PDIpfDApKXthcltuPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsMTA3Mzc0MTgwNzxmPj4+MCYmcHUoKTtkb3tpZigyPD1mPj4+MCl7aWYoISgxMDczNzQxODIzPChhPTQrZiYtNCk+Pj4wKSl7cz0wfGh1KGE8PDIpLGFyW24+PjJdPXMsYXJbOCtuPj4yXT0tMjE0NzQ4MzY0OHxhLGFyWzQrbj4+Ml09ZixiPWU7YnJlYWt9bEEoKX1lbHNlIHRyWzgrbiszPj4wXT1mLGI9ZSxzPW59d2hpbGUoMCk7Zm9yKDsoMHxiKSE9KDB8cik7KWxuKHMsYiksYj1iKzR8MCxzPXMrNHwwO2FyW2s+PjJdPTAsbG4ocyxrKSxrPTB8dHJbOCtuKzM+PjBdLFN1KEEsKHI9azw8MjQ+PjI0PDApPzB8YXJbbj4+Ml06bixyPzB8YXJbNCtuPj4yXToyNTUmayksUXUobik7YnJlYWt9Zm9yKGM9ZCtmfDAsKHUtZHwwKT4+PjA8Zj4+PjAmJlV1KEEsdSxjLXV8MCxkLGQsMCwwKSxhPShhPSgwfHRyW3Q+PjBdKTwwPzB8YXJbQT4+Ml06QSkrKGQ8PDIpfDA7KDB8ZSkhPSgwfHIpOylsbihhLGUpLGE9YSs0fDAsZT1lKzR8MDtpZihhcltrPj4yXT0wLGxuKGEsayksKDB8dHJbdD4+MF0pPDApe2FyW0ErND4+Ml09YzticmVha310clt0Pj4wXT1jO2JyZWFrfX13aGlsZSgwKTt1cj1vfSh0LEEsZil9QT0wfGFyW2U+PjJdO2Rve2lmKEEpe2lmKDB8VWYoQT0oMHwoZj0wfGFyW0ErMTI+PjJdKSk9PSgwfGFyW0ErMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltBPj4yXSk+PjJdXShBKTowfGdmKDB8YXJbZj4+Ml0pLC0xKSl7YXJbZT4+Ml09MCxmPTE7YnJlYWt9Zj0wPT0oMHxhcltlPj4yXSk7YnJlYWt9Zj0xfXdoaWxlKDApO2Rve2lmKGMpe2lmKDB8VWYoQT0oMHwoQT0wfGFyW2grMTI+PjJdKSk9PSgwfGFyW2grMTY+PjJdKT8wfGpiWzEyNyZhclszNisoMHxhcltjPj4yXSk+PjJdXShoKTowfGdmKDB8YXJbQT4+Ml0pLC0xKSl7YXJbcj4+Ml09MCx3PTI1O2JyZWFrfWlmKGYpYnJlYWs7dz0yNzticmVha313PTI1fXdoaWxlKDApO3JldHVybiAyNT09KDB8dykmJmYmJih3PTI3KSwyNz09KDB8dykmJihhcltuPj4yXT0yfGFyW24+PjJdKSxmPTB8YXJbZT4+Ml0sYm4obCksQT0wfGFyW2I+PjJdLChhcltiPj4yXT0wKXxBJiZpc1s1MTEmYXJbdT4+Ml1dKEEpLHVyPXMsMHxmfSxGYl0sZXM9W1JiLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGo9MCxIPTA7c3dpdGNoKFE9dXI9KHo9dXIpKzMxJi0zMix1cj11cisxNDR8MCxhPTEyOCtRfDAsbz0xMTIrUXwwLE89MTI0K1F8MCxqPTEyMCtRfDAsYz0xMTYrUXwwLGw9MTA4K1F8MCx1PTEwNCtRfDAsYj0xMDArUXwwLHM9OTYrUXwwLGQ9OTIrUXwwLGs9ODgrUXwwLGg9ODQrUXwwLHc9ODArUXwwLHY9NzYrUXwwLG09NzIrUXwwLGc9NjgrUXwwLFo9NjQrUXwwLHA9NjArUXwwLHk9NTYrUXwwLEI9NTIrUXwwLEU9NDgrUXwwLFg9NDQrUXwwLFc9NDArUXwwLEk9MzYrUXwwLEM9MzIrUXwwLEc9MjgrUXwwLFY9MjQrUXwwLEY9MjArUXwwLFI9MTYrUXwwLE49MTIrUXwwLF89OCtRfDAsWT00K1F8MCxhclsoZnw9MCk+PjJdPTAsVGYoYSxpKSxEPTB8dW4oYSw1OTIzMiksYm4oYSksSj1uKzh8MCxNPW4rMjB8MCxUPW4rMTZ8MCxVPW4rMjR8MCxTPUErOHwwLHQ8PDI0Pj4yNHwwKXtjYXNlIDY1OmNhc2UgOTc6YXJbTz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbTz4+Ml0seXIoQSxVLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSA2NjpjYXNlIDk4OmFyW2o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2o+PjJdLEJyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgOTk6aj0wfGpiWzEyNyZhclsxMisoMHxhcltTPj4yXSk+PjJdXShTKSxhcltjPj4yXT1hcltlPj4yXSxhcltsPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbaisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltqPj4yXTpqKSsocj8wfGFyW2orND4+Ml06MjU1JkgpfDAsYXJbbz4+Ml09YXJbYz4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sSD0wfEVyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTAwOmFyW3U+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW3U+PjJdLFhyKEEsbisxMnwwLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA2ODphcltiPj4yXT1hcltlPj4yXSxhcltzPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltiPj4yXSxhclthPj4yXT1hcltzPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQzODcsNTQzOTUpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDcwOmFyW2Q+PjJdPWFyW2U+PjJdLGFyW2s+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLGFyW2E+PjJdPWFyW2s+PjJdLEg9MHxFcihBLG8sYSxpLGYsbiw1NDM5NSw1NDQwMyksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgNzI6YXJbaD4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbaD4+Ml0sV3IoQSxKLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA3Mzphclt3Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt3Pj4yXSxJcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEwNjphclt2Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt2Pj4yXSxDcihBLG4rMjh8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTA5OmFyW20+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW20+PjJdLEdyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgNzc6YXJbZz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbZz4+Ml0sVnIoQSxuKzR8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTE2OmNhc2UgMTEwOmFyW1o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW1o+PjJdLEZyKEEsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExMjphcltwPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltwPj4yXSxScihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExNDphclt5Pj4yXT1hcltlPj4yXSxhcltCPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclt5Pj4yXSxhclthPj4yXT1hcltCPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQ0MDMsNTQ0MTQpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDgyOmFyW0U+PjJdPWFyW2U+PjJdLGFyW1g+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW0U+PjJdLGFyW2E+PjJdPWFyW1g+PjJdLEg9MHxFcihBLG8sYSxpLGYsbiw1NDQxNCw1NDQxOSksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgODM6YXJbVz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbVz4+Ml0sTnIoQSxuLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA4NDphcltJPj4yXT1hcltlPj4yXSxhcltDPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltJPj4yXSxhclthPj4yXT1hcltDPj4yXSxIPTB8RXIoQSxvLGEsaSxmLG4sNTQ0MTksNTQ0MjcpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDExOTphcltHPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltHPj4yXSxfcihBLFUsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEyMDp0PTB8YXJbMjArKDB8YXJbQT4+Ml0pPj4yXSxhcltWPj4yXT1hcltlPj4yXSxhcltGPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltWPj4yXSxhclthPj4yXT1hcltGPj4yXSxvPTB8JGJbNjMmdF0oQSxvLGEsaSxmLG4pO2JyZWFrO2Nhc2UgODg6aj0wfGpiWzEyNyZhclsyNCsoMHxhcltTPj4yXSk+PjJdXShTKSxhcltSPj4yXT1hcltlPj4yXSxhcltOPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbaisxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltqPj4yXTpqKSsocj8wfGFyW2orND4+Ml06MjU1JkgpfDAsYXJbbz4+Ml09YXJbUj4+Ml0sYXJbYT4+Ml09YXJbTj4+Ml0sSD0wfEVyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTIxOmFyW18+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW18+PjJdLFlyKEEsTSxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgODk6YXJbWT4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbWT4+Ml0sUXIoQSxNLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAzNzphcltRPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltRPj4yXSxEcihBLGUsYSxmLEQpLEg9MjY7YnJlYWs7ZGVmYXVsdDphcltmPj4yXT00fGFyW2Y+PjJdLEg9MjZ9cmV0dXJuIDI2PT0oMHxIKSYmKG89MHxhcltlPj4yXSksdXI9eiwwfG99LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHLFYsRixSLE4sXyxZLFEsRCxKLE0sVCxVLFMsTyx6LGo9MCxIPTA7c3dpdGNoKFE9dXI9KHo9dXIpKzMxJi0zMix1cj11cisxNDR8MCxhPTEyOCtRfDAsbz0xMTIrUXwwLE89MTI0K1F8MCxqPTEyMCtRfDAsYz0xMTYrUXwwLGw9MTA4K1F8MCx1PTEwNCtRfDAsYj0xMDArUXwwLHM9OTYrUXwwLGQ9OTIrUXwwLGs9ODgrUXwwLGg9ODQrUXwwLHc9ODArUXwwLHY9NzYrUXwwLG09NzIrUXwwLGc9NjgrUXwwLFo9NjQrUXwwLHA9NjArUXwwLHk9NTYrUXwwLEI9NTIrUXwwLEU9NDgrUXwwLFg9NDQrUXwwLFc9NDArUXwwLEk9MzYrUXwwLEM9MzIrUXwwLEc9MjgrUXwwLFY9MjQrUXwwLEY9MjArUXwwLFI9MTYrUXwwLE49MTIrUXwwLF89OCtRfDAsWT00K1F8MCxhclsoZnw9MCk+PjJdPTAsVGYoYSxpKSxEPTB8dW4oYSw1OTI2NCksYm4oYSksSj1uKzh8MCxNPW4rMjB8MCxUPW4rMTZ8MCxVPW4rMjR8MCxTPUErOHwwLHQ8PDI0Pj4yNHwwKXtjYXNlIDY1OmNhc2UgOTc6YXJbTz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbTz4+Ml0sVHIoQSxVLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSA2NjpjYXNlIDk4OmFyW2o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW2o+PjJdLFVyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgOTk6aj0wfGpiWzEyNyZhclsxMisoMHxhcltTPj4yXSk+PjJdXShTKSxhcltjPj4yXT1hcltlPj4yXSxhcltsPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbais4KzM+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaj4+Ml06aikrKChyPzB8YXJbais0Pj4yXToyNTUmSCk8PDIpfDAsYXJbbz4+Ml09YXJbYz4+Ml0sYXJbYT4+Ml09YXJbbD4+Ml0sSD0wfFNyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTAwOmFyW3U+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW3U+PjJdLE9yKEEsbisxMnwwLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA2ODphcltiPj4yXT1hcltlPj4yXSxhcltzPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltiPj4yXSxhclthPj4yXT1hcltzPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYyNDQsMTYyNzYpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDcwOmFyW2Q+PjJdPWFyW2U+PjJdLGFyW2s+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW2Q+PjJdLGFyW2E+PjJdPWFyW2s+PjJdLEg9MHxTcihBLG8sYSxpLGYsbiwxNjI3NiwxNjMwOCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgNzI6YXJbaD4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbaD4+Ml0senIoQSxKLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA3Mzphclt3Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt3Pj4yXSxqcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEwNjphclt2Pj4yXT1hcltyPj4yXSxhclthPj4yXT1hclt2Pj4yXSxIcihBLG4rMjh8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTA5OmFyW20+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW20+PjJdLHhyKEEsVCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgNzc6YXJbZz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbZz4+Ml0sUHIoQSxuKzR8MCxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgMTE2OmNhc2UgMTEwOmFyW1o+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW1o+PjJdLExyKEEsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExMjphcltwPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltwPj4yXSxLcihBLEosZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDExNDphclt5Pj4yXT1hcltlPj4yXSxhcltCPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hclt5Pj4yXSxhclthPj4yXT1hcltCPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYzMDgsMTYzNTIpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDgyOmFyW0U+PjJdPWFyW2U+PjJdLGFyW1g+PjJdPWFyW3I+PjJdLGFyW28+PjJdPWFyW0U+PjJdLGFyW2E+PjJdPWFyW1g+PjJdLEg9MHxTcihBLG8sYSxpLGYsbiwxNjM1MiwxNjM3MiksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgODM6YXJbVz4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbVz4+Ml0scXIoQSxuLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSA4NDphcltJPj4yXT1hcltlPj4yXSxhcltDPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltJPj4yXSxhclthPj4yXT1hcltDPj4yXSxIPTB8U3IoQSxvLGEsaSxmLG4sMTYzNzIsMTY0MDQpLGFyW2U+PjJdPUgsSD0yNjticmVhaztjYXNlIDExOTphcltHPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltHPj4yXSwkcihBLFUsZSxhLGYsRCksSD0yNjticmVhaztjYXNlIDEyMDp0PTB8YXJbMjArKDB8YXJbQT4+Ml0pPj4yXSxhcltWPj4yXT1hcltlPj4yXSxhcltGPj4yXT1hcltyPj4yXSxhcltvPj4yXT1hcltWPj4yXSxhclthPj4yXT1hcltGPj4yXSxvPTB8JGJbNjMmdF0oQSxvLGEsaSxmLG4pO2JyZWFrO2Nhc2UgODg6aj0wfGpiWzEyNyZhclsyNCsoMHxhcltTPj4yXSk+PjJdXShTKSxhcltSPj4yXT1hcltlPj4yXSxhcltOPj4yXT1hcltyPj4yXSxIPSh0PShyPShIPTB8dHJbais4KzM+PjBdKTw8MjQ+PjI0PDApPzB8YXJbaj4+Ml06aikrKChyPzB8YXJbais0Pj4yXToyNTUmSCk8PDIpfDAsYXJbbz4+Ml09YXJbUj4+Ml0sYXJbYT4+Ml09YXJbTj4+Ml0sSD0wfFNyKEEsbyxhLGksZixuLHQsSCksYXJbZT4+Ml09SCxIPTI2O2JyZWFrO2Nhc2UgMTIxOmFyW18+PjJdPWFyW3I+PjJdLGFyW2E+PjJdPWFyW18+PjJdLEFpKEEsTSxlLGEsZixEKSxIPTI2O2JyZWFrO2Nhc2UgODk6YXJbWT4+Ml09YXJbcj4+Ml0sYXJbYT4+Ml09YXJbWT4+Ml0sZWkoQSxNLGUsYSxmLEQpLEg9MjY7YnJlYWs7Y2FzZSAzNzphcltRPj4yXT1hcltyPj4yXSxhclthPj4yXT1hcltRPj4yXSxyaShBLGUsYSxmLEQpLEg9MjY7YnJlYWs7ZGVmYXVsdDphcltmPj4yXT00fGFyW2Y+PjJdLEg9MjZ9cmV0dXJuIDI2PT0oMHxIKSYmKG89MHxhcltlPj4yXSksdXI9eiwwfG99LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dmFyIGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx0PTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhPTAsYz0wLGw9MDthclsocnw9MCk+PjJdPUEsYXJbbj4+Ml09aSwyJm8/KGYtaXwwKTwzP0E9MTooYXJbbj4+Ml09aSsxLHRyW2k+PjBdPS0xNyxhPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YSsxLHRyW2E+PjBdPS02OSxhPTB8YXJbbj4+Ml0sYXJbbj4+Ml09YSsxLHRyW2E+PjBdPS02NSxhPTQpOmE9NDtBOmRve2lmKDQ9PSgwfGEpKWZvcihBPTB8YXJbcj4+Ml07Oyl7aWYoZT4+PjA8PUE+Pj4wKXtBPTA7YnJlYWsgQX1pZihsPTB8YXJbQT4+Ml0sdD4+PjA8bD4+PjB8NTUyOTY9PSgtMjA0OCZsfDApKXtBPTI7YnJlYWsgQX1kb3tpZigxMjg8PWw+Pj4wKXtpZihjPTI1NSYoNjMmbHwxMjgpLGw+Pj4wPDIwNDgpe2lmKEE9MHxhcltuPj4yXSwoZi1BfDApPDIpe0E9MTticmVhayBBfWFyW24+PjJdPUErMSx0cltBPj4wXT1sPj4+NnwxOTIsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1jO2JyZWFrfWlmKEE9MHxhcltuPj4yXSxpPWYtQXwwLG89QSsxfDAsYT0yNTUmKGw+Pj42JjYzfDEyOCksbD4+PjA8NjU1MzYpe2lmKCgwfGkpPDMpe0E9MTticmVhayBBfWFyW24+PjJdPW8sdHJbQT4+MF09bD4+PjEyfDIyNCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPWEsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1jO2JyZWFrfWlmKCgwfGkpPDQpe0E9MTticmVhayBBfWFyW24+PjJdPW8sdHJbQT4+MF09bD4+PjE4fDI0MCxvPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bysxLHRyW28+PjBdPWw+Pj4xMiY2M3wxMjgsbD0wfGFyW24+PjJdLGFyW24+PjJdPWwrMSx0cltsPj4wXT1hLGw9MHxhcltuPj4yXSxhcltuPj4yXT1sKzEsdHJbbD4+MF09YzticmVha31pZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwxKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09bH13aGlsZSgwKTtBPTQrKDB8YXJbcj4+Ml0pfDAsYXJbcj4+Ml09QX19d2hpbGUoMCk7cmV0dXJuIDB8QX0oYXJbKGE9QSs0fDApPj4yXT1yLGksYSxhcltBPj4yXT1uLHQsQSwxMTE0MTExLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW28+PjJdPWFyW0E+PjJdLHVyPWUsMHx0fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe3ZhciBhO3JldHVybiBBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsQT11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsdD0wfGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7QXw9MCxlfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MDt2YXIgYSxjPTAsbD0wLHU9MCxiPTAscz0wO2FyWyhyfD0wKT4+Ml09QSxhcltuPj4yXT1pLGE9ZSw0Jm98MCYmKGM9MHxhcltyPj4yXSwyPChhLWN8MCkpJiYtMTc9PSgwfHRyW2M+PjBdKSYmLTY5PT0oMHx0cltjKzE+PjBdKSYmLTY1PT0oMHx0cltjKzI+PjBdKSYmKGFyW3I+PjJdPWMrMyk7QTpmb3IoOzspe2lmKGw9MHxhcltyPj4yXSxlPj4+MDw9bD4+PjApe0E9MDticmVha31pZihzPTB8YXJbbj4+Ml0sZj4+PjA8PXM+Pj4wKXtBPTE7YnJlYWt9dT0wfHRyW2w+PjBdLGI9MjU1JnUsQT1sKzF8MDtkb3tpZigtMTx1PDwyND4+MjQpe2lmKHQ+Pj4wPGI+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1ifWVsc2V7aWYoKDI1NSZ1KTwxOTQpe0E9MjticmVhayBBfWlmKGM9bCsyfDAsaT1hLWx8MCwoMjU1JnUpPDIyNCl7aWYoKDB8aSk8Mil7QT0xO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihBPTB8Y3JbQT4+MF0pfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT02MyZBfGI8PDYmMTk4NCk+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1BLEE9YzticmVha31pZihvPWwrM3wwLCgyNTUmdSk8MjQwKXtpZigoMHxpKTwzKXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW2M+PjBdLGM9MHxjcltBPj4wXSxBPTIyNCZjLHU8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfEEpKWJyZWFrO0E9MjticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxBKSlicmVhaztBPTI7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZjfDApKXtBPTI7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihBPTI1NSZpKXwwKSl7QT0yO2JyZWFrIEF9aWYodD4+PjA8KEE9Yzw8NiY0MDMyfGI8PDEyJjYxNDQwfDYzJkEpPj4+MCl7QT0yO2JyZWFrIEF9YXJbcz4+Ml09QSxBPW87YnJlYWt9aWYoMjQ1PD0oMjU1JnUpKXtBPTI7YnJlYWsgQX1pZigoMHxpKTw0KXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW0E+PjBdLEE9MHx0cltjPj4wXSxjPTB8dHJbbz4+MF0sbz0yNTUmaSx1PDwyND4+MjQpe2Nhc2UtMTY6aWYoNDg8PShpKzExMiYyNTUpKXtBPTI7YnJlYWsgQX1icmVhaztjYXNlLTEyOmlmKDEyOD09KDI0MCZvfDApKWJyZWFrO0E9MjticmVhayBBO2RlZmF1bHQ6aWYoMTI4IT0oMTkyJm98MCkpe0E9MjticmVhayBBfX1pZigxMjghPSgxOTImKGk9MjU1JkEpfDApKXtBPTI7YnJlYWsgQX1pZigxMjghPSgxOTImKEE9MjU1JmMpfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT1vPDwxMiYyNTgwNDh8Yjw8MTgmMTgzNTAwOHxpPDw2JjQwMzJ8NjMmQSk+Pj4wKXtBPTI7YnJlYWsgQX1hcltzPj4yXT1BLEE9bCs0fDB9fXdoaWxlKDApO2FyW3I+PjJdPUEsYXJbbj4+Ml09NCsoMHxhcltuPj4yXSl9cmV0dXJuIDB8QX0oYXJbKGE9QSs0fDApPj4yXT1yLGksYSxhcltBPj4yXT1uLHQsQSwxMTE0MTExLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW28+PjJdPWFyW0E+PjJdLHVyPWUsMHx0fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wO2ZvcihkPXVyPSh1PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxkPShsPWQpKzh8MCxiPXJ8PTA7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfGFyW2I+PjJdKSlicmVhaztiPWIrNHwwfWFyW28+PjJdPW4sYXJbZj4+Ml09cixhPXQsYz1BKzh8MDtBOmZvcig7Oyl7aWYoKDB8bik9PSgwfHQpfCgwfHIpPT0oMHxpKSl7Yj0zNTticmVha31zd2l0Y2gocz0wfGFyWyhrPWUpKzQ+PjJdLGFyWyhBPWwpPj4yXT1hcltrPj4yXSxhcltBKzQ+PjJdPXMsQT0wfHJmKDB8YXJbYz4+Ml0pLHM9MHxGaShuLGYsYi1yPj4yLGEtbnwwLGUpLDB8QSYmcmYoQSksMHxzKXtjYXNlLTE6Yj0xMDticmVhayBBO2Nhc2UgMDpyPTEsYj0zMjticmVhayBBfWlmKG49KDB8YXJbbz4+Ml0pK3N8MCwoMHwoYXJbbz4+Ml09bikpPT0oMHx0KSl7Yj0zMzticmVha31pZigoMHxiKT09KDB8aSkpYj1pLHI9MHxhcltmPj4yXTtlbHNle2lmKG49MHxyZigwfGFyW2M+PjJdKSxyPTB8JGMoZCwwKSwwfG4mJnJmKG4pLC0xPT0oMHxyKSl7cj0yLGI9MzE7YnJlYWt9aWYocj4+PjA+KGEtKDB8YXJbbz4+Ml0pfDApPj4+MCl7cj0xLGI9MzE7YnJlYWt9Zm9yKG49ZDtyOylzPTB8dHJbbj4+MF0saz0wfGFyW28+PjJdLGFyW28+PjJdPWsrMSx0cltrPj4wXT1zLG49bisxfDAscj1yKy0xfDA7Zm9yKHI9NCsoMHxhcltmPj4yXSl8MCxiPWFyW2Y+PjJdPXI7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfGFyW2I+PjJdKSlicmVhaztiPWIrNHwwfW49MHxhcltvPj4yXX19aWYoMTA9PSgwfGIpKXtmb3IoYXJbbz4+Ml09bjsoMHxyKSE9KDB8YXJbZj4+Ml0pJiYoaz0wfGFyW3I+PjJdLGI9MHxyZigwfGFyW2M+PjJdKSxuPTB8JGMobixrKSwwfGImJnJmKGIpLC0xIT0oMHxuKSk7KW49KDB8YXJbbz4+Ml0pK258MCxhcltvPj4yXT1uLHI9cis0fDA7YXJbZj4+Ml09cixyPTIsYj0zMn1lbHNlIDMxPT0oMHxiKT9iPTMyOjMzPT0oMHxiKSYmKHI9MHxhcltmPj4yXSxiPTM1KTtyZXR1cm4gMzIhPSgwfGIpJiYzNT09KDB8YikmJihyPSgwfHIpIT0oMHxpKSYxKSx1cj11LDB8cn0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhLGMsbCx1LGI9MCxzPTAsZD0wO2ZvcihsPXVyPSh1PXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxiPXJ8PTA7Oyl7aWYoKDB8Yik9PSgwfGkpKXtiPWk7YnJlYWt9aWYoISgwfHRyW2I+PjBdKSlicmVhaztiPWIrMXwwfWZvcihhcltvPj4yXT1uLGFyW2Y+PjJdPXIsYT10LGM9QSs4fDAsQT1uOzspe2lmKCgwfEEpPT0oMHx0KXwoMHxyKT09KDB8aSkpe0E9MzI7YnJlYWt9aWYobj0wfGFyWyhzPWUpKzQ+PjJdLGFyWyhkPWwpPj4yXT1hcltzPj4yXSxhcltkKzQ+PjJdPW4sZD1iLG49MHxyZigwfGFyW2M+PjJdKSxzPTB8VmkoQSxmLGQtcnwwLGEtQT4+MixlKSwwfG4mJnJmKG4pLC0xPT0oMHxzKSl7Yj1BLEE9MTA7YnJlYWt9aWYoQT0oMHxhcltvPj4yXSkrKHM8PDIpfDAsKDB8KGFyW28+PjJdPUEpKT09KDB8dCkpe0E9Mjk7YnJlYWt9aWYocj0wfGFyW2Y+PjJdLCgwfGIpPT0oMHxpKSliPWk7ZWxzZXtpZihiPTB8cmYoMHxhcltjPj4yXSkscj0wfEdpKEEsciwxLGUpLDB8YiYmcmYoYiksMHxyKXtyPTIsQT0yODticmVha31mb3IoYXJbbz4+Ml09NCsoMHxhcltvPj4yXSkscj0xKygwfGFyW2Y+PjJdKXwwLGI9YXJbZj4+Ml09cjs7KXtpZigoMHxiKT09KDB8aSkpe2I9aTticmVha31pZighKDB8dHJbYj4+MF0pKWJyZWFrO2I9YisxfDB9QT0wfGFyW28+PjJdfX1kb3tpZigxMD09KDB8QSkpe0E6Zm9yKDs7KXtpZihhcltvPj4yXT1iLCgwfHIpPT0oMHxhcltmPj4yXSkpe0E9MTg7YnJlYWt9c3dpdGNoKEE9MHxyZigwfGFyW2M+PjJdKSxiPTB8R2koYixyLGQtcnwwLGwpLDB8QSYmcmYoQSksMHxiKXtjYXNlLTE6QT0xNTticmVhayBBO2Nhc2UtMjpBPTE2O2JyZWFrIEE7Y2FzZSAwOmI9MX1yPXIrYnwwLGI9NCsoMHxhcltvPj4yXSl8MCxBPTEwfWlmKDE1PT0oMHxBKSl7YXJbZj4+Ml09cixyPTIsQT0yODticmVha31pZigxNj09KDB8QSkpe2FyW2Y+PjJdPXIscj0xLEE9Mjg7YnJlYWt9aWYoMTg9PSgwfEEpKXtyPSgwfChhcltmPj4yXT1yKSkhPSgwfGkpJjEsQT0yODticmVha319ZWxzZSAyOT09KDB8QSkmJihyPTB8YXJbZj4+Ml0sQT0zMil9d2hpbGUoMCk7cmV0dXJuIDI4IT0oMHxBKSYmMzI9PSgwfEEpJiYocj0oMHxyKSE9KDB8aSkmMSksdXI9dSwwfHJ9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7cmV0dXJuIHJ8PTAsbnw9MCxvfD0wLGFyWyhmfD0wKT4+Ml09cixhcltvPj4yXT1uLDN9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7cmV0dXJuIHJ8PTAsbnw9MCxvfD0wLGFyWyhmfD0wKT4+Ml09cixhcltvPj4yXT1uLDN9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyl7dmFyIGE7cmV0dXJuIEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxBPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCx0PTB8ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wO3ZhciBhPTAsYz0wLGw9MCx1PTAsYj0wO2FyWyhyfD0wKT4+Ml09QSxhcltuPj4yXT1pLDImbz8oZi1pfDApPDM/QT0xOihhcltuPj4yXT1pKzEsdHJbaT4+MF09LTE3LGE9MHxhcltuPj4yXSxhcltuPj4yXT1hKzEsdHJbYT4+MF09LTY5LGE9MHxhcltuPj4yXSxhcltuPj4yXT1hKzEsdHJbYT4+MF09LTY1LGE9NCk6YT00O0E6ZG97aWYoND09KDB8YSkpZm9yKGI9ZSxBPTB8YXJbcj4+Ml07Oyl7aWYoZT4+PjA8PUE+Pj4wKXtBPTA7YnJlYWsgQX1pZihpPTB8b3JbQT4+MV0sdD4+PjA8KHU9NjU1MzUmaSk+Pj4wKXtBPTI7YnJlYWsgQX1kb3tpZigoNjU1MzUmaSk8MTI4KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwxKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09aX1lbHNle2lmKGw9MjU1JigxMjh8KGM9NjMmdSkpLCg2NTUzNSZpKTwyMDQ4KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwyKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09dT4+PjZ8MTkyLHU9MHxhcltuPj4yXSxhcltuPj4yXT11KzEsdHJbdT4+MF09bDticmVha31pZihvPTI1NSYodT4+PjEyfDIyNCksYT0yNTUmKHU+Pj42JjYzfDEyOCksKDY1NTM1JmkpPDU1Mjk2KXtpZihBPTB8YXJbbj4+Ml0sKGYtQXwwKTwzKXtBPTE7YnJlYWsgQX1hcltuPj4yXT1BKzEsdHJbQT4+MF09byx1PTB8YXJbbj4+Ml0sYXJbbj4+Ml09dSsxLHRyW3U+PjBdPWEsdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT1sO2JyZWFrfWlmKDU2MzIwPD0oNjU1MzUmaSkpe2lmKCg2NTUzNSZpKTw1NzM0NCl7QT0yO2JyZWFrIEF9aWYoQT0wfGFyW24+PjJdLChmLUF8MCk8Myl7QT0xO2JyZWFrIEF9YXJbbj4+Ml09QSsxLHRyW0E+PjBdPW8sdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT1hLHU9MHxhcltuPj4yXSxhcltuPj4yXT11KzEsdHJbdT4+MF09bDticmVha31pZigoYi1BfDApPDQpe0E9MTticmVhayBBfWlmKDU2MzIwIT0oNjQ1MTImKGk9MHxsclsoQT1BKzJ8MCk+PjFdKXwwKSl7QT0yO2JyZWFrIEF9aWYoKGYtKDB8YXJbbj4+Ml0pfDApPDQpe0E9MTticmVhayBBfWlmKHQ+Pj4wPCg2NTUzNisoKG89OTYwJnUpPDwxMCl8Yzw8MTB8MTAyMyZpKT4+PjApe0E9MjticmVhayBBfWFyW3I+PjJdPUEsYz0xKyhvPj4+Nil8MCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPWM+Pj4yfDI0MCxsPTB8YXJbbj4+Ml0sYXJbbj4+Ml09bCsxLHRyW2w+PjBdPXU+Pj4yJjE1fGM8PDQmNDh8MTI4LGw9MHxhcltuPj4yXSxhcltuPj4yXT1sKzEsdHJbbD4+MF09dTw8NCY0OHxpPj4+NiYxNXwxMjgsdT0wfGFyW24+PjJdLGFyW24+PjJdPXUrMSx0clt1Pj4wXT02MyZpfDEyOH19d2hpbGUoMCk7QT0yKygwfGFyW3I+PjJdKXwwLGFyW3I+PjJdPUF9fXdoaWxlKDApO3JldHVybiAwfEF9KGFyWyhhPUErNHwwKT4+Ml09cixpLGEsYXJbQT4+Ml09bix0LEEsMTExNDExMSwwKSxhcltmPj4yXT1hclthPj4yXSxhcltvPj4yXT1hcltBPj4yXSx1cj1lLDB8dH0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXt2YXIgYTtyZXR1cm4gQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLEE9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLHQ9MHxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGEsYyxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MDthclsocnw9MCk+PjJdPUEsYXJbbj4+Ml09aSxjPWUsNCZvfDAmJihsPTB8YXJbcj4+Ml0sMjwoYy1sfDApKSYmLTE3PT0oMHx0cltsPj4wXSkmJi02OT09KDB8dHJbbCsxPj4wXSkmJi02NT09KDB8dHJbbCsyPj4wXSkmJihhcltyPj4yXT1sKzMpO2E9ZjtBOmZvcig7Oyl7aWYoaT0wfGFyW3I+PjJdLCEoQT1pPj4+MDxlPj4+MCkpe2s9NDA7YnJlYWt9aWYoZD0wfGFyW24+PjJdLGY+Pj4wPD1kPj4+MCl7az00MDticmVha31pZihiPTB8dHJbaT4+MF0sdD4+PjA8KHM9MjU1JmIpPj4+MCl7QT0yO2JyZWFrfUE9aSsxfDA7ZG97aWYoLTE8Yjw8MjQ+PjI0KW9yW2Q+PjFdPTI1NSZiO2Vsc2V7aWYoKDI1NSZiKTwxOTQpe0E9MjticmVhayBBfWlmKGw9Yy1pfDAsbz1pKzJ8MCwoMjU1JmIpPDIyNCl7aWYoKDB8bCk8Mil7QT0xO2JyZWFrIEF9aWYoMTI4IT0oMTkyJihBPTB8Y3JbQT4+MF0pfDApKXtBPTI7YnJlYWsgQX1pZih0Pj4+MDwoQT02MyZBfHM8PDYmMTk4NCk+Pj4wKXtBPTI7YnJlYWsgQX1vcltkPj4xXT1BLEE9bzticmVha31pZih1PWkrM3wwLCgyNTUmYik8MjQwKXtpZigoMHxsKTwzKXtBPTE7YnJlYWsgQX1zd2l0Y2goaT0wfHRyW28+PjBdLGw9MHxjcltBPj4wXSxBPTIyNCZsLGI8PDI0Pj4yNCl7Y2FzZS0zMjppZigxNjA9PSgwfEEpKWJyZWFrO0E9MjticmVhayBBO2Nhc2UtMTk6aWYoMTI4PT0oMHxBKSlicmVhaztBPTI7YnJlYWsgQTtkZWZhdWx0OmlmKDEyOCE9KDE5MiZsfDApKXtBPTI7YnJlYWsgQX19aWYoMTI4IT0oMTkyJihBPTI1NSZpKXwwKSl7QT0yO2JyZWFrIEF9aWYodD4+PjA8KDY1NTM1JihBPWw8PDYmNDAzMnxzPDwxMnw2MyZBKSk+Pj4wKXtBPTI7YnJlYWsgQX1vcltkPj4xXT1BLEE9dTticmVha31pZigyNDU8PSgyNTUmYikpe0E9MjticmVhayBBfWlmKCgwfGwpPDQpe0E9MTticmVhayBBfXN3aXRjaChsPTB8dHJbQT4+MF0sQT0wfHRyW28+PjBdLGk9MHx0clt1Pj4wXSx1PTI1NSZsLGI8PDI0Pj4yNCl7Y2FzZS0xNjppZig0ODw9KGwrMTEyJjI1NSkpe0E9MjticmVhayBBfWJyZWFrO2Nhc2UtMTI6aWYoMTI4PT0oMjQwJnV8MCkpYnJlYWs7QT0yO2JyZWFrIEE7ZGVmYXVsdDppZigxMjghPSgxOTImdXwwKSl7QT0yO2JyZWFrIEF9fWlmKDEyOCE9KDE5MiYobz0yNTUmQSl8MCkpe0E9MjticmVhayBBfWlmKDEyOCE9KDE5MiYoQT0yNTUmaSl8MCkpe0E9MjticmVhayBBfWlmKChhLWR8MCk8NCl7QT0xO2JyZWFrIEF9aWYodD4+PjA8KHU8PDEyJjI1ODA0OHwoaT03JnMpPDwxOHw0MDMyJihsPW88PDYpfChBJj02MykpPj4+MCl7QT0yO2JyZWFrIEF9b3JbZD4+MV09dTw8MiY2MHxvPj4+NCYzfDE2MzIwKygodT4+PjQmM3xpPDwyKTw8Nil8NTUyOTYsZD1kKzJ8MCxhcltuPj4yXT1kLG9yW2Q+PjFdPUF8OTYwJmx8NTYzMjAsQT00KygwfGFyW3I+PjJdKXwwfX13aGlsZSgwKTthcltyPj4yXT1BLGFyW24+PjJdPTIrKDB8YXJbbj4+Ml0pfTQwPT0oMHxrKSYmKEEmPTEpO3JldHVybiAwfEF9KGFyWyhhPUErNHwwKT4+Ml09cixpLGEsYXJbQT4+Ml09bix0LEEsMTExNDExMSwwKSxhcltmPj4yXT1hclthPj4yXSxhcltvPj4yXT1hcltBPj4yXSx1cj1lLDB8dH0sUmIsUmIsUmIsUmIsUmJdLHJzPVtOYixmdW5jdGlvbigpeyFmdW5jdGlvbigpe3ZhciBBPTA7aWYoQT0wfGFyWzE0MTU0XSxhclsxNDE1NF09QSsxLDE8KEErMXwwKSlyZXR1cm4gQT0wO2lmKFlhKCksMHxLYSgpKXJldHVybiBBPTA7YXJbMTQxNTRdPSgwfGFyWzE0MTU0XSktMSxBPTExfSgpfSxmdW5jdGlvbigpeyFmdW5jdGlvbigpe3ZhciBBPTA7aWYoQT0wfGFyWzE0MTU0XSxhclsxNDE1NF09QS0xLCgwfChBPUErLTF8MCkpPDApcmV0dXJuIGFyWzE0MTU0XT0xKygwfGFyWzE0MTU0XSksQT0xMjtpZigwfEEpcmV0dXJuIEE9MDtxYSgpLEE9MH0oKX0sZnVuY3Rpb24oKXtXKCl9LGZ1bmN0aW9uKCl7dmFyIEEsZSxyLGk9MCxmPTAsbj0wLHQ9MCxvPTA7dD11cj11ciszMSYtMzIsdXI9dXIrNDh8MCxyPXQrMzJ8MCxBPXQrMjR8MCxvPXQrMTZ8MCx0PShlPXQpKzM2fDAsMHwoaT0wfHp1KCkpJiYwfChuPTB8YXJbaT4+Ml0pJiYoMTEyNjkwMjUyOD09KC0yNTYmKGY9MHxhclsoaT1uKzQ4fDApPj4yXSl8MCkmMTEyOTA3NDI0Nz09KDB8KGk9MHxhcltpKzQ+PjJdKSl8fChhcltBPj4yXT01NjAxOSxqdSg1NTk2OSxBKSksaT0xMTI2OTAyNTI5PT0oMHxmKSYxMTI5MDc0MjQ3PT0oMHxpKT8wfGFyW24rNDQ+PjJdOm4rODB8MCxhclt0Pj4yXT1pLG49MHxhcltuPj4yXSxpPTB8YXJbbis0Pj4yXSwwfHhiWzYzJmFyWzE2KygwfGFyWzk4NF0pPj4yXV0oMzkzNixuLHQpPyhvPTB8YXJbdD4+Ml0sbz0wfGpiWzEyNyZhcls4KygwfGFyW28+PjJdKT4+Ml1dKG8pLGFyW2U+PjJdPTU2MDE5LGFyW2UrND4+Ml09aSxhcltlKzg+PjJdPW8sanUoNTU4ODMsZSkpOihhcltvPj4yXT01NjAxOSxhcltvKzQ+PjJdPWksanUoNTU5MjgsbykpKSxqdSg1NjAwNyxyKX0sZnVuY3Rpb24oKXt2YXIgQSxlO2U9dXI9KEE9dXIpKzMxJi0zMix1cj11cisxNnwwLDB8bUEoNjExNTIsNDQ2KT9qdSg1NjIwNyxlKTp1cj1BfSxOYixOYl0saXM9W19iLFhBLGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDIzMiwoZT0wfGFyW0ErMjQ+PjJdKSYmbXUoZSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NDI2NCwoZT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhBPUErMjh8MCk+PjJdKSE9KDB8ZSkmJihhcltBPj4yXT1lKSx2dShlKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI7YXJbKEF8PTApPj4yXT00MjY0LChlPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxlKSYmKGFyW3I+PjJdPWUpLHZ1KGUpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO0E9KEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYXJbQT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO0E9KEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDAsYXJbQT4+Ml09NDMwNCxhclsoZT1BKzU2fDApPj4yXT00MzI0LGFyWyhyPUErNHwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzM2fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksR2YoKSxiZihlKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGU7YXJbKEF8PTApPj4yXT00MzQwLCgwfHRyWzExKyhlPUErMzJ8MCk+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZihBKX0sZnVuY3Rpb24oQSl7dmFyIGU7YXJbKEF8PTApPj4yXT00MzQwLCgwfHRyWzExKyhlPUErMzJ8MCk+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxrZihBKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dHJbKEF8PTApKzM3Pj4wXT0wfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDM2LDB8KHI9MHxhcltBKzY0Pj4yXSkmJigoMHwoZj0wfGFyWyhpPUErNjh8MCk+PjJdKSkhPSgwfHIpJiYoYXJbaT4+Ml09ZisofigoZistNC1yfDApPj4+Mik8PDIpKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MzYsMHwocj0wfGFyW0ErNjQ+PjJdKSYmKCgwfChmPTB8YXJbKGk9QSs2OHwwKT4+Ml0pKSE9KDB8cikmJihhcltpPj4yXT1mKyh+KChmKy00LXJ8MCk+Pj4yKTw8MikpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBfD0wKT4+Ml09NDUwNCxhclsoZT1BKzY0fDApPj4yXT00NTQ0LGFyW0ErOD4+Ml09NDUyNCxhclsocj1BKzEyfDApPj4yXT00MzQwLCgwfHRyWzExKyhpPUErNDR8MCk+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxrZihyKSxfZigpLGJmKGUpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7YXJbKEF8PTApPj4yXT00NTA0LGFyWyhlPUErNjR8MCk+PjJdPTQ1NDQsYXJbQSs4Pj4yXT00NTI0LGFyWyhyPUErMTJ8MCk+PjJdPTQzNDAsKDB8dHJbMTErKGk9QSs0NHwwKT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pLGtmKHIpLF9mKCksYmYoZSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaTthclsoQT0oQXw9MCkrLTh8MCk+PjJdPTQ1MDQsYXJbKGU9QSs2NHwwKT4+Ml09NDU0NCxhcltBKzg+PjJdPTQ1MjQsYXJbKHI9QSsxMnwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzQ0fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksX2YoKSxiZihlKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpO2FyWyhBPShBfD0wKSstOHwwKT4+Ml09NDUwNCxhclsoZT1BKzY0fDApPj4yXT00NTQ0LGFyW0ErOD4+Ml09NDUyNCxhclsocj1BKzEyfDApPj4yXT00MzQwLCgwfHRyWzExKyhpPUErNDR8MCk+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxrZihyKSxfZigpLGJmKGUpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk7QT0oQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCxhcltBPj4yXT00NTA0LGFyWyhlPUErNjR8MCk+PjJdPTQ1NDQsYXJbQSs4Pj4yXT00NTI0LGFyWyhyPUErMTJ8MCk+PjJdPTQzNDAsKDB8dHJbMTErKGk9QSs0NHwwKT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pLGtmKHIpLF9mKCksYmYoZSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaTtBPShBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwLGFyW0E+PjJdPTQ1MDQsYXJbKGU9QSs2NHwwKT4+Ml09NDU0NCxhcltBKzg+PjJdPTQ1MjQsYXJbKHI9QSsxMnwwKT4+Ml09NDM0MCwoMHx0clsxMSsoaT1BKzQ0fDApPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksa2YociksX2YoKSxiZihlKSx2dShBKX0seWYsQmYsZnVuY3Rpb24oQSl7eWYoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxmdW5jdGlvbihBKXtCZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LFJmLE5mLGZ1bmN0aW9uKEEpe1JmKChBfD0wKSstOHwwKX0sZnVuY3Rpb24oQSl7TmYoKEF8PTApKy04fDApfSxmdW5jdGlvbihBKXtSZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe05mKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sSWYsQ2YsZnVuY3Rpb24oQSl7SWYoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxmdW5jdGlvbihBKXtDZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDYwMCxhclsocj1BKzE2fDApPj4yXT00NDM2LDB8KGk9MHxhcltBKzgwPj4yXSkmJigoMHwobj0wfGFyWyhmPUErODR8MCk+PjJdKSkhPSgwfGkpJiYoYXJbZj4+Ml09bisofigobistNC1pfDApPj4+Mik8PDIpKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjAwLGFyWyhyPUErMTZ8MCk+PjJdPTQ0MzYsMHwoaT0wfGFyW0ErODA+PjJdKSYmKCgwfChuPTB8YXJbKGY9QSs4NHwwKT4+Ml0pKSE9KDB8aSkmJihhcltmPj4yXT1uKyh+KChuKy00LWl8MCk+Pj4yKTw8MikpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjI4LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NjI4LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDY1Nixhclsocj1BKzE2fDApPj4yXT00Njg0LCgwfHRyWyhpPUErOTJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTQ2NTYsYXJbKHI9QSsxNnwwKT4+Ml09NDY4NCwoMHx0clsoaT1BKzkyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ2ODQsKDB8dHJbKHI9QSs3NnwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00Njg0LCgwfHRyWyhyPUErNzZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NzE2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00NzE2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3RyWyhBfD0wKSszNz4+MF09NjU1MzU8KDB8YXJbQSs1Nj4+Ml0pPj4+MCYxfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTQ3NzYsWXQoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTQ3NzYsWXQoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sWXQsZnVuY3Rpb24oQSl7WXQoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wLG89MDtpZihpPTB8Y3JbKEF8PTApKzcyPj4wXSxpPSEoNjU1MzU8KG49MHxhcltBKzYwPj4yXSktKGY9MHxhcltBKzU2Pj4yXSk+PjU+Pj4wKXx8MjxpPj4+MD9pOjIscj1BKzc0fDAsdD1BKzc1fDAsbz1BKzc2fDAsdHJbKGU9QSs3M3wwKT4+MF09MCx0clsxK2U+PjBdPTAsdHJbMitlPj4wXT0wLCgodHJbMytlPj4wXT0wKXxmKT09KDB8bikpcmV0dXJuIG49aSx0cltlPj4wXT00LHRyW3I+PjBdPTQsdHJbdD4+MF09NCx0cltvPj4wXT0wLHQ9MjU1Jm4sdm9pZCh0clsobz1BKzM3fDApPj4wXT10KTtmb3IoO2k9ISg2NTUzNTwoMHxhcltmPj4yXSk+Pj4wKXx8MjwoMHxpKT9pOjIsaT0wPT0oMHx0cltmKzQ+PjBdKXwxPCgwfGkpP2k6MSwoMHwoZj1mKzMyfDApKSE9KDB8bik7KTt0cltlPj4wXT00LHRyW3I+PjBdPTQsdHJbdD4+MF09NCx0cltvPj4wXT0wLHQ9MjU1JmksdHJbKG89QSszN3wwKT4+MF09dH0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00ODM2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT00ODM2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3RyWyhBfD0wKSszNz4+MF09NjU1MzU8KDB8YXJbQSs0OD4+Ml0pLSgwfGFyW0ErNDQ+PjJdKT4+Mz4+PjAmMX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT00ODk2LF90KEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT00ODk2LF90KEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LF90LGZ1bmN0aW9uKEEpe190KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MDtpZihyPShlPTY1NTM1PCgwfGFyWyhBfD0wKSs1Nj4+Ml0pPj4+MCk/MzowPT0oMHx0cltBKzEyND4+MF0pPzA6MiwwPT0oMHwoKGY9MHx0clsoaT1BKzY0fDApKzExPj4wXSk8PDI0Pj4yNDwwPzB8YXJbQSs2OD4+Ml06MjU1JmYpKSYmKGY9MD09KDB8WXUoaSwwLC0xLDc5NjU5LDApKSkpcmV0dXJuIGk9cixpJj0yNTUsdm9pZCh0clsoZj1BKzM3fDApPj4wXT1pKTtpPXI9ZT8zOjIsaSY9MjU1LHRyWyhmPUErMzd8MCk+PjBdPWl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDk1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NDk1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7aT1mKy04fDAsYXJbbj4+Ml09aSwoZj0wfGFyW2YrLTQ+PjJdKSYmKGR1KGYpLGk9MHxhcltuPj4yXSksKDB8aSkhPSgwfHIpOylmPWk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUwMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUwMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01MDc2LEZ0KEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01MDc2LEZ0KEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LEZ0LGZ1bmN0aW9uKEEpe0Z0KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MCxpPTAsZj0wLG49MCx0PTA7aWYoKDB8KHI9MHxhclsoQXw9MCkrNTY+PjJdKSk9PSgwfCh0PTB8YXJbQSs2MD4+Ml0pKSlyZXR1cm4gdHJbKHQ9QSszN3wobj1mPTApKT4+MF09ZixuJj0xLHZvaWQoYXJbKHQ9QSs0MHwwKT4+Ml09bik7bj1lPTA7ZG97aWYobj02NTUzNTwoMHxhcltyPj4yXSk+Pj4wPzE6biwoMHwoaT0wfGFyW3IrND4+Ml0pKSE9KDB8KGY9MHxhcltyKzg+PjJdKSkpZm9yKDtlfD0xMjc8KDB8bHJbaSsyPj4xXSksKDB8KGk9aSs0fDApKSE9KDB8Zik7KTtyPXIrMTZ8MH13aGlsZSgoMHxyKSE9KDB8dCkpO2Y9MjU1Jm4sbj1lLHRyWyh0PUErMzd8MCk+PjBdPWYsbiY9MSxhclsodD1BKzQwfDApPj4yXT1ufSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxMzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUxMzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sVnQsZnVuY3Rpb24oQSl7VnQoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01MjI0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLCgwfHRyWyhyPUErNTZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTIyNCwwfChyPTB8YXJbQSs2OD4+Ml0pJiYoKDB8YXJbKGk9QSs3MnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSwoMHx0clsocj1BKzU2fDApKzExPj4wXSk8MCYmdnUoMHxhcltyPj4yXSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTI1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTI1Nixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2ZvcihmPWk7aT1mKy04fDAsYXJbbj4+Ml09aSwoZj0wfGFyW2YrLTQ+PjJdKSYmKGR1KGYpLGk9MHxhcltuPj4yXSksKDB8aSkhPSgwfHIpOylmPWk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUzMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTUzMTYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Mzc2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Mzc2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NTQzNixiZShBKzE2fDApLHR1KCl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NTQzNixiZShBKzE2fDApLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxiZSxmdW5jdGlvbihBKXtiZShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGU9MCxyPTAsaT0wLGY9MCxuPTAsdD0wO2lmKCgwfChyPTB8YXJbKEF8PTApKzU2Pj4yXSkpIT0oMHwobj0wfGFyW0ErNjA+PjJdKSkpe2ZvcihlPTA7Oyl7aWYoNjU1MzU8KDB8YXJbcis0OD4+Ml0pPj4+MCl7ZT0xLHI9NjticmVha31pZigoMHwoaT0wfGFyW3IrNTI+PjJdKSkhPSgwfChmPTB8YXJbcis1Nj4+Ml0pKSlmb3IoO2U9KHQ9NjU1MzU8KDB8YXJbaT4+Ml0pPj4+MCk/MTplLCEodHwoMHwoaT1pKzR8MCkpPT0oMHxmKSk7KTtpZigoMHwocj1yKzY0fDApKT09KDB8bikpe3I9NjticmVha319NiE9KDB8cil8fCh0clsodD1BKzM3fDApPj4wXT1lKX1lbHNlIHRyWyhBPUErMzd8KG49MCkpPj4wXT1ufSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTU0OTYsY2UoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTU0OTYsY2UoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sY2UsZnVuY3Rpb24oQSl7Y2UoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTU1Nixhclsocj1BKzE2fDApPj4yXT01NTg0LDB8KGk9MHxhcltBKzg0Pj4yXSkmJigoMHxhclsoZj1BKzg4fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLGFyW3I+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKDtuPWYrLTh8MCxhclt0Pj4yXT1uLCgwfChmPShmPTB8YXJbZistND4+Ml0pPyhkdShmKSwwfGFyW3Q+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTU1Nixhclsocj1BKzE2fDApPj4yXT01NTg0LDB8KGk9MHxhcltBKzg0Pj4yXSkmJigoMHxhclsoZj1BKzg4fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLGFyW3I+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKDtuPWYrLTh8MCxhclt0Pj4yXT1uLCgwfChmPShmPTB8YXJbZistND4+Ml0pPyhkdShmKSwwfGFyW3Q+PjJdKTpuKSkhPSgwfGkpOyk7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01NTg0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01NTg0LDB8KHI9MHxhcltBKzY4Pj4yXSkmJigoMHxhclsoaT1BKzcyfDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKHI9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsoaT1BKzI4fDApPj4yXSkhPSgwfHIpJiYoYXJbaT4+Ml09ciksdnUocikpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU2MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTY0NCwwfChpPTB8YXJbQSs4OD4+Ml0pJiYoKDB8YXJbKGY9QSs5MnwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU2MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTY0NCwwfChpPTB8YXJbQSs4OD4+Ml0pJiYoKDB8YXJbKGY9QSs5MnwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTY0NCwwfChyPTB8YXJbQSs3Mj4+Ml0pJiYoKDB8YXJbKGk9QSs3NnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChpPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKHI9QSsyOHwwKT4+Ml0pIT0oMHxpKSYmKGFyW3I+PjJdPWkpLHZ1KGkpKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NTY0NCwwfChyPTB8YXJbQSs3Mj4+Ml0pJiYoKDB8YXJbKGk9QSs3NnwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01Njc2LHRlKEErMTZ8MCksdHUoKX0sZnVuY3Rpb24oQSl7YXJbKEF8PTApPj4yXT01Njc2LHRlKEErMTZ8MCksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LHRlLGZ1bmN0aW9uKEEpe3RlKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU3MzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU3MzYsYXJbKHI9QSsxNnwwKT4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1pZihhcltyPj4yXT00MjY0LCEoaT0wfGFyW0ErNDA+PjJdKSlyZXR1cm4gdHUoKSx2b2lkIHZ1KEEpOygwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscj0wLGk9MCxmPTAsbj0wO2lmKGFyWyhBfD0wKT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Nzk2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01Nzk2LGFyWyhyPUErMTZ8MCk+PjJdPTQ0MDQsMHwoaT0wfGFyWyhlPUErNjB8MCk+PjJdKSl7aWYoKDB8KGY9MHxhclsodD1BKzY0fDApPj4yXSkpIT0oMHxpKSl7Zm9yKG49ZjtmPW4rLTh8MCxhclt0Pj4yXT1mLChuPTB8YXJbbistND4+Ml0pJiYoZHUobiksZj0wfGFyW3Q+PjJdKSwoMHxmKSE9KDB8aSk7KW49ZjtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NTg1Nixhclsocj1BKzE2fDApPj4yXT01ODg0LCgwfHRyWyhpPUErNzJ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2k+PjJdKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2Zvcig7bj1mKy04fDAsYXJbdD4+Ml09biwoMHwoZj0oZj0wfGFyW2YrLTQ+PjJdKT8oZHUoZiksMHxhclt0Pj4yXSk6bikpIT0oMHxpKTspO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU4NTYsYXJbKHI9QSsxNnwwKT4+Ml09NTg4NCwoMHx0clsoaT1BKzcyfDApKzExPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTU4ODQsKDB8dHJbKHI9QSs1NnwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbcj4+Ml0pLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKDtmPWkrLTh8MCxhcltuPj4yXT1mLCgwfChpPShpPTB8YXJbaSstND4+Ml0pPyhkdShpKSwwfGFyW24+PjJdKTpmKSkhPSgwfHIpOyk7cj0wfGFyW2U+PjJdfXZ1KHIpfWFyW0E+PjJdPTQyNjQsKGk9MHxhcltBKzI0Pj4yXSkmJigoMHxhclsocj1BKzI4fDApPj4yXSkhPSgwfGkpJiYoYXJbcj4+Ml09aSksdnUoaSkpfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01ODg0LCgwfHRyWyhyPUErNTZ8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSxhcltBPj4yXT00NDA0LDB8KHI9MHxhclsoZT1BKzQ0fDApPj4yXSkpe2lmKCgwfChpPTB8YXJbKG49QSs0OHwwKT4+Ml0pKSE9KDB8cikpe2Zvcig7Zj1pKy04fDAsYXJbbj4+Ml09ZiwoMHwoaT0oaT0wfGFyW2krLTQ+PjJdKT8oZHUoaSksMHxhcltuPj4yXSk6ZikpIT0oMHxyKTspO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTE2LGFyWyhyPUErMTZ8MCk+PjJdPTU5NDQsMHwoaT0wfGFyW0ErNzY+PjJdKSYmZHUoaSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3Iobj1mO2Y9bistOHwwLGFyW3Q+PjJdPWYsKG49MHxhcltuKy00Pj4yXSkmJihkdShuKSxmPTB8YXJbdD4+Ml0pLCgwfGYpIT0oMHxpKTspbj1mO2k9MHxhcltlPj4yXX12dShpKX1hcltyPj4yXT00MjY0LChpPTB8YXJbQSs0MD4+Ml0pJiYoKDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpKSx0dSgpfSxmdW5jdGlvbihBKXt2YXIgZSxyLGk9MCxmPTAsbj0wLHQ9MDtpZihhclsoQXw9MCk+PjJdPTU5MTYsYXJbKHI9QSsxNnwwKT4+Ml09NTk0NCwwfChpPTB8YXJbQSs3Nj4+Ml0pJiZkdShpKSxhcltyPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZSxyPTAsaT0wLGY9MCxuPTA7aWYoYXJbKEF8PTApPj4yXT01OTQ0LDB8KHI9MHxhcltBKzYwPj4yXSkmJmR1KHIpLGFyW0E+PjJdPTQ0MDQsMHwocj0wfGFyWyhlPUErNDR8MCk+PjJdKSl7aWYoKDB8KGk9MHxhclsobj1BKzQ4fDApPj4yXSkpIT0oMHxyKSl7Zm9yKGY9aTtpPWYrLTh8MCxhcltuPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW24+PjJdKSwoMHxpKSE9KDB8cik7KWY9aTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTU5NDQsMHwocj0wfGFyW0ErNjA+PjJdKSYmZHUociksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoZj1pO2k9ZistOHwwLGFyW24+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbbj4+Ml0pLCgwfGkpIT0oMHxyKTspZj1pO3I9MHxhcltlPj4yXX12dShyKX1hcltBPj4yXT00MjY0LChyPTB8YXJbQSsyND4+Ml0pJiYoKDB8YXJbKGk9QSsyOHwwKT4+Ml0pIT0oMHxyKSYmKGFyW2k+PjJdPXIpLHZ1KHIpKSx2dShBKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTc2LGFyWyhyPUErMTZ8MCk+PjJdPTYwMDQsMHwoaT0wfGFyW0ErNzI+PjJdKSYmKCgwfGFyWyhmPUErNzZ8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9YXJbcj4+Ml09NDI2NCwoaT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhmPUErNDR8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpPTAsZj0wLG49MCx0PTA7aWYoYXJbKEF8PTApPj4yXT01OTc2LGFyWyhyPUErMTZ8MCk+PjJdPTYwMDQsMHwoaT0wfGFyW0ErNzI+PjJdKSYmKCgwfGFyWyhmPUErNzZ8MCk+PjJdKSE9KDB8aSkmJihhcltmPj4yXT1pKSx2dShpKSksYXJbcj4+Ml09NDQwNCwwfChpPTB8YXJbKGU9QSs2MHwwKT4+Ml0pKXtpZigoMHwoZj0wfGFyWyh0PUErNjR8MCk+PjJdKSkhPSgwfGkpKXtmb3IoO249ZistOHwwLGFyW3Q+PjJdPW4sKDB8KGY9KGY9MHxhcltmKy00Pj4yXSk/KGR1KGYpLDB8YXJbdD4+Ml0pOm4pKSE9KDB8aSk7KTtpPTB8YXJbZT4+Ml19dnUoaSl9aWYoYXJbcj4+Ml09NDI2NCwhKGk9MHxhcltBKzQwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxNnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTYwMDQsMHwocj0wfGFyW0ErNTY+PjJdKSYmKCgwfGFyWyhpPUErNjB8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwoaT0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhyPUErMjh8MCk+PjJdKSE9KDB8aSkmJihhcltyPj4yXT1pKSx2dShpKSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHI9MCxpPTAsZj0wLG49MDtpZihhclsoQXw9MCk+PjJdPTYwMDQsMHwocj0wfGFyW0ErNTY+PjJdKSYmKCgwfGFyWyhpPUErNjB8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksYXJbQT4+Ml09NDQwNCwwfChyPTB8YXJbKGU9QSs0NHwwKT4+Ml0pKXtpZigoMHwoaT0wfGFyWyhuPUErNDh8MCk+PjJdKSkhPSgwfHIpKXtmb3IoO2Y9aSstOHwwLGFyW24+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy00Pj4yXSk/KGR1KGkpLDB8YXJbbj4+Ml0pOmYpKSE9KDB8cik7KTtyPTB8YXJbZT4+Ml19dnUocil9YXJbQT4+Ml09NDI2NCwocj0wfGFyW0ErMjQ+PjJdKSYmKCgwfGFyWyhpPUErMjh8MCk+PjJdKSE9KDB8cikmJihhcltpPj4yXT1yKSx2dShyKSksdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NjAzNixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWFyW3I+PjJdPTQyNjQsKGk9MHxhcltBKzQwPj4yXSkmJigoMHxhclsoZj1BKzQ0fDApPj4yXSkhPSgwfGkpJiYoYXJbZj4+Ml09aSksdnUoaSkpLHR1KCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaT0wLGY9MCxuPTAsdD0wO2lmKGFyWyhBfD0wKT4+Ml09NjAzNixhclsocj1BKzE2fDApPj4yXT00NDA0LDB8KGk9MHxhclsoZT1BKzYwfDApPj4yXSkpe2lmKCgwfChmPTB8YXJbKHQ9QSs2NHwwKT4+Ml0pKSE9KDB8aSkpe2ZvcihuPWY7Zj1uKy04fDAsYXJbdD4+Ml09Ziwobj0wfGFyW24rLTQ+PjJdKSYmKGR1KG4pLGY9MHxhclt0Pj4yXSksKDB8ZikhPSgwfGkpOyluPWY7aT0wfGFyW2U+PjJdfXZ1KGkpfWlmKGFyW3I+PjJdPTQyNjQsIShpPTB8YXJbQSs0MD4+Ml0pKXJldHVybiB0dSgpLHZvaWQgdnUoQSk7KDB8YXJbKGY9QSs0NHwwKT4+Ml0pIT0oMHxpKSYmKGFyW2Y+PjJdPWkpLHZ1KGkpLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXswfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscjthclsoQXw9MCk+PjJdPTYxMjAsYXJbQSsxMj4+Ml09NjE0OCwoZT0wfGFyW0ErMjA+PjJdKSYmKCgwfGFyWyhyPUErMjR8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGUscjtpZihhclsoQXw9MCk+PjJdPTYxMjAsYXJbQSsxMj4+Ml09NjE0OCwhKGU9MHxhcltBKzIwPj4yXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTsoMHxhclsocj1BKzI0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSksdHUoKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlO2FyWyhBfD0wKT4+Ml09NjE0OCwoZT0wfGFyW0ErOD4+Ml0pJiYoKDB8YXJbKEE9QSsxMnwwKT4+Ml0pIT0oMHxlKSYmKGFyW0E+PjJdPWUpLHZ1KGUpKX0sZnVuY3Rpb24oQSl7dmFyIGUscjthclsoQXw9MCk+PjJdPTYxNDgsKGU9MHxhcltBKzg+PjJdKSYmKCgwfGFyWyhyPUErMTJ8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksdnUoQSl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NjE4MCxYQShBKzE2fDApLHR1KCl9LGZ1bmN0aW9uKEEpe2FyWyhBfD0wKT4+Ml09NjE4MCxYQShBKzE2fDApLHR1KCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTZ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYyMDgscG8oQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYyMDgscG8oQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtwbygoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzMzYsZ2woQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzMzYsZ2woQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtnbCgoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzNjQsbG8oQSsxMnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzNjQsbG8oQSsxMnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtsbygoQXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzOTIsRWwoQSsxNnwwKSx0dSgpfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTYzOTIsRWwoQSsxNnwwKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXtFbCgoQXw9MCkrMTZ8MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MDthclsoQXw9MCk+PjJdPTY0MjAsMHwoZT0wfGFyW0ErNDA+PjJdKSYmKCgwfGFyWyhyPUErNDR8MCk+PjJdKSE9KDB8ZSkmJihhcltyPj4yXT1lKSx2dShlKSksKDB8dHJbKGU9QSsyOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLDA8PSgwfHRyWyhlPUErMTZ8MCkrMTE+PjBdKXx8dnUoMHxhcltlPj4yXSksdHUoKX0sZnVuY3Rpb24oQSl7dmFyIGU9MCxyPTA7aWYoYXJbKEF8PTApPj4yXT02NDIwLDB8KGU9MHxhcltBKzQwPj4yXSkmJigoMHxhclsocj1BKzQ0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSkpLCgwfHRyWyhlPUErMjh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSwwPD0oMHx0clsoZT1BKzE2fDApKzExPj4wXSkpcmV0dXJuIHR1KCksdm9pZCB2dShBKTt2dSgwfGFyW2U+PjJdKSx0dSgpLHZ1KEEpfSxmdW5jdGlvbihBKXt2YXIgZT0wLHI9MDswfChlPTB8YXJbKEF8PTApKzQwPj4yXSkmJigoMHxhclsocj1BKzQ0fDApPj4yXSkhPSgwfGUpJiYoYXJbcj4+Ml09ZSksdnUoZSkpLCgwfHRyWyhlPUErMjh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSwwPD0oMHx0clsoZT1BKzE2fDApKzExPj4wXSl8fHZ1KDB8YXJbZT4+Ml0pfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzE2fDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpezB9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7aXNbNTExJmFyW2FyWyhBPShBfD0wKSsxMnwwKT4+Ml0+PjJdXShBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt0dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2lzWzUxMSZhclthclsoQT0oQXw9MCkrMTJ8MCk+PjJdPj4yXV0oQSl9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dHUoQXw9MCl9LGZ1bmN0aW9uKEEpe3R1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtpc1s1MTEmYXJbYXJbKEE9KEF8PTApKzEyfDApPj4yXT4+Ml1dKEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7KGZ1bmN0aW9uKEEpeyhmdW5jdGlvbihBKXtpZigoMHxhclszNzU4OTIrKEF8PTApPj4yXSk8PTApcmV0dXJuOyFmdW5jdGlvbihBKXt2YXIgZSxyLGksZj0wO3tpZihnYihlPTQyMCsoQXw9MCl8MCksdHJbQT4+MF09MSxaYigpLG1iKHI9QSs0NDh8MCksISgwPCgwfGFyWyhpPUErMTU2fDApPj4yXSkpKXJldHVybiBaQSgwfGUpLHNBKDB8cik7Zj0wfWZvcig7dkEoMHxhcltBKzI4KyhmPDwyKT4+Ml0sMCksZj1mKzF8MCwoMHxmKTwoMHxhcltpPj4yXSk7KTtaQSgwfGUpLHNBKDB8cil9KEErMzc1Mzk2fDApfSkoQXw9MCksMHxBJiZpc1s1MTEmYXJbNCsoMHxhcltBPj4yXSk+PjJdXShBKTtpZihBPTB8YXJbMTQxNTRdLGFyWzE0MTU0XT1BLTEsKDB8KEE9QSstMXwwKSk8MClyZXR1cm4gYXJbMTQxNTRdPTErKDB8YXJbMTQxNTRdKSxBPTEyO2lmKDB8QSlyZXR1cm4gQT0wO3FhKCksQT0wfSkoMHxhclsoQXw9MCk+PjJdKSxBJiZ2dShBKX0sTWUsZnVuY3Rpb24oQSl7TWUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpezB9LGZ1bmN0aW9uKEEpe3Z1KEF8PTApfSxmdW5jdGlvbihBKXswfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7YXJbKHQ9KEF8PTApKzR8MCk+PjJdPTEsbGEoMHxhclsobj1BKzEyfDApPj4yXSxBKSxvPTB8YXJbbj4+Ml0sdT0odz0wfGFyW28rNTgyMD4+Ml0pKy0xfDAsaT0xPDwoYj0wfGFyW28rNTgwND4+Ml0pLGw9QSsyNHwwLGJhKG8sQSx1LDB8YXJbKGY9QSs4fDApPj4yXSwwfGFyW2w+PjJdKSwwPCgwfChvPTB8YXJbZj4+Ml0pKSYmKGJhKDB8YXJbbj4+Ml0sQSx1LG8rLTF8MCwwfGFyW2w+PjJdKSxvPTB8YXJbZj4+Ml0pLGE9bysxfDAsYz0wfGFyW24+PjJdLCgwfGEpPCgwfGFyW2MrNTgyOD4+Ml0pJiYoYmEoYyxBLHUsYSwwfGFyW2w+PjJdKSxvPTB8YXJbZj4+Ml0pLHI9QSsxNnwwLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYoYz0oMHwoYz0wfGFyWyhlfD0wKSsyOD4+Ml0pKTwoMHxpKT9jOmksMSZyfDAmJnNyKDM2NzY1LDM2NjYzLDUzNSwzNjc4MCksMSZjfDAmJnNyKDM2Nzk2LDM2NjYzLDUzNiwzNjc4MCksbj0oNysoMHxhcltBKzU3NjA+PjJdKXwwKS84fDAscz0oNysoMHxhcltBKzU3Njg+PjJdKXwwKS84fDAsKDB8KGk9MHxhclsodD1lKzQwfDApPj4yXSkpIT0oMHwoZj0wfGFyWyhvPUErNDB8MCk+PjJdKSkpe2lmKCgwfHIpPCgwfGMpJiYobD1BKzR8MCx1PWUrNHwwLGI9ZSsyNHwwLGE9MHxicihuLHIpLGhiKDB8KGY9KDB8YXJbbD4+Ml0pKygwfGJyKGEsZikpfDApLDB8KGE9KDB8YXJbdT4+Ml0pKygwfGJyKGEsaSkpfDApLDB8YnIoMHxhcltiPj4yXSxuKSksKDB8KGE9cisxfDApKTwoMHxjKSkpZm9yKGk9YTthPTB8YnIoaSxuKSxoYigwfChmPSgwfGFyW2w+PjJdKSsoMHxicihhLDB8YXJbbz4+Ml0pKXwwKSwwfChhPSgwfGFyW3U+PjJdKSsoMHxicihhLDB8YXJbdD4+Ml0pKXwwKSwwfGJyKDB8YXJbYj4+Ml0sbikpLCgwfChpPWkrMXwwKSk8KDB8Yyk7KTt9ZWxzZSBoYigwfChiPSgwfGFyW0ErND4+Ml0pKygwfGJyKDB8YnIobixyKSxpKSl8MCksKDB8YXJbZSs0Pj4yXSkrKDB8YnIoMHxicihpLHIpLG4pKXwwLDB8YnIoMHxicihuLGMtcnwwKSxpKSk7aWYoaT0oMHxyKS8oMHwoYT0wfGFyW2UrNTc4ND4+Ml0pKXwwLGE9KDB8YykvKDB8YSl8MCwwfGFyW2UrMjA+PjJdKXtpZigoMHwoZj0wfGFyWyhjPWUrNDR8MCk+PjJdKSk9PSgwfChuPTB8YXJbKHI9QSs0NHwwKT4+Ml0pKSlyZXR1cm4gdT0wfGJyKGkscyksbD0wfGJyKHUsZiksYj0wfGJyKGEtaXwwLHMpLGhiKCgwfGFyW0ErOD4+Ml0pK2x8MCwoMHxhcltlKzg+PjJdKStsfDAsMHxicihiLGYpKSxzPTB8YXJbcj4+Ml0sdT0wfGJyKHUscyksaGIoKDB8YXJbQSsxMj4+Ml0pK3V8MCwoMHxhcltlKzEyPj4yXSkrdXwwLDB8YnIoYixzKSk7aWYoISgoMHxhKTw9KDB8aSkpKWZvcihsPUErOHwwLHU9ZSs4fDAsYj1lKzMyfDAsbz1BKzEyfDAsdD1lKzEyfDA7ZT0wfGJyKGkscyksaGIoMHwobj0oMHxhcltsPj4yXSkrKDB8YnIoZSxuKSl8MCksMHwoQT0oMHxhclt1Pj4yXSkrKDB8YnIoZSxmKSl8MCksMHxicigwfGFyW2I+PjJdLHMpKSxoYigwfChBPSgwfGFyW28+PjJdKSsoMHxicihlLDB8YXJbcj4+Ml0pKXwwKSwwfChlPSgwfGFyW3Q+PjJdKSsoMHxicihlLDB8YXJbYz4+Ml0pKXwwKSwwfGJyKDB8YXJbYj4+Ml0scykpLCgwfChpPWkrMXwwKSkhPSgwfGEpOyluPTB8YXJbcj4+Ml0sZj0wfGFyW2M+PjJdfX0oMHxhclsoZT1BKzIwfDApPj4yXSwwfGFyW3I+PjJdLG88PGIsbysxPDxiKSxvPTB8YXJbbj4+Ml07QTpkb3tpZigwPCgwfGFyW28rNTgyMD4+Ml0pKXtoPTA7ZG97aWYoYj0wfGFyW2Y+PjJdLGE9KDB8YnIoMHxhcltvKzEwMzUyPj4yXSxiKSkraHwwLGE9MHxsclsoMHxhcltvKzEwMzQwPj4yXSkrKDI0KmF8MCkrMj4+MV0sYz0wfGFyW28rNDg+PjJdLGE+Pj4wPj0oMHxhcltvKzUyPj4yXSktYz4+Mj4+PjApYnJlYWsgQTtpZighKGs9MHxhcltjKyhhPDwyKT4+Ml0pKWJyZWFrIEE7ZG97aWYoMHx0cltrKzMyNT4+MF0pe2lmKGE9MHxhcltyPj4yXSxsPTB8YXJbYSs0Pj4yXSxhPTB8YXJbYSs0MD4+Ml0sYz0wfGFyW2U+PjJdLHU9MHxhcltjKzQ+PjJdLGM9MHxhcltjKzQwPj4yXSw4PCgwfGFyW28rNTc2MD4+Ml0pKXtSYShvLGgsYixrLDAsaSxpLGwsYSx1LGMpO2JyZWFrfU5hKG8saCxiLGssMCxpLGksbCxhLHUsYyk7YnJlYWt9fXdoaWxlKDApO2Rve2lmKDB8dHJbayszMjY+PjBdKXtpZihjPTB8YXJbbj4+Ml0scz0oMHxpKS8oMHxhcltjKzU3ODA+PjJdKXwwLGQ9KDB8aSkvKDB8YXJbYys1Nzg0Pj4yXSl8MCxsPTB8YXJbZj4+Ml0sYT0wfGFyW3I+PjJdLHU9MHxhclthKzg+PjJdLGE9MHxhclthKzQ0Pj4yXSxvPTB8YXJbZT4+Ml0sYj0wfGFyW28rOD4+Ml0sbz0wfGFyW28rNDQ+PjJdLCg4PCgwfGFyW2MrNTc2OD4+Ml0pP1JhOk5hKShjLGgsbCxrLDEscyxkLHUsYSxiLG8pLHU9MHxhcltuPj4yXSxiPTB8YXJbZj4+Ml0sYT0wfGFyW3I+PjJdLGM9MHxhclthKzEyPj4yXSxhPTB8YXJbYSs0ND4+Ml0sbz0wfGFyW2U+PjJdLGw9MHxhcltvKzEyPj4yXSxvPTB8YXJbbys0ND4+Ml0sODwoMHxhclt1KzU3Njg+PjJdKSl7UmEodSxoLGIsaywyLHMsZCxjLGEsbCxvKTticmVha31OYSh1LGgsYixrLDIscyxkLGMsYSxsLG8pO2JyZWFrfX13aGlsZSgwKTtoPWgrMXwwLG89MHxhcltuPj4yXX13aGlsZSgoMHxoKTwoMHxhcltvKzU4MjA+PjJdKSl9fXdoaWxlKDApO2lmKCEoMDwoMHx3KSkpcmV0dXJuIHc9byxhclt0Pj4yXT0zLHZvaWQgdWEodyxBKTtmb3IoYT0wO1RuKCgwfGFyW28rMTA1MjQ+PjJdKSsoODAqKCgwfGJyKDB8YXJbZj4+Ml0sMHxhcltvKzU4MjA+PjJdKSkrYXwwKXwwKXwwLDQpLGE9YSsxfDAsbz0wfGFyW24+PjJdLCgwfGEpIT0oMHx3KTspO2FyW3Q+PjJdPTMsdWEobyxBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmPTAsbj0wLHQ9MCxvPTA7ZT0wfGFyWyhBfD0wKSsyMD4+Ml0scj0wfGFyWyhuPTE4NTk2K2V8MCk+PjJdLGFyWyhpPUErNHwwKT4+Ml09MSxsYShyLEEpLG49MHxhcltuPj4yXSx0PTB8YXJbNCtlPj4yXSxmPTB8YXJbbis1ODM2Pj4yXSxvPTB8YXJbbis1ODIwPj4yXSwoMHx0KTwoMHxmKSYmKGY9MHxhclsoMHxhcltuKzEwMjg0Pj4yXSkrKHQ8PDIpPj4yXSksYXJbZT4+Ml09Zixhcls4K2U+PjJdPSgwfGYpJSgwfG8pfDAsYXJbMTIrZT4+Ml09KDB8ZikvKDB8byl8MCxmPUErOHwwO2Rve2lmKDB8dHJbZj4+MF0pe2lmKCEoMHxEYShlKSkpcmV0dXJuIGFyW2k+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZT4+Ml0pfDAsMSksdm9pZCB1YShyLEEpfWVsc2V7aWYobj0wfGFyWzE4NjAwK2U+PjJdLCh0PTB8YXJbbis3OTY+PjJdKT4+PjA8Myl7aHQoMTg1ODArZXwwLHQsMHxhcltuKzc5Mj4+Ml0pLHRyWyhvPTE4NTg4K2V8MCk+PjBdPTAsdHJbbysxPj4wXT0wLHRyW28rMj4+MF09MCx0cltvKzM+PjBdPTA7YnJlYWt9c3IoMzkyMTEsMzkyNDIsMTUwOCwzOTI1MSl9fXdoaWxlKDApO3R0KDE4NTU2K2V8MCksSmEoZSwwLDAhPSgwfHRyW2Y+PjBdKSksYXJbaT4+Ml09MyxVbig0NCsoMHxhclsxODYwOCtlPj4yXSl8MCwxKSx1YShyLEEpfSxmdW5jdGlvbihBKXt2dShBfD0wKX0sZnVuY3Rpb24oQSl7dmFyIGUscixpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKGY9MHxhclsoQXw9MCkrMTY+PjJdLG49MHxhclsobD0xODU5NitmfDApPj4yXSxyPTB8YXJbKGk9NTgyMCtufDApPj4yXSxhclsodD1BKzR8MCk+PjJdPTEsbGEobixBKSxsPTB8YXJbbD4+Ml0sYz0wfGFyWzQrZj4+Ml0sYT0wfGFyW2wrNTgzNj4+Ml0sdT0wfGFyW2wrNTgyMD4+Ml0sKDB8Yyk8KDB8YSkmJihhPTB8YXJbKDB8YXJbbCsxMDI4ND4+Ml0pKyhjPDwyKT4+Ml0pLGFyW2Y+PjJdPWEsYXJbKGM9OCtmfDApPj4yXT0oMHxhKSUoMHx1KXwwLGFyWyhsPTEyK2Z8MCk+PjJdPSgwfGEpLygwfHUpfDAsZT0oMHxhKS8oMHxyKXwwLDB8dHJbKGE9QSs4fDApPj4wXSYmISgwfERhKGYpKSl7aWYoMDwoMHxyKSlmb3IoYz0xMDUyNCtufDAsYT0wfGJyKGUsciksbz0wO1RuKCgwfGFyW2M+PjJdKSsoODAqKG8rYXwwKXwwKXwwLDEpLCgwfChvPW8rMXwwKSkhPSgwfHIpOyk7cmV0dXJuIGFyW3Q+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZj4+Ml0pfDAsMSksdm9pZCB1YShuLEEpfXR0KDE4NTU2K2Z8MCksSmEoZiwxLGE9MHx0clthPj4wXT8wPT0oMHx0clsxMisoMHxhclsxODYwMCtmPj4yXSk+PjBdKTowKTtBOmRve2lmKCgwfGFyW2w+PjJdKT09KDB8ZSkmJihiPTB8YXJbaT4+Ml0sbz0wfGFyW2M+PjJdLCgwfG8pPCgwfGIpKSlmb3IodT01ODI4K258MCxjPTB8YnIoZSxyKSxsPTEwNTI0K258MCxhPWI7Oyl7aWYoKDB8byk8KDB8YSkmJigwfGUpPCgwfGFyW3U+PjJdKSYmVG4oKDB8YXJbbD4+Ml0pKyg4MCoobytjfDApfDApfDAsMSksKDB8KG89bysxfDApKT09KDB8YikpYnJlYWsgQTthPTB8YXJbaT4+Ml19fXdoaWxlKDApO2FyW3Q+PjJdPTMsVW4oNDQrKDB8YXJbMTg2MDgrZj4+Ml0pfDAsMSksdWEobixBKX0sZnVuY3Rpb24oQSl7dnUoQXw9MCl9LGZ1bmN0aW9uKEEpe3ZhciBlLHIsaSxmLG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2FyWyhhPShBfD0wKSs0fDApPj4yXT0xLGxhKDB8YXJbKHQ9QSs4fDApPj4yXSxBKSxlPTB8YXJbdD4+Ml0saT0wfGFyWzEwNDcyK2U+PjJdLGQ9KDB8YXJbNTgxMitlPj4yXSkvNHwwLGM9MHxhclsobj1BKzEyfDApPj4yXSxyPTB8YnIoYyxkKSxkPTB8YnIobD1jKzF8MCxkKSxkPSgwfChzPTB8YXJbMTA0NzYrZT4+Ml0pKTwoMHxkKT9zOmQsZj0oaz0wIT0oMHx0clsocz1BKzE2fDApPj4wXSkpPzI6Myx1PShvPTB8YXJbNTgyMCtlPj4yXSktMXwwLGs/YmEoZSxBLHUsKDB8KGs9KDB8YXJbNTgyOCtlPj4yXSktMXwwKSk8KDB8bCk/azpsLDEpOigwPCgwfGMpPyhiYShlLEEsdSxjKy0xfDAsMiksbD0wfGFyW3Q+PjJdLGM9MHxhcltuPj4yXSk6bD1lLGJhKGwsQSx1LGMsMiksYz0xKygwfGFyW24+PjJdKXwwLGw9MHxhclt0Pj4yXSwoMHxjKTwoMHxhcltsKzU4Mjg+PjJdKSYmYmEobCxBLHUsYywyKSksYz0wfGFyW3Q+PjJdLGw9MHxhcltuPj4yXSwwfHRyW3M+PjBdPyhrPTB8WnQoYyxsKSxjPTB8YXJbdD4+Ml0sdT0wfGJyKDB8YXJbYysxMDM1Mj4+Ml0sMHxhcltuPj4yXSksdHJbKDB8YXJbYysxMDM0MD4+Ml0pKygyNCp1fDApKzIxPj4wXT0xJmssayYmKGw9MCE9KDB8dHJbcz4+MF0pLGI9MTEpKTooaz0wfGJyKDB8YXJbYysxMDM1Mj4+Ml0sbCksMHx0clsoMHxhcltjKzEwMzQwPj4yXSkrKDI0Kmt8MCkrMjE+PjBdJiYobD0wLGI9MTEpKTtkb3tpZigxMT09KDB8YikmJihwdChjLGwscixkLDAsaSksYz0wfGFyW3Q+PjJdLGw9MCE9KDB8dHJbcz4+MF0pLCg4PCgwfGFyW2MrNTc2MD4+Ml0pP3l0OkJ0KShjLGwscixkLDAsaSksbD0wfGFyW3Q+PjJdLDB8YXJbbCs1Nzc2Pj4yXSkpe2lmKGM9MCE9KDB8dHJbcz4+MF0pLDg8KDB8YXJbbCs1NzY4Pj4yXSkpe0V0KGwsYyxyLGQsMCxpKTticmVha31YdChsLGMscixkLDAsaSk7YnJlYWt9fXdoaWxlKDApO2lmKGM9MHxhclt0Pj4yXSwhKDA8KDB8bykpKXJldHVybiBrPWMsYXJbYT4+Ml09Myx2b2lkIHVhKGssQSk7Zm9yKGw9MDtUbigoMHxhcltjKzEwNTI0Pj4yXSkrKDgwKigoMHxicigwfGFyW24+PjJdLDB8YXJbYys1ODIwPj4yXSkpK2x8MCl8MCl8MCxmKSxsPWwrMXwwLGM9MHxhclt0Pj4yXSwoMHxsKSE9KDB8byk7KTthclthPj4yXT0zLHVhKGMsQSl9LHNmLGZ1bmN0aW9uKEEpe3NmKEF8PTApLHZ1KEEpfSxrZixmdW5jdGlvbihBKXtrZihBfD0wKSx2dShBKX0sbWYsZnVuY3Rpb24oQSl7bWYoQXw9MCksdnUoQSl9LFhmLFdmLGZ1bmN0aW9uKEEpe1hmKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sZnVuY3Rpb24oQSl7V2YoKEF8PTApKygwfGFyWygwfGFyW0E+PjJdKS0xMj4+Ml0pfDApfSxWZixGZixmdW5jdGlvbihBKXtWZigoQXw9MCkrKDB8YXJbKDB8YXJbQT4+Ml0pLTEyPj4yXSl8MCl9LGZ1bmN0aW9uKEEpe0ZmKChBfD0wKSsoMHxhclsoMHxhcltBPj4yXSktMTI+PjJdKXwwKX0sQW4sZnVuY3Rpb24oQSl7QW4oQXw9MCksdnUoQSl9LGVuLGZ1bmN0aW9uKEEpe2VuKEF8PTApLHZ1KEEpfSxybixmdW5jdGlvbihBKXtybihBfD0wKSx2dShBKX0sbm4sZnVuY3Rpb24oQSl7bm4oQXw9MCksdnUoQSl9LG9uLGZ1bmN0aW9uKEEpe29uKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXswfChBfD0wKSYmaXNbNTExJmFyWzQrKDB8YXJbQT4+Ml0pPj4yXV0oQSl9LGNuLGZ1bmN0aW9uKEEpe2NuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKSx2dShBKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKX0sZnVuY3Rpb24oQSl7bmkoKEF8PTApKzh8MCksYW4oKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApfSxmdW5jdGlvbihBKXthbihBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXthbihBfD0wKX0sZnVuY3Rpb24oQSl7YW4oQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGFuLGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LGZ1bmN0aW9uKEEpe2FuKCksdnUoQXw9MCl9LFFsLGZ1bmN0aW9uKEEpe1FsKEF8PTApLHZ1KEEpfSxEbCxmdW5jdGlvbihBKXtEbChBfD0wKSx2dShBKX0sSmwsZnVuY3Rpb24oQSl7SmwoQXw9MCksdnUoQSl9LFNsLGZ1bmN0aW9uKEEpe1NsKEF8PTApLHZ1KEEpfSxPbCxmdW5jdGlvbihBKXtPbChBfD0wKSx2dShBKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7YW4oKSx2dShBfD0wKX0sb3UsZnVuY3Rpb24oQSl7b3UoKSx2dShBfD0wKX0sSHUsZnVuY3Rpb24oQSl7SHUoKSx2dShBfD0wKX0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7MH0sZnVuY3Rpb24oQSl7SHUoKSx2dShBfD0wKX0sJHUsZnVuY3Rpb24oQSl7JHUoQXw9MCksdnUoQSl9LGZ1bmN0aW9uKEEpeyR1KEF8PTApLHZ1KEEpfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXtIdSgpLHZ1KEF8PTApfSxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx0cltBKzExPj4wXT02LHRyW0E+PjBdPTB8dHJbMzAwMThdLHRyW0ErMT4+MF09MHx0clszMDAxOV0sdHJbQSsyPj4wXT0wfHRyWzMwMDIwXSx0cltBKzM+PjBdPTB8dHJbMzAwMjFdLHRyW0ErND4+MF09MHx0clszMDAyMl0sdHJbQSs1Pj4wXT0wfHRyWzMwMDIzXSx0cltBKzY+PjBdPTB9LGZ1bmN0aW9uKEEpe3ZhciBlOyhBfD0wKSYmKDB8KGU9MHxhcltBKzQ+PjJdKSYmZHUoZSksdnUoQSkpfSxmdW5jdGlvbihBKXt2YXIgZT0wOyhBfD0wKSYmKDB8KGU9MHxhcltBKzEyPj4yXSkmJmR1KGUpLDB8KGU9MHxhcltBKzQ+PjJdKSYmZHUoZSksdnUoQSkpfSxmdW5jdGlvbihBKXt2YXIgZTsoQXw9MCkmJigwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX0sZnVuY3Rpb24oQSl7dmFyIGU9MDsoQXw9MCkmJigwfChlPTB8YXJbQSsxMj4+Ml0pJiZkdShlKSwwfChlPTB8YXJbQSs0Pj4yXSkmJmR1KGUpLHZ1KEEpKX0sZnVuY3Rpb24oQSl7dmFyIGU7KEF8PTApJiYoMHwoZT0wfGFyW0ErND4+Ml0pJiZkdShlKSx2dShBKSl9LGZ1bmN0aW9uKEEpeyhBfD0wKSYmdnUoQSl9LGZ1bmN0aW9uKEEpe3ZhciBlO0F8PTAsZT0wfGFyWzE0ODExXSxhclsxNDgxMV09MStlLGFyW0ErND4+Ml09MStlfSxmdW5jdGlvbihBKXshZnVuY3Rpb24oQSl7dmFyIGUscixpO2U9MHxhcls0KyhBfD0wKT4+Ml0saT0wfGFyW0ErOD4+Ml0scj0oMHxhcltBPj4yXSkrKGk+PjEpfDAsQT0xJmk/MHxhclsoMHxhcltyPj4yXSkrZT4+Ml06ZTtpc1s1MTEmQV0ocil9KDB8YXJbYXJbKEF8PTApPj4yXT4+Ml0pfSxmdW5jdGlvbihBKXswfSxCYyxmdW5jdGlvbihBKXt2YXIgZSxyO3I9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLEJjKEF8PTApLDB8QkEoMHxhclsxNTI4OF0sMCk/anUoNTYyNTcscik6dXI9ZX0sX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2IsX2JdLGZzPVtZYixmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXt2YXIgcixpO0F8PTAsZXw9MCxyPTB8aHUoNCksYXJbcj4+Ml09MCxhcltBPj4yXT1hclsxOTA0XSxhcltBKzQ+PjJdPWFyWzE5MDVdLGFyW0ErOD4+Ml09YXJbMTkwNl0sQT0wfChpPShpPTApfGFyWzE0MTU0XSxhclsxNDE1NF09aSsxLCEoKGkrMXwwKTw9MSl8fChZYSgpLDB8S2EoKSk/KGZ1bmN0aW9uKEEpe3ZhciBlPTAscj0wLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wO2Zvcihhcls4NCsoQXw9MCk+PjJdPTAsYXJbQSsxNjg+PjJdPTAsYXJbQT4+Ml09NzcyMCxmdW5jdGlvbihBKXthclsoQXw9MCk+PjJdPTEsYXJbQSs0Pj4yXT05LGFyW0ErOD4+Ml09MSxhcltBKzEyPj4yXT0xLGFyW0ErMTY+PjJdPTEsYXJbQSsyMD4+Ml09MixhcltBKzI0Pj4yXT0xLGFyW0ErMjg+PjJdPTEsYXJbQSszMj4+Ml09MixhcltBKzM2Pj4yXT0yLGFyW0ErNDA+PjJdPTIsYXJbQSs0ND4+Ml09MixhcltBKzQ4Pj4yXT0zLGFyW0ErNTI+PjJdPTQsYXJbQSs1Nj4+Ml09NSxhcltBKzYwPj4yXT02LGFyW0ErNjQ+PjJdPTcsYXJbQSs2OD4+Ml09OCxhcltBKzcyPj4yXT05LGFyW0ErNzY+PjJdPTEwLGFyW0ErODA+PjJdPTExLGFyW0ErODQ+PjJdPTEyLGFyW0ErODg+PjJdPTEzLGFyW0ErOTI+PjJdPTE0LGFyW0ErOTY+PjJdPTE1LGFyW0ErMTAwPj4yXT0xNixhcltBKzEwND4+Ml09MTcsYXJbQSsxMDg+PjJdPTE4LGFyW0ErMTEyPj4yXT0zLGFyW0ErMTE2Pj4yXT00LGFyW0ErMTIwPj4yXT00LGFyW0ErMTI0Pj4yXT00LGFyW0ErMTI4Pj4yXT0yLGFyW0ErMTMyPj4yXT0zLGFyW0ErMTM2Pj4yXT00LGFyW0ErMTQwPj4yXT01LGFyW0ErMTQ0Pj4yXT02LGFyW0ErMTQ4Pj4yXT03LGFyW0ErMTUyPj4yXT04LGFyW0ErMTU2Pj4yXT05LGFyW0ErMTYwPj4yXT0xMCxhcltBKzE2ND4+Ml09MTEsYXJbQSsxNjg+PjJdPTEyLGFyW0ErMTcyPj4yXT0xMyxhcltBKzE3Nj4+Ml09MTQsYXJbQSsxODA+PjJdPTE1LGFyW0ErMTg0Pj4yXT0xNixhcltBKzE4OD4+Ml09MTcsYXJbQSsyMDQ+PjJdPTgxLGFyW0ErMjEyPj4yXT0xMSxhcltBKzIwOD4+Ml09MTIsYXJbQSsxOTI+PjJdPTgyLGFyW0ErMjAwPj4yXT04MyxhcltBKzE5Nj4+Ml09ODQsYXJbQSsyMTY+PjJdPTg1LGFyW0ErMjIwPj4yXT04NixhcltBKzIyND4+Ml09ODcsYXJbQSsyMjg+PjJdPTg4LGFyW0ErMjMyPj4yXT04OSxhcltBKzIzNj4+Ml09MTMsYXJbQSsyNDA+PjJdPTE0LGFyW0ErMjQ0Pj4yXT0xNSxhcltBKzI0OD4+Ml09MTYsYXJbQSsyNTI+PjJdPTE3LGFyW0ErMjU2Pj4yXT0xOCxhcltBKzI2MD4+Ml09NDcsYXJbQSsyODQ+PjJdPTQ0LGFyW0ErMjg4Pj4yXT00NSxhcltBKzI5Nj4+Ml09NDYsYXJbQSsyOTI+PjJdPTQ3LGFyW0ErMzAwPj4yXT00OCxhcltBKzI2ND4+Ml09MTksYXJbQSsyNjg+PjJdPTIwLGFyW0ErMjcyPj4yXT0yMSxhcltBKzI3Nj4+Ml09MjIsYXJbQSsyODA+PjJdPTIzLGFyW0ErMzA0Pj4yXT05MCxhcltBKzMwOD4+Ml09OTEsYXJbQSszMTI+PjJdPTkyLGFyW0ErMzE2Pj4yXT05MyxhcltBKzMyMD4+Ml09OTQsYXJbQSszMjQ+PjJdPTk1LGFyW0ErMzI4Pj4yXT05NixhcltBKzMzMj4+Ml09OTcsYXJbQSszMzY+PjJdPTk4fShBKzE3MnwwKSxhcltBPj4yXT03Njk2LGZ1bmN0aW9uKEEpe3ZhciBlO2Zvcih0clsoQXw9MCk+PjBdPTAsdHJbQSsxPj4wXT0wLGU9NDgrKEE9QSs0fDApfDA7KChhcltBPj4yXT0wKXwoQT1BKzR8MCkpPCgwfGUpOyk7fShBKzU0OHwwKSxhcltBKzExOTI+PjJdPTAsYXJbQSsxMTk2Pj4yXT0wLGFyW0ErMTIwMD4+Ml09MCxhclsoZT1BKzEyMjh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzE4NDg+PjJdPTAsYXJbQSsxODUyPj4yXT0wLGFyW0ErMTg1Nj4+Ml09MCxhclsoZT1BKzE4ODR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzI1MDQ+PjJdPTAsYXJbQSsyNTA4Pj4yXT0wLGFyW0ErMjUxMj4+Ml09MCxhclsoZT1BKzI1NDB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzMxNjA+PjJdPTAsYXJbQSszMTY0Pj4yXT0wLGFyW0ErMzE2OD4+Ml09MCxhclsoZT1BKzMxOTZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzM4MTY+PjJdPTAsYXJbQSszODIwPj4yXT0wLGFyW0ErMzgyND4+Ml09MCxhclsoZT1BKzM4NTJ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzQ0NzI+PjJdPTAsYXJbQSs0NDc2Pj4yXT0wLGFyW0ErNDQ4MD4+Ml09MCxhclsoZT1BKzQ1MDh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzUxMjg+PjJdPTAsYXJbQSs1MTMyPj4yXT0wLGFyW0ErNTEzNj4+Ml09MCxhclsoZT1BKzUxNjR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzU3ODQ+PjJdPTAsYXJbQSs1Nzg4Pj4yXT0wLGFyW0ErNTc5Mj4+Ml09MCxhclsoZT1BKzU4MjB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzY0NDA+PjJdPTAsYXJbQSs2NDQ0Pj4yXT0wLGFyW0ErNjQ0OD4+Ml09MCxhclsoZT1BKzY0NzZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzcwOTY+PjJdPTAsYXJbQSs3MTAwPj4yXT0wLGFyW0ErNzEwND4+Ml09MCxhclsoZT1BKzcxMzJ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzc3NTI+PjJdPTAsYXJbQSs3NzU2Pj4yXT0wLGFyW0ErNzc2MD4+Ml09MCxhclsoZT1BKzc3ODh8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzg0MDg+PjJdPTAsYXJbQSs4NDEyPj4yXT0wLGFyW0ErODQxNj4+Ml09MCxhclsoZT1BKzg0NDR8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzkwNjQ+PjJdPTAsYXJbQSs5MDY4Pj4yXT0wLGFyW0ErOTA3Mj4+Ml09MCxhclsoZT1BKzkxMDB8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzk3MjA+PjJdPTAsYXJbQSs5NzI0Pj4yXT0wLGFyW0ErOTcyOD4+Ml09MCxhclsoZT1BKzk3NTZ8MCk+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2UrMTY+PjJdPTAsYXJbZSsyMD4+Ml09MCxhcltBKzEwMzc2Pj4yXT0wLGFyW0ErMTAzODA+PjJdPTAsYXJbQSsxMDM4ND4+Ml09MCxhclsoZT1BKzEwNDEyfDApPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltlKzE2Pj4yXT0wLGFyW2UrMjA+PjJdPTAsYXJbQSsxMTAzMj4+Ml09MCxhcltBKzExMDM2Pj4yXT0wLGFyW0ErMTEwNDA+PjJdPTAsYXJbKGU9QSsxMTA2OHwwKT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZSsxNj4+Ml09MCxhcltlKzIwPj4yXT0wLCRhKEErMTEwOTZ8MCksJGEoQSsxNjI2NHwwKSwkYShBKzIxNDMyfDApLCRhKEErMjY2MDB8MCksJGEoQSszMTc2OHwwKSwkYShBKzM2OTM2fDApLCRhKEErNDIxMDR8MCksJGEoQSs0NzI3MnwwKSwkYShBKzUyNDQwfDApLCRhKEErNTc2MDh8MCksJGEoQSs2Mjc3NnwwKSwkYShBKzY3OTQ0fDApLCRhKEErNzMxMTJ8MCksJGEoQSs3ODI4MHwwKSwkYShBKzgzNDQ4fDApLCRhKEErODg2MTZ8MCksZT0wO0lhKEErOTM3ODQrKDQ0MDAqZXwwKXwwKSw2NCE9KDB8KGU9ZSsxfDApKTspO2Zvcihhclsobj1BKzM3NTQwMHwwKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLGFyW24rMTI+PjJdPTAsYXJbbisxNj4+Ml09MCxhcltuKzIwPj4yXT0wLGZ1bmN0aW9uKEEpe3ZhciBlLHI9MDtmb3IoZT00OCsocj04KyhBfD0wKXwwKXwwOygoYXJbcj4+Ml09MCl8KHI9cis0fDApKTwoMHxlKTspO2FyW0E+PjJdPTMwLGFyW0ErND4+Ml09MzB9KEErMzc2MTQ4fDApLGFyW0ErMzc3MjE2Pj4yXT0wLGFyW0ErMzc3MjIwPj4yXT0wLGFyW0ErMzc3MjI0Pj4yXT0wLHRyW0ErNTEyPj4wXT0wLHRyW0ErNTEzPj4wXT0xLHRyW0ErNTE0Pj4wXT0wLHRyW0ErNTMyPj4wXT0wLHRyW0ErNTMzPj4wXT0wLGFyWyhuPUErNTE2fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xLGFyW24rOD4+Ml09LTEsYXJbbisxMj4+Ml09LTEsZT0wfGFyWzQrKG49NzczNik+PjJdLGFyWyh0PUErNTM2fDApPj4yXT1hcltuPj4yXSxhclt0KzQ+PjJdPWUsYXJbQSs1NDQ+PjJdPTAsYXJbQSszNzUzODQ+PjJdPTAsYXJbQSszNzUzODg+PjJdPTAsYXJbQSszNzUzOTI+PjJdPTAsYXJbQSszNzU4OTI+PjJdPTAsYXJbKHQ9QSszNzU4OTZ8MCk+PjJdPTYsYXJbQSszNzU5MDA+PjJdPTEwMCxhcltBKzM3NTkwND4+Ml09NixhcltBKzM3NTkxMj4+Ml09NixhcltBKzM3NTkwOD4+Ml09MTAwLGU9Njs7KXtpZigoMHwoaT0oMHwobj0xMDAqZXwwKSkvN3wwKSk8PSgwfChuPShuKzEwMHwwKS83fDApKSlmb3IoZj1uLWl8MCxyPWk7YT0wfGFyW3Q+PjJdLGU9KG89KDB8YSk8KDB8ZSkpP2E6ZSx0cltBKzM3NTkxNisocjw8MSk+PjBdPWUsdHJbQSszNzU5MTYrKHI8PDEpKzE+PjBdPW8/MTAwOjI1NSYoKDEwMCooci1pfDApfDApLygwfGYpfDApLCgwfHIpPCgwfG4pOylyPXIrMXwwO2lmKGFyW0ErMzc2MTIwKyhlPDwyKT4+Ml09biwhKDA8KDB8ZSkpKWJyZWFrO2U9ZSstMXwwfWFyWyhhPUErMzc2MjA0fDApPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsYXJbYSsxMj4+Ml09MCxhclthKzE2Pj4yXT0wLGFyW2ErMjA+PjJdPTAsdHJbQSszNzYyMDg+PjBdPTEsYXJbYT4+Ml09LTF9KGk9MHxodSgzNzcyMzIpKSwwfGkpOihhclsxNDE1NF09KDB8YXJbMTQxNTRdKS0xLChpPTApfGkpKSxOZShhcltyPj4yXT1BLDcsMSksTmUoQSw4LDEpLGFyW2U+PjJdPXJ9LGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByLGksZj0wLG49MDtpZih1cj0oaT11cikrMTEyfDAscj0oZj1pKSs0fDAsYXJbZj4+Ml09YXJbZSs4Pj4yXSxCaShyLDM5MDQ1LGYpLGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLDQyOTQ5NjcyNzk8KGU9KGFyW0ErOD4+Ml09MCl8VmMocikpPj4+MCYmcHUoKSxlPj4+MDwxMSl7aWYoISh0cltBKzExPj4wXT1lKSlyZXR1cm4gdHJbKGY9KGY9QSkrZXwwKT4+MF09MCx2b2lkKHVyPWkpfWVsc2UgZj0wfGh1KG49ZSsxNiYtMTYpLGFyW0E+PjJdPWYsYXJbQSs4Pj4yXT0tMjE0NzQ4MzY0OHxuLGFyW0ErND4+Ml09ZSxBPWY7aGIoMHxBLDB8ciwwfGUpLHRyWyhuPShuPUEpK2V8MCk+PjBdPTAsdXI9aX0sZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wLG49MDtpZih1cj0oaT11cikrMTEyfDAscj0oZj1pKSs4fDAsbj0wfGFyWyhlfD0wKSsxNj4+Ml0sYXJbZj4+Ml09YXJbZSsxMj4+Ml0sYXJbZis0Pj4yXT1uLEJpKHIsMzkxOTEsZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsobj0obj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBuPTB8aHUoZj1lKzE2Ji0xNiksYXJbQT4+Ml09bixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fGYsYXJbQSs0Pj4yXT1lLEE9bjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzExMnwwLHI9KGY9aSkrNHwwLGFyW2Y+PjJdPWFyW2UrMTI+PjJdLEJpKHIsMzk2NjUsZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsoZj0oZj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe0F8PTAsZXw9MDt2YXIgcixpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzExMnwwLHI9KGY9aSkrNHwwLGFyW2Y+PjJdPWFyW2UrMTI+PjJdLEJpKHIsNDgwODksZiksYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoZT0oYXJbQSs4Pj4yXT0wKXxWYyhyKSk+Pj4wJiZwdSgpLGU+Pj4wPDExKXtpZighKHRyW0ErMTE+PjBdPWUpKXJldHVybiB0clsoZj0oZj1BKStlfDApPj4wXT0wLHZvaWQodXI9aSl9ZWxzZSBmPTB8aHUobj1lKzE2Ji0xNiksYXJbQT4+Ml09ZixhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1lLEE9ZjtoYigwfEEsMHxyLDB8ZSksdHJbKG49KG49QSkrZXwwKT4+MF09MCx1cj1pfSxmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXtlfD0wLGpiWzEyNyZhclsyNCsoMHxhclsoQXw9MCk+PjJdKT4+Ml1dKEEpLGU9MHx1bihlLDYxMDMyKSxhcltBKzM2Pj4yXT1lLGU9MSYoMHxqYlsxMjcmYXJbMjgrKDB8YXJbZT4+Ml0pPj4yXV0oZSkpLHRyW0ErNDQ+PjBdPWV9LGZ1bmN0aW9uKEEsZSl7ZXw9MCxqYlsxMjcmYXJbMjQrKDB8YXJbKEF8PTApPj4yXSk+PjJdXShBKSxlPTB8dW4oZSw2MTAyNCksYXJbQSszNj4+Ml09ZSxlPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW2U+PjJdKT4+Ml1dKGUpKSx0cltBKzQ0Pj4wXT1lfSxmdW5jdGlvbihBLGUpe0F8PTA7dmFyIHI9MCxpPTA7aT0wfHVuKGV8PTAsNjEwMzIpLGFyWyhyPUErMzZ8MCk+PjJdPWksaT0wfGpiWzEyNyZhclsyNCsoMHxhcltpPj4yXSk+PjJdXShpKSxhclsoZT1BKzQ0fDApPj4yXT1pLHI9MHxhcltyPj4yXSxyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIpKSx0cltBKzUzPj4wXT1yLDg8KDB8YXJbZT4+Ml0pJiZ0aSgpfSxmdW5jdGlvbihBLGUpe0F8PTA7dmFyIHI9MCxpPTA7aT0wfHVuKGV8PTAsNjEwMjQpLGFyWyhyPUErMzZ8MCk+PjJdPWksaT0wfGpiWzEyNyZhclsyNCsoMHxhcltpPj4yXSk+PjJdXShpKSxhclsoZT1BKzQ0fDApPj4yXT1pLHI9MHxhcltyPj4yXSxyPTEmKDB8amJbMTI3JmFyWzI4KygwfGFyW3I+PjJdKT4+Ml1dKHIpKSx0cltBKzUzPj4wXT1yLDg8KDB8YXJbZT4+Ml0pJiZ0aSgpfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe3ZhciByO2V8PTAscj11cj0oZT11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsb2koQSx0cltBKzExPj4wXT0xLDQ1KSxRZihBKzF8KHRyW3I+PjBdPTApLHIpLHVyPWV9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXt2YXIgcjtlfD0wLHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLG9pKEEsdHJbQSsxMT4+MF09MSw0NSksUWYoQSsxfCh0cltyPj4wXT0wKSxyKSx1cj1lfSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXt0clsoQXw9MCk+PjBdPTIsdHJbQSsxPj4wXT0zLHRyW0ErMj4+MF09MCx0cltBKzM+PjBdPTR9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7dmFyIHI7ZXw9MCxyPXVyPShlPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCxncihBLHRyW0ErOCszPj4wXT0xLDQ1KSxsbihBKzR8KGFyW3I+PjJdPTApLHIpLHVyPWV9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe3RyWyhBfD0wKT4+MF09Mix0cltBKzE+PjBdPTMsdHJbQSsyPj4wXT0wLHRyW0ErMz4+MF09NH0sZnVuY3Rpb24oQSxlKXtmb3IoZXw9MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLGU9YXJbQSs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbQSsoZTw8Mik+PjJdPTApfSxmdW5jdGlvbihBLGUpe2ZvcihlfD0wLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsZT1hcltBKzg+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhcltBKyhlPDwyKT4+Ml09MCl9LGZ1bmN0aW9uKEEsZSl7Zm9yKGV8PTAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKX0sZnVuY3Rpb24oQSxlKXt2YXIgcjtlfD0wLHI9dXI9KGU9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLGdyKEEsdHJbQSs4KzM+PjBdPTEsNDUpLGxuKEErNHwoYXJbcj4+Ml09MCksciksdXI9ZX0sZnVuY3Rpb24oQSxlKXt0clsoQXw9MCk+PjBdPTIsdHJbQSsxPj4wXT0zLHRyW0ErMj4+MF09MCx0cltBKzM+PjBdPTR9LGZ1bmN0aW9uKEEsZSl7dHJbKEF8PTApPj4wXT0yLHRyW0ErMT4+MF09Myx0cltBKzI+PjBdPTAsdHJbQSszPj4wXT00fSxmdW5jdGlvbihBLGUpe30sZnVuY3Rpb24oQSxlKXt9LGZ1bmN0aW9uKEEsZSl7eXUoQXw9MCwoZXw9MCkrMTJ8MCl9LGZ1bmN0aW9uKEEsZSl7ZXw9MDt2YXIgcixpLGYsbj0wO3I9dXI9KGY9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsNDI5NDk2NzI3OTwoaT0oYXJbQSs4Pj4yXT0wKXxZZig1NTc0NSkpPj4+MCYmcHUoKSxpPj4+MDwxMT8odHJbQSsxMT4+MF09aSxlPUEpOihlPTB8aHUobj0xNitpJi0xNiksYXJbQT4+Ml09ZSxhcltBKzg+PjJdPS0yMTQ3NDgzNjQ4fG4sYXJbQSs0Pj4yXT1pKSx3ZihlLDU1NzQ1LGkpLFFmKGUraXwodHJbcj4+MF09MCksciksdXI9Zn0sZnVuY3Rpb24oQSxlKXtlfD0wO3ZhciByLGksZixuPTA7cj11cj0oZj11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCw0Mjk0OTY3Mjc5PChpPShhcltBKzg+PjJdPTApfFlmKDU1NzM5KSk+Pj4wJiZwdSgpLGk+Pj4wPDExPyh0cltBKzExPj4wXT1pLGU9QSk6KGU9MHxodShuPTE2K2kmLTE2KSxhcltBPj4yXT1lLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8bixhcltBKzQ+PjJdPWkpLHdmKGUsNTU3MzksaSksUWYoZStpfCh0cltyPj4wXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe3l1KEF8PTAsKGV8PTApKzE2fDApfSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MDtyPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLDEwNzM3NDE4MDc8KGk9KGFyW0ErOD4+Ml09MCl8TXIoMTcyMDQpKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K2kmLTQpPj4+MCkpe249MHxodShlPDwyKSxhcltBPj4yXT1uLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPWk7YnJlYWt9bEEoKX1lbHNlIHRyW0ErOCszPj4wXT1pLG49QX13aGlsZSgwKTtaZihuLDE3MjA0LGkpLGxuKG4rKGk8PDIpfChhcltyPj4yXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG49MDtyPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhclsoQXw9MCk+PjJdPTAsYXJbQSs0Pj4yXT0wLDEwNzM3NDE4MDc8KGk9KGFyW0ErOD4+Ml09MCl8TXIoMTcxODApKT4+PjAmJnB1KCk7ZG97aWYoMjw9aT4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K2kmLTQpPj4+MCkpe249MHxodShlPDwyKSxhcltBPj4yXT1uLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPWk7YnJlYWt9bEEoKX1lbHNlIHRyW0ErOCszPj4wXT1pLG49QX13aGlsZSgwKTtaZihuLDE3MTgwLGkpLGxuKG4rKGk8PDIpfChhcltyPj4yXT0wKSxyKSx1cj1mfSxmdW5jdGlvbihBLGUpe2V8PTAsaXNbNTExJihBfD0wKV0oZSl9LGZ1bmN0aW9uKEEsZSl7QXw9MCxlfD0wO3ZhciByLGk9MCxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShyPXVyKSsxNnwwLHU9KGw9cikrMTJ8MCxpPTB8bkEoKSxhclt1Pj4yXT1pLCFlKXJldHVybiBhcltBPj4yXT1pLGFyW3U+PjJdPTAsaUEoKHU9MCl8dSksdm9pZCh1cj1yKTtpZihzbChsLDQwKygwfGFyW2U+PjJdKXwwKSxhPShvPShmPTB8YXJbKHQ9bCs0fDApPj4yXSktKGk9MHxhcltsPj4yXSl8MCk+PjMsMHwobj1pKSl7aWYoKDB8ZikhPSgwfG4pKXtmb3IoO2k9ZistOHwwLGFyW3Q+PjJdPWksKGY9MHxhcltmKy00Pj4yXSkmJihkdShmKSxpPTB8YXJbdD4+Ml0pLCgwfGkpIT0oMHxuKTspZj1pO2k9MHxhcltsPj4yXX12dShpKX1pZigoMHxvKTw4KXJldHVybiBhcltBPj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGlBKCh1PTApfHUpLHZvaWQodXI9cik7aWYoIShjPTB8eWMobz4+PjEpKSlyZXR1cm4gYz0wfGh1KDEyKSxhcltjPj4yXT02LGFyW2MrND4+Ml09MWUzLGFyW2w+PjJdPWMsbD0wfGNBKDEzOTIsMHxsKSxhcltBPj4yXT1sLHU9MHxhclt1Pj4yXSxpQSgwfHUpLHZvaWQodXI9cik7aWYoc2wobCw0MCsoMHxhcltlPj4yXSl8MCksZj0wfGFyWyhvPWwrNHwwKT4+Ml0sdD1pPTB8YXJbbD4+Ml0sZT0wPCgwfChhPSgwfChlPWYtaT4+MykpPCgwfGEpP2U6YSkpKWZvcihuPTA7YXJbYysobjw8Mik+PjJdPWFyWzIwKygwfGFyW3QrKG48PDMpPj4yXSk+PjJdLCgwfChuPW4rMXwwKSk8KDB8YSk7KTtpZigwfGkpe2lmKCgwfGYpIT0oMHx0KSl7Zm9yKDtpPWYrLTh8MCxhcltvPj4yXT1pLChmPTB8YXJbZistND4+Ml0pJiYoZHUoZiksaT0wfGFyW28+PjJdKSwoMHxpKSE9KDB8dCk7KWY9aTtpPTB8YXJbbD4+Ml19dnUoaSl9aWYoIWEpcmV0dXJuIEJjKGMpLGFyW0E+PjJdPWFyW3U+PjJdLGFyW3U+PjJdPTAsaUEoKHU9MCl8dSksdm9pZCh1cj1yKTtpZihhcltsPj4yXT0wLGUpZm9yKGk9MDtkbCh1LGwsYysoaTw8Mil8MCksaT0xKygwfGFyW2w+PjJdKXwwLCgwfChhcltsPj4yXT1pKSk8KDB8YSk7KTtCYyhjKSxhcltBPj4yXT1hclt1Pj4yXSxhclt1Pj4yXT0wLGlBKCh1PTApfHUpLHVyPXJ9LGZ1bmN0aW9uKEEsZSl7ZXw9MCxpc1s1MTEmKEF8PTApXShlKX0sZnVuY3Rpb24oQSxlKXtBfD0wO3ZhciByLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHI9KDB8KGV8PTApKS8yfDAsISgoMHxlKTw9MSkpe2k9ZSstMXwwLGY9MDtkb3tmb3IodD0wfGJyKGYsZSksbz1pKygwfGJyKGktZnwwLGUpKXwwLG49MDthPUErKG8tbjw8MSl8MCxjPTB8b3JbKGw9QSsobit0PDwxKXwwKT4+MV0sb3JbbD4+MV09MHxvclthPj4xXSxvclthPj4xXT1jLCgwfChuPW4rMXwwKSkhPSgwfGUpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKTwoMHxyKSl9fSxZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYixZYl0sbnM9W1FiLEhBLExBLGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDt1cj0odD11cikrMzJ8MCxmPXQsbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLGE9MHxhcltlKzQ0Pj4yXSxpPTB8YXJbZSs0OD4+Ml07QTpkb3tpZigoMHxhKT09KDB8aSkpbz1BKzh8MCxsPTg7ZWxzZSBmb3IoYz0obz1BKzh8MCkrMTF8MDs7KXtpZih1PTB8YXJbYT4+Ml0sbnNbMTI3JmFyWzEyKygwfGFyW3U+PjJdKT4+Ml1dKEEsdSxyKSwwfGFyW0E+PjJdKWJyZWFrIEE7aWYoKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLCgwfChhPWErOHwwKSk9PSgwfGkpKXtsPTg7YnJlYWt9fX13aGlsZSgwKTs4PT0oMHxsKSYmKGw9MHxhclsoYz01NjU5MikrND4+Ml0sYXJbKHU9QSk+PjJdPWFyW2M+PjJdLGFyW3UrND4+Ml09bCx5dShvLDU2NjAwKSksS0EoZixlLHIsbiksdXI9KDA8PSgwfHRyWyhvPWYrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW28+PjJdKSx0KX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7dXI9KGY9dXIpKzMyfDAsaT1mKzEyfDAsbz1mLHQ9MHxhclsobj1jPShlfD0wKSs4fDApPj4yXSxuPTB8YXJbbis0Pj4yXTtkb3tpZigwPT0oMHx0KSYwPT0oMHxuKSlmb3IoZT1yOyhhclsoYj1lKzE2fDApPj4yXT0wKSE9KDB8KGU9KGFyW2IrND4+Ml09MCl8YXJbZSs4Pj4yXSkpOyk7ZWxzZSBpZigwfENBKHIsZT0wfG9iKDB8dCwwfG4sMHxhclsoYT1lKzE2fDApPj4yXSwwKSxuPUQpKXtpZigwPG4+Pj4wfDA9PSgwfG4pJjIxNDc0ODM2NDc8ZT4+PjApcmV0dXJuIGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxvbyhBLDIsMTAxLG8pLDA8PSgwfHRyW28rMTE+PjBdKXx8dnUoMHxhcltvPj4yXSksdm9pZCh1cj1mKTtpZihlPTB8YXJbcj4+Ml0sKHQ9MD09KDB8KG49MHxhcltyKzQ+PjJdKSkpfHxidShuKSxiPTB8YXJbKHU9Yyk+PjJdLHU9MHxhclt1KzQ+PjJdLGw9MHxhclthPj4yXSxvPTB8YXJbZT4+Ml0sYT0wfGFyW28rMjA+PjJdLG89MHxqYlsxMjcmYXJbbys4Pj4yXV0oZSksYz1ELGM9MHx0YigwfChsPTB8b2IoMHxiLDB8dSwwfGwsMCkpLDB8RCwwfG8sMHxjKSx4Yls2MyZhXShlLGMsRCksdClicmVhaztkdShuKTticmVha319d2hpbGUoMCk7MHx0cltyKzI0Pj4wXT8oYXJbaT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLG9vKEEsMiwxMDAsaSksKDB8dHJbMTEraT4+MF0pPDAmJnZ1KDB8YXJbaT4+Ml0pKToodT0wfGFyWyhsPTU2NTkyKSs0Pj4yXSxhclsoYj1BKT4+Ml09YXJbbD4+Ml0sYXJbYis0Pj4yXT11LHl1KEErOHwwLDU2NjAwKSksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTA7aWYodXI9KGE9dXIpKzE2MHwwLGY9YSsxMzZ8MCx0PShuPWEpKzU2fDAsbz1uKzR8MCxhcltuPj4yXT0yOTIsYXJbdD4+Ml09MzEyLEpmKG4rNTZ8MCxvKSxhcltuKzEyOD4+Ml09MCxhcltuKzEzMj4+Ml09LTEsYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LFNmKG8pLGFyW28+PjJdPTQzNDAsYXJbKGk9biszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbbis1Mj4+Ml09MTYsYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLFhlKG8sZiksKDB8dHJbMTErZj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEhBKGYsZSxyKSxXZShuLChzPShkPTB8dHJbKGs9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLHM/MHxhcls0K2Y+PjJdOjI1NSZkKSwoMHx0cltrPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGM9MDtXZShuLDE4ODYyLDIpLCgwfChjPWMrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0wfFdlKG4sMTkyMDYsMTMpLGs9MHxhcltlKzU2Pj4yXSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbKHU9MTErZnwwKT4+MF09NCx0cls0K2Y+PjBdPTAsdHJbZj4+MF09az4+PjI0LHRyWzErZj4+MF09az4+PjE2LHRyWzIrZj4+MF09az4+PjgsdHJbMytmPj4wXT1rLGw9MHxXZSgwfFdlKGwsZiw0KSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UobCwxOTIyMCwxNSksbD0wfFdlKDB8TGYobCwwfGFyW2UrNjA+PjJdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShsLDE5MjM2LDE5KSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksKDB8KGM9MHxhcltlKzY0Pj4yXSkpIT0oMHwocj0wfGFyW2UrNjg+PjJdKSkpZm9yKGU9MTErZnwwLGI9NCtmfDAscz0xK2Z8MCxkPTIrZnwwLGs9MytmfDAsdT0xO2w9MHxhcltjPj4yXSx1fHwodHJbZj4+MF09NDQsV2UobixmLDEpKSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbZT4+MF09NCx0cltiPj4wXT0wLHRyW2Y+PjBdPWw+Pj4yNCx0cltzPj4wXT1sPj4+MTYsdHJbZD4+MF09bD4+PjgsdHJbaz4+MF09bCxXZShuLGYsNCksKDB8dHJbZT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChjPWMrNHwwKSkhPSgwfHIpOyl1PTA7aWYoV2UobiwzMDA4NiwxKSxJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSszMnwwLHQ9ZixvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksVUEociwwfGFyW2UrNTY+PjJdKSxVQShyLDB8YXJbZSs2MD4+Ml0pLCgwfChuPTB8YXJbZSs2ND4+Ml0pKSE9KDB8KGk9MHxhcltlKzY4Pj4yXSkpKWZvcig7VUEociwwfGFyW24+PjJdKSwoMHwobj1uKzR8MCkpIT0oMHxpKTspO0tBKHQsZSxyLG8pLCgwfHRyWyhuPXQrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLHQ9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW3I+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZih1cj0obj11cikrMzJ8MCxzPW4rMTJ8MCxjPW4sbz0wfEZBKHJ8PTApLGFyW2UrNTY+PjJdPW8sbz0wfEZBKHIpLGFyW2UrNjA+PjJdPW8sdD0wfGFyWyhvPWUrOHwwKT4+Ml0sISgwPChvPTB8YXJbbys0Pj4yXSk+Pj4wfDA9PSgwfG8pJigoYT0wfGFyW2UrMTY+PjJdKSs4fDApPj4+MDx0Pj4+MCkpe2Zvcih0PTB8aHUoNDgpLGFyW2M+PjJdPXQsYXJbYys4Pj4yXT0tMjE0NzQ4MzYwMCxhPTE5MTY3LGU9KG89dCkrKGFyW2MrND4+Ml09MzgpfDA7dHJbbz4+MF09MHx0clthPj4wXSxhPWErMXwwLCgwfChvPW8rMXwwKSk8KDB8ZSk7KTtyZXR1cm4odHJbdCszOD4+MF09MCxvbyhBLDIsMTAxLGMpLDA8PSgwfHRyW2MrMTE+PjBdKSk/dm9pZCh1cj1uKToodnUoMHxhcltjPj4yXSksdm9pZCh1cj1uKSl9bD0wfHNiKDB8KGw9MHxvYigwfChsPTB8dGIoMHx0LDB8bywtOCwtMSkpLDB8RCwwfGEsMCkpLDB8RCwyKSxpPUQsZj1yKzI0fDA7QTpkb3tpZighKDA9PSgwfGwpJjA9PSgwfGkpKSl7dT1lKzY4fDAsYj1lKzcyfDAsdD1lKzY0fDAsYz1lPTA7ZG97aWYoMHx0cltmPj4wXSlicmVhayBBO289MHxGQShyKSxhcltzPj4yXT1vLChhPTB8YXJbdT4+Ml0pPj4+MDwoMHxhcltiPj4yXSk+Pj4wPyhhclthPj4yXT1vLGFyW3U+PjJdPWErNCk6Q2UodCxzKSxlPTB8dGIoMHxlLDB8YywxLDApLGM9RH13aGlsZShjPj4+MDxpPj4+MHwoMHxjKT09KDB8aSkmZT4+PjA8bD4+PjApfX13aGlsZSgwKTswfHRyW2Y+PjBdPyhhcltzPj4yXT0wLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsb28oQSwyLDEwMCxzKSwoMHx0cltzKzExPj4wXSk8MCYmdnUoMHxhcltzPj4yXSkpOihyPTB8YXJbKGI9NTY1OTIpKzQ+PjJdLGFyWyhzPUEpPj4yXT1hcltiPj4yXSxhcltzKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApKSx1cj1ufSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLEdmKCksYmYodCksdm9pZCh1cj1hKTt2dSgwfGFyW2k+PjJdKSxrZihvKSxHZigpLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MDt1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwkQShBLGUsciwtMSksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTAsYj0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwobD0odT0wfHRyWyhiPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixsPzB8YXJbNCtmPj4yXToyNTUmdSksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UobiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShuLDIzMTcwLDEzKSx1PTB8V2UoMHxMZih1LDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UodSwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGI9MHxXZSh1LDIzMTg0LDE0KSxsPTB8YXJbZSs2MD4+Ml0sYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLHRyWyh1PTExK2Z8MCk+PjBdPTQsdHJbNCtmPj4wXT0wLHRyW2Y+PjBdPWw+Pj4yNCx0clsxK2Y+PjBdPWw+Pj4xNix0clsyK2Y+PjBdPWw+Pj44LHRyWzMrZj4+MF09bCxiPTB8V2UoMHxXZShiLGYsNCksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShiLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGIsMjMxOTksNiksV2UoMHxXZShjLChiPShyPTB8dHJbKGw9ZSs3NnwwKSsxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLGI/MHxhcltlKzgwPj4yXToyNTUmciksMzAwODYsMSksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDt1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLFVBKHIsMHxhcltlKzU2Pj4yXSksVUEociwwfGFyW2UrNjA+PjJdKSxVQShyLDB8YXJbZSs2ND4+Ml0pLFVBKHIsMHxhcltlKzY4Pj4yXSksVUEociwwfGFyW2UrNzI+PjJdKSxPQShyLGUrNzZ8MCksS0EoZixlLHIsbiksKDB8dHJbKGU9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG49MCx0PTA7aWYodXI9KGY9dXIpKzMyfDAsdD1mKzIwfDAscUEobj1mLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksbj0wfEZBKHIpLGFyW2UrNTY+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjA+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjQ+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjg+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNzI+PjJdPW4sUkEodCxyKSwoMHx0clsoaT0obj1lKzc2fDApKzExfDApPj4wXSk8MD8odHJbYXJbbj4+Ml0+PjBdPTAsYXJbZSs4MD4+Ml09MCk6KHRyW24+PjBdPTAsdHJbaT4+MF09MCksQ3UobiwwKSxhcltuPj4yXT1hclt0Pj4yXSxhcltuKzQ+PjJdPWFyW3QrND4+Ml0sYXJbbis4Pj4yXT1hclt0Kzg+PjJdLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW2U+PjJdLGFyW3QrND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthclt0Pj4yXT0wLGFyW3QrND4+Ml09MCxhclt0Kzg+PjJdPTAsb28oQSwyLDEwMCx0KSx1cj0oMDw9KDB8dHJbdCsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGw9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLFhlKHQsbCksKDB8dHJbbCsxMT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLExBKGwsZSxyKSxXZShmLCh1PShjPTB8dHJbKGE9bCsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLHU/MHxhcltsKzQ+PjJdOjI1NSZjKSwoMHx0clthPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShmLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0wfFdlKGYsMjI0NjIsOSksV2UoMHxMZih1LDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuPTAsdD0wO3VyPShmPXVyKSszMnwwLG49Zix0PTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksaT0wfGFyW2UrNTY+PjJdO2Rve2lmKDB8dHJbZSszNz4+MF0pVUEocixpKTtlbHNle2lmKGk+Pj4wPDY1NTM2KXtNQShyLDY1NTM1JmkpO2JyZWFrfXNyKDIzMDY1LDE5MTA0LDg5MSwxOTU2Myl9fXdoaWxlKDApO0tBKG4sZSxyLHQpLCgwfHRyWyhlPW4rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLG49MHxhclsocj01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW3I+PjJdLGFyW3QrND4+Ml09bix5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMzJ8MCxuPWkrMjB8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxmPTB8dHJbZSszNz4+MF0/MHxGQShyKTo2NTUzNSYoMHxWQShyKSksYXJbZSs1Nj4+Ml09ZiwhKDB8dHJbcisyND4+MF0pKXJldHVybiByPTB8YXJbKGU9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltlPj4yXSxhcltuKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbbj4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbbis4Pj4yXT0wLG9vKEEsMiwxMDAsbiksdXI9KDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShjPTB8dHJbKGw9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZjKSwoMHx0cltsPj4wXSk8MCYmdnUoMHxhclthPj4yXSksKDB8KGE9MHxhcltlKzU2Pj4yXSkpIT0oMHwobD0wfGFyW2UrNjA+PjJdKSkpe2M9YTtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihlPTB8V2UoZiwyMjg4NSw5KSxlPTB8V2UoMHxMZihlLDB8YXJbYz4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZSwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGU9MHxXZShlLDIyODk1LDIzKSxlPTB8V2UoMHxQZihlLDB8Y3JbYys0Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShlLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0oZT0wfFdlKGUsMjI5MTksMjQpKSsoMHxhclsoMHxhcltlPj4yXSktMTI+PjJdKSs0fDAsYXJbdT4+Ml09LTc1JmFyW3U+PjJdfDgsdT0oZT0wfHhmKGUsMHxvcltjKzY+PjFdKSkrKDB8YXJbKDB8YXJbZT4+Ml0pLTEyPj4yXSkrNHwwLGFyW3U+PjJdPS03NSZhclt1Pj4yXXwyLGU9MHxXZShlLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZSwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGU9MHxXZShlLDIyOTQ0LDE1KSxXZSgwfEtmKGUsMHxhclsodT1jKzh8MCk+PjJdLDB8YXJbdSs0Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoZiwyMjk2MCwxMSksKDB8KGE9MHxhcltjKzE2Pj4yXSkpIT0oMHwoZT0wfGFyW2MrMjA+PjJdKSkpZm9yKDtiPTB8V2UoMHxLZihmLDB8YXJbKGI9YSs4fDApPj4yXSwwfGFyW2IrND4+Ml0pLDE5NTg4LDEpLEtmKGIsMHxhclsodT1hKzE2fDApPj4yXSwwfGFyW3UrND4+Ml0pLDA9PSgwfGFyWyh1PWEpPj4yXSkmMD09KDB8YXJbdSs0Pj4yXSl8fEtmKHU9MHxXZShmLDIyOTcyLDcpLDB8YXJbKGI9YSk+PjJdLDB8YXJbYis0Pj4yXSksV2UoZiwyMDQ0OSwxKSwoMHwoYT1hKzQwfDApKSE9KDB8ZSk7KTtXZShmLDMwMDg2LDEpLGM9YyszMnwwfXdoaWxlKCgwfGMpIT0oMHxsKSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2lmKHVyPShmPXVyKSszMnwwLHA9ZiwoMHwobz0wfGFyWyhrPShlfD0wKSs1NnwwKT4+Ml0pKSE9KDB8KHU9MHxhclsoaD1lKzYwfDApPj4yXSkpKXtuPTA7ZG97aWYoMT09KDB8dHJbbys0Pj4wXSkmJigwfChjPTB8YXJbbysxNj4+Ml0pKSE9KDB8KGw9MHxhcltvKzIwPj4yXSkpKWZvcihhPWM7bj0oMHxhclthKzI4Pj4yXSkrbi0oMHxhclthKzI0Pj4yXSl8MCwoMHwoYT1hKzQwfDApKSE9KDB8bCk7KTtvPW8rMzJ8MH13aGlsZSgoMHxvKSE9KDB8dSkpO2lmKDB8biYmKFVBKHIsbis4fDApLFVBKHIsMTc2ODE4NjIyOCksKDB8KHQ9MHxhcltrPj4yXSkpIT0oMHwoYj0wfGFyW2g+PjJdKSkpKWRve2lmKDE9PSgwfHRyW3QrND4+MF0pJiYoMHwocz0wfGFyW3QrMTY+PjJdKSkhPSgwfChkPTB8YXJbdCsyMD4+Ml0pKSlmb3Iobj1zO3pBKHIsbisyNHwwKSwoMHwobj1uKzQwfDApKSE9KDB8ZCk7KTt0PXQrMzJ8MH13aGlsZSgoMHx0KSE9KDB8YikpfWlmKFo9MHxhclsoYT1yKzEyfDApPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksYXJbZSs2OD4+Ml09YXJbYT4+Ml0sbj0odD0oMjU1JihhPTB8dHJbZSszNz4+MF0pKTwyKT80OjYsKDB8KG89MHxhcltrPj4yXSkpIT0oMHwoaT0wfGFyW2g+PjJdKSkpe3c9ZSs3M3wwLHY9ZSs3NHwwLG09ZSs3NnwwLGc9KGQ9dD8yOjQpKyhrPWE8PDI0Pj4yND8yOjApKyhoPTB8Y3JbZSs3NT4+MF0pKzR8MCx0PWE7ZG97bD1uKzQraCtkK2t8MCxjPWE9MHxhcltvKzE2Pj4yXSxzPTB8YXJbbysyMD4+Ml07ZG97aWYoKDB8YSk9PSgwfHMpKW49bDtlbHNle2lmKHU9MHxjclt3Pj4wXSxiPTB8Y3Jbdj4+MF0sISh0PDwyND4+MjQpKXtuPWcrbisoMHxicigoKHMrLTQwLWN8MCk+Pj4wKS80MHwwLHUrYnwwKSkrdStifDAsdD0wO2JyZWFrfWZvcihjPTB8Y3JbbT4+MF0sbj1sO249dSsoYytuKStifDAsKDB8KGE9YSs0MHwwKSkhPSgwfHMpOyk7fX13aGlsZSgwKTtvPW8rMzJ8MH13aGlsZSgoMHxvKSE9KDB8aSkpfWlmKGpBKHIsbiksS0EocCxlLHIsWiksMDw9KDB8dHJbKG49cCs4fDApKzExPj4wXSkpcmV0dXJuIFo9MHxhclsoWj1yPTU2NTkyKT4+Ml0scj0wfGFyWyhyPXIrNHwwKT4+Ml0sYXJbKGU9cD1BKT4+Ml09WixhclsocD1wKzR8MCk+PjJdPXIseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1mKTt2dSgwfGFyW24+PjJdKSxaPTB8YXJbKFo9cj01NjU5Mik+PjJdLHI9MHxhclsocj1yKzR8MCk+PjJdLGFyWyhlPXA9QSk+PjJdPVosYXJbKHA9cCs0fDApPj4yXT1yLHl1KEE9QSs4fDAsNTY2MDApLHVyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wLFA9MCxMPTAsSz0wLHE9MCwkPTA7aWYodXI9KHQ9dXIpKzM4NHwwLHE9dCsxNDR8MCxsPSgkPXQpKzM0MHwwLGY9dCsxODR8MCxuPXQrMzI4fDAscUEobz10KzM1MnwwLGV8PTAscnw9MCksKDB8dHJbKG89bys4fDApKzExPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksYT0wfFZBKHIpLG89MTwoMjU1JihLPTB8dHJbKGk9ZSszN3wwKT4+MF0pKT8xNSZhOjAsMmU0PCgwfChLPSgyNTUmSyk8Mj82NTUzNSYoMHxWQShyKSk6MHxGQShyKSkpKXJldHVybiBlPSQrNjR8MCxhclsoYz0kKzh8MCk+PjJdPTQ1MjQsYT0kKzEyfDAsYXJbJD4+Ml09MTg4LGFyW2U+PjJdPTIwOCxKZigkKzY0fChhclskKzQ+PjJdPTApLGEpLGFyWyQrMTM2Pj4yXT0wLGFyWyQrMTQwPj4yXT0tMSxhclskPj4yXT00NTA0LGFyW2U+PjJdPTQ1NDQsYXJbYz4+Ml09NDUyNCxTZihhKSxhclthPj4yXT00MzQwLGFyWyhjPSQrNDR8MCk+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxhcltjKzEyPj4yXT0wLGFyWyQrNjA+PjJdPTI0LGFyW3E+PjJdPTAsYXJbcSs0Pj4yXT0wLGFyW3ErOD4+Ml09MCxYZShhLHEpLCgwfHRyW3ErMTE+PjBdKTwwJiZ2dSgwfGFyW3E+PjJdKSxXZSgwfFBmKDB8V2UoMHxQZigwfFdlKG89JCs4fDAsMjI3NTQsMTgpLEspLDIyNzczLDQ0KSwyZTQpLDIyODE4LDcpLEllKGwsYSksb28oQSw2LDFlMyxsKSwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksYXJbJD4+Ml09NDUwNCxhcltlPj4yXT00NTQ0LGFyW28+PjJdPTQ1MjQsYXJbYT4+Ml09NDM0MCwoMHx0cltjKzExPj4wXSk8MCYmdnUoMHxhcltjPj4yXSksa2YoYSksYmYoZSksdm9pZCh1cj10KTtBOmRve2lmKDA8KDB8Sykpe1c9JCs0fDAsST0kKzZ8MCxDPSQrOHwwLHg9KDY1NTM1JmEpPj4+NCYyNTUsRj0xMitmfDAsUj00K2Z8MCxOPUc9NjQrZnwwLF89MTM2K2Z8MCxZPTE0MCtmfDAsRD02MCtmfDAsSj1xKzExfDAsTT1WPTgrZnwwLFQ9MTErbnwwLFU9KFE9NDQrZnwwKSsxMXwwLE89JCsyMHwwLHo9cisyNHwwLGo9ZSs2MHwwLEg9ZSs2NHwwLEI9ZSs1NnwwLEU9Uz0kKzE2fDAsWD0wIT0oMHxvKSx5PTI1NSZvLGc9cSs4fDAscD0oNjU1MzUmYSk+Pj4xMiYyNTUsWj1xKzE2fDAsbT0oNjU1MzUmYSk+Pj44JjI1NSxrPSQrMjR8MCx3PXErMjh8MCx2PWg9cSsyNHwwLGQ9MDtlOmZvcig7Oyl7Zm9yKGFyWyQ+PjJdPTAsZT0obz1JKSsyMnwodHJbVz4+MF09MCk7KDB8KG89bysyfChvcltvPj4xXT0wKSkpPCgwfGUpOyk7c3dpdGNoKG89KDB8Y3JbaT4+MF0pPDI/NjU1MzUmKDB8VkEocikpOjB8RkEociksYXJbJD4+Ml09bywwfHRyW2k+PjBdJiYocz0xNSYoMHxWQShyKSksdHJbVz4+MF09cykscz0wfFZBKHIpLG9yW0k+PjFdPXMsYXJbKHM9Qyk+PjJdPTAsYXJbcys0Pj4yXT0wLDE1Jngpe2Nhc2UgNDpvPTB8RkEociksZT0wLEw9MjY7YnJlYWs7Y2FzZSA4Om89MHxGQShyKSxhclsoZT1DKT4+Ml09MCxhcltlKzQ+PjJdPW8sZT1DLG89MHxGQShyKXxhcltlPj4yXSxlPTB8YXJbZSs0Pj4yXSxMPTI2fTI2PT0oMHxMKSYmKEw9MCxhclsocz1DKT4+Ml09byxhcltzKzQ+PjJdPWUpLHM9NjU1MzUmKG89MHxWQShyKSk7ZG97aWYoKDY1NTM1Jm8pPD0zMil7cjpkb3tpZihvPDwxNj4+MTYpZm9yKGI9MDs7KXtmb3IoZT0obz1xKSszNnwwOygwfChvPW8rNHwoYXJbbz4+Ml09MCkpKTwoMHxlKTspO2k6ZG97aWYoWCYxPCgwfGNyW2k+PjBdKSlzd2l0Y2goMTUmeSl7Y2FzZSA0Omw9MHxGQShyKSxhclsodT1xKT4+Ml09bCxhclt1KzQ+PjJdPTA7YnJlYWsgaTtjYXNlIDg6YT0wfEZBKHIpLGFyWyhjPXEpPj4yXT0wLGFyW2MrND4+Ml09YSxjPTB8RkEociksbD0wfGFyWyhhPXEpKzQ+PjJdLGFyWyh1PXEpPj4yXT1hclthPj4yXXxjLGFyW3UrND4+Ml09bDticmVhayBpO2RlZmF1bHQ6YnJlYWsgaX19d2hpbGUoMCk7c3dpdGNoKGFyWyh1PWcpPj4yXT0wLGFyW3UrND4+Ml09MCwxNSZwKXtjYXNlIDQ6bz0wfEZBKHIpLGU9MCxMPTQ0O2JyZWFrO2Nhc2UgODpvPTB8RkEociksYXJbKGU9Zyk+PjJdPTAsYXJbZSs0Pj4yXT1vLGU9ZyxvPTB8RkEocil8YXJbZT4+Ml0sZT0wfGFyW2UrND4+Ml0sTD00NH1zd2l0Y2goNDQ9PSgwfEwpJiYoTD0wLGFyWyh1PWcpPj4yXT1vLGFyW3UrND4+Ml09ZSksYXJbKHU9Wik+PjJdPTAsYXJbdSs0Pj4yXT0wLDE1Jm0pe2Nhc2UgNDpvPTB8RkEociksZT0wLEw9NDg7YnJlYWs7Y2FzZSA4Om89MHxGQShyKSxhclsoZT1aKT4+Ml09MCxhcltlKzQ+PjJdPW8sZT1aLG89MHxGQShyKXxhcltlPj4yXSxlPTB8YXJbZSs0Pj4yXSxMPTQ4fWlmKDQ4PT0oMHxMKSYmKEw9MCxhclsodT1aKT4+Ml09byxhclt1KzQ+PjJdPWUpLCgwfChlPTB8YXJbTz4+Ml0pKT09KDB8YXJbaz4+Ml0pKVF0KEUscSksbz0wfGFyW2g+PjJdO2Vsc2V7aWYoYXJbZT4+Ml09YXJbcT4+Ml0sYXJbZSs0Pj4yXT1hcltxKzQ+PjJdLGFyW2UrOD4+Ml09YXJbcSs4Pj4yXSxhcltlKzEyPj4yXT1hcltxKzEyPj4yXSxhcltlKzE2Pj4yXT1hcltxKzE2Pj4yXSxhcltlKzIwPj4yXT1hcltxKzIwPj4yXSxhclsoYT1lKzI0fDApPj4yXT0wLGFyWyh1PWUrMjh8MCk+PjJdPTAsbz0oYXJbZSszMj4+Ml09MCl8YXJbdj4+Ml0sYz0oMHxhclt3Pj4yXSktb3wwKXtpZigoMHxjKTwwKXtMPTUyO2JyZWFrIGV9bD0wfGh1KGMpLGFyW3U+PjJdPWwsYXJbYT4+Ml09bCxhcltlKzMyPj4yXT1sK2Msbz0wfGFyW3Y+PjJdLDA8KDB8KGU9KDB8YXJbdz4+Ml0pLW98MCkpJiYoaGIoMHxsLDB8bywwfGUpLGFyW3U+PjJdPWwrZSl9YXJbTz4+Ml09NDArKDB8YXJbTz4+Ml0pfWlmKDB8byYmKCgwfGFyW3c+PjJdKSE9KDB8bykmJihhclt3Pj4yXT1vKSx2dShvKSksKDB8cyk8PSgwfChiPWIrMXwwKSkpYnJlYWsgcn19d2hpbGUoMCk7aWYoISgwfHRyW3o+PjBdKSl7aWYoKDB8KG89MHxhcltqPj4yXSkpPT0oMHxhcltIPj4yXSkpe0p0KEIsJCksbD0wO2JyZWFrfWFyW28+PjJdPWFyWyQ+PjJdLGFyW28rND4+Ml09YXJbJCs0Pj4yXSxhcltvKzg+PjJdPWFyWyQrOD4+Ml0sYXJbbysxMj4+Ml09YXJbJCsxMj4+Ml0sRHQobysxNnwwLEUpLGFyW2o+PjJdPTMyKygwfGFyW2o+PjJdKSxsPTA7YnJlYWt9bD0wfWVsc2UgYXJbVj4+Ml09NDUyNCxhcltmPj4yXT0xODgsYXJbRz4+Ml09MjA4LGFyW1I+PjJdPTAsSmYoTixGKSxhcltfPj4yXT0wLGFyW1k+PjJdPS0xLGFyW2Y+PjJdPTQ1MDQsYXJbRz4+Ml09NDU0NCxhcltWPj4yXT00NTI0LFNmKEYpLGFyW0Y+PjJdPTQzNDAsYXJbUT4+Ml09MCxhcltRKzQ+PjJdPTAsYXJbUSs4Pj4yXT0wLGFyW1ErMTI+PjJdPTAsYXJbRD4+Ml09MjQsYXJbcT4+Ml09MCxhcltxKzQ+PjJdPTAsYXJbcSs4Pj4yXT0wLFhlKEYscSksKDB8dHJbSj4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pLFdlKDB8UGYoMHxXZSgwfFBmKDB8V2UoTSwyMjgyNiwzMSkscyksMjI4NTgsMjYpLDMyKSwxODkwNCwyKSxJZShuLEYpLG9vKEEsNiwxZTMsbiksKDB8dHJbVD4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLGFyW2Y+PjJdPTQ1MDQsYXJbRz4+Ml09NDU0NCxhcltNPj4yXT00NTI0LGFyW0Y+PjJdPTQzNDAsKDB8dHJbVT4+MF0pPDAmJnZ1KDB8YXJbUT4+Ml0pLGtmKEYpLGJmKEcpLGw9MX13aGlsZSgwKTtpZigwfChvPTB8YXJbUz4+Ml0pKXtpZigoMHwoZT0wfGFyW08+PjJdKSkhPSgwfG8pKXtmb3IoO2E9ZSstNDB8MCxhcltPPj4yXT1hLCgwfChlPShjPTB8YXJbZSstMTY+PjJdKT8oKDB8YXJbKGU9ZSstMTJ8MCk+PjJdKSE9KDB8YykmJihhcltlPj4yXT1jKSx2dShjKSwwfGFyW08+PjJdKTphKSkhPSgwfG8pOyk7bz0wfGFyW1M+PjJdfXZ1KG8pfWlmKGQ9ZCsxfDAsMHxsKXtMPTgwO2JyZWFrfWlmKCgwfEspPD0oMHxkKSl7UD16O2JyZWFrIEF9fWlmKDUyPT0oMHxMKSl6bCgpO2Vsc2UgaWYoODA9PSgwfEwpKXJldHVybiB2b2lkKHVyPXQpfWVsc2UgUD1yKzI0fDB9d2hpbGUoMCk7MHx0cltQPj4wXT8oYXJbcT4+Ml09MCxhcltxKzQ+PjJdPTAsYXJbcSs4Pj4yXT0wLG9vKEEsMiwxMDAscSksKDB8dHJbcSsxMT4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pKToocT0wfGFyWyhLPTU2NTkyKSs0Pj4yXSxhclsoJD1BKT4+Ml09YXJbSz4+Ml0sYXJbJCs0Pj4yXT1xLHl1KEErOHwwLDU2NjAwKSksdXI9dH0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wO3VyPShuPXVyKSszMnwwLGk9bixmPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksYT1lKzQ4fDAsU0EociwwfHRyW2UrMzc+PjBdPzQ6MiwoMHxhclthPj4yXSktKDB8YXJbZSs0ND4+Ml0pPj4zLDApLG89MHxhcltlKzQ0Pj4yXSxhPTB8YXJbYT4+Ml07QTpkb3tpZigoMHxvKT09KDB8YSkpdD1BKzh8MCxsPTg7ZWxzZSBmb3IoYz0odD1BKzh8MCkrMTF8MDs7KXtpZih1PTB8YXJbbz4+Ml0sbnNbMTI3JmFyWzEyKygwfGFyW3U+PjJdKT4+Ml1dKEEsdSxyKSwwfGFyW0E+PjJdKWJyZWFrIEE7aWYoKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbdD4+Ml0pLCgwfChvPW8rOHwwKSk9PSgwfGEpKXtsPTg7YnJlYWt9fX13aGlsZSgwKTs4PT0oMHxsKSYmKGw9MHxhclsoYz01NjU5MikrND4+Ml0sYXJbKHU9QSk+PjJdPWFyW2M+PjJdLGFyW3UrND4+Ml09bCx5dSh0LDU2NjAwKSksS0EoaSxlLHIsZiksdXI9KDA8PSgwfHRyWyh0PWkrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxuKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZj0wO3JldHVybiB1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoZj0wfHRyW2UrMzc+PjBdPzB8RkEocik6NjU1MzUmKDB8VkEocikpKT8kQShBLGUsciwtMSk6KGU9MHxhclsoZj01NjU5MikrND4+Ml0sYXJbKHI9QSk+PjJdPWFyW2Y+PjJdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCkpLHZvaWQodXI9aSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsYT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsWGUodCxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksTEEoYSxlLHIpLFdlKGYsKHU9KGw9MHx0clsoYz1hKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2E+PjJdOmEsdT8wfGFyW2ErND4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihjPTB8V2UoZiwyMjQ2Miw5KSxjPTB8V2UoMHxMZihjLDB8YXJbZSs1Nj4+Ml0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIyNDcyLDIzKSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs2MD4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIyNDk2LDExKSxjPTB8V2UoMHxXZShhLCh1PShjPTB8dHJbKGw9ZSs2NHwwKSsxMT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLHU/MHxhcltlKzY4Pj4yXToyNTUmYyksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYT0wfFdlKGMsMjI1MDgsMTEpLGM9MHxXZSgwfFdlKGEsKHU9KGM9MHx0clsobD1lKzc2fDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrODA+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoYywyMjUyMCwxNCksYz0wfFdlKDB8V2UoYSwodT0oYz0wfHRyWyhsPWUrODh8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbZSs5Mj4+Ml06MjU1JmMpLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIyNTM1LDE4KSxjPTB8V2UoMHxXZShhLCh1PShjPTB8dHJbKGw9ZSsxMDB8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbZSsxMDQ+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoYywyMjU1NCwxNSksYz0wfFdlKDB8V2UoYSwodT0oYz0wfHRyWyhsPWUrMTEyfDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrMTE2Pj4yXToyNTUmYyksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0odT0wfFdlKGMsMjI1NzAsMTMpKSsoMHxhclsoMHxhclt1Pj4yXSktMTI+PjJdKSs0fDAsYXJbbD4+Ml09MXxhcltsPj4yXSxXZSgwfEhmKHUsMCE9KDB8dHJbZSsxMjQ+PjBdKSksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTA7dXI9KGk9dXIpKzMyfDAsYz1pLGw9MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSwoMjU1JihmPTB8dHJbKG49ZSszN3wwKT4+MF0pKTwyPyhNQShyLDY1NTM1JmFyW2UrNTY+PjJdKSxNQShyLDB8b3JbZSs2MD4+MV0pLE9BKHIsZSs3NnwwKSxPQShyLGUrODh8MCksT0EocixlKzEwMHwwKSwxPCgyNTUmKGY9MHx0cltuPj4wXSkpJiYodD0zKSk6dD0zO0E6ZG97aWYoMz09KDB8dCkpe3N3aXRjaChmPDwyND4+MjQpe2Nhc2UgMjpNQShyLDY1NTM1JmFyW2UrNTY+PjJdKTticmVhaztjYXNlIDM6VUEociwwfGFyW2UrNTY+PjJdKX1NQShyLDB8b3JbZSs2MD4+MV0pLChuPShmPTB8dHJbKG89KGE9ZSs2NHwwKSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/Zj0wfGFyW2UrNjg+PjJdOmYmPTI1NSxmPyhmPW4/MHxhclthPj4yXTphLFVBKHIsdHJbZisxPj4wXTw8MTZ8Y3JbZj4+MF08PDI0fHRyW2YrMj4+MF08PDh8dHJbZiszPj4wXSkpOlVBKHIsMCksT0EocixlKzc2fDApLG49MHx0cltvPj4wXSxmPTB8YXJbKHQ9ZSs2OHwwKT4+Ml07ZG97aWYoND09KDB8KG48PDI0Pj4yNDwwP2Y6MjU1Jm4pKSl7aWYoMHxZdShhLDAsLTEsMjI0NTIsNCkpe249MHx0cltvPj4wXSxmPTB8YXJbdD4+Ml07YnJlYWt9T0EocixlKzg4fDApLE9BKHIsZSsxMDB8MCk7YnJlYWsgQX19d2hpbGUoMCk7ND09KDB8KG48PDI0Pj4yNDwwP2Y6MjU1Jm4pKSYmMD09KDB8WXUoYSwwLC0xLDIyNDU3LDQpKSYmT0EocixlKzExMnwwKX19d2hpbGUoMCk7aWYoS0EoYyxlLHIsbCksMDw9KDB8dHJbKGY9Yys4fDApKzExPj4wXSkpcmV0dXJuIGU9MHxhclsoZT1jPTU2NTkyKT4+Ml0sYz0wfGFyWyhjPWMrNHwwKT4+Ml0sYXJbKHI9bD1BKT4+Ml09ZSxhclsobD1sKzR8MCk+PjJdPWMseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1pKTt2dSgwfGFyW2Y+PjJdKSxlPTB8YXJbKGU9Yz01NjU5Mik+PjJdLGM9MHxhclsoYz1jKzR8MCk+PjJdLGFyWyhyPWw9QSk+PjJdPWUsYXJbKGw9bCs0fDApPj4yXT1jLHl1KEE9QSs4fDAsNTY2MDApLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTA7dXI9KGk9dXIpKzMyfDAsYT1pKzIwfDAscUEoZj1pLGV8PTAscnw9MCksKDB8dHJbKGY9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksKDI1NSYoZj0wfHRyWyh0PWUrMzd8MCk+PjBdKSk8Mj8oZj02NTUzNSYoMHxWQShyKSksYXJbZSs1Nj4+Ml09ZixmPTB8VkEociksb3JbZSs2MD4+MV09ZixSQShhLHIpLCgwfHRyWyhuPShmPWUrNzZ8MCkrMTF8MCk+PjBdKTwwPyh0clthcltmPj4yXT4+MF09MCxhcltlKzgwPj4yXT0wKToodHJbZj4+MF09MCx0cltuPj4wXT0wKSxDdShmLDApLGFyW2Y+PjJdPWFyW2E+PjJdLGFyW2YrND4+Ml09YXJbYSs0Pj4yXSxhcltmKzg+PjJdPWFyW2ErOD4+Ml0sUkEoYSxyKSwoMHx0clsobj0oZj1lKzg4fDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSs5Mj4+Ml09MCk6KHRyW2Y+PjBdPTAsdHJbbj4+MF09MCksQ3UoZiwwKSxhcltmPj4yXT1hclthPj4yXSxhcltmKzQ+PjJdPWFyW2ErND4+Ml0sYXJbZis4Pj4yXT1hclthKzg+PjJdLFJBKGEsciksKDB8dHJbKG49KGY9ZSsxMDB8MCkrMTF8MCk+PjBdKTwwPyh0clthcltmPj4yXT4+MF09MCxhcltlKzEwND4+Ml09MCk6KHRyW2Y+PjBdPTAsdHJbbj4+MF09MCksQ3UoZiwwKSxhcltmPj4yXT1hclthPj4yXSxhcltmKzQ+PjJdPWFyW2ErND4+Ml0sYXJbZis4Pj4yXT1hclthKzg+PjJdLDE8KDI1NSYoZj0wfHRyW3Q+PjBdKSkmJihvPTE0KSk6bz0xNDtBOmRve2lmKDE0PT0oMHxvKSl7aWYodHJbZSsxMjQ+PjBdPTEmYXJbZSs0MD4+Ml0sZj1mPDwyND4+MjQ9PTI/NjU1MzUmKDB8VkEocikpOjB8RkEociksYXJbZSs1Nj4+Ml09ZixvPTB8VkEociksb3JbZSs2MD4+MV09bywwfChvPTB8RkEocikpJiYodHJbYT4+MF09MCx0clthKzE+PjBdPTAsdHJbYSsyPj4wXT0wLHRyW2ErMz4+MF09MCx0clthKzQ+PjBdPTAsZj0odHJbYSs1Pj4wXT0wKXxrYigwfG8pLCgwfHRyWyh0PShuPWUrNjR8MCkrMTF8MCk+PjBdKTwwPyh0clthcltuPj4yXT4+MF09MCxhcltlKzY4Pj4yXT0wKToodHJbbj4+MF09MCx0clt0Pj4wXT0wKSxDdShuLDApLGFyW2UrNjQ+PjJdPWYsdHJbZSs2OD4+MF09MCx0clsodD1lKzY5fDApPj4wXT0wfHRyW2E+PjBdLHRyW3QrMT4+MF09MHx0clthKzE+PjBdLHRyW3QrMj4+MF09MHx0clthKzI+PjBdLHRyW3QrMz4+MF09MHx0clthKzM+PjBdLHRyW3QrND4+MF09MHx0clthKzQ+PjBdLHRyW3QrNT4+MF09MHx0clthKzU+PjBdLHRyW2UrNzU+PjBdPTQpLFJBKGEsciksKDB8dHJbKG49KGY9ZSs3NnwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW2Y+PjJdPj4wXT0wLGFyW2UrODA+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXSwxOTcwNDMyMjg4PD0oMHxvKSl7c3dpdGNoKDB8byl7Y2FzZSAxOTcwNDMyMjg4OmJyZWFrO2RlZmF1bHQ6YnJlYWsgQX1SQShhLHIpLCgwfHRyWyhuPShmPWUrMTEyfDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSsxMTY+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXTticmVha31zd2l0Y2goMHxvKXtjYXNlIDE4MzU2MjU4Mjk6YnJlYWs7ZGVmYXVsdDpicmVhayBBfVJBKGEsciksKDB8dHJbKG49KGY9ZSs4OHwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW2Y+PjJdPj4wXT0wLGFyW2UrOTI+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXSxSQShhLHIpLCgwfHRyWyhuPShmPWUrMTAwfDApKzExfDApPj4wXSk8MD8odHJbYXJbZj4+Ml0+PjBdPTAsYXJbZSsxMDQ+PjJdPTApOih0cltmPj4wXT0wLHRyW24+PjBdPTApLEN1KGYsMCksYXJbZj4+Ml09YXJbYT4+Ml0sYXJbZis0Pj4yXT1hclthKzQ+PjJdLGFyW2YrOD4+Ml09YXJbYSs4Pj4yXX19d2hpbGUoMCk7aWYoISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gcj0wfGFyWyhlPTU2NTkyKSs0Pj4yXSxhclsoYT1BKT4+Ml09YXJbZT4+Ml0sYXJbYSs0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxvbyhBLDIsMTAwLGEpLHVyPSgwPD0oMHx0clthKzExPj4wXSl8fHZ1KDB8YXJbYT4+Ml0pLGkpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpeyRBKEF8PTAsZXw9MCxyfD0wLC0xKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXskQShBfD0wLGV8PTAscnw9MCwtMSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLChjPShsPTB8dHJbKHU9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLGM/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhclthPj4yXSksKDB8KGE9MHxhcltlKzU2Pj4yXSkpIT0oMHwodT0wfGFyW2UrNjA+PjJdKSkpe2w9YSxhPTB8YXJbcj4+Ml07ZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihhPTB8V2UoZiwyMjEzOSwyNiksV2UoMHxMZihhLDB8YXJbbD4+Ml0pLDMwMDg2LDEpLGE9MSsoMHxhcltyPj4yXSl8MCxhcltyPj4yXT1hLCgwfChlPTB8YXJbbCs0Pj4yXSkpIT0oMHwoYz0wfGFyW2wrOD4+Ml0pKSlkb3tpZigwPCgwfGEpKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2E9MHxXZShmLDIyMTY2LDE2KSxiPShhPTB8V2UoMHx4ZihhLDB8b3JbZSsyPj4xXSksMjIxODMsMTMpKSsoMHxhclsoMHxhclthPj4yXSktMTI+PjJdKSs0fDAsYXJbYj4+Ml09MXxhcltiPj4yXSxXZSgwfEhmKGEsMCE9KDB8dHJbZT4+MF0pKSwxODkwNCwyKSxlPWUrNHwwLGE9MHxhcltyPj4yXX13aGlsZSgoMHxlKSE9KDB8YykpO2E9KDB8YSk8MT8wOmErLTF8MCxhcltyPj4yXT1hLGw9bCsxNnwwfXdoaWxlKCgwfGwpIT0oMHx1KSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KGk9dXIpKzMyfDAsYj1pLHM9MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSxmPWUrNTZ8MCxVQShyLCgwfGFyWyhjPWUrNjB8MCk+PjJdKS0oMHxhcltmPj4yXSk+PjQpLCgwfChmPTB8YXJbZj4+Ml0pKSE9KDB8KGM9MHxhcltjPj4yXSkpKXtsPWUrMzd8MCx1PWUrNDB8MDtkb3tpZihuPTB8YXJbZj4+Ml0sMHx0cltsPj4wXT9VQShyLG4pOk1BKHIsNjU1MzUmbiksbj1mKzR8MCxKQShyLCgoMHxhclsoYT1mKzh8MCk+PjJdKS0oMHxhcltuPj4yXSl8MCk+Pj4yJjI1NSksKDB8KG49MHxhcltuPj4yXSkpIT0oMHwoYT0wfGFyW2E+PjJdKSkpZm9yKDt0PTAhPSgwfHRyW24+PjBdKSxvPTB8bHJbbisyPj4xXSwxJmFyW3U+PjJdP01BKHIsNjU1MzUmKDMyNzY3Jm98KHQ/MzI3Njg6MCkpKTpKQShyLDI1NSYoMTI3Jm98KHQ/MTI4OjApKSksKDB8KG49bis0fDApKSE9KDB8YSk7KTtmPWYrMTZ8MH13aGlsZSgoMHxmKSE9KDB8YykpfWlmKEtBKGIsZSxyLHMpLDA8PSgwfHRyWyhmPWIrOHwwKSsxMT4+MF0pKXJldHVybiByPTB8YXJbKHI9Yj01NjU5Mik+PjJdLGI9MHxhclsoYj1iKzR8MCk+PjJdLGFyWyh1PXM9QSk+PjJdPXIsYXJbKHM9cys0fDApPj4yXT1iLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltmPj4yXSkscj0wfGFyWyhyPWI9NTY1OTIpPj4yXSxiPTB8YXJbKGI9Yis0fDApPj4yXSxhclsodT1zPUEpPj4yXT1yLGFyWyhzPXMrNHwwKT4+Ml09Yix5dShBPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG4sdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTA7dXI9KG49dXIpKzQ4fDAsRT1uKzI0fDAscUEodD0oWD1uKSs0fDAsZXw9MCxyfD0wKSwoMHx0clsodD10Kzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW3Q+PjJdKSxpPTB8RkEociksZj1yKzI0fDA7QTpkb3tpZigwPCgwfGkpKXtmb3IoaD1yKzE2fDAsdj1FKzh8MCxnPWUrMzd8MCxaPWUrNjB8MCxwPWUrNjR8MCx5PWUrNTZ8MCxCPXc9RSs0fDAscz1lKzQwfDAsZD1YKzJ8MCxrPW09RSsxMnwwLGI9MDs7KXtpZigwfHRyW2Y+PjBdKWJyZWFrIEE7aWYoMD09KDB8YXJbKHU9aCk+PjJdKSYwPT0oMHxhclt1KzQ+PjJdKSlicmVhayBBO2lmKGFyW3c+PjJdPTAsYXJbdj4+Ml09MCx0PShhclttPj4yXT0wKXx0cltnPj4wXT8wfEZBKHIpOjY1NTM1JigwfFZBKHIpKSxhcltFPj4yXT10LGM9MjU1Jih1PTB8SUEocikpLHU8PDI0Pj4yNClmb3IoYT0wOzEmYXJbcz4+Ml0/KHQ9KDY1NTM1JihvPTB8VkEocikpKT4+PjE1JjI1NSxlPTMyNzY3KToodD0oMjU1JihvPTB8SUEocikpKT4+PjcsZT0xMjcsbyY9MjU1KSx0cltYPj4wXT10LG9yW2Q+PjFdPTY1NTM1Jm8mZSwoMHwodD0wfGFyW3Y+PjJdKSk9PSgwfGFyW2s+PjJdKT9OdChCLFgpOih1PTB8YXJbWD4+Ml0sb3JbdD4+MV09dSxvclt0KzI+PjFdPXU+Pj4xNixhclt2Pj4yXT00KygwfGFyW3Y+PjJdKSksKDB8KGE9YSsxfDApKTwoMHxjKTspO2lmKCgwfChvPTB8YXJbWj4+Ml0pKT09KDB8YXJbcD4+Ml0pKVJ0KHksRSksdD0wfGFyW3c+PjJdO2Vsc2V7aWYoYXJbbz4+Ml09YXJbRT4+Ml0sYXJbKGE9bys0fDApPj4yXT0wLGFyWyh1PW8rOHwwKT4+Ml09MCx0PShhcltvKzEyPj4yXT0wKXxhcltCPj4yXSxjPShlPSgwfGFyW3Y+PjJdKS10fDApPj4yKXtpZigxMDczNzQxODIzPGM+Pj4wKWJyZWFrO2w9MHxodShlKSxhclt1Pj4yXT1sLGFyW2E+PjJdPWwsYXJbbysxMj4+Ml09bCsoYzw8MiksdD0wfGFyW0I+PjJdLDA8KDB8KGU9KDB8YXJbdj4+Ml0pLXR8MCkpJiYoaGIoMHxsLDB8dCwwfGUpLGFyW3U+PjJdPWwrKGU+Pj4yPDwyKSl9YXJbWj4+Ml09MTYrKDB8YXJbWj4+Ml0pfWlmKDB8dCYmKCgwfChlPTB8YXJbdj4+Ml0pKSE9KDB8dCkmJihhclt2Pj4yXT1lKyh+KChlKy00LXR8MCk+Pj4yKTw8MikpLHZ1KHQpKSwoMHxpKTw9KDB8KGI9YisxfDApKSlicmVhayBBfXpsKCl9fXdoaWxlKDApO2lmKCEoMHx0cltmPj4wXSkpcmV0dXJuIEU9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKFg9QSk+PjJdPWFyW3I+PjJdLGFyW1grND4+Ml09RSx5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1uKTthcltFPj4yXT0wLGFyW0UrND4+Ml09MCxhcltFKzg+PjJdPTAsb28oQSwyLDEwMCxFKSx1cj0oMDw9KDB8dHJbRSsxMT4+MF0pfHx2dSgwfGFyW0U+PjJdKSxuKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsYz1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhcltjPj4yXT0wLGFyW2MrND4+Ml09MCxhcltjKzg+PjJdPTAsWGUodCxjKSwoMHx0cltjKzExPj4wXSk8MCYmdnUoMHxhcltjPj4yXSksTEEoYyxlLHIpLFdlKGYsKHU9KGE9MHx0clsobD1jKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2M+PjJdOmMsdT8wfGFyW2MrND4+Ml06MjU1JmEpLCgwfHRyW2w+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGYsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UoZiwyMjAyNSwxMyksbD0wfFdlKDB8TGYobCwwfGFyW2UrNTY+PjJdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKGwsMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZih1PTB8V2UobCwyMjAzOSwxNCksV2UoMHxMZih1LDB8YXJbZSs2MD4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDt1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLFVBKHIsMHxhcltlKzU2Pj4yXSksVUEociwwfGFyW2UrNjA+PjJdKSxLQShmLGUscixuKSwoMHx0clsoZT1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2U+PjJdKSxmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzMyfDAsZj1pKzIwfDAscUEobj1pLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksbj0wfEZBKHIpLGFyW2UrNTY+PjJdPW4sbj0wfEZBKHIpLGFyW2UrNjA+PjJdPW4sISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPWkpO2FyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxvbyhBLDIsMTAwLGYpLHVyPSgwPD0oMHx0cltmKzExPj4wXSl8fHZ1KDB8YXJbZj4+Ml0pLGkpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShsPTB8dHJbKGM9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0cltjPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYT0wfFdlKGYsMjE5MTQsMTApLGM9MHxXZSgwfFdlKGEsKHU9KGM9MHx0clsobD1lKzU2fDApKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsdT8wfGFyW2UrNjA+PjJdOjI1NSZjKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShjLDIxOTI1LDE0KSwoMHwoYT0wfGFyW2UrNjg+PjJdKSkhPSgwfChjPTB8YXJbZSs3Mj4+Ml0pKSlmb3IoO3U9MHx0clthPj4wXSxsPWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW2w+PjJdPS03NSZhcltsPj4yXXw4LGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsYXJbZisoMHxhclsoMHxhcltmPj4yXSktMTI+PjJdKSs3Nj4+Ml09NDgsV2UoMHxQZihmLDI1NSZ1KSwyMDQ0OSwxKSwoMHwoYT1hKzF8MCkpIT0oMHxjKTspO2lmKFdlKGYsMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSszMnwwLHQ9ZixvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksT0EocixlKzU2fDApLCgwfChuPTB8YXJbZSs2OD4+Ml0pKSE9KDB8KGk9MHxhcltlKzcyPj4yXSkpKWZvcig7SkEociwwfHRyW24+PjBdKSwoMHwobj1uKzF8MCkpIT0oMHxpKTspO0tBKHQsZSxyLG8pLCgwfHRyWyhuPXQrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLHQ9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW3I+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO3VyPShmPXVyKSszMnwwLGs9ZisyMHwwLHFBKG49ZixlfD0wLHJ8PTApLCgwfHRyWyhuPW4rOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLFJBKGssciksKDB8dHJbKHQ9KG49ZSs1NnwwKSsxMXwwKT4+MF0pPDA/KHRyW2FyW24+PjJdPj4wXT0wLGFyW2UrNjA+PjJdPTApOih0cltuPj4wXT0wLHRyW3Q+PjBdPTApLEN1KG4sMCksYXJbbj4+Ml09YXJbaz4+Ml0sYXJbbis0Pj4yXT1hcltrKzQ+PjJdLGFyW24rOD4+Ml09YXJbays4Pj4yXSxkPWk9cisxNnwwO0E6ZG97aWYoISgwPT0oMHxhcltkPj4yXSkmMD09KDB8YXJbZCs0Pj4yXSkpKXtmb3Iocz1lKzY4fDAsZD1lKzcyfDAsdT1lKzc2fDA7Oyl7aWYoYT0wfElBKHIpLG49MHxhcltkPj4yXSwodD1iPTB8YXJbdT4+Ml0pPj4+MDw9bj4+PjApe2lmKGw9Yj0wfGFyW3M+PjJdLCgwfChuPShjPW4tYnwwKSsxfDApKTwwKWJyZWFrO3Q9KG89dC1ifDApPDwxLG89KHQ9bz4+PjA8MTA3Mzc0MTgyMz90Pj4+MDxuPj4+MD9uOnQ6MjE0NzQ4MzY0Nyk/MHxodSh0KTowLHRyWyhlPW8rY3wwKT4+MF09YSxuPWUrKDAtYyl8MCwwPCgwfGMpJiZoYigwfG4sMHxsLDB8YyksYXJbcz4+Ml09bixhcltkPj4yXT1lKzEsYXJbdT4+Ml09byt0LDB8YiYmdnUobCl9ZWxzZSB0cltuPj4wXT1hLGFyW2Q+PjJdPTErKDB8YXJbZD4+Ml0pO2lmKDA9PSgwfGFyWyhiPWkpPj4yXSkmMD09KDB8YXJbYis0Pj4yXSkpYnJlYWsgQX16bCgpfX13aGlsZSgwKTtpZighKDB8dHJbcisyND4+MF0pKXJldHVybiByPTB8YXJbKGQ9NTY1OTIpKzQ+PjJdLGFyWyhrPUEpPj4yXT1hcltkPj4yXSxhcltrKzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9Zik7YXJbaz4+Ml09MCxhcltrKzQ+PjJdPTAsYXJbays4Pj4yXT0wLG9vKEEsMiwxMDAsayksdXI9KDA8PSgwfHRyW2srMTE+PjBdKXx8dnUoMHxhcltrPj4yXSksZil9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxMQShsLGUsciksV2UoZiwodT0oYz0wfHRyWyhhPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYyksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UoZiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDIxODAyLDEwKSxXZSgwfFBmKHUsMHxhcltlKzU2Pj4yXSksMjE4MTMsMTUpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMTZ8MCxmPWksbj05MCooMyYoMHxJQShyfD0wKSkpfDAsYXJbZSs1Nj4+Ml09biwhKDB8dHJbcisyND4+MF0pKXJldHVybiBmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbZj4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLG9vKEEsMiwxMDAsZiksdXI9KDA8PSgwfHRyW2YrMTE+PjBdKXx8dnUoMHxhcltmPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsLHU9MDtpZih1cj0obz11cikrMTYwfDAsdT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclt1Pj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsWGUodCx1KSwoMHx0clt1KzExPj4wXSk8MCYmdnUoMHxhclt1Pj4yXSksTEEodSxlLHIpLFdlKGYsKGw9KGM9MHx0clsoYT11KzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW3U+PjJdOnUsbD8wfGFyW3UrND4+Ml06MjU1JmMpLCgwfHRyW2E+PjBdKTwwJiZ2dSgwfGFyW3U+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IodT0wO1dlKGYsMTg4NjIsMiksKDB8KHU9dSsxfDApKTwoMHxhcltyPj4yXSk7KTtzd2l0Y2goV2UoZiwyMTY4MSwxMyksMHx0cltlKzU2Pj4wXSl7Y2FzZSAwOldlKGYsMjE2OTUsOSk7YnJlYWs7Y2FzZSAxOldlKGYsMjE3MDUsMTEpfWlmKEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7aWYodXI9KGk9dXIpKzE2fDAsZj1pLG49MSYoMHxJQShyfD0wKSksdHJbZSs1Nj4+MF09biwhKDB8dHJbcisyND4+MF0pKXJldHVybiBmPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhuPUEpPj4yXT1hcltyPj4yXSxhcltuKzQ+PjJdPWYseXUoQSs4fDAsNTY2MDApLHZvaWQodXI9aSk7YXJbZj4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLG9vKEEsMiwxMDAsZiksdXI9KDA8PSgwfHRyW2YrMTE+PjBdKXx8dnUoMHxhcltmPj4yXSksaSl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxsPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0wLGFyW2wrOD4+Ml09MCxYZSh0LGwpLCgwfHRyW2wrMTE+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSxMQShsLGUsciksV2UoZiwodT0oYz0wfHRyWyhhPWwrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbbD4+Ml06bCx1PzB8YXJbbCs0Pj4yXToyNTUmYyksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihsPTA7V2UoZiwxODg2MiwyKSwoMHwobD1sKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKHU9MHxXZShmLDIxNTYwLDE2KSx1PTB8V2UoMHxQZih1LDB8YXJbZSs1Nj4+Ml0pLDIxNTc3LDEpLHU9MHxXZSgwfFBmKHUsMHxhcltlKzYwPj4yXSksMjE1NzksMyksdT0wfFdlKDB8UGYodSwwfGFyW2UrNjQ+PjJdKSwyMTU3NywxKSxXZSgwfFBmKHUsMHxhcltlKzY4Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGw9MDtXZShmLDE4ODYyLDIpLCgwfChsPWwrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYodT0wfFdlKGYsMjE1ODMsOCksdT0wfFdlKDB8UGYodSwwfGFyW2UrNzI+PjJdKSwyMTU3NywxKSx1PTB8V2UoMHxQZih1LDB8YXJbZSs3Nj4+Ml0pLDIxNTkyLDMpLHU9MHxXZSgwfFBmKHUsMHxhcltlKzgwPj4yXSksMjE1NzcsMSksV2UoMHxQZih1LDB8YXJbZSs4ND4+Ml0pLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTA7dXI9KGk9dXIpKzMyfDAsZj1pLG49MHxhclsocnw9MCkrMTI+PjJdLGpBKHIsMHx0cltlKzM2Pj4wXT8xMjo4KSxVQShyLDB8YXJbZSs1Nj4+Ml0pLFVBKHIsMHxhcltlKzYwPj4yXSksVUEociwwfGFyW2UrNjQ+PjJdKSxVQShyLDB8YXJbZSs2OD4+Ml0pLFVBKHIsMHxhcltlKzcyPj4yXSksVUEociwwfGFyW2UrNzY+PjJdKSxVQShyLDB8YXJbZSs4MD4+Ml0pLFVBKHIsMHxhcltlKzg0Pj4yXSksS0EoZixlLHIsbiksKDB8dHJbKGU9Zis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksZj0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobj1BKT4+Ml09YXJbcj4+Ml0sYXJbbis0Pj4yXT1mLHl1KEErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KGk9dXIpKzMyfDAsYj1pKzEyfDAscz1pLGw9MHxGQShyfD0wKSx1PTB8RkEociksYT0wfEZBKHIpLGM9MHxGQShyKSx0PTB8RkEociksbz0wfEZBKHIpLG49MHxGQShyKSxmPTB8RkEociksMTMxMDcyPCh1KzY1NTM2fDApPj4+MClmb3IoO2w9KDB8bCkvMnwwLDEzMTA3MjwoKHU9KDB8dSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KGwrNjU1MzZ8MCk+Pj4wKWZvcig7dT0oMHx1KS8yfDAsMTMxMDcyPCgobD0oMHxsKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGFyWyhkPWUrNTZ8MCk+PjJdPWwsYXJbZCs0Pj4yXT11LDEzMTA3MjwoYys2NTUzNnwwKT4+PjApZm9yKDthPSgwfGEpLzJ8MCwxMzEwNzI8KChjPSgwfGMpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoMTMxMDcyPChhKzY1NTM2fDApPj4+MClmb3IoO2M9KDB8YykvMnwwLDEzMTA3MjwoKGE9KDB8YSkvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZihhclsoZD1lKzY0fDApPj4yXT1hLGFyW2QrND4+Ml09YywxMzEwNzI8KG8rNjU1MzZ8MCk+Pj4wKWZvcig7dD0oMHx0KS8yfDAsMTMxMDcyPCgobz0oMHxvKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKDEzMTA3MjwodCs2NTUzNnwwKT4+PjApZm9yKDtvPSgwfG8pLzJ8MCwxMzEwNzI8KCh0PSgwfHQpLzJ8MCkrNjU1MzZ8MCk+Pj4wOyk7aWYoYXJbKGQ9ZSs3MnwwKT4+Ml09dCxhcltkKzQ+PjJdPW8sMTMxMDcyPChmKzY1NTM2fDApPj4+MClmb3IoO249KDB8bikvMnwwLDEzMTA3MjwoKGY9KDB8ZikvMnwwKSs2NTUzNnwwKT4+PjA7KTtpZigxMzEwNzI8KG4rNjU1MzZ8MCk+Pj4wKWZvcig7Zj0oMHxmKS8yfDAsMTMxMDcyPCgobj0oMHxuKS8yfDApKzY1NTM2fDApPj4+MDspO2lmKGFyWyhkPWUrODB8MCk+PjJdPW4sMD09KDB8dSl8MD09KDB8Yyl8MD09KDB8byl8MD09KDB8KGFyW2QrND4+Ml09ZikpKXJldHVybiBhcltzPj4yXT0wLGFyW3MrND4+Ml09MCxhcltzKzg+PjJdPTAsb28oQSwyLDEyOCxzKSwwPD0oMHx0cltzKzExPj4wXSl8fHZ1KDB8YXJbcz4+Ml0pLHZvaWQodXI9aSk7MHx0cltyKzI0Pj4wXT8oYXJbYj4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLG9vKEEsMiwxMDAsYiksKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pKToocz0wfGFyWyhiPTU2NTkyKSs0Pj4yXSxhclsoZD1BKT4+Ml09YXJbYj4+Ml0sYXJbZCs0Pj4yXT1zLHl1KEErOHwwLDU2NjAwKSksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGI9MHx0clsocz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmIpLCgwfHRyW3M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoYz0wfGFyW2UrNTY+PjJdKSkhPSgwfCh1PTB8YXJbZSs2MD4+Ml0pKSl7Yj0xMStmfDAscz00K2Z8MDtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoZT0wO1dlKG4sMTg4NjIsMiksKDB8KGU9ZSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihkPTB8V2UobiwyMTQzMCwyMSkseEEoZixjKSxsPTB8V2UoMHxXZSgwfFdlKGQsKGU9KGw9MHx0cltiPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsZT8wfGFyW3M+PjJdOjI1NSZsKSwyMTQ1MiwxKSwyMTQ1NCwxMCksV2UoMHxMZihsLDB8YXJbYys0OD4+Ml0pLDIxNDY1LDkpLCgwfHRyW2I+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoZT0wfGFyW2MrNTI+PjJdKSkhPSgwfChsPTB8YXJbYys1Nj4+Ml0pKSlmb3IoO1dlKDB8TGYobiwwfGFyW2U+PjJdKSwyMDQ0OSwxKSwoMHwoZT1lKzR8MCkpIT0oMHxsKTspO1dlKG4sMzAwODYsMSksYz1jKzY0fDB9d2hpbGUoKDB8YykhPSgwfHUpKX1pZihJZShBLG8pLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxhcltvPj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YobyksR2YoKSxiZih0KSx2b2lkKHVyPWEpO3Z1KDB8YXJbaT4+Ml0pLGtmKG8pLEdmKCksYmYodCksdXI9YX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPShmPXVyKSszMnwwLGM9ZixsPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksaT0wPT0oMHx0cltlKzM3Pj4wXSk/Mjo0LCgwfChuPTB8YXJbZSs1Nj4+Ml0pKSE9KDB8KGE9MHxhcltlKzYwPj4yXSkpKWRve2lmKHQ9bis1MnwwLFVBKHIsMTArKDB8YnIoMSsoKDB8YXJbKG89bis1NnwwKT4+Ml0pLSgwfGFyW3Q+PjJdKT4+Mil8MCxpKSl8MCksVUEociwwfGFyW24rMjA+PjJdKSxTQShyLGksMHxhcltuKzQ4Pj4yXSwwKSxNQShyLCgoMHxhcltvPj4yXSktKDB8YXJbdD4+Ml0pfDApPj4+MiY2NTUzNSksKDB8KHQ9MHxhclt0Pj4yXSkpIT0oMHwobz0wfGFyW28+PjJdKSkpZm9yKDtTQShyLGksMHxhclt0Pj4yXSwwKSwoMHwodD10KzR8MCkpIT0oMHxvKTspO249bis2NHwwfXdoaWxlKCgwfG4pIT0oMHxhKSk7aWYoS0EoYyxlLHIsbCksMDw9KDB8dHJbKG49Yys4fDApKzExPj4wXSkpcmV0dXJuIGE9MHxhclsoYT1jPTU2NTkyKT4+Ml0sYz0wfGFyWyhjPWMrNHwwKT4+Ml0sYXJbKHI9bD1BKT4+Ml09YSxhclsobD1sKzR8MCk+PjJdPWMseXUoQT1BKzh8MCw1NjYwMCksdm9pZCh1cj1mKTt2dSgwfGFyW24+PjJdKSxhPTB8YXJbKGE9Yz01NjU5Mik+PjJdLGM9MHxhclsoYz1jKzR8MCk+PjJdLGFyWyhyPWw9QSk+PjJdPWEsYXJbKGw9bCs0fDApPj4yXT1jLHl1KEE9QSs4fDAsNTY2MDApLHVyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MDtmb3IodXI9KGc9dXIpKzk2fDAsRT0oQj1nKSs2NHwwLHFBKFo9Zys2OHwwLGV8PTAscnw9MCksKDB8dHJbKFo9Wis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltaPj4yXSksYT1yKzE2fDAsYz1CKzh8MCxsPUIrNDB8MCxiPUIrNTZ8MCxkPWUrMzd8MCxrPUIrNDh8MCxoPXM9Qis2MHwwLHc9dT1CKzUyfDAsdj1lKzYwfDAsbT1lKzY0fDAsaT1lKzU2fDAsbj0xMSsoZj1BKzh8MCl8MCx0PUIrMjR8MCxvPUIrMjh8MDshKDA9PSgwfGFyWyh5PWEpPj4yXSkmMD09KDB8YXJbeSs0Pj4yXSkpOyl7aWYoYXJbQj4+Ml09NDI2NCxhcltsPj4yXT0wLGFyW2M+PjJdPTAsYXJbNCtjPj4yXT0wLGFyWzgrYz4+Ml09MCxhclsxMitjPj4yXT0wLGFyWzE2K2M+PjJdPTAsYXJbMjArYz4+Ml09MCxhclsyNCtjPj4yXT0wLG9yWzI4K2M+PjFdPTAsYXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW3M+PjJdPTAscmUoQSxCLHIpLCgwfGFyW0E+PjJdKT09KDB8YXJbMTQxNDhdKSl7aWYoMHx0cltkPj4wXSl7aWYoeT0wfEZBKHIpLGFyW2s+PjJdPXksZT02NTUzNSYoeT0wfFZBKHIpKSx5PDwxNj4+MTYpZm9yKFo9MDtwPTB8RkEociksYXJbRT4+Ml09cCwoeT0wfGFyW2I+PjJdKT4+PjA8KDB8YXJbaD4+Ml0pPj4+MD8oYXJbeT4+Ml09cCxhcltiPj4yXT15KzQpOkNlKHcsRSksWj1aKzF8MCwoMCE9KDB8YXJbKHk9YSk+PjJdKXwwIT0oMHxhclt5KzQ+PjJdKSkmKDB8Wik8KDB8ZSk7KTt9ZWxzZSBpZih5PTY1NTM1JigwfFZBKHIpKSxhcltrPj4yXT15LGU9NjU1MzUmKHk9MHxWQShyKSkseTw8MTY+PjE2KWZvcihaPTA7cD02NTUzNSYoMHxWQShyKSksYXJbRT4+Ml09cCwoeT0wfGFyW2I+PjJdKT4+PjA8KDB8YXJbaD4+Ml0pPj4+MD8oYXJbeT4+Ml09cCxhcltiPj4yXT15KzQpOkNlKHcsRSksWj1aKzF8MCwoMCE9KDB8YXJbKHk9YSk+PjJdKXwwIT0oMHxhclt5KzQ+PjJdKSkmKDB8Wik8KDB8ZSk7KTsoMHwoWj0wfGFyW3Y+PjJdKSk9PSgwfGFyW20+PjJdKT9kZShpLEIpOihzZShaLEIpLGFyW3Y+PjJdPTY0KygwfGFyW3Y+PjJdKSkscD0oKDB8dHJbbj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLDApfWVsc2UgcD0xO2lmKDB8KFo9MHxhclt1Pj4yXSkmJigoMHwoZT0wfGFyW2I+PjJdKSkhPSgwfFopJiYoYXJbYj4+Ml09ZSsofigoZSstNC1afDApPj4+Mik8PDIpKSx2dShaKSksYXJbQj4+Ml09NDI2NCwwfChaPTB8YXJbdD4+Ml0pJiYoKDB8YXJbbz4+Ml0pIT0oMHxaKSYmKGFyW28+PjJdPVopLHZ1KFopKSwxPT0oMHxwKSl7WD0zNjticmVha319dXI9KDM2IT0oMHxYKSYmKDB8dHJbcisyND4+MF0/KGFyW0I+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxvbyhBLDIsMTAwLEIpLCgwfHRyW0IrMTE+PjBdKTwwJiZ2dSgwfGFyW0I+PjJdKSk6KEU9MHxhclsoQj01NjU5MikrND4+Ml0sYXJbKFg9QSk+PjJdPWFyW0I+PjJdLGFyW1grND4+Ml09RSx5dShmLDU2NjAwKSkpLGcpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7aWYodXI9KG89dXIpKzE2MHwwLGw9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbbD4+Ml09MCxhcltsKzQ+PjJdPTAsYXJbbCs4Pj4yXT0wLFhlKHQsbCksKDB8dHJbbCsxMT4+MF0pPDAmJnZ1KDB8YXJbbD4+Ml0pLExBKGwsZSxyKSxXZShmLChjPSh1PTB8dHJbKGI9bCsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltsPj4yXTpsLGM/MHxhcltsKzQ+PjJdOjI1NSZ1KSwoMHx0cltiPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGYsMjA5MTYsMjMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU2Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA5NDAsMjMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU3Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA5NjQsMTkpLGM9MHxXZSgwfEhmKGMsMCE9KDB8dHJbZSs1OD4+MF0pKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihiPTB8V2UoYywyMDk4NCwyMSksV2UoMHxQZihiLDB8Y3JbZSs1OT4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2ZvcihXZShmLDIxMDA2LDM3KSxjPWUrNjB8MCxhPTA7TGYoZiwoMHxhcltjPj4yXSk+Pj4oMzEtYXwwKSYxKSw3IT0oKDB8YSklOHwwKT8zPT0oKDB8YSklNHwwKSYmKHRyW2w+PjBdPTQ2LFdlKGYsbCwxKSk6KHRyW2w+PjBdPTMyLFdlKGYsbCwxKSksKDB8KGE9YSsxfDApKTwzMjspO2lmKFdlKGYsMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7Zm9yKFdlKGYsMjEwNDQsMzYpLGE9MDtQZihmLDAhPShhcltlKzY0KyhhPj4+NTw8Mik+PjJdJjE8PCgzMSZhKXwwKSYxKSw3JihhPWErMXwwKXx8KHRyW2w+PjBdPTMyLFdlKGYsbCwxKSksKDB8YSk8NDg7KTtpZihXZShmLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShmLDIxMDgxLDE5KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Mj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTAxLDMwKSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs3ND4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTMyLDE4KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Nj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTUxLDE1KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3Nz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTY3LDE2KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3OD4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMTg0LDE4KSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs3OT4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjAzLDE2KSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs4MD4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjIwLDIxKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4Mj4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjQyLDIxKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4Mz4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDIxMjY0LDIwKSxjPTB8V2UoMHxQZihjLDB8Y3JbZSs4ND4+MF0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGE9MHxXZShjLDIxMjg1LDEzKSxXZSgwfFBmKGEsMHxjcltlKzg4Pj4wXSksMzAwODYsMSksKDB8KGE9MHxhcltlKzkyPj4yXSkpIT0oMHwoYj0wfGFyW2UrOTY+PjJdKSkpe3U9YSxhPTB8YXJbcj4+Ml07ZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShmLDIxMjk5LDgpLGU9MHxhcltyPj4yXSxhcltyPj4yXT1lKzEsLTE8KDB8ZSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGYsMjEzMDgsMjApLGM9MHxXZSgwfFBmKGMsMHxjclt1Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjEzMjksMTUpLFdlKDB8UGYoYywwfGNyW3UrMT4+MF0pLDMwMDg2LDEpLGM9MHxhclt1KzQ+PjJdLGU9MHxhclt1Kzg+PjJdLGE9MHxhcltyPj4yXSwoMHxjKSE9KDB8ZSkpZG97aWYoMDwoMHxhKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZigoMHwoYT0wfGFyW2M+PjJdKSkhPSgwfChsPTB8YXJbYys0Pj4yXSkpKWZvcig7cz0wfHRyW2E+PjBdLGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNzY+PjJdPTQ4LGFyW2YrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsZD1mKygwfGFyWygwfGFyW2Y+PjJdKS0xMj4+Ml0pKzR8MCxhcltkPj4yXT0tNzUmYXJbZD4+Ml18OCxXZSgwfFBmKGYsMjU1JnMpLDIwNDQ5LDEpLCgwfChhPWErMXwwKSkhPSgwfGwpOyk7V2UoZiwzMDA4NiwxKSxhPWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW2E+PjJdPS03NSZhclthPj4yXXwyLGM9YysxMnwwLGE9MHxhcltyPj4yXX13aGlsZSgoMHxjKSE9KDB8ZSkpO2E9KDB8YSk8MT8wOmErLTF8MCxhcltyPj4yXT1hLHU9dSsxNnwwfXdoaWxlKCgwfHUpIT0oMHxiKSl9aWYoSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTA7Zm9yKHVyPShpPXVyKSszMnwwLGE9aSxjPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksSkEociwwfHRyW2UrNTY+PjBdKSxKQShyLHRyW2UrNTg+PjBdPDw1JjI1NXx0cltlKzU3Pj4wXTw8NiYyNTV8MzEmdHJbZSs1OT4+MF0pLFVBKHIsMHxhcltlKzYwPj4yXSksZj0wO289Zjw8MyxKQShyLCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3w3KXwwKXwoMCE9KGFyW2UrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKT4+Ml0mMTw8KDI0Jm98Nil8MCl8KDAhPShhcltlKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mik+PjJdJjE8PCgyNCZvfDUpfDApfCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3w0KXwwKXwoMCE9KGFyW2UrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKT4+Ml0mMTw8KDI0Jm98Myl8MCl8KDAhPShhcltlKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mik+PjJdJjE8PCgyNCZvfDIpfDApfCgwIT0oYXJbZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpPj4yXSYxPDwoMjQmb3wxKXwwKSYxKTw8MSk8PDEpPDwxJjE0KTw8MSYzMCk8PDEmNjIpPDwxJjEyNik8PDEmMjU1KSw2IT0oMHwoZj1mKzF8MCkpOyk7aWYoSkEociwwfHRyW2UrNzI+PjBdKSxNQShyLC00MDk2fG9yW2UrNzQ+PjFdKSxKQShyLC00fHRyW2UrNzY+PjBdKSxKQShyLC00fHRyW2UrNzc+PjBdKSxKQShyLC04fHRyW2UrNzg+PjBdKSxKQShyLC04fHRyW2UrNzk+PjBdKSxNQShyLDB8b3JbZSs4MD4+MV0pLEpBKHIsMjU1JigyNTUmKHRyW2UrODM+PjBdPDwzJjU2fHRyW2UrODI+PjBdPDw2JjI1NXx0cltlKzg0Pj4wXTw8MiY0KXwzKygwfGNyW2UrODg+PjBdKSYzKSksZj1lKzkyfDAsSkEociwoKDB8YXJbKG89ZSs5NnwwKT4+Ml0pLSgwfGFyW2Y+PjJdKXwwKT4+PjQmMjU1KSwoMHwoZj0wfGFyW2Y+PjJdKSkhPSgwfChvPTB8YXJbbz4+Ml0pKSlkb3tpZihKQShyLHRyW2Y+PjBdPDw2JjY0fDYzJnRyW2YrMT4+MF0pLG49Zis0fDAsTUEociw2NTUzNSYoKCgwfGFyWyh0PWYrOHwwKT4+Ml0pLSgwfGFyW24+PjJdKXwwKS8xMnwwKSksKDB8KG49MHxhcltuPj4yXSkpIT0oMHwodD0wfGFyW3Q+PjJdKSkpZm9yKDtNQShyLCgwfGFyW24rND4+Ml0pLSgwfGFyW24+PjJdKSY2NTUzNSksekEocixuKSwoMHwobj1uKzEyfDApKSE9KDB8dCk7KTtmPWYrMTZ8MH13aGlsZSgoMHxmKSE9KDB8bykpO2lmKEtBKGEsZSxyLGMpLDA8PSgwfHRyWyhmPWErOHwwKSsxMT4+MF0pKXJldHVybiBlPTB8YXJbKGU9YT01NjU5Mik+PjJdLGE9MHxhclsoYT1hKzR8MCk+PjJdLGFyWyhyPWM9QSk+PjJdPWUsYXJbKGM9Yys0fDApPj4yXT1hLHl1KEE9QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltmPj4yXSksZT0wfGFyWyhlPWE9NTY1OTIpPj4yXSxhPTB8YXJbKGE9YSs0fDApPj4yXSxhclsocj1jPUEpPj4yXT1lLGFyWyhjPWMrNHwwKT4+Ml09YSx5dShBPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGY9MCxuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MDtmb3IodXI9KGk9dXIpKzMyfDAsST1pKzE2fDAsVz1pLG49MHxJQShyfD0wKSx0cltlKzU2Pj4wXT1uLGY9MjU1JihuPTB8SUEocikpLHRyW2UrNTc+PjBdPSgyNTUmbik+Pj42LHRyW2UrNTg+PjBdPWY+Pj41JjEsdHJbZSs1OT4+MF09MzEmZixmPTB8RkEociksYXJbZSs2MD4+Ml09ZixuPShmPTApfElBKHIpO3A9MjU1Jm4seT0xPDwoMjQmKEI9Zjw8MykpLFo9MHxhclsoRT1lKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mil8MCk+PjJdLGFyW0U+PjJdPTEyOCZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwxKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT02NCZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwyKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0zMiZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnwzKSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0xNiZwfDA/Wnx5OlomfnkseT0xPDwoMjQmQnw0KSxaPTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT04JnB8MD9afHk6WiZ+eSx5PTE8PCgyNCZCfDUpLFo9MHxhclsoRT1lKzY0KygoZj4+PjImMTM0MjE3NzI3KTw8Mil8MCk+PjJdLGFyW0U+PjJdPTQmcHwwP1p8eTpaJn55LHk9MTw8KDI0JkJ8NiksWj0wfGFyWyhFPWUrNjQrKChmPj4+MiYxMzQyMTc3MjcpPDwyKXwwKT4+Ml0sYXJbRT4+Ml09MiZwfDA/Wnx5OlomfnksQj0xPDwoMjQmQnw3KSx5PTB8YXJbKEU9ZSs2NCsoKGY+Pj4yJjEzNDIxNzcyNyk8PDIpfDApPj4yXSxhcltFPj4yXT0xJnB8MD95fEI6eSZ+QixmPWYrMXwwLG49MHxJQShyKSw2IT0oMHxmKTspO3RyW2UrNzI+PjBdPW4saz00MDk1JigwfFZBKHIpKSxvcltlKzc0Pj4xXT1rLGs9MyYoMHxJQShyKSksdHJbZSs3Nj4+MF09ayxrPTMmKDB8SUEocikpLHRyW2UrNzc+PjBdPWssaz03JigwfElBKHIpKXw4LHRyW2UrNzg+PjBdPWssaz03JigwfElBKHIpKXw4LHRyW2UrNzk+PjBdPWssaz0wfFZBKHIpLG9yW2UrODA+PjFdPWssRT0yNTUmKGs9MHxJQShyKSksdHJbZSs4Mj4+MF09KDI1NSZrKT4+PjYsdHJbZSs4Mz4+MF09RT4+PjMmNyx0cltlKzg0Pj4wXT1FPj4+MiYxLHRyW2UrODg+PjBdPTErKDMmRSksaz0yNTUmKEU9MHxJQShyKSk7QTpkb3tpZihFPDwyND4+MjQpe2g9cisyNHwwLHY9SSs4fDAsZz1JKzF8MCxaPWUrOTZ8MCxwPWUrMTAwfDAsQj1tPUkrMTJ8MCxFPXk9dz1JKzR8MCxsPWUrOTJ8MCx1PVcrNHwwLHM9cis0fDAsZD1iPVcrOHwwLGM9MDtkb3tpZigwfHRyW2g+PjBdKWJyZWFrIEE7bz0wfElBKHIpLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhclttPj4yXT0wLG8mPTI1NSx0cltJPj4wXT1vPj4+NiYxLHRyW2c+PjBdPTYzJm8sYT02NTUzNSYobz0wfFZBKHIpKTtlOmRve2lmKG88PDE2Pj4xNil7bz0wO2Rve2lmKDB8dHJbaD4+MF0pYnJlYWsgZTthcltXPj4yXT0wLGFyW3U+PjJdPTAsdD02NTUzNSYoZj0oYXJbYj4+Ml09MCl8VkEocikpO2Rve2lmKGY8PDE2Pj4xNil7ZG97aWYoMHxDQShyLDY1NTM1JmYsMCkpe2lmKHQ+Pj4wPD0oZj0oZT0wfGFyW3U+PjJdKS0obj0wfGFyW1c+PjJdKXwwKT4+PjA/dD4+PjA8Zj4+PjAmJigwfGUpIT0oMHwoWD1uK3R8MCkpJiYoYXJbdT4+Ml09WCk6VEEoVyx0LWZ8MCksZj0wfGFyW3I+PjJdLG49MHxhcltzPj4yXSl7YnUobikseGJbNjMmYXJbMTYrKDB8YXJbZj4+Ml0pPj4yXV0oZiwwfGFyW1c+PjJdLHQpLGR1KG4pO2JyZWFrfXhiWzYzJmFyWzE2KygwfGFyW2Y+PjJdKT4+Ml1dKGYsMHxhcltXPj4yXSx0KTticmVha319d2hpbGUoMCk7aWYoKGY9MHxhclt2Pj4yXSk+Pj4wPCgwfGFyW0I+PjJdKT4+PjApe2FyW2Y+PjJdPTAsYXJbKHQ9Zis0fDApPj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT1hcltXPj4yXSxhclt0Pj4yXT1hclt1Pj4yXSxhcltmKzg+PjJdPWFyW2Q+PjJdLGFyW2Q+PjJdPTAsYXJbdT4+Ml09MCxhcltXPj4yXT0wLGFyW3Y+PjJdPTEyKygwfGFyW3Y+PjJdKTticmVha311ZSh5LFcpO2JyZWFrfX13aGlsZSgwKTswfChmPTB8YXJbVz4+Ml0pJiYoKDB8YXJbdT4+Ml0pIT0oMHxmKSYmKGFyW3U+PjJdPWYpLHZ1KGYpKSxvPW8rMXwwfXdoaWxlKCgwfG8pPCgwfGEpKX19d2hpbGUoMCk7aWYoKGY9MHxhcltaPj4yXSk+Pj4wPj0oMHxhcltwPj4yXSk+Pj4wKXtpZihsZShsLEkpLDB8KGY9MHxhcltFPj4yXSkpe2lmKCgwfChuPTB8YXJbdj4+Ml0pKSE9KDB8Zikpe2Zvcig7ZT1uKy0xMnwwLGFyW3Y+PjJdPWUsKDB8KG49KHQ9MHxhcltlPj4yXSk/KCgwfGFyWyhuPW4rLTh8MCk+PjJdKSE9KDB8dCkmJihhcltuPj4yXT10KSx2dSh0KSwwfGFyW3Y+PjJdKTplKSkhPSgwfGYpOyk7Zj0wfGFyW0U+PjJdfXZ1KGYpfX1lbHNlIG9yW2Y+PjFdPTB8b3JbST4+MV0sYXJbKG89Zis0fDApPj4yXT0wLGFyWyhhPWYrOHwwKT4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW28+PjJdPWFyW3k+PjJdLGFyW2E+PjJdPWFyW3Y+PjJdLGFyW2YrMTI+PjJdPWFyW0I+PjJdLGFyW0I+PjJdPTAsYXJbdj4+Ml09MCxhclt5Pj4yXT0wLGFyW1o+PjJdPTE2KygwfGFyW1o+PjJdKTtjPWMrMXwwfXdoaWxlKCgwfGMpPCgwfGspKX19d2hpbGUoMCk7aWYobj0wfGFyWyhmPXQ9cisxNnwwKT4+Ml0sMDwoMHwoZj0wfGFyW2YrND4+Ml0pKXwwPT0oMHxmKSYwPG4+Pj4wJiYoKGU9MHxhcltyKzg+PjJdKSYmKF9BKGUsbixmKSxuPTB8YXJbKGY9dCk+PjJdLGY9MHxhcltmKzQ+PjJdKSxYPTB8YXJbcj4+Ml0sVz0wfGFyW1g+PjJdLEU9MHxhcltXKzIwPj4yXSxXPTB8dGIoMHwoVz0wfGpiWzEyNyZhcltXKzg+PjJdXShYKSksMHxELDB8biwwfGYpLHhiWzYzJkVdKFgsVyxEKSxhclsoVz10KT4+Ml09MCxhcltXKzQ+PjJdPTApLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoVz01NjU5MikrND4+Ml0sYXJbKEk9QSk+PjJdPWFyW1c+PjJdLGFyW0krND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1pKTthcltJPj4yXT0wLGFyW0krND4+Ml09MCxhcltJKzg+PjJdPTAsb28oQSwyLDEwMCxJKSx1cj0oMDw9KDB8dHJbSSsxMT4+MF0pfHx2dSgwfGFyW0k+PjJdKSxpKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxhPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxYZSh0LGEpLCgwfHRyW2ErMTE+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSxMQShhLGUsciksV2UoZiwodT0obD0wfHRyWyhjPWErMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYT4+Ml06YSx1PzB8YXJbYSs0Pj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoZiwxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShmLDE4OTA3LDkpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU2Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NDQsMTMpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU3Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NTgsMTcpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzU4Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2NzYsMTUpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYwPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA2OTIsMTIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYxPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3MDUsMjIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzYzPj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3MjgsMjIpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzY0Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMjA3NTEsMjQpLGM9MHxXZSgwfFBmKGMsMHxjcltlKzY1Pj4wXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoYywyMDc3NiwyOCksMHx0cltlKzY2Pj4wXT9XZSgwfFBmKGYsMSsoMHxjcltlKzY3Pj4wXSl8MCksMzAwODYsMSk6V2UoZiwyMDgwNSwxMiksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UoZiwyMDgxOCwxMikscj1lKzY4fDAsKDB8YXJbKGM9ZSs3MnwwKT4+Ml0pIT0oMHxhcltyPj4yXSkpZm9yKGE9MDtsPSh1PTB8V2UoZiwyMDQ0OSwxKSkrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrNHwwLGFyW2w+PjJdPS03NSZhcltsPj4yXXw4LGFyW3UrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrNzY+PjJdPTQ4LGFyW3UrKDB8YXJbKDB8YXJbdT4+Ml0pLTEyPj4yXSkrMTI+PjJdPTIsUGYodSwwfGNyWygwfGFyW3I+PjJdKSthPj4wXSksKGE9YSsxfDApPj4+MDwoKDB8YXJbYz4+Ml0pLSgwfGFyW3I+PjJdKXwwKT4+PjA7KTtpZih1PWYrKDB8YXJbKDB8YXJbZj4+Ml0pLTEyPj4yXSkrNHwwLGFyW3U+PjJdPS03NSZhclt1Pj4yXXwyLFdlKGYsMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZj0wLG49MDtpZih1cj0oaT11cikrMzJ8MCxmPWksbj0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLEpBKHIsLTEyOHx0cltlKzU2Pj4wXSksSkEociwzMSZ0cltlKzU4Pj4wXXx0cltlKzU3Pj4wXTw8NSYyNTUpLEpBKHIsMjU1JigoMHx0cltlKzYwPj4wXT82NDowKXwoMHx0cltlKzU5Pj4wXT8xMjg6MCl8KDB8dHJbZSs2MT4+MF0/MzI6MCl8KDB8dHJbZSs2Mj4+MF0/MTY6MCl8KDB8dHJbZSs2Mz4+MF0/ODowKXwoMHx0cltlKzY0Pj4wXT80OjApfDMmdHJbZSs2NT4+MF0pKSxKQShyLDApLEtBKGYsZSxyLG4pLDA8PSgwfHRyWyhlPWYrOHwwKSsxMT4+MF0pKXJldHVybiBlPTB8YXJbKGU9Zj01NjU5Mik+PjJdLGY9MHxhclsoZj1mKzR8MCk+PjJdLGFyWyhyPW49QSk+PjJdPWUsYXJbKG49bis0fDApPj4yXT1mLHl1KG49QSs4fDAsNTY2MDApLHZvaWQodXI9aSk7dnUoMHxhcltlPj4yXSksZT0wfGFyWyhlPWY9NTY1OTIpPj4yXSxmPTB8YXJbKGY9Zis0fDApPj4yXSxhclsocj1uPUEpPj4yXT1lLGFyWyhuPW4rNHwwKT4+Ml09Zix5dShuPUErOHwwLDU2NjAwKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wO2lmKHVyPShvPXVyKSsxNnwwLHc9byxrPTEyNyYoMHxJQShyfD0wKSksdHJbZSs1Nj4+MF09ayxrPTB8SUEociksdHJbZSs1Nz4+MF09KDI1NSZrKT4+PjUsdHJbZSs1OD4+MF09MzEmayxkPTI1NSYoaz0wfElBKHIpKSx0cltlKzU5Pj4wXT0oMjU1JmspPj4+Nyx0cltlKzYwPj4wXT1kPj4+NiYxLHRyW2UrNjE+PjBdPWQ+Pj41JjEsdHJbZSs2Mj4+MF09ZD4+PjQmMSx0cltlKzYzPj4wXT1kPj4+MyYxLHRyW2UrNjQ+PjBdPWQ+Pj4yJjEsdHJbZSs2NT4+MF09MyZkLGs9KGQ9MjU1JigwfElBKHIpKSk+Pj40JjEsKHRyW2UrNjY+PjBdPWspPDwyND4+MjQmJih0cltlKzY3Pj4wXT0xNSZkKSx0PTB8YXJbKGs9cisxNnwwKT4+Ml0saz0wfGFyW2srND4+Ml0sbj1lKzY4fDAsdD4+PjA8PShpPShmPTB8YXJbKGU9ZSs3MnwwKT4+Ml0pLShkPTB8YXJbbj4+Ml0pfDApPj4+MD90Pj4+MDxpPj4+MCYmKDB8ZikhPSgwfChoPWQrdHwwKSkmJihhcltlPj4yXT1oKTooVEEobix0LWl8MCksZD0wfGFyW24+PjJdKSxhPXIsYz1kLGw9dCx1PWssY3w9MCxhPTB8Q0EoYXw9MCxsfD0wLHV8PTApPyh1PTB8YXJbYT4+Ml0sKHM9MD09KDB8KGI9MHxhclthKzQ+PjJdKSkpfHxidShiKSwodT0wfHhiWzYzJmFyWzE2KygwfGFyW3U+PjJdKT4+Ml1dKHUsYyxsKSl8fEdBKGEpLHN8fGR1KGIpLHUpOjAsISgwfHRyW3IrMjQ+PjBdKSlyZXR1cm4gcj0wfGFyWyhoPTU2NTkyKSs0Pj4yXSxhclsodz1BKT4+Ml09YXJbaD4+Ml0sYXJbdys0Pj4yXT1yLHl1KEErOHwwLDU2NjAwKSx2b2lkKHVyPW8pO2FyW3c+PjJdPTAsYXJbdys0Pj4yXT0wLGFyW3crOD4+Ml09MCxvbyhBLDIsMTAwLHcpLHVyPSgwPD0oMHx0clt3KzExPj4wXSl8fHZ1KDB8YXJbdz4+Ml0pLG8pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShvPXVyKSsxNjB8MCxjPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2M+PjJdPTAsYXJbYys0Pj4yXT0wLGFyW2MrOD4+Ml09MCxYZSh0LGMpLCgwfHRyW2MrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSxMQShjLGUsciksV2UoZiwodT0obD0wfHRyWyhhPWMrMTF8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYz4+Ml06Yyx1PzB8YXJbYys0Pj4yXToyNTUmbCksKDB8dHJbYT4+MF0pPDAmJnZ1KDB8YXJbYz4+Ml0pLDA8KDB8YXJbcj4+Ml0pKWZvcihjPTA7V2UoZiwxODg2MiwyKSwoMHwoYz1jKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGw9MHxXZShmLDIwNTM2LDIyKSxXZSgwfEtmKGwsdT0wfG9iKDB8YXJbKHU9ZSs4fDApPj4yXSwwfGFyW3UrND4+Ml0sMHxhcltlKzE2Pj4yXSwwKSxEKSwzMDA4NiwxKSxJZShBLHQpLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxhclt0Pj4yXT00MzQwLDA8PSgwfHRyWzExK2k+PjBdKSlyZXR1cm4ga2YodCksR2YoKSxiZihuKSx2b2lkKHVyPW8pO3Z1KDB8YXJbaT4+Ml0pLGtmKHQpLEdmKCksYmYobiksdXI9b30sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmPTAsbj0wO3VyPShpPXVyKSszMnwwLGY9aSxuPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksekEocixlKzcyfDApLEtBKGYsZSxyLG4pLCgwfHRyWyhlPWYrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbZT4+Ml0pLGY9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKG49QSk+PjJdPWFyW3I+PjJdLGFyW24rND4+Ml09Zix5dShBKzh8MCw1NjYwMCksdXI9aX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MDt2YXIgaSxmLG49MCx0PTAsbz0wO2lmKHVyPShmPXVyKSsxNnwwLGk9ZixuPTB8YXJbKHJ8PTApPj4yXSwodD0wfGFyW3IrND4+Ml0pPyhidSh0KSxvPTB8amJbMTI3JmFyWzgrKDB8YXJbbj4+Ml0pPj4yXV0obiksYXJbKG49ZSs1NnwwKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49ZSs2NHwwKT4+Ml09byxhcltuKzQ+PjJdPUQsZHUodCkpOihuPTB8amJbMTI3JmFyWzgrKDB8YXJbbj4+Ml0pPj4yXV0obiksYXJbKHQ9ZSs1NnwwKT4+Ml09MCxhclt0KzQ+PjJdPTAsYXJbKHQ9ZSs2NHwwKT4+Ml09bixhclt0KzQ+PjJdPUQpLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHQ9MHxhclsobj01NjU5MikrND4+Ml0sYXJbKG89QSk+PjJdPWFyW24+PjJdLGFyW28rND4+Ml09dCx5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthcltpPj4yXT0wLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsb28oQSwyLDEwMCxpKSx1cj0oMDw9KDB8dHJbaSsxMT4+MF0pfHx2dSgwfGFyW2k+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGI9MHx0clsocz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmIpLCgwfHRyW3M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoMHwoYz0wfGFyW2UrNTY+PjJdKSkhPSgwfCh1PTB8YXJbZSs2MD4+Ml0pKSl7Yj0xMStmfDAscz00K2Z8MDtkb3tpZigwPCgwfGFyW3I+PjJdKSlmb3IoZT0wO1dlKG4sMTg4NjIsMiksKDB8KGU9ZSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihkPTB8V2UobiwyMDQwOCwxMikseEEoZixjKSxsPTB8V2UoMHxXZShkLChlPShsPTB8dHJbYj4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGU/MHxhcltzPj4yXToyNTUmbCksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGU9MDtXZShsLDE4ODYyLDIpLCgwfChlPWUrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYobD0wfFdlKGwsMjA0MjEsMTIpLGw9MHxXZSgwfExmKGwsMHxhcltjKzQ4Pj4yXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGU9MDtXZShsLDE4ODYyLDIpLCgwfChlPWUrMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoV2UobCwyMDQzNCwxNCksKDB8dHJbYj4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLCgwfChlPTB8YXJbYys1Mj4+Ml0pKSE9KDB8KGw9MHxhcltjKzU2Pj4yXSkpKWZvcig7V2UoMHxMZihuLDB8YXJbZT4+Ml0pLDIwNDQ5LDEpLCgwfChlPWUrNHwwKSkhPSgwfGwpOyk7V2UobiwzMDA4NiwxKSxjPWMrNjR8MH13aGlsZSgoMHxjKSE9KDB8dSkpfWlmKEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7dmFyIGksZixuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTA7Zm9yKHVyPShaPXVyKSs5NnwwLHY9KHJ8PTApKzE2fDAsbT04KyhoPVorMjR8MCl8MCxnPTQwK2h8MCxYPTU2K2h8MCxsPSh3PVopKzh8MCx1PTExKyhjPShBfD0wKSs4fDApfDAsYj1BKzEyfDAscz00OCtofDAsZD0oZXw9MCkrNjB8MCxrPWUrNjR8MCxpPWUrNTZ8MCxmPWE9NjAraHwwLG49RT01MitofDAsdD0yNCtofDAsbz0yOCtofDA7ISgwPT0oMHxhclsoQj12KT4+Ml0pJjA9PSgwfGFyW0IrND4+Ml0pKTspe2lmKGFyW2g+PjJdPTQyNjQsYXJbZz4+Ml09MCxhclttPj4yXT0wLGFyWzQrbT4+Ml09MCxhcls4K20+PjJdPTAsYXJbMTIrbT4+Ml09MCxhclsxNittPj4yXT0wLGFyWzIwK20+PjJdPTAsYXJbMjQrbT4+Ml09MCxvclsyOCttPj4xXT0wLGFyW0U+PjJdPTAsYXJbWD4+Ml09MCxhclthPj4yXT0wLHJlKEEsaCxyKSwoMHxhcltBPj4yXSk9PSgwfGFyWzE0MTQ4XSkpaWYocUEodyxoLHIpLHk9MHxhclsocD13KSs0Pj4yXSxhclsoQj1BKT4+Ml09YXJbcD4+Ml0sYXJbQis0Pj4yXT15LCgwfHRyW3U+PjBdKTwwPyh0clthcltjPj4yXT4+MF09MCxhcltiPj4yXT0wKToodHJbYz4+MF09MCx0clt1Pj4wXT0wKSxDdShjLDApLGFyW2M+PjJdPWFyW2w+PjJdLGFyWzQrYz4+Ml09YXJbNCtsPj4yXSxhcls4K2M+PjJdPWFyWzgrbD4+Ml0sKDB8YXJbQT4+Ml0pPT0oMHxhclsxNDE0OF0pKXtwPTB8RkEociksYXJbcz4+Ml09cCxwPTB8RkEocik7QTpkb3tpZigwPCgwfHApKXtlPTA7ZG97aWYoMD09KDB8YXJbKEI9dik+PjJdKSYwPT0oMHxhcltCKzQ+PjJdKSlicmVhayBBO3k9MHxGQShyKSxhclt3Pj4yXT15LChCPTB8YXJbWD4+Ml0pPj4+MDwoMHxhcltmPj4yXSk+Pj4wPyhhcltCPj4yXT15LGFyW1g+PjJdPUIrNCk6Q2Uobix3KSxlPWUrMXwwfXdoaWxlKCgwfGUpPCgwfHApKX19d2hpbGUoMCk7KDB8KGU9MHxhcltkPj4yXSkpPT0oMHxhcltrPj4yXSk/YWUoaSxoKToob2UoZSxoKSxhcltkPj4yXT02NCsoMHxhcltkPj4yXSkpLHk9KCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSwwKX1lbHNlIHk9MTtlbHNlIHk9MTtpZigwfChlPTB8YXJbRT4+Ml0pJiYoKDB8KHA9MHxhcltYPj4yXSkpIT0oMHxlKSYmKGFyW1g+PjJdPXArKH4oKHArLTQtZXwwKT4+PjIpPDwyKSksdnUoZSkpLGFyW2g+PjJdPTQyNjQsMHwoZT0wfGFyW3Q+PjJdKSYmKCgwfGFyW28+PjJdKSE9KDB8ZSkmJihhcltvPj4yXT1lKSx2dShlKSksMT09KDB8eSkpe1c9MzM7YnJlYWt9fXVyPSgzMyE9KDB8VykmJigwfHRyW3IrMjQ+PjBdPyhhcltoPj4yXT0wLGFyWzQraD4+Ml09MCxhcls4K2g+PjJdPTAsb28oQSwyLDEwMCxoKSwoMHx0clsxMStoPj4wXSk8MCYmdnUoMHxhcltoPj4yXSkpOihYPTB8YXJbKEU9NTY1OTIpKzQ+PjJdLGFyWyhXPUEpPj4yXT1hcltFPj4yXSxhcltXKzQ+PjJdPVgseXUoYyw1NjYwMCkpKSxaKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxuZShmLGUsciksV2UobiwoYz0obD0wfHRyWyh1PTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06ZixjPzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbdT4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7JEEoQXw9MCxlfD0wLHJ8PTAsLTEpfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wO2lmKHVyPShhPXVyKSsxNjB8MCxmPWErMTM2fDAsdD0obj1hKSs1NnwwLG89bis0fDAsYXJbbj4+Ml09MjkyLGFyW3Q+PjJdPTMxMixKZihuKzU2fDAsbyksYXJbbisxMjg+PjJdPTAsYXJbbisxMzI+PjJdPS0xLGFyW24+PjJdPTQzMDQsYXJbdD4+Ml09NDMyNCxTZihvKSxhcltvPj4yXT00MzQwLGFyWyhpPW4rMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW24rNTI+PjJdPTE2LGFyW2Y+PjJdPTAsYXJbNCtmPj4yXT0wLGFyWzgrZj4+Ml09MCxYZShvLGYpLCgwfHRyWzExK2Y+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSxMQShmLGUsciksV2UobiwodT0obD0wfHRyWyhjPTExK2Z8MCk+PjBdKTw8MjQ+PjI0PDApPzB8YXJbZj4+Ml06Zix1PzB8YXJbNCtmPj4yXToyNTUmbCksKDB8dHJbYz4+MF0pPDAmJnZ1KDB8YXJbZj4+Ml0pLG5lKGYsZSxyKSxXZShuLChjPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLGM/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSksSWUoQSxvKSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsYXJbbz4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKG8pLEdmKCksYmYodCksdm9pZCh1cj1hKTt2dSgwfGFyW2k+PjJdKSxrZihvKSxHZigpLGJmKHQpLHVyPWF9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wO3ZhciBpLGY9MDt1cj0oaT11cikrMzJ8MCxxQShmPWksZXw9MCxyfD0wKSwoMHx0clsoZj1mKzh8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwkQShBLGUsciwwfEZBKHIpKSx1cj1pfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzE2MHwwLGE9bysxMzZ8MCxuPShmPW8pKzU2fDAsdD1mKzR8MCxhcltmPj4yXT0yOTIsYXJbbj4+Ml09MzEyLEpmKGYrNTZ8MCx0KSxhcltmKzEyOD4+Ml09MCxhcltmKzEzMj4+Ml09LTEsYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LFNmKHQpLGFyW3Q+PjJdPTQzNDAsYXJbKGk9ZiszNnwwKT4+Ml09MCxhcls0K2k+PjJdPTAsYXJbOCtpPj4yXT0wLGFyWzEyK2k+PjJdPTAsYXJbZis1Mj4+Ml09MTYsYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLFhlKHQsYSksKDB8dHJbYSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLExBKGEsZSxyKSxXZShmLCh1PShsPTB8dHJbKGM9YSsxMXwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhclthPj4yXTphLHU/MHxhclthKzQ+PjJdOjI1NSZsKSwoMHx0cltjPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYocj0wfFdlKGYsMjAxNDQsMTApLFdlKDB8V2UociwobD0odT0wfHRyWyhjPWUrNTZ8MCkrMTE+PjBdKTw8MjQ+PjI0PDApPzB8YXJbYz4+Ml06YyxsPzB8YXJbZSs2MD4+Ml06MjU1JnUpLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MDt2YXIgaSxmLG49MCx0PTA7aWYodXI9KGY9dXIpKzMyfDAsdD1mKzIwfDAscUEobj1mLGV8PTAscnw9MCksKDB8dHJbKG49bis4fDApKzExPj4wXSk8MCYmdnUoMHxhcltuPj4yXSksUkEodCxyKSwoMHx0clsoaT0obj1lKzU2fDApKzExfDApPj4wXSk8MD8odHJbYXJbbj4+Ml0+PjBdPTAsYXJbZSs2MD4+Ml09MCk6KHRyW24+PjBdPTAsdHJbaT4+MF09MCksQ3UobiwwKSxhcltuPj4yXT1hclt0Pj4yXSxhcltuKzQ+PjJdPWFyW3QrND4+Ml0sYXJbbis4Pj4yXT1hclt0Kzg+PjJdLCEoMHx0cltyKzI0Pj4wXSkpcmV0dXJuIHI9MHxhclsoZT01NjU5MikrND4+Ml0sYXJbKHQ9QSk+PjJdPWFyW2U+PjJdLGFyW3QrND4+Ml09cix5dShBKzh8MCw1NjYwMCksdm9pZCh1cj1mKTthclt0Pj4yXT0wLGFyW3QrND4+Ml09MCxhclt0Kzg+PjJdPTAsb28oQSwyLDEwMCx0KSx1cj0oMDw9KDB8dHJbdCsxMT4+MF0pfHx2dSgwfGFyW3Q+PjJdKSxmKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbix0LG8sYSxjPTAsbD0wLHU9MDtpZih1cj0oYT11cikrMTYwfDAsZj1hKzEzNnwwLHQ9KG49YSkrNTZ8MCxvPW4rNHwwLGFyW24+PjJdPTI5Mixhclt0Pj4yXT0zMTIsSmYobis1NnwwLG8pLGFyW24rMTI4Pj4yXT0wLGFyW24rMTMyPj4yXT0tMSxhcltuPj4yXT00MzA0LGFyW3Q+PjJdPTQzMjQsU2YobyksYXJbbz4+Ml09NDM0MCxhclsoaT1uKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltuKzUyPj4yXT0xNixhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsWGUobyxmKSwoMHx0clsxMStmPj4wXSk8MCYmdnUoMHxhcltmPj4yXSksTEEoZixlLHIpLFdlKG4sKHU9KGw9MHx0clsoYz0xMStmfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2Y+PjJdOmYsdT8wfGFyWzQrZj4+Ml06MjU1JmwpLCgwfHRyW2M+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYz0wO1dlKG4sMTg4NjIsMiksKDB8KGM9YysxfDApKTwoMHxhcltyPj4yXSk7KTtpZihsPTB8V2UobiwyMDAyNywxMyksZT0wfGFyWyhjPWUrNTZ8MCk+PjJdLGU9MHxqYlsxMjcmYXJbOCsoMHxhcltlPj4yXSk+PjJdXShlKSxhcltmPj4yXT0wLGFyWzQrZj4+Ml09MCxhcls4K2Y+PjJdPTAsdHJbKHU9MTErZnwwKT4+MF09NCx0cls0K2Y+PjBdPTAsdHJbZj4+MF09ZT4+PjI0LHRyWzErZj4+MF09ZT4+PjE2LHRyWzIrZj4+MF09ZT4+PjgsdHJbMytmPj4wXT1lLFdlKDB8V2UobCxmLDQpLDMwMDg2LDEpLCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2Y+PjJdKSwoYz0wfGFyW2M+PjJdKT8obnNbMTI3JmFyWzEyKygwfGFyW2M+PjJdKT4+Ml1dKGYsYyxyKSxXZShuLChyPShsPTB8dHJbKHU9MTErZnwwKT4+MF0pPDwyND4+MjQ8MCk/MHxhcltmPj4yXTpmLHI/MHxhcls0K2Y+PjJdOjI1NSZsKSwoMHx0clt1Pj4wXSk8MCYmdnUoMHxhcltmPj4yXSkpOldlKG4sMjAwNDEsMTcpLEllKEEsbyksYXJbbj4+Ml09NDMwNCxhclt0Pj4yXT00MzI0LGFyW28+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZihvKSxHZigpLGJmKHQpLHZvaWQodXI9YSk7dnUoMHxhcltpPj4yXSksa2YobyksR2YoKSxiZih0KSx1cj1hfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTAsYT0wO2lmKHVyPShmPXVyKSs0OHwwLHQ9KGE9ZikrMjB8MCxvPTB8YXJbKHJ8PTApKzEyPj4yXSxqQShyLDB8dHJbZSszNj4+MF0/MTI6OCksKG49MHxhclsoaT1lKzU2fDApPj4yXSl8fHNyKDIwMDExLDE5MTA0LDE4NTcsMTk1NjMpLFVBKHIsMHxqYlsxMjcmYXJbOCsoMHxhcltuPj4yXSk+PjJdXShuKSksbj0wfGFyW2k+PjJdLG5zWzEyNyZhclsxNisoMHxhcltuPj4yXSk+PjJdXShhLG4sciksMHxhclthPj4yXSlyZXR1cm4gdD0wfGFyWyhyPWEpKzQ+PjJdLGFyWyhvPUEpPj4yXT1hcltyPj4yXSxhcltvKzQ+PjJdPXQsYT1hKzh8MCxhclsoQT1BKzh8MCk+PjJdPWFyW2E+PjJdLGFyW0ErND4+Ml09YXJbYSs0Pj4yXSxhcltBKzg+PjJdPWFyW2ErOD4+Ml0sYXJbYT4+Ml09MCxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLHZvaWQodXI9Zik7S0EodCxlLHIsbyksKDB8dHJbKGU9dCs4fDApKzExPj4wXSk8MCYmdnUoMHxhcltlPj4yXSksdD0wfGFyWyhyPTU2NTkyKSs0Pj4yXSxhclsobz1BKT4+Ml09YXJbcj4+Ml0sYXJbbys0Pj4yXT10LHl1KEErOHwwLDU2NjAwKSx1cj0oMDw9KDB8dHJbYSs4KzExPj4wXSl8fHZ1KDB8YXJbYSs4Pj4yXSksZil9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuPTAsdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDt1cj0oZj11cikrNjR8MCxiPWYrNDB8MCxsPWYrMzZ8MCxvPWYrMjR8MCxpPWYrMTZ8MCxuPWYsdD0wfEZBKHJ8PTApLGFyW2w+PjJdPXQ7QTpkb3tpZigxODg2NTQ3ODE0PD0oMHx0KSl7aWYoKDB8dCk8MTkxNzQwMzk3MSlzd2l0Y2goMHx0KXtjYXNlIDE4ODY1NDc4MTQ6YnJlYWs7ZGVmYXVsdDpzPTI2O2JyZWFrIEF9ZWxzZSBzd2l0Y2goMHx0KXtjYXNlIDE5MTc0MDM5NzE6YnJlYWs7ZGVmYXVsdDpzPTI2O2JyZWFrIEF9aWYoMHxOQShyLGE9MHx0YigwfChhPTB8b2IoMHxhclsoYT1lKzh8MCk+PjJdLDB8YXJbYSs0Pj4yXSwwfGFyW2UrMTY+PjJdLDApKSwwfEQsLTQsLTEpLGM9RCkpcmV0dXJuIGFyW28+PjJdPTAsYXJbbys0Pj4yXT0wLGFyW28rOD4+Ml09MCxvbyhBLDIsMTAwLG8pLDA8PSgwfHRyW28rMTE+PjBdKXx8dnUoMHxhcltvPj4yXSksdm9pZCh1cj1mKTtpZihhcltiPj4yXT0wLGFyWyhvPWIrNHwwKT4+Ml09MCwoYXJbYis4Pj4yXT0wKXxhKWZvcigoMHxhKTwwJiZ6bCgpLHQ9MHxodShhKSxhcltvPj4yXT10LGFyW2I+PjJdPXQsYXJbYis4Pj4yXT10K2Esbj1hO3Q9MSsoKHRyW3Q+PjBdPTApfGFyW28+PjJdKXwwLGFyW28+PjJdPXQsMCE9KDB8KG49bistMXwwKSk7KTtpZighKDA9PSgwfGEpJjA9PSgwfGMpKSlmb3Iobj0wO3Q9MHxJQShyKSx0clsoMHxhcltiPj4yXSkrbj4+MF09dCwwPGM+Pj4wfDA9PSgwfGMpJihuPW4rMXwwKT4+PjA8YT4+PjA7KTtmZShpLGwsYiksbj0wfGFyW2k+PjJdLGw9MHxhclsodD00K2l8MCk+PjJdLGFyW2k+PjJdPTAsYXJbdD4+Ml09MCxhcltlKzU2Pj4yXT1uLG49MHxhclsoZT1lKzYwfDApPj4yXSxhcltlPj4yXT1sLDB8biYmKGR1KG4pLDB8KHU9MHxhclt0Pj4yXSkpJiZkdSh1KSwwfChuPTB8YXJbYj4+Ml0pJiYoKDB8YXJbbz4+Ml0pIT0oMHxuKSYmKGFyW28+PjJdPW4pLHZ1KG4pKX1lbHNle3N3aXRjaCgwfHQpe2Nhc2UgMTg1MjAwOTU5MjpicmVhaztkZWZhdWx0OnM9MjY7YnJlYWsgQX1pZihvPTB8aHUoMjQpLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbz4+Ml09NjA2NCxhclsodD1vKzEyfDApPj4yXT02MDkyLG9yW28rMTY+PjFdPTIsb3JbbysxOD4+MV09MixvcltvKzIwPj4xXT02LHRyW28rMjI+PjBdPTEsYnUobyksYXJbZSs1Nj4+Ml09dCxuPTB8YXJbKGU9ZSs2MHwwKT4+Ml0sYXJbZT4+Ml09bywwfG4mJmR1KG4pLGllKEEsdCxyKSwwfGFyW0E+PjJdKXJldHVybiBkdShvKSx2b2lkKHVyPWYpOygwfHRyWyhuPUErOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbj4+Ml0pLGR1KG8pfX13aGlsZSgwKTtpZigyNj09KDB8cykpcmV0dXJuIGFyW24+PjJdPTAsYXJbbis0Pj4yXT0wLGFyW24rOD4+Ml09MCxvbyhBLDIsMTI2LG4pLDA8PSgwfHRyW24rMTE+PjBdKXx8dnUoMHxhcltuPj4yXSksdm9pZCh1cj1mKTswfHRyW3IrMjQ+PjBdPyhhcltiPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsb28oQSwyLDEwMCxiKSwoMHx0cltiKzExPj4wXSk8MCYmdnUoMHxhcltiPj4yXSkpOihiPTB8YXJbKHI9NTY1OTIpKzQ+PjJdLGFyWyhzPUEpPj4yXT1hcltyPj4yXSxhcltzKzQ+PjJdPWIseXUoQSs4fDAsNTY2MDApKSx1cj1mfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGMsbD0wLHU9MDtpZih1cj0obz11cikrMTYwfDAsbD1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhcltsPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsWGUodCxsKSwoMHx0cltsKzExPj4wXSk8MCYmdnUoMHxhcltsPj4yXSksTEEobCxlLHIpLFdlKGYsKGM9KGE9MHx0clsodT1sKzExfDApPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW2w+PjJdOmwsYz8wfGFyW2wrND4+Ml06MjU1JmEpLCgwfHRyW3U+PjBdKTwwJiZ2dSgwfGFyW2w+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IobD0wO1dlKGYsMTg4NjIsMiksKDB8KGw9bCsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihXZShmLDE5NTY5LDE4KSx1PWUrNTZ8MCxlPWUrNjB8MCxsPTB8YXJbdT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxsKSlmb3Iocj0wO3ImJihXZShmLDE5NTg4LDEpLGw9MHxhclt1Pj4yXSksUGYoZiwwfGNyW2wrcj4+MF0pLHI9cisxfDAsbD0wfGFyW3U+PjJdLHI+Pj4wPCgoMHxhcltlPj4yXSktbHwwKT4+PjA7KTtpZihXZShmLDMwMDg2LDEpLEllKEEsdCksYXJbZj4+Ml09NDMwNCxhcltuPj4yXT00MzI0LGFyW3Q+PjJdPTQzNDAsMDw9KDB8dHJbMTEraT4+MF0pKXJldHVybiBrZih0KSxHZigpLGJmKG4pLHZvaWQodXI9byk7dnUoMHxhcltpPj4yXSksa2YodCksR2YoKSxiZihuKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wO3ZhciBpLGYsbix0LG89MCxhPTAsYz0wLGw9MDtpZih1cj0odD11cikrMzJ8MCxjPXQsbD0wfGFyWyhyfD0wKSsxMj4+Ml0sakEociwwfHRyW2UrMzY+PjBdPzEyOjgpLGY9ZSs1NnwwLDI1NTwoaT0obz0wfGFyWyhuPWUrNjB8MCk+PjJdKS0oYT0wfGFyW2Y+PjJdKXwwKT4+PjAmJnNyKDU1NzM5LDE5MTA0LDE5MTksMTk1NjMpLCgwfGEpPT0oMHxvKSYmc3IoNTU3MzksMTkxMDQsMTkxOSwxOTU2MyksSkEociwyNTUmaSksbz0wfGFyW2Y+PjJdLCgwfGFyW24+PjJdKSE9KDB8bykpZm9yKGE9MDtKQShyLDB8dHJbbythPj4wXSksYT1hKzF8MCxvPTB8YXJbZj4+Ml0sYT4+PjA8KCgwfGFyW24+PjJdKS1vfDApPj4+MDspO0tBKGMsZSxyLGwpLCgwfHRyWyhvPWMrOHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbbz4+Ml0pLGM9MHxhclsocj01NjU5MikrND4+Ml0sYXJbKGw9QSk+PjJdPWFyW3I+PjJdLGFyW2wrND4+Ml09Yyx5dShBKzh8MCw1NjYwMCksdXI9dH0sZnVuY3Rpb24oQSxlLHIpe0F8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzQ4fDAsdT1vKzMyfDAscUEoYT0oYz1vKSsxMnwwLGV8PTAscnw9MCksKDB8dHJbKGE9YSs4fDApKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMHxOQShyLDI1NSYoZj0wfElBKHIpKSwwKSlyZXR1cm4gYXJbYz4+Ml09MCxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLG9vKEEsMiwxMDAsYyksMDw9KDB8dHJbYysxMT4+MF0pfHx2dSgwfGFyW2M+PjJdKSx2b2lkKHVyPW8pO2lmKG49ZSs1NnwwLCh0PTI1NSZmKT4+PjA8PShjPShpPTB8YXJbKGE9ZSs2MHwwKT4+Ml0pLShlPTB8YXJbbj4+Ml0pfDApPj4+MD90Pj4+MDxjPj4+MCYmKDB8aSkhPSgwfChsPWUrdHwwKSkmJihhclthPj4yXT1sKTpUQShuLHQtY3wwKSxmPDwyND4+MjQpZm9yKGE9MDtsPTB8SUEociksdHJbKDB8YXJbbj4+Ml0pK2E+PjBdPWwsKDB8KGE9YSsxfDApKSE9KDB8dCk7KTswfHRyW3IrMjQ+PjBdPyhhclt1Pj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsb28oQSwyLDEwMCx1KSwoMHx0clt1KzExPj4wXSk8MCYmdnUoMHxhclt1Pj4yXSkpOihyPTB8YXJbKGw9NTY1OTIpKzQ+PjJdLGFyWyh1PUEpPj4yXT1hcltsPj4yXSxhclt1KzQ+PjJdPXIseXUoQSs4fDAsNTY2MDApKSx1cj1vfSxmdW5jdGlvbihBLGUscil7QXw9MCxlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhPTAsYz0wO2lmKHVyPShvPXVyKSsxNjB8MCxhPW8rMTM2fDAsbj0oZj1vKSs1NnwwLHQ9Zis0fDAsYXJbZj4+Ml09MjkyLGFyW24+PjJdPTMxMixKZihmKzU2fDAsdCksYXJbZisxMjg+PjJdPTAsYXJbZisxMzI+PjJdPS0xLGFyW2Y+PjJdPTQzMDQsYXJbbj4+Ml09NDMyNCxTZih0KSxhclt0Pj4yXT00MzQwLGFyWyhpPWYrMzZ8MCk+PjJdPTAsYXJbNCtpPj4yXT0wLGFyWzgraT4+Ml09MCxhclsxMitpPj4yXT0wLGFyW2YrNTI+PjJdPTE2LGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxYZSh0LGEpLCgwfHRyW2ErMTE+PjBdKTwwJiZ2dSgwfGFyW2E+PjJdKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGYsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihjPTB8V2UoZiwxOTgxOCwxOCksYz0wfFdlKDB8eGYoYywwfG9yW2UrND4+MV0pLDMwMDg2LDEpLDA8KDB8YXJbcj4+Ml0pKWZvcihhPTA7V2UoYywxODg2MiwyKSwoMHwoYT1hKzF8MCkpPCgwfGFyW3I+PjJdKTspO2lmKGM9MHxXZShjLDE5ODM3LDI2KSxjPTB8V2UoMHx4ZihjLDB8b3JbZSs2Pj4xXSksMzAwODYsMSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShjLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYoYz0wfFdlKGMsMTk4NjQsMjEpLGM9MHxXZSgwfHhmKGMsMHxvcltlKzg+PjFdKSwzMDA4NiwxKSwwPCgwfGFyW3I+PjJdKSlmb3IoYT0wO1dlKGMsMTg4NjIsMiksKDB8KGE9YSsxfDApKTwoMHxhcltyPj4yXSk7KTtpZihyPTB8V2UoYywxOTg4NiwxNyksV2UoMHxIZihyLDAhPSgwfHRyW2UrMTA+PjBdKSksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLE1BKHJ8PTAsMHxvclsoZXw9MCkrND4+MV0pLE1BKHIsMHxvcltlKzY+PjFdKSxNQShyLDB8b3JbZSs4Pj4xXSksSkEociwwfHRyW2UrMTA+PjBdPy0xMjg6MCksZT0wfGFyWzE0MTQ5XSxhclsocj1BKT4+Ml09YXJbMTQxNDhdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG4sdCxvLGE9MDtpZih1cj0obz11cikrMTYwfDAsYT1vKzEzNnwwLG49KGY9bykrNTZ8MCx0PWYrNHwwLGFyW2Y+PjJdPTI5MixhcltuPj4yXT0zMTIsSmYoZis1NnwwLHQpLGFyW2YrMTI4Pj4yXT0wLGFyW2YrMTMyPj4yXT0tMSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsU2YodCksYXJbdD4+Ml09NDM0MCxhclsoaT1mKzM2fDApPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsYXJbMTIraT4+Ml09MCxhcltmKzUyPj4yXT0xNixhclthPj4yXT0wLGFyW2ErND4+Ml09MCxhclthKzg+PjJdPTAsWGUodCxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksMDwoMHxhcltyPj4yXSkpZm9yKGE9MDtXZShmLDE4ODYyLDIpLCgwfChhPWErMXwwKSk8KDB8YXJbcj4+Ml0pOyk7aWYocj0wfFdlKGYsMTk2NzUsMTQpLFdlKDB8TGYociwoMHxhcltlKzEyPj4yXSktKDB8YXJbZSs4Pj4yXSl8MCksMzAwODYsMSksSWUoQSx0KSxhcltmPj4yXT00MzA0LGFyW24+PjJdPTQzMjQsYXJbdD4+Ml09NDM0MCwwPD0oMHx0clsxMStpPj4wXSkpcmV0dXJuIGtmKHQpLEdmKCksYmYobiksdm9pZCh1cj1vKTt2dSgwfGFyW2k+PjJdKSxrZih0KSxHZigpLGJmKG4pLHVyPW99LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLHpBKHJ8PTAsKGV8PTApKzh8MCksZT0wfGFyWzE0MTQ5XSxhclsocj1BKT4+Ml09YXJbMTQxNDhdLGFyW3IrND4+Ml09ZSx5dShBKzh8MCw1NjYwMCl9LGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wO2Zvcih1cj0obz11cikrMzJ8MCxpPW8rMjB8MCxmPW8rMTZ8MCxuPW8rMTJ8MCx0PW8sYXJbKEF8PTApPj4yXT1hclsxOTA0XSxhcltBKzQ+PjJdPWFyWzE5MDVdLGFyW0ErOD4+Ml09YXJbMTkwNl0sYT0wfGFyW2U+PjJdLFdhKGE9NTQ4KyhhfD0wKXwwKSxXYShhKSx0clthPj4wXT0xLGFyW3I+PjJdPTA7Oyl7aWYoKGFyW24+PjJdPTApfEVlKDB8YXJbZT4+Ml0sbikpe2w9Mjg7YnJlYWt9aWYoMHwobT0wfEZlKDB8YXJbZT4+Ml0pKSl7Zm9yKDB8KGM9MHxhcltyPj4yXSkmJmhsKGMpLGw9MD09KDB8RGUobSkpLFo9MHxodSg4MCksYXJbWis0Pj4yXT0wLGFyW1orOD4+Ml09MCxhcltaPj4yXT02MjA4LGFyWyh2PVorMTJ8MCk+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhclt2KzEyPj4yXT0wLGFyW3YrMTY+PjJdPTAsYXJbWiszMj4+Ml09MzQzOTUsYXJbWiszNj4+Ml09MCxhcltaKzQwPj4yXT0wLGFyW1orNDQ+PjJdPTk5LGFyW1orNDg+PjJdPTk5LHc9Wis1MnwwLGFyWyhnPVorNzJ8MCk+PjJdPTAsYXJbWis3Nj4+Ml09MCxhclt3Pj4yXT0wLGFyW3crND4+Ml09MCxhclt3Kzg+PjJdPTAsYXJbdysxMj4+Ml09MCxhcltaKzY4Pj4yXT1nLGc9dix3PVorMTZ8MCxidShwPVopLHN1KFopLGM9MHxhclt3Pj4yXSxhclt2Pj4yXT1nLGFyW3c+PjJdPXAsMHxjJiZrdShjKSxkdShaKSx5byh2LGQ9MHxfZShtLDApLHM9MHxZZShtLDApLGw/MjowLHc9MHxEZShtKSkscz1sPzE6MyxkPSgodz0wfFFlKG0sMCkpKzd8MCkvOHwwLGI9MDs7KXtpZigoMHxRZShtLGIpKSE9KDB8dykpe2w9MTA7YnJlYWt9aWYoaz0wfEplKG0sYixpKSwoMHwobD0wfF9lKG0sYikpKTwxfCgwfChoPTB8WWUobSxiKSkpPDEpe2w9MTI7YnJlYWt9aWYoISgwfEJvKHYsYz0wfGFyWzc2MjgrKGI8PDIpPj4yXSxsLGgsdykpKXtsPTE0O2JyZWFrfWlmKHU9MHxGbyh2LGMsZiksMDwoMHxoKSlmb3IobD0wfGJyKGwsZCksYz0wO2hiKDB8KHk9dSsoMHxicigwfGFyW2Y+PjJdLGMpKXwwKSxrKygwfGJyKDB8YXJbaT4+Ml0sYykpfDAsMHxsKSwoMHwoYz1jKzF8MCkpIT0oMHxoKTspO2lmKCgwfHMpPD0oMHwoYj1iKzF8MCkpKXtsPTIwO2JyZWFrfX1pZigxMD09KDB8bCk/KGw9MCxhclt0Pj4yXT1hclsxOTEwXSxhclt0KzQ+PjJdPWFyWzE5MTFdLGFyW3QrOD4+Ml09YXJbMTkxMl0pOjEyPT0oMHxsKT8oYXJbdD4+Ml09YXJbMTkxM10sYXJbdCs0Pj4yXT1hclsxOTE0XSxhclt0Kzg+PjJdPWFyWzE5MTVdLGw9MTgpOjE0PT0oMHxsKT8oYXJbdD4+Ml09YXJbMTkxNl0sYXJbdCs0Pj4yXT1hclsxOTE3XSxhclt0Kzg+PjJdPWFyWzE5MThdLGw9MTgpOjIwPT0oMHxsKSYmKGM9KGw9MCl8aHUoOCksYXJbYz4+Ml09MCxhclsoeT1jKzR8MCk+PjJdPTAsYXJbcj4+Ml09YyxidShaKSxhcltjPj4yXT1nLGM9MHxhclt5Pj4yXSxhclt5Pj4yXT1wLDB8YyYmZHUoYyksYXJbdD4+Ml09YXJbMTkwNF0sYXJbdCs0Pj4yXT1hclsxOTA1XSxhclt0Kzg+PjJdPWFyWzE5MDZdKSxkdShaKSxhcltBPj4yXT1hclt0Pj4yXSxhcltBKzQ+PjJdPWFyW3QrND4+Ml0sYXJbQSs4Pj4yXT1hclt0Kzg+PjJdLDB8YXJbQT4+Ml0pe2w9Mjg7YnJlYWt9Yz0wfGh1KDI0KSxhcltjKzQ+PjJdPTAsYXJbYys4Pj4yXT0wLGFyW2M+PjJdPTYwNjQsYXJbKGw9YysxMnwwKT4+Ml09NjA5MixvcltjKzE2Pj4xXT0wLG9yW2MrMTg+PjFdPTAsb3JbYysyMD4+MV09MCx0cltjKzIyPj4wXT0xLGp0KGwpLHk9MHxhclthcltyPj4yXT4+Ml0sYnUoYyksYnUoYyksYXJbeSs0MD4+Ml09bCxsPTB8YXJbKHk9eSs0NHwwKT4+Ml0sYXJbeT4+Ml09YywwfGwmJmR1KGwpLGR1KGMpLFJlKDB8YXJbZT4+Ml0pLGR1KGMpfWlmKCEoMHxhcltuPj4yXSkpe2w9Mjg7YnJlYWt9fTI4IT0oMHxsKXx8KHVyPW8pfSxmdW5jdGlvbihBLGUscil7QXw9MCwwfChBPTB8YXJbKGV8PTApKzQ+PjJdKSYmQmMoQSksMHwoQT0wfGFyW2UrOD4+Ml0pJiZCYyhBKSwoQT0wfGFyW2UrMTI+PjJdKSYmQmMoQSl9LGZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmLG4sdDtBfD0wLGV8PTAsdXI9KGk9dXIpKzMyfDAsZj1pLHQ9KG49MHx0clsocnw9MCkrMTE+PjBdKTw8MjQ+PjI0PDAsZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7dXI9KGE9dXIpKzMyfDAsbz1hLHU9MHxodSgxMzIpLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdT4+Ml09NjM2NCxjbyhjPXUrMTJ8MCksYXJbKG49ZSs2MHwwKT4+Ml09Yyx0PTB8YXJbKGw9ZSs2NHwwKT4+Ml0sYXJbbD4+Ml09dSx0JiYoZHUodCksYz0wfGFyW24+PjJdKTtpZihrbyhvLGMscixpLGYpLDB8YXJbbz4+Ml0pcmV0dXJuIHU9MHxhclsoZj1vKSs0Pj4yXSxhclsobD1BKT4+Ml09YXJbZj4+Ml0sYXJbbCs0Pj4yXT11LHU9bys4fDAsYXJbKGw9QSs4fDApPj4yXT1hclt1Pj4yXSxhcltsKzQ+PjJdPWFyW3UrND4+Ml0sYXJbbCs4Pj4yXT1hclt1Kzg+PjJdLGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCx1cj1hO2lmKGZ1bmN0aW9uKEEsZSl7QXw9MDt2YXIgcixpLGYsbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCLEUsWCxXLEksQyxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MCx0QT0wLG9BPTAsYUE9MCxjQT0wLGxBPTAsdUE9MCxiQT0wLHNBPTAsZEE9MCxrQT0wLGhBPTAsd0E9MCx2QT0wLG1BPTAsZ0E9MCxaQT0wLHBBPTAseUE9MCxCQT0wLEVBPTAsWEE9MCxXQT0wLElBPTAsQ0E9MCxHQT0wLFZBPTAsRkE9MCxSQT0wLE5BPTAsX0E9MCxZQT0wLFFBPTAsREE9MCxKQT0wLE1BPTAsVEE9MCxVQT0wLFNBPTAsT0E9MCx6QT0wLGpBPTAsSEE9MCx4QT0wLFBBPTAsTEE9MCxLQT0wLHFBPTAsJEE9MCxBZT0wLGVlPTAscmU9MCxpZT0wLGZlPTAsbmU9MCx0ZT0wLG9lPTAsYWU9MCxjZT0wLGxlPTAsdWU9MCxiZT0wLHNlPTAsZGU9MCxrZT0wLGhlPTAsd2U9MCx2ZT0wLG1lPTAsZ2U9MCxaZT0wLHBlPTAseWU9MCxCZT0wLEVlPTA7aWYodXI9KEM9dXIpKzY1NnwwLHk9Qys2NDB8MCxJPUMrNjE2fDAscT1DKzYyOHwwLHllPUMrNjA0fDAsQmU9QysxNDR8MCxsQT0oRWU9QykrNTkyfDAsdUE9Qys1ODR8MCxyPUMrNTcyfDAsaT1DKzU2MHwwLGY9Qys1NDh8MCxuPUMrNTM2fDAsdD1DKzM4NHwwLHA9QyszOTJ8MCxvPUMrMzcyfDAsYT1DKzM0OHwwLGM9QyszNjB8MCxsPUMrMzI4fDAsdT1DKzMxNnwwLGI9QyszMDR8MCxzPUMrMjkyfDAsZD1DKzI4MHwwLGs9QysyNjh8MCxoPUMrMjU2fDAsdz1DKzI0OHwwLGRlPUMrMjQwfDAsdj1DKzIzMnwwLG09QysyMTZ8MCxaZT1DKzIwOHwwLHBlPUMrMjAwfDAsQj1DKzE4OHwwLEU9QysxNzZ8MCxYPUMrMTY4fDAsdmwoZ2U9MjgrKGV8PTApfDAsMHxhclsoVz1lKzMyfDApPj4yXSksYXJbKFA9ZSszNnwwKT4+Ml09MCxhcltnZT4+Ml09VyxhcltXPj4yXT0wLEY9MHxhclsoTD1lKzQwfDApPj4yXSwoMHwoRz0wfGFyWyhLPWUrNDR8MCk+PjJdKSkhPSgwfEYpKWZvcig7Vj1HKy04fDAsYXJbSz4+Ml09VixHPShHPTB8YXJbRystND4+Ml0pPyhkdShHKSwwfGFyW0s+PjJdKTpWLCgwfEcpIT0oMHxGKTspO2FyWyhIPWUrNTJ8MCk+PjJdPTAsRz0wfGFyWyh4PWUrNTZ8MCk+PjJdLGFyW3g+PjJdPTAsMHxHJiZkdShHKTtpZihmdW5jdGlvbihBLGUpe2V8PTA7dmFyIHIsaSxmLG4sdCxvPTAsYT0wLGM9MDtpZih1cj0odD11cikrMTZ8MCxmPXQsYXJbKEF8PTApPj4yXT0wLGFyWyhuPUErNHwwKT4+Ml09MCwoKGFyW0ErOD4+Ml09MCl8KG89MHxhcltlKzEwOD4+Ml0pKSE9KDB8KHI9ZSsxMTJ8MCkpKXtmb3IoaT1BKzh8MCxjPW8sYT1vPTA7Oyl7aWYoZT0wfGFyWzU2KygwfGFyW2MrMjA+PjJdKT4+Ml0sYXJbZj4+Ml09ZSxvPj4+MDxhPj4+MD8oYXJbbz4+Ml09ZSxhcltuPj4yXT1vKzQpOkNlKEEsZiksZT0wfGFyW2MrND4+Ml0pZm9yKDtvPTB8YXJbZT4+Ml07KWU9bztlbHNlIGlmKGU9MHxhclsobz1jKzh8MCk+PjJdLCgwfGFyW2U+PjJdKSE9KDB8YykpZm9yKDtjPTB8YXJbbz4+Ml0sZT0wfGFyWyhvPWMrOHwwKT4+Ml0sKDB8YXJbZT4+Ml0pIT0oMHxjKTspO2lmKCgwfGUpPT0oMHxyKSlicmVhaztjPWUsbz0wfGFyW24+PjJdLGE9MHxhcltpPj4yXX11cj10fWVsc2UgdXI9dH0oSSwwfGFyWyhnPWUrNjB8MCk+PjJdKSxHPTB8YXJbST4+Ml0sTT0wfGFyWyhaPTQrSXwwKT4+Ml0sKDB8RykhPSgwfE0pKXtUPTExK3l8MCxPPVU9NCt5fDAsej0oUz1lKSszMnwwLGo9ZSs0OHwwO2Rve0o9MHxhcltHPj4yXSxOPTExMisoMHxhcltnPj4yXSl8MCxGPTB8YXJbTj4+Ml07ZG97aWYoMHxGKXtWPU47QTpmb3IoOzspe2ZvcihSPUY7ISgoMHxhcltSKzE2Pj4yXSk+Pj4wPj1KPj4+MCk7KXtpZighKEY9MHxhcltSKzQ+PjJdKSlicmVhayBBO1I9Rn1pZighKEY9MHxhcltSPj4yXSkpe1Y9UjticmVha31WPVJ9aWYoKDB8VikhPSgwfE4pJiYoMHxhcltWKzE2Pj4yXSk+Pj4wPD1KPj4+MCl7aWYoRj0wfGFyW1YrMjA+PjJdLFY9MHxhcltWKzI0Pj4yXSxEPVY/KGJ1KFYpLFYpOjAsIShRPUYpKXtpZighRClicmVhaztkdShEKTticmVha315dSh5LFErNjR8MCksRj0wfHRyW1Q+PjBdLFY9MHxhcltVPj4yXSw0PT0oMHwoRjw8MjQ+PjI0PDA/VjoyNTUmRikpPzB8WXUoeSwwLC0xLDMwMjk4LDQpPyhGPTB8dHJbVD4+MF0sVj0wfGFyW1U+PjJdLG1lPTIzKTpWPTE6bWU9MjM7ZG97aWYoMjM9PSgwfG1lKSl7aWYoND09KChtZT0wKXwoRjw8MjQ+PjI0PDA/VjoyNTUmRikpKXtpZighKDB8WXUoeSwwLC0xLDMwMzAzLDQpKSl7Vj0xO2JyZWFrfUY9MHx0cltUPj4wXSxWPTB8YXJbVT4+Ml19aWYoND09KDB8KEY8PDI0Pj4yNDwwP1Y6MjU1JkYpKSl7aWYoISgwfFl1KHksMCwtMSwzMDMwOCw0KSkpe1Y9MTticmVha31GPTB8dHJbVD4+MF0sVj0wfGFyW1U+PjJdfWlmKDQ9PSgwfChGPDwyND4+MjQ8MD9WOjI1NSZGKSkpe2lmKCEoMHxZdSh5LDAsLTEsMzAzMTMsNCkpKXtWPTE7YnJlYWt9Rj0wfHRyW1Q+PjBdLFY9MHxhcltVPj4yXX1WPTQ9PSgwfChGPDwyND4+MjQ8MD9WOjI1NSZGKSk/MD09KDB8WXUoeSwwLC0xLDMwMzE4LDQpKTowfX13aGlsZSgwKTtpZigoMHx0cltUPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksVil7Zm9yKFk9MHxodSgyMzIpLGFyW1krND4+Ml09MCxhcltZKzg+PjJdPTAsYXJbWT4+Ml09NjM5MixhclsoVj1ZKzE2fDApPj4yXT0wLGFyW1YrND4+Ml09MCxhcltWKzg+PjJdPTAsYXJbWSsyOD4+Ml09MzAwMjUsYXJbWSszMj4+Ml09UyxhcltZKzM2Pj4yXT1KLHZlPVkrNjB8MCxyQT1ZKzgwfDAsaUE9WSs5NnwwLEY9WSsxNzZ8MCxSPVkrMTEyfDAsYXJbKHdlPVkrNDB8MCk+PjJdPTAsYXJbd2UrND4+Ml09MCxhclt3ZSs4Pj4yXT0wLGFyW3dlKzEyPj4yXT0wLG9yW3dlKzE2Pj4xXT0wLGFyW3ZlPj4yXT0wLGFyW3ZlKzQ+PjJdPTAsYXJbdmUrOD4+Ml09MCxhclt2ZSsxMj4+Ml09MCxvclt2ZSsxNj4+MV09MCxhcltyQT4+Ml09MCxhcltyQSs0Pj4yXT0wLGFyW3JBKzg+PjJdPTAsdHJbckErMTI+PjBdPTAsYXJbaUE+PjJdPTAsYXJbaUErND4+Ml09MCxhcltpQSs4Pj4yXT0wLHRyW2lBKzEyPj4wXT0wLHJBPShpQT1SKSs2MHwwOygoYXJbaUE+PjJdPTApfChpQT1pQSs0fDApKTwoMHxyQSk7KTtmb3IodHJbUis2MD4+MF09MCxyQT0oaUE9RikrNTJ8MDsoKGFyW2lBPj4yXT0wKXwoaUE9aUErNHwwKSk8KDB8ckEpOyk7YXJbeT4+Ml09VixhcltPPj4yXT1ZLE49VixidShfPVkpLFY9MHxhcltXPj4yXTtkb3tpZihWKXtmb3IoUj16OzspaWYoRj0wfGFyW1YrMTY+PjJdLEo+Pj4wPEY+Pj4wKXtpZighKEY9MHxhcltWPj4yXSkpe21lPTQxO2JyZWFrfVI9VixWPUZ9ZWxzZXtpZihKPj4+MDw9Rj4+PjApe21lPTQ1O2JyZWFrfWlmKCEoRj0wfGFyWyhSPVYrNHwwKT4+Ml0pKXttZT00NDticmVha31WPUZ9aWYoNDE9PSgwfG1lKSl7bWU9MCxSPUY9VjticmVha31pZig0ND09KDB8bWUpKXttZT0wLEY9VjticmVha31pZig0NT09KDB8bWUpKXttZT0wLEY9VjticmVha319ZWxzZSBSPUY9V313aGlsZSgwKTswfGFyW1I+PjJdP2R1KFkpOihWPTB8aHUoMjgpLGFyW1YrMTY+PjJdPUosYXJbVisyMD4+Ml09TixhcltWKzI0Pj4yXT1fLGFyW1Y+PjJdPTAsYXJbVis0Pj4yXT0wLGFyW1YrOD4+Ml09RixhcltSPj4yXT1WLChGPTB8YXJbYXJbZ2U+PjJdPj4yXSkmJihhcltnZT4+Ml09RixWPTB8YXJbUj4+Ml0pLHNvKDB8YXJbej4+Ml0sViksYXJbUD4+Ml09MSsoMHxhcltQPj4yXSkpO2Rve2lmKCEoMHx0cltRKzEyND4+MF0pKXtkb3tpZigoMHxKKT09KDB8YXJbNTYrKDB8YXJbODQrKDB8YXJbZz4+Ml0pPj4yXSk+PjJdKSl7aWYoVj0wfGFyW3k+PjJdLHRyW1YrNDA+PjBdPTEsMHwoRj0wfGFyW08+PjJdKSYmYnUoRiksYXJbSD4+Ml09VixWPTB8YXJbeD4+Ml0sYXJbeD4+Ml09RiwhVilicmVhaztkdShWKX19d2hpbGUoMCk7aWYoKDB8KFY9MHxhcltLPj4yXSkpPT0oMHxhcltqPj4yXSkpe2tsKEwseSk7YnJlYWt9YXJbVj4+Ml09YXJbeT4+Ml0sRj0wfGFyW08+PjJdLChhcltWKzQ+PjJdPUYpJiYoYnUoRiksVj0wfGFyW0s+PjJdKSxhcltLPj4yXT1WKzh9fXdoaWxlKDApOzB8KFY9MHxhcltPPj4yXSkmJmR1KFYpfTB8RCYmZHUoRCl9fX13aGlsZSgwKTtHPUcrNHwwfXdoaWxlKCgwfEcpIT0oMHxNKSl9QTpkb3tpZigwfGFyW0g+PjJdKXtpZigoMHwoRz0wfGFyW2dlPj4yXSkpIT0oMHxXKSlmb3IoTT15ZSs0fDAsVD15ZSs4fDAsVT11QSs0fDAsUz1lKzcyfDAsaj1FZSsxMnwwLEg9RWUrNHwwLHg9Tz1FZSs2NHwwLFA9RWUrMTM2fDAsTD1FZSsxNDB8MCxxPUVlKzYwfDAsJD0xMSt5fDAsQUE9ej1FZSs4fDAsZUE9ZSs3NnwwLHJBPWxBKzExfDAsaUE9KEs9RWUrNDR8MCkrMTF8MCxuQT0oZkE9QmUrOHwwKSsxMXwwLHRBPUErOHwwLEo9Rzs7KXtpZihRPUorMjB8MCxhclt5ZT4+Ml09MCxhcltNPj4yXT0wLGFyW1Q+PjJdPTAsdm8oQmUsMHxhcltnPj4yXSwwfGFyW0orMTY+PjJdLHllKSwwfGFyW0JlPj4yXSl2ZT0wfGFyWyh3ZT1CZSkrND4+Ml0sYXJbKEc9QSk+PjJdPWFyW3dlPj4yXSxhcltHKzQ+PjJdPXZlLGFyW3RBPj4yXT1hcltmQT4+Ml0sYXJbdEErND4+Ml09YXJbZkErND4+Ml0sYXJbdEErOD4+Ml09YXJbZkErOD4+Ml0sYXJbZkE+PjJdPTAsYXJbZkErND4+Ml09MCxhcltmQSs4Pj4yXT0wLEc9MTtlbHNle0c9MHxhclt5ZT4+Ml0sRD0wfGFyW00+PjJdO2U6ZG97aWYoKDB8Ryk9PSgwfEQpKUc9NjtlbHNlIGZvcihOPTA7Oyl7Vj0wfGFyWyhfPUcrNHwwKT4+Ml07ZG97aWYoMCE9KDB8VikmJjAhPSgwfChvQT0wfHF1KFYsMTI4LDg3MiwwKSkpKXtpZigoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxGPTB8YXJbb0ErNTY+PjJdLFI9MHxhcltvQSs2MD4+Ml0sRj4+PjA8PSgwfGFyW1M+PjJdKT4+PjAmJlI+Pj4wPD0oMHxhcltlQT4+Ml0pPj4+MCl7WT0wfGFyW1E+PjJdLGFyW1krMjQ+PjJdPUYsYXJbWSsyOD4+Ml09UixhcltZKzMyPj4yXT1GLGFyW1krMzY+PjJdPVIsWT1WLG1lPTk0O2JyZWFrfWFyW3o+PjJdPTQ1MjQsYXJbRWU+PjJdPTE4OCxhcltPPj4yXT0yMDgsYXJbSD4+Ml09MCxKZih4LGopLGFyW1A+PjJdPTAsYXJbTD4+Ml09LTEsYXJbRWU+PjJdPTQ1MDQsYXJbTz4+Ml09NDU0NCxhclt6Pj4yXT00NTI0LFNmKGopLGFyW2o+PjJdPTQzNDAsYXJbSz4+Ml09MCxhcltLKzQ+PjJdPTAsYXJbSys4Pj4yXT0wLGFyW0srMTI+PjJdPTAsYXJbcT4+Ml09MjQsYXJbeT4+Ml09MCxhcls0K3k+PjJdPTAsYXJbOCt5Pj4yXT0wLFhlKGoseSksKDB8dHJbJD4+MF0pPDAmJnZ1KDB8YXJbeT4+Ml0pLHZlPTB8V2UoMHxMZigwfFdlKDB8TGYoMHxXZShBQSwzMDM2NiwxMSksRiksMzAxNzAsMSksUiksMzAzNzgsMzIpLHZlPTB8V2UoMHxMZih2ZSwwfGFyW1M+PjJdKSwzMDE3MCwxKSxXZSgwfExmKHZlLDB8YXJbZUE+PjJdKSwzMDA4NiwxKSxJZShsQSxqKSxvbyhBLDYsMWUzLGxBKSwoMHx0cltyQT4+MF0pPDAmJnZ1KDB8YXJbbEE+PjJdKSxhcltFZT4+Ml09NDUwNCxhcltPPj4yXT00NTQ0LGFyW0FBPj4yXT00NTI0LGFyW2o+PjJdPTQzNDAsKDB8dHJbaUE+PjBdKTwwJiZ2dSgwfGFyW0s+PjJdKSxrZihqKSxiZihPKSxSPTEsRj1OfWVsc2UgbWU9ODN9d2hpbGUoMCk7aWYoODM9PSgwfG1lKSYmKG1lPU4/KFk9MCw5NCk6KFk9Rj0wLDEwOSkpLDk0PT0oMHxtZSkpaWYoVj0obWU9MCl8YXJbXz4+Ml0pe0Y9KEY9MHxxdShWLDEyOCw3NDQsMCkpPygoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxtZT0wfGFyW1E+PjJdLHZlPTB8ZW8oRiksRj0wfHJvKEYpLGFyW21lKzI0Pj4yXT12ZSxhclttZSsyOD4+Ml09RixWKTowLFY9MHxhcltfPj4yXTtkb3tpZigwfFYmJjB8KGFBPTB8cXUoViwxMjgsODA4LDApKSl7c3dpdGNoKChWPTB8YXJbRys4Pj4yXSk/YnUoVik6Vj0wLDB8YXJbYUErNTY+PjJdKXtjYXNlIDI3MDpjYXNlIDkwOndlPTB8YXJbUT4+Ml0sbWU9d2UrMjh8MCx2ZT0wfGFyWyh3ZT13ZSsyNHwwKT4+Ml0sYXJbd2U+PjJdPWFyW21lPj4yXSxhclttZT4+Ml09dmV9aWYoIVYpYnJlYWs7ZHUoVil9fXdoaWxlKDApO21lPShGPShGJiZkdShGKSwxKSwxMDkpfWVsc2UgUj0wLEY9MSxWPVk7ZG97aWYoMTA5PT0oMHxtZSkpaWYoKG1lPTApIT0oMHwoVj0wfGFyW18+PjJdKSkmJjAhPSgwfChjQT0wfHF1KFYsMTI4LDM4NCwwKSkpKXtpZigoVj0wfGFyW0crOD4+Ml0pP2J1KFYpOlY9MCxSPTB8YXJbY0ErNTY+PjJdLE49MHxhcltjQSs2MD4+Ml0sWmwoUj0oKF89MD09KDB8TikpPyh2ZT0wfGFyW1E+PjJdLGFyW3VBPj4yXT1SLGFyW1U+PjJdPTApOihidShOKSx2ZT0wfGFyW1E+PjJdLGFyW3VBPj4yXT1SLGJ1KGFyW1U+PjJdPU4pKSx2ZSksdUEpLDB8KFI9MHxhcltVPj4yXSkmJmR1KFIpLF98fGR1KE4pLCFWKXtSPTAsVj1ZO2JyZWFrfWR1KFYpLFI9MCxWPVl9ZWxzZSBSPTAsVj1ZfXdoaWxlKDApO2lmKDB8ViYmZHUoViksRz1HKzEyfDAsMHxSKXtHPTE7YnJlYWsgZX1pZigoMHxHKT09KDB8RCkpe0c9NjticmVha31OPUZ9fXdoaWxlKDApO0c9Nj09KDB8Ryk/MDpHLCgwfHRyW25BPj4wXSk8MCYmdnUoMHxhcltmQT4+Ml0pfWlmKDB8KFY9MHxhclt5ZT4+Ml0pKXtpZigoMHwoRj0wfGFyW00+PjJdKSkhPSgwfFYpKXtmb3IoO1I9RistMTJ8MCxhcltNPj4yXT1SLCgwfChGPShGPTB8YXJbRistND4+Ml0pPyhkdShGKSwwfGFyW00+PjJdKTpSKSkhPSgwfFYpOyk7Vj0wfGFyW3llPj4yXX12dShWKX1pZigwfEcpYnJlYWsgQTtpZihHPTB8YXJbSis0Pj4yXSlmb3IoO1Y9MHxhcltHPj4yXTspRz1WO2Vsc2UgaWYoRz0wfGFyWyhWPUorOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxKKSlmb3IoO3ZlPTB8YXJbVj4+Ml0sRz0wfGFyWyhWPXZlKzh8MCk+PjJdLCgwfGFyW0c+PjJdKSE9KDB8dmUpOyk7aWYoKDB8Ryk9PSgwfFcpKWJyZWFrO0o9R313ZT0wfGFyW2c+PjJdLGtlPTB8YXJbd2UrNzY+PjJdLHdlPTB8YXJbd2UrODA+PjJdLCh2ZT0wPT0oMHx3ZSkpfHxidSh3ZSksaGU9MCE9KDB8a2UpO2U6ZG97aWYoaGUmJihiQT0wfGFyW2dlPj4yXSwoMHxiQSkhPSgwfFcpKSl7Uz15ZSs0fDAsej04K2l8MCxqPTQraXwwLEg9MTEraXwwLHg9OCtufDAsUD00K258MCxMPTExK258MCxLPTQrdHwwLHE9OCtmfDAsJD00K2Z8MCxBQT0xMStmfDAsZkE9OCtyfDAsbkE9NCtyfDAsdEE9MTErcnwwLG9BPUJlKzR8MCxhQT1CZSs4fDAsdUE9MTIrcHwwLGRBPWNBPTY0K3B8MCxrQT0xMzYrcHwwLGhBPTE0MCtwfDAsdkE9NjArcHwwLG1BPTExK3l8MCxaQT0xMStvfDAscEE9KHdBPTQ0K3B8MCkrMTF8MCx5QT1PPTQreXwwLFhBPTgrdXwwLFdBPTQrdXwwLElBPTExK3V8MCxDQT04K2J8MCxHQT00K2J8MCxWQT0xMStifDAsTkE9OCtzfDAsX0E9NCtzfDAsWUE9MTErc3wwLFFBPTgrZHwwLERBPTQrZHwwLEpBPTExK2R8MCxNQT1SQT1FQT1zQT00K3B8MCxTQT04K2N8MCx6QT0oT0E9OCtsfDApKzExfDAsakE9VEE9Z0E9bEE9OCtwfDAsSEE9RkE9QkE9MTErcHwwLHhBPTgra3wwLFBBPTQra3wwLExBPTExK2t8MCxLQT04K2h8MCxxQT00K2h8MCwkQT0xMStofDAsQWU9NCt3fDAsZWU9ZGUrNHwwLGZlPXJlPTExK2N8MCxuZT1pZT1VQT00K2N8MCx0ZT0xMStsfDAsb2U9NCtsfDAsYWU9OCthfDAsY2U9NCthfDAsbGU9MTErYXwwLGJlPSh1ZT1FZSs4fDApKzExfDAsc2U9QSs4fDA7cjpmb3IoOzspe2lmKGlvKHllLGtlLDB8YXJbMjArKDB8YXJbKE09YkErMjB8MCk+PjJdKT4+Ml0pLFY9MHxhclt5ZT4+Ml0sVD0wfGFyW1M+PjJdLCgwfFYpPT0oMHxUKSlHPTEwO2Vsc2V7VT1iQSsyNHwwO2k6Zm9yKDs7KXtHPTB8YXJbVisyMD4+Ml07Zjpkb3tpZigoMHxHKTwxOTUzMDAwODAyKXtzd2l0Y2goMHxHKXtjYXNlIDE2MzUwODg0OTI6YnJlYWs7ZGVmYXVsdDpicmVhayBmfWlmKGFyW0JlPj4yXT0wLGFyW29BPj4yXT0wLGFyW2FBPj4yXT0wLHZvKEVlLDB8YXJbZz4+Ml0sMHxhclsyMCsoMHxhcltNPj4yXSk+PjJdLEJlKSwwfGFyW0VlPj4yXSlpQT0wfGFyWyhyQT1FZSkrND4+Ml0sYXJbKEc9QSk+PjJdPWFyW3JBPj4yXSxhcltHKzQ+PjJdPWlBLGFyW3NlPj4yXT1hclt1ZT4+Ml0sYXJbc2UrND4+Ml09YXJbdWUrND4+Ml0sYXJbc2UrOD4+Ml09YXJbdWUrOD4+Ml0sYXJbdWU+PjJdPTAsYXJbdWUrND4+Ml09MCxhclt1ZSs4Pj4yXT0wLEc9MTtlbHNle0c9MHxhcltCZT4+Ml0sUT0wfGFyW29BPj4yXTtkb3tpZigoMHxHKT09KDB8USkpRj0wLG1lPTE5NztlbHNle2ZvcihGPVk9MDs7KXtSPTB8YXJbRys0Pj4yXTtkb3tpZihSKXtpZighKF89MHxxdShSLDEyOCw4NDAsMCkpKXtSPVk7YnJlYWt9Uj1fLChOPTB8YXJbRys4Pj4yXSk/YnUoTik6Tj0wO2Rve2lmKF8pe2lmKDB8KF89TikmJmJ1KE4pLCFGKXtGPV87YnJlYWt9ZHUoRiksRj1ffWVsc2UgUj1ZfXdoaWxlKDApO2lmKCFOKWJyZWFrO2R1KE4pfWVsc2UgUj1ZfXdoaWxlKDApO2lmKCgwfChHPUcrMTJ8MCkpPT0oMHxRKSlicmVhaztZPVJ9aWYoIShEPVIpKXttZT0xOTc7YnJlYWt9R2UoeSxWKzUyfDApO246ZG97aWYoND09KCgwfGFyW3lBPj4yXSktKDB8YXJbeT4+Ml0pfDApKXt5dShwLEo9RCs1NnwwKSwyNT09KDB8KChpQT0wfHRyW0JBPj4wXSk8PDI0Pj4yNDwwPzB8YXJbRUE+PjJdOjI1NSZpQSkpJiYwPT0oMHxZdShwLDAsLTEsMzA2MjEsMjUpKT9HPTE6KHl1KGMsSiksMjY9PSgwfCgoaUE9MHx0cltmZT4+MF0pPDwyND4+MjQ8MD8wfGFyW25lPj4yXToyNTUmaUEpKSYmMD09KDB8WXUoYywwLC0xLDMwNjQ3LDI2KSk/Rz0xOih5dShsLEopLDQzPT0oMHwoKFI9MHx0clt0ZT4+MF0pPDwyND4+MjQ8MD8wfGFyW29lPj4yXToyNTUmUikpPyhHPTA9PSgwfFl1KGwsMCwtMSwzMDY3NCw0MykpLFI9MHx0clt0ZT4+MF0pOkc9MCxSPDwyND4+MjQ8MCYmdnUoMHxhcltsPj4yXSkpLCgwfHRyW2ZlPj4wXSk8MCYmdnUoMHxhcltjPj4yXSkpLCgwfHRyW0JBPj4wXSk8MCYmdnUoMHxhcltwPj4yXSk7dDpkb3tpZihHKXtSPTB8YXJbVz4+Ml07ZG97aWYoMHxSKXtfPTB8YXJbYXJbeT4+Ml0+PjJdLEc9VztvOmZvcig7Oyl7Zm9yKE49UjshKCgwfGFyW04rMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoUj0wfGFyW04rND4+Ml0pKWJyZWFrIG87Tj1SfWlmKCEoUj0wfGFyW04+PjJdKSl7Rz1OO2JyZWFrfUc9Tn1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztfPTB8YXJbRysyMD4+Ml0sWT0wfGFyW0crMjQ+PjJdLChRPTA9PSgwfFkpKXx8YnUoWSksRz0wfGFyW00+PjJdLFI9Rztkb3tpZigoMHxHKT09KDB8Xykpe2ZvcihhcltiPj4yXT0wLGFyWzQrYj4+Ml09MCxhcls4K2I+PjJdPTAsRz0wfGh1KDMyKSxhcltiPj4yXT1HLGFyW0NBPj4yXT0tMjE0NzQ4MzYxNixhcltHQT4+Ml09MzAsZUE9MzA3NTQsckE9KGlBPUcpKzMwfDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszMD4+MF09MCxvbyhBLDIsMmUzLGIpLDA8PSgwfHRyW1ZBPj4wXSkpe0c9MTticmVha312dSgwfGFyW2I+PjJdKSxHPTF9ZWxzZXtpZigoMHxhcltHKzI0Pj4yXSkhPSgwfGFyW18rMjQ+PjJdKSl7Rz0wO2JyZWFrfWlmKCgwfGFyW0crMjg+PjJdKSE9KDB8YXJbXysyOD4+Ml0pKXtHPTA7YnJlYWt9aWYoTj0wfGFyW2FyW3k+PjJdPj4yXSx0cltHKzYwPj4wXT0xLGFyW0crNjQ+PjJdPU4sdHJbRys2MT4+MF09MSwwfChOPTB8YXJbVT4+Ml0pJiZidShOKSxhcltfKzY4Pj4yXT1SLEc9MHxhclsoaUE9Xys3MnwwKT4+Ml0sYXJbaUE+PjJdPU4sIUcpe0c9MDticmVha31kdShHKSxHPTB9fXdoaWxlKDApO2lmKFF8fGR1KFkpLEcpe0c9MTticmVhayBufWJyZWFrIHR9fXdoaWxlKDApO2Zvcihhclt1Pj4yXT0wLGFyWzQrdT4+Ml09MCxhcls4K3U+PjJdPTAsRz0wfGh1KDQ4KSxhclt1Pj4yXT1HLGFyW1hBPj4yXT0tMjE0NzQ4MzYwMCxhcltXQT4+Ml09MzUsZUE9MzA3MTgsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMmUzLHUpLDA8PSgwfHRyW0lBPj4wXSkpe0c9MTticmVhayBufXZ1KDB8YXJbdT4+Ml0pLEc9MTticmVhayBufX13aGlsZSgwKTt5dShwLEopLDI2PT0oMHwoKGlBPTB8dHJbRkE+PjBdKTw8MjQ+PjI0PDA/MHxhcltSQT4+Ml06MjU1JmlBKSkmJjA9PSgwfFl1KHAsMCwtMSwzMDc4NSwyNikpP0c9MTooeXUoYyxKKSw0Mz09KDB8KChSPTB8dHJbcmU+PjBdKTw8MjQ+PjI0PDA/MHxhcltpZT4+Ml06MjU1JlIpKT8oRz0wPT0oMHxZdShjLDAsLTEsMzA4MTIsNDMpKSxSPTB8dHJbcmU+PjBdKTpHPTAsUjw8MjQ+PjI0PDAmJnZ1KDB8YXJbYz4+Ml0pKSwoMHx0cltGQT4+MF0pPDAmJnZ1KDB8YXJbcD4+Ml0pO3Q6ZG97aWYoRyl7WT0wfGFyW00+PjJdLEc9MHxhclt5Pj4yXSxOPTB8YXJbRz4+Ml0sdHJbWSs3Nj4+MF09MSxhcltZKzgwPj4yXT1OLE49MHxhcltXPj4yXSxRPVk7ZG97aWYoMHxOKXtfPTB8YXJbRz4+Ml0sRz1XO286Zm9yKDs7KXtmb3IoUj1OOyEoKDB8YXJbUisxNj4+Ml0pPj4+MD49Xz4+PjApOylpZighKFI9MHxhcltSKzQ+PjJdKSlicmVhayBvO2lmKCEoTj0wfGFyW1I+PjJdKSl7Rz1SO2JyZWFrfUc9Un1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztpZihHPTB8YXJbRysyMD4+Ml0sKDB8WSk9PSgwfEcpKXtmb3IoYXJbZD4+Ml09MCxhcls0K2Q+PjJdPTAsYXJbOCtkPj4yXT0wLEc9MHxodSgzMiksYXJbZD4+Ml09RyxhcltRQT4+Ml09LTIxNDc0ODM2MTYsYXJbREE+PjJdPTMwLGVBPTMwODkyLHJBPShpQT1HKSszMHwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO2lmKHRyW0crMzA+PjBdPTAsb28oQSwyLDJlMyxkKSwwPD0oMHx0cltKQT4+MF0pKXtHPTE7YnJlYWsgbn12dSgwfGFyW2Q+PjJdKSxHPTE7YnJlYWsgbn1pZigwfChSPTB8YXJbVT4+Ml0pJiZidShSKSxhcltHKzg0Pj4yXT1RLEc9MHxhclsoaUE9Rys4OHwwKT4+Ml0sYXJbaUE+PjJdPVIsMHxHJiZkdShHKSxhcltwPj4yXT0wLGFyW01BPj4yXT0wLGFyW1RBPj4yXT0wLFI9MHxhcltEKzY4Pj4yXSwwfChHPSgwfGFyW0QrNzI+PjJdKS1SfDApKXtpZigoMHxHKTwwKWJyZWFrIHI7ckE9MHxodShHKSxhcltNQT4+Ml09ckEsYXJbcD4+Ml09ckEsaUE9ckErR3wwLGFyW2pBPj4yXT1pQSxoYigwfHJBLDB8UiwwfEcpLGFyW01BPj4yXT1pQX1pZihhcltjPj4yXT0wLGFyW1VBPj4yXT0wLGFyW1NBPj4yXT0wLFZsKGwscCxjKSxHPTB8YXJbYz4+Ml0sXz0wfGFyW1VBPj4yXSwoMHxHKSE9KDB8XykpZG97Uj0wfGFyW0c+PjJdO2Rve2lmKDB8Uil7aWYoIShOPTB8cXUoUiwxNDcyLDE0ODAsMCkpKWJyZWFrO2ZvcigoUj0wfGFyW0crND4+Ml0pP2J1KFIpOlI9MCxpQT0wfGFyW00+PjJdLHRyW2lBKzkyPj4wXT0xLGVBPU4rOHwwLHJBPShpQT1pQSs5NnwwKSs1NnwwO2FyW2lBPj4yXT1hcltlQT4+Ml0sZUE9ZUErNHwwLCgwfChpQT1pQSs0fDApKTwoMHxyQSk7KTtpZighUilicmVhaztkdShSKX19d2hpbGUoMCk7Rz1HKzh8MH13aGlsZSgoMHxHKSE9KDB8XykpO2lmKCgwfHRyW3pBPj4wXSk8MCYmdnUoMHxhcltPQT4+Ml0pLDB8KEc9MHxhcltjPj4yXSkpe2lmKCgwfChSPTB8YXJbVUE+PjJdKSkhPSgwfEcpKXtmb3IoO049UistOHwwLGFyW1VBPj4yXT1OLCgwfChSPShSPTB8YXJbUistND4+Ml0pPyhkdShSKSwwfGFyW1VBPj4yXSk6TikpIT0oMHxHKTspO0c9MHxhcltjPj4yXX12dShHKX0wfChHPTB8YXJbcD4+Ml0pJiYoKDB8YXJbTUE+PjJdKSE9KDB8RykmJihhcltNQT4+Ml09RyksdnUoRykpO2JyZWFrIHR9fXdoaWxlKDApO2ZvcihhcltzPj4yXT0wLGFyWzQrcz4+Ml09MCxhcls4K3M+PjJdPTAsRz0wfGh1KDQ4KSxhcltzPj4yXT1HLGFyW05BPj4yXT0tMjE0NzQ4MzYwMCxhcltfQT4+Ml09MzUsZUE9MzA4NTYsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMmUzLHMpLDA8PSgwfHRyW1lBPj4wXSkpe0c9MTticmVhayBufXZ1KDB8YXJbcz4+Ml0pLEc9MTticmVhayBufX13aGlsZSgwKTtpQT0wfGFyW00+PjJdLHJBPTB8YXJbYXJbeT4+Ml0+PjJdLHl1KHAsSiksdHJbaUErMTU2Pj4wXT0xLGFyW2lBKzE1Mj4+Ml09ckEsRXUoaUErMTYwfDAscCksKDB8dHJbSEE+PjBdKTwwJiZ2dSgwfGFyW3A+PjJdKSxSPTB8YXJbVz4+Ml07ZG97aWYoMHxSKXtfPTB8YXJbYXJbeT4+Ml0+PjJdLEc9Vzt0OmZvcig7Oyl7Zm9yKE49UjshKCgwfGFyW04rMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoUj0wfGFyW04rND4+Ml0pKWJyZWFrIHQ7Tj1SfWlmKCEoUj0wfGFyW04+PjJdKSl7Rz1OO2JyZWFrfUc9Tn1pZigoMHxHKT09KDB8VykpYnJlYWs7aWYoXz4+PjA8KDB8YXJbRysxNj4+Ml0pPj4+MClicmVhaztpZihSPTB8YXJbTT4+Ml0sTj0wfGFyW0crMjA+PjJdLCgwfFIpPT0oMHxOKSl7Zm9yKGFyW2g+PjJdPTAsYXJbNCtoPj4yXT0wLGFyWzgraD4+Ml09MCxHPTB8aHUoMzIpLGFyW2g+PjJdPUcsYXJbS0E+PjJdPS0yMTQ3NDgzNjE2LGFyW3FBPj4yXT0yOCxlQT0zMDk1NyxyQT0oaUE9RykrMjh8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzI4Pj4wXT0wLG9vKEEsMiwyZTMsaCksMDw9KDB8dHJbJEE+PjBdKSl7Rz0xO2JyZWFrIG59dnUoMHxhcltoPj4yXSksRz0xO2JyZWFrIG59YXJbdz4+Ml09UixHPTB8YXJbVT4+Ml0sMHwoYXJbQWU+PjJdPUcpJiZidShHKSxSPTB8YXJbKEc9TisxNzZ8MCk+PjJdO2Rve2lmKFI+Pj4wPCgwfGFyW04rMTgwPj4yXSk+Pj4wKWFyW1I+PjJdPWFyW3c+PjJdLGFyW1IrND4+Ml09YXJbQWU+PjJdLGFyW3c+PjJdPTAsYXJbQWU+PjJdPTAsYXJbRz4+Ml09Uis4O2Vsc2V7aWYoeWwoTisxNzJ8MCx3KSwhKEc9MHxhcltBZT4+Ml0pKWJyZWFrO2R1KEcpfX13aGlsZSgwKTtpZihhcltkZT4+Ml09YXJbTT4+Ml0sRz0wfGFyW1U+PjJdLGFyW2VlPj4yXT1HKXtidShHKSxwbChlLGRlKSxkdShHKSxHPTA7YnJlYWsgbn1wbChlLGRlKSxHPTA7YnJlYWsgbn19d2hpbGUoMCk7Zm9yKGFyW2s+PjJdPTAsYXJbNCtrPj4yXT0wLGFyWzgraz4+Ml09MCxHPTB8aHUoNDgpLGFyW2s+PjJdPUcsYXJbeEE+PjJdPS0yMTQ3NDgzNjAwLGFyW1BBPj4yXT0zMyxlQT0zMDkyMyxyQT0oaUE9RykrMzN8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzMzPj4wXT0wLG9vKEEsMiwyZTMsayksMDw9KDB8dHJbTEE+PjBdKSl7Rz0xO2JyZWFrfXZ1KDB8YXJbaz4+Ml0pLEc9MX1lbHNle2ZvcihhclthPj4yXT0wLGFyWzQrYT4+Ml09MCxhcls4K2E+PjJdPTAsRz0wfGh1KDQ4KSxhclthPj4yXT1HLGFyW2FlPj4yXT0tMjE0NzQ4MzYwMCxhcltjZT4+Ml09MzUsZUE9MzA1ODUsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMCxhKSwwPD0oMHx0cltsZT4+MF0pKXtHPTE7YnJlYWt9dnUoMHxhclthPj4yXSksRz0xfX13aGlsZSgwKTswfChSPTB8YXJbeT4+Ml0pJiYoKDB8KE49MHxhclt5QT4+Ml0pKSE9KDB8UikmJihhclt5QT4+Ml09TisofigoTistNC1SfDApPj4+Mik8PDIpKSx2dShSKSl9fXdoaWxlKDApOzE5Nz09KDB8bWUpJiYobWU9MCxhcltsQT4+Ml09NDUyNCxhcltwPj4yXT0xODgsYXJbY0E+PjJdPTIwOCxhcltzQT4+Ml09MCxKZihkQSx1QSksYXJba0E+PjJdPTAsYXJbaEE+PjJdPS0xLGFyW3A+PjJdPTQ1MDQsYXJbY0E+PjJdPTQ1NDQsYXJbbEE+PjJdPTQ1MjQsU2YodUEpLGFyW3VBPj4yXT00MzQwLGFyW3dBPj4yXT0wLGFyW3dBKzQ+PjJdPTAsYXJbd0ErOD4+Ml09MCxhclt3QSsxMj4+Ml09MCxhclt2QT4+Ml09MjQsYXJbeT4+Ml09MCxhcls0K3k+PjJdPTAsYXJbOCt5Pj4yXT0wLFhlKHVBLHkpLCgwfHRyW21BPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksTGYoaUE9MHxXZShnQSwzMDU1NywyNyksMHxhclsyMCsoMHxhcltNPj4yXSk+PjJdKSxJZShvLHVBKSxvbyhBLDIsMTIzLG8pLCgwfHRyW1pBPj4wXSk8MCYmdnUoMHxhcltvPj4yXSksYXJbcD4+Ml09NDUwNCxhcltjQT4+Ml09NDU0NCxhcltnQT4+Ml09NDUyNCxhclt1QT4+Ml09NDM0MCwoMHx0cltwQT4+MF0pPDAmJnZ1KDB8YXJbd0E+PjJdKSxrZih1QSksYmYoY0EpLEc9MSksRiYmZHUoRil9aWYoKDB8dHJbYmU+PjBdKTwwJiZ2dSgwfGFyW3VlPj4yXSksMHwoRj0wfGFyW0JlPj4yXSkpe2lmKCgwfChSPTB8YXJbb0E+PjJdKSkhPSgwfEYpKXtmb3IoO049UistMTJ8MCxhcltvQT4+Ml09TiwoMHwoUj0oUj0wfGFyW1IrLTQ+PjJdKT8oZHUoUiksMHxhcltvQT4+Ml0pOk4pKSE9KDB8Rik7KTtGPTB8YXJbQmU+PjJdfXZ1KEYpfWlmKDB8RylicmVhayBpfWVsc2V7c3dpdGNoKDB8Ryl7Y2FzZSAxOTUzMDAwODAyOmJyZWFrO2RlZmF1bHQ6YnJlYWsgZn1HZSh5LFYrNTJ8MCksaUE9MHxhclt5Pj4yXSxHPWlBO246ZG97aWYoND09KCgwfGFyW08+PjJdKS1pQXwwKSl7Xz0wfGFyW00+PjJdLFI9MHxhcltHPj4yXSx0cltfKzQxPj4wXT0xLGFyW18rNDQ+PjJdPVIsUj0wfGFyW1c+PjJdLFk9Xztkb3tpZigwfFIpe049MHxhcltHPj4yXSxHPVc7dDpmb3IoOzspe2ZvcihGPVI7ISgoMHxhcltGKzE2Pj4yXSk+Pj4wPj1OPj4+MCk7KWlmKCEoRj0wfGFyW0YrND4+Ml0pKWJyZWFrIHQ7aWYoIShSPTB8YXJbRj4+Ml0pKXtHPUY7YnJlYWt9Rz1GfWlmKCgwfEcpPT0oMHxXKSlicmVhaztpZihOPj4+MDwoMHxhcltHKzE2Pj4yXSk+Pj4wKWJyZWFrO2lmKEY9MHxhcltHKzIwPj4yXSwwfHRyW0YrNDE+PjBdKXtmb3IoYXJbZj4+Ml09MCxhcls0K2Y+PjJdPTAsYXJbOCtmPj4yXT0wLEc9MHxodSg0OCksYXJbZj4+Ml09RyxhcltxPj4yXT0tMjE0NzQ4MzYwMCxhclskPj4yXT0zOCxlQT0zMDQ4MyxyQT0oaUE9RykrMzh8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzM4Pj4wXT0wLG9vKEEsMiwyZTMsZiksMDw9KDB8dHJbQUE+PjBdKSl7Rz0xO2JyZWFrIG59dnUoMHxhcltmPj4yXSksRz0xO2JyZWFrIG59aWYoKDB8Xyk9PSgwfEYpKXtmb3IoYXJbbj4+Ml09MCxhcls0K24+PjJdPTAsYXJbOCtuPj4yXT0wLEc9MHxodSg0OCksYXJbbj4+Ml09Ryxhclt4Pj4yXT0tMjE0NzQ4MzYwMCxhcltQPj4yXT0zNCxlQT0zMDUyMixyQT0oaUE9RykrMzR8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTtpZih0cltHKzM0Pj4wXT0wLG9vKEEsMiwyZTMsbiksMDw9KDB8dHJbTD4+MF0pKXtHPTE7YnJlYWsgbn12dSgwfGFyW24+PjJdKSxHPTE7YnJlYWsgbn1pZigoMHwoRz0wfGFyWyhSPUYrNTJ8MCk+PjJdKSk9PSgwfGFyW0YrNTY+PjJdKT9rbChGKzQ4fDAsTSk6KGFyW0c+PjJdPVksRj0wfGFyW1U+PjJdLChhcltHKzQ+PjJdPUYpJiYoYnUoRiksRz0wfGFyW1I+PjJdKSxhcltSPj4yXT1HKzgpLGFyW3Q+PjJdPWFyW00+PjJdLEc9MHxhcltVPj4yXSxhcltLPj4yXT1HKXtidShHKSxwbChlLHQpLGR1KEcpLEc9MDticmVhayBufXBsKGUsdCksRz0wO2JyZWFrIG59fXdoaWxlKDApO2ZvcihhcltpPj4yXT0wLGFyWzQraT4+Ml09MCxhcls4K2k+PjJdPTAsRz0wfGh1KDQ4KSxhcltpPj4yXT1HLGFyW3o+PjJdPS0yMTQ3NDgzNjAwLGFyW2o+PjJdPTQxLGVBPTMwNDQxLHJBPShpQT1HKSs0MXwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO3RyW0crNDE+PjBdPTAsb28oQSwyLDJlMyxpKSxHPSgoMHx0cltIPj4wXSk8MCYmdnUoMHxhcltpPj4yXSksMSl9ZWxzZXtmb3IoYXJbcj4+Ml09MCxhcls0K3I+PjJdPTAsYXJbOCtyPj4yXT0wLEc9MHxodSgzMiksYXJbcj4+Ml09RyxhcltmQT4+Ml09LTIxNDc0ODM2MTYsYXJbbkE+PjJdPTI5LGVBPTMwNDExLHJBPShpQT1HKSsyOXwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO3RyW0crMjk+PjBdPTAsb28oQSwyLDAsciksRz0oKDB8dHJbdEE+PjBdKTwwJiZ2dSgwfGFyW3I+PjJdKSwxKX19d2hpbGUoMCk7aWYoMHwoRj0wfGFyW3k+PjJdKSYmKCgwfChSPTB8YXJbTz4+Ml0pKSE9KDB8RikmJihhcltPPj4yXT1SKyh+KChSKy00LUZ8MCk+Pj4yKTw8MikpLHZ1KEYpKSwwfEcpe0c9MTticmVhayBpfX19d2hpbGUoMCk7aWYoKDB8KFY9Vis2NHwwKSk9PSgwfFQpKXtHPTEwO2JyZWFrfX1WPTB8YXJbeWU+PjJdfWlmKFk9MTA9PSgwfEcpPzA6RywwfFYpe2lmKCgwfChHPTB8YXJbUz4+Ml0pKT09KDB8VikpRz1WO2Vsc2V7Zm9yKDtGPUcrLTY0fDAsYXJbUz4+Ml09RiwwfChSPTB8YXJbRystMTI+PjJdKSYmKCgwfChfPTB8YXJbKE49RystOHwwKT4+Ml0pKSE9KDB8UikmJihhcltOPj4yXT1fKyh+KChfKy00LVJ8MCk+Pj4yKTw8MikpLHZ1KFIpKSxhcltGPj4yXT00MjY0LDB8KEY9MHxhcltHKy00MD4+Ml0pJiYoKDB8YXJbKEc9RystMzZ8MCk+PjJdKSE9KDB8RikmJihhcltHPj4yXT1GKSx2dShGKSksKDB8KEc9MHxhcltTPj4yXSkpIT0oMHxWKTspO0c9MHxhclt5ZT4+Ml19dnUoRyl9c3dpdGNoKDB8WSl7Y2FzZSA4Om1lPTM2MjticmVhayBlO2Nhc2UgMDpicmVhaztkZWZhdWx0OmJyZWFrIGV9aWYoRz0wfGFyW2JBKzQ+PjJdKWZvcig7Vj0wfGFyW0c+PjJdOylHPVY7ZWxzZSBpZihHPTB8YXJbKFY9YkErOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxiQSkpZm9yKDtiQT0wfGFyW1Y+PjJdLEc9MHxhclsoVj1iQSs4fDApPj4yXSwoMHxhcltHPj4yXSkhPSgwfGJBKTspO2lmKCgwfEcpPT0oMHxXKSl7bWU9MzYyO2JyZWFrIGV9YkE9R316bCgpfWVsc2UgbWU9MzYyfXdoaWxlKDApO2U6ZG97aWYoMzYyPT0oMHxtZSkpe0c9MHxhcltnZT4+Ml07cjpkb3tpZigoMHxHKSE9KDB8Vykpe2ZvcihRPTExK3l8MCxKPUQ9NCt5fDAsTT00K3Z8MCxUPTgrbXwwLFU9NCttfDAsUz0xMSttfDAsWT1HOzspe2lmKFI9MHxhclsyMCsoMHxhclsoXz1ZKzIwfDApPj4yXSk+PjJdLE49MTEyKygwfGFyW2c+PjJdKXwwLEc9MHxhcltOPj4yXSl7Vj1OO2k6Zm9yKDs7KXtmb3IoRj1HOyEoKDB8YXJbRisxNj4+Ml0pPj4+MD49Uj4+PjApOyl7aWYoIShHPTB8YXJbRis0Pj4yXSkpYnJlYWsgaTtGPUd9aWYoIShHPTB8YXJbRj4+Ml0pKXtWPUY7YnJlYWt9Vj1GfU49KDB8VikhPSgwfE4pJiYoMHxhcltWKzE2Pj4yXSk+Pj4wPD1SPj4+MD8oRz0wfGFyW1YrMjA+PjJdLChWPTB8YXJbVisyND4+Ml0pPyhidShWKSxWKTowKTpHPTB9ZWxzZSBOPUc9MDtpZih5dSh5LEcrNjR8MCksND09KDB8KChHPTB8dHJbUT4+MF0pPDwyND4+MjQ8MD8wfGFyW0Q+PjJdOjI1NSZHKSk/KFY9MD09KDB8WXUoeSwwLC0xLDMwMjk4LDQpKSxHPTB8dHJbUT4+MF0pOlY9MCxHPDwyND4+MjQ8MCYmdnUoMHxhclt5Pj4yXSksVil7Rz0wfGFyW2c+PjJdLGFyW3k+PjJdPWFyW0crNTI+PjJdLFY9MHxhcltHKzU2Pj4yXSwoYXJbSj4+Ml09VikmJihidShWKSxHPTB8YXJbZz4+Ml0pLFY9MHxhcltHKzQ0Pj4yXSxGPTB8YXJbRys0OD4+Ml0sKFI9MD09KDB8RikpfHxidShGKSxMdCh2LFYsMHxhclsyMCsoMHxhcltfPj4yXSk+PjJdLHksMTc1MjU4OTEyMyksRz0wPT0oMHxhclt2Pj4yXSksMHwoVj0wfGFyW00+PjJdKSYmZHUoVik7ZG97aWYoRyl7Zm9yKGFyW20+PjJdPTAsYXJbNCttPj4yXT0wLGFyWzgrbT4+Ml09MCxHPTB8aHUoNDgpLGFyW20+PjJdPUcsYXJbVD4+Ml09LTIxNDc0ODM2MDAsYXJbVT4+Ml09MzUsZUE9MzA5ODYsckE9KGlBPUcpKzM1fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRyszNT4+MF09MCxvbyhBLDIsMTA2LG0pLDA8PSgwfHRyW1M+PjBdKSl7Rz0xO2JyZWFrfXZ1KDB8YXJbbT4+Ml0pLEc9MX1lbHNlIEc9MH13aGlsZSgwKTtSfHxkdShGKSwwfChWPTB8YXJbSj4+Ml0pJiZkdShWKSxHfHwobWU9MzkyKX1lbHNlIG1lPTM5MjtpZigzOTI9PSgwfG1lKSYmKEc9bWU9MCksMHxOJiZkdShOKSwwfEcpYnJlYWsgZTtHPTB8YXJbWSs0Pj4yXTtkb3tpZihHKWZvcig7Vj0wfGFyW0c+PjJdOylHPVY7ZWxzZXtpZihHPTB8YXJbKFY9WSs4fDApPj4yXSwoMHxhcltHPj4yXSk9PSgwfFkpKWJyZWFrO2Zvcig7ZGU9MHxhcltWPj4yXSxHPTB8YXJbKFY9ZGUrOHwwKT4+Ml0sKDB8YXJbRz4+Ml0pIT0oMHxkZSk7KTt9fXdoaWxlKDApO2lmKCgwfEcpPT0oMHxXKSlicmVhaztZPUd9aWYoKDB8KEc9MHxhcltnZT4+Ml0pKSE9KDB8Vykpe009MV5oZSxUPTExK3l8MCxTPVU9NCt5fDAsTz1aZSs0fDAsej1wZSs0fDA7ZG97aWYoRD1HKzIwfDAsXz0wfGFyW0crMTY+PjJdLE49MTEyKygwfGFyW2c+PjJdKXwwLDB8KEY9MHxhcltOPj4yXSkpe1Y9TjtpOmZvcig7Oyl7Zm9yKFI9RjshKCgwfGFyW1IrMTY+PjJdKT4+PjA+PV8+Pj4wKTspe2lmKCEoRj0wfGFyW1IrND4+Ml0pKWJyZWFrIGk7Uj1GfWlmKCEoRj0wfGFyW1I+PjJdKSl7Vj1SO2JyZWFrfVY9Un1pZigoMHxWKSE9KDB8TikmJigwfGFyW1YrMTY+PjJdKT4+PjA8PV8+Pj4wKXtGPTB8YXJbVisyMD4+Ml0sVj0wfGFyW1YrMjQ+PjJdLEo9Vj8oYnUoViksVik6MCxWPTA9PSgwfEYpO2Rve2lmKFZ8TSlWPVY/MTk6MTg7ZWxzZXtpZih5dSh5LEYrNjR8MCksND09KDB8KChWPTB8dHJbVD4+MF0pPDwyND4+MjQ8MD8wfGFyW1U+PjJdOjI1NSZWKSk/KEY9MD09KDB8WXUoeSwwLC0xLDMwMzAzLDQpKSxWPTB8dHJbVD4+MF0pOkY9MCxWPDwyND4+MjQ8MCYmdnUoMHxhclt5Pj4yXSksRil7aWYoZm8oeSxrZSxfLDE2ODQ2MzA4ODcpLCgwfChGPTB8YXJbeT4+Ml0pKT09KDB8YXJbUz4+Ml0pKVY9MTk7ZWxzZXtOPTB8YXJbRj4+Ml0sRj0wfGFyW1c+PjJdO2Rve2lmKEYpe1Y9VztpOmZvcig7Oyl7Zm9yKFI9RjshKCgwfGFyW1IrMTY+PjJdKT4+PjA+PU4+Pj4wKTspe2lmKCEoRj0wfGFyW1IrND4+Ml0pKWJyZWFrIGk7Uj1GfWlmKCEoRj0wfGFyW1I+PjJdKSl7Vj1SO2JyZWFrfVY9Un1pZigoMHxWKT09KDB8Vykpe1Y9MTk7YnJlYWt9aWYoTj4+PjA8KDB8YXJbVisxNj4+Ml0pPj4+MCl7Vj0xOTticmVha31fPTB8YXJbVisyMD4+Ml0sWT0wfGFyW1YrMjQ+PjJdLChRPTA9PSgwfFkpKXx8YnUoWSksUj0wfGFyW0Q+PjJdLFY9MHxhcltSKzIwND4+Ml0sUj0wfGFyW1IrMjA4Pj4yXSwoTj0wPT0oMHxSKSl8fGJ1KFIpO2Rve2lmKCFWKXtpZihWPTB8YXJbKEY9XykrMjA0Pj4yXSxGPTB8YXJbRisyMDg+PjJdKXtidShGKSxkdShGKSxWPTAhPSgwfFYpO2JyZWFrfVY9MCE9KDB8Vik7YnJlYWt9Vj0wfXdoaWxlKDApO058fGR1KFIpO2Rve2lmKFYpe2lmKFY9MHxhcltEPj4yXSxGPTB8YXJbKFI9XykrMjA0Pj4yXSwwfChSPTB8YXJbUisyMDg+PjJdKSYmYnUoUiksYXJbWmU+PjJdPUYsYXJbTz4+Ml09UixabChWLFplKSwhKFY9MHxhcltPPj4yXSkpYnJlYWs7ZHUoVil9fXdoaWxlKDApO1I9MHxhcltEPj4yXSxWPTB8YXJbUisxOTY+PjJdLFI9MHxhcltSKzIwMD4+Ml0sKE49MD09KDB8UikpfHxidShSKTtkb3tpZighVil7aWYoVj0wfGFyWyhGPV8pKzE5Nj4+Ml0sRj0wfGFyW0YrMjAwPj4yXSl7YnUoRiksZHUoRiksVj0wIT0oMHxWKTticmVha31WPTAhPSgwfFYpO2JyZWFrfVY9MH13aGlsZSgwKTtOfHxkdShSKTtkb3tpZihWKXtpZihSPTB8YXJbRD4+Ml0sVj0wfGFyWyhGPV8pKzE5Nj4+Ml0sMHwoRj0wfGFyW0YrMjAwPj4yXSkmJmJ1KEYpLGFyW3BlPj4yXT1WLGFyW3o+PjJdPUYsWmwoUixwZSksIShWPTB8YXJbej4+Ml0pKWJyZWFrO2R1KFYpfX13aGlsZSgwKTtpZihRKXtWPTA7YnJlYWt9ZHUoWSksVj0wfWVsc2UgVj0xOX13aGlsZSgwKTtGPTB8YXJbeT4+Ml19aWYoMHxGJiYoKDB8KFI9MHxhcltTPj4yXSkpIT0oMHxGKSYmKGFyW1M+PjJdPVIrKH4oKFIrLTQtRnwwKT4+PjIpPDwyKSksdnUoRikpLDB8VilicmVha31WPTB9fXdoaWxlKDApO3N3aXRjaCgwfEomJmR1KEopLDB8Vil7Y2FzZSAxOTpjYXNlIDA6YnJlYWs7ZGVmYXVsdDpicmVhayByfX19aWYoVj0wfGFyW0crND4+Ml0pZm9yKEc9VjtWPTB8YXJbRz4+Ml07KUc9VjtlbHNlIGlmKEY9MHxhclsoVj1HKzh8MCk+PjJdLCgwfGFyW0Y+PjJdKT09KDB8RykpRz1GO2Vsc2UgZm9yKDtnZT0wfGFyW1Y+PjJdLEc9MHxhclsoVj1nZSs4fDApPj4yXSwoMHxhcltHPj4yXSkhPSgwfGdlKTspO313aGlsZSgoMHxHKSE9KDB8VykpfX19d2hpbGUoMCk7aWYoVj0wfGFyW0k+PjJdLFQ9MHxhcltaPj4yXSwoMHxWKT09KDB8VCkpRz1BKzh8MDtlbHNle1U9RWUrNHwwLFM9NCtwfDAsTz04K0V8MCx6PTQrRXwwLGo9MTErRXwwLEg9NCtYfDAseD04K0J8MCxQPTQrQnwwLEw9MTErQnwwLHE9KEs9QmUrOHwwKSsxMXwwLCQ9eWUrMTF8MCxBQT0xMSt5fDAsRz1BKzh8MDtkb3tmb3IoRj0wfGFyW1Y+PjJdLGhvKHksMHxhcltnPj4yXSxGKSx3byh5ZSwwfGFyW2c+PjJdLEYpLE09MHxodSg1MiksYXJbTSs0Pj4yXT0wLGFyW00rOD4+Ml09MCxhcltNPj4yXT02NDIwLFI9TSsxMnwwLHJBPShpQT1NKzE2fDApKzM2fDA7KChhcltpQT4+Ml09MCl8KGlBPWlBKzR8MCkpPCgwfHJBKTspO2FyWyhEPVIpPj4yXT1GLEV1KE0rMTZ8MCx5KSxFdShNKzI4fDAseWUpLG1vKEJlLDB8YXJbZz4+Ml0sRixNKzQwfDApO2Rve2lmKDB8YXJbQmU+PjJdKXBlPTB8YXJbKFplPUJlKSs0Pj4yXSxhclsoRj1BKT4+Ml09YXJbWmU+PjJdLGFyW0YrND4+Ml09cGUsYXJbRz4+Ml09YXJbSz4+Ml0sYXJbRys0Pj4yXT1hcltLKzQ+PjJdLGFyW0crOD4+Ml09YXJbSys4Pj4yXSxhcltLPj4yXT0wLGFyW0srND4+Ml09MCxhcltLKzg+PjJdPTAsRj0xO2Vsc2V7aWYoaGUpe2lmKGlvKEVlLGtlLEYpLFI9MHxhcltFZT4+Ml0sUT0wfGFyW1U+PjJdLCgwfFIpPT0oMHxRKSlGPTIyO2Vsc2V7Zm9yKDs7KXtpZigxNjY3NTI3NTIzPT0oMHxhcltSKzIwPj4yXSkpe0dlKHAsUis1MnwwKSxGPTB8YXJbcD4+Ml07cjpkb3tpZig0PT0oKDB8YXJbUz4+Ml0pLUZ8MCkpe1k9MHxhcltGPj4yXSxOPTB8YXJbVz4+Ml07ZG97aWYoMHxOKXtGPVc7aTpmb3IoOzspe2ZvcihfPU47ISgoMHxhcltfKzE2Pj4yXSk+Pj4wPj1ZPj4+MCk7KXtpZighKE49MHxhcltfKzQ+PjJdKSlicmVhayBpO189Tn1pZighKE49MHxhcltfPj4yXSkpe0Y9XzticmVha31GPV99aWYoKDB8Rik9PSgwfFcpKWJyZWFrO2lmKFk+Pj4wPCgwfGFyW0YrMTY+PjJdKT4+PjApYnJlYWs7aWYoRj0wfGFyW0YrMjA+PjJdLGFyW1g+PjJdPUQsYnUoYXJbSD4+Ml09TSksKF89MHxhclsoTj1GKzE4OHwwKT4+Ml0pPj4+MDwoMHxhcltGKzE5Mj4+Ml0pPj4+MCl7YXJbXz4+Ml09YXJbWD4+Ml0sYXJbXys0Pj4yXT1hcltIPj4yXSxhcltYPj4yXT0wLGFyW0g+PjJdPTAsYXJbTj4+Ml09Xys4LEY9MDticmVhayByfWlmKEJsKEYrMTg0fDAsWCksIShGPTB8YXJbSD4+Ml0pKXtGPTA7YnJlYWsgcn1kdShGKSxGPTA7YnJlYWsgcn19d2hpbGUoMCk7Zm9yKGFyW0U+PjJdPTAsYXJbNCtFPj4yXT0wLGFyWzgrRT4+Ml09MCxGPTB8aHUoNDgpLGFyW0U+PjJdPUYsYXJbTz4+Ml09LTIxNDc0ODM2MDAsYXJbej4+Ml09MzksZUE9MzEwNjMsckE9KGlBPUYpKzM5fDA7dHJbaUE+PjBdPTB8dHJbZUE+PjBdLGVBPWVBKzF8MCwoMHwoaUE9aUErMXwwKSk8KDB8ckEpOyk7aWYodHJbRiszOT4+MF09MCxvbyhBLDIsMmUzLEUpLDA8PSgwfHRyW2o+PjBdKSl7Rj0xO2JyZWFrfXZ1KDB8YXJbRT4+Ml0pLEY9MX1lbHNle2ZvcihhcltCPj4yXT0wLGFyWzQrQj4+Ml09MCxhcls4K0I+PjJdPTAsRj0wfGh1KDQ4KSxhcltCPj4yXT1GLGFyW3g+PjJdPS0yMTQ3NDgzNjAwLGFyW1A+PjJdPTQwLGVBPTMxMDIyLHJBPShpQT1GKSs0MHwwO3RyW2lBPj4wXT0wfHRyW2VBPj4wXSxlQT1lQSsxfDAsKDB8KGlBPWlBKzF8MCkpPCgwfHJBKTspO2lmKHRyW0YrNDA+PjBdPTAsb28oQSwyLDAsQiksMDw9KDB8dHJbTD4+MF0pKXtGPTE7YnJlYWt9dnUoMHxhcltCPj4yXSksRj0xfX13aGlsZSgwKTtpZigwfChOPTB8YXJbcD4+Ml0pJiYoKDB8KF89MHxhcltTPj4yXSkpIT0oMHxOKSYmKGFyW1M+PjJdPV8rKH4oKF8rLTQtTnwwKT4+PjIpPDwyKSksdnUoTikpLDB8Ril7Rj0xO2JyZWFrfX1pZigoMHwoUj1SKzY0fDApKT09KDB8USkpe0Y9MjI7YnJlYWt9fVI9MHxhcltFZT4+Ml19aWYoSj0yMj09KDB8RiksMHxSKXtpZigoMHwoTj0wfGFyW1U+PjJdKSkhPSgwfFIpKXtmb3IoO189TistNjR8MCxhcltVPj4yXT1fLDB8KFk9MHxhcltOKy0xMj4+Ml0pJiYoKDB8KEQ9MHxhclsoUT1OKy04fDApPj4yXSkpIT0oMHxZKSYmKGFyW1E+PjJdPUQrKH4oKEQrLTQtWXwwKT4+PjIpPDwyKSksdnUoWSkpLGFyW18+PjJdPTQyNjQsMHwoXz0wfGFyW04rLTQwPj4yXSkmJigoMHxhclsoTj1OKy0zNnwwKT4+Ml0pIT0oMHxfKSYmKGFyW04+PjJdPV8pLHZ1KF8pKSwoMHwoTj0wfGFyW1U+PjJdKSkhPSgwfFIpOyk7Uj0wfGFyW0VlPj4yXX12dShSKX1pZighSilicmVha31GPTB9fXdoaWxlKDApO2lmKCgwfHRyW3E+PjBdKTwwJiZ2dSgwfGFyW0s+PjJdKSxkdShNKSwoMHx0clskPj4wXSk8MCYmdnUoMHxhclt5ZT4+Ml0pLCgwfHRyW0FBPj4wXSk8MCYmdnUoMHxhclt5Pj4yXSksVj1WKzR8MCwwfEYpYnJlYWsgZX13aGlsZSgoMHxWKSE9KDB8VCkpfUJlPTB8YXJbKHllPTU2NTkyKSs0Pj4yXSxhclsoRWU9QSk+PjJdPWFyW3llPj4yXSxhcltFZSs0Pj4yXT1CZSx5dShHLDU2NjAwKX19d2hpbGUoMCk7dmV8fGR1KHdlKX1lbHNle2ZvcihhcltxPj4yXT0wLGFyW3ErND4+Ml09MCxhcltxKzg+PjJdPTAsRz0wfGh1KDQ4KSxhcltxPj4yXT1HLGFyW3ErOD4+Ml09LTIxNDc0ODM2MDAsYXJbcSs0Pj4yXT00MixlQT0zMDMyMyxyQT0oaUE9RykrNDJ8MDt0cltpQT4+MF09MHx0cltlQT4+MF0sZUE9ZUErMXwwLCgwfChpQT1pQSsxfDApKTwoMHxyQSk7KTt0cltHKzQyPj4wXT0wLG9vKEEsMiwyZTMscSksKDB8dHJbcSsxMT4+MF0pPDAmJnZ1KDB8YXJbcT4+Ml0pfX13aGlsZSgwKTtpZighKEE9MHxhcltJPj4yXSkpcmV0dXJuIHVyPUM7KDB8KEc9MHxhcltaPj4yXSkpIT0oMHxBKSYmKGFyW1o+PjJdPUcrKH4oKEcrLTQtQXwwKT4+PjIpPDwyKSk7dnUoQSksdXI9Q30oQSxlKSwwPD0oMHx0cltvKzgrMTE+PjBdKSlyZXR1cm4gdXI9YTt2dSgwfGFyW28rOD4+Ml0pLHVyPWF9KGYsMHxhcltlPj4yXSx0PzB8YXJbcj4+Ml06cix0PzB8YXJbcis0Pj4yXToyNTUmbiwxKSxhbyhBLGYsMHxhcltlPj4yXSksdXI9KDA8PSgwfHRyWyhBPWYrOHwwKSsxMT4+MF0pfHx2dSgwfGFyW0E+PjJdKSxpKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAsZXw9MCxyfD0wO3ZhciBpLGYsbj0wLHQ9MCxvPTA7aWYodXI9KGY9dXIpKzMyfDAsbj0oaT1mKSsyMHwwLHQ9Zis4fDAsbz0wfG9BKCksIWUpcmV0dXJuIGFyW0E+PjJdPW8saUEoKG89MCl8byksdm9pZCh1cj1mKTshZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTA7aWYodXI9KG89dXIpKzY0fDAsdD1vKzQ0fDAsYT1vKzMyfDAsZj1vKzEyfDAsYj1vLCEoaXw9MCkpcmV0dXJuIGFyW2E+PjJdPTAsYXJbYSs0Pj4yXT0wLGFyW2ErOD4+Ml09MCxvbyh0LDUsMjAwMSxhKSwoMHx0clthKzExPj4wXSk8MCYmdnUoMHxhclthPj4yXSksYW8oQSx0LDB8YXJbZT4+Ml0pLCgwfHRyWyhhPTgrdHwwKSsxMT4+MF0pPDAmJnZ1KDB8YXJbYT4+Ml0pLHVyPW87c2wodCw0MCsoMHxhcltlPj4yXSl8MCksYT0wfGFyW3Q+PjJdLGM9MHxhclsobj00K3R8MCk+PjJdO0E6ZG97aWYoKDB8YSkhPSgwfGMpKXtmb3IoO2w9MHxhclthPj4yXSwoMHxhcltsKzIwPj4yXSkhPSgwfHIpOylpZigoMHwoYT1hKzh8MCkpPT0oMHxjKSl7YT0wLHM9MTM7YnJlYWsgQX11PWwsYz0wfGFyW2ErND4+Ml0sMHwoYT1jKSYmYnUoYyksbD8ocj0wfGh1KDE2KSxhcltyPj4yXT0wLGFyW3IrND4+Ml09MCxhcltyKzg+PjJdPTAsYXJbcisxMj4+Ml09MCxhcltpPj4yXT1yLGM/KGJ1KGMpLGM9MHxhclsoYj1yKzR8MCk+PjJdLGFyW3I+PjJdPXUsYXJbYj4+Ml09YSwwfGMmJmR1KGMpKTooYXJbcj4+Ml09dSxhcltyKzQ+PjJdPWEpLGM9MHxhcltpPj4yXSxyPTB8YXJbZT4+Ml0sMHwobD0wfGFyW2UrND4+Ml0pJiZidShsKSxhcltjKzg+PjJdPXIsYz0wfGFyWyhpPWMrMTJ8MCk+PjJdLGFyW2k+PjJdPWwsMHxjJiZkdShjKSxhbyhBLDU2NTkyLDB8YXJbZT4+Ml0pKTpzPTEzfWVsc2UgYT0wLHM9MTN9d2hpbGUoMCk7MTM9PSgwfHMpJiYoYXJbYj4+Ml09MCxhcltiKzQ+PjJdPTAsYXJbYis4Pj4yXT0wLG9vKGYsNSwyZTMsYiksKDB8dHJbYisxMT4+MF0pPDAmJnZ1KDB8YXJbYj4+Ml0pLGFvKEEsZiwwfGFyW2U+PjJdKSwoMHx0clsoYz04K2Z8MCkrMTE+PjBdKTwwJiZ2dSgwfGFyW2M+PjJdKSk7MHxhJiZkdShhKTtpZigwfChhPTB8YXJbdD4+Ml0pKXtpZigoMHwoYz0wfGFyW24+PjJdKSkhPSgwfGEpKXtmb3IoO3I9YystOHwwLGFyW24+PjJdPXIsKDB8KGM9KGM9MHxhcltjKy00Pj4yXSk/KGR1KGMpLDB8YXJbbj4+Ml0pOnIpKSE9KDB8YSk7KTthPTB8YXJbdD4+Ml19dnUoYSl9dXI9b30odCxlLHIsbiksdD0wfGFyW3Q+PjJdPyhuPTB8aHUoMTIpLGFyW24+PjJdPWFyW3Q+PjJdLGFyW24rND4+Ml09YXJbdCs0Pj4yXSxhcltuKzg+PjJdPWFyW3QrOD4+Ml0sYXJbaT4+Ml09biwwfGNBKDEzOTIsMHxpKSk6KGFyW2k+PjJdPWFyW24+PjJdLDB8Y0EoMTMyMCwwfGkpKSxhcltBPj4yXT10LGlBKDB8byksdXI9Zn0sZnVuY3Rpb24oQSxlLHIpe3J8PTAsYXJbKGV8PTApKygwfGFyWyhBfD0wKT4+Ml0pPj4yXT1yfSxmdW5jdGlvbihBLGUscil7cnw9MCxhclsoZXw9MCkrKDB8YXJbKEF8PTApPj4yXSk+PjJdPXJ9LGZ1bmN0aW9uKEEsZSxyKXtzcig0NDQ1NiwzNTEzNyw1MSwzNTE1Myl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MDtpZigwPCgwfChyfD0wKSkpe2Y9MDtkb3tmb3Iobj0wfGJyKGYsciksaT0wO2FyW0ErKCh0PWkrbnwwKTw8Mik+PjJdPW9yW2UrKHQ8PDEpPj4xXSwoMHwoaT1pKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MCxvPTA7aWYoMDwoMHwocnw9MCkpKXtmPTA7ZG97Zm9yKHQ9MHxicihmLHIpLG49aT0wO2k9KDB8b3JbZSsoKG89bit0fDApPDwxKT4+MV0pK2l8MCxhcltBKyhvPDwyKT4+Ml09aSwoMHwobj1uKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGk9MCxmPTAsbj0wLHQ9MDtpZigwPCgwfChyfD0wKSkpe2Y9MDtkb3tmb3Iobj1pPTA7dD0oMHxicihuLHIpKStmfDAsaT0oMHxvcltlKyh0PDwxKT4+MV0pK2l8MCxhcltBKyh0PDwyKT4+Ml09aSwoMHwobj1uKzF8MCkpIT0oMHxyKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MDtmb3IodXI9KGY9dXIpKzMyfDAsaT1mLG49MDt0PTB8b3JbZSsobjw8MSk+PjFdLGw9KDc0KihvPTB8b3JbZSsobis0PDwxKT4+MV0pfDApKygyOSp0fDApKyg4NCooYT0wfG9yW2UrKG4rODw8MSk+PjFdKXwwKSsoNTUqKGM9MHxvcltlKyhuKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW2krKG48PDEpPj4xXT0oMHxsKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxsKTwzMjc2Nz9sOjMyNzY3KSxsPSgwfGJyKGMsLTg0KSkrKCgwfGJyKGEsLTI5KSkrKCg3NCpvfDApKyg1NSp0fDApKSkrNjQ+Pjcsb3JbaSs4KyhuPDwxKT4+MV09KDB8bCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8bCk8MzI3Njc/bDozMjc2NyksbD0oNzQqY3wwKSsoKDB8YnIoYSwtNzQpKSsoNzQqdHwwKSkrNjQ+Pjcsb3JbaSsxNisobjw8MSk+PjFdPSgwfGwpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfGwpPDMyNzY3P2w6MzI3NjcpLHQ9KDB8YnIoYywtMjkpKSsoKDU1KmF8MCkrKCgwfGJyKG8sLTc0KSkrKDg0KnR8MCkpKSs2ND4+NyxvcltpKzI0KyhuPDwxKT4+MV09KDB8dCk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8dCk8MzI3Njc/dDozMjc2NyksNCE9KDB8KG49bisxfDApKTspO2ZvcihuPTA7bD0wfGJyKG4sciksYz0wfG9yW2krKG48PDMpPj4xXSx1PSg3NCooYT0wfG9yW2krKG48PDMpKzI+PjFdKXwwKSsoMjkqY3wwKSsoODQqKG89MHxvcltpKyhuPDwzKSs0Pj4xXSl8MCkrKDU1Kih0PTB8b3JbaSsobjw8MykrNj4+MV0pfDApKzIwNDg+PjEyLHU9KDB8Y3JbKGU9QStsfDApPj4wXSkrKCgwfHUpPC0zMjc2OD8tMzI3Njg6KDB8dSk8MzI3Njc/dTozMjc2Nyl8MCx0cltlPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwyNTU/dToyNTUpLGU9KDB8YnIodCwtODQpKSsoKDB8YnIobywtMjkpKSsoKDc0KmF8MCkrKDU1KmN8MCkpKSsyMDQ4Pj4xMixlPSgwfGNyWyh1PUErKGwrMSl8MCk+PjBdKSsoKDB8ZSk8LTMyNzY4Py0zMjc2ODooMHxlKTwzMjc2Nz9lOjMyNzY3KXwwLHRyW3U+PjBdPSgwfGUpPDA/MDoyNTUmKCgwfGUpPDI1NT9lOjI1NSksdT0oNzQqdHwwKSsoKDB8YnIobywtNzQpKSsoNzQqY3wwKSkrMjA0OD4+MTIsdT0oMHxjclsoZT1BKyhsKzIpfDApPj4wXSkrKCgwfHUpPC0zMjc2OD8tMzI3Njg6KDB8dSk8MzI3Njc/dTozMjc2Nyl8MCx0cltlPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwyNTU/dToyNTUpLGM9KDB8YnIodCwtMjkpKSsoKDU1Km98MCkrKCgwfGJyKGEsLTc0KSkrKDg0KmN8MCkpKSsyMDQ4Pj4xMixjPSgwfGNyWyhsPUErKGwrMyl8MCk+PjBdKSsoKDB8Yyk8LTMyNzY4Py0zMjc2ODooMHxjKTwzMjc2Nz9jOjMyNzY3KXwwLHRyW2w+PjBdPSgwfGMpPDA/MDoyNTUmKCgwfGMpPDI1NT9jOjI1NSksNCE9KDB8KG49bisxfDApKTspO3VyPWZ9LGZ1bmN0aW9uKEEsZSxyKXtPbyhBfD0wLHJ8PTAsNCxlfD0wLDgpfSxmdW5jdGlvbihBLGUscil7T28oQXw9MCxyfD0wLDgsZXw9MCw4KX0sZnVuY3Rpb24oQSxlLHIpe09vKEF8PTAscnw9MCwxNixlfD0wLDgpfSxmdW5jdGlvbihBLGUscil7T28oQXw9MCxyfD0wLDMyLGV8PTAsOCl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTA7dmFyIGksZixuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wO2Zvcih1cj0odD11cikrMzJ8MCxuPXQsaT0ocnw9MCk8PDEsZj0zKnJ8MCxvPTA7YT0wfG9yW2UrKG88PDEpPj4xXSxzPSg1NSooYz0wfG9yW2UrKG8rcjw8MSk+PjFdKXwwKSsoMjkqYXwwKSsoNzQqKGw9MHxvcltlKyhpK288PDEpPj4xXSl8MCkrKDg0Kih1PTB8b3JbZSsoZitvPDwxKT4+MV0pfDApKzE+PjEsb3Jbbisobzw8MSk+PjFdPSgwfHMpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfHMpPDMyNzY3P3M6MzI3NjcpLGI9KHM9KDB8YnIodSwtNzQpKSsoNzQqKGMrYXwwKXwwKXwwKT4+MSxvcltuKyhvKzQ8PDEpPj4xXT0oMHxzKTwtNjU1MzY/LTMyNzY4OjY1NTM1JigoMHxiKTwzMjc2Nz9iOjMyNzY3KSxiPSg1NSp1fDApKygoMHxicihsLC03NCkpKygoMHxicihjLC0yOSkpKyg4NCphfDApKSkrMT4+MSxvcltuKyhvKzg8PDEpPj4xXT0oMHxiKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxiKTwzMjc2Nz9iOjMyNzY3KSxhPSgwfGJyKHUsLTI5KSkrKCg3NCpsfDApKygoMHxicihjLC04NCkpKyg1NSphfDApKSkrMT4+MSxvcltuKyhvKzEyPDwxKT4+MV09KDB8YSk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8YSk8MzI3Njc/YTozMjc2NyksNCE9KDB8KG89bysxfDApKTspO2ZvcihvPTA7Yj0wfG9yW24rKChzPW88PDIpPDwxKT4+MV0sdT0wfG9yW24rKCgxfHMpPDwxKT4+MV0sbD0wfG9yW24rKCgyfHMpPDwxKT4+MV0sYz0wfG9yW24rKCgzfHMpPDwxKT4+MV0sb3JbQSsoczw8MSk+PjFdPSgoNTUqdXwwKSsoMjkqYnwwKSsoNzQqbHwwKSsoODQqY3wwKSsxMjh8MCk+Pj44LGE9KCgwfGJyKGMsLTc0KSkrKDc0Kih1K2J8MCl8MCkrMTI4fDApPj4+OCY2NTUzNSxvcltBKygoMXxzKTw8MSk+PjFdPWEsYT0oKDU1KmN8MCkrKCgwfGJyKGwsLTc0KSkrKCgwfGJyKHUsLTI5KSkrKDg0KmJ8MCkpKSsxMjh8MCk+Pj44JjY1NTM1LG9yW0ErKCgyfHMpPDwxKT4+MV09YSxiPSgoMHxicihjLC0yOSkpKygoNzQqbHwwKSsoKDB8YnIodSwtODQpKSsoNTUqYnwwKSkpKzEyOHwwKT4+PjgmNjU1MzUsb3JbQSsoKDN8cyk8PDEpPj4xXT1iLDQhPSgwfChvPW8rMXwwKSk7KTt1cj10fSxmdW5jdGlvbihBLGUscil7am8oQXw9MCw0LGV8PTAscnw9MCl9LGZ1bmN0aW9uKEEsZSxyKXtqbyhBfD0wLDgsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2pvKEF8PTAsMTYsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe2pvKEF8PTAsMzIsZXw9MCxyfD0wKX0sZnVuY3Rpb24oQSxlLHIpe0F8PTAscnw9MDt2YXIgaSxmPTAsbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wO3VyPShpPXVyKSszMnwwLHc9aSxuPTB8b3JbKGV8PTApPj4xXSxvPTB8b3JbZSs0Pj4xXSxjPTB8b3JbZSsyPj4xXSxtPW8rbjw8MTY+PjE2LGE9KGY9MHxvcltlKzY+PjFdKStjPDwxNj4+MTYsb3Jbdz4+MV09YSttLG9yWyhzPXcrMnwwKT4+MV09bS1hLG89bi1vPDwxNj4+MTYsZj1jLWY8PDE2Pj4xNixvclsoYz13KzR8MCk+PjFdPWYrbyxvclsobj13KzZ8MCk+PjFdPW8tZixmPTB8b3JbZSsocjw8MSk+PjFdLG89MHxvcltlKyhyKzI8PDEpPj4xXSxhPTB8b3JbZSsocisxPDwxKT4+MV0sdD1vK2Y8PDE2Pj4xNixnPShtPTB8b3JbZSsociszPDwxKT4+MV0pK2E8PDE2Pj4xNixvclsoaD13Kzh8MCk+PjFdPWcrdCxvclsoYj13KzEwfDApPj4xXT10LWcsbz1mLW88PDE2Pj4xNixtPWEtbTw8MTY+PjE2LG9yWyhhPXcrMTJ8MCk+PjFdPW0rbyxvclsoZj13KzE0fDApPj4xXT1vLW0sbz0wfG9yW2UrKChtPXI8PDEpPDwxKT4+MV0sZz0wfG9yW2UrKG0rMjw8MSk+PjFdLHQ9MHxvcltlKygoMXxtKTw8MSk+PjFdLGQ9KGw9KG09MHxvcltlKyhtKzM8PDEpPj4xXSkrdDw8MTY+PjE2KSsodj1nK288PDE2Pj4xNil8MCxvclt3KzE2Pj4xXT1kLGw9di1sfDAsb3JbdysxOD4+MV09bCxnPW8tZzw8MTY+PjE2LG09dC1tPDwxNj4+MTYsb3JbKHQ9dysyMHwwKT4+MV09bStnLG9yWyhvPXcrMjJ8MCk+PjFdPWctbSxnPTB8b3JbZSsoKG09MypyfDApPDwxKT4+MV0sdj0wfG9yW2UrKG0rMjw8MSk+PjFdLHI9MHxvcltlKyhtKzE8PDEpPj4xXSxrPSh1PShtPTB8b3JbZSsobSszPDwxKT4+MV0pK3I8PDE2Pj4xNikrKGU9ditnPDwxNj4+MTYpfDAsb3JbdysyND4+MV09ayx1PWUtdXwwLG9yW3crMjY+PjFdPXUsZT0obT1yLW08PDE2Pj4xNikrKHY9Zy12PDwxNj4+MTYpfDAsb3JbdysyOD4+MV09ZSxvclsocj13KzMwfDApPj4xXT12LW0sbT0oZD1kPDwxNj4+MTYpKyh3PTB8b3Jbdz4+MV0pPDwxNj4+MTYsdj0oaz1rPDwxNj4+MTYpKyhoPTB8b3JbaD4+MV0pPDwxNj4+MTYsb3JbQT4+MV09dittLG9yW0ErOD4+MV09bS12LGQ9dy1kPDwxNj4+MTYsaz1oLWs8PDE2Pj4xNixvcltBKzE2Pj4xXT1rK2Qsb3JbQSsyND4+MV09ZC1rLGs9KGw9bDw8MTY+PjE2KSsocz0wfG9yW3M+PjFdKTw8MTY+PjE2LGQ9KHU9dTw8MTY+PjE2KSsoYj0wfG9yW2I+PjFdKTw8MTY+PjE2LG9yW0ErMj4+MV09ZCtrLG9yW0ErMTA+PjFdPWstZCxsPXMtbDw8MTY+PjE2LHU9Yi11PDwxNj4+MTYsb3JbQSsxOD4+MV09dStsLG9yW0ErMjY+PjFdPWwtdSxjPTB8b3JbYz4+MV0sdT0odD0wfG9yW3Q+PjFdKStjPDwxNj4+MTYsbD0oZT1lPDwxNj4+MTYpKyhhPTB8b3JbYT4+MV0pPDwxNj4+MTYsb3JbQSs0Pj4xXT1sK3Usb3JbQSsxMj4+MV09dS1sLHQ9Yy10PDwxNj4+MTYsZT1hLWU8PDE2Pj4xNixvcltBKzIwPj4xXT1lK3Qsb3JbQSsyOD4+MV09dC1lLG49MHxvcltuPj4xXSxlPTB8b3Jbbz4+MV0sZj0wfG9yW2Y+PjFdLG89ZStuPDwxNj4+MTYsdD0ocj0wfG9yW3I+PjFdKStmPDwxNj4+MTYsb3JbQSs2Pj4xXT10K28sb3JbQSsxND4+MV09by10LGU9bi1lPDwxNj4+MTYscj1mLXI8PDE2Pj4xNixvcltBKzIyPj4xXT1yK2Usb3JbQSszMD4+MV09ZS1yLHVyPWl9LGZ1bmN0aW9uKEEsZSxyKXtBfD0wLGV8PTAscnw9MDt2YXIgaSxmLG49MCx0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wO2Zvcih1cj0oZj11cikrMTI4fDAsaT1mLG49MDtvPTB8YnIobixyKSx3PTB8b3JbZSsobzw8MSk+PjFdLGw9MHxvcltlKyhvKzQ8PDEpPj4xXSxrPTB8b3JbZSsobysxPDwxKT4+MV0sYz0wfG9yW2UrKG8rNTw8MSk+PjFdLHQ9MHxvcltlKyhvKzI8PDEpPj4xXSxhPTB8b3JbZSsobys2PDwxKT4+MV0saD0wfG9yW2UrKG8rMzw8MSk+PjFdLGQ9bCt3PDwxNj4+MTYsdT1hK3Q8PDE2Pj4xNixzPWMrazw8MTY+PjE2LGI9KG89MHxvcltlKyhvKzc8PDEpPj4xXSkraDw8MTY+PjE2LGw9dy1sPDwxNj4+MTYsYT10LWE8PDE2Pj4xNixjPWstYzw8MTY+PjE2LG89aC1vPDwxNj4+MTYsaD11K2Q8PDE2Pj4xNixrPWIrczw8MTY+PjE2LG9yW2krKCh0PW48PDMpPDwxKT4+MV09aytoLG9yW2krKCgxfHQpPDwxKT4+MV09aC1rLHU9ZC11PDwxNj4+MTYsYj1zLWI8PDE2Pj4xNixvcltpKygoMnx0KTw8MSk+PjFdPWIrdSxvcltpKygoM3x0KTw8MSk+PjFdPXUtYixiPWErbDw8MTY+PjE2LHU9bytjPDwxNj4+MTYsb3JbaSsoKDR8dCk8PDEpPj4xXT11K2Isb3JbaSsoKDV8dCk8PDEpPj4xXT1iLXUsYT1sLWE8PDE2Pj4xNixvPWMtbzw8MTY+PjE2LG9yW2krKCg2fHQpPDwxKT4+MV09bythLG9yW2krKCg3fHQpPDwxKT4+MV09YS1vLDghPSgwfChuPW4rMXwwKSk7KTtmb3Iobj0wO3A9MHxvcltpKyhuPDwxKT4+MV0sYj0wfG9yW2krKChhPW4rMzJ8MCk8PDEpPj4xXSxtPTB8b3JbaSsoKHY9bis4fDApPDwxKT4+MV0scz0wfG9yW2krKCh1PW4rNDB8MCk8PDEpPj4xXSxaPTB8b3JbaSsoKHQ9bisxNnwwKTw8MSk+PjFdLGs9MHxvcltpKygoZD1uKzQ4fDApPDwxKT4+MV0sZz0wfG9yW2krKChjPW4rMjR8MCk8PDEpPj4xXSxlPWIrcDw8MTY+PjE2LG89aytaPDwxNj4+MTYscj1zK208PDE2Pj4xNixsPShoPTB8b3JbaSsoKHc9bis1NnwwKTw8MSk+PjFdKStnPDwxNj4+MTYsYj1wLWI8PDE2Pj4xNixrPVotazw8MTY+PjE2LHM9bS1zPDwxNj4+MTYsaD1nLWg8PDE2Pj4xNixnPW8rZTw8MTY+PjE2LG09bCtyPDwxNj4+MTYsb3JbQSsobjw8MSk+PjFdPW0rZyxvcltBKyh2PDwxKT4+MV09Zy1tLG89ZS1vPDwxNj4+MTYsbD1yLWw8PDE2Pj4xNixvcltBKyh0PDwxKT4+MV09bCtvLG9yW0ErKGM8PDEpPj4xXT1vLWwsYz1rK2I8PDE2Pj4xNixsPWgrczw8MTY+PjE2LG9yW0ErKGE8PDEpPj4xXT1sK2Msb3JbQSsodTw8MSk+PjFdPWMtbCxrPWItazw8MTY+PjE2LGg9cy1oPDwxNj4+MTYsb3JbQSsoZDw8MSk+PjFdPWgrayxvcltBKyh3PDwxKT4+MV09ay1oLDghPSgwfChuPW4rMXwwKSk7KTt1cj1mfSxmdW5jdGlvbihBLGUscil7SG8oQXw9MCwxNixlfD0wLHJ8PTApfSxmdW5jdGlvbihBLGUscil7SG8oQXw9MCwzMixlfD0wLHJ8PTApfSxRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYixRYl0sdHM9W0RiLGZ1bmN0aW9uKEEsZSxyLGkpe0F8PTAsaXw9MCxyPShyfD0wKSs4fDAsYXNbMTUmYXJbMTYrKDB8YXJbKGV8PTApPj4yXSk+PjJdXShBLGUsMHxhcltyPj4yXSwwfGFyW3IrND4+Ml0sMCxpKX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZj0wLG49MDtBOmRve2lmKDB8aSl7Zm9yKGY9MDs7KXtpZigoaS1mfDApPj4+MDw0KXtmPTQ7YnJlYWt9aWYobj0oMHxjcltyKyhmKzEpPj4wXSk8PDE2fCgwfGNyW3IrZj4+MF0pPDwyNHwoMHxjcltyKyhmKzIpPj4wXSk8PDh8MHxjcltyKyhmKzMpPj4wXSwoaS0oZj1mKzR8MCl8MCk+Pj4wPG4+Pj4wKXtmPTc7YnJlYWt9aWYoVmUoMHxhcltlPj4yXSxyK2Z8MCxuLDAsMCwwKSxpPj4+MDw9KGY9bitmfDApPj4+MClicmVhayBBfWlmKDQ9PSgwfGYpKXJldHVybiBhcltBPj4yXT1hclsxOTE5XSxhcltBKzQ+PjJdPWFyWzE5MjBdLHZvaWQoYXJbQSs4Pj4yXT1hclsxOTIxXSk7aWYoNz09KDB8ZikpcmV0dXJuIGFyW0E+PjJdPWFyWzE5MTldLGFyW0ErND4+Ml09YXJbMTkyMF0sdm9pZChhcltBKzg+PjJdPWFyWzE5MjFdKX19d2hpbGUoMCk7YXJbQT4+Ml09YXJbMTkwNF0sYXJbQSs0Pj4yXT1hclsxOTA1XSxhcltBKzg+PjJdPWFyWzE5MDZdfSxmdW5jdGlvbihBLGUscixpKXtpfD0wLGFyWyhpPUF8PTApPj4yXT0wLGFyW2krND4+Ml09MCxhclsoaT1BKzh8MCk+PjJdPS0xLGFyW2krND4+Ml09LTF9LGZ1bmN0aW9uKEEsZSxyLGkpe2l8PTAsYXJbKGk9QXw9MCk+PjJdPTAsYXJbaSs0Pj4yXT0wLGFyWyhpPUErOHwwKT4+Ml09LTEsYXJbaSs0Pj4yXT0tMX0sZnVuY3Rpb24oQSxlLHIsaSl7ZXw9MCxyfD0wLGl8PTA7dmFyIGYsbix0LG89MDtmb3IoZj11cj0odD11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbKEF8PTApPj4yXT0wLGFyW0ErND4+Ml09MCw0Mjk0OTY3Mjc5PChuPWktcnwoYXJbQSs4Pj4yXT0wKSk+Pj4wJiZwdSgpLG4+Pj4wPDExPyh0cltBKzExPj4wXT1uLG89QSk6KG89MHxodShlPTE2K24mLTE2KSxhcltBPj4yXT1vLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPW4pLGU9cixBPW87KDB8ZSkhPSgwfGkpOylRZihBLGUpLGU9ZSsxfDAsQT1BKzF8MDtRZihvK258KHRyW2Y+PjBdPTApLGYpLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGkpe2V8PTAscnw9MCxpfD0wO3ZhciBmLG4sdCxvPTAsYT0wO2Y9dXI9KHQ9dXIpKzMxJi0zMix1cj11cisxNnwwLGFyWyhBfD0wKT4+Ml09MCxhcltBKzQ+PjJdPTAsMTA3Mzc0MTgwNzwobj1pLXI+PjIpPj4+KGFyW0ErOD4+Ml09MCkmJnB1KCk7ZG97aWYoMjw9bj4+PjApe2lmKCEoMTA3Mzc0MTgyMzwoZT00K24mLTQpPj4+MCkpe2E9MHxodShlPDwyKSxhcltBPj4yXT1hLGFyW0ErOD4+Ml09LTIxNDc0ODM2NDh8ZSxhcltBKzQ+PjJdPW4sbz1yO2JyZWFrfWxBKCl9ZWxzZSB0cltBKzgrMz4+MF09bixvPXIsYT1BfXdoaWxlKDApO2Zvcig7KDB8bykhPSgwfGkpOylsbihhLG8pLG89bys0fDAsYT1hKzR8MDthcltmPj4yXT0wLGxuKGEsZiksdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSl7cnw9MCxpfD0wLDB8eHUoQXw9MCwwfGFyWyhlfD0wKSs4Pj4yXSkmJlB1KDAsZSxyLGkpfSxmdW5jdGlvbihBLGUscixpKXtyfD0wLGl8PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKT9QdSgwLGUscixpKTooQT0wfGFyW0ErOD4+Ml0sdHNbMzEmYXJbMjgrKDB8YXJbQT4+Ml0pPj4yXV0oQSxlLHIsaSkpfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAscnw9MCxpfD0wO3ZhciBmPTAsbj0wO0E6ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpUHUoMCxlLHIsaSk7ZWxzZSBpZihmPUErMTYrKChuPTB8YXJbQSsxMj4+Ml0pPDwzKXwwLEFiKEErMTZ8MCxlLHIsaSksMTwoMHxuKSl7bj1lKzU0fDAsQT1BKzI0fDA7ZG97aWYoQWIoQSxlLHIsaSksMHx0cltuPj4wXSlicmVhayBBO0E9QSs4fDB9d2hpbGUoQT4+PjA8Zj4+PjApfX13aGlsZSgwKX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTAsaXw9MDt2YXIgZixuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1cj0odT11cikrNjR8MCxsPShvPXUpKzU2fDAsYz11KzUyfDAscz11KzQwfDAsYT11KzM2fDAsdj11KzI0fDAsbj11KzIwfDAsZj11KzE2fDAsdD11KzEyfDAsYj0wfG9BKCksYXJbbD4+Ml09YiwhZSlyZXR1cm4gYXJbQT4+Ml09YixhcltsPj4yXT0wLGlBKCh2PTApfHYpLHZvaWQodXI9dSk7aWYoIWZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdCxvLGEsYzt1cj0oYz11cikrMzJ8MCxhclsodD0obz1jKSsyNHwwKT4+Ml09MCxhclsoYT00K3R8MCk+PjJdPTAsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxufD0wLHR8PTA7dmFyIG8sYSxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDt1cj0oYT11cikrNDh8MCxiPShvPWEpKzQwfDAsdT1hKzMyfDAsZD1hKzIwfDAsWGwobyxlfD0wLHJ8PTAsaXw9MCxmfD0wLDApO2Rve2lmKDB8YXJbbz4+Ml0paT0wfGFyWyhzPW8pKzQ+PjJdLGFyWyhkPUEpPj4yXT1hcltzPj4yXSxhcltkKzQ+PjJdPWksaT1vKzh8MCxhclsoZD1BKzh8MCk+PjJdPWFyW2k+PjJdLGFyW2QrND4+Ml09YXJbaSs0Pj4yXSxhcltkKzg+PjJdPWFyW2krOD4+Ml0sYXJbaT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wO2Vsc2V7aWYoOTk9PSgwfGYpJiYoZj0wfGFyWzMyKygwfGFyW2k+PjJdKT4+Ml0pLGM9MHxhcltpPj4yXSxsPTB8YXJbYyszNj4+Ml0scj05OT09KDB8bik/bDpuLGU9dCYmMHx0clt0KzIwPj4wXT84OjAsISgoMHxyKT09KDB8bCkmJigwfGYpPT0oMHxhcltjKzMyPj4yXSl8fChhclt1Pj4yXT0wLGFyWyhjPXUrNHwwKT4+Ml09MCxtZShiLGksZixyLHUsZSksZT0wfGFyW2I+PjJdLHU9MHxhclsocj1iKzR8MCk+PjJdLGFyW2I+PjJdPTAsYXJbcj4+Ml09MCxhcltpPj4yXT1lLGU9MHxhclsoYj1pKzR8MCk+PjJdLGFyW2I+PjJdPXUsMHxlJiYoZHUoZSksMHwocz0wfGFyW3I+PjJdKSkmJmR1KHMpLDB8KGU9MHxhcltjPj4yXSkmJmR1KGUpLDB8YXJbaT4+Ml0pKSl7aWYoYXJbZD4+Ml09MCxhcltkKzQ+PjJdPTAsYXJbZCs4Pj4yXT0wLG9vKEEsNCwzMDAzLGQpLDA8PSgwfHRyW2QrMTE+PjBdKSlicmVhazt2dSgwfGFyW2Q+PjJdKTticmVha31kPTB8YXJbKHM9NTY1OTIpKzQ+PjJdLGFyWyhpPUEpPj4yXT1hcltzPj4yXSxhcltpKzQ+PjJdPWQseXUoQSs4fDAsNTY2MDApfX13aGlsZSgwKTtpZigwPD0oMHx0clsxMSsoZT1vKzh8MCk+PjBdKSlyZXR1cm4gdXI9YTt2dSgwfGFyW2U+PjJdKSx1cj1hfShvLDB8YXJbZSs4Pj4yXSwwfGFyWzIwKygwfGFyW2U+PjJdKT4+Ml0sdCxpLGYsbiksMHxhcltvPj4yXT9hbyhBLG8sMHxhcltlPj4yXSk6KG49MHxodSg4KSxhcltyPj4yXT1uLGk9MHxhclt0Pj4yXSxmPTB8YXJbYT4+Ml0sYXJbdD4+Ml09MCxhclthPj4yXT0wLGFyW24+PjJdPWksYXJbbis0Pj4yXT1mLGFvKEEsNTY1OTIsMHxhcltlPj4yXSkpOygwfHRyWzExKyhBPW8rOHwwKT4+MF0pPDAmJnZ1KDB8YXJbQT4+Ml0pOyhBPTB8YXJbYT4+Ml0pJiZkdShBKSx1cj1jfShzLGUsYyxyLGksMCksMHxhcltzPj4yXSl2PTB8aHUoMTIpLGFyW3Y+PjJdPWFyW3M+PjJdLGFyW3YrND4+Ml09YXJbcys0Pj4yXSxhclt2Kzg+PjJdPWFyW3MrOD4+Ml0sYXJbbz4+Ml09dix2PTB8Y0EoMTM5MiwwfG8pLGFyW0E+PjJdPXY7ZWxzZXtpZihhcltvPj4yXT1jcls0MCsoMHxhcltlPj4yXSk+PjBdLGJsKGwsMjk2MzYsbyksc2wobyw0OCsoMHxhcltlPj4yXSl8MCkscz0oYj0wfGFyWyhpPW8rNHwwKT4+Ml0pLShlPTB8YXJbbz4+Ml0pPj4zLDB8KHI9ZSkpe2lmKCgwfGIpIT0oMHxyKSl7Zm9yKDtlPWIrLTh8MCxhcltpPj4yXT1lLChiPTB8YXJbYistND4+Ml0pJiYoZHUoYiksZT0wfGFyW2k+PjJdKSwoMHxlKSE9KDB8cik7KWI9ZTtlPTB8YXJbbz4+Ml19dnUoZSl9c3dpdGNoKGFyW2E+PjJdPXMsYmwobCwyOTY0NyxhKSxiPTB8YXJbYz4+Ml0sZT0wfFhvKDB8YXJbYj4+Ml0sMCksYXJbbz4+Ml09ZSxmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wO3ZhciBpLGY7dXI9KGk9dXIpKzE2fDAsZj1pLEE9MHxhclsoQT1BfDApPj4yXSxlPTB8dEEoMHxlKSxhcltmPj4yXT1hcltyPj4yXSxyPTB8Y0EoNDE0NCwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX0obCwyOTY1OCxvKSxlPTB8V28oMHxhcltiPj4yXSwwKSxhclthPj4yXT1lLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBPUF8MCk+PjJdLGU9MHx0QSgwfGUpLGFyW2Y+PjJdPWFyW3I+PjJdLHI9MHxjQSg0MTQ0LDB8ZiksYUEoMHxBLDB8ZSwwfHIpLGlBKDB8ciksaUEoMHxlKSx1cj1pfShsLDI5NjY0LGEpLGFyW3Y+PjJdPTAsYXJbdis0Pj4yXT0wLGFyW3YrOD4+Ml09MCxhcltuPj4yXT1hclszNisoMHxhcltiPj4yXSk+PjJdLGZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZjt1cj0oaT11cikrMTZ8MCxmPWksQT0wfGFyWyhBPUF8MCk+PjJdLGU9MHx0QSgwfGUpLGFyW2Y+PjJdPWFyW3I+PjJdLHI9MHxjQSgxMjQ4LDB8ZiksYUEoMHxBLDB8ZSwwfHIpLGlBKDB8ciksaUEoMHxlKSx1cj1pfShsLDI5NjcxLG4pLGFyW24+PjJdPWFyWzMyKygwfGFyW2I+PjJdKT4+Ml0sZnVuY3Rpb24oQSxlLHIpe2V8PTAscnw9MDt2YXIgaSxmO3VyPShpPXVyKSsxNnwwLGY9aSxBPTB8YXJbKEE9QXwwKT4+Ml0sZT0wfHRBKDB8ZSksYXJbZj4+Ml09YXJbcj4+Ml0scj0wfGNBKDEyNTYsMHxmKSxhQSgwfEEsMHxlLDB8ciksaUEoMHxyKSxpQSgwfGUpLHVyPWl9KGwsMjk2NzgsbiksZT0wfGFyW2I+PjJdLDB8YXJbZSszMj4+Ml0pe2Nhc2UgMDppZihyPWU/MHxGbyhlLDAsbik6YXJbbj4+Ml09MCxoPShlPTB8YXJbYj4+Ml0pPzB8Rm8oZSwxLGYpOmFyW2Y+PjJdPTAsZT0oZT0wfGFyW2I+PjJdKT8wfEZvKGUsMix0KTphclt0Pj4yXT0wLHc9MHxhcltvPj4yXSxkPTB8YXJbYT4+Ml0sVnUodiwoMHxicih+figuNSooMHx3KSsuNSk8PDEsfn4oLjUqKDB8ZCkrLjUpKSkrKDB8YnIoZCx3KSl8MCwwKSx3PSgwfHRyW3YrMTE+PjBdKTwwPzB8YXJbdj4+Ml06dixkPTB8YXJbbz4+Ml0saz0wfGFyW2E+PjJdLCgwfGQpIT0oMHwocz0wfGFyW24+PjJdKSkpe2lmKDA8KDB8aykpZm9yKGk9dyxiPXIscj0wO2hiKDB8aSwwfGIsMHxzKSwoMHwocj1yKzF8MCkpIT0oMHxrKTspaT1pK2R8MCxiPWIrc3wwfWVsc2UgaGIoMHx3LDB8ciwwfGJyKGssZCkpO2lmKGQ9MHxhcltvPj4yXSxrPTB8YXJbYT4+Ml0sYj13KygwfGJyKGssZCkpfDAsaz1+figuNSooMHxrKSsuNSksKDB8KGQ9fn4oLjUqKDB8ZCkrLjUpKSkhPSgwfChzPTB8YXJbZj4+Ml0pKSl7aWYoMDwoMHxrKSlmb3IoaT1iLGI9aCxyPTA7aGIoMHxpLDB8YiwwfHMpLCgwfChyPXIrMXwwKSkhPSgwfGspOylpPWkrZHwwLGI9YitzfDB9ZWxzZSBoYigwfGIsMHxoLDB8YnIoayxkKSk7aWYocj0wfGFyW28+PjJdLGk9MHxhclthPj4yXSxiPTB8YnIoZD1+figuNSooMHxpKSsuNSkscz1+figuNSooMHxyKSsuNSkpLHI9dysoMHxicihpLHIpKStifDAsKDB8cykhPSgwfChpPTB8YXJbdD4+Ml0pKSl7aWYoMDwoMHxkKSlmb3IoYj0wO2hiKDB8ciwwfGUsMHxpKSwoMHwoYj1iKzF8MCkpIT0oMHxkKTspcj1yK3N8MCxlPWUraXwwfWVsc2UgaGIoMHxyLDB8ZSwwfGIpO2JyZWFrO2Nhc2UgMTppZigxMCE9KDB8YXJbZSszNj4+Ml0pJiZzcigyOTY4OSwyOTc1OCwxNDAsMjY0MjYpLGU9MHxGbyhlLDEwLG4pLFZ1KHYsMHxicigzKigwfGFyW28+PjJdKXwwLDB8YXJbYT4+Ml0pLDApLHI9KDB8dHJbdisxMT4+MF0pPDA/MHxhclt2Pj4yXTp2LGQ9MyooMHxhcltvPj4yXSl8MCxzPTB8YXJbYT4+Ml0sKDB8ZCkhPSgwfChpPTB8YXJbbj4+Ml0pKSl7aWYoMDwoMHxzKSlmb3IoYj0wO2hiKDB8ciwwfGUsMHxpKSwoMHwoYj1iKzF8MCkpIT0oMHxzKTspcj1yK2R8MCxlPWUraXwwfWVsc2UgaGIoMHxyLDB8ZSwwfGJyKHMsZCkpO2JyZWFrO2Nhc2UgMjppZigwfGFyW2UrMzY+PjJdJiZzcigyOTc3OCwyOTc1OCwxNTEsMjY0MjYpLGU9MHxGbyhlLDAsbiksVnUodiwwfGJyKDB8YXJbYT4+Ml0sMHxhcltvPj4yXSksMCkscj0oMHx0clt2KzExPj4wXSk8MD8wfGFyW3Y+PjJdOnYsZD0wfGFyW28+PjJdLHM9MHxhclthPj4yXSwoMHxkKSE9KDB8KGk9MHxhcltuPj4yXSkpKXtpZigwPCgwfHMpKWZvcihiPTA7aGIoMHxyLDB8ZSwwfGkpLCgwfChiPWIrMXwwKSkhPSgwfHMpOylyPXIrZHwwLGU9ZStpfDB9ZWxzZSBoYigwfHIsMHxlLDB8YnIocyxkKSl9IWZ1bmN0aW9uKEEsZSxyKXtlfD0wLHJ8PTA7dmFyIGksZixuLHQsbz0wO3VyPShpPXVyKSsxNnwwLGY9aSxBPTB8YXJbKEE9QXwwKT4+Ml0sZT0wfHRBKDB8ZSksbz0wfHRyW3IrMTE+PjBdLG89KHQ9bzw8MjQ+PjI0PDApPzB8YXJbcis0Pj4yXToyNTUmbyxuPTB8eWMobys0fDApLGFyW24+PjJdPW8saGIoNCtufDAsMHwodD8wfGFyW3I+PjJdOnIpLDB8byksYXJbZj4+Ml09bixyPTB8Y0EoMTQwOCwwfGYpLGFBKDB8QSwwfGUsMHxyKSxpQSgwfHIpLGlBKDB8ZSksdXI9aX0obCwyOTg0MCx2KSwwfChlPTB8YXJbYz4+Ml0pJiYoMHwoYj0wfGFyW2UrND4+Ml0pJiZkdShiKSx2dShlKSksYXJbQT4+Ml09YXJbbD4+Ml0sKChhcltsPj4yXT0wKXx0clt2KzExPj4wXSk8MCYmdnUoMHxhclt2Pj4yXSl9dj0wfGFyW2w+PjJdLGlBKDB8diksdXI9dX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLGl8PTA7dmFyIGYsbix0PTAsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYoZj0ocnw9MCkrNXwwLG49MTw8ciwzMSE9KDB8cikpe2E9MDtkb3tmb3IoYz1hPDxyLGw9MHxicihhLGkpLG89dD0wO2I9KG89KDIwNDgrKG9yW2UrKHQrYzw8MSk+PjFdPDxmKT4+MTIpK298MCkrKDB8Y3JbKHU9QSsodCtsKXwwKT4+MF0pfDAsdHJbdT4+MF09KDB8Yik8MD8wOjI1NSYoKDB8Yik8MjU1P2I6MjU1KSwoMHwodD10KzF8MCkpPCgwfG4pOyk7YT1hKzF8MH13aGlsZSgoMHxhKTwoMHxuKSl9fSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTAsaXw9MDt2YXIgZixuLHQ9MCxvPTAsYT0wLGM9MCxsPTA7aWYoZj0ocnw9MCkrNXwwLG49MTw8ciwzMSE9KDB8cikpe2E9MDtkb3tmb3Iobz10PTA7bz0oMjA0OCsob3JbZSsoKHQ8PHIpK2E8PDEpPj4xXTw8Zik+PjEyKStvfDAsYz1BKygoMHxicih0LGkpKSthKXwwLGw9bysoMHxjcltjPj4wXSl8MCx0cltjPj4wXT0oMHxsKTwwPzA6MjU1JigoMHxsKTwyNTU/bDoyNTUpLCgwfCh0PXQrMXwwKSk8KDB8bik7KTthPWErMXwwfXdoaWxlKCgwfGEpPCgwfG4pKX19LGZ1bmN0aW9uKEEsZSxyLGkpe3NyKDQ0NDU2LDM1MTM3LDY4LDM1MTc5KX0sZnVuY3Rpb24oQSxlLHIsaSl7QXw9MCxlfD0wLHJ8PTA7dmFyIGYsbix0LG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wO2Zvcih1cj0odD11cikrMzJ8MCxmPXQsYT0obj0yMC0oaXw9MCl8MCktMXwwLG89MDtjPTB8b3JbZSsobzw8MSk+PjFdLHM9KDc0KihsPTB8b3JbZSsobys0PDwxKT4+MV0pfDApKygyOSpjfDApKyg4NCoodT0wfG9yW2UrKG8rODw8MSk+PjFdKXwwKSsoNTUqKGI9MHxvcltlKyhvKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW2YrKG88PDEpPj4xXT0oMHxzKTwtMzI3Njg/LTMyNzY4OjY1NTM1JigoMHxzKTwzMjc2Nz9zOjMyNzY3KSxzPSgwfGJyKGIsLTg0KSkrKCgwfGJyKHUsLTI5KSkrKCg3NCpsfDApKyg1NSpjfDApKSkrNjQ+Pjcsb3JbZis4KyhvPDwxKT4+MV09KDB8cyk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8cyk8MzI3Njc/czozMjc2Nykscz0oNzQqYnwwKSsoKDB8YnIodSwtNzQpKSsoNzQqY3wwKSkrNjQ+Pjcsb3JbZisxNisobzw8MSk+PjFdPSgwfHMpPC0zMjc2OD8tMzI3Njg6NjU1MzUmKCgwfHMpPDMyNzY3P3M6MzI3NjcpLGM9KDB8YnIoYiwtMjkpKSsoKDU1KnV8MCkrKCgwfGJyKGwsLTc0KSkrKDg0KmN8MCkpKSs2ND4+NyxvcltmKzI0KyhvPDwxKT4+MV09KDB8Yyk8LTMyNzY4Py0zMjc2ODo2NTUzNSYoKDB8Yyk8MzI3Njc/YzozMjc2NyksNCE9KDB8KG89bysxfDApKTspO2ZvcihjPTE8PGEsYT0oZT0xPDxpKSs2NTUzNXwwLG89MDtzPTB8YnIobyxyKSxiPTB8b3JbZisobzw8Myk+PjFdLGs9KDc0Kih1PTB8b3JbZisobzw8MykrMj4+MV0pfDApKygyOSpifDApKyg4NCoobD0wfG9yW2YrKG88PDMpKzQ+PjFdKXwwKSsoNTUqKGk9MHxvcltmKyhvPDwzKSs2Pj4xXSl8MCkrYz4+bixrPSgwfGxyWyhkPUErKHM8PDEpfDApPj4xXSkrKCgwfGspPC0zMjc2OD8tMzI3Njg6KDB8ayk8MzI3Njc/azozMjc2Nyl8MCxvcltkPj4xXT0oMHxrKTwwPzA6NjU1MzUmKCgwfGspPCgwfGUpP2s6YSksZD0oMHxicihpLC04NCkpKygoMHxicihsLC0yOSkpKygoNzQqdXwwKSsoNTUqYnwwKSkpK2M+Pm4sZD0oMHxsclsoaz1BKyhzKzE8PDEpfDApPj4xXSkrKCgwfGQpPC0zMjc2OD8tMzI3Njg6KDB8ZCk8MzI3Njc/ZDozMjc2Nyl8MCxvcltrPj4xXT0oMHxkKTwwPzA6NjU1MzUmKCgwfGQpPCgwfGUpP2Q6YSksaz0oNzQqaXwwKSsoKDB8YnIobCwtNzQpKSsoNzQqYnwwKSkrYz4+bixrPSgwfGxyWyhkPUErKHMrMjw8MSl8MCk+PjFdKSsoKDB8ayk8LTMyNzY4Py0zMjc2ODooMHxrKTwzMjc2Nz9rOjMyNzY3KXwwLG9yW2Q+PjFdPSgwfGspPDA/MDo2NTUzNSYoKDB8ayk8KDB8ZSk/azphKSxiPSgwfGJyKGksLTI5KSkrKCg1NSpsfDApKygoMHxicih1LC03NCkpKyg4NCpifDApKSkrYz4+bixiPSgwfGxyWyhzPUErKHMrMzw8MSl8MCk+PjFdKSsoKDB8Yik8LTMyNzY4Py0zMjc2ODooMHxiKTwzMjc2Nz9iOjMyNzY3KXwwLG9yW3M+PjFdPSgwfGIpPDA/MDo2NTUzNSYoKDB8Yik8KDB8ZSk/YjphKSw0IT0oMHwobz1vKzF8MCkpOyk7dXI9dH0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDQsZXw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDgsZXw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7em8oQXw9MCxyfD0wLDE2LGV8PTAsaXw9MCl9LGZ1bmN0aW9uKEEsZSxyLGkpe3pvKEF8PTAscnw9MCwzMixlfD0wLGl8PTApfSxmdW5jdGlvbihBLGUscixpKXtBfD0wLGV8PTA7dmFyIGYsbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wO2Zvcih1cj0obz11cikrMzJ8MCx0PW8sYz0ocnw9MCkrLTF8MCxmPShhPTE8PChpfD0wKSkrNjU1MzV8MCxuPTAtYXwwLGk9MDtsPTB8b3JbZSsoaTw8MSk+PjFdLGQ9KDc0Kih1PTB8b3JbZSsoaSs0PDwxKT4+MV0pfDApKygyOSpsfDApKyg4NCooYj0wfG9yW2UrKGkrODw8MSk+PjFdKXwwKSsoNTUqKHM9MHxvcltlKyhpKzEyPDwxKT4+MV0pfDApKzY0Pj43LG9yW3QrKGk8PDEpPj4xXT0oMHxkKTwoMHxuKT9uOigwfGQpPCgwfGEpP2Q6ZixkPSgwfGJyKHMsLTg0KSkrKCgwfGJyKGIsLTI5KSkrKCg3NCp1fDApKyg1NSpsfDApKSkrNjQ+Pjcsb3JbdCs4KyhpPDwxKT4+MV09KDB8ZCk8KDB8bik/bjooMHxkKTwoMHxhKT9kOmYsZD0oNzQqc3wwKSsoKDB8YnIoYiwtNzQpKSsoNzQqbHwwKSkrNjQ+Pjcsb3JbdCsxNisoaTw8MSk+PjFdPSgwfGQpPCgwfG4pP246KDB8ZCk8KDB8YSk/ZDpmLGw9KDB8YnIocywtMjkpKSsoKDU1KmJ8MCkrKCgwfGJyKHUsLTc0KSkrKDg0Kmx8MCkpKSs2ND4+Nyxvclt0KzI0KyhpPDwxKT4+MV09KDB8bCk8KDB8bik/bjooMHxsKTwoMHxhKT9sOmYsNCE9KDB8KGk9aSsxfDApKTspO2ZvcihhPTE8PGMsaT0wO2Q9aTw8MixzPTB8b3JbdCsoaTw8Myk+PjFdLGM9NzQqKGI9MHxvclt0KyhpPDwzKSsyPj4xXSl8MCx1PTB8b3JbdCsoaTw8MykrND4+MV0sbD0wfG9yW3QrKGk8PDMpKzY+PjFdLGFyW0ErKGQ8PDIpPj4yXT0oNTUqbHwwKSsoKDg0KnV8MCkrKGMrKDI5KnN8MCkpKSthPj5yLGM9KDB8YnIobCwtODQpKSsoKDB8YnIodSwtMjkpKSsoYysoNTUqc3wwKSkpK2E+PnIsYXJbQSsoKDF8ZCk8PDIpPj4yXT1jLGM9KDc0Kmx8MCkrKCgwfGJyKHUsLTc0KSkrKDc0KnN8MCkpK2E+PnIsYXJbQSsoKDJ8ZCk8PDIpPj4yXT1jLHM9KDB8YnIobCwtMjkpKSsoKDU1KnV8MCkrKCgwfGJyKGIsLTc0KSkrKDg0KnN8MCkpKSthPj5yLGFyW0ErKCgzfGQpPDwyKT4+Ml09cyw0IT0oMHwoaT1pKzF8MCkpOyk7dXI9b30sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCw0LGV8PTAscnw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCw4LGV8PTAscnw9MCxpfD0wKX0sZnVuY3Rpb24oQSxlLHIsaSl7U28oQXw9MCwxNixlfD0wLHJ8PTAsaXw9MCl9LGZ1bmN0aW9uKEEsZSxyLGkpe1NvKEF8PTAsMzIsZXw9MCxyfD0wLGl8PTApfSxEYixEYixEYixEYixEYixEYixEYixEYl0sb3M9W0piLGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYT0wLGM9MCxsPTAsdT0wLGI9MDtpZih1cj0obz11cikrNjR8MCx0PW8rMzZ8MCxuPW8rNDh8MCx1PW8sMT09KDB8YXJbKHJ8PTApPj4yXSkmJjM9PSgwfGFyW3IrND4+Ml0pJiY4PT0oMHxhcltyKzEyPj4yXSkpcmV0dXJuIGFyW3Q+PjJdPTAsYXJbKGI9NCt0fDApPj4yXT0wLGE9KGFyWzgrdD4+Ml09MCk9PSgwfHRyWyhmPXIrOHwwKT4+MF0pJiYwPT0oMHx0cltpKzg+PjBdKT8uMjU6MCxhclt1Pj4yXT0xLGFyW3UrND4+Ml09MTEsdHJbdSs4Pj4wXT0xLHRyWyhlPXUrOXwwKT4+MF09MHx0cltuPj4wXSx0cltlKzE+PjBdPTB8dHJbMStuPj4wXSx0cltlKzI+PjBdPTB8dHJbMituPj4wXSxhclt1KzEyPj4yXT04LGFyW3UrMTY+PjJdPTAsYXJbKGU9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbdSsyOD4+Ml09MCxnQVt1KzMyPj4yXT1hLGw9OCt0fDAsTmwodCx1KSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSwwIT0oMHx0cltmPj4wXSkmJjAhPSgwfHRyW2krOD4+MF0pP2M9LjEwMDAwMDAwMTQ5MDExNjEyOihjPS4yMDAwMDAwMDI5ODAyMzIyNCxhPTApLGFyW3U+PjJdPTEsYXJbdSs0Pj4yXT0xMCx0clt1Kzg+PjBdPTAsdHJbKGY9dSs5fDApPj4wXT0wfHRyW24+PjBdLHRyW2YrMT4+MF09MHx0clsxK24+PjBdLHRyW2YrMj4+MF09MHx0clsyK24+PjBdLGFyW3UrMTI+PjJdPTgsYXJbKGY9dSsxNnwwKT4+Ml09MCxhclsocj11KzIwfDApPj4yXT0wLGdBW3UrMjQ+PjJdPWMsZ0FbdSsyOD4+Ml09MCxnQVt1KzMyPj4yXT1hLChlPTB8YXJbYj4+Ml0pPj4+MD49KDB8YXJbbD4+Ml0pPj4+MD8oTmwodCx1KSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSk6KGFyW2U+PjJdPWFyW3U+PjJdLGFyW2UrND4+Ml09YXJbdSs0Pj4yXSxhcltlKzg+PjJdPWFyW3UrOD4+Ml0sYXJbZSsxMj4+Ml09YXJbdSsxMj4+Ml0sYXJbZSsxNj4+Ml09YXJbZj4+Ml0sYXJbZSsyMD4+Ml09YXJbcj4+Ml0sYXJbZj4+Ml09MCx1PXUrMjR8KGFyW3I+PjJdPTApLGFyWyhpPWUrMjR8MCk+PjJdPWFyW3U+PjJdLGFyW2krND4+Ml09YXJbdSs0Pj4yXSxhcltpKzg+PjJdPWFyW3UrOD4+Ml0sYXJbYj4+Ml09ZSszNiksYXJbQT4+Ml09YXJbdD4+Ml0sYXJbQSs0Pj4yXT1hcltiPj4yXSxhcltBKzg+PjJdPWFyW2w+PjJdLHZvaWQodXI9byk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wO2lmKHVyPShiPXVyKSszMnwwLG89YisxNnwwLGE9YisxMnwwLGM9Yis4fDAsbD1iKzR8MCx1PWIsdD0wfEVvKDB8YXJbKHJ8PTApPj4yXSw2KSxuPTAhPSgwfHRyW2krOD4+MF0pLCgwfFZvKDB8YXJbcj4+Ml0sMykpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNCkpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNSkpPDwyND4+MjQ9PTgpe2lmKHQmJigwfFZvKDB8YXJbcj4+Ml0sNikpPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9Yik7Zj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKGk9ZisxMnwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksWj1mKzUyfDAsYXJbKGc9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW1o+PjJdPTAsYXJbWis0Pj4yXT0wLGFyW1orOD4+Ml09MCxhcltaKzEyPj4yXT0wLGFyW2YrNjg+PjJdPWcsZz1pLG09KFo9ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbbT4+Ml0sYXJbaT4+Ml09ZyxhclttPj4yXT1aLDB8ZSYma3UoZSksZHUoZiksaD0wfGFyW3I+PjJdLHlvKGksaz0wfGFyW2grMjQ+PjJdLGg9MHxhcltoKzI4Pj4yXSwxLG4/MTE6MTApLEJvKGksMTAsayxoLDgpLGFyW28+PjJdPTAsYXJbYT4+Ml09MCxhcltjPj4yXT0wLGFyW2w+PjJdPTAsdz0oYXJbdT4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLG8pLHY9MHxSbygwfGFyW3I+PjJdLDQsYSksbT0wfFJvKDB8YXJbcj4+Ml0sNSxjKSxkPTB8Rm8oaSwxMCx1KSxmPXQ/MHxSbygwfGFyW3I+PjJdLDYsbCk6MDtBOmRve2lmKDA8KDB8aCkpe3M9dCZuLHI9MDwoMHxrKSxpPTA7ZTpmb3IoOzspe3I6ZG97aWYocyl7aWYocilmb3IoZT0wO0I9dysoKDB8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxwPWU8PDIseT1kKygoMHxicigwfGFyW3U+PjJdLGkpKStwKXwwLHRyW3k+PjBdPTB8dHJbQj4+MF0seT12KygoMHxicigwfGFyW2E+PjJdLGkpKStlKXwwLEI9ZCsoKDF8cCkrKDB8YnIoMHxhclt1Pj4yXSxpKSkpfDAsdHJbQj4+MF09MHx0clt5Pj4wXSxCPW0rKCgwfGJyKDB8YXJbYz4+Ml0saSkpK2UpfDAseT1kKygoMnxwKSsoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0clt5Pj4wXT0wfHRyW0I+PjBdLHk9ZisoKDB8YnIoMHxhcltsPj4yXSxpKSkrZSl8MCxwPWQrKCgzfHApKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbeT4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8ayk7KTt9ZWxzZXtpZighbil7aWYoIXIpYnJlYWs7Zm9yKGU9MDs7KWlmKHk9dysoKDB8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxCPTMqZXwwLHA9ZCsoKDB8YnIoMHxhclt1Pj4yXSxpKSkrQil8MCx0cltwPj4wXT0wfHRyW3k+PjBdLHA9disoKDB8YnIoMHxhclthPj4yXSxpKSkrZSl8MCx5PWQrKEIrMSsoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0clt5Pj4wXT0wfHRyW3A+PjBdLHk9bSsoKDB8YnIoMHxhcltjPj4yXSxpKSkrZSl8MCxCPWQrKEIrMisoMHxicigwfGFyW3U+PjJdLGkpKSl8MCx0cltCPj4wXT0wfHRyW3k+PjBdLCgwfChlPWUrMXwwKSk9PSgwfGspKWJyZWFrIHJ9aWYodClicmVhayBlO2lmKHIpZm9yKGU9MDtwPXcrKCgwfGJyKDB8YXJbbz4+Ml0saSkpK2UpfDAsQj1lPDwyLHk9ZCsoKDB8YnIoMHxhclt1Pj4yXSxpKSkrQil8MCx0clt5Pj4wXT0wfHRyW3A+PjBdLHk9disoKDB8YnIoMHxhclthPj4yXSxpKSkrZSl8MCxwPWQrKCgxfEIpKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbeT4+MF0scD1tKygoMHxicigwfGFyW2M+PjJdLGkpKStlKXwwLHk9ZCsoKDJ8QikrKDB8YnIoMHxhclt1Pj4yXSxpKSkpfDAsdHJbeT4+MF09MHx0cltwPj4wXSxCPWQrKCgzfEIpKygwfGJyKDB8YXJbdT4+Ml0saSkpKXwwLHRyW0I+PjBdPS0xLCgwfChlPWUrMXwwKSkhPSgwfGspOyk7fX13aGlsZSgwKTtpZigoMHxoKTw9KDB8KGk9aSsxfDApKSlicmVhayBBfXNyKDMyMjIzLDMyMjQ4LDI4MSwzMjI3Mil9fXdoaWxlKDApO3JldHVybiBhcltBPj4yXT1nLGFyW0ErND4+Ml09Wix2b2lkKHVyPWIpfWFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHVyPWJ9LGZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG4sdDtpZihBfD0wLGV8PTAsaXw9MCxmfD0wLHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGY9dCwwPT0oMHxhclsocnw9MCk+PjJdKSYmMT09KDB8YXJbcis0Pj4yXSkmJjg9PSgwfGFyW3IrMTI+PjJdKSYmMD09KDB8dHJbcis4Pj4wXSkpe2lmKDB8KGU9MHxhcltyKzE2Pj4yXSkpe3N3aXRjaCgwfG9yW2UrOD4+MV0pe2Nhc2UgMDpjYXNlIDg6Y2FzZSAxMTpjYXNlIDE0OnJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdm9pZCh1cj10KX1pZighKDB8dHJbZSsxMD4+MF0pKXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdm9pZCh1cj10KX1yZXR1cm4gYXJbbj4+Ml09MCxhclsoaT00K258MCk+PjJdPTAsYXJbOCtuPj4yXT0wLGFyW2Y+PjJdPTEsYXJbZis0Pj4yXT0xMCx0cltmKzg+PjBdPTAsYXJbZisxMj4+Ml09OCxhcltmKzE2Pj4yXT0wLGFyWyhlPWYrMjB8MCk+PjJdPTAsZ0FbZisyND4+Ml09LjUsZ0FbZisyOD4+Ml09MCxnQVtmKzMyPj4yXT0wLE5sKG4sZiksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltpPj4yXSxhcltBKzg+PjJdPWFyWzgrbj4+Ml0sdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbD0wLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wO2lmKHVyPShjPXVyKSs2NHwwLGY9YyszMnwwLG49YysxMnwwLHQ9Yys4fDAsbz1jKzR8MCxhPWMsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDApKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDEpKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDIpKTw8MjQ+PjI0PT04KXtpZihpPTB8aHUoODApLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaT4+Ml09NjIwOCxhclsobD1pKzEyfDApPj4yXT0wLGFyW2wrND4+Ml09MCxhcltsKzg+PjJdPTAsYXJbbCsxMj4+Ml09MCxhcltsKzE2Pj4yXT0wLGFyW2krMzI+PjJdPTMyMjE1LGFyW2krMzY+PjJdPTAsYXJbaSs0MD4+Ml09MCxhcltpKzQ0Pj4yXT05OSxhcltpKzQ4Pj4yXT05OSxwPWkrNTJ8MCxhclsoWj1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbcD4+Ml09MCxhcltwKzQ+PjJdPTAsYXJbcCs4Pj4yXT0wLGFyW3ArMTI+PjJdPTAsYXJbaSs2OD4+Ml09WixaPWwsZz0ocD1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltnPj4yXSxhcltsPj4yXT1aLGFyW2c+PjJdPXAsMHxlJiZrdShlKSxkdShpKSx2PTB8YXJbcj4+Ml0seW8obCx3PTB8YXJbdisyND4+Ml0sdj0wfGFyW3YrMjg+PjJdLDEsMTApLEJvKGwsMTAsdyx2LDgpLG09MHxhcltyPj4yXSxlPTB8YXJbbSs0MD4+Ml0sKGc9MD09KDB8KG09MHxhclttKzQ0Pj4yXSkpKXx8YnUobSksWmUoZiksMHxlJiYocGUobiwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxhcltmPj4yXT1hcltuPj4yXSxhcltmKzQ+PjJdPWFyWzQrbj4+Ml0sYXJbZis4Pj4yXT1hcls4K24+PjJdLGFyW2YrMTI+PjJdPWFyWzEyK24+PjJdLGFyW2YrMTY+PjJdPWFyWzE2K24+PjJdKSxkPTB8ZWYoMjU2KmdBW2YrND4+Ml0pLGs9MHxlZigyNTYqZ0FbZisxMj4+Ml0pLGg9MHxlZigyNTYqZ0FbZis4Pj4yXSksdT0wfGVmKDI1NipnQVtmKzE2Pj4yXSksYXJbbj4+Ml09MCxhclt0Pj4yXT0wLGFyW28+PjJdPTAsYj0oYXJbYT4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLG4pLHM9MHxSbygwfGFyW3I+PjJdLDEsdCkscj0wfFJvKDB8YXJbcj4+Ml0sMixvKSxmPTB8Rm8obCwxMCxhKSwwPCgwfHYpJjA8KDB8dykpe2k9MDtkb3tmb3IobD0oMHxpKS8yfDAsZT0wO0I9YisoKDB8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxCPTB8Y3JbQj4+MF0sVz0oMHxlKS8yfDAsRT1zKygoMHxicigwfGFyW3Q+PjJdLGwpKStXKXwwLEU9KDB8Y3JbRT4+MF0pLTEyOHwwLFc9cisoKDB8YnIoMHxhcltvPj4yXSxsKSkrVyl8MCxXPSgwfGNyW1c+PjBdKS0xMjh8MCxJPSgxMjgrKDB8YnIoVyxkKSk+PjgpK0J8MCx5PTMqZXwwLFg9ZisoKDB8YnIoMHxhclthPj4yXSxpKSkreSl8MCx0cltYPj4wXT0oMHxJKTwwPzA6MjU1PCgwfEkpPy0xOjI1NSZJLFc9KDEyOCsoMHxicihFLGgpKSsoMHxicihXLGspKT4+OCkrQnwwLFg9ZisoeSsxKygwfGJyKDB8YXJbYT4+Ml0saSkpKXwwLHRyW1g+PjBdPSgwfFcpPDA/MDoyNTU8KDB8Vyk/LTE6MjU1JlcsQj0oMTI4KygwfGJyKEUsdSkpPj44KStCfDAseT1mKyh5KzIrKDB8YnIoMHxhclthPj4yXSxpKSkpfDAsdHJbeT4+MF09KDB8Qik8MD8wOjI1NTwoMHxCKT8tMToyNTUmQiwoMHwoZT1lKzF8MCkpIT0oMHx3KTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHYpKX1yZXR1cm4oYXJbQT4+Ml09WixhcltBKzQ+PjJdPXAsZyk/dm9pZCh1cj1jKTooZHUobSksdm9pZCh1cj1jKSl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9Y30sZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbix0O2lmKEF8PTAsZXw9MCxpfD0wLGZ8PTAsdXI9KHQ9dXIpKzQ4fDAsbj10KzM2fDAsZj10LDA9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxPT0oMHxhcltyKzQ+PjJdKSYmOD09KDB8YXJbcisxMj4+Ml0pKXtpZigwfChlPTB8YXJbcisxNj4+Ml0pKXtzd2l0Y2goMHxvcltlKzg+PjFdKXtjYXNlIDA6Y2FzZSA4OmNhc2UgMTE6Y2FzZSAxNDpyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHZvaWQodXI9dCl9aWYoISgwfHRyW2UrMTA+PjBdKSlyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHZvaWQodXI9dCl9cmV0dXJuIGFyW24+PjJdPTAsYXJbKGk9NCtufDApPj4yXT0wLGFyWzgrbj4+Ml09MCxhcltmPj4yXT0xLGFyW2YrND4+Ml09MTEsdHJbZis4Pj4wXT0xLGFyW2YrMTI+PjJdPTgsYXJbZisxNj4+Ml09MCxhclsoZT1mKzIwfDApPj4yXT0wLGdBW2YrMjQ+PjJdPS41LGdBW2YrMjg+PjJdPTAsZ0FbZiszMj4+Ml09MCxObChuLGYpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wO2lmKHVyPShsPXVyKSs2NHwwLGY9bCszNnwwLHQ9bCsxNnwwLG89bCsxMnwwLGE9bCs4fDAsYz1sKzR8MCxuPWwsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDApKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDEpKTw8MjQ+PjI0PT04JiYoMHxWbygwfGFyW3I+PjJdLDIpKTw8MjQ+PjI0PT04KXtpZihpPTB8aHUoODApLGFyW2krND4+Ml09MCxhcltpKzg+PjJdPTAsYXJbaT4+Ml09NjIwOCxhclsodT1pKzEyfDApPj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdSsxMj4+Ml09MCxhclt1KzE2Pj4yXT0wLGFyW2krMzI+PjJdPTMyMjE1LGFyW2krMzY+PjJdPTAsYXJbaSs0MD4+Ml09MCxhcltpKzQ0Pj4yXT05OSxhcltpKzQ4Pj4yXT05OSxYPWkrNTJ8MCxhclsoRT1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbWD4+Ml09MCxhcltYKzQ+PjJdPTAsYXJbWCs4Pj4yXT0wLGFyW1grMTI+PjJdPTAsYXJbaSs2OD4+Ml09RSxFPXUsQj0oWD1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltCPj4yXSxhclt1Pj4yXT1FLGFyW0I+PjJdPVgsMHxlJiZrdShlKSxkdShpKSxwPTB8YXJbcj4+Ml0seW8odSxaPTB8YXJbcCsyND4+Ml0scD0wfGFyW3ArMjg+PjJdLDEsMTEpLEJvKHUsMTAsWixwLDgpLHk9MHxhcltyPj4yXSxlPTB8YXJbeSs0MD4+Ml0sKEI9MD09KDB8KHk9MHxhclt5KzQ0Pj4yXSkpKXx8YnUoeSksWmUoZiksMHxlJiYocGUodCwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxhcltmPj4yXT1hclt0Pj4yXSxhcltmKzQ+PjJdPWFyWzQrdD4+Ml0sYXJbZis4Pj4yXT1hcls4K3Q+PjJdLGFyW2YrMTI+PjJdPWFyWzEyK3Q+PjJdLGFyW2YrMTY+PjJdPWFyWzE2K3Q+PjJdKSx2PTB8ZWYoMjU2KmdBW2YrND4+Ml0pLG09MHxlZigyNTYqZ0FbZisxMj4+Ml0pLGc9MHxlZigyNTYqZ0FbZis4Pj4yXSkscz0wfGVmKDI1NipnQVtmKzE2Pj4yXSksZD0wfEVvKDB8YXJbcj4+Ml0sNiksYXJbdD4+Ml09MCxhcltvPj4yXT0wLGFyW2E+PjJdPTAsYXJbYz4+Ml09MCxrPShhcltuPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAsdCksaD0wfFJvKDB8YXJbcj4+Ml0sMSxvKSx3PTB8Um8oMHxhcltyPj4yXSwyLGEpLGI9ZD8wfFJvKDB8YXJbcj4+Ml0sNixjKTowLGY9MHxGbyh1LDEwLG4pLDA8KDB8cCkpe3U9MDwoMHxaKSxpPTA7ZG97aWYodSlpZihyPSgwfGkpLzJ8MCxkKWZvcihlPTA7Qz1rKygoMHxicigwfGFyW3Q+PjJdLGkpKStlKXwwLEM9MHxjcltDPj4wXSxWPSgwfGUpLzJ8MCxXPWgrKCgwfGJyKDB8YXJbbz4+Ml0scikpK1YpfDAsVz0oMHxjcltXPj4wXSktMTI4fDAsVj13KygoMHxicigwfGFyW2E+PjJdLHIpKStWKXwwLFY9KDB8Y3JbVj4+MF0pLTEyOHwwLEY9KDEyOCsoMHxicihWLHYpKT4+OCkrQ3wwLEk9ZTw8MixHPWYrKCgwfGJyKDB8YXJbbj4+Ml0saSkpK0kpfDAsdHJbRz4+MF09KDB8Rik8MD8wOjI1NTwoMHxGKT8tMToyNTUmRixWPSgxMjgrKDB8YnIoVyxnKSkrKDB8YnIoVixtKSk+PjgpK0N8MCxHPWYrKCgxfEkpKygwfGJyKDB8YXJbbj4+Ml0saSkpKXwwLHRyW0c+PjBdPSgwfFYpPDA/MDoyNTU8KDB8Vik/LTE6MjU1JlYsQz0oMTI4KygwfGJyKFcscykpPj44KStDfDAsVz1mKygoMnxJKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCx0cltXPj4wXT0oMHxDKTwwPzA6MjU1PCgwfEMpPy0xOjI1NSZDLFc9MHxicigwfGFyW24+PjJdLGkpLEM9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrZSl8MCx0cltmKygoM3xJKStXKT4+MF09MHx0cltDPj4wXSwoMHwoZT1lKzF8MCkpIT0oMHxaKTspO2Vsc2UgZm9yKGU9MDtHPWsrKCgwfGJyKDB8YXJbdD4+Ml0saSkpK2UpfDAsRz0wfGNyW0c+PjBdLEk9KDB8ZSkvMnwwLFY9aCsoKDB8YnIoMHxhcltvPj4yXSxyKSkrSSl8MCxWPSgwfGNyW1Y+PjBdKS0xMjh8MCxJPXcrKCgwfGJyKDB8YXJbYT4+Ml0scikpK0kpfDAsST0oMHxjcltJPj4wXSktMTI4fDAsVz0oMTI4KygwfGJyKEksdikpPj44KStHfDAsRj1lPDwyLEM9ZisoKDB8YnIoMHxhcltuPj4yXSxpKSkrRil8MCx0cltDPj4wXT0oMHxXKTwwPzA6MjU1PCgwfFcpPy0xOjI1NSZXLEk9KDEyOCsoMHxicihWLGcpKSsoMHxicihJLG0pKT4+OCkrR3wwLEM9ZisoKDF8RikrKDB8YnIoMHxhcltuPj4yXSxpKSkpfDAsdHJbQz4+MF09KDB8SSk8MD8wOjI1NTwoMHxJKT8tMToyNTUmSSxHPSgxMjgrKDB8YnIoVixzKSk+PjgpK0d8MCxWPWYrKCgyfEYpKygwfGJyKDB8YXJbbj4+Ml0saSkpKXwwLHRyW1Y+PjBdPSgwfEcpPDA/MDoyNTU8KDB8Ryk/LTE6MjU1JkcsRj1mKygoM3xGKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCx0cltGPj4wXT0tMSwoMHwoZT1lKzF8MCkpIT0oMHxaKTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfHApKX1yZXR1cm4oYXJbQT4+Ml09RSxhcltBKzQ+PjJdPVgsQik/dm9pZCh1cj1sKTooZHUoeSksdm9pZCh1cj1sKSl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MCxiPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsYz10KzQ4fDAsdT10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYzPT0oMHxhcltyKzQ+PjJdKSYmOCE9KDB8KG89MHxhclsoYT1yKzEyfDApPj4yXSkpKXJldHVybiBhcltuPj4yXT0wLGFyWyhiPTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdPyhsPTgrbnwwLGU9byxyPWY9bz0wKTooYXJbdT4+Ml09MSxhclt1KzQ+PjJdPTEyLHRyW3UrOD4+MF09MCx0clsoZT11Kzl8MCk+PjBdPTB8dHJbYz4+MF0sdHJbZSsxPj4wXT0wfHRyW2MrMT4+MF0sdHJbZSsyPj4wXT0wfHRyW2MrMj4+MF0sYXJbdSsxMj4+Ml09byxhclt1KzE2Pj4yXT0wLGFyWyhlPXUrMjB8MCk+PjJdPTAsZ0FbdSsyND4+Ml09LjUsZ0FbdSsyOD4+Ml09MCxpPTgrbnwoZ0FbdSszMj4+Ml09MCksTmwobix1KSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxyPTB8YXJbYj4+Ml0sbD1pLGU9MHxhclthPj4yXSxvPXIsZj0wfGFyW2k+PjJdKSxhclt1Pj4yXT0xLGFyW3UrND4+Ml09MTMsdHJbdSs4Pj4wXT0xLHRyWyhpPXUrOXwwKT4+MF09MHx0cltjPj4wXSx0cltpKzE+PjBdPTB8dHJbYysxPj4wXSx0cltpKzI+PjBdPTB8dHJbYysyPj4wXSxhclt1KzEyPj4yXT1lLGFyWyhlPXUrMTZ8MCk+PjJdPTAsYXJbKGk9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uNSxnQVt1KzI4Pj4yXT0wLGY+Pj4oZ0FbdSszMj4+Ml09MCk8PW8+Pj4wPyhObChuLHUpLDB8KGU9MHxhcltpPj4yXSkmJmR1KGUpKTooYXJbcj4+Ml09YXJbdT4+Ml0sYXJbcis0Pj4yXT1hclt1KzQ+PjJdLGFyW3IrOD4+Ml09YXJbdSs4Pj4yXSxhcltyKzEyPj4yXT1hclt1KzEyPj4yXSxhcltvKzE2Pj4yXT1hcltlPj4yXSxhcltvKzIwPj4yXT1hcltpPj4yXSxhcltlPj4yXT0wLHU9dSsyNHwoYXJbaT4+Ml09MCksYXJbKGM9bysyNHwwKT4+Ml09YXJbdT4+Ml0sYXJbYys0Pj4yXT1hclt1KzQ+PjJdLGFyW2MrOD4+Ml09YXJbdSs4Pj4yXSxhcltiPj4yXT1vKzM2KSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2I+PjJdLGFyW0ErOD4+Ml09YXJbbD4+Ml0sYXJbbD4+Ml09MCx2b2lkKHVyPXQpO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj10fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHU9MCxiPTAscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTAsbT0wLGc9MCxaPTAscD0wLHk9MCxCPTAsRT0wO2lmKHVyPShsPXVyKSszMnwwLG49bCsxNnwwLHQ9bCsxMnwwLG89bCs4fDAsYT1sKzR8MCxjPWwsKDB8Vm8oMHxhclsocnw9MCk+PjJdLDMpKTw8MjQ+PjI0IT04JiYoMHxWbygwfGFyW3I+PjJdLDQpKTw8MjQ+PjI0IT04JiYoMHxWbygwfGFyW3I+PjJdLDUpKTw8MjQ+PjI0IT04KXt2PTB8RW8oMHxhcltyPj4yXSw2KTtkb3tpZih2KXtpZigoMHxWbygwfGFyW3I+PjJdLDYpKTw8MjQ+PjI0PT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPWwpO2lmKCgwfChnPTB8WG8oMHxhcltyPj4yXSw2KSkpPT0oMHxYbygwfGFyW3I+PjJdLDQpKSYmKDB8KGc9MHxXbygwfGFyW3I+PjJdLDYpKSk9PSgwfFdvKDB8YXJbcj4+Ml0sNCkpKWJyZWFrO3JldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPWwpfX13aGlsZSgwKTtpZihmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsodT1mKzEyfDApPj4yXT0wLGFyW3UrND4+Ml09MCxhclt1Kzg+PjJdPTAsYXJbdSsxMj4+Ml09MCxhclt1KzE2Pj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxnPWYrNTJ8MCxhclsobT1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbZz4+Ml09MCxhcltnKzQ+PjJdPTAsYXJbZys4Pj4yXT0wLGFyW2crMTI+PjJdPTAsYXJbZis2OD4+Ml09bSxtPXUsdz0oZz1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhclt3Pj4yXSxhclt1Pj4yXT1tLGFyW3c+PjJdPWcsMHxlJiZrdShlKSxkdShmKSx3PTB8YXJbcj4+Ml0seW8odSxoPTB8YXJbdysyND4+Ml0sdz0wfGFyW3crMjg+PjJdLDEsMHx0cltpKzg+PjBdPzEzOjEyKSxCbyh1LDEwLGgsdywyNTUmKDB8Vm8oMHxhcltyPj4yXSwzKSkpLGFyW24+PjJdPTAsYXJbdD4+Ml09MCxhcltvPj4yXT0wLGFyW2E+PjJdPTAscz0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLG4pLGQ9MHxSbygwfGFyW3I+PjJdLDQsdCksaz0wfFJvKDB8YXJbcj4+Ml0sNSxvKSxiPTB8Rm8odSwxMCxjKSxlPXY/KHU9MHxSbygwfGFyW3I+PjJdLDYsYSksKDB8YXJbYT4+Ml0pLzJ8MCk6dT0wLGFyW24+PjJdPSgwfGFyW24+PjJdKS8yfDAsYXJbdD4+Ml09KDB8YXJbdD4+Ml0pLzJ8MCxhcltvPj4yXT0oMHxhcltvPj4yXSkvMnwwLGFyW2E+PjJdPWUsMDwoMHx3KSl7aT0wPCgwfGgpLGY9MDtkb3tpZih2KXtpZihpKWZvcihlPTA7RT1zKygoMHxicigwfGFyW24+PjJdLGYpKStlPDwxKXwwLEU9MHxvcltFPj4xXSxCPWQrKCgwfGJyKDB8YXJbdD4+Ml0sZikpK2U8PDEpfDAsQj0wfG9yW0I+PjFdLHk9aysoKDB8YnIoMHxhcltvPj4yXSxmKSkrZTw8MSl8MCx5PTB8b3JbeT4+MV0sWj11KygoMHxicigwfGFyW2E+PjJdLGYpKStlPDwxKXwwLFo9MHxvcltaPj4xXSxyPWU8PDMscD1iKygoMHxicigwfGFyW2M+PjJdLGYpKStyKXwwLHRyW3A+PjBdPSg2NTUzNSZFKT4+PjgscD1iKygoMXxyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltwPj4wXT1FLHA9YisoKDJ8cikrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbcD4+MF09KDY1NTM1JkIpPj4+OCxwPWIrKCgzfHIpKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3A+PjBdPUIscD1iKygoNHxyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltwPj4wXT0oNjU1MzUmeSk+Pj44LHA9YisoKDV8cikrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbcD4+MF09eSxwPWIrKCg2fHIpKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3A+PjBdPSg2NTUzNSZaKT4+Pjgscj1iKygoN3xyKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0cltyPj4wXT1aLCgwfChlPWUrMXwwKSkhPSgwfGgpOyk7fWVsc2UgaWYoaSlmb3IoZT0wO1o9cysoKDB8YnIoMHxhcltuPj4yXSxmKSkrZTw8MSl8MCxaPTB8b3JbWj4+MV0scD1kKygoMHxicigwfGFyW3Q+PjJdLGYpKStlPDwxKXwwLHA9MHxvcltwPj4xXSxCPWsrKCgwfGJyKDB8YXJbbz4+Ml0sZikpK2U8PDEpfDAsQj0wfG9yW0I+PjFdLEU9NiplfDAseT1iKygoMHxicigwfGFyW2M+PjJdLGYpKStFKXwwLHRyW3k+PjBdPSg2NTUzNSZaKT4+PjgseT1iKygoMXxFKSsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0clt5Pj4wXT1aLHk9YisoRSsyKygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW3k+PjBdPSg2NTUzNSZwKT4+PjgseT1iKyhFKzMrKDB8YnIoMHxhcltjPj4yXSxmKSkpfDAsdHJbeT4+MF09cCx5PWIrKEUrNCsoMHxicigwfGFyW2M+PjJdLGYpKSl8MCx0clt5Pj4wXT0oNjU1MzUmQik+Pj44LEU9YisoRSs1KygwfGJyKDB8YXJbYz4+Ml0sZikpKXwwLHRyW0U+PjBdPUIsKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHx3KSl9cmV0dXJuIGFyW0E+PjJdPW0sYXJbQSs0Pj4yXT1nLHZvaWQodXI9bCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZih1cj0odD11cikrNjR8MCxuPXQrMzZ8MCxhPXQrNDh8MCxsPXQsMT09KDB8YXJbKHJ8PTApPj4yXSkmJjM9PSgwfGFyW3IrND4+Ml0pJiY4PT0oMHxhclsobz1yKzEyfDApPj4yXSkpcmV0dXJuIGFyW24+PjJdPTAsYXJbKHU9NCtufDApPj4yXT0wLChhcls4K24+PjJdPTApfHRyW3IrOD4+MF0/KGM9OCtufDAsZT04LHI9Zj1vPTApOihhcltsPj4yXT0xLGFyW2wrND4+Ml09MTIsdHJbbCs4Pj4wXT0wLHRyWyhlPWwrOXwwKT4+MF09MHx0clthPj4wXSx0cltlKzE+PjBdPTB8dHJbYSsxPj4wXSx0cltlKzI+PjBdPTB8dHJbYSsyPj4wXSxhcltsKzEyPj4yXT04LGFyW2wrMTY+PjJdPTAsYXJbKGU9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uNSxnQVtsKzI4Pj4yXT0wLGk9OCtufChnQVtsKzMyPj4yXT0wKSxObChuLGwpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLHI9MHxhclt1Pj4yXSxjPWksZT0wfGFyW28+PjJdLG89cixmPTB8YXJbaT4+Ml0pLGFyW2w+PjJdPTEsYXJbbCs0Pj4yXT0xMyx0cltsKzg+PjBdPTEsdHJbKGk9bCs5fDApPj4wXT0wfHRyW2E+PjBdLHRyW2krMT4+MF09MHx0clthKzE+PjBdLHRyW2krMj4+MF09MHx0clthKzI+PjBdLGFyW2wrMTI+PjJdPWUsYXJbKGU9bCsxNnwwKT4+Ml09MCxhclsoaT1sKzIwfDApPj4yXT0wLGdBW2wrMjQ+PjJdPS41LGdBW2wrMjg+PjJdPTAsZj4+PihnQVtsKzMyPj4yXT0wKTw9bz4+PjA/KE5sKG4sbCksMHwoZT0wfGFyW2k+PjJdKSYmZHUoZSkpOihhcltyPj4yXT1hcltsPj4yXSxhcltyKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcis4Pj4yXT1hcltsKzg+PjJdLGFyW3IrMTI+PjJdPWFyW2wrMTI+PjJdLGFyW28rMTY+PjJdPWFyW2U+PjJdLGFyW28rMjA+PjJdPWFyW2k+PjJdLGFyW2U+PjJdPTAsbD1sKzI0fChhcltpPj4yXT0wKSxhclsoYT1vKzI0fDApPj4yXT1hcltsPj4yXSxhclthKzQ+PjJdPWFyW2wrND4+Ml0sYXJbYSs4Pj4yXT1hcltsKzg+PjJdLGFyW3U+PjJdPW8rMzYpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbdT4+Ml0sYXJbQSs4Pj4yXT1hcltjPj4yXSxhcltjPj4yXT0wLHZvaWQodXI9dCk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTA7aWYodXI9KGw9dXIpKzMyfDAsbj1sKzE2fDAsdD1sKzEyfDAsbz1sKzh8MCxhPWwrNHwwLGM9bCwoMHxWbygwfGFyWyhyfD0wKT4+Ml0sMykpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNCkpPDwyND4+MjQ9PTgmJigwfFZvKDB8YXJbcj4+Ml0sNSkpPDwyND4+MjQ9PTgpe2lmKCh2PTB8RW8oMHxhcltyPj4yXSw2KSkmJigwfFZvKDB8YXJbcj4+Ml0sNikpPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9bCk7aWYoZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKHU9ZisxMnwwKT4+Ml09MCxhclt1KzQ+PjJdPTAsYXJbdSs4Pj4yXT0wLGFyW3UrMTI+PjJdPTAsYXJbdSsxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksZz1mKzUyfDAsYXJbKG09Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW2c+PjJdPTAsYXJbZys0Pj4yXT0wLGFyW2crOD4+Ml09MCxhcltnKzEyPj4yXT0wLGFyW2YrNjg+PjJdPW0sbT11LHc9KGc9ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbdz4+Ml0sYXJbdT4+Ml09bSxhclt3Pj4yXT1nLDB8ZSYma3UoZSksZHUoZiksdz0wfGFyW3I+PjJdLHlvKHUsaD0wfGFyW3crMjQ+PjJdLHc9MHxhclt3KzI4Pj4yXSwxLDB8dHJbaSs4Pj4wXT8xMzoxMiksQm8odSwxMCxoLHcsMjU1JigwfFZvKDB8YXJbcj4+Ml0sMykpKSxhcltuPj4yXT0wLGFyW3Q+PjJdPTAsYXJbbz4+Ml09MCxhclthPj4yXT0wLHM9KGFyW2M+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMyxuKSxkPTB8Um8oMHxhcltyPj4yXSw0LHQpLGs9MHxSbygwfGFyW3I+PjJdLDUsbyksYj0wfEZvKHUsMTAsYyksZj12PzB8Um8oMHxhcltyPj4yXSw2LGEpOjAsMDwoMHx3KSl7dT0wPCgwfGgpLGk9MDtkb3tpZih2KXtpZih1KWZvcihlPTA7cj1lPDwzLHA9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrcil8MCxwPXMrKCgodHJbcD4+MF09MCl8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxaPWIrKCgxfHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcD4+MF0sWj1iKygoMnxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWQrKCgodHJbWj4+MF09MCl8YnIoMHxhclt0Pj4yXSxpKSkrZSl8MCxwPWIrKCgzfHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbWj4+MF0scD1iKygoNHxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxwPWsrKCgodHJbcD4+MF09MCl8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxaPWIrKCg1fHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcD4+MF0sWj1iKygoNnxyKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWYrKCgodHJbWj4+MF09MCl8YnIoMHxhclthPj4yXSxpKSkrZSl8MCxyPWIrKCg3fHIpKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3I+PjBdPTB8dHJbWj4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTt9ZWxzZSBpZih1KWZvcihlPTA7cD1lPDwzLFo9YisoKDB8YnIoMHxhcltjPj4yXSxpKSkrcCl8MCxaPXMrKCgodHJbWj4+MF09MCl8YnIoMHxhcltuPj4yXSxpKSkrZSl8MCxyPWIrKCgxfHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3I+PjBdPTB8dHJbWj4+MF0scj1iKygoMnxwKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxyPWQrKCgodHJbcj4+MF09MCl8YnIoMHxhclt0Pj4yXSxpKSkrZSl8MCxaPWIrKCgzfHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW1o+PjBdPTB8dHJbcj4+MF0sWj1iKygoNHxwKSsoMHxicigwfGFyW2M+PjJdLGkpKSl8MCxaPWsrKCgodHJbWj4+MF09MCl8YnIoMHxhcltvPj4yXSxpKSkrZSl8MCxwPWIrKCg1fHApKygwfGJyKDB8YXJbYz4+Ml0saSkpKXwwLHRyW3A+PjBdPTB8dHJbWj4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8aCk7KTtpPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHx3KSl9cmV0dXJuIGFyW0E+PjJdPW0sYXJbQSs0Pj4yXT1nLHZvaWQodXI9bCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdXI9bH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQ9MCxvPTA7aWYodXI9KG49dXIpKzQ4fDAsZj1uKzM2fDAsZT1uLDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC0yJih0PTB8YXJbcis0Pj4yXSl8MCkmJjghPSgwfChvPTB8YXJbcisxMj4+Ml0pKSlyZXR1cm4gYXJbZj4+Ml09MCxhclsoaT1mKzR8MCk+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2U+PjJdPTEsYXJbZSs0Pj4yXT0zLHRyW2UrOD4+MF09MTU9PSgyfHQpJjEsYXJbZSsxMj4+Ml09byxhcltlKzE2Pj4yXT0wLGFyWyhvPWUrMjB8MCk+PjJdPTAsZ0FbZSsyND4+Ml09LjIwMDAwMDAwMjk4MDIzMjI0LGdBW2UrMjg+PjJdPTAsZ0FbZSszMj4+Ml09MCxObChmLGUpLDB8KGU9MHxhcltvPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW2Y+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcltmKzg+PjJdLHZvaWQodXI9bik7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW59LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGg9MCx3PTAsdj0wLG09MCxnPTAsWj0wLHA9MCx5PTAsQj0wLEU9MDtpZih1cj0oaz11cikrMzJ8MCxkPWsrMTZ8MCxoPWsrMTJ8MCx3PWsrOHwwLHY9ays0fDAsbT1rLHM9MTU9PSgyfGFyWzM2KygwfGFyWyhyfD0wKT4+Ml0pPj4yXSksaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKGY9aSsxMnwwKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTAsYXJbZisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZT1pKzUyfDAsYXJbKHk9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2krNjg+PjJdPXksYXJbQT4+Ml09Zix5PShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW3k+PjJdLGFyW2Y+PjJdPWYsYXJbeT4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLHA9MHxhcltyPj4yXSx5byhmLGI9MHxhcltwKzI0Pj4yXSxwPTB8YXJbcCsyOD4+Ml0sMSwzKSxCbyhmLDMsYixwLDI1NSYoMHxWbygwfGFyW3I+PjJdLDEwKSkpLEJvKGYsNCxiLHAsMjU1JigwfFZvKDB8YXJbcj4+Ml0sMTApKSksQm8oZiw1LGIscCwyNTUmKDB8Vm8oMHxhcltyPj4yXSwxMCkpKSxzJiZCbyhmLDYsYixwLDI1NSYoMHxWbygwfGFyW3I+PjJdLDEwKSkpLGFyW2Q+PjJdPTAseT1zPzg6NixhcltoPj4yXT0wLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhPShhclttPj4yXT0wKXxSbygwfGFyW3I+PjJdLDEwLGQpLGM9MHxGbyhmLDMsaCksbD0wfEZvKGYsNCx3KSx1PTB8Rm8oZiw1LHYpLFo9cz8oZz0wfEZvKGYsNixtKSwoMHxhclttPj4yXSkvMnwwKTpnPTAsbz0oMHxhcltoPj4yXSkvMnwwLGFyW2g+PjJdPW8sdD0oMHxhclt3Pj4yXSkvMnwwLGFyW3c+PjJdPXQsbj0oMHxhclt2Pj4yXSkvMnwwLGFyW3Y+PjJdPW4sYXJbbT4+Ml09WiwoMHxwKTw9MCl1cj1rO2Vsc2V7QT0wPCgwfGIpLGY9MDtkb3tBOmRve2lmKEEpe2lmKHI9MHxicigwfGFyW2Q+PjJdLGYpLGg9MHxicihvLGYpLHc9MHxicih0LGYpLHY9MHxicihuLGYpLCFzKWZvcihlPTA7OylpZihCPXIrKDB8YnIoZSx5KSl8MCxpPTY1NTM1JigoMHxjclthKyhCKzIpPj4wXSk8PDh8MHxjclthKyhCKzMpPj4wXSksbT02NTUzNSYoKDB8Y3JbYSsoQis0KT4+MF0pPDw4fDB8Y3JbYSsoQis1KT4+MF0pLG9yW2MrKGgrZTw8MSk+PjFdPSgwfGNyW2ErQj4+MF0pPDw4fDB8Y3JbYSsoQisxKT4+MF0sb3JbbCsodytlPDwxKT4+MV09aSxvclt1Kyh2K2U8PDEpPj4xXT1tLCgwfChlPWUrMXwwKSk9PSgwfGIpKWJyZWFrIEE7Zm9yKGk9MHxicihaLGYpLGU9MDtFPXIrKDB8YnIoZSx5KSl8MCxtPTY1NTM1JigoMHxjclthKyhFKzIpPj4wXSk8PDh8MHxjclthKyhFKzMpPj4wXSksQj02NTUzNSYoKDB8Y3JbYSsoRSs0KT4+MF0pPDw4fDB8Y3JbYSsoRSs1KT4+MF0pLG9yW2MrKGgrZTw8MSk+PjFdPSgwfGNyW2ErRT4+MF0pPDw4fDB8Y3JbYSsoRSsxKT4+MF0sb3JbbCsodytlPDwxKT4+MV09bSxvclt1Kyh2K2U8PDEpPj4xXT1CLEI9cisoZTw8Myl8MCxvcltnKyhpK2U8PDEpPj4xXT0oMHxjclthKyhCKzYpPj4wXSk8PDh8MHxjclthKyhCKzcpPj4wXSwoMHwoZT1lKzF8MCkpIT0oMHxiKTspO319d2hpbGUoMCk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8cCkpO3VyPWt9fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsaT10KzQ4fDAsYz10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC00JihvPTB8YXJbKGE9cis0fDApPj4yXSl8MCkpe3N3aXRjaChhcltuPj4yXT0wLGFyWyhsPTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXxvKXtjYXNlIDEyOmNhc2UgMTQ6ZT0wfGFyW3IrMTI+PjJdLGFyW2M+PjJdPTEsYXJbYys0Pj4yXT0xND09KDB8byk/MTI6MTQsdHJbYys4Pj4wXT0wLHRyWyhvPWMrOXwwKT4+MF09MHx0cltpPj4wXSx0cltvKzE+PjBdPTB8dHJbaSsxPj4wXSx0cltvKzI+PjBdPTB8dHJbaSsyPj4wXSxhcltjKzEyPj4yXT1lLGFyW2MrMTY+PjJdPTAsYXJbKGU9YysyMHwwKT4+Ml09MCxnQVtjKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbYysyOD4+Ml09MCxnQVtjKzMyPj4yXT0wLE5sKG4sYyksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksZT0wfGFyW2E+PjJdO2JyZWFrO2RlZmF1bHQ6ZT1vfXN3aXRjaCgwfGUpe2Nhc2UgMTM6Y2FzZSAxNTpmPTB8YXJbcisxMj4+Ml0sYXJbYz4+Ml09MSxhcltjKzQ+PjJdPTE1PT0oMHxlKT8xMzoxNSx0cltjKzg+PjBdPTEsdHJbKG89Yys5fDApPj4wXT0wfHRyW2k+PjBdLHRyW28rMT4+MF09MHx0cltpKzE+PjBdLHRyW28rMj4+MF09MHx0cltpKzI+PjBdLGFyW2MrMTI+PjJdPWYsYXJbKGk9YysxNnwwKT4+Ml09MCxhclsoZj1jKzIwfDApPj4yXT0wLGdBW2MrMjQ+PjJdPS4xMDAwMDAwMDE0OTAxMTYxMixnQVtjKzI4Pj4yXT0wLChvPShnQVtjKzMyPj4yXT0wKXxhcltsPj4yXSk+Pj4wPj0oMHxhclsoZT04K258MCk+PjJdKT4+PjA/KE5sKG4sYyksMHwoaT0wfGFyW2Y+PjJdKSYmZHUoaSkpOihhcltvPj4yXT1hcltjPj4yXSxhcltvKzQ+PjJdPWFyW2MrND4+Ml0sYXJbbys4Pj4yXT1hcltjKzg+PjJdLGFyW28rMTI+PjJdPWFyW2MrMTI+PjJdLGFyW28rMTY+PjJdPWFyW2k+PjJdLGFyW28rMjA+PjJdPWFyW2Y+PjJdLGFyW2k+PjJdPTAsYz1jKzI0fChhcltmPj4yXT0wKSxhclsocj1vKzI0fDApPj4yXT1hcltjPj4yXSxhcltyKzQ+PjJdPWFyW2MrND4+Ml0sYXJbcis4Pj4yXT1hcltjKzg+PjJdLGFyW2w+PjJdPW8rMzYpO2JyZWFrO2RlZmF1bHQ6ZT04K258MH1yZXR1cm4gYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltsPj4yXSxhcltBKzg+PjJdPWFyW2U+PjJdLGFyW2U+PjJdPTAsdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGE9MCxjPTAsbD0wLHU9MCxiPTAscz0wLGQ9MDtzd2l0Y2godXI9KG89dXIpKzE2fDAsbj1vKzR8MCx0PW8sYT0wfGh1KDgwKSxhclthKzQ+PjJdPTAsYXJbYSs4Pj4yXT0wLGFyW2E+PjJdPTYyMDgsYXJbKGk9YSsxMnwwKT4+Ml09MCxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2krMTI+PjJdPTAsYXJbaSsxNj4+Ml09MCxhclthKzMyPj4yXT0zMjIxNSxhclthKzM2Pj4yXT0wLGFyW2ErNDA+PjJdPTAsYXJbYSs0ND4+Ml09OTksYXJbYSs0OD4+Ml09OTksdT1hKzUyfDAsYXJbKGw9YSs3MnwwKT4+Ml09MCxhclthKzc2Pj4yXT0wLGFyW3U+PjJdPTAsYXJbdSs0Pj4yXT0wLGFyW3UrOD4+Ml09MCxhclt1KzEyPj4yXT0wLGFyW2ErNjg+PjJdPWwsbD1pLGM9KHU9YSkrMTZ8MCxidShhKSxzdShhKSxlPTB8YXJbYz4+Ml0sYXJbaT4+Ml09bCxhcltjPj4yXT11LDB8ZSYma3UoZSksZHUoYSksZT0wfGFyW3I+PjJdLGY9MHxhcltlKzI0Pj4yXSxjPTB8YXJbZSsyOD4+Ml0sMHxhcltlKzM2Pj4yXSl7Y2FzZSAxNDp5byhpLGYsYywxLDEyKSxlPWk7YnJlYWs7Y2FzZSAxMjp5byhpLGYsYywxLDE0KSxlPWk7YnJlYWs7Y2FzZSAxNTp5byhpLGYsYywxLDEzKSxlPWk7YnJlYWs7Y2FzZSAxMzp5byhpLGYsYywxLDE1KSxlPWk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsZHUoYSksdm9pZCh1cj1vKX1pZihCbyhlLDEwLGYsYywyNTUmKDB8Vm8oMHxhcltyPj4yXSwxMCkpKSxhcltuPj4yXT0wLHI9KGFyW3Q+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMTAsbiksZj0wfEZvKGUsMTAsdCksMDwoMHxjKSYwPCgwfChhPSgwfChpPTB8YXJbdD4+Ml0pKTwoMHwoYT0wfGFyW24+PjJdKSk/aTphKSkpe2k9MDtkb3tmb3IoZT0wO2Q9cisoKGI9MXxlKSsoMHxicigwfGFyW24+PjJdLGkpKSl8MCxzPWYrKCgwfGJyKDB8YXJbdD4+Ml0saSkpK2UpfDAsdHJbcz4+MF09MHx0cltkPj4wXSxzPXIrKCgwfGJyKDB8YXJbbj4+Ml0saSkpK2UpfDAsYj1mKyhiKygwfGJyKDB8YXJbdD4+Ml0saSkpKXwwLHRyW2I+PjBdPTB8dHJbcz4+MF0sKDB8KGU9ZSsyfDApKTwoMHxhKTspO2k9aSsxfDB9d2hpbGUoKDB8aSkhPSgwfGMpKX1hcltBPj4yXT1sLGFyW0ErND4+Ml09dSx1cj1vfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wO2lmKHVyPShuPXVyKSs0OHwwLGY9biszNnwwLGU9biwyPT0oMHxhclsocnw9MCk+PjJdKSYmMD09KDB8YXJbcis0Pj4yXSkpcmV0dXJuIGFyW2Y+PjJdPTAsYXJbKGk9Zis0fDApPj4yXT0wLHQ9KGFyW2YrOD4+Ml09MCl8dHJbcis4Pj4wXSxyPTB8YXJbcisxMj4+Ml0sYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTEsdHJbZSs4Pj4wXT10LGFyW2UrMTI+PjJdPXIsYXJbZSsxNj4+Ml09MCxhclsocj1lKzIwfDApPj4yXT0wLGdBW2UrMjQ+PjJdPS4xMDAwMDAwMDE0OTAxMTYxMixnQVtlKzI4Pj4yXT0wLGdBW2UrMzI+PjJdPTAsTmwoZixlKSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltmPj4yXSxhcltBKzQ+PjJdPWFyW2k+PjJdLGFyW0ErOD4+Ml09YXJbZis4Pj4yXSx2b2lkKHVyPW4pO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj1ufSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MDtpZih1cj0ocz11cikrMTZ8MCx1PXMrMTJ8MCxiPXMrOHwwLGE9cys0fDAsYz1zLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhsPWkrMTJ8MCk+PjJdPTAsYXJbNCtsPj4yXT0wLGFyWzgrbD4+Ml09MCxhclsxMitsPj4yXT0wLGFyWzE2K2w+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LGU9aSs1MnwwLGFyWyhCPWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltpKzY4Pj4yXT1CLGFyW0E+PjJdPWwsQj0oYXJbQSs0Pj4yXT1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltCPj4yXSxhcltsPj4yXT1sLGFyW0I+PjJdPWksMHxlJiZrdShlKSxkdShpKSxCPTB8YXJbcj4+Ml0seW8obCxvPTB8YXJbQisyND4+Ml0sQj0wfGFyW0IrMjg+PjJdLDAsMSksbj0oMStvfDApLzJ8MCxwPShCKzF8MCkvMnwwLEJvKGwsMCxvLEIsaT0yNTUmKGU9MHxWbygwfGFyW3I+PjJdLDApKSksQm8obCwxLG4scCxpKSxCbyhsLDIsbixwLGkpLCh0PTB8RW8oMHxhcltyPj4yXSw2KSk/Qm8obCw2LG8sQix5PTI1NSYoMHxWbygwfGFyW3I+PjJdLDYpKSk6eT0wLGU8PDI0Pj4yND09OCl7aWYoYXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW2E+PjJdPTAsaT0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLGMpLGY9MHxGbyhsLDAsYSksZz0wfEZvKGwsMSx1KSxaPTB8Rm8obCwyLGIpLHZiKDB8ZywtMTI4LDB8YnIoMHxhclt1Pj4yXSxwKSksdmIoMHxaLC0xMjgsMHxicigwfGFyW2I+PjJdLHApKSwwPCgwfEIpKWZvcihlPTA7aGIoMHwocD1mKygwfGJyKDB8YXJbYT4+Ml0sZSkpfDApLGkrKDB8YnIoMHxhcltjPj4yXSxlKSl8MCwwfG8pLCgwfChlPWUrMXwwKSkhPSgwfEIpOyk7fWVsc2V7YXJbdT4+Ml09MCxhcltiPj4yXT0wLGFyW2E+PjJdPTAsZz0oYXJbYz4+Ml09MCl8Um8oMHxhcltyPj4yXSwwLGMpLFo9MHxGbyhsLDAsYSksaz0wfEZvKGwsMSx1KSxoPTB8Rm8obCwyLGIpLGFyW2M+PjJdPSgwfGFyW2M+PjJdKS8yfDAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCx3PSgwfGFyW3U+PjJdKS8yfDAsYXJbdT4+Ml09dyx2PSgwfGFyW2I+PjJdKS8yfDAsYXJbYj4+Ml09dixtPTA8KDB8Qik7ZG97aWYobSl7aWYoZj0xMjg8PGkrLTgmNjU1MzUsMDwoMHxvKSl7aT0wO2Rve2ZvcihBPTB8YnIodyxpKSxkPTB8YnIodixpKSxlPTA7b3JbaysoQStlPDwxKT4+MV09ZixvcltoKyhkK2U8PDEpPj4xXT1mLCgwfChlPWUrMXwwKSk8KDB8bik7KTtpPWkrMXwwfXdoaWxlKCgwfGkpPCgwfHApKTtpZighbSlicmVha31pZihoYigwfFosMHxnLDB8KGU9bzw8MSkpLDEhPSgwfEIpKWZvcihpPTE7aGIoWisoKDB8YnIoMHxhclthPj4yXSxpKSk8PDEpfDAsZysoKDB8YnIoMHxhcltjPj4yXSxpKSk8PDEpfDAsMHxlKSwoMHwoaT1pKzF8MCkpIT0oMHxCKTspO319d2hpbGUoMCl9aWYodCl7aWYoYXJbdT4+Ml09MCxBPShhcltiPj4yXT0wKXxSbygwfGFyW3I+PjJdLDYsdSksZj0wfEZvKGwsNixiKSxpPW88PCg4PHk+Pj4wJjEpLDA8KDB8QikpZm9yKGU9MDtoYigwfChyPWYrKDB8YnIoMHxhcltiPj4yXSxlKSl8MCksQSsoMHxicigwfGFyW3U+PjJdLGUpKXwwLDB8aSksKDB8KGU9ZSsxfDApKSE9KDB8Qik7KTt1cj1zfWVsc2UgdXI9c30sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtzd2l0Y2godXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsbz10KzQ4fDAsbD10LDB8YXJbKHJ8PTApPj4yXSl7Y2FzZSAwOmNhc2UgMjppZigwPT0oMHxhcltyKzQ+PjJdKSYmOD09KDB8YXJbcisxMj4+Ml0pKXJldHVybiBhcltuPj4yXT0wLGFyWyh1PTQrbnwwKT4+Ml09MCwoYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdPyhjPTgrbnwwLHI9Zj1hPTApOihhcltsPj4yXT0xLGFyW2wrND4+Ml09MTAsdHJbbCs4Pj4wXT0wLHRyWyhlPWwrOXwwKT4+MF09MHx0cltvPj4wXSx0cltlKzE+PjBdPTB8dHJbbysxPj4wXSx0cltlKzI+PjBdPTB8dHJbbysyPj4wXSxhcltsKzEyPj4yXT04LGFyW2wrMTY+PjJdPTAsYXJbKGU9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbbCsyOD4+Ml09MCxpPTgrbnwoZ0FbbCszMj4+Ml09MCksTmwobixsKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxhPXI9MHxhclt1Pj4yXSxmPTB8YXJbKGM9aSk+PjJdKSxhcltsPj4yXT0xLGFyW2wrND4+Ml09MTEsdHJbbCs4Pj4wXT0xLHRyWyhlPWwrOXwwKT4+MF09MHx0cltvPj4wXSx0cltlKzE+PjBdPTB8dHJbbysxPj4wXSx0cltlKzI+PjBdPTB8dHJbbysyPj4wXSxhcltsKzEyPj4yXT04LGFyWyhlPWwrMTZ8MCk+PjJdPTAsYXJbKGk9bCsyMHwwKT4+Ml09MCxnQVtsKzI0Pj4yXT0uMTUwMDAwMDA1OTYwNDY0NDgsZ0FbbCsyOD4+Ml09MCxmPj4+KGdBW2wrMzI+PjJdPTApPD1hPj4+MD8oTmwobixsKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSk6KGFyW3I+PjJdPWFyW2w+PjJdLGFyW3IrND4+Ml09YXJbbCs0Pj4yXSxhcltyKzg+PjJdPWFyW2wrOD4+Ml0sYXJbcisxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbYSsxNj4+Ml09YXJbZT4+Ml0sYXJbYSsyMD4+Ml09YXJbaT4+Ml0sYXJbZT4+Ml09MCxsPWwrMjR8KGFyW2k+PjJdPTApLGFyWyhvPWErMjR8MCk+PjJdPWFyW2w+PjJdLGFyW28rND4+Ml09YXJbbCs0Pj4yXSxhcltvKzg+PjJdPWFyW2wrOD4+Ml0sYXJbdT4+Ml09YSszNiksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hclt1Pj4yXSxhcltBKzg+PjJdPWFyW2M+PjJdLGFyW2M+PjJdPTAsdm9pZCh1cj10KX1hcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9dH0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZih1cj0odT11cikrMTZ8MCxjPXUrOHwwLHQ9dSs0fDAsbD11LGs9MHxhclsocnw9MCk+PjJdLG89MHxhcltrKzI0Pj4yXSxhPTB8YXJbaysyOD4+Ml0sKDB8Vm8oaywwKSk8PDI0Pj4yNCE9OClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj11KTtpZihmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsoYj1mKzEyfDApPj4yXT0wLGFyW2IrND4+Ml09MCxhcltiKzg+PjJdPTAsYXJbYisxMj4+Ml09MCxhcltiKzE2Pj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxrPWYrNTJ8MCxhclsoZD1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbaz4+Ml09MCxhcltrKzQ+PjJdPTAsYXJbays4Pj4yXT0wLGFyW2srMTI+PjJdPTAsYXJbZis2OD4+Ml09ZCxkPWIscz0oaz1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltzPj4yXSxhcltiPj4yXT1kLGFyW3M+PjJdPWssMHxlJiZrdShlKSxkdShmKSxlPTB8RW8oMHxhcltyPj4yXSw2KSwwfHRyWyhuPWkrOHwwKT4+MF0/eW8oYixvLGEsMSwxMSk6eW8oYixvLGEsMSwxMCksQm8oYiwxMCxvLGEsOCksYXJbYz4+Ml09MCxzPShhcltsPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAsYyksaT1lPzB8Um8oMHxhcltyPj4yXSw2LHQpOjAsYj0wfEZvKGIsMTAsbCksMDwoMHxhKSlpZihyPTA8KDB8byksZSl7Zj0wO2Rve2lmKDB8dHJbbj4+MF0pe2lmKHIpZm9yKGU9MDtoPXMrKCgwfGJyKDB8YXJbYz4+Ml0sZikpK2UpfDAsaD0wfHRyW2g+PjBdLHY9ZTw8Mix3PWIrKCgwfGJyKDB8YXJbbD4+Ml0sZikpK3YpfDAsdHJbdz4+MF09aCx3PWIrKCgxfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3c+PjBdPWgsdz1iKygoMnx2KSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0clt3Pj4wXT1oLHc9aSsoKDB8YnIoMHxhclt0Pj4yXSxmKSkrZSl8MCx2PWIrKCgzfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPTB8dHJbdz4+MF0sKDB8KGU9ZSsxfDApKSE9KDB8byk7KTt9ZWxzZSBpZihyKWZvcihlPTA7dz1zKygoMHxicigwfGFyW2M+PjJdLGYpKStlKXwwLHc9MHx0clt3Pj4wXSxoPTMqZXwwLHY9YisoKDB8YnIoMHxhcltsPj4yXSxmKSkraCl8MCx0clt2Pj4wXT13LHY9YisoaCsxKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPXcsaD1iKyhoKzIrKDB8YnIoMHxhcltsPj4yXSxmKSkpfDAsdHJbaD4+MF09dywoMHwoZT1lKzF8MCkpIT0oMHxvKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfGEpKX1lbHNle2Y9MDtkb3tpZigwfHRyW24+PjBdKXtpZihyKWZvcihlPTA7aD1zKygoMHxicigwfGFyW2M+PjJdLGYpKStlKXwwLGg9MHx0cltoPj4wXSx2PWU8PDIsdz1iKygoMHxicigwfGFyW2w+PjJdLGYpKSt2KXwwLHRyW3c+PjBdPWgsdz1iKygoMXx2KSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0clt3Pj4wXT1oLHc9YisoKDJ8dikrKDB8YnIoMHxhcltsPj4yXSxmKSkpfDAsdHJbdz4+MF09aCx2PWIrKCgzfHYpKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPS0xLCgwfChlPWUrMXwwKSkhPSgwfG8pOyk7fWVsc2UgaWYocilmb3IoZT0wO3c9cysoKDB8YnIoMHxhcltjPj4yXSxmKSkrZSl8MCx3PTB8dHJbdz4+MF0sdj0zKmV8MCxoPWIrKCgwfGJyKDB8YXJbbD4+Ml0sZikpK3YpfDAsdHJbaD4+MF09dyxoPWIrKHYrMSsoMHxicigwfGFyW2w+PjJdLGYpKSl8MCx0cltoPj4wXT13LHY9YisodisyKygwfGJyKDB8YXJbbD4+Ml0sZikpKXwwLHRyW3Y+PjBdPXcsKDB8KGU9ZSsxfDApKSE9KDB8byk7KTtmPWYrMXwwfXdoaWxlKCgwfGYpIT0oMHxhKSl9YXJbQT4+Ml09ZCxhcltBKzQ+PjJdPWssdXI9dX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhPTAsYz0wLGw9MCx1PTA7aWYodXI9KG89dXIpKzY0fDAsdD1vKzM2fDAsbj1vKzQ4fDAsdT1vLDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMD09KC0yJihhPTB8YXJbKGM9cis0fDApPj4yXSl8MCkpcmV0dXJuIDM8PSgoZT0wfGFyWyhmPWkrNHwwKT4+Ml0pKy0xfDApPj4+MHx8MHwobD0wfGFyW2krMTY+PjJdKSYmMD09KDB8b3JbbCs4Pj4xXSk/KGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCk6KGFyW3Q+PjJdPTAsYXJbKGw9NCt0fDApPj4yXT0wLDExPT0oKGFyWzgrdD4+Ml09MCl8KGU9MTA9PSgwfGEpPyhhclt1Pj4yXT0wLGFyW3UrND4+Ml09ZSx0clt1Kzg+PjBdPTAsdHJbKGU9dSs5fDApPj4wXT0wfHRyW24+PjBdLHRyW2UrMT4+MF09MHx0clsxK24+PjBdLHRyW2UrMj4+MF09MHx0clsyK24+PjBdLGFyW3UrMTI+PjJdPTgsYXJbdSsxNj4+Ml09MCxhclsoZT11KzIwfDApPj4yXT0wLGdBW3UrMjQ+PjJdPS43NSxnQVt1KzI4Pj4yXT0uNSxnQVt1KzMyPj4yXT0wLE5sKHQsdSksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksMHxhcltjPj4yXSk6YSkpPyhmPTB8YXJbZj4+Ml0sYXJbdT4+Ml09MCxhclt1KzQ+PjJdPWYsdHJbdSs4Pj4wXT0xLHRyWyhmPXUrOXwwKT4+MF09MHx0cltuPj4wXSx0cltmKzE+PjBdPTB8dHJbMStuPj4wXSx0cltmKzI+PjBdPTB8dHJbMituPj4wXSxhclt1KzEyPj4yXT04LGFyWyhmPXUrMTZ8MCk+PjJdPTAsYXJbKHI9dSsyMHwwKT4+Ml09MCxnQVt1KzI0Pj4yXT0uNzUsZ0FbdSsyOD4+Ml09LjUsKGk9KGdBW3UrMzI+PjJdPTApfGFyW2w+PjJdKT4+PjA+PSgwfGFyWyhlPTgrdHwwKT4+Ml0pPj4+MD8oTmwodCx1KSwwfChmPTB8YXJbcj4+Ml0pJiZkdShmKSk6KGFyW2k+PjJdPWFyW3U+PjJdLGFyW2krND4+Ml09YXJbdSs0Pj4yXSxhcltpKzg+PjJdPWFyW3UrOD4+Ml0sYXJbaSsxMj4+Ml09YXJbdSsxMj4+Ml0sYXJbaSsxNj4+Ml09YXJbZj4+Ml0sYXJbaSsyMD4+Ml09YXJbcj4+Ml0sYXJbZj4+Ml09MCx1PXUrMjR8KGFyW3I+PjJdPTApLGFyWyhjPWkrMjR8MCk+PjJdPWFyW3U+PjJdLGFyW2MrND4+Ml09YXJbdSs0Pj4yXSxhcltjKzg+PjJdPWFyW3UrOD4+Ml0sYXJbbD4+Ml09aSszNikpOmU9OCt0fDAsYXJbQT4+Ml09YXJbdD4+Ml0sYXJbQSs0Pj4yXT1hcltsPj4yXSxhcltBKzg+PjJdPWFyW2U+PjJdLGFyW2U+PjJdPTApLHZvaWQodXI9byk7YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTAsZz0wLFo9MCxwPTAseT0wLEI9MCxFPTAsWD0wLFc9MCxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTA7aWYodXI9KHM9dXIpKzExMnwwLEc9cys5NnwwLFY9cys5MnwwLHA9cys4OHwwLHU9cys4NHwwLGI9cys4MHwwLEU9cys0MHwwLGs9cyxGPTB8YXJbKHJ8PTApPj4yXSxsPTB8YXJbRisyND4+Ml0sRj0wfGFyW0YrMjg+PjJdLGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhkPWYrMTJ8MCk+PjJdPTAsYXJbZCs0Pj4yXT0wLGFyW2QrOD4+Ml09MCxhcltkKzEyPj4yXT0wLGFyW2QrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LGU9Zis1MnwwLGFyWyhDPWYrNzJ8MCk+PjJdPTAsYXJbZis3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltmKzY4Pj4yXT1DLGFyW0E+PjJdPWQsQz0oYXJbQSs0Pj4yXT1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltDPj4yXSxhcltkPj4yXT1kLGFyW0M+PjJdPWYsMHxlJiZrdShlKSxkdShmKSxXPTB8Z28oWD0wfGFyW2krND4+Ml0pLEk9MHxabyhYKSx5byhkLGwsRiwwLFgpLFg9KGwtMSsoVyY9MjU1KXwwKS8oMHxXKXwwLEM9KEYrLTErKEkmPTI1NSl8MCkvKDB8SSl8MCxjPTExPT0oMHxhclszNisoMHxhcltyPj4yXSk+PjJdKSxCbyhkLDAsbCxGLDgpLEJvKGQsMSxYLEMsOCksQm8oZCwyLFgsQyw4KSxjJiZCbyhkLDYsbCxGLDgpLGFyW0c+PjJdPTAsYXJbVj4+Ml09MCxhcltwPj4yXT0wLGFyW3U+PjJdPTAsQz0oYXJbYj4+Ml09MCl8Um8oMHxhcltyPj4yXSwxMCxiKSxaPTB8Rm8oZCwwLHApLG89MHxGbyhkLDEsRyksYT0wfEZvKGQsMixWKSxYPWM/MHxGbyhkLDYsdSk6MCxCZShFKSxlPTB8YXJbaSsxNj4+Ml0pZm9yKEE9MHx0cltlKzEwPj4wXSx5ZShrLDB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLEE9QTw8MjQ+PjI0IT0wLGU9ayxmPShyPUUpKzQwfDA7YXJbcj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwocj1yKzR8MCkpPCgwfGYpOyk7ZWxzZSBBPTE7aWYoZz1jPzQ6Myx0PTA8KDB8Rikpe2k9MDwoMHxsKSxrPUUrNHwwLHY9RSs4fDAsbT1FKzEyfDAsZD0wO2Rve2U9QysoMHxicigwfGFyW2I+PjJdLGQpKXwwO0E6ZG97aWYoaSl7aWYoQSlyPTA7ZWxzZSBmb3IoZj0wOzspe2lmKHk9MHxlZiguODU1NDcwMDAxNjk3NTQwMyooKDB8Y3JbZT4+MF0pKmdBW2s+PjJdKygwfGNyW2UrMT4+MF0pKmdBW3Y+PjJdKygwfGNyW2UrMj4+MF0pKmdBW20+PjJdKSksQj1aKygoMHxicigwfGFyW3A+PjJdLGQpKStmKXwwLHRyW0I+PjBdPSgwfHkpPDA/MTY6KCgwfHkpPDIxOT95OjIxOSkrMTYmMjU1LCgwfChmPWYrMXwwKSk9PSgwfGwpKWJyZWFrIEE7ZT1lK2d8MH1mb3IoO2Y9KDB8KGY9MHxlZigoMHxjcltlPj4wXSkqZ0Fbaz4+Ml0rKDB8Y3JbZSsxPj4wXSkqZ0Fbdj4+Ml0rKDB8Y3JbZSsyPj4wXSkqZ0FbbT4+Ml0pKSk8MD8wOjI1NTwoMHxmKT8tMToyNTUmZixCPVorKCgwfGJyKDB8YXJbcD4+Ml0sZCkpK3IpfDAsdHJbQj4+MF09ZiwoMHwocj1yKzF8MCkpIT0oMHxsKTspZT1lK2d8MH19d2hpbGUoMCk7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8RikpO2lmKHQpe0I9MDwoMHxsKSxtPTB8YnIoZyxXKSxnPUUrMTZ8MCxaPUUrMjB8MCxwPUUrMjR8MCxuPUUrMjh8MCx5PUUrMzJ8MCx2PUUrMzZ8MCxrPTA7ZG97aWYoQilmb3IoaT1DKygoZD0wKXxicigwfGFyW2I+PjJdLGspKXwwO049KygwfGNyW2k+PjBdKSxSPSsoMHxjcltpKzE+PjBdKSx3PSsoMHxjcltpKzI+PjBdKSxoPU4qZ0FbZz4+Ml0rUipnQVtaPj4yXSt3KmdBW3A+PjJdLHc9TipnQVtuPj4yXStSKmdBW3k+PjJdK3cqZ0Fbdj4+Ml0scj0oZj1BPyhFPTB8ZWYoaCsxMjgpLHI9KDB8aykvKDB8SSl8MCxlPSgwfGQpLygwfFcpfDAsZj1vKygoMHxicigwfGFyW0c+PjJdLHIpKStlKXwwLHRyW2Y+PjBdPSgwfEUpPDA/MDoyNTU8KDB8RSk/LTE6MjU1JkUsKDB8KGY9MHxlZih3KzEyOCkpKTwwPzA6MjU1PCgwfGYpPy0xOjI1NSZmKTooRT0wfGVmKC44NzUqaCsxMjgpLHI9KDB8aykvKDB8SSl8MCxlPSgwfGQpLygwfFcpfDAsZj1vKygoMHxicigwfGFyW0c+PjJdLHIpKStlKXwwLHRyW2Y+PjBdPSgwfEUpPDA/MDoyNTU8KDB8RSk/LTE6MjU1JkUsKDB8KGY9MHxlZiguODc1KncrMTI4KSkpPDA/MDoyNTU8KDB8Zik/LTE6MjU1JmYpLDB8YnIoMHxhcltWPj4yXSxyKSksdHJbYSsoZStyKT4+MF09ZiwhKCgwfGwpPD0oMHwoZD1kK1d8MCkpKTspaT1pK218MDtrPWsrSXwwfXdoaWxlKCgwfGspPCgwfEYpKTtpZihjJnQmMDwoMHxsKSl7ZT0wO2Rve2ZvcihmPTA7Rz1DKygoZjw8MnwzKSsoMHxicigwfGFyW2I+PjJdLGUpKSl8MCxWPVgrKCgwfGJyKDB8YXJbdT4+Ml0sZSkpK2YpfDAsdHJbVj4+MF09MHx0cltHPj4wXSwoMHwoZj1mKzF8MCkpIT0oMHxsKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfEYpKTt1cj1zfWVsc2UgdXI9c31lbHNlIHVyPXN9ZWxzZSB1cj1zfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTAsYT0wLGM9MCxsPTA7aWYodXI9KHQ9dXIpKzY0fDAsbj10KzM2fDAsZj10KzQ4fDAsbD10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMD09KC0yJihvPTB8YXJbKGE9cis0fDApPj4yXSl8MCkpcmV0dXJuIShlPTB8YXJbaSsxNj4+Ml0pfHwwfG9yW2UrOD4+MV18fDB8KGM9MHxhcltyKzE2Pj4yXSkmJjA9PSgwfHRyW2MrMTA+PjBdKT8oYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKTooYXJbbj4+Ml09MCxhclsoYz00K258MCk+PjJdPTAsMTE9PSgoYXJbOCtuPj4yXT0wKXwoZT0xMD09KDB8byk/KGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0zLHRyW2wrOD4+MF09MCx0clsoZT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbZSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbZSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09OCxhcltsKzE2Pj4yXT0wLGFyWyhlPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09Ljc1LGdBW2wrMjg+PjJdPS41LGdBW2wrMzI+PjJdPTAsTmwobixsKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSwwfGFyW2E+PjJdKTpvKSk/KGFyW2w+PjJdPTAsYXJbbCs0Pj4yXT0zLHRyW2wrOD4+MF09MSx0clsoaT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbaSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbaSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09OCxhclsoZj1sKzE2fDApPj4yXT0wLGFyWyhpPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09Ljc1LGdBW2wrMjg+PjJdPS41LChyPShnQVtsKzMyPj4yXT0wKXxhcltjPj4yXSk+Pj4wPj0oMHxhclsoZT04K258MCk+PjJdKT4+PjA/KE5sKG4sbCksMHwoZj0wfGFyW2k+PjJdKSYmZHUoZikpOihhcltyPj4yXT1hcltsPj4yXSxhcltyKzQ+PjJdPWFyW2wrND4+Ml0sYXJbcis4Pj4yXT1hcltsKzg+PjJdLGFyW3IrMTI+PjJdPWFyW2wrMTI+PjJdLGFyW3IrMTY+PjJdPWFyW2Y+PjJdLGFyW3IrMjA+PjJdPWFyW2k+PjJdLGFyW2Y+PjJdPTAsbD1sKzI0fChhcltpPj4yXT0wKSxhclsoYT1yKzI0fDApPj4yXT1hcltsPj4yXSxhclthKzQ+PjJdPWFyW2wrND4+Ml0sYXJbYSs4Pj4yXT1hcltsKzg+PjJdLGFyW2M+PjJdPXIrMzYpKTplPTgrbnwwLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbYz4+Ml0sYXJbQSs4Pj4yXT1hcltlPj4yXSxhcltlPj4yXT0wKSx2b2lkKHVyPXQpO2FyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj10fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MCxtPTA7aWYodXI9KGI9dXIpKzMyfDAsYT1iKzE2fDAsYz1iKzEyfDAsbD1iKzh8MCxrPWIrNHwwLHU9YixoPTB8YXJbKHJ8PTApPj4yXSxvPTB8YXJbaCsyND4+Ml0saD0wfGFyW2grMjg+PjJdLGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhzPWYrMTJ8MCk+PjJdPTAsYXJbcys0Pj4yXT0wLGFyW3MrOD4+Ml09MCxhcltzKzEyPj4yXT0wLGFyW3MrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LGU9Zis1MnwwLGFyWyhkPWYrNzJ8MCk+PjJdPTAsYXJbZis3Nj4+Ml09MCxhcltlPj4yXT0wLGFyW2UrND4+Ml09MCxhcltlKzg+PjJdPTAsYXJbZSsxMj4+Ml09MCxhcltmKzY4Pj4yXT1kLGFyW0E+PjJdPXMsZD0oYXJbQSs0Pj4yXT1mKSsxNnwwLGJ1KGYpLHN1KGYpLGU9MHxhcltkPj4yXSxhcltzPj4yXT1zLGFyW2Q+PjJdPWYsMHxlJiZrdShlKSxkdShmKSx5byhzLG8saCwwLDMpLGY9MTE9PSgwfGFyWzM2KygwfGFyW3I+PjJdKT4+Ml0pLEJvKHMsMCxvLGgsOCksQm8ocywxLG8saCw4KSxCbyhzLDIsbyxoLDgpLGYmJkJvKHMsNixvLGgsOCksYXJbYT4+Ml09MCxhcltjPj4yXT0wLGFyW2w+PjJdPTAsYXJbaz4+Ml09MCxyPShhclt1Pj4yXT0wKXxSbygwfGFyW3I+PjJdLDEwLHUpLG49MHxGbyhzLDAsbCksdD0wfEZvKHMsMSxhKSxkPTB8Rm8ocywyLGMpLEE9Zj8wfEZvKHMsNixrKTowLChlPTB8YXJbaSsxNj4+Ml0pfHxzcigzMjU2OSwzMjI0OCwyMTYxLDMyMjcyKSwwfG9yW2UrOD4+MV0mJnNyKDMyNTk1LDMyMjQ4LDIxNjIsMzIyNzIpLGU9MDwoMHxoKSYwPCgwfG8pLGYpe2lmKCFlKXJldHVybiB2b2lkKHVyPWIpO2Y9MDtkb3tmb3IoZT0wO209KDB8YnIoMHxhclt1Pj4yXSxmKSkrKGU8PDIpfDAsdz0wfHRyW3IrbT4+MF0sdj0wfHRyW3IrKG0rMik+PjBdLHM9MHx0cltyKyhtKzMpPj4wXSxpPW4rKCgwfGJyKDB8YXJbbD4+Ml0sZikpK2UpfDAsdHJbaT4+MF09MHx0cltyKyhtKzEpPj4wXSxpPXQrKCgwfGJyKDB8YXJbYT4+Ml0sZikpK2UpfDAsdHJbaT4+MF09dixpPWQrKCgwfGJyKDB8YXJbYz4+Ml0sZikpK2UpfDAsdHJbaT4+MF09dyxpPUErKCgwfGJyKDB8YXJbaz4+Ml0sZikpK2UpfDAsdHJbaT4+MF09cywoMHwoZT1lKzF8MCkpIT0oMHxvKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfGgpKTt1cj1ifWVsc2UgaWYoZSl7ZT0wO2Rve2ZvcihmPTA7az0oMHxicigwfGFyW3U+PjJdLGUpKSsoMypmfDApfDAsdj0wfHRyW3Iraz4+MF0sdz0wfHRyW3IrKGsrMik+PjBdLG09bisoKDB8YnIoMHxhcltsPj4yXSxlKSkrZil8MCx0clttPj4wXT0wfHRyW3IrKGsrMSk+PjBdLG09dCsoKDB8YnIoMHxhclthPj4yXSxlKSkrZil8MCx0clttPj4wXT13LG09ZCsoKDB8YnIoMHxhcltjPj4yXSxlKSkrZil8MCx0clttPj4wXT12LCgwfChmPWYrMXwwKSkhPSgwfG8pOyk7ZT1lKzF8MH13aGlsZSgoMHxlKSE9KDB8aCkpO3VyPWJ9ZWxzZSB1cj1ifSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsPTAsdT0wO2lmKHVyPShjPXVyKSs2NHwwLGE9YyszNnwwLG49Yys0OHwwLG89YywodD0wfGFyWyhyfD0wKSs0Pj4yXSk+Pj4wPDQmJjB8dHJbcis4Pj4wXSYmMD09KDB8dHJbaSs4Pj4wXSkpe2lmKGFyW2E+PjJdPTAsYXJbKHU9NCthfDApPj4yXT0wLGU9KGFyWzgrYT4+Ml09MCl8YXJbcj4+Ml0sZj1yKzl8MCx0cltuPj4wXT0wfHRyW2Y+PjBdLHRyWzErbj4+MF09MHx0cltmKzE+PjBdLHRyWzIrbj4+MF09MHx0cltmKzI+PjBdLGY9MHxhcltyKzEyPj4yXSxpPTB8YXJbcisxNj4+Ml0sKGw9MD09KDB8KHI9MHxhcltyKzIwPj4yXSkpKXx8YnUociksYXJbbz4+Ml09ZSxhcltvKzQ+PjJdPXQsdHJbbys4Pj4wXT0wLHRyWyhlPW8rOXwwKT4+MF09MHx0cltuPj4wXSx0cltlKzE+PjBdPTB8dHJbMStuPj4wXSx0cltlKzI+PjBdPTB8dHJbMituPj4wXSxhcltvKzEyPj4yXT1mLGFyW28rMTY+PjJdPWksYXJbKGU9bysyMHwwKT4+Ml09cixsfHxidShyKSxnQVtvKzI0Pj4yXT0uMTAwMDAwMDAxNDkwMTE2MTIsZ0FbbysyOD4+Ml09MCxmPTgrYXwoZ0FbbyszMj4+Ml09MCksTmwoYSxvKSwwfChlPTB8YXJbZT4+Ml0pJiZkdShlKSxhcltBPj4yXT1hclthPj4yXSxhcltBKzQ+PjJdPWFyW3U+PjJdLGFyW0ErOD4+Ml09YXJbZj4+Ml0sYXJbZj4+Ml09MCxhclt1Pj4yXT0wLGFyW2E+PjJdPTAsIWwmJihkdShyKSwwfChlPTB8YXJbYT4+Ml0pKSl7aWYoKDB8KGY9MHxhclt1Pj4yXSkpIT0oMHxlKSl7Zm9yKDtpPWYrLTM2fDAsYXJbdT4+Ml09aSwoMHwoZj0oZj0wfGFyW2YrLTE2Pj4yXSk/KGR1KGYpLDB8YXJbdT4+Ml0pOmkpKSE9KDB8ZSk7KTtlPTB8YXJbYT4+Ml19dnUoZSl9dXI9Y31lbHNlIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx1cj1jfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdD0wLG89MDt0PTB8YXJbKHJ8PTApPj4yXSxuPTB8YXJbdCsyND4+Ml0sdD0wfGFyW3QrMjg+PjJdLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhmPWkrMTJ8MCk+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2YrMTY+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LG89aSs1MnwwLGFyWyhlPWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltvPj4yXT0wLGFyW28rND4+Ml09MCxhcltvKzg+PjJdPTAsYXJbbysxMj4+Ml09MCxhcltpKzY4Pj4yXT1lLGFyW0E+PjJdPWYsQT0oYXJbQSs0Pj4yXT1pKSsxNnwwLGJ1KGkpLHN1KGkpLGU9MHxhcltBPj4yXSxhcltmPj4yXT1mLGFyW0E+PjJdPWksMHxlJiZrdShlKSxkdShpKSxvPTB8YXJbcj4+Ml0seW8oZixuLHQsMHxhcltvKzMyPj4yXSwwfGFyW28rMzY+PjJdKSwwfEVvKDB8YXJbcj4+Ml0sMCkmJk5vKGYsciwwLDApLDB8RW8oMHxhcltyPj4yXSwxKSYmTm8oZixyLDEsMSksMHxFbygwfGFyW3I+PjJdLDIpJiZObyhmLHIsMiwyKSwwfEVvKDB8YXJbcj4+Ml0sMykmJk5vKGYsciwzLDMpLDB8RW8oMHxhcltyPj4yXSw0KSYmTm8oZixyLDQsNCksMHxFbygwfGFyW3I+PjJdLDUpJiZObyhmLHIsNSw1KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGM9MCxsPTAsdT0wLGI9MDtpZih1cj0oYT11cikrNjR8MCxvPWErMzZ8MCxjPWErNDh8MCx0PWEsKG49MHxhclsocnw9MCkrND4+Ml0pPj4+MDw0JiY4PT0oMHxhcltyKzEyPj4yXSkpe2lmKGFyW28+PjJdPTAsYXJbKGI9NCtvfDApPj4yXT0wLGU9KGFyWzgrbz4+Ml09MCl8YXJbcj4+Ml0sZj0wfHRyW3IrOD4+MF0sbD1yKzl8MCx0cltjPj4wXT0wfHRyW2w+PjBdLHRyW2MrMT4+MF09MHx0cltsKzE+PjBdLHRyW2MrMj4+MF09MHx0cltsKzI+PjBdLGw9MHxhcltyKzE2Pj4yXSwodT0wPT0oMHwocj0wfGFyW3IrMjA+PjJdKSkpfHxidShyKSxpPTB8YXJbaSsxMj4+Ml0sYXJbdD4+Ml09ZSxhclt0KzQ+PjJdPW4sdHJbdCs4Pj4wXT1mLHRyWyhlPXQrOXwwKT4+MF09MHx0cltjPj4wXSx0cltlKzE+PjBdPTB8dHJbYysxPj4wXSx0cltlKzI+PjBdPTB8dHJbYysyPj4wXSxhclt0KzEyPj4yXT1pLGFyW3QrMTY+PjJdPWwsYXJbKGU9dCsyMHwwKT4+Ml09cix1fHxidShyKSxnQVt0KzI0Pj4yXT0uMjAwMDAwMDAyOTgwMjMyMjQsZ0FbdCsyOD4+Ml09MCxnQVt0KzMyPj4yXT0uNSxmPTgrb3wwLE5sKG8sdCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbz4+Ml0sYXJbQSs0Pj4yXT1hcltiPj4yXSxhcltBKzg+PjJdPWFyW2Y+PjJdLGFyW2Y+PjJdPTAsYXJbYj4+Ml09MCxhcltvPj4yXT0wLCF1JiYoZHUociksMHwoZT0wfGFyW28+PjJdKSkpe2lmKCgwfChmPTB8YXJbYj4+Ml0pKSE9KDB8ZSkpe2Zvcig7Yz1mKy0zNnwwLGFyW2I+PjJdPWMsKDB8KGY9KGY9MHxhcltmKy0xNj4+Ml0pPyhkdShmKSwwfGFyW2I+PjJdKTpjKSkhPSgwfGUpOyk7ZT0wfGFyW28+PjJdfXZ1KGUpfXVyPWF9ZWxzZSBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9YX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTAsdj0wLG09MDt1cj0oYT11cikrMTZ8MCx0PWErNHwwLG89YSxmPTB8aHUoODApLGFyW2YrND4+Ml09MCxhcltmKzg+PjJdPTAsYXJbZj4+Ml09NjIwOCxhclsobj1mKzEyfDApPj4yXT0wLGFyWzQrbj4+Ml09MCxhcls4K24+PjJdPTAsYXJbMTIrbj4+Ml09MCxhclsxNituPj4yXT0wLGFyW2YrMzI+PjJdPTMyMjE1LGFyW2YrMzY+PjJdPTAsYXJbZis0MD4+Ml09MCxhcltmKzQ0Pj4yXT05OSxhcltmKzQ4Pj4yXT05OSxlPWYrNTJ8MCxhclsodT1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbZT4+Ml09MCxhcltlKzQ+PjJdPTAsYXJbZSs4Pj4yXT0wLGFyW2UrMTI+PjJdPTAsYXJbZis2OD4+Ml09dSxhcltBPj4yXT1uLHU9KGFyW0ErND4+Ml09ZikrMTZ8MCxidShmKSxzdShmKSxlPTB8YXJbdT4+Ml0sYXJbbj4+Ml09bixhclt1Pj4yXT1mLDB8ZSYma3UoZSksZHUoZiksdT0wfGFyW3I+PjJdLHlvKG4sMHxhclt1KzI0Pj4yXSwwfGFyW3UrMjg+PjJdLDB8YXJbdSszMj4+Ml0sMHxhclt1KzM2Pj4yXSksdT1pKzEyfDAsbD02Nzk2O2Rve2lmKGU9MHxhcltsPj4yXSwwfEVvKDB8YXJbcj4+Ml0sZSkmJihCbyhuLGUsYj0wfFhvKDB8YXJbcj4+Ml0sZSkscz0wfFdvKDB8YXJbcj4+Ml0sZSksMHxhclt1Pj4yXSksZD0yNTUmKDB8Vm8oMHxhcltyPj4yXSxlKSksaz04LShkPSgwfGFyW3U+PjJdKS1kfDApfDAsaD0wfFJvKDB8YXJbcj4+Ml0sZSx0KSx3PTB8Rm8obixlLG8pLHY9KDB8YXJbbz4+Ml0pLzJ8MCxhcltvPj4yXT12LDA8KDB8cykmMDwoMHxiKSkpe0E9MHxhclt0Pj4yXSxmPTA7ZG97Zm9yKGk9MHxicihBLGYpLGM9MHxicih2LGYpLGU9MDttPTB8Y3JbaCsoaStlKT4+MF0sb3JbdysoYytlPDwxKT4+MV09bTw8ZHxtPj4+aywoMHwoZT1lKzF8MCkpIT0oMHxiKTspO2Y9ZisxfDB9d2hpbGUoKDB8ZikhPSgwfHMpKX1sPWwrNHwwfXdoaWxlKDY4MjQhPSgwfGwpKTt1cj1hfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTA7aWYodXI9KGE9dXIpKzY0fDAsbz1hKzM2fDAsZj1hKzQ4fDAsdD1hLChuPTB8YXJbKHJ8PTApKzQ+PjJdKT4+PjA8NCYmOCE9KDB8YXJbcisxMj4+Ml0pKXtpZihhcltvPj4yXT0wLGFyWyh1PTQrb3wwKT4+Ml09MCxlPShhcls4K28+PjJdPTApfGFyW3I+PjJdLGk9MHx0cltyKzg+PjBdLGM9cis5fDAsdHJbZj4+MF09MHx0cltjPj4wXSx0cltmKzE+PjBdPTB8dHJbYysxPj4wXSx0cltmKzI+PjBdPTB8dHJbYysyPj4wXSxjPTB8YXJbcisxNj4+Ml0sKGw9MD09KDB8KHI9MHxhcltyKzIwPj4yXSkpKXx8YnUociksYXJbdD4+Ml09ZSxhclt0KzQ+PjJdPW4sdHJbdCs4Pj4wXT1pLHRyWyhlPXQrOXwwKT4+MF09MHx0cltmPj4wXSx0cltlKzE+PjBdPTB8dHJbZisxPj4wXSx0cltlKzI+PjBdPTB8dHJbZisyPj4wXSxhclt0KzEyPj4yXT04LGFyW3QrMTY+PjJdPWMsYXJbKGU9dCsyMHwwKT4+Ml09cixsfHxidShyKSxnQVt0KzI0Pj4yXT0uMjAwMDAwMDAyOTgwMjMyMjQsZ0FbdCsyOD4+Ml09MCxnQVt0KzMyPj4yXT0uNSxpPTgrb3wwLE5sKG8sdCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksYXJbQT4+Ml09YXJbbz4+Ml0sYXJbQSs0Pj4yXT1hclt1Pj4yXSxhcltBKzg+PjJdPWFyW2k+PjJdLGFyW2k+PjJdPTAsYXJbdT4+Ml09MCxhcltvPj4yXT0wLCFsJiYoZHUociksMHwoZT0wfGFyW28+PjJdKSkpe2lmKCgwfChpPTB8YXJbdT4+Ml0pKSE9KDB8ZSkpe2Zvcig7Zj1pKy0zNnwwLGFyW3U+PjJdPWYsKDB8KGk9KGk9MHxhcltpKy0xNj4+Ml0pPyhkdShpKSwwfGFyW3U+PjJdKTpmKSkhPSgwfGUpOyk7ZT0wfGFyW28+PjJdfXZ1KGUpfXVyPWF9ZWxzZSBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTAsdXI9YX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYz0wLGw9MCx1PTAsYj0wLHM9MCxkPTA7dXI9KGE9dXIpKzE2fDAsdD1hKzR8MCxvPWEsaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKG49aSsxMnwwKT4+Ml09MCxhcls0K24+PjJdPTAsYXJbOCtuPj4yXT0wLGFyWzEyK24+PjJdPTAsYXJbMTYrbj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZj1pKzUyfDAsYXJbKGU9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2Y+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2krNjg+PjJdPWUsYXJbQT4+Ml09bixBPShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW0E+PjJdLGFyW24+PjJdPW4sYXJbQT4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLGY9MHxhcltyPj4yXSx5byhuLDB8YXJbZisyND4+Ml0sMHxhcltmKzI4Pj4yXSwwfGFyW2YrMzI+PjJdLDB8YXJbZiszNj4+Ml0pLGY9Njg0ODtkb3tpZihlPTB8YXJbZj4+Ml0sMHxFbygwfGFyW3I+PjJdLGUpJiYoQm8obixlLGM9MHxYbygwfGFyW3I+PjJdLGUpLGw9MHxXbygwfGFyW3I+PjJdLGUpLDgpLHU9KDI1NSYoMHxWbygwfGFyW3I+PjJdLGUpKSktOHwwLGI9MHxSbygwfGFyW3I+PjJdLGUsdCksYXJbdD4+Ml09KDB8YXJbdD4+Ml0pLzJ8MCxzPTB8Rm8obixlLG8pLDA8KDB8bCkmMDwoMHxjKSkpe2U9MDtkb3tmb3IoaT0wO2Q9YisoKDB8YnIoMHxhclt0Pj4yXSxlKSkraTw8MSl8MCxBPXMrKCgwfGJyKDB8YXJbbz4+Ml0sZSkpK2kpfDAsdHJbQT4+MF09KDB8bHJbZD4+MV0pPj4+dSwoMHwoaT1pKzF8MCkpIT0oMHxjKTspO2U9ZSsxfDB9d2hpbGUoKDB8ZSkhPSgwfGwpKX1mPWYrNHwwfXdoaWxlKDY4NzYhPSgwfGYpKTt1cj1hfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvPTA7aWYodXI9KHQ9dXIpKzQ4fDAsbj10KzM2fDAsZj10LDE9PSgwfGFyWyhyfD0wKT4+Ml0pJiYxMj09KC00JmFyW3IrND4+Ml18MCkmJjghPSgwfChvPTB8YXJbcisxMj4+Ml0pKSl7aWYoMHwoZT0wfGFyW3IrMTY+PjJdKSl7c3dpdGNoKDB8b3JbZSs4Pj4xXSl7Y2FzZSAwOmNhc2UgODpjYXNlIDExOmNhc2UgMTQ6cmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfWlmKCEoMHx0cltlKzEwPj4wXSkpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfXJldHVybiBhcltuPj4yXT0wLGFyWyhpPTQrbnwwKT4+Ml09MCxlPShhcls4K24+PjJdPTApfHRyW3IrOD4+MF0sYXJbZj4+Ml09MCxhcltmKzQ+PjJdPTEsdHJbZis4Pj4wXT1lLGFyW2YrMTI+PjJdPW8sYXJbZisxNj4+Ml09MCxhclsoZT1mKzIwfDApPj4yXT0wLGdBW2YrMjQ+PjJdPS41LGdBW2YrMjg+PjJdPTAsZ0FbZiszMj4+Ml09MCxObChuLGYpLDB8KGU9MHxhcltlPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaLHAseSxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wO2lmKHVyPSh5PXVyKSsxMTJ8MCxnPXkrOTZ8MCxhPXkrOTJ8MCxaPXkrODh8MCxwPXkrODR8MCxjPXkrODB8MCxiPXkrNDB8MCxYPXksRT0wfGFyWyhyfD0wKT4+Ml0sdj0wfGFyW0UrMjQ+PjJdLG09MHxhcltFKzI4Pj4yXSxFPTI1NSYoMHxWbyhFLDEwKSksbz0xNT09KDJ8YXJbMzYrKDB8YXJbcj4+Ml0pPj4yXSksZj0wfGh1KDgwKSxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2Y+PjJdPTYyMDgsYXJbKEI9ZisxMnwwKT4+Ml09MCxhcltCKzQ+PjJdPTAsYXJbQis4Pj4yXT0wLGFyW0IrMTI+PjJdPTAsYXJbQisxNj4+Ml09MCxhcltmKzMyPj4yXT0zMjIxNSxhcltmKzM2Pj4yXT0wLGFyW2YrNDA+PjJdPTAsYXJbZis0ND4+Ml09OTksYXJbZis0OD4+Ml09OTksZT1mKzUyfDAsYXJbKEs9Zis3MnwwKT4+Ml09MCxhcltmKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2YrNjg+PjJdPUssYXJbQT4+Ml09QixLPShhcltBKzQ+PjJdPWYpKzE2fDAsYnUoZiksc3UoZiksZT0wfGFyW0s+PjJdLGFyW0I+PjJdPUIsYXJbSz4+Ml09ZiwwfGUmJmt1KGUpLGR1KGYpLHlvKEIsdixtLDAsMSksaD1vPzg6NixMPSgxK3Z8MCkvMnwwLEs9KDErbXwwKS8yfDAsQm8oQiwwLHYsbSxFKSxCbyhCLDEsTCxLLEUpLEJvKEIsMixMLEssRSksbyYmQm8oQiw2LHYsbSxFKSxhcltnPj4yXT0wLGFyW2E+PjJdPTAsYXJbWj4+Ml09MCxhcltwPj4yXT0wLHc9KGFyW2M+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMTAsZyksbj0wfEZvKEIsMCxhKSxMPTB8Rm8oQiwxLFopLEs9MHxGbyhCLDIscCkseD1vPzB8Rm8oQiw2LGMpOjAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCxhcltaPj4yXT0oMHxhcltaPj4yXSkvMnwwLGFyW3A+PjJdPSgwfGFyW3A+PjJdKS8yfDAsYXJbYz4+Ml09KDB8YXJbYz4+Ml0pLzJ8MCxsPTE8PEUrLTEsdT0oaz0xPDxFKS0xfDAsUD0wfGFyW3I+PjJdLHM9MSYodD0xNT09KDF8YXJbUCszNj4+Ml0pKSxlPTB8YXJbUCs0MD4+Ml0sKGQ9MD09KDB8KFA9MHxhcltQKzQ0Pj4yXSkpKXx8YnUoUCksQmUoYiksZSlmb3IoQT0wfHRyWzEwKygwfGFyW2krMTY+PjJdKT4+MF0seWUoWCwwfG9yW2UrOD4+MV0sMHxvcltlKzQ+PjFdKSxBPUE8PDI0Pj4yNCE9MCxlPVgsZj0oQj1iKSs0MHwwO2FyW0I+PjJdPWFyW2U+PjJdLGU9ZSs0fDAsKDB8KEI9Qis0fDApKTwoMHxmKTspO2Vsc2UgQT0xO2lmKHI9MDwoMHxtKSl7WD0wPCgwfHYpLGk9MV5zLEc9dD8zOjIsVj0zXnMsRj10PzU6NCxSPTUtc3wwLE49NCtifDAsXz04K2J8MCxZPTEyK2J8MCxRPXQ/Nzo2LEQ9N15zLEo9NjU1MzUmdSxFPTA7ZG97aWYoWClpZihXPStnQVtOPj4yXSxJPStnQVtfPj4yXSxDPStnQVtZPj4yXSxNPTB8YnIoMHxhcltnPj4yXSxFKSxBKWZvcihmPTA7Qj13KyhNKygwfGJyKGYsaCkpKXwwLGU9KDB8KGU9MHxlZigoKDB8Y3JbQitzPj4wXSk8PDh8MHxjcltCK2k+PjBdfDApKlcrKCgwfGNyW0IrRz4+MF0pPDw4fDB8Y3JbQitWPj4wXXwwKSpJKygoMHxjcltCK0Y+PjBdKTw8OHwwfGNyW0IrUj4+MF18MCkqQykpKTwwPzA6KDB8ZSk8KDB8ayk/NjU1MzUmZTpKLHE9bisoKDB8YnIoMHxhclthPj4yXSxFKSkrZjw8MSl8MCxvcltxPj4xXT1lLG8mJihxPXgrKCgwfGJyKDB8YXJbYz4+Ml0sRSkpK2Y8PDEpfDAsb3JbcT4+MV09KDB8Y3JbQitRPj4wXSk8PDh8MHxjcltCK0Q+PjBdKSwoMHwoZj1mKzF8MCkpIT0oMHx2KTspO2Vsc2UgZm9yKGY9MDtCPXcrKE0rKDB8YnIoZixoKSkpfDAsZT0oMHwoZT0wfGVmKC44NTU0NzAwMDE2OTc1NDAzKigoKDB8Y3JbQitzPj4wXSk8PDh8MHxjcltCK2k+PjBdfDApKlcrKCgwfGNyW0IrRz4+MF0pPDw4fDB8Y3JbQitWPj4wXXwwKSpJKygoMHxjcltCK0Y+PjBdKTw8OHwwfGNyW0IrUj4+MF18MCkqQykrMTYpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6SixxPW4rKCgwfGJyKDB8YXJbYT4+Ml0sRSkpK2Y8PDEpfDAsb3JbcT4+MV09ZSxvJiYocT14KygoMHxicigwfGFyW2M+PjJdLEUpKStmPDwxKXwwLG9yW3E+PjFdPSgwfGNyW0IrUT4+MF0pPDw4fDB8Y3JbQitEPj4wXSksKDB8KGY9ZisxfDApKSE9KDB8dik7KTtFPUUrMXwwfXdoaWxlKCgwfEUpIT0oMHxtKSk7aWYocil7RD0wPCgwfHYpLEo9MV5zLE09dD8zOjIseD0zXnMsVj10PzU6NCxGPTUtc3wwLFI9MTYrYnwwLE49MjArYnwwLF89MjQrYnwwLFk9MjgrYnwwLFE9MzIrYnwwLEc9MzYrYnwwLEg9Kyg2NTUzNSZsfDApLHI9NjU1MzUmdSxFPTA7ZG97aWYoRClpZihYPSgwfEUpLzJ8MCxUPStnQVtSPj4yXSxVPStnQVtOPj4yXSxTPStnQVtfPj4yXSxPPStnQVtZPj4yXSx6PStnQVtRPj4yXSxqPStnQVtHPj4yXSxpPTB8YnIoMHxhcltnPj4yXSxFKSxBKWZvcihCPTA7ZT13KyhpKygwfGJyKEIsaCkpKXwwLGU9KDB8KGU9MHxlZihIKygoVz0rKCgwfGNyW2Urcz4+MF0pPDw4fDB8Y3JbZStKPj4wXXwwKSkqVCsoST0rKCgwfGNyW2UrTT4+MF0pPDw4fDB8Y3JbZSt4Pj4wXXwwKSkqVSsoQz0rKCgwfGNyW2UrVj4+MF0pPDw4fDB8Y3JbZStGPj4wXXwwKSkqUykpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6cixmPSgwfEIpLzJ8MCxxPUwrKCgwfGJyKDB8YXJbWj4+Ml0sWCkpK2Y8PDEpfDAsb3JbcT4+MV09ZSxlPSgwfChlPTB8ZWYoSCsoVypPK0kqeitDKmopKSkpPDA/MDooMHxlKTwoMHxrKT82NTUzNSZlOnIscT1LKygoMHxicigwfGFyW3A+PjJdLFgpKStmPDwxKXwwLG9yW3E+PjFdPWUsKDB8KEI9QisyfDApKTwoMHx2KTspO2Vsc2UgZm9yKEI9MDtlPXcrKGkrKDB8YnIoQixoKSkpfDAsZT0oMHwoZT0wfGVmKEgrLjg1NTQ3MDAwMTY5NzU0MDMqKChXPSsoKDB8Y3JbZStzPj4wXSk8PDh8MHxjcltlK0o+PjBdfDApKSpUKyhJPSsoKDB8Y3JbZStNPj4wXSk8PDh8MHxjcltlK3g+PjBdfDApKSpVKyhDPSsoKDB8Y3JbZStWPj4wXSk8PDh8MHxjcltlK0Y+PjBdfDApKSpTKSkpKTwwPzA6KDB8ZSk8KDB8ayk/NjU1MzUmZTpyLGY9KDB8QikvMnwwLHE9TCsoKDB8YnIoMHxhcltaPj4yXSxYKSkrZjw8MSl8MCxvcltxPj4xXT1lLGU9KDB8KGU9MHxlZihIKy44NTU0NzAwMDE2OTc1NDAzKihXKk8rSSp6K0MqaikpKSk8MD8wOigwfGUpPCgwfGspPzY1NTM1JmU6cixxPUsrKCgwfGJyKDB8YXJbcD4+Ml0sWCkpK2Y8PDEpfDAsb3JbcT4+MV09ZSwoMHwoQj1CKzJ8MCkpPCgwfHYpOyk7RT1FKzJ8MH13aGlsZSgoMHxFKTwoMHxtKSl9fXVyPShkfHxkdShQKSx5KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wO2lmKHVyPSh0PXVyKSs2NHwwLG49dCszNnwwLGY9dCs0OHwwLGw9dCwwPT0oMHxhclsocnw9MCk+PjJdKSYmMT09KDB8YXJbcis0Pj4yXSkmJjghPSgwfChvPTB8YXJbKGE9cisxMnwwKT4+Ml0pKSl7ZT0wfGFyW3IrMTY+PjJdO0E6ZG97aWYoMHxlKXtzd2l0Y2goMHxvcltlKzg+PjFdKXtjYXNlIDA6Y2FzZSA4OmNhc2UgMTE6Y2FzZSAxNDpicmVhaztkZWZhdWx0OmJyZWFrIEF9cmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCx2b2lkKHVyPXQpfX13aGlsZSgwKTtyZXR1cm4gYXJbbj4+Ml09MCxhclsoYz00K258MCk+PjJdPTAsZT0oYXJbOCtuPj4yXT0wKXx0clsoaT1yKzh8MCk+PjBdLGFyW2w+PjJdPTEsYXJbbCs0Pj4yXT1lPDwyND4+MjQ/MTU6MTQsdHJbbCs4Pj4wXT1lLGFyW2wrMTI+PjJdPW8sYXJbbCsxNj4+Ml09MCxhclsoZT1sKzIwfDApPj4yXT0wLGdBW2wrMjQ+PjJdPS41LGdBW2wrMjg+PjJdPTAscj04K258KGdBW2wrMzI+PjJdPTApLE5sKG4sbCksMHwoZT0wfGFyW2U+PjJdKSYmZHUoZSksaT0wfHRyW2k+PjBdLGU9MHxhclthPj4yXSxhcltsPj4yXT0xLGFyW2wrND4+Ml09aTw8MjQ+PjI0PzEzOjEyLHRyW2wrOD4+MF09aSx0clsoaT1sKzl8MCk+PjBdPTB8dHJbZj4+MF0sdHJbaSsxPj4wXT0wfHRyW2YrMT4+MF0sdHJbaSsyPj4wXT0wfHRyW2YrMj4+MF0sYXJbbCsxMj4+Ml09ZSxhclsoZT1sKzE2fDApPj4yXT0wLGFyWyhpPWwrMjB8MCk+PjJdPTAsZ0FbbCsyND4+Ml09LjUsZ0FbbCsyOD4+Ml09MCwoZj0oZ0FbbCszMj4+Ml09MCl8YXJbYz4+Ml0pPj4+MD49KDB8YXJbcj4+Ml0pPj4+MD8oTmwobixsKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSk6KGFyW2Y+PjJdPWFyW2w+PjJdLGFyW2YrND4+Ml09YXJbbCs0Pj4yXSxhcltmKzg+PjJdPWFyW2wrOD4+Ml0sYXJbZisxMj4+Ml09YXJbbCsxMj4+Ml0sYXJbZisxNj4+Ml09YXJbZT4+Ml0sYXJbZisyMD4+Ml09YXJbaT4+Ml0sYXJbZT4+Ml09MCxsPWwrMjR8KGFyW2k+PjJdPTApLGFyWyhhPWYrMjR8MCk+PjJdPWFyW2w+PjJdLGFyW2ErND4+Ml09YXJbbCs0Pj4yXSxhclthKzg+PjJdPWFyW2wrOD4+Ml0sYXJbYz4+Ml09ZiszNiksYXJbQT4+Ml09YXJbbj4+Ml0sYXJbQSs0Pj4yXT1hcltjPj4yXSxhcltBKzg+PjJdPWFyW3I+PjJdLHZvaWQodXI9dCl9YXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wLHVyPXR9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG8sYSxjLGwsdSxiLHMsZCxrLGgsdyx2LG0sZyxaPTAscD0wLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTA7aWYodXI9KGc9dXIpKzY0fDAsaz1nKzU2fDAsaD1nKzUyfDAsdz1nKzQ4fDAsdj1nKzQ0fDAsbT1nKzQwfDAsQj1nKzIwfDAscD1nLHk9MHxhclsocnw9MCk+PjJdLGI9MHxhclt5KzI0Pj4yXSxzPTB8YXJbeSsyOD4+Ml0seT0yNTUmKDB8Vm8oeSwwKSksZD0wfEVvKDB8YXJbcj4+Ml0sNiksdT0xJihYPTE1PT0oMXxhclsoZj1pKzR8MCk+PjJdKSksVz1YPDwzMT4+MzEsaT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKFo9aSsxMnwwKT4+Ml09MCxhcltaKzQ+PjJdPTAsYXJbWis4Pj4yXT0wLGFyW1orMTI+PjJdPTAsYXJbWisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksZT1pKzUyfDAsYXJbKGo9aSs3MnwwKT4+Ml09MCxhcltpKzc2Pj4yXT0wLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT0wLGFyW2UrOD4+Ml09MCxhcltlKzEyPj4yXT0wLGFyW2krNjg+PjJdPWosYXJbQT4+Ml09WixqPShhcltBKzQ+PjJdPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW2o+PjJdLGFyW1o+PjJdPVosYXJbaj4+Ml09aSwwfGUmJmt1KGUpLGR1KGkpLHlvKFosYixzLDEsMHxhcltmPj4yXSksaj1kPzg6NixCbyhaLDEwLGIscyx5KSxkJiZCbyhaLDYsYixzLHkpLGFyW2s+PjJdPTAsYXJbaD4+Ml09MCxhclt3Pj4yXT0wLGFyW3Y+PjJdPTAsdD0oYXJbbT4+Ml09MCl8Rm8oWiwxMCxrKSxvPTB8Um8oMHxhcltyPj4yXSwwLGgpLGE9MHxSbygwfGFyW3I+PjJdLDEsdyksYz0wfFJvKDB8YXJbcj4+Ml0sMix2KSx6PWQ/MHxSbygwfGFyW3I+PjJdLDYsbSk6MCxmPShsPTE8PHkpLTF8MCxaZShCKSxPPTB8YXJbcj4+Ml0sZT0wfGFyW08rNDA+PjJdLChuPTA9PSgwfChPPTB8YXJbTys0ND4+Ml0pKSl8fGJ1KE8pLFU9ZT8oVT0wfHRyW2UrMTA+PjBdLHBlKHAsMHxvcltlKzg+PjFdLDB8b3JbZSs0Pj4xXSksYXJbQj4+Ml09YXJbcD4+Ml0sYXJbQis0Pj4yXT1hcltwKzQ+PjJdLGFyW0IrOD4+Ml09YXJbcCs4Pj4yXSxhcltCKzEyPj4yXT1hcltwKzEyPj4yXSxhcltCKzE2Pj4yXT1hcltwKzE2Pj4yXSxVPDwyND4+MjQhPTApOjEsMDwoMHxzKSl7Uz0wPCgwfGIpLEQ9MTw8eSstMSxKPUIrNHwwLE09Qis4fDAsVD1CKzEyfDAsRj1CKzE2fDAsUj1YPzM6MixOPVg/NTo0LF89VysxfDAsWT1XKzN8MCxRPVcrNXwwLFY9WD83OjYsVz1XKzd8MCxHPTI1NSZmLFg9KDY1NTM1JmYpPj4+OCYyNTUseT0wO2Rve2lmKFMpZm9yKEI9KDB8eSkvMnwwLHA9MDtlPW8rKCgoMHxicigwfGFyW2g+PjJdLHkpKS8yfDApK3A8PDEpfDAsST0rKDB8bHJbZT4+MV0pLGU9KDB8cCkvMnwwLHI9YSsoKCgwfGJyKDB8YXJbdz4+Ml0sQikpLzJ8MCkrZTw8MSl8MCxDPSsoKDB8bHJbcj4+MV0pLUR8MCksZT1jKygoKDB8YnIoMHxhclt2Pj4yXSxCKSkvMnwwKStlPDwxKXwwLEU9KygoMHxscltlPj4xXSktRHwwKSxDPVU/QzoxLjE0Mjg5OTk5MDA4MTc4NypDLEU9VT9FOjEuMTQyODk5OTkwMDgxNzg3KkUsQT0wPD0oMHwoZT0wfGVmKChJPVU/SToxLjE2ODkwMDAxMjk2OTk3MDcqKEkrLTE2KSkrZ0FbSj4+Ml0qRSkpKT8oMHxlKTwoMHxsKT8ocj0yNTUmZSwoNjU1MzUmZSk+Pj44JjI1NSk6KHI9RyxYKTpyPTAsaT0wPD0oMHwoZT0wfGVmKEkrQypnQVtNPj4yXS1FKmdBW1Q+PjJdKSkpPygwfGUpPCgwfGwpPyhaPTI1NSZlLCg2NTUzNSZlKT4+PjgmMjU1KTooWj1HLFgpOlo9MCxlPTA8PSgwfChlPTB8ZWYoSStDKmdBW0Y+PjJdKSkpPygwfGUpPCgwfGwpPyhmPTI1NSZlLCg2NTUzNSZlKT4+PjgmMjU1KTooZj1HLFgpOmY9MCx4PXQrKCgoSD0wfGJyKHAsaikpfHUpKygwfGJyKDB8YXJbaz4+Ml0seSkpKXwwLHRyW3g+PjBdPUEsQT10KyhSK0grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbQT4+MF09aSxBPXQrKE4rSCsoMHxicigwfGFyW2s+PjJdLHkpKSl8MCx0cltBPj4wXT1lLEE9dCsoXytIKygwfGJyKDB8YXJbaz4+Ml0seSkpKXwwLHRyW0E+PjBdPXIscj10KyhZK0grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbcj4+MF09WixyPXQrKFErSCsoMHxicigwfGFyW2s+PjJdLHkpKSl8MCx0cltyPj4wXT1mLGQmJihyPXorKCgoMHxicigwfGFyW20+PjJdLHkpKS8yfDApK3A8PDEpfDAsSD10KygoVnwoeD1wPDwzKSkrKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbSD4+MF09KDB8bHJbcj4+MV0pPj4+OCxIPXorKCgoMHxicigwfGFyW20+PjJdLHkpKS8yfDApK3A8PDEpfDAseD10KyhXK3grKDB8YnIoMHxhcltrPj4yXSx5KSkpfDAsdHJbeD4+MF09b3JbSD4+MV0pLCgwfChwPXArMXwwKSkhPSgwfGIpOyk7eT15KzF8MH13aGlsZSgoMHx5KSE9KDB8cykpfXVyPShufHxkdShPKSxnKX0sZnVuY3Rpb24oQSxlLHIsaSxmKXt2YXIgbix0O3JldHVybiBBfD0wLGV8PTAsaXw9MCxmfD0wLHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGU9dCw4PT0oMHwoaT0wfGFyWyhyfD0wKSsxMj4+Ml0pKXx8MHxhcltyPj4yXT8oYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKTooYXJbbj4+Ml09MCxhclsoZj00K258MCk+PjJdPTAscj0oYXJbOCtuPj4yXT0wKXx0cltyKzg+PjBdLGFyW2U+PjJdPTEsYXJbZSs0Pj4yXT0zLHRyW2UrOD4+MF09cixhcltlKzEyPj4yXT1pLGFyW2UrMTY+PjJdPTAsYXJbKHI9ZSsyMHwwKT4+Ml09MCxnQVtlKzI0Pj4yXT0uNSxnQVtlKzI4Pj4yXT0wLGdBW2UrMzI+PjJdPTAsTmwobixlKSwwfChlPTB8YXJbcj4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2Y+PjJdLGFyW0ErOD4+Ml09YXJbOCtuPj4yXSksdm9pZCh1cj10KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5LEIsRSxYLFcsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wLGZBPTAsbkE9MDtpZih1cj0oVz11cikrODB8MCxwPVcrNjh8MCx5PVcrNjR8MCxCPVcrNjB8MCxFPVcrNTZ8MCxYPVcrNTJ8MCx2PVcrNDh8MCxtPVcrNDR8MCxnPVcrNDB8MCxSPVcrMjB8MCxWPVcsZT0wfGFyWyhyfD0wKT4+Ml0sRz0wfGFyW2UrMzY+PjJdLEY9MjU1JihlPTB8Vm8oZSwwKSksaT0wfFZvKDB8YXJbcj4+Ml0sMSksZj0wfFZvKDB8YXJbcj4+Ml0sMiksST0oWj0wfEVvKDB8YXJbcj4+Ml0sNikpPzI1NSYoMHxWbygwfGFyW3I+PjJdLDYpKTowLGU8PDI0Pj4yND09OHxpPDwyND4+MjQ9PTh8Zjw8MjQ+PjI0PT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPVcpO2lmKGU8PDI0Pj4yNCE9aTw8MjQ+PjI0fHxlPDwyND4+MjQhPWY8PDI0Pj4yNClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj1XKTtpZihlPTB8YXJbcj4+Ml0sQz0wfGFyW2UrNDA+PjJdLCh3PTA9PSgwfChoPTB8YXJbZSs0ND4+Ml0pKSl8fChidShoKSxlPTB8YXJbcj4+Ml0pLGs9MHxhcltlKzI0Pj4yXSxkPTB8YXJbZSsyOD4+Ml0saT0wfGh1KDgwKSxhcltpKzQ+PjJdPTAsYXJbaSs4Pj4yXT0wLGFyW2k+PjJdPTYyMDgsYXJbKGY9aSsxMnwwKT4+Ml09MCxhcltmKzQ+PjJdPTAsYXJbZis4Pj4yXT0wLGFyW2YrMTI+PjJdPTAsYXJbZisxNj4+Ml09MCxhcltpKzMyPj4yXT0zMjIxNSxhcltpKzM2Pj4yXT0wLGFyW2krNDA+PjJdPTAsYXJbaSs0ND4+Ml09OTksYXJbaSs0OD4+Ml09OTksbkE9aSs1MnwwLGFyWyhmQT1pKzcyfDApPj4yXT0wLGFyW2krNzY+PjJdPTAsYXJbbkE+PjJdPTAsYXJbbkErND4+Ml09MCxhcltuQSs4Pj4yXT0wLGFyW25BKzEyPj4yXT0wLGFyW2krNjg+PjJdPWZBLGZBPWYsaUE9KG5BPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW2lBPj4yXSxhcltmPj4yXT1mQSxhcltpQT4+Ml09bkEsMHxlJiZrdShlKSxkdShpKSx5byhmLGssZCwxLDMpLEJvKGYsMyxrLGQsRiksQm8oZiw0LGssZCxGKSxCbyhmLDUsayxkLEYpLFomJkJvKGYsNixrLGQsSSksYXJbcD4+Ml09MCxhclt5Pj4yXT0wLGFyW0I+PjJdPTAsYXJbRT4+Ml09MCxhcltYPj4yXT0wLGFyW3Y+PjJdPTAsYXJbbT4+Ml09MCxjPShhcltnPj4yXT0wKXxSbygwfGFyW3I+PjJdLDAscCksbD0wfFJvKDB8YXJbcj4+Ml0sMSx5KSx1PTB8Um8oMHxhcltyPj4yXSwyLEIpLGI9MHxGbyhmLDMsWCkscz0wfEZvKGYsNCx2KSxpQT0wfEZvKGYsNSxtKSxlQT1aPyhyQT0wfFJvKDB8YXJbcj4+Ml0sNixFKSwwfEZvKGYsNixnKSk6ckE9MCxvPSh0PTE8PEYpLTF8MCxhPSgyNTUmKDB8Z28oRykpKS0xfDAsbj0oMjU1JigwfFpvKEcpKSktMXwwLGFyW3A+PjJdPSgwfGFyW3A+PjJdKS8yfDAsYXJbeT4+Ml09KDB8YXJbeT4+Ml0pLzJ8MCxhcltCPj4yXT0oMHxhcltCPj4yXSkvMnwwLGFyW0U+PjJdPSgwfGFyW0U+PjJdKS8yfDAsYXJbWD4+Ml09KDB8YXJbWD4+Ml0pLzJ8MCxhclt2Pj4yXT0oMHxhclt2Pj4yXSkvMnwwLGFyW20+PjJdPSgwfGFyW20+PjJdKS8yfDAsYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLzJ8MCxaZShSKSxDPyhlPTB8b3JbQys4Pj4xXSxLPTB8dHJbQysxMD4+MF0scGUoVixlLDB8b3JbQys0Pj4xXSksYXJbUj4+Ml09YXJbVj4+Ml0sYXJbUis0Pj4yXT1hcltWKzQ+PjJdLGFyW1IrOD4+Ml09YXJbVis4Pj4yXSxhcltSKzEyPj4yXT1hcltWKzEyPj4yXSxhcltSKzE2Pj4yXT1hcltWKzE2Pj4yXSxLPUs8PDI0Pj4yNCE9MCxlJj02NTUzNSk6KEs9MSxlPTIpLDA8KDB8ZCkpe3E9MDwoMHxrKSwkPWs8PDEsQUE9MD09KDB8ZSksTD04PT0oMHxlKSxqPTE8PEYrLTEmNjU1MzUsSD1SKzR8MCx4PVIrOHwwLFA9UisxMnwwLEY9UisxNnwwLEc9MDtkb3tpZihxKXtEPUc+Pm4sUj0wfGJyKDB8YXJbeT4+Ml0sRCksUT0wfGJyKDB8YXJbcD4+Ml0sRyksRD0wfGJyKDB8YXJbQj4+Ml0sRCksSj0wfGJyKDB8YXJbWD4+Ml0sRyksTT0wfGJyKDB8YXJbbT4+Ml0sRyksVD0wfGJyKDB8YXJbdj4+Ml0sRyksVT0rZ0FbSD4+Ml0sUz0rZ0FbeD4+Ml0sTz0rZ0FbUD4+Ml0sej0rZ0FbRj4+Ml0sVj0wO2Rve0M9UisoZT1WPj5hKXwwLHI9UStWfDAsZT0wfG9yW3UrKEQrZTw8MSk+PjFdO2Rve2lmKEFBKXtpZihpPU0rVnwwLGY9SitWfDAsST1UK1Z8MCxLKXtvcltiKyhmPDwxKT4+MV09ZSxvcltzKyhJPDwxKT4+MV09MHxvcltjKyhyPDwxKT4+MV0sZT0wfG9yW2wrKEM8PDEpPj4xXTticmVha31vcltiKyhmPDwxKT4+MV09MTYrKCgxMjgrKDIxOSooNjU1MzUmZSl8MCl8MCk+Pj44KSxvcltzKyhJPDwxKT4+MV09MTYrKCgxMjgrKDIxOSooMHxscltjKyhyPDwxKT4+MV0pfDApfDApPj4+OCksZT0xNisoKDEyOCsoMjE5KigwfGxyW2wrKEM8PDEpPj4xXSl8MCl8MCk+Pj44KSY2NTUzNTticmVha31pZihmPSg2NTUzNSZlKS1qfDAsaT0wfG9yW2MrKHI8PDEpPj4xXSxlPSgwfGxyW2wrKEM8PDEpPj4xXSktanwwLEwpe3I9KGk9KEM9NjU1MzUmaSktZXwwKStmfDAsb3JbYisoSitWPDwxKT4+MV09KDB8cik8MD8wOjI1NTwoMHxyKT8yNTU6MjU1JnIsZT1DK2V8MCxvcltzKyhUK1Y8PDEpPj4xXT0oMHxlKTwwPzA6MjU1PCgwfGUpPzI1NToyNTUmZSxlPSgwfChlPWktZnwwKSk8MD8wOjI1NTwoMHxlKT8yNTU6MjU1JmUsaT1NK1Z8MDticmVha31fPSsoNjU1MzUmaSksWT0rKDB8ZSksTj0rKDB8ZiksWT1LP1k6MS4xNDI4OTk5OTAwODE3ODcqWSxlPSgwfChlPTB8ZWYoKF89Sz9fOjEuMTY4OTAwMDEyOTY5OTcwNyooXystMTYpKSsoTj1LP046MS4xNDI4OTk5OTAwODE3ODcqTikqVSkpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfHQpP2U6byksb3JbYisoSitWPDwxKT4+MV09ZSxlPSgwfChlPTB8ZWYoXytZKlMrTipPKSkpPDA/MDo2NTUzNSYoKDB8ZSk8KDB8dCk/ZTpvKSxvcltzKyhUK1Y8PDEpPj4xXT1lLGU9KDB8KGU9MHxlZihfK1kqeikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfHQpP2U6byksaT1NK1Z8MH13aGlsZSgwKTtvcltpQSsoaTw8MSk+PjFdPWUsVj1WKzF8MH13aGlsZSgoMHxWKSE9KDB8aykpfVomJmhiKDB8KFQ9ZUErKCgwfGJyKDB8YXJbZz4+Ml0sRykpPDwxKXwwKSxyQSsoKDB8YnIoMHxhcltFPj4yXSxHKSk8PDEpfDAsMHwkKSxHPUcrMXwwfXdoaWxlKCgwfEcpIT0oMHxkKSl9YXJbQT4+Ml09ZkEsYXJbQSs0Pj4yXT1uQSx1cj0od3x8ZHUoaCksVyl9LGZ1bmN0aW9uKEEsZSxyLGksZil7dmFyIG47cmV0dXJuIEF8PTAsZXw9MCxpfD0wLGZ8PTAsdXI9KG49dXIpKzQ4fDAsZj1uKzM2fDAsZT1uLDghPSgwfGFyWyhyfD0wKSsxMj4+Ml0pfHwwfGFyW3I+PjJdPyhhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxhcltBKzg+PjJdPTApOihhcltmPj4yXT0wLGFyWyhpPWYrNHwwKT4+Ml09MCxyPShhcltmKzg+PjJdPTApfHRyW3IrOD4+MF0sYXJbZT4+Ml09MSxhcltlKzQ+PjJdPTMsdHJbZSs4Pj4wXT1yLGFyW2UrMTI+PjJdPTgsYXJbZSsxNj4+Ml09MCxhclsocj1lKzIwfDApPj4yXT0wLGdBW2UrMjQ+PjJdPS41LGdBW2UrMjg+PjJdPTAsZ0FbZSszMj4+Ml09MCxObChmLGUpLDB8KGU9MHxhcltyPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW2Y+PjJdLGFyW0ErND4+Ml09YXJbaT4+Ml0sYXJbQSs4Pj4yXT1hcltmKzg+PjJdKSx2b2lkKHVyPW4pfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHksQixFLFgsVyxJPTAsQz0wLEc9MCxWPTAsRj0wLFI9MCxOPTAsXz0wLFk9MCxRPTAsRD0wLEo9MCxNPTAsVD0wLFU9MCxTPTAsTz0wLHo9MCxqPTAsSD0wLHg9MCxQPTAsTD0wO2lmKHVyPShXPXVyKSs4MHwwLHA9Vys2OHwwLHk9Vys2NHwwLEI9Vys2MHwwLEU9Vys1NnwwLFg9Vys1MnwwLHY9Vys0OHwwLG09Vys0NHwwLGc9Vys0MHwwLFk9VysyMHwwLFY9VyxlPTB8YXJbKHJ8PTApPj4yXSxHPTB8YXJbZSszNj4+Ml0sXz0yNTUmKGU9MHxWbyhlLDApKSxpPTB8Vm8oMHxhcltyPj4yXSwxKSxmPTB8Vm8oMHxhcltyPj4yXSwyKSxJPShaPTB8RW8oMHxhcltyPj4yXSw2KSk/MjU1JigwfFZvKDB8YXJbcj4+Ml0sNikpOjAsZTw8MjQ+PjI0IT04fGk8PDI0Pj4yNCE9OHxmPDwyND4+MjQhPTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9Vyk7aWYoZT0wfGFyW3I+PjJdLEM9MHxhcltlKzQwPj4yXSwodz0wPT0oMHwoaD0wfGFyW2UrNDQ+PjJdKSkpfHwoYnUoaCksZT0wfGFyW3I+PjJdKSxrPTB8YXJbZSsyND4+Ml0sZD0wfGFyW2UrMjg+PjJdLGk9MHxodSg4MCksYXJbaSs0Pj4yXT0wLGFyW2krOD4+Ml09MCxhcltpPj4yXT02MjA4LGFyWyhmPWkrMTJ8MCk+PjJdPTAsYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmKzEyPj4yXT0wLGFyW2YrMTY+PjJdPTAsYXJbaSszMj4+Ml09MzIyMTUsYXJbaSszNj4+Ml09MCxhcltpKzQwPj4yXT0wLGFyW2krNDQ+PjJdPTk5LGFyW2krNDg+PjJdPTk5LFA9aSs1MnwwLGFyWyh4PWkrNzJ8MCk+PjJdPTAsYXJbaSs3Nj4+Ml09MCxhcltQPj4yXT0wLGFyW1ArND4+Ml09MCxhcltQKzg+PjJdPTAsYXJbUCsxMj4+Ml09MCxhcltpKzY4Pj4yXT14LHg9ZixIPShQPWkpKzE2fDAsYnUoaSksc3UoaSksZT0wfGFyW0g+PjJdLGFyW2Y+PjJdPXgsYXJbSD4+Ml09UCwwfGUmJmt1KGUpLGR1KGkpLHlvKGYsayxkLDEsMyksQm8oZiwzLGssZCxfKSxCbyhmLDQsayxkLF8pLEJvKGYsNSxrLGQsXyksWiYmQm8oZiw2LGssZCxJKSxhcltwPj4yXT0wLGFyW3k+PjJdPTAsYXJbQj4+Ml09MCxhcltFPj4yXT0wLGFyW1g+PjJdPTAsYXJbdj4+Ml09MCxhclttPj4yXT0wLGM9KGFyW2c+PjJdPTApfFJvKDB8YXJbcj4+Ml0sMCxwKSxsPTB8Um8oMHxhcltyPj4yXSwxLHkpLHU9MHxSbygwfGFyW3I+PjJdLDIsQiksYj0wfEZvKGYsMyxYKSxzPTB8Rm8oZiw0LHYpLEg9MHxGbyhmLDUsbSksej1aPyhqPTB8Um8oMHxhcltyPj4yXSw2LEUpLDB8Rm8oZiw2LGcpKTpqPTAsbz0odD0xPDxfKS0xfDAsYT0oMjU1JigwfGdvKEcpKSktMXwwLG49KDI1NSYoMHxabyhHKSkpLTF8MCxaZShZKSxDPyhlPTB8b3JbQys4Pj4xXSxUPTB8dHJbQysxMD4+MF0scGUoVixlLDB8b3JbQys0Pj4xXSksYXJbWT4+Ml09YXJbVj4+Ml0sYXJbWSs0Pj4yXT1hcltWKzQ+PjJdLGFyW1krOD4+Ml09YXJbVis4Pj4yXSxhcltZKzEyPj4yXT1hcltWKzEyPj4yXSxhcltZKzE2Pj4yXT1hcltWKzE2Pj4yXSxUPVQ8PDI0Pj4yNCE9MCxlJj02NTUzNSk6KFQ9MSxlPTIpLDA8KDB8ZCkpe1U9MDwoMHxrKSxTPWs8PDEsTz0wPT0oMHxlKSxNPTg9PSgwfGUpLFE9MTw8XystMSY2NTUzNSxEPVkrNHwwLEo9WSs4fDAsXz1ZKzEyfDAsRz1ZKzE2fDAscj0wO2Rve2lmKFUpe1Y9cj4+bixDPTA7ZG97aT1DPj5hLGY9dSsoKDB8YnIoMHxhcltCPj4yXSxWKSkraSl8MCxmPTB8dHJbZj4+MF07ZG97aWYoTyl7aWYoZT0oMHxicigwfGFyW1g+PjJdLHIpKStDfDAsVCl7dHJbYitlPj4wXT1mLFk9YysoKDB8YnIoMHxhcltwPj4yXSxyKSkrQyl8MCxlPXMrKCgwfGJyKDB8YXJbdj4+Ml0scikpK0MpfDAsdHJbZT4+MF09MHx0cltZPj4wXSxlPWwrKCgwfGJyKDB8YXJbeT4+Ml0sVikpK2kpfDAsZT0wfHRyW2U+PjBdO2JyZWFrfXRyW2IrZT4+MF09MTYrKCgxMjgrKDIxOSooMjU1JmYpfDApfDApPj4+OCksWT1jKygoMHxicigwfGFyW3A+PjJdLHIpKStDKXwwLGU9cysoKDB8YnIoMHxhclt2Pj4yXSxyKSkrQyl8MCx0cltlPj4wXT0xNisoKDEyOCsoMjE5KigwfGNyW1k+PjBdKXwwKXwwKT4+PjgpLGU9bCsoKDB8YnIoMHxhclt5Pj4yXSxWKSkraSl8MCxlPTE2KygoMTI4KygyMTkqKDB8Y3JbZT4+MF0pfDApfDApPj4+OCkmMjU1O2JyZWFrfWlmKGU9MHxicigwfGFyW3k+PjJdLFYpLEk9YysoKDB8YnIoMHxhcltwPj4yXSxyKSkrQyl8MCxJPTB8dHJbST4+MF0saT0oMHxjcltsKyhlK2kpPj4wXSktUXwwLGU9KDI1NSZmKS1RfDAsTSl7TD0oWT0oZj0yNTUmSSktaXwwKStlfDAsST1iKygoMHxicigwfGFyW1g+PjJdLHIpKStDKXwwLHRyW0k+PjBdPSgwfEwpPDA/MDoyNTU8KDB8TCk/LTE6MjU1JkwsZj1pK2Z8MCxJPXMrKCgwfGJyKDB8YXJbdj4+Ml0scikpK0MpfDAsdHJbST4+MF09KDB8Zik8MD8wOjI1NTwoMHxmKT8tMToyNTUmZixlPSgwfChlPVktZXwwKSk8MD8wOjI1NTwoMHxlKT8tMToyNTUmZTticmVha31SPSsoMjU1JkkpLE49KygwfGkpLEY9KygwfGUpLE49VD9OOjEuMTQyODk5OTkwMDgxNzg3Kk4sZT0oMHwoZT0wfGVmKChSPVQ/UjoxLjE2ODkwMDAxMjk2OTk3MDcqKFIrLTE2KSkrKEY9VD9GOjEuMTQyODk5OTkwMDgxNzg3KkYpKmdBW0Q+PjJdKSkpPDA/MDoyNTUmKCgwfGUpPCgwfHQpP2U6byksTD1iKygoMHxicigwfGFyW1g+PjJdLHIpKStDKXwwLHRyW0w+PjBdPWUsZT0oMHwoZT0wfGVmKFIrTipnQVtKPj4yXStGKmdBW18+PjJdKSkpPDA/MDoyNTUmKCgwfGUpPCgwfHQpP2U6byksTD1zKygoMHxicigwfGFyW3Y+PjJdLHIpKStDKXwwLHRyW0w+PjBdPWUsZT0oMHwoZT0wfGVmKFIrTipnQVtHPj4yXSkpKTwwPzA6MjU1JigoMHxlKTwoMHx0KT9lOm8pfXdoaWxlKDApO0w9SCsoKDB8YnIoMHxhclttPj4yXSxyKSkrQyl8MCx0cltMPj4wXT1lLEM9QysxfDB9d2hpbGUoKDB8QykhPSgwfGspKX1aJiZoYigwfChMPXorKDB8YnIoMHxhcltnPj4yXSxyKSl8MCksaisoMHxicigwfGFyW0U+PjJdLHIpKXwwLDB8Uykscj1yKzF8MH13aGlsZSgoMHxyKSE9KDB8ZCkpfWFyW0E+PjJdPXgsYXJbQSs0Pj4yXT1QLHVyPSh3fHxkdShoKSxXKX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbz0wO3JldHVybiB1cj0odD11cikrNDh8MCxuPXQrMzZ8MCxlPXQsOD09KDB8YXJbKHJ8PTApKzEyPj4yXSkmJjE9PSgwfGFyW3I+PjJdKSYmMz09KDB8YXJbcis0Pj4yXSk/KGFyW24+PjJdPTAsYXJbKGY9NCtufDApPj4yXT0wLG89KGFyWzgrbj4+Ml09MCl8YXJbaSs0Pj4yXSxpPTB8dHJbcis4Pj4wXSxhcltlPj4yXT0wLGFyW2UrND4+Ml09byx0cltlKzg+PjBdPWksYXJbZSsxMj4+Ml09OCxhcltlKzE2Pj4yXT0wLGFyWyhpPWUrMjB8MCk+PjJdPTAsZ0FbZSsyND4+Ml09Ljc1LGdBW2UrMjg+PjJdPS41LGdBW2UrMzI+PjJdPTAsTmwobixlKSwwfChlPTB8YXJbaT4+Ml0pJiZkdShlKSxhcltBPj4yXT1hcltuPj4yXSxhcltBKzQ+PjJdPWFyW2Y+PjJdLGFyW0ErOD4+Ml09YXJbOCtuPj4yXSk6KGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLGFyW0ErOD4+Ml09MCksdm9pZCh1cj10KX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MCxmfD0wO3ZhciBuLHQsbyxhLGMsbCx1LGIscyxkLGssaCx3LHYsbSxnLFoscCx5PTAsQj0wLEU9MCxYPTAsVz0wLEk9MCxDPTAsRz0wLFY9MCxGPTAsUj0wLE49MCxfPTAsWT0wLFE9MCxEPTAsSj0wLE09MCxUPTAsVT0wLFM9MCxPPTAsej0wLGo9MCxIPTAseD0wO2lmKHVyPShwPXVyKSsxMTJ8MCx3PXArMTA4fDAsdj1wKzEwNHwwLFQ9cCsxMDB8MCxaPXArOTZ8MCxGPXArOTJ8MCxiPXArODh8MCxzPXArODR8MCxtPXArODB8MCxZPXArNDB8MCxYPXAsVT0wfGFyWyhyfD0wKT4+Ml0sZz0wfGFyW1UrMjQ+PjJdLFU9MHxhcltVKzI4Pj4yXSxkPTI1NSYoMHxnbyhmPTB8YXJbaSs0Pj4yXSkpLGs9MjU1JigwfFpvKGYpKSxFPTI1NSYoTz0wfFZvKDB8YXJbcj4+Ml0sMykpLE88PDI0Pj4yNCE9OClyZXR1cm4gYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsdm9pZCh1cj1wKTtpZigoaD0wfEVvKDB8YXJbcj4+Ml0sNikpJiYoMHxWbygwfGFyW3I+PjJdLDYpKTw8MjQ+PjI0IT04KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKHk9MHxodSg4MCksYXJbeSs0Pj4yXT0wLGFyW3krOD4+Ml09MCxhclt5Pj4yXT02MjA4LGFyWyhCPXkrMTJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsYXJbeSszMj4+Ml09MzIyMTUsYXJbeSszNj4+Ml09MCxhclt5KzQwPj4yXT0wLGFyW3krNDQ+PjJdPTk5LGFyW3krNDg+PjJdPTk5LE89eSs1MnwwLGFyWyhTPXkrNzJ8MCk+PjJdPTAsYXJbeSs3Nj4+Ml09MCxhcltPPj4yXT0wLGFyW08rND4+Ml09MCxhcltPKzg+PjJdPTAsYXJbTysxMj4+Ml09MCxhclt5KzY4Pj4yXT1TLFM9QixNPShPPXkpKzE2fDAsYnUoeSksc3UoeSksZT0wfGFyW00+PjJdLGFyW0I+PjJdPVMsYXJbTT4+Ml09TywwfGUmJmt1KGUpLGR1KHkpLHlvKEIsZyxVLDAsZiksSj0oZy0xK2R8MCkvKDB8ZCl8MCxNPShVKy0xK2t8MCkvKDB8ayl8MCxCbyhCLDAsZyxVLEUpLEJvKEIsMSxKLE0sRSksQm8oQiwyLEosTSxFKSxoJiZCbyhCLDYsZyxVLEUpLGFyW3c+PjJdPTAsYXJbdj4+Ml09MCxhcltUPj4yXT0wLGFyW1o+PjJdPTAsYXJbRj4+Ml09MCxhcltiPj4yXT0wLGFyW3M+PjJdPTAsYz0oYXJbbT4+Ml09MCl8Um8oMHxhcltyPj4yXSwzLHcpLGw9MHxSbygwfGFyW3I+PjJdLDQsdiksdT0wfFJvKDB8YXJbcj4+Ml0sNSxUKSxHPTB8Rm8oQiwwLEYpLEo9MHxGbyhCLDEsYiksTT0wfEZvKEIsMixzKSxRPWg/KEQ9MHxSbygwfGFyW3I+PjJdLDYsWiksMHxGbyhCLDYsbSkpOkQ9MCxuPTE8PEUrLTEsYT0obz0xPDxFKS0xfDAsQmUoWSksZT0wfGFyW2krMTY+PjJdKWZvcihyPTB8dHJbZSsxMD4+MF0seWUoWCx5PTB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLHI9cjw8MjQ+PjI0IT0wLHkmPTY1NTM1LGU9WCxmPShCPVkpKzQwfDA7YXJbQj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwoQj1CKzR8MCkpPCgwfGYpOyk7ZWxzZSB5PTIscj0xO2lmKHQ9MDwoMHxVKSl7RT0wPCgwfGcpLGk9MD09KDB8eSksWD1ZKzR8MCxJPVkrOHwwLEM9WSsxMnwwLEI9MDtkb3tBOmRve2lmKEUpe2lmKGkpZj0wO2Vsc2UgZm9yKGY9MDs7KWlmKF89bCsoKDB8YnIoMHxhclt2Pj4yXSxCKSkrZil8MCxOPWMrKCgwfGJyKDB8YXJbdz4+Ml0sQikpK2YpfDAsZT11KygoMHxicigwfGFyW1Q+PjJdLEIpKStmKXwwLFY9KDB8Y3JbTj4+MF0pKmdBW1g+PjJdKygwfGNyW18+PjBdKSpnQVtJPj4yXSsoMHxjcltlPj4wXSkqZ0FbQz4+Ml0sZT0oMHwoZT0wfGVmKHI/VjoyMTkqViouMDAzOTA2MjUrMTYpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSxfPUcrKCgwfGJyKDB8YXJbRj4+Ml0sQikpK2YpfDAsdHJbXz4+MF09ZSwoMHwoZj1mKzF8MCkpPT0oMHxnKSlicmVhayBBO2Zvcig7ZT1sKygoMHxicigwfGFyW3Y+PjJdLEIpKStmKXwwLGU9MHx0cltlPj4wXSxyfHwoZT0oMHwoZT0wfGVmKDIxOSooMjU1JmUpKi4wMDM5MDYyNSsxNikpKTwwPzA6MjU1JigoMHxlKTwoMHxvKT9lOmEpKSxfPUcrKCgwfGJyKDB8YXJbRj4+Ml0sQikpK2YpfDAsdHJbXz4+MF09ZSwoMHwoZj1mKzF8MCkpIT0oMHxnKTspO319d2hpbGUoMCk7Qj1CKzF8MH13aGlsZSgoMHxCKSE9KDB8VSkpO2lmKHQpe189MDwoMHxnKSxJPTA9PSgwfHkpLEM9WSsxNnwwLEc9WSsyMHwwLEY9WSsyNHwwLFI9WSsyOHwwLE49WSszMnwwLFg9WSszNnwwLFY9Kyg2NTUzNSZufDApLGk9MDtkb3tpZihfKWZvcihFPTA7ZT1JPyhlPXUrKCgwfGJyKDB8YXJbVD4+Ml0saSkpK0UpfDAsZT0wfHRyW2U+PjBdLHk9KGU9cj8oeT0oMHxpKS8oMHxrKXwwLGY9KDB8RSkvKDB8ZCl8MCxZPUorKCgwfGJyKDB8YXJbYj4+Ml0seSkpK2YpfDAsdHJbWT4+MF09ZSxlPWMrKCgwfGJyKDB8YXJbVD4+Ml0saSkpK0UpfDAsMHx0cltlPj4wXSk6KGU9KDB8KGU9MHxlZigyMTkqKDI1NSZlKSouMDAzOTA2MjUrMTYpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSx5PSgwfGkpLygwfGspfDAsZj0oMHxFKS8oMHxkKXwwLFk9SisoKDB8YnIoMHxhcltiPj4yXSx5KSkrZil8MCx0cltZPj4wXT1lLGU9YysoKDB8YnIoMHxhcltUPj4yXSxpKSkrRSl8MCwoMHwoZT0wfGVmKDIxOSooMHxjcltlPj4wXSkqLjAwMzkwNjI1KzE2KSkpPDA/MDoyNTUmKCgwfGUpPCgwfG8pP2U6YSkpLDB8YnIoMHxhcltiPj4yXSx5KSksQj1lLHkrZnwwKTooZT1jKygoMHxicigwfGFyW3c+PjJdLGkpKStFKXwwLHg9KygwfGNyW2U+PjBdKSxlPWwrKCgwfGJyKDB8YXJbdj4+Ml0saSkpK0UpfDAsSD0rKDB8Y3JbZT4+MF0pLGU9dSsoKDB8YnIoMHxhcltUPj4yXSxpKSkrRSl8MCxXPSsoMHxjcltlPj4wXSksej0yMjQqKGo9eCpnQVtDPj4yXStIKmdBW0c+PjJdK1cqZ0FbRj4+Ml0pKi4wMDM5MDYyNSxXPXI/eCpnQVtSPj4yXStIKmdBW04+PjJdK1cqZ0FbWD4+Ml06MjI0KnoqLjAwMzkwNjI1LGU9KDB8KGU9MHxlZihWKyhyP2o6eikpKSk8MD8wOjI1NSYoKDB8ZSk8KDB8byk/ZTphKSxmPSgwfGkpLygwfGspfDAseT0oMHxFKS8oMHxkKXwwLFk9SisoKDB8YnIoMHxhcltiPj4yXSxmKSkreSl8MCx0cltZPj4wXT1lLEI9ZT0oMHwoZT0wfGVmKFYrVykpKTwwPzA6MjU1JigoMHxlKTwoMHxvKT9lOmEpLCgwfGJyKDB8YXJbcz4+Ml0sZikpK3l8MCksdHJbTStlPj4wXT1CLCgwfChFPUUrZHwwKSk8KDB8Zyk7KTtpPWkra3wwfXdoaWxlKCgwfGkpPCgwfFUpKTtpZihoJnQpZm9yKGU9MDtoYigwfChUPVErKDB8YnIoMHxhclttPj4yXSxlKSl8MCksRCsoMHxicigwfGFyW1o+PjJdLGUpKXwwLDB8ZyksKDB8KGU9ZSsxfDApKSE9KDB8VSk7KTt9fWFyW0E+PjJdPVMsYXJbQSs0Pj4yXT1PLHVyPXB9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTAsZnw9MDt2YXIgbix0LG89MCxhPTA7cmV0dXJuIHVyPSh0PXVyKSs0OHwwLG49dCszNnwwLGU9dCw4IT0oMHwoZj0wfGFyWyhyfD0wKSsxMj4+Ml0pKSYmMT09KDB8YXJbcj4+Ml0pJiYzPT0oMHxhcltyKzQ+PjJdKT8oYXJbbj4+Ml09MCxhclsobz00K258MCk+PjJdPTAsYT0oYXJbOCtuPj4yXT0wKXxhcltpKzQ+PjJdLGk9MHx0cltyKzg+PjBdLGFyW2U+PjJdPTAsYXJbZSs0Pj4yXT1hLHRyW2UrOD4+MF09aSxhcltlKzEyPj4yXT1mLGFyW2UrMTY+PjJdPTAsYXJbKGk9ZSsyMHwwKT4+Ml09MCxnQVtlKzI0Pj4yXT0uNzUsZ0FbZSsyOD4+Ml09LjUsZ0FbZSszMj4+Ml09MCxObChuLGUpLDB8KGU9MHxhcltpPj4yXSkmJmR1KGUpLGFyW0E+PjJdPWFyW24+PjJdLGFyW0ErND4+Ml09YXJbbz4+Ml0sYXJbQSs4Pj4yXT1hcls4K24+PjJdKTooYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT0wKSx2b2lkKHVyPXQpfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wLGZ8PTA7dmFyIG4sdCxvLGEsYyxsLHUsYixzLGQsayxoLHcsdixtLGcsWixwLHk9MCxCPTAsRT0wLFg9MCxXPTAsST0wLEM9MCxHPTAsVj0wLEY9MCxSPTAsTj0wLF89MCxZPTAsUT0wLEQ9MCxKPTAsTT0wLFQ9MCxVPTAsUz0wLE89MCx6PTAsaj0wLEg9MCx4PTAsUD0wLEw9MCxLPTAscT0wLCQ9MCxBQT0wLGVBPTAsckE9MCxpQT0wO2lmKHVyPShwPXVyKSsxMTJ8MCxvPXArMTA4fDAsYT1wKzEwNHwwLG49cCsxMDB8MCxaPXArOTZ8MCxWPXArOTJ8MCx0PXArODh8MCxIPXArODR8MCxnPXArODB8MCxsPXArNDB8MCxYPXAsZUE9MHxhclsocnw9MCk+PjJdLHc9MHxhcltlQSsyND4+Ml0sZUE9MHxhcltlQSsyOD4+Ml0sdj0yNTUmKDB8Z28oeT0wfGFyW2krND4+Ml0pKSxtPTI1NSYoMHxabyh5KSksRT0yNTUmKGU9MHxWbygwfGFyW3I+PjJdLDMpKSxlPDwyND4+MjQ9PTgpcmV0dXJuIGFyW0E+PjJdPTAsYXJbQSs0Pj4yXT0wLHZvaWQodXI9cCk7aWYoKHE9MHxFbygwfGFyW3I+PjJdLDYpKSYmKDB8Vm8oMHxhcltyPj4yXSw2KSk8PDI0Pj4yNCE9ZTw8MjQ+PjI0KXJldHVybiBhcltBPj4yXT0wLGFyW0ErND4+Ml09MCx2b2lkKHVyPXApO2lmKGY9MHxodSg4MCksYXJbZis0Pj4yXT0wLGFyW2YrOD4+Ml09MCxhcltmPj4yXT02MjA4LGFyWyhCPWYrMTJ8MCk+PjJdPTAsYXJbQis0Pj4yXT0wLGFyW0IrOD4+Ml09MCxhcltCKzEyPj4yXT0wLGFyW0IrMTY+PjJdPTAsYXJbZiszMj4+Ml09MzIyMTUsYXJbZiszNj4+Ml09MCxhcltmKzQwPj4yXT0wLGFyW2YrNDQ+PjJdPTk5LGFyW2YrNDg+PjJdPTk5LEFBPWYrNTJ8MCxhclsoJD1mKzcyfDApPj4yXT0wLGFyW2YrNzY+PjJdPTAsYXJbQUE+PjJdPTAsYXJbQUErND4+Ml09MCxhcltBQSs4Pj4yXT0wLGFyW0FBKzEyPj4yXT0wLGFyW2YrNjg+PjJdPSQsJD1CLEs9KEFBPWYpKzE2fDAsYnUoZiksc3UoZiksZT0wfGFyW0s+PjJdLGFyW0I+PjJdPSQsYXJbSz4+Ml09QUEsMHxlJiZrdShlKSxkdShmKSx5byhCLHcsZUEsMCx5KSxMPSh3LTErdnwwKS8oMHx2KXwwLEs9KGVBKy0xK218MCkvKDB8bSl8MCxCbyhCLDAsdyxlQSxFKSxCbyhCLDEsTCxLLEUpLEJvKEIsMixMLEssRSkscSYmQm8oQiw2LHcsZUEsRSksYXJbbz4+Ml09MCxhclthPj4yXT0wLGFyW24+PjJdPTAsYXJbWj4+Ml09MCxhcltWPj4yXT0wLGFyW3Q+PjJdPTAsYXJbSD4+Ml09MCxkPShhcltnPj4yXT0wKXxSbygwfGFyW3I+PjJdLDMsbyksaz0wfFJvKDB8YXJbcj4+Ml0sNCxhKSxoPTB8Um8oMHxhcltyPj4yXSw1LG4pLEo9MHxGbyhCLDAsViksTD0wfEZvKEIsMSx0KSxLPTB8Rm8oQiwyLEgpLHg9cT8oUD0wfFJvKDB8YXJbcj4+Ml0sNixaKSwwfEZvKEIsNixnKSk6UD0wLGFyW28+PjJdPSgwfGFyW28+PjJdKS8yfDAsYXJbYT4+Ml09KDB8YXJbYT4+Ml0pLzJ8MCxhcltuPj4yXT0oMHxhcltuPj4yXSkvMnwwLGFyW1o+PjJdPSgwfGFyW1o+PjJdKS8yfDAsYXJbVj4+Ml09KDB8YXJbVj4+Ml0pLzJ8MCxhclt0Pj4yXT0oMHxhclt0Pj4yXSkvMnwwLGFyW0g+PjJdPSgwfGFyW0g+PjJdKS8yfDAsYXJbZz4+Ml09KDB8YXJbZz4+Ml0pLzJ8MCxjPTE8PEUrLTEscz0oYj0xPDxFKS0xfDAsQmUobCksZT0wfGFyW2krMTY+PjJdKWZvcihyPTB8dHJbZSsxMD4+MF0seWUoWCx5PTB8b3JbZSs4Pj4xXSwwfG9yW2UrND4+MV0pLHI9cjw8MjQ+PjI0IT0wLHkmPTY1NTM1LGU9WCxmPShCPWwpKzQwfDA7YXJbQj4+Ml09YXJbZT4+Ml0sZT1lKzR8MCwoMHwoQj1CKzR8MCkpPCgwfGYpOyk7ZWxzZSB5PTIscj0xO2lmKHU9MDwoMHxlQSkpe189MDwoMHx3KSxZPTA9PSgwfHkpLFE9MHxhclthPj4yXSxYPTB8YXJbVj4+Ml0sVj0wfGFyW28+PjJdLEY9MHxhcltuPj4yXSxXPStnQVs0K2w+PjJdLEk9K2dBWzgrbD4+Ml0sQz0rZ0FbMTIrbD4+Ml0saT0wO2Rve0E6ZG97aWYoXyl7aWYoUj0wfGJyKFEsaSksTj0wfGJyKFgsaSksQj0wfGJyKFYsaSksRT0wfGJyKEYsaSksWSlmPTA7ZWxzZSBmb3IoZj0wOzspaWYoej0oMHxscltkKyhCK2Y8PDEpPj4xXSkqVysoMHxscltrKyhSK2Y8PDEpPj4xXSkqSSsoMHxscltoKyhFK2Y8PDEpPj4xXSkqQyxlPSgwfChlPTB8ZWYocj96OjIxOSp6Ki4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksb3JbSisoTitmPDwxKT4+MV09ZSwoMHwoZj1mKzF8MCkpPT0oMHx3KSlicmVhayBBO2Zvcig7ZT0wfG9yW2srKFIrZjw8MSk+PjFdLHJ8fChlPSgwfChlPTB8ZWYoMjE5Kig2NTUzNSZlKSouMDAzOTA2MjUrMTYpKSk8MD8wOjY1NTM1JigoMHxlKTwoMHxiKT9lOnMpKSxvcltKKyhOK2Y8PDEpPj4xXT1lLCgwfChmPWYrMXwwKSkhPSgwfHcpOyk7fX13aGlsZSgwKTtpPWkrMXwwfXdoaWxlKCgwfGkpIT0oMHxlQSkpO2lmKHUpe2o9MDwoMHx3KSxKPTA9PSgwfHkpLFE9MHxhcltuPj4yXSxZPTB8YXJbdD4+Ml0sXz0wfGFyW28+PjJdLE49MHxhclthPj4yXSxUPStnQVsxNitsPj4yXSxVPStnQVsyMCtsPj4yXSxTPStnQVsyNCtsPj4yXSxPPStnQVsyOCtsPj4yXSx6PStnQVszMitsPj4yXSxNPStnQVszNitsPj4yXSxEPSsoNjU1MzUmY3wwKSxYPTB8YXJbSD4+Ml0saT0wO2Rve2lmKGopZm9yKFY9MHxicihRLGkpLEY9MHxicihfLGkpLFI9MHxicihOLGkpLEU9MDtlPTB8b3JbaCsoKGY9VitFfDApPDwxKT4+MV0sZT1KPyhlPXI/KHk9MHxicihZLCgwfGkpLygwfG0pfDApLG9yW0wrKHkrKEg9KDB8RSkvKDB8dil8MCk8PDEpPj4xXT1lLGY9MHxvcltkKyhmPDwxKT4+MV0sSCk6KGU9KDB8KGU9MHxlZigyMTkqKDY1NTM1JmUpKi4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cykseT0wfGJyKFksKDB8aSkvKDB8bSl8MCksb3JbTCsoeSsoQj0oMHxFKS8oMHx2KXwwKTw8MSk+PjFdPWUsZj0oMHwoZT0wfGVmKDIxOSooMHxscltkKyhmPDwxKT4+MV0pKi4wMDM5MDYyNSsxNikpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksQikseStlfDApOihJPTIyNCooaUE9KEM9KygwfGxyW2QrKEYrRTw8MSk+PjFdKSkqVCsoRz0rKDB8bHJbaysoUitFPDwxKT4+MV0pKSpVKyhXPSsoNjU1MzUmZSkpKlMpKi4wMDM5MDYyNSxlPSgwfChlPTB8ZWYoRCsocj9pQTpJKSkpKTwwPzA6NjU1MzUmKCgwfGUpPCgwfGIpP2U6cyksQj0oMHxFKS8oMHx2KXwwLEg9TCsoKDB8YnIoWSx5PSgwfGkpLygwfG0pfDApKStCPDwxKXwwLG9yW0g+PjFdPWUsZj1lPSgwfChlPTB8ZWYoRCsocj9DKk8rRyp6K1cqTToyMjQqSSouMDAzOTA2MjUpKSkpPDA/MDo2NTUzNSYoKDB8ZSk8KDB8Yik/ZTpzKSwoMHxicihYLHkpKStCfDApLG9yW0srKGU8PDEpPj4xXT1mLCgwfChFPUUrdnwwKSk8KDB8dyk7KTtpPWkrbXwwfXdoaWxlKCgwfGkpPCgwfGVBKSl9fWlmKHEmJihyQT13PDwxLHUpKWZvcihlPTA7aGIoMHwocT14KygoMHxicigwfGFyW2c+PjJdLGUpKTw8MSl8MCksUCsoKDB8YnIoMHxhcltaPj4yXSxlKSk8PDEpfDAsMHxyQSksKDB8KGU9ZSsxfDApKSE9KDB8ZUEpOyk7YXJbQT4+Ml09JCxhcltBKzQ+PjJdPUFBLHVyPXB9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTA7ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpTHUoMCxlLHIsaSk7ZWxzZSBpZigwfHh1KEEsMHxhcltlPj4yXSkpe2lmKEE9ZSszMnwwLCgwfGFyW2UrMTY+PjJdKSE9KDB8cikmJigwfGFyWyhuPWUrMjB8MCk+PjJdKSE9KDB8cikpe2FyW0E+PjJdPWksYXJbbj4+Ml09cixhclsoaT1lKzQwfDApPj4yXT0xKygwfGFyW2k+PjJdKSwxPT0oMHxhcltlKzM2Pj4yXSkmJjI9PSgwfGFyW2UrMjQ+PjJdKSYmKHRyW2UrNTQ+PjBdPTEpLGFyW2UrNDQ+PjJdPTQ7YnJlYWt9MT09KDB8aSkmJihhcltBPj4yXT0xKX19d2hpbGUoMCl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wO3ZhciBuPTAsdD0wLG89MCxhPTA7ZG97aWYoMHx4dShBLDB8YXJbZSs4Pj4yXSkpTHUoMCxlLHIsaSk7ZWxzZXtpZihuPUErOHwwLCEoMHx4dShBLDB8YXJbZT4+Ml0pKSl7bz0wfGFyW24+PjJdLG9zWzYzJmFyWzI0KygwfGFyW28+PjJdKT4+Ml1dKG8sZSxyLGksZik7YnJlYWt9aWYoQT1lKzMyfDAsKDB8YXJbZSsxNj4+Ml0pIT0oMHxyKSYmKDB8YXJbKHQ9ZSsyMHwwKT4+Ml0pIT0oMHxyKSl7aWYoYXJbQT4+Ml09aSw0PT0oMHxhclsoaT1lKzQ0fDApPj4yXSkpYnJlYWs7dHJbKEE9ZSs1MnwwKT4+MF09MCxuPSh0clsoYT1lKzUzfDApPj4wXT0wKXxhcltuPj4yXSxhc1sxNSZhclsyMCsoMHxhcltuPj4yXSk+PjJdXShuLGUscixyLDEsZiksMHx0clthPj4wXT8wfHRyW0E+PjBdP0E9MzooQT0zLG89MTEpOihBPTQsbz0xMSksMTE9PSgwfG8pJiYoYXJbdD4+Ml09cixhclsoYT1lKzQwfDApPj4yXT0xKygwfGFyW2E+PjJdKSwxPT0oMHxhcltlKzM2Pj4yXSkmJjI9PSgwfGFyW2UrMjQ+PjJdKSYmKHRyW2UrNTQ+PjBdPTEpKSxhcltpPj4yXT1BO2JyZWFrfTE9PSgwfGkpJiYoYXJbQT4+Ml09MSl9fXdoaWxlKDApfSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MDt2YXIgbj0wLHQ9MCxvPTAsYT0wLGM9MCxsPTAsdT0wLGI9MCxzPTAsZD0wLGs9MCxoPTA7QTpkb3tpZigwfHh1KEEsMHxhcltlKzg+PjJdKSlMdSgwLGUscixpKTtlbHNle2lmKHQ9QSsxMnwwLGQ9ZSsyNHwwLGs9ZSszNnwwLGg9ZSs1NHwwLGI9QSs4fDAsbD1BKzE2fDAsISgwfHh1KEEsMHxhcltlPj4yXSkpKXtpZihvPUErMTYrKChzPTB8YXJbdD4+Ml0pPDwzKXwwLHJiKGwsZSxyLGksZiksbj1BKzI0fDAsKDB8cyk8PTEpYnJlYWs7aWYoMD09KDImKHQ9MHxhcltiPj4yXSl8MCkmJjEhPSgwfGFyW2s+PjJdKSl7aWYoISgxJnQpKWZvcig7Oyl7aWYoMHx0cltoPj4wXSlicmVhayBBO2lmKDE9PSgwfGFyW2s+PjJdKSlicmVhayBBO2lmKHJiKG4sZSxyLGksZiksbz4+PjA8PShuPW4rOHwwKT4+PjApYnJlYWsgQX1mb3IoOzspe2lmKDB8dHJbaD4+MF0pYnJlYWsgQTtpZigxPT0oMHxhcltrPj4yXSkmJjE9PSgwfGFyW2Q+PjJdKSlicmVhayBBO2lmKHJiKG4sZSxyLGksZiksbz4+PjA8PShuPW4rOHwwKT4+PjApYnJlYWsgQX19Zm9yKDs7KXtpZigwfHRyW2g+PjBdKWJyZWFrIEE7aWYocmIobixlLHIsaSxmKSxvPj4+MDw9KG49bis4fDApPj4+MClicmVhayBBfX1pZihuPWUrMzJ8MCwoMHxhcltlKzE2Pj4yXSkhPSgwfHIpJiYoMHxhclsocz1lKzIwfDApPj4yXSkhPSgwfHIpKXtpZihhcltuPj4yXT1pLDQ9PSgwfGFyWyh1PWUrNDR8MCk+PjJdKSlicmVhaztpPUErMTYrKGFyW3Q+PjJdPDwzKXwwLGE9ZSs1MnwwLGM9ZSs1M3wwLEE9bCxvPW49MDtlOmZvcig7Oyl7aWYoaT4+PjA8PUE+Pj4wKXt0PTE4O2JyZWFrfWlmKHRyW2E+PjBdPTAsdHJbYz4+MF09MCxlYihBLGUscixyLDEsZiksMHx0cltoPj4wXSl7dD0xODticmVha31kb3tpZigwfHRyW2M+PjBdKXtpZighKDB8dHJbYT4+MF0pKXtpZigxJmFyW2I+PjJdKXtuPTEsdD1vO2JyZWFrfW49MSx0PTE4O2JyZWFrIGV9aWYoMT09KDB8YXJbZD4+Ml0pKXt0PTIzO2JyZWFrIGV9aWYoISgyJmFyW2I+PjJdKSl7dD0yMzticmVhayBlfXQ9bj0xfWVsc2UgdD1vfXdoaWxlKDApO0E9QSs4fDAsbz10fWRve2lmKDE4PT0oMHx0KSl7aWYoIW8mJihhcltzPj4yXT1yLGFyWyhyPWUrNDB8MCk+PjJdPTErKDB8YXJbcj4+Ml0pLDE9PSgwfGFyW2s+PjJdKSkmJjI9PSgwfGFyW2Q+PjJdKSl7aWYodHJbaD4+MF09MSxuKXt0PTIzO2JyZWFrfW49NDticmVha31uP3Q9MjM6bj00fX13aGlsZSgwKTsyMz09KDB8dCkmJihuPTMpLGFyW3U+PjJdPW47YnJlYWt9MT09KDB8aSkmJihhcltuPj4yXT0xKX19d2hpbGUoMCl9LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLHJ8PTAsZnw9MDt2YXIgbix0LG89MCxhPTAsYz0wLGw9MCx1PTA7aWYoISgoMHwoaXw9MCkpPD0wKSl7dD0yNTUrKG49MTw8Zil8MCxmPTA7ZG97Zm9yKGE9MHxicihmLGUpLGM9MHxicihmLGkpLG89MDt1PSgwfGNyWyhsPUErKG8rYSl8MCk+PjBdKSsoMHxhcltyKyhvK2M8PDIpPj4yXSl8MCx0cltsPj4wXT0oMHx1KTwwPzA6MjU1JigoMHx1KTwoMHxuKT91OnQpLCgwfChvPW8rMXwwKSkhPSgwfGkpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8aSkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAscnw9MCxmfD0wO3ZhciBuLHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtpZighKCgwfChpfD0wKSk8PTApKXt0PTY1NTM1KyhuPTE8PGYpfDAsZj0wO2Rve2ZvcihhPTB8YnIoZixlKSxjPTB8YnIoZixpKSxvPTA7dT0oMHxsclsobD1BKyhvK2E8PDEpfDApPj4xXSkrKDB8YXJbcisobytjPDwyKT4+Ml0pfDAsb3JbbD4+MV09KDB8dSk8MD8wOjY1NTM1JigoMHx1KTwoMHxuKT91OnQpLCgwfChvPW8rMXwwKSkhPSgwfGkpOyk7Zj1mKzF8MH13aGlsZSgoMHxmKSE9KDB8aSkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmKXtBfD0wLGV8PTAsaXw9MDt2YXIgbix0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKG49MTw8KGZ8PTApKy0xLDA8KDB8KHJ8PTApKSl7YT0wO2Rve2ZvcihjPTB8YnIoYSxyKSxvPXQ9MDtvPSgob3JbZSsoKGw9dCtjfDApPDwxKT4+MV08PGkpK24+PmYpK298MCxhcltBKyhsPDwyKT4+Ml09bywoMHwodD10KzF8MCkpIT0oMHxyKTspO2E9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfHIpKX19LGZ1bmN0aW9uKEEsZSxyLGksZil7QXw9MCxlfD0wLGl8PTA7dmFyIG4sdD0wLG89MCxhPTAsYz0wO2lmKG49MTw8KGZ8PTApKy0xLDA8KDB8KHJ8PTApKSl7YT0wO2Rve2ZvcihvPXQ9MDtjPSgwfGJyKHQscikpK2F8MCxvPSgob3JbZSsoYzw8MSk+PjFdPDxpKStuPj5mKStvfDAsYXJbQSsoYzw8Mik+PjJdPW8sKDB8KHQ9dCsxfDApKSE9KDB8cik7KTthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxyKSl9fSxmdW5jdGlvbihBLGUscixpLGYpe0F8PTAsZXw9MCxpfD0wO3ZhciBuLHQ9MCxvPTAsYT0wLGM9MDtpZihuPTE8PChmfD0wKSstMSwwPCgwfChyfD0wKSkpe289MDtkb3tmb3IoYT0wfGJyKG8sciksdD0wO2FyW0ErKChjPXQrYXwwKTw8Mik+PjJdPShvcltlKyhjPDwxKT4+MV08PGkpK24+PmYsKDB8KHQ9dCsxfDApKSE9KDB8cik7KTtvPW8rMXwwfXdoaWxlKCgwfG8pIT0oMHxyKSl9fSxKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYixKYl0sYXM9W01iLGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTA7dmFyIHQsbz0wLGE9MCxjPTAsbD0wLHU9MDtsPShhPTB8YXJbKG89KGV8PTApKzQ0fDApPj4yXSk+Pj4wPChjPXU9MHxhclsodD1lKzI0fDApPj4yXSk+Pj4wPyhhcltvPj4yXT11LGMpOmEsYT0yNCZuO0E6ZG97aWYoMD09KDB8YSl8fDE9PSgwfGYpJjI0PT0oMHxhKSlvPWE9LTE7ZWxzZXtlOmRve3N3aXRjaCgwfGYpe2Nhc2UgMDphPW89MDticmVhaztjYXNlIDE6aWYoOCZuKXthPSgoMHwobz1hPSgwfGFyW2UrMTI+PjJdKS0oMHxhcltlKzg+PjJdKXwwKSk8MCk8PDMxPj4zMTticmVhayBlfWE9KCgwfChvPWE9Yy0oMHxhcltlKzIwPj4yXSl8MCkpPDApPDwzMT4+MzE7YnJlYWsgZTtjYXNlIDI6KDB8dHJbKG89ZSszMnwwKSsxMT4+MF0pPDAmJihvPTB8YXJbbz4+Ml0pLGE9KCgwfChvPWE9bC1vfDApKTwwKTw8MzE+PjMxO2JyZWFrO2RlZmF1bHQ6bz1hPS0xO2JyZWFrIEF9fXdoaWxlKDApO2lmKGE9MHx0YigwfG8sMHxhLDB8ciwwfGkpLDA8PSgwfChvPUQpKSlpZigoMHx0clsoYz1lKzMyfDApKzExPj4wXSk8MCYmKGM9MHxhcltjPj4yXSksKDB8KHI9KCgwfChpPWwtY3wwKSk8MCk8PDMxPj4zMSkpPCgwfG8pfCgwfHIpPT0oMHxvKSZpPj4+MDxhPj4+MClvPWE9LTE7ZWxzZXtpZihjPTgmbiwhKDA9PSgwfGEpJjA9PSgwfG8pKSl7aWYoMHxjJiYwPT0oMHxhcltlKzEyPj4yXSkpe289YT0tMTticmVha31pZigwIT0oMTYmbnwwKSYwPT0oMHx1KSl7bz1hPS0xO2JyZWFrfX0wfGMmJihhcltlKzEyPj4yXT0oMHxhcltlKzg+PjJdKSthLGFyW2UrMTY+PjJdPWwpLDE2Jm4mJihhclt0Pj4yXT0oMHxhcltlKzIwPj4yXSkrYSl9ZWxzZSBvPWE9LTF9fXdoaWxlKDApO2FyWyh1PUEpPj4yXT0wLGFyW3UrND4+Ml09MCxhclsoQT1BKzh8MCk+PjJdPWEsYXJbQSs0Pj4yXT1vfSxmdW5jdGlvbihBLGUscixpLGYsbil7bnw9MCxhclsobj1BfD0wKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49QSs4fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xfSxmdW5jdGlvbihBLGUscixpLGYsbil7bnw9MCxhclsobj1BfD0wKT4+Ml09MCxhcltuKzQ+PjJdPTAsYXJbKG49QSs4fDApPj4yXT0tMSxhcltuKzQ+PjJdPS0xfSxmdW5jdGlvbihBLGUscixpLGYsbil7dmFyIHQsbyxhLGM7Zm9yKEF8PTAsZXw9MCxyfD0wLG58PTAsdD11cj0obz11cikrMzEmLTMyLHVyPXVyKzE2fDAsYXJbdD4+Ml09MCxhcls0K3Q+PjJdPTAsZT1hcls4K3Q+PjJdPTA7MyE9KDB8ZSk7KWU9ZSsxfChhclt0KyhlPDwyKT4+Ml09MCk7Zm9yKG49KGU9KGM9KGE9MHx0cltuKzExPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW24+PjJdOm4pKyhjPzB8YXJbbis0Pj4yXToyNTUmYSl8MDshKG4+Pj4wPD1lPj4+MCk7KV91KHQsMHx0cltlPj4wXSksZT1lKzF8MDtmb3Iocj0wfHRmKDAsMCwwLGU9KDB8dHJbMTErdD4+MF0pPDA/MHxhclt0Pj4yXTp0KSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxuPWFyW0ErOD4+Ml09MDszIT0oMHxuKTspbj1uKzF8KGFyW0ErKG48PDIpPj4yXT0wKTtmb3Iobj1lKygwfFZjKHIpKXwwOyEobj4+PjA8PWU+Pj4wKTspX3UoQSwwfHRyW2U+PjBdKSxlPWUrMXwwO0J1KHQpLHVyPW99LGZ1bmN0aW9uKEEsZSxyLGksZixuKXtBfD0wLGV8PTAsbnw9MDt2YXIgdCxvLGEsYyxsLHUsYj0wLHM9MCxkPTAsaz0wLGg9MCx3PTA7Zm9yKHc9dXI9KHU9dXIpKzMxJi0zMix1cj11cisxNzZ8MCxvPXcrMTY4fDAsYT13KzQwfDAsYz13KzM2fDAsbD13KzMyfDAsaz0odD13KSsyNHwwLHc9dysxNnwwLGFyW3Q+PjJdPTAsYXJbdCs0Pj4yXT0wLGU9YXJbdCs4Pj4yXT0wOzMhPSgwfGUpOyllPWUrMXwoYXJbdCsoZTw8Mik+PjJdPTApO2ZvcihhcltrKzQ+PjJdPTAsYXJbaz4+Ml09MTY4OTIscz0oZT0oZD0ocz0wfHRyW24rOCszPj4wXSk8PDI0Pj4yNDwwKT8wfGFyW24+PjJdOm4pKygoZD8wfGFyW24rND4+Ml06MjU1JnMpPDwyKXwwLGQ9MzIrYXwwLG49ZSxlPTA7MiE9KDB8ZSkmbj4+PjA8cz4+PjA7KXtpZihhcltsPj4yXT1uLDI9PSgwfChiPTB8ZXNbMTUmYXJbMTIrKDB8YXJbaz4+Ml0pPj4yXV0oayxvLG4scyxsLGEsZCxjKSkpfHwoMHxhcltsPj4yXSk9PSgwfG4pKXtoPTc7YnJlYWt9Zm9yKGU9YTshKGU+Pj4wPj0oMHxhcltjPj4yXSk+Pj4wKTspX3UodCwwfHRyW2U+PjBdKSxlPWUrMXwwO249MHxhcltsPj4yXSxlPWJ9Zm9yKDc9PSgwfGgpJiZ0aSgpLGFuKCksbj0wfHRmKDAsMCwwLGI9KDB8dHJbdCsxMT4+MF0pPDA/MHxhclt0Pj4yXTp0KSxhcltBPj4yXT0wLGFyW0ErND4+Ml09MCxlPWFyW0ErOD4+Ml09MDszIT0oMHxlKTspZT1lKzF8KGFyW0ErKGU8PDIpPj4yXT0wKTtmb3IoYXJbdys0Pj4yXT0wLGFyW3c+PjJdPTE2OTQwLGQ9cz1iKygwfFZjKG4pKXwwLGs9MTI4K2F8MCxuPWIsZT0wOzspe2lmKCEoMiE9KDB8ZSkmbj4+PjA8cz4+PjApKXtoPTIxO2JyZWFrfWlmKGFyW2w+PjJdPW4sMj09KDB8KGI9MHxlc1sxNSZhclsxNisoMHxhclt3Pj4yXSk+PjJdXSh3LG8sbiwzMjwoZC1ufDApP24rMzJ8MDpzLGwsYSxrLGMpKSl8fCgwfGFyW2w+PjJdKT09KDB8bikpe2g9MTc7YnJlYWt9Zm9yKGU9YTshKGU+Pj4wPj0oMHxhcltjPj4yXSk+Pj4wKTspT3UoQSwwfGFyW2U+PjJdKSxlPWUrNHwwO249MHxhcltsPj4yXSxlPWJ9aWYoMTc9PSgwfGgpKXRpKCk7ZWxzZSBpZigyMT09KDB8aCkpcmV0dXJuIGFuKCksQnUodCksdm9pZCh1cj11KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKSYmS3UoMCxlLHIsaSxmKX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4pe3J8PTAsaXw9MCxmfD0wLG58PTAsMHx4dShBfD0wLDB8YXJbKGV8PTApKzg+PjJdKT9LdSgwLGUscixpLGYpOihBPTB8YXJbQSs4Pj4yXSxhc1sxNSZhclsyMCsoMHxhcltBPj4yXSk+PjJdXShBLGUscixpLGYsbikpfSxmdW5jdGlvbihBLGUscixpLGYsbil7cnw9MCxpfD0wLGZ8PTAsbnw9MDt2YXIgdD0wLG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wLHM9MDtpZigwfHh1KEF8PTAsMHxhclsoZXw9MCkrOD4+Ml0pKUt1KDAsZSxyLGksZik7ZWxzZXt0PTB8dHJbKHM9ZSs1MnwwKT4+MF0sYT0wfHRyWyhvPWUrNTN8MCk+PjBdLGM9QSsxNisoKGI9MHxhcltBKzEyPj4yXSk8PDMpfDAsdHJbcz4+MF09MCxlYihBKzE2fCh0cltvPj4wXT0wKSxlLHIsaSxmLG4pO0E6ZG97aWYoMTwoMHxiKSl7bD1lKzI0fDAsdT1lKzU0fDAsYj1BKzh8MCxBPUErMjR8MDtkb3tpZigwfHRyW3U+PjBdKWJyZWFrIEE7aWYoMHx0cltzPj4wXSl7aWYoMT09KDB8YXJbbD4+Ml0pKWJyZWFrIEE7aWYoISgyJmFyW2I+PjJdKSlicmVhayBBfWVsc2UgaWYoMHx0cltvPj4wXSYmMD09KDEmYXJbYj4+Ml18MCkpYnJlYWsgQTt0cltzPj4wXT0wLHRyW28+PjBdPTAsZWIoQSxlLHIsaSxmLG4pLEE9QSs4fDB9d2hpbGUoQT4+PjA8Yz4+PjApfX13aGlsZSgwKTt0cltzPj4wXT10LHRyW28+PjBdPWF9fSxmdW5jdGlvbihBLGUscixpLGYsbil7QXw9MCxlfD0wLHJ8PTAsaXw9MCxufD0wO3ZhciB0PTAsbz0wLGE9MCxjPTAsbD0wO2lmKDEmKGZ8PTApfDAmJnNyKDM2MjMwLDM2MjQzLDQwLDM2MjYyKSwwPCgwfG4pJjA8KDB8Zikpe2E9MDtkb3tmb3IodD1BKygwfGJyKGEsZSkpfDAsbz1yKygoMHxicihhLGkpKTw8MSl8MCxjPTA7bD0zMisoMHxvcltvPj4xXSk+PjYsdHJbdD4+MF09KDB8bCk8MD8wOjI1NSYoKDB8bCk8MjU1P2w6MjU1KSxsPTMyKygwfG9yW28rMj4+MV0pPj42LHRyW3QrMT4+MF09KDB8bCk8MD8wOjI1NSYoKDB8bCk8MjU1P2w6MjU1KSwhKCgwfGYpPD0oMHwoYz1jKzJ8MCkpKTspdD10KzJ8MCxvPW8rNHwwO2E9YSsxfDB9d2hpbGUoKDB8YSkhPSgwfG4pKX19LE1iLE1iLE1iLE1iLE1iLE1iXSxjcz1bVGIsZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7QXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKDEmKG58PTApfDAmJnNyKDM2MjMwLDM2MjQzLDEwNSwzNjM2MyksMDwoMHx0KSYwPCgwfG4pKXtsPTA7ZG97Zm9yKGM9MHxicihsLGYpLG89QSsoMHxicihsLGUpKXwwLGE9aSsoYzw8MSl8MCxjPXIrKGM8PDEpfDAsdT0wO2I9NjQrKDB8b3JbYz4+MV0pKygwfG9yW2E+PjFdKT4+Nyx0cltvPj4wXT0oMHxiKTwwPzA6MjU1JigoMHxiKTwyNTU/YjoyNTUpLGI9NjQrKDB8b3JbYysyPj4xXSkrKDB8b3JbYSsyPj4xXSk+PjcsdHJbbysxPj4wXT0oMHxiKTwwPzA6MjU1JigoMHxiKTwyNTU/YjoyNTUpLCEoKDB8bik8PSgwfCh1PXUrMnwwKSkpOylvPW8rMnwwLGE9YSs0fDAsYz1jKzR8MDtsPWwrMXwwfXdoaWxlKCgwfGwpIT0oMHx0KSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLG58PTA7dmFyIG8sYSxjLGwsdT0wLGI9MCxzPTAsZD0wO2lmKGM9MDwoMHwobD0xNC0odHw9MCl8MCkpPzE8PGwtMTowLDEmKGZ8PTApfDAmJnNyKDM2MjMwLDM2MjQzLDE3MiwzNjM5NiksISgoMHxuKTw9MCkmJihhPTY1NTM1KyhvPTE8PHQpfDAsMDwoMHxmKSkpe2I9MDtkb3tmb3IodD1BKygoMHxicihiLGUpKTw8MSl8MCx1PXIrKCgwfGJyKGIsaSkpPDwxKXwwLHM9MDtkPSgwfG9yW3U+PjFdKStjPj5sLG9yW3Q+PjFdPSgwfGQpPDA/MDo2NTUzNSYoKDB8ZCk8KDB8byk/ZDphKSxkPSgwfG9yW3UrMj4+MV0pK2M+Pmwsb3JbdCsyPj4xXT0oMHxkKTwwPzA6NjU1MzUmKCgwfGQpPCgwfG8pP2Q6YSksISgoMHxmKTw9KDB8KHM9cysyfDApKSk7KXQ9dCs0fDAsdT11KzR8MDtiPWIrMXwwfXdoaWxlKCgwfGIpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0KXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTA7dmFyIG89MCxhPTAsYz0wLGw9MCx1PTAsYj0wO2lmKDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2M9MDtkb3tmb3IodD1yKygwfGJyKGMsaSkpfDAsbz1BKygoMHxicihjLGUpKTw8MSl8MCxhPTA7Yj0oMHxjclt0KzE+PjBdKTw8NiY2NTUzNSx1PSgwfGNyW3QrMj4+MF0pPDw2JjY1NTM1LGw9KDB8Y3JbdCszPj4wXSk8PDYmNjU1MzUsb3Jbbz4+MV09KDB8Y3JbdD4+MF0pPDw2LG9yW28rMj4+MV09YixvcltvKzQ+PjFdPXUsb3Jbbys2Pj4xXT1sLCEoKDB8Zik8PSgwfChhPWErNHwwKSkpOyl0PXQrNHwwLG89bys4fDA7Yz1jKzF8MH13aGlsZSgoMHxjKSE9KDB8bikpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwwLDEsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwyLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDAsMyw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwxLDAsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwxLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDEsMiw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwxLDMsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwwLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDIsMSw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwyLDIsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwzLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDMsMCw4KX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7eG8oQXw9MCxlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCwzLDEsOCl9LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQpe3hvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywyLDgpfSxmdW5jdGlvbihBLGUscixpLGYsbix0KXt4byhBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLDMsMyw4KX0sVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGIsVGJdLGxzPVtVYixmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCx0fD0wO3ZhciBhLGMsbCx1LGI9MCxzPTAsZD0wLGs9MCxoPTA7aWYobD0xPDwodT0xNS0ob3w9MCl8MCktMSwxJihufD0wKXwwJiZzcigzNjIzMCwzNjI0MywyMzgsMzY0OTApLCEoKDB8dCk8PTApJiYoYz02NTUzNSsoYT0xPDxvKXwwLDA8KDB8bikpKXtkPTA7ZG97Zm9yKHM9MHxicihkLGYpLG89QSsoKDB8YnIoZCxlKSk8PDEpfDAsYj1pKyhzPDwxKXwwLHM9cisoczw8MSl8MCxrPTA7aD0oMHxvcltzPj4xXSkrbCsoMHxvcltiPj4xXSk+PnUsb3Jbbz4+MV09KDB8aCk8MD8wOjY1NTM1JigoMHxoKTwoMHxhKT9oOmMpLGg9KDB8b3JbcysyPj4xXSkrbCsoMHxvcltiKzI+PjFdKT4+dSxvcltvKzI+PjFdPSgwfGgpPDA/MDo2NTUzNSYoKDB8aCk8KDB8YSk/aDpjKSwhKCgwfG4pPD0oMHwoaz1rKzJ8MCkpKTspbz1vKzR8MCxiPWIrNHwwLHM9cys0fDA7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8dCkpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTA7dmFyIGEsYz0wLGw9MDtpZihhPTE0LShvfD0wKXwwLDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2M9MDtkb3tmb3IodD1BKygoMHxicihjLGUpKTw8MSl8MCxvPXIrKCgwfGJyKGMsaSkpPDwxKXwwLGw9MDtvclt0Pj4xXT0oMHxscltvPj4xXSk8PGEsKDB8KGw9bCsxfDApKSE9KDB8Zik7KXQ9dCsyfDAsbz1vKzJ8MDtjPWMrMXwwfXdoaWxlKCgwfGMpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMCwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMSwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMiwzLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywwLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywxLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywyLG98PTApfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe1BvKEF8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMywzLG98PTApfSxVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYixVYl0sdXM9W1NiLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTA7dmFyIGMsbD0wLHU9MCxiPTAscz0wLGQ9MDtpZigoMHwoYXw9MCkpPD0wJiZzcigzNjI5MywzNjI0Myw2MCwzNjMwMyksYz0xPDxhKy0xLDA8KDB8bikmMDwoMHxmKSl7Yj0wO2Rve2ZvcihsPUErKDB8YnIoYixlKSl8MCx1PXIrKCgwfGJyKGIsaSkpPDwxKXwwLHM9MDtkPSgoMHxicigwfG9yW3U+PjFdLHQpKStjPj5hKStvfDAsdHJbbD4+MF09KDB8ZCk8MD8wOjI1NSYoKDB8ZCk8MjU1P2Q6MjU1KSwoMHwocz1zKzF8MCkpIT0oMHxmKTspbD1sKzF8MCx1PXUrMnwwO2I9YisxfDB9d2hpbGUoKDB8YikhPSgwfG4pKX19LGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBjPTA7aWYoMDwoMHwobnw9MCkpJjA8KDB8KGZ8PTApKSl7YT0wO2Rve2Zvcih0PXIrKDB8YnIoYSxpKSl8MCxvPUErKCgwfGJyKGEsZSkpPDwxKXwwLGM9MDtvcltvPj4xXT0oMHxjclt0Pj4wXSk8PDYsKDB8KGM9YysxfDApKSE9KDB8Zik7KXQ9dCsxfDAsbz1vKzJ8MDthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxuKSl9fSxTYl0sYnM9W09iLGZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxjfD0wO3ZhciBsLHUsYixzPTAsZD0wLGs9MCxoPTA7aWYoKDB8KGF8PTApKTw9MCYmc3IoMzYyOTMsMzYyNDMsMTkzLDM2NDI4KSxiPTE8PGErLTEsISgoMHxuKTw9MCkmJih1PTY1NTM1KyhsPTE8PGMpfDAsMDwoMHxmKSkpe2Q9MDtkb3tmb3IoYz1BKygoMHxicihkLGUpKTw8MSl8MCxzPXIrKCgwfGJyKGQsaSkpPDwxKXwwLGs9MDtoPSgoMHxicigwfG9yW3M+PjFdLHQpKStiPj5hKStvfDAsb3JbYz4+MV09KDB8aCk8MD8wOjY1NTM1JigoMHxoKTwoMHxsKT9oOnUpLCgwfChrPWsrMXwwKSkhPSgwfGYpOyljPWMrMnwwLHM9cysyfDA7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8bikpfX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7QXw9MCxlfD0wLHJ8PTAsaXw9MCx0fD0wLG98PTAsYXw9MDt2YXIgbCx1LGIscz0wLGQ9MCxrPTAsaD0wLHc9MCx2PTA7aWYoYj11cixrPShjfD0wKSstOHwwLGg9MHxicigoZnw9MCk8PDEsbD0obnw9MCkrM3wwKSx1cj0odT11cikrKDE1KygwfCtoKSYtMTYpfDAsLTE8KDB8KGg9bisyfDApKSl7dz0wPCgwfGYpLGE9LTE7ZG97QTpkb3tpZih3KWZvcihkPWErMXwwLGE9cisoKChzPTApfGJyKGEsaSkpLTEpfDA7Oyl7c3dpdGNoKDB8dCl7Y2FzZSAwOmM9MHxjclsoYT1hKzF8MCk+PjBdO2JyZWFrO2Nhc2UgMTp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKyg1OCooMHxjclt2Pj4wXSl8MCkrKDEwKigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAyOnY9YSsxfDAsYz0oMHxicigwfGNyW2E+PjBdLC00KSkrKDU0KigwfGNyW3Y+PjBdKXwwKSsoY3JbYSsyPj4wXTw8NCktKGNyW2ErMz4+MF08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDM6dj1hKzF8MCxjPSgwfGJyKDB8Y3JbYT4+MF0sLTYpKSsoNDYqKDB8Y3Jbdj4+MF0pfDApKygyOCooMHxjclthKzI+PjBdKXwwKS0oY3JbYSszPj4wXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNDp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtNCkpLShjclthKzM+PjBdPDwyKSsoMzYqKCgwfGNyW2ErMj4+MF0pKygwfGNyW3Y+PjBdKXwwKXwwKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA1OnY9YSsxfDAsYz0oMHxicigwfGNyW2E+PjBdLC00KSkrKDI4KigwfGNyW3Y+PjBdKXwwKSsoNDYqKDB8Y3JbYSsyPj4wXSl8MCkrKDB8YnIoMHxjclthKzM+PjBdLC02KSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNjp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKyhjclt2Pj4wXTw8NCkrKDU0KigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7ZGVmYXVsdDp2PWErMXwwLGM9KDB8YnIoMHxjclthPj4wXSwtMikpKygxMCooMHxjclt2Pj4wXSl8MCkrKDU4KigwfGNyW2ErMj4+MF0pfDApLShjclthKzM+PjBdPDwxKT4+ayY2NTUzNSxhPXZ9aWYodj11KyhkKygwfGJyKHMsbCkpPDwxKXwwLG9yW3Y+PjFdPWMsKDB8KHM9cysxfDApKT09KDB8Zikpe2E9ZDticmVhayBBfX1lbHNlIGE9YSsxfDB9d2hpbGUoMCl9d2hpbGUoKDB8YSkhPSgwfGgpKX1pZihrPTA9PSgwfHQpP2s6NiwoMHxmKTw9MCl1cj1iO2Vsc2V7aD0wPCgwfG4pLGQ9MDtkb3tBOmRve2lmKGgpZm9yKGE9dSsoKChzPTApfGJyKGQsbCkpPDwxKXwwOzspe3N3aXRjaCgwfG8pe2Nhc2UgMDpjPTB8b3JbKGE9YSsyfDApPj4xXTticmVhaztjYXNlIDE6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsoNTgqKDB8b3Jbdj4+MV0pfDApKygxMCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgMjp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpKyg1NCooMHxvclt2Pj4xXSl8MCkrKG9yW2ErND4+MV08PDQpLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAzOnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC02KSkrKDQ2KigwfG9yW3Y+PjFdKXwwKSsoMjgqKDB8b3JbYSs0Pj4xXSl8MCktKG9yW2ErNj4+MV08PDIpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDQ6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTQpKS0ob3JbYSs2Pj4xXTw8MikrKDM2KigoMHxvclthKzQ+PjFdKSsoMHxvclt2Pj4xXSl8MCl8MCk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNTp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpKygyOCooMHxvclt2Pj4xXSl8MCkrKDQ2KigwfG9yW2ErND4+MV0pfDApKygwfGJyKDB8b3JbYSs2Pj4xXSwtNikpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDY6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsob3Jbdj4+MV08PDQpKyg1NCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2RlZmF1bHQ6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTIpKSsoMTAqKDB8b3Jbdj4+MV0pfDApKyg1OCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12fWlmKHY9QSsoKDB8YnIocyxlKSkrZDw8MSl8MCxvclt2Pj4xXT1jLCgwfChzPXMrMXwwKSk9PSgwfG4pKWJyZWFrIEF9fXdoaWxlKDApO2Q9ZCsxfDB9d2hpbGUoKDB8ZCkhPSgwfGYpKTt1cj1ifX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7dmFyIGw7aWYoQXw9MCxlfD0wLHJ8PTAsaXw9MCx0fD0wLG98PTAsYXw9MCxsPTE0LShjfD0wKXwwLDA8KDB8KG58PTApKSYwPCgwfChmfD0wKSkpe2E9MDtkb3tmb3IodD1yKygoMHxicihhLGkpKTw8MSl8MCxvPUErKCgwfGJyKGEsZSkpPDwxKXwwLGM9MDtvcltvPj4xXT0oMHxsclt0Pj4xXSk8PGwsKDB8KGM9YysxfDApKSE9KDB8Zik7KXQ9dCsyfDAsbz1vKzJ8MDthPWErMXwwfXdoaWxlKCgwfGEpIT0oMHxuKSl9fSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjKXtBfD0wLGV8PTAscnw9MCxpfD0wLHR8PTAsb3w9MCxhfD0wO3ZhciBsLHUsYixzPTAsZD0wLGs9MCxoPTAsdz0wLHY9MDtpZihiPXVyLGs9KGN8PTApKy04fDAsaD0wfGJyKChmfD0wKTw8MSxsPShufD0wKSszfDApLHVyPSh1PXVyKSsoMTUrKDB8K2gpJi0xNil8MCwtMTwoMHwoaD1uKzJ8MCkpKXt3PTA8KDB8ZiksYT0tMTtkb3tBOmRve2lmKHcpZm9yKGQ9YSsxfDAsYT1yKygoKHM9MCl8YnIoYSxpKSktMTw8MSl8MDs7KXtzd2l0Y2goMHx0KXtjYXNlIDA6Yz0wfG9yWyhhPWErMnwwKT4+MV07YnJlYWs7Y2FzZSAxOnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKDU4KigwfGxyW3Y+PjFdKXwwKSsoMTAqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDI6dj1hKzJ8MCxjPSgwfGJyKDB8bHJbYT4+MV0sLTQpKSsoNTQqKDB8bHJbdj4+MV0pfDApKyhsclthKzQ+PjFdPDw0KS0obHJbYSs2Pj4xXTw8MSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgMzp2PWErMnwwLGM9KDB8YnIoMHxsclthPj4xXSwtNikpKyg0NiooMHxsclt2Pj4xXSl8MCkrKDI4KigwfGxyW2ErND4+MV0pfDApLShsclthKzY+PjFdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA0OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC00KSktKGxyW2ErNj4+MV08PDIpKygzNiooKDB8bHJbYSs0Pj4xXSkrKDB8bHJbdj4+MV0pfDApfDApPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDU6dj1hKzJ8MCxjPSgwfGJyKDB8bHJbYT4+MV0sLTQpKSsoMjgqKDB8bHJbdj4+MV0pfDApKyg0NiooMHxsclthKzQ+PjFdKXwwKSsoMHxicigwfGxyW2ErNj4+MV0sLTYpKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA2OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKGxyW3Y+PjFdPDw0KSsoNTQqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDIpPj5rJjY1NTM1LGE9djticmVhaztkZWZhdWx0OnY9YSsyfDAsYz0oMHxicigwfGxyW2E+PjFdLC0yKSkrKDEwKigwfGxyW3Y+PjFdKXwwKSsoNTgqKDB8bHJbYSs0Pj4xXSl8MCktKGxyW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9dn1pZih2PXUrKGQrKDB8YnIocyxsKSk8PDEpfDAsb3Jbdj4+MV09YywoMHwocz1zKzF8MCkpPT0oMHxmKSl7YT1kO2JyZWFrIEF9fWVsc2UgYT1hKzF8MH13aGlsZSgwKX13aGlsZSgoMHxhKSE9KDB8aCkpfWlmKGs9MD09KDB8dCk/azo2LCgwfGYpPD0wKXVyPWI7ZWxzZXtoPTA8KDB8biksZD0wO2Rve0E6ZG97aWYoaClmb3IoYT11KygoKHM9MCl8YnIoZCxsKSk8PDEpfDA7Oyl7c3dpdGNoKDB8byl7Y2FzZSAwOmM9MHxvclsoYT1hKzJ8MCk+PjFdO2JyZWFrO2Nhc2UgMTp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKyg1OCooMHxvclt2Pj4xXSl8MCkrKDEwKigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSAyOnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC00KSkrKDU0KigwfG9yW3Y+PjFdKXwwKSsob3JbYSs0Pj4xXTw8NCktKG9yW2ErNj4+MV08PDEpPj5rJjY1NTM1LGE9djticmVhaztjYXNlIDM6dj1hKzJ8MCxjPSgwfGJyKDB8b3JbYT4+MV0sLTYpKSsoNDYqKDB8b3Jbdj4+MV0pfDApKygyOCooMHxvclthKzQ+PjFdKXwwKS0ob3JbYSs2Pj4xXTw8Mik+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNDp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtNCkpLShvclthKzY+PjFdPDwyKSsoMzYqKCgwfG9yW2ErND4+MV0pKygwfG9yW3Y+PjFdKXwwKXwwKT4+ayY2NTUzNSxhPXY7YnJlYWs7Y2FzZSA1OnY9YSsyfDAsYz0oMHxicigwfG9yW2E+PjFdLC00KSkrKDI4KigwfG9yW3Y+PjFdKXwwKSsoNDYqKDB8b3JbYSs0Pj4xXSl8MCkrKDB8YnIoMHxvclthKzY+PjFdLC02KSk+PmsmNjU1MzUsYT12O2JyZWFrO2Nhc2UgNjp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKyhvclt2Pj4xXTw8NCkrKDU0KigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwyKT4+ayY2NTUzNSxhPXY7YnJlYWs7ZGVmYXVsdDp2PWErMnwwLGM9KDB8YnIoMHxvclthPj4xXSwtMikpKygxMCooMHxvclt2Pj4xXSl8MCkrKDU4KigwfG9yW2ErND4+MV0pfDApLShvclthKzY+PjFdPDwxKT4+ayY2NTUzNSxhPXZ9aWYodj1BKygoMHxicihzLGUpKStkPDwxKXwwLG9yW3Y+PjFdPWMsKDB8KHM9cysxfDApKT09KDB8bikpYnJlYWsgQX19d2hpbGUoMCk7ZD1kKzF8MH13aGlsZSgoMHxkKSE9KDB8ZikpO3VyPWJ9fSxPYixPYixPYl0sc3M9W2Z1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1KXtaKDIyKX0sZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyxsLHUpe0F8PTAsZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MDt2YXIgYixzLGQ9MCxrPTAsaD0wO2lmKCgwfCh1fD0wKSk8PTAmJnNyKDM2MjkzLDM2MjQzLDgwLDM2MzMyKSxzPWErMStsPDx1LCEoKDB8dCk8PTApJiYoYj11KzF8MCwwPCgwfG4pKSl7ZD0wO2Rve2Zvcih1PTB8YnIoZCxmKSxsPUErKDB8YnIoZCxlKSl8MCxhPWkrKHU8PDEpfDAsdT1yKyh1PDwxKXwwLGs9MDtoPShoPTB8YnIoMHxvclt1Pj4xXSxvKSkrcysoMHxicigwfG9yW2E+PjFdLGMpKT4+Yix0cltsPj4wXT0oMHxoKTwwPzA6MjU1JigoMHxoKTwyNTU/aDoyNTUpLCgwfChrPWsrMXwwKSkhPSgwfG4pOylsPWwrMXwwLGE9YSsyfDAsdT11KzJ8MDtkPWQrMXwwfXdoaWxlKCgwfGQpIT0oMHx0KSl9fV0sZHM9W2Z1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIpe1ooMjMpfSxmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtBfD0wLGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsYnw9MDt2YXIgcyxkLGssaCx3PTAsdj0wO2lmKCgwfCh1fD0wKSk8PTAmJnNyKDM2MjkzLDM2MjQzLDIxMywzNjQ1OCksaD1hKzErbDw8dSwhKCgwfHQpPD0wKSYmKGs9dSsxfDAsZD02NTUzNSsocz0xPDxiKXwwLDA8KDB8bikpKXtiPTA7ZG97Zm9yKHU9MHxicihiLGYpLGw9QSsoKDB8YnIoYixlKSk8PDEpfDAsYT1pKyh1PDwxKXwwLHU9cisodTw8MSl8MCx3PTA7dj0odj0wfGJyKDB8b3JbdT4+MV0sbykpK2grKDB8YnIoMHxvclthPj4xXSxjKSk+Pmssb3JbbD4+MV09KDB8dik8MD8wOjY1NTM1JigoMHx2KTwoMHxzKT92OmQpLCgwfCh3PXcrMXwwKSkhPSgwfG4pOylsPWwrMnwwLGE9YSsyfDAsdT11KzJ8MDtiPWIrMXwwfXdoaWxlKCgwfGIpIT0oMHx0KSl9fV07cmV0dXJue19fR0xPQkFMX19JXzAwMDEwMTpmdW5jdGlvbigpeyFmdW5jdGlvbihBKXtBfD0wO3ZhciBlPTA7KGZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmO2V8PTAscnw9MCxmPXVyPShpPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxTZihBfD0wKSxhcltBPj4yXT0xNDYzNixhcltBKzMyPj4yXT1lLGFyW0ErNDA+PjJdPXIscj0tMSxhcltBKzQ4Pj4yXT1yLHRyW0ErNTI+PjBdPTAscj0wfGFyWzgrKDB8YXJbQT4+Ml0pPj4yXSxydShmLEErNHwwKSxmc1s2MyZyXShBLGYpLGJuKGYpLHVyPWl9KSg1ODg2NCxBPTB8YXJbMjYzN10sNTg5MjApLGFyWzE0NTQ2XT0xNDIwOCxhclsxNDU0OF09MTQyMjgsYXJbMTQ1NDddPTAsSmYoNTgxOTIsNTg4NjQpLGFyWzE0NTY2XT0wLGU9LTEsYXJbMTQ1NjddPWUsZnVuY3Rpb24oQSxlLHIpe3ZhciBpLGY7ZXw9MCxyfD0wLGY9dXI9KGk9dXIpKzMxJi0zMix1cj11cisxNnwwLE9mKEF8PTApLGFyW0E+PjJdPTE0NTcyLGFyW0ErMzI+PjJdPWUsYXJbQSs0MD4+Ml09cixyPS0xLGFyW0ErNDg+PjJdPXIsdHJbQSs1Mj4+MF09MCxyPTB8YXJbOCsoMHxhcltBPj4yXSk+PjJdLHJ1KGYsQSs0fDApLGZzWzYzJnJdKEEsZiksYm4oZiksdXI9aX0oNTg5MjgsQSw1ODk4NCksYXJbMTQ1NjhdPTE0MjU2LGFyWzE0NTcwXT0xNDI3NixhclsxNDU2OV09MCxKZig1ODI4MCw1ODkyOCksYXJbMTQ1ODhdPTAsQT0tMSxhclsxNDU4OV09QSxxZig1ODk5MixBPTB8YXJbMjU0M10sNTkwNDApLGFyWzE0NTkwXT0yOCxhclsxNDU5MV09NDgsSmYoNTgzNjQsNTg5OTIpLGFyWzE0NjA5XT0wLGU9LTEsYXJbMTQ2MTBdPWUsJGYoNTkwNDgsQSw1OTA5NiksYXJbMTQ2MTFdPTE0MzEyLGFyWzE0NjEyXT0xNDMzMixKZig1ODQ0OCw1OTA0OCksYXJbMTQ2MzBdPTAsQT0tMSxhclsxNDYzMV09QSxxZig1OTEwNCxBPTB8YXJbMjY2OV0sNTkxNTIpLGFyWzE0NjMyXT0yOCxhclsxNDYzM109NDgsSmYoNTg1MzIsNTkxMDQpLGFyWzE0NjUxXT0wLGU9LTEsYXJbMTQ2NTJdPWUsZT0wfGFyWzU4NTI4KygwfGFyWygwfGFyWzE0NjMyXSktMTI+PjJdKSsyND4+Ml0sYXJbMTQ2NzRdPTI4LGFyWzE0Njc1XT00OCxKZig1ODcwMCxlKSxhclsxNDY5M109MCxlPS0xLGFyWzE0Njk0XT1lLCRmKDU5MTYwLEEsNTkyMDgpLGFyWzE0NjUzXT0xNDMxMixhclsxNDY1NF09MTQzMzIsSmYoNTg2MTYsNTkxNjApLGFyWzE0NjcyXT0wLEE9LTEsYXJbMTQ2NzNdPUEsQT0wfGFyWzU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSsyND4+Ml0sYXJbMTQ2OTVdPTE0MzEyLGFyWzE0Njk2XT0xNDMzMixKZig1ODc4NCxBKSxhclsxNDcxNF09MCxBPS0xLGFyWzE0NzE1XT1BLGFyWzU4MTg0KygwfGFyWygwfGFyWzE0NTQ2XSktMTI+PjJdKSs3Mj4+Ml09NTgzNjAsYXJbNTgyNzIrKDB8YXJbKDB8YXJbMTQ1NjhdKS0xMj4+Ml0pKzcyPj4yXT01ODQ0NCxBPTU4NTI4KygwfGFyWygwfGFyWzE0NjMyXSktMTI+PjJdKSs0fDAsYXJbQT4+Ml09ODE5MnxhcltBPj4yXSxBPTU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSs0fDAsYXJbQT4+Ml09ODE5MnxhcltBPj4yXSxhcls1ODUyOCsoMHxhclsoMHxhclsxNDYzMl0pLTEyPj4yXSkrNzI+PjJdPTU4MzYwLGFyWzU4NjEyKygwfGFyWygwfGFyWzE0NjUzXSktMTI+PjJdKSs3Mj4+Ml09NTg0NDR9KDApfSxfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHA6ZnVuY3Rpb24oKXtyQSg0MDgwLDQ4OTA3KSxTKDQwOTYsNDg5MTIsMSwxLDApLEwoNDEwNCw0ODkxNywxLC0xMjgsMTI3KSxMKDQxMjAsNDg5MjIsMSwtMTI4LDEyNyksTCg0MTEyLDQ4OTM0LDEsMCwyNTUpLEwoNDEyOCw0ODk0OCwyLC0zMjc2OCwzMjc2NyksTCg0MTM2LDQ4OTU0LDIsMCw2NTUzNSksTCg0MTQ0LDQ4OTY5LDQsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NyksTCg0MTUyLDQ4OTczLDQsMCwtMSksTCg0MTYwLDQ4OTg2LDQsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NyksTCg0MTY4LDQ4OTkxLDQsMCwtMSkseCg0MTc2LDQ5MDA1LDQpLHgoNDE4NCw0OTAxMSw4KSxxKDE0MDgsNDkwMTgpLHEoMjMzNiw0OTAzMCksJCgyMzYwLDQsNDkwNjMpLHooMTQwMCw0OTA3NiksSygyMzg0LDAsNDkwOTIpLEsoMjM5MiwwLDQ5MTIyKSxLKDI0MDAsMSw0OTE1OSksSygyNDA4LDIsNDkxOTgpLEsoMjQxNiwzLDQ5MjI5KSxLKDI0MjQsNCw0OTI2OSksSygyNDMyLDUsNDkyOTgpLEsoMjQ0MCw0LDQ5MzM2KSxLKDI0NDgsNSw0OTM2NiksSygyMzkyLDAsNDk0MDUpLEsoMjQwMCwxLDQ5NDM3KSxLKDI0MDgsMiw0OTQ3MCksSygyNDE2LDMsNDk1MDMpLEsoMjQyNCw0LDQ5NTM3KSxLKDI0MzIsNSw0OTU3MCksSygyNDU2LDYsNDk2MDQpLEsoMjQ2NCw3LDQ5NjM1KSxLKDI0NzIsNyw0OTY2Nyl9LF9fR0xPQkFMX19zdWJfSV9ib3hfY2M6ZnVuY3Rpb24oKXt2YXIgQSxlO3VyPShlPXVyKSsxNnwwLGFyWyhBPWUpPj4yXT0wLGFyW0ErND4+Ml09MCxvbyg1NjU5MixhcltBKzg+PjJdPTAsMCxBKSx1cj0oMDw9KDB8dHJbQSsxMT4+MF0pfHx2dSgwfGFyW0E+PjJdKSxlKX0sX19HTE9CQUxfX3N1Yl9JX2hlaWZfY2M6ZnVuY3Rpb24oKXshZnVuY3Rpb24oQSl7QXw9MDt2YXIgZT0wO1AoMjYxNzcsMSw2MjQ0LDI2MTk0LDY3LDQzNSksUCgyNjE5NywxLDYyNDgsMjYxOTQsNjgsMiksUCgyNjIyMSwxLDYyNTIsMjYxOTQsNjksMyksUCgyNjI0MCwyLDYyNTYsMjYyNTgsNDQsNDM2KSxQKDI2MjYyLDMsNjI2NCwyNjI5MiwzMiw3NyksUCgyNjI5NywyLDYyNzYsMjYzNDEsMjAsNzApLFAoMjYzNDUsMiw2Mjg0LDI2MzQxLDIxLDQ1KSxQKDI2MzkzLDMsNjI5MiwyNjI5MiwzMyw3OCksUCgyNjQyNiw0LDYzMDQsMjY0NDcsNywxMCksUCgyNjQ1MywyLDYzMjAsMjYyNTgsNDYsNDM3KSxqKDEyMjQsMjY0NzksNCwwKSxIKDEyMjQsMjY0OTUsMCksSCgxMjI0LDI2NTA5LDEpLEgoMTIyNCwyNjU0MSwyKSxIKDEyMjQsMjY1NjYsMyksSCgxMjI0LDI2NTk4LDQpLEgoMTIyNCwyNjYyOSw1KSxIKDEyMjQsMjY2NTIsNiksSCgxMjI0LDI2Njg3LDcpLEgoMTIyNCwyNjcxOSw4KSxIKDEyMjQsMjY3NTEsOSksSCgxMjI0LDI2Nzc3LDEwKSxqKDEyMzIsMjY4MTcsNCwwKSxIKDEyMzIsMjY4MzYsMCksSCgxMjMyLDI2ODYyLDVlMyksSCgxMjMyLDI2OTAxLDEwMCksSCgxMjMyLDI2OTI3LDEwMSksSCgxMjMyLDI2OTU4LDEwMiksSCgxMjMyLDI2OTg0LDEwMyksSCgxMjMyLDI3MDEwLDEwNCksSCgxMjMyLDI3MDM2LDEwNSksSCgxMjMyLDI3MDYyLDEwNiksSCgxMjMyLDI3MDg4LDEwNyksSCgxMjMyLDI3MTE0LDEwOCksSCgxMjMyLDI3MTQwLDEwOSksSCgxMjMyLDI3MTY2LDExMCksSCgxMjMyLDI3MTkyLDExMSksSCgxMjMyLDI3MjE4LDExMiksSCgxMjMyLDI3MjQ0LDExMyksSCgxMjMyLDI3MjcwLDExNCksSCgxMjMyLDI3MzAwLDExNSksSCgxMjMyLDI3MzU1LDExNiksSCgxMjMyLDI3NDAwLDExNyksSCgxMjMyLDI3NDI3LDExOCksSCgxMjMyLDI3NDU5LDExOSksSCgxMjMyLDI3NDkzLDEzMSksSCgxMjMyLDI3NTE5LDEyMCksSCgxMjMyLDI3NTU2LDEyMSksSCgxMjMyLDI3NTkxLDEyMiksSCgxMjMyLDI3NjM3LDEyMyksSCgxMjMyLDI3Njg0LDEyNCksSCgxMjMyLDI3NzI1LDEyNSksSCgxMjMyLDI3NzUxLDFlMyksSCgxMjMyLDI3Nzg5LDEyNiksSCgxMjMyLDI3ODMwLDEyNyksSCgxMjMyLDI3ODc1LDEyOCksSCgxMjMyLDI3OTE1LDEyOSksSCgxMjMyLDI3OTQ4LDJlMyksSCgxMjMyLDI3OTkwLDIwMDEpLEgoMTIzMiwyODAyNiwyMDAyKSxIKDEyMzIsMjgwNzcsMjAwMyksSCgxMjMyLDI4MTE4LDIwMDQpLEgoMTIzMiwyODE1OSwyMDA1KSxIKDEyMzIsMjgxOTUsMjAwNiksSCgxMjMyLDI4MjMzLDEzMCksSCgxMjMyLDI4MjY0LDNlMyksSCgxMjMyLDI4Mjk2LDMwMDEpLEgoMTIzMiwyODMzMywzMDAyKSxIKDEyMzIsMjgzNzIsMzAwMyksSCgxMjMyLDI4NDE1LDMwMDQpLEgoMTIzMiwyODQ2Niw0ZTMpLGooMTI0MCwyODUwMiw0LDApLEgoMTI0MCwyODUyNiwwKSxIKDEyNDAsMjg1NTMsMSksSCgxMjQwLDI4NTc1LDIpLEgoMTI0MCwyODU5NiwzKSxIKDEyNDAsMjg2MTgsNCksaigxMjQ4LDI4NjM5LDQsMCksSCgxMjQ4LDI4NjUxLDk5KSxIKDEyNDgsMjg2NzMsMCksSCgxMjQ4LDI4Njk2LDEpLEgoMTI0OCwyODcxMiwyKSxIKDEyNDgsMjg3MjgsMyksSCgxMjQ4LDI4NzQ0LDEwKSxIKDEyNDgsMjg3NzIsMTEpLEgoMTI0OCwyODgwMSwxMiksSCgxMjQ4LDI4ODM1LDEzKSxIKDEyNDgsMjg4NzEsMTQpLEgoMTI0OCwyODkwNSwxNSksSCgxMjQ4LDI4OTQxLDEwKSxIKDEyNDgsMjg5NzEsMTEpLGooMTI1NiwyOTAwMSw0LDApLEgoMTI1NiwyOTAxNyw5OSksSCgxMjU2LDI5MDQzLDApLEgoMTI1NiwyOTA2NSwxKSxIKDEyNTYsMjkwODUsMiksaigxMjY0LDI5MTEyLDQsMCksSCgxMjY0LDI5MTI1LDApLEgoMTI2NCwyOTE0MCwyKSxIKDEyNjQsMjkxNTYsMSksSCgxMjY0LDI5MTcyLDMpLEgoMTI2NCwyOTE4Nyw0KSxIKDEyNjQsMjkyMDIsNSksSCgxMjY0LDI5MjE3LDYpLEgoMTI2NCwyOTIzNiwxMCksTygxMjcyLDEyODAsMTI5NiwwLDI2MTk0LDcxLDI5Mjc0LDAsMjkyNzQsMCwyOTI2MSwyOTI3Niw0MzgpLE8oMTMxMiwxMzIwLDEzMzYsMCwyNjE5NCw3MiwyOTI3NCwwLDI5Mjc0LDAsMjkyNzksMjkyNzYsNDM5KSxPKDEzNTIsMTM2MCwxMzc2LDAsMjYxOTQsNzMsMjkyNzQsMCwyOTI3NCwwLDI5Mjk3LDI5Mjc2LDQ0MCksQUEoMTM5MiwyOTMwOCwyOTMxOSw0LDI5Mjc2LDQ0MSksQT0wfGh1KDQpLGFyW0E+PjJdPTAsZT0wfGh1KDQpLGFyW2U+PjJdPTAsZUEoMTM5MiwyOTMyMSwxMjI0LDI2MzQxLDIyLDB8QSwxMjI0LDI5MzI2LDc5LDB8ZSksZT0wfGh1KDQpLGFyW2U+PjJdPTQsQT0wfGh1KDQpLGFyW0E+PjJdPTQsZUEoMTM5MiwyOTMzMSwxMjMyLDI2MzQxLDIzLDB8ZSwxMjMyLDI5MzI2LDgwLDB8QSksVSgxMzkyKX0oMCl9LF9fR0xPQkFMX19zdWJfSV9oZWlmX3BsdWdpbl9yZWdpc3RyeV9jYzpmdW5jdGlvbigpe2FyWzE0MzIxXT0wLGFyWzE0MzIyXT0wLGFyWzE0MzIwXT01NzI4NCxhclsxNDMyNF09MCxhclsxNDMyNV09MCxhclsxNDMyM109NTcyOTYsZnVuY3Rpb24oQSl7QXw9MDt2YXIgZSxyPTAsaT0wLGY9MDtmPTc1ODAsMHwoQT0wfGFyWyhlPWYpKzg+PjJdKSYmcnNbNyZBXSgpO0E9MHxhclsxNDMyMV07ZG97aWYoQSl7Zm9yKGk9NTcyODQ7Oyl7aWYocj0wfGFyW0ErMTY+PjJdLGY+Pj4wPHI+Pj4wKXtpZighKHI9MHxhcltBPj4yXSkpe3I9NzticmVha319ZWxzZXtpZihmPj4+MDw9cj4+PjApe3I9MTE7YnJlYWt9aWYoIShyPTB8YXJbKGk9QSs0fDApPj4yXSkpe3I9MTA7YnJlYWt9QT1pfWk9QSxBPXJ9aWYoNz09KDB8cikpe2k9Zj1BO2JyZWFrfWlmKDEwPT0oMHxyKSl7Zj1BO2JyZWFrfWlmKDExPT0oMHxyKSl7Zj1BO2JyZWFrfX1lbHNlIGk9Zj01NzI4NH13aGlsZSgwKTtpZigwfGFyW2k+PjJdKXJldHVybjtBPTB8aHUoMjApLGFyW0ErMTY+PjJdPWUsYXJbQT4+Ml09MCxhcltBKzQ+PjJdPTAsYXJbQSs4Pj4yXT1mLGFyW2k+PjJdPUEsKHI9MHxhclthclsxNDMyMF0+PjJdKSYmKGFyWzE0MzIwXT1yLEE9MHxhcltpPj4yXSk7c28oMHxhclsxNDMyMV0sQSksYXJbMTQzMjJdPTErKDB8YXJbMTQzMjJdKX0oNjExNjApfSxfX0dMT0JBTF9fc3ViX0lfaW9zdHJlYW1fY3BwOmZ1bmN0aW9uKCl7fSxfX19jeGFfY2FuX2NhdGNoOmZ1bmN0aW9uKEEsZSxyKXt2YXIgaSxmO3JldHVybiBBfD0wLGV8PTAscnw9MCxpPXVyPShmPXVyKSszMSYtMzIsdXI9dXIrMTZ8MCxhcltpPj4yXT1hcltyPj4yXSwoQT0wfHhiWzYzJmFyWzE2KygwfGFyW0E+PjJdKT4+Ml1dKEEsZSxpKSkmJihhcltyPj4yXT1hcltpPj4yXSksdXI9ZiwxJkF8MH0sX19fY3hhX2lzX3BvaW50ZXJfdHlwZTpmdW5jdGlvbihBKXtyZXR1cm4gMSYoQT0oQXw9MCk/MCE9KDB8cXUoQSwzOTYwLDQwNDgsMCkpOjApfDB9LF9fX2Vycm5vX2xvY2F0aW9uOkNjLF9fX2dldFR5cGVOYW1lOmZ1bmN0aW9uKEEpe3JldHVybiAwfChlPTB8YXJbKEF8PTApKzQ+PjJdLChpPShpPTApfHljKHI9MSsoMHxWYyhlfD0wKSl8MCkpP2hiKDB8aSwwfGUsMHxyKTppPTAsMHxpKTt2YXIgZSxyLGl9LF9fX211bGRpMzpuYixfX191ZGl2ZGkzOmxiLF9fX3VyZW1kaTM6dWIsX2JpdHNoaWZ0NjRBc2hyOmJiLF9iaXRzaGlmdDY0THNocjpzYixfYml0c2hpZnQ2NFNobDpkYixfZW1zY3JpcHRlbl9nZXRfZ2xvYmFsX2xpYmM6ZnVuY3Rpb24oKXtyZXR1cm4gNTgwNjR9LF9lbXNjcmlwdGVuX3JlcGxhY2VfbWVtb3J5OmZ1bmN0aW9uKEEpe3JldHVybiEoMTY3NzcyMTUmdShBKXx8dShBKTw9MTY3NzcyMTV8fDIxNDc0ODM2NDg8dShBKSkmJih0cj1uZXcgaShBKSxvcj1uZXcgZihBKSxhcj1uZXcgbihBKSxjcj1uZXcgdChBKSxscj1uZXcgbyhBKSxuZXcgYShBKSxnQT1uZXcgYyhBKSxRPW5ldyBsKEEpLHI9QSwhMCl9LF9mcmVlOkJjLF9pNjRBZGQ6dGIsX2k2NFN1YnRyYWN0Om9iLF9sbHZtX2Jzd2FwX2kzMjprYixfbWFsbG9jOnljLF9tZW1jcHk6aGIsX21lbW1vdmU6d2IsX21lbXNldDp2YixfcHRocmVhZF9jb25kX2Jyb2FkY2FzdDptYixfcHRocmVhZF9tdXRleF9sb2NrOmdiLF9wdGhyZWFkX211dGV4X3VubG9jazpaYixfcm91bmRmOnBiLF9zYnJrOnliLGR5bkNhbGxfaTpmdW5jdGlvbihBKXtyZXR1cm4gMHx6Yls3JihBfD0wKV0oKX0sZHluQ2FsbF9paTpmdW5jdGlvbihBLGUpe3JldHVybiBlfD0wLDB8amJbMTI3JihBfD0wKV0oMHxlKX0sZHluQ2FsbF9paWk6ZnVuY3Rpb24oQSxlLHIpe3JldHVybiBlfD0wLHJ8PTAsMHxIYlszMSYoQXw9MCldKDB8ZSwwfHIpfSxkeW5DYWxsX2lpaWk6ZnVuY3Rpb24oQSxlLHIsaSl7cmV0dXJuIGV8PTAscnw9MCxpfD0wLDB8eGJbNjMmKEF8PTApXSgwfGUsMHxyLDB8aSl9LGR5bkNhbGxfaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCwwfFBiWzcmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYpfSxkeW5DYWxsX2lpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbil7cmV0dXJuIGV8PTAscnw9MCxpfD0wLGZ8PTAsbj0rbiwwfExiWzcmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsK24pfSxkeW5DYWxsX2lpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbil7cmV0dXJuIGV8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCwwfEtiWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8bil9LGR5bkNhbGxfaWlpaWlpZDpmdW5jdGlvbihBLGUscixpLGYsbix0KXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHQ9K3QsMHxxYlszJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwrdCl9LGR5bkNhbGxfaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0KXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsMHwkYls2MyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0KX0sZHluQ2FsbF9paWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8pe3JldHVybiBlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLDB8QXNbNyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8byl9LGR5bkNhbGxfaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhKXtyZXR1cm4gZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLDB8ZXNbMTUmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsMHxuLDB8dCwwfG8sMHxhKX0sZHluQ2FsbF92OmZ1bmN0aW9uKEEpe3JzWzcmKEF8PTApXSgpfSxkeW5DYWxsX3ZpOmZ1bmN0aW9uKEEsZSl7ZXw9MCxpc1s1MTEmKEF8PTApXSgwfGUpfSxkeW5DYWxsX3ZpaTpmdW5jdGlvbihBLGUscil7ZXw9MCxyfD0wLGZzWzYzJihBfD0wKV0oMHxlLDB8cil9LGR5bkNhbGxfdmlpaTpmdW5jdGlvbihBLGUscixpKXtlfD0wLHJ8PTAsaXw9MCxuc1sxMjcmKEF8PTApXSgwfGUsMHxyLDB8aSl9LGR5bkNhbGxfdmlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLHRzWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmKX0sZHluQ2FsbF92aWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4pe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCxvc1s2MyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4pfSxkeW5DYWxsX3ZpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsYXNbMTUmKEF8PTApXSgwfGUsMHxyLDB8aSwwfGYsMHxuLDB8dCl9LGR5bkNhbGxfdmlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGNzWzMxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvKX0sZHluQ2FsbF92aWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxsc1szMSYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEpfSxkeW5DYWxsX3ZpaWlpaWlpaWk6ZnVuY3Rpb24oQSxlLHIsaSxmLG4sdCxvLGEsYyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsdXNbMyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEsMHxjKX0sZHluQ2FsbF92aWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwpe2V8PTAscnw9MCxpfD0wLGZ8PTAsbnw9MCx0fD0wLG98PTAsYXw9MCxjfD0wLGx8PTAsYnNbNyYoQXw9MCldKDB8ZSwwfHIsMHxpLDB8ZiwwfG4sMHx0LDB8bywwfGEsMHxjLDB8bCl9LGR5bkNhbGxfdmlpaWlpaWlpaWlpaTpmdW5jdGlvbihBLGUscixpLGYsbix0LG8sYSxjLGwsdSxiKXtlfD0wLHJ8PTAsaXw9MCxmfD0wLG58PTAsdHw9MCxvfD0wLGF8PTAsY3w9MCxsfD0wLHV8PTAsYnw9MCxzc1sxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvLDB8YSwwfGMsMHxsLDB8dSwwfGIpfSxkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKEEsZSxyLGksZixuLHQsbyxhLGMsbCx1LGIscyl7ZXw9MCxyfD0wLGl8PTAsZnw9MCxufD0wLHR8PTAsb3w9MCxhfD0wLGN8PTAsbHw9MCx1fD0wLGJ8PTAsc3w9MCxkc1sxJihBfD0wKV0oMHxlLDB8ciwwfGksMHxmLDB8biwwfHQsMHxvLDB8YSwwfGMsMHxsLDB8dSwwfGIsMHxzKX0sZXN0YWJsaXNoU3RhY2tTcGFjZTpmdW5jdGlvbihBLGUpe3VyPUF8PTAsZXw9MH0sZ2V0VGVtcFJldDA6ZnVuY3Rpb24oKXtyZXR1cm4gMHxEfSxydW5Qb3N0U2V0czpmdW5jdGlvbigpe30sc2V0VGVtcFJldDA6ZnVuY3Rpb24oQSl7RD1BfD0wfSxzZXRUaHJldzpmdW5jdGlvbihBLGUpe0F8PTAsZXw9MCxrfHwoaz1BLDApfSxzdGFja0FsbG9jOmZ1bmN0aW9uKEEpe3ZhciBlO3JldHVybiB1cj0odXI9KGU9dXIpKyhBfD0wKXwwKSsxNSYtMTYsMHxlfSxzdGFja1Jlc3RvcmU6ZnVuY3Rpb24oQSl7dXI9QXw9MH0sc3RhY2tTYXZlOmZ1bmN0aW9uKCl7cmV0dXJuIDB8dXJ9fX0oZC5hc21HbG9iYWxBcmcsZC5hc21MaWJyYXJ5QXJnLHkpLFpyPWQuX19HTE9CQUxfX0lfMDAwMTAxPWdyLl9fR0xPQkFMX19JXzAwMDEwMSxwcj1kLl9fR0xPQkFMX19zdWJfSV9iaW5kX2NwcD1nci5fX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAseXI9ZC5fX0dMT0JBTF9fc3ViX0lfYm94X2NjPWdyLl9fR0xPQkFMX19zdWJfSV9ib3hfY2MsQnI9ZC5fX0dMT0JBTF9fc3ViX0lfaGVpZl9jYz1nci5fX0dMT0JBTF9fc3ViX0lfaGVpZl9jYyxFcj1kLl9fR0xPQkFMX19zdWJfSV9oZWlmX3BsdWdpbl9yZWdpc3RyeV9jYz1nci5fX0dMT0JBTF9fc3ViX0lfaGVpZl9wbHVnaW5fcmVnaXN0cnlfY2MsWHI9ZC5fX0dMT0JBTF9fc3ViX0lfaW9zdHJlYW1fY3BwPWdyLl9fR0xPQkFMX19zdWJfSV9pb3N0cmVhbV9jcHAsV3I9KGQuX19fY3hhX2Nhbl9jYXRjaD1nci5fX19jeGFfY2FuX2NhdGNoLGQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1nci5fX19jeGFfaXNfcG9pbnRlcl90eXBlLGQuX19fZXJybm9fbG9jYXRpb249Z3IuX19fZXJybm9fbG9jYXRpb24sZC5fX19nZXRUeXBlTmFtZT1nci5fX19nZXRUeXBlTmFtZSksSXI9KGQuX19fbXVsZGkzPWdyLl9fX211bGRpMyxkLl9fX3VkaXZkaTM9Z3IuX19fdWRpdmRpMyxkLl9fX3VyZW1kaTM9Z3IuX19fdXJlbWRpMyxkLl9iaXRzaGlmdDY0QXNocj1nci5fYml0c2hpZnQ2NEFzaHIsZC5fYml0c2hpZnQ2NExzaHI9Z3IuX2JpdHNoaWZ0NjRMc2hyLGQuX2JpdHNoaWZ0NjRTaGw9Z3IuX2JpdHNoaWZ0NjRTaGwsZC5fZW1zY3JpcHRlbl9nZXRfZ2xvYmFsX2xpYmM9Z3IuX2Vtc2NyaXB0ZW5fZ2V0X2dsb2JhbF9saWJjLGQuX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnk9Z3IuX2Vtc2NyaXB0ZW5fcmVwbGFjZV9tZW1vcnkpLENyPWQuX2ZyZWU9Z3IuX2ZyZWUsR3I9KGQuX2k2NEFkZD1nci5faTY0QWRkLGQuX2k2NFN1YnRyYWN0PWdyLl9pNjRTdWJ0cmFjdCxkLl9sbHZtX2Jzd2FwX2kzMj1nci5fbGx2bV9ic3dhcF9pMzIsZC5fbWFsbG9jPWdyLl9tYWxsb2MpO2QuX21lbWNweT1nci5fbWVtY3B5LGQuX21lbW1vdmU9Z3IuX21lbW1vdmUsZC5fbWVtc2V0PWdyLl9tZW1zZXQsZC5fcHRocmVhZF9jb25kX2Jyb2FkY2FzdD1nci5fcHRocmVhZF9jb25kX2Jyb2FkY2FzdCxkLl9wdGhyZWFkX211dGV4X2xvY2s9Z3IuX3B0aHJlYWRfbXV0ZXhfbG9jayxkLl9wdGhyZWFkX211dGV4X3VubG9jaz1nci5fcHRocmVhZF9tdXRleF91bmxvY2ssZC5fcm91bmRmPWdyLl9yb3VuZGYsZC5fc2Jyaz1nci5fc2JyayxkLmVzdGFibGlzaFN0YWNrU3BhY2U9Z3IuZXN0YWJsaXNoU3RhY2tTcGFjZSxkLmdldFRlbXBSZXQwPWdyLmdldFRlbXBSZXQwLGQucnVuUG9zdFNldHM9Z3IucnVuUG9zdFNldHMsZC5zZXRUZW1wUmV0MD1nci5zZXRUZW1wUmV0MCxkLnNldFRocmV3PWdyLnNldFRocmV3LGQuc3RhY2tBbGxvYz1nci5zdGFja0FsbG9jLGQuc3RhY2tSZXN0b3JlPWdyLnN0YWNrUmVzdG9yZSxkLnN0YWNrU2F2ZT1nci5zdGFja1NhdmUsZC5keW5DYWxsX2k9Z3IuZHluQ2FsbF9pLGQuZHluQ2FsbF9paT1nci5keW5DYWxsX2lpLGQuZHluQ2FsbF9paWk9Z3IuZHluQ2FsbF9paWksZC5keW5DYWxsX2lpaWk9Z3IuZHluQ2FsbF9paWlpLGQuZHluQ2FsbF9paWlpaT1nci5keW5DYWxsX2lpaWlpLGQuZHluQ2FsbF9paWlpaWQ9Z3IuZHluQ2FsbF9paWlpaWQsZC5keW5DYWxsX2lpaWlpaT1nci5keW5DYWxsX2lpaWlpaSxkLmR5bkNhbGxfaWlpaWlpZD1nci5keW5DYWxsX2lpaWlpaWQsZC5keW5DYWxsX2lpaWlpaWk9Z3IuZHluQ2FsbF9paWlpaWlpLGQuZHluQ2FsbF9paWlpaWlpaT1nci5keW5DYWxsX2lpaWlpaWlpLGQuZHluQ2FsbF9paWlpaWlpaWk9Z3IuZHluQ2FsbF9paWlpaWlpaWksZC5keW5DYWxsX3Y9Z3IuZHluQ2FsbF92LGQuZHluQ2FsbF92aT1nci5keW5DYWxsX3ZpLGQuZHluQ2FsbF92aWk9Z3IuZHluQ2FsbF92aWksZC5keW5DYWxsX3ZpaWk9Z3IuZHluQ2FsbF92aWlpLGQuZHluQ2FsbF92aWlpaT1nci5keW5DYWxsX3ZpaWlpLGQuZHluQ2FsbF92aWlpaWk9Z3IuZHluQ2FsbF92aWlpaWksZC5keW5DYWxsX3ZpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaT1nci5keW5DYWxsX3ZpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWksZC5keW5DYWxsX3ZpaWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWlpaT1nci5keW5DYWxsX3ZpaWlpaWlpaWlpLGQuZHluQ2FsbF92aWlpaWlpaWlpaWlpPWdyLmR5bkNhbGxfdmlpaWlpaWlpaWlpaSxkLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWk9Z3IuZHluQ2FsbF92aWlpaWlpaWlpaWlpaTtpZihrLnN0YWNrQWxsb2M9ZC5zdGFja0FsbG9jLGsuc3RhY2tTYXZlPWQuc3RhY2tTYXZlLGsuc3RhY2tSZXN0b3JlPWQuc3RhY2tSZXN0b3JlLGsuZXN0YWJsaXNoU3RhY2tTcGFjZT1kLmVzdGFibGlzaFN0YWNrU3BhY2Usay5zZXRUZW1wUmV0MD1kLnNldFRlbXBSZXQwLGsuZ2V0VGVtcFJldDA9ZC5nZXRUZW1wUmV0MCxkLmFzbT1ncixiQSlpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5sb2NhdGVGaWxlP2JBPWQubG9jYXRlRmlsZShiQSk6ZC5tZW1vcnlJbml0aWFsaXplclByZWZpeFVSTCYmKGJBPWQubWVtb3J5SW5pdGlhbGl6ZXJQcmVmaXhVUkwrYkEpLG98fHIpe3ZhciBWcj1kLnJlYWRCaW5hcnkoYkEpO0Uuc2V0KFZyLGsuR0xPQkFMX0JBU0UpfWVsc2V7bEEoKTt2YXIgRnI9ZnVuY3Rpb24oQSl7QS5ieXRlTGVuZ3RoJiYoQT1uZXcgVWludDhBcnJheShBKSksRS5zZXQoQSxrLkdMT0JBTF9CQVNFKSxkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdCYmZGVsZXRlIGQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LnJlc3BvbnNlLHVBKCl9O2Z1bmN0aW9uIFJyKCl7ZC5yZWFkQXN5bmMoYkEsRnIsZnVuY3Rpb24oKXt0aHJvdyJjb3VsZCBub3QgbG9hZCBtZW1vcnkgaW5pdGlhbGl6ZXIgIitiQX0pfXZhciBOcj12cihiQSk7aWYoTnIpRnIoTnIuYnVmZmVyKTtlbHNlIGlmKGQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0KXtmdW5jdGlvbiBfcigpe3ZhciBBPWQubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LGU9QS5yZXNwb25zZTtpZigyMDAhPT1BLnN0YXR1cyYmMCE9PUEuc3RhdHVzKXt2YXIgcj12cihkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdFVSTCk7aWYoIXIpcmV0dXJuIGNvbnNvbGUud2FybigiYSBwcm9ibGVtIHNlZW1zIHRvIGhhdmUgaGFwcGVuZWQgd2l0aCBNb2R1bGUubWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCBzdGF0dXM6ICIrQS5zdGF0dXMrIiwgcmV0cnlpbmcgIitiQSksdm9pZCBScigpO2U9ci5idWZmZXJ9RnIoZSl9ZC5tZW1vcnlJbml0aWFsaXplclJlcXVlc3QucmVzcG9uc2U/c2V0VGltZW91dChfciwwKTpkLm1lbW9yeUluaXRpYWxpemVyUmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixfcil9ZWxzZSBScigpfWZ1bmN0aW9uIFlyKEEpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrQSsiKSIsdGhpcy5zdGF0dXM9QX0oWXIucHJvdG90eXBlPW5ldyBFcnJvcikuY29uc3RydWN0b3I9WXI7dmFyIFFyPW51bGw7ZnVuY3Rpb24gRHIoQSl7ZnVuY3Rpb24gZSgpe2QuY2FsbGVkUnVufHwoZC5jYWxsZWRSdW49ITAsbnx8KEFBfHwoQUE9ITAseChMKSkseChLKSxkLm9uUnVudGltZUluaXRpYWxpemVkJiZkLm9uUnVudGltZUluaXRpYWxpemVkKCksZnVuY3Rpb24oKXtpZihkLnBvc3RSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnBvc3RSdW4mJihkLnBvc3RSdW49W2QucG9zdFJ1bl0pO2QucG9zdFJ1bi5sZW5ndGg7KUE9ZC5wb3N0UnVuLnNoaWZ0KCksJC51bnNoaWZ0KEEpO3ZhciBBO3goJCl9KCkpKX1BPUF8fGQuYXJndW1lbnRzLG51bGw9PT1RciYmKFFyPURhdGUubm93KCkpLDA8b0F8fChmdW5jdGlvbigpe2lmKGQucHJlUnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wcmVSdW4mJihkLnByZVJ1bj1bZC5wcmVSdW5dKTtkLnByZVJ1bi5sZW5ndGg7KUE9ZC5wcmVSdW4uc2hpZnQoKSxQLnVuc2hpZnQoQSk7dmFyIEE7eChQKX0oKSwwPG9BfHxkLmNhbGxlZFJ1bnx8KGQuc2V0U3RhdHVzPyhkLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5zZXRTdGF0dXMoIiIpfSwxKSxlKCl9LDEpKTplKCkpKX1jQT1mdW5jdGlvbiBBKCl7ZC5jYWxsZWRSdW58fERyKCksZC5jYWxsZWRSdW58fChjQT1BKX0sZC5ydW49RHIsZC5leGl0PWZ1bmN0aW9uKEEsZSl7ZSYmZC5ub0V4aXRSdW50aW1lJiYwPT09QXx8KGQubm9FeGl0UnVudGltZXx8KG49ITAsXz1tcix4KHEpLGQub25FeGl0JiZkLm9uRXhpdChBKSksbyYmcHJvY2Vzcy5leGl0KEEpLGQucXVpdChBLG5ldyBZcihBKSkpfTt2YXIgSnI9W107ZnVuY3Rpb24gTXIoZSl7ZC5vbkFib3J0JiZkLm9uQWJvcnQoZSksZT12b2lkIDAhPT1lPyhkLnByaW50KGUpLGQucHJpbnRFcnIoZSksSlNPTi5zdHJpbmdpZnkoZSkpOiIiLG49ITAsMDt2YXIgcj0iYWJvcnQoIitlKyIpIGF0ICIrcCgpKyJcXG5JZiB0aGlzIGFib3J0KCkgaXMgdW5leHBlY3RlZCwgYnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgd2hpY2ggY2FuIGdpdmUgbW9yZSBpbmZvcm1hdGlvbi4iO3Rocm93IEpyJiZKci5mb3JFYWNoKGZ1bmN0aW9uKEEpe3I9QShyLGUpfSkscn1pZihkLmFib3J0PU1yLGQucHJlSW5pdClmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlSW5pdCYmKGQucHJlSW5pdD1bZC5wcmVJbml0XSk7MDxkLnByZUluaXQubGVuZ3RoOylkLnByZUluaXQucG9wKCkoKTtkLm5vRXhpdFJ1bnRpbWU9ITAsRHIoKTtmdW5jdGlvbiBUcihBKXt0aGlzLmhhbmRsZT1BLHRoaXMuaW1nPW51bGx9VHIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZSYmKHpyLmhlaWZfaW1hZ2VfaGFuZGxlX3JlbGVhc2UodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwpfSxUci5wcm90b3R5cGUuX2Vuc3VyZUltYWdlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW1nKXt2YXIgQT16ci5oZWlmX2pzX2RlY29kZV9pbWFnZSh0aGlzLmhhbmRsZSx6ci5oZWlmX2NvbG9yc3BhY2VfWUNiQ3IsenIuaGVpZl9jaHJvbWFfNDIwKTtBJiYhQS5jb2RlPyh0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZnVuY3Rpb24oQSl7Zm9yKHZhciBlPW5ldyBBcnJheUJ1ZmZlcihBLmxlbmd0aCkscj1uZXcgVWludDhBcnJheShlKSxpPTAsZj1BLmxlbmd0aDtpPGY7aSsrKXJbaV09QS5jaGFyQ29kZUF0KGkpO3JldHVybiBlfShBLmRhdGEpKSxkZWxldGUgQS5kYXRhLHRoaXMuaW1nPUEpOmNvbnNvbGUubG9nKCJEZWNvZGluZyBpbWFnZSBmYWlsZWQiLHRoaXMuaGFuZGxlLEEpfX0sVHIucHJvdG90eXBlLmdldF93aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nLndpZHRofSxUci5wcm90b3R5cGUuZ2V0X2hlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nLmhlaWdodH0sVHIucHJvdG90eXBlLmlzX3ByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5zdXJlSW1hZ2UoKSwhIXRoaXMuaW1nLmlzX3ByaW1hcnl9LFRyLnByb3RvdHlwZS5kaXNwbGF5PWZ1bmN0aW9uKG0sZyl7dmFyIFo9dGhpcy5nZXRfd2lkdGgoKSxwPXRoaXMuZ2V0X2hlaWdodCgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZih0aGlzLl9lbnN1cmVJbWFnZSgpLHRoaXMuaW1nKXtmb3IodmFyIEEsZSxyLGksZj0wLG49MCx0PTAsbz0wLGE9MCxjPTAsbD1aKnAsdT1aLGI9TWF0aC5jZWlsKFovMikscz1NYXRoLmNlaWwoWi8yKSxkPU1hdGguY2VpbChwLzIpLGs9dGhpcy5kYXRhLGg9dGhpcy5kYXRhLnN1YmFycmF5KHUqcCx1KnArYipkKSx3PXRoaXMuZGF0YS5zdWJhcnJheSh1KnArYipkLHUqcCtiKmQrcypkKSx2PW0uZGF0YTtjPGw7KWk9Zj4+MSxBPTEuMTY0KihrW3QrZl0tMTYpLGU9aFtvK2ldLTEyOCxyPXdbYStpXS0xMjgsdltjPDwyXT1BKzEuNTk2KnIsdlsxKyhjPDwyKV09QS0uODEzKnItLjM5MSplLHZbMisoYzw8MildPUErMi4wMTgqZSx2WzMrKGM8PDIpXT0yNTUsYysrLCsrZjxaJiYoQT0xLjE2NCooa1t0K2ZdLTE2KSx2W2M8PDJdPUErMS41OTYqcix2WzErKGM8PDIpXT1BLS44MTMqci0uMzkxKmUsdlsyKyhjPDwyKV09QSsyLjAxOCplLHZbMysoYzw8MildPTI1NSxjKyssZisrKSxmPT09WiYmKGY9MCx0Kz11LG89KCsrbj4+MSkqYixhPShuPj4xKSpzKTtnKG0pfWVsc2UgZyhudWxsKX0uYmluZCh0aGlzKSwwKX07ZnVuY3Rpb24gVXIoKXt0aGlzLmRlY29kZXI9bnVsbH1Vci5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEEpe2lmKHRoaXMuZGVjb2RlciYmenIuaGVpZl9jb250ZXh0X2ZyZWUodGhpcy5kZWNvZGVyKSx0aGlzLmRlY29kZXI9enIuaGVpZl9jb250ZXh0X2FsbG9jKCksIXRoaXMuZGVjb2RlcilyZXR1cm4gY29uc29sZS5sb2coIkNvdWxkIG5vdCBjcmVhdGUgSEVJRiBjb250ZXh0IiksW107dmFyIGU9enIuaGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnkodGhpcy5kZWNvZGVyLEEpO2lmKGUuY29kZSE9PXpyLmhlaWZfZXJyb3JfT2spcmV0dXJuIGNvbnNvbGUubG9nKCJDb3VsZCBub3QgcGFyc2UgSEVJRiBmaWxlIixlKSxbXTt2YXIgcj16ci5oZWlmX2pzX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfdG9wX2xldmVsX2ltYWdlX0lEcyh0aGlzLmRlY29kZXIpO2lmKCFyfHxyLmNvZGUpcmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciBsb2FkaW5nIGltYWdlIGlkcyIsciksW107aWYoIXIubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTm8gaW1hZ2VzIGZvdW5kIiksW107Zm9yKHZhciBpPVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIG49enIuaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUodGhpcy5kZWNvZGVyLHJbZl0pO24mJiFuLmNvZGU/aS5wdXNoKG5ldyBUcihuKSk6Y29uc29sZS5sb2coIkNvdWxkIG5vdCBnZXQgaW1hZ2UgZGF0YSBmb3IgaWQiLHJbZl0sbil9cmV0dXJuIGl9O3ZhciBTcixPcix6cj17SGVpZkRlY29kZXI6VXIsZm91cmNjOmZ1bmN0aW9uKEEpe3JldHVybiBBLmNoYXJDb2RlQXQoMCk8PDI0fEEuY2hhckNvZGVBdCgxKTw8MTZ8QS5jaGFyQ29kZUF0KDIpPDw4fEEuY2hhckNvZGVBdCgzKX19LGpyPXtoZWlmX2Vycm9yX2NvZGU6ITAsaGVpZl9zdWJlcnJvcl9jb2RlOiEwLGhlaWZfY29tcHJlc3Npb25fZm9ybWF0OiEwLGhlaWZfY2hyb21hOiEwLGhlaWZfY29sb3JzcGFjZTohMCxoZWlmX2NoYW5uZWw6ITB9O2ZvcihPciBpbiBqcilpZihqci5oYXNPd25Qcm9wZXJ0eShPcikpZm9yKFNyIGluIGRbT3JdKWRbT3JdLmhhc093blByb3BlcnR5KFNyKSYmInZhbHVlcyIhPT1TciYmKHpyW1NyXT1kW09yXVtTcl0pO2ZvcihTciBpbiBkKWpyLmhhc093blByb3BlcnR5KFNyKXx8MCE9PVNyLmluZGV4T2YoImhlaWZfIil8fCh6cltTcl09ZFtTcl0pO2Z1bmN0aW9uIFFBKEEsZSl7cmV0dXJuIEE9WUEoQT1BfHwiZnVuY3Rpb25fIituZXcgRGF0ZSksbmV3IEZ1bmN0aW9uKCJib2R5IiwicmV0dXJuIGZ1bmN0aW9uICIrQSsnKCkge1xcbiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XFxufTtcXG4nKShlKX1kZWxldGUgdGhpcy5Nb2R1bGU7InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzPygidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihleHBvcnRzPW1vZHVsZS5leHBvcnRzPXpyKSxleHBvcnRzLmxpYmhlaWY9enIpOnRoaXMubGliaGVpZj16ciwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4genJ9KX0pLmNhbGwodGhpcyk7CjsKZnVuY3Rpb24gcHJvY2Vzc1NpbmdsZUltYWdlKGltYWdlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgIGNvbnN0IHcgPSBpbWFnZS5nZXRfd2lkdGgoKTsKICAgICAgICBjb25zdCBoID0gaW1hZ2UuZ2V0X2hlaWdodCgpOwogICAgICAgIGNvbnN0IHdoaXRlSW1hZ2UgPSBuZXcgSW1hZ2VEYXRhKHcsIGgpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdyAqIGg7IGkrKykgewogICAgICAgICAgICB3aGl0ZUltYWdlLmRhdGFbaSAqIDQgKyAzXSA9IDI1NTsKICAgICAgICB9CiAgICAgICAgaW1hZ2UuZGlzcGxheSh3aGl0ZUltYWdlLCAoaW1hZ2VEYXRhKSA9PiB7CiAgICAgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KCJFUlJfTElCSEVJRiBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIHNpbmdsZSBpbWFnZSBhbmQgZ2VuZXJhdGluZyBpbWFnZSBkYXRhLCBjb3VsZCBub3QgZW5zdXJlIGltYWdlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzb2x2ZShpbWFnZURhdGEpOwogICAgICAgIH0pOwogICAgfSk7Cn0Kb25tZXNzYWdlID0gKG1lc3NhZ2UpID0+IHsKICAgIGNvbnN0IGlkID0gbWVzc2FnZS5kYXRhLmlkOwogICAgdHJ5IHsKICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IGxpYmhlaWYuSGVpZkRlY29kZXIoKTsKICAgICAgICBsZXQgaW1hZ2VzQXJyID0gZGVjb2Rlci5kZWNvZGUobWVzc2FnZS5kYXRhLmJ1ZmZlcik7CiAgICAgICAgaWYgKCFpbWFnZXNBcnIgfHwgIWltYWdlc0Fyci5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgIkVSUl9MSUJIRUlGIGZvcm1hdCBub3Qgc3VwcG9ydGVkIjsKICAgICAgICB9CiAgICAgICAgaW1hZ2VzQXJyID0gaW1hZ2VzQXJyLmZpbHRlcigoeCkgPT4gewogICAgICAgICAgICBsZXQgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIHNvbWV0aW1lcyB0aGUgaGVpYyBjb250YWluZXIgaXMgdmFsaWQKICAgICAgICAgICAgICAgIHlldCB0aGUgaW1hZ2VzIHRoZW1zZWx2ZXMgYXJlIGNvcnJ1cHQKICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICB4LmdldF9oZWlnaHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFpbWFnZXNBcnIubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93ICJFUlJfTElCSEVJRiBIZWljIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBpbWFnZXMiOwogICAgICAgIH0KICAgICAgICBQcm9taXNlLmFsbChpbWFnZXNBcnIubWFwKChpbWFnZSkgPT4gcHJvY2Vzc1NpbmdsZUltYWdlKGltYWdlKSkpCiAgICAgICAgICAgIC50aGVuKChpbWFnZURhdGFBcnIpID0+IHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBpZCwgaW1hZ2VEYXRhQXJyLCBlcnJvcjogIiIgfSk7CiAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7CiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIGlkLAogICAgICAgICAgICAgICAgaW1hZ2VEYXRhQXJyOiBbXSwKICAgICAgICAgICAgICAgIGVycm9yOiBlICYmIGUudG9TdHJpbmcgPyBlLnRvU3RyaW5nKCkgOiBlLAogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICBpZCwKICAgICAgICAgICAgaW1hZ2VEYXRhQXJyOiBbXSwKICAgICAgICAgICAgZXJyb3I6IGUgJiYgZS50b1N0cmluZyA/IGUudG9TdHJpbmcoKSA6IGUsCiAgICAgICAgfSk7CiAgICB9Cn07CgpgLCBBID0gbmV3IEJsb2IoW2FdLCB7IHR5cGU6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9KTsKICAgIHdpbmRvdy5fX2hlaWMyYW55X193b3JrZXIgPSBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwoQSkpOwogICAgdmFyIHQgPSBbImltYWdlL3BuZyIsICJpbWFnZS9qcGVnIiwgImltYWdlL2dpZiJdLCBpID0gewogICAgICBibG9iVG9EYXRhVVJMOiBmdW5jdGlvbih1KSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sIGwpIHsKICAgICAgICAgIHZhciBzID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgIHMub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsKCJFUlJfRE9NIEVycm9yIG9uIGNvbnZlcnRpbmcgYmxvYiB0byBkYXRhIFVSTCIpOwogICAgICAgICAgfSwgcy5vbmxvYWQgPSBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIG8ocy5yZXN1bHQpOwogICAgICAgICAgfSwgcy5yZWFkQXNEYXRhVVJMKHUpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBkYXRhVVJJdG9CbG9iOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIG8gPSBhdG9iKHUuc3BsaXQoIiwiKVsxXSksIGwgPSB1LnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLCBzID0gbmV3IEFycmF5QnVmZmVyKG8ubGVuZ3RoKSwgYyA9IG5ldyBVaW50OEFycmF5KHMpLCBkID0gMDsgZCA8IG8ubGVuZ3RoOyBkKyspCiAgICAgICAgICAgIGNbZF0gPSBvLmNoYXJDb2RlQXQoZCk7CiAgICAgICAgICB2YXIgdiA9IG5ldyBCbG9iKFtzXSwgeyB0eXBlOiBsIH0pOwogICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgfSBjYXRjaCAoaykgewogICAgICAgICAgcmV0dXJuICJFUlJfRE9NIEVycm9yIG9uIGNvbnZlcnRpbmcgZGF0YSBVUkkgdG8gYmxvYiAiICsgayAmJiBrLnRvU3RyaW5nID8gay50b1N0cmluZygpIDogazsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGltYWdlRGF0YVRvQmxvYjogZnVuY3Rpb24odSkgewogICAgICAgIHZhciBvID0gdS5pbWFnZURhdGEsIGwgPSB1LnRvVHlwZTsKICAgICAgICBsID09PSB2b2lkIDAgJiYgKGwgPSAiaW1hZ2UvcG5nIik7CiAgICAgICAgdmFyIHMgPSB1LnF1YWxpdHk7CiAgICAgICAgcmV0dXJuIHMgPT09IHZvaWQgMCAmJiAocyA9IDAuOTIpLCAocyA+IDEgfHwgcyA8IDApICYmIChzID0gMC45MiksIHQuaW5kZXhPZihsKSA9PT0gLTEgJiYgKGwgPSAiaW1hZ2UvcG5nIiksIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGQpIHsKICAgICAgICAgIHZhciB2ID0gbnVsbDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgfQogICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICByZXR1cm4gZCgiRVJSX0NBTlZBUyBFcnJvciBvbiBjb252ZXJ0aW5nIGltYWdlZGF0YSB0byBibG9iOiBDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyBlbGVtZW50Iik7CiAgICAgICAgICB2LndpZHRoID0gby53aWR0aCwgdi5oZWlnaHQgPSBvLmhlaWdodDsKICAgICAgICAgIHZhciBrID0gdi5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFrKQogICAgICAgICAgICByZXR1cm4gZCgiRVJSX0NBTlZBUyBFcnJvciBvbiBjb252ZXJ0aW5nIGltYWdlZGF0YSB0byBibG9iOiBDb3VsZCBub3QgZ2V0IGNhbnZhcyBjb250ZXh0Iik7CiAgICAgICAgICBrLnB1dEltYWdlRGF0YShvLCAwLCAwKSwgdi50b0Jsb2IoZnVuY3Rpb24oRSkgewogICAgICAgICAgICByZXR1cm4gRSA/IGMoRSkgOiBkKCJFUlJfQ0FOVkFTIEVycm9yIG9uIGNvbnZlcnRpbmcgaW1hZ2VkYXRhIHRvIGJsb2I6IENvdWxkIG5vdCBnZXQgYmxvYiBmcm9tIGNhbnZhcyIpOwogICAgICAgICAgfSwgbCwgcyk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGltYWdlc1RvR2lmOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdmFyIG8gPSB1LmltYWdlcywgbCA9IHUuaW50ZXJ2YWwsIHMgPSB1LmdpZkhlaWdodCwgYyA9IHUuZ2lmV2lkdGg7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsIHYpIHsKICAgICAgICAgIGdpZnNob3QuY3JlYXRlR0lGKHsKICAgICAgICAgICAgaW1hZ2VzOiBvLAogICAgICAgICAgICBpbnRlcnZhbDogbCwKICAgICAgICAgICAgZ2lmSGVpZ2h0OiBzLAogICAgICAgICAgICBnaWZXaWR0aDogYwogICAgICAgICAgfSwgZnVuY3Rpb24oaykgewogICAgICAgICAgICByZXR1cm4gay5lcnJvciAmJiB2KCJFUlJfR0lGICIgKyBrLmVycm9yQ29kZSArICIgIiArIGsuZXJyb3JNZXNzYWdlKSwgZChrLmltYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBvdGhlckltYWdlVHlwZTogZnVuY3Rpb24odSkgewogICAgICAgIGZvciAodmFyIG8gPSBuZXcgVWludDhBcnJheSh1KS5zdWJhcnJheSgwLCA0KSwgbCA9ICIiLCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspCiAgICAgICAgICBsID0gbCArIG9bc10udG9TdHJpbmcoMTYpOwogICAgICAgIHN3aXRjaCAobCkgewogICAgICAgICAgY2FzZSAiODk1MDRlNDciOgogICAgICAgICAgICByZXR1cm4gImltYWdlL3BuZyI7CiAgICAgICAgICBjYXNlICI0NzQ5NDYzOCI6CiAgICAgICAgICAgIHJldHVybiAiaW1hZ2UvZ2lmIjsKICAgICAgICAgIGNhc2UgImZmZDhmZmUwIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUxIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUyIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmUzIjoKICAgICAgICAgIGNhc2UgImZmZDhmZmU4IjoKICAgICAgICAgICAgcmV0dXJuICJpbWFnZS9qcGVnIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAhMTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbih1KSB7CiAgICAgICAgdmFyIG8gPSAwOwogICAgICAgIHUgPyB0eXBlb2YgdSAhPSAic3RyaW5nIiAmJiAodS50b1N0cmluZyA/IHUgPSB1LnRvU3RyaW5nKCkgOiB1ID0gSlNPTi5zdHJpbmdpZnkodSkpIDogdSA9ICJFUlJfVU5LTk9XTiI7CiAgICAgICAgZm9yICh2YXIgbCA9IFsKICAgICAgICAgICJFUlJfVVNFUiIsCiAgICAgICAgICAiRVJSX0xJQkhFSUYiLAogICAgICAgICAgIkVSUl9HSUYiLAogICAgICAgICAgIkVSUl9ET00iLAogICAgICAgICAgIkVSUl9DQU5WQVMiCiAgICAgICAgXSwgcyA9IDA7IHMgPCBsLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICB2YXIgYyA9IGxbc107CiAgICAgICAgICB1LmluZGV4T2YoYykgPT09IDAgJiYgKG8gPSBzICsgMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb2RlOiBvLAogICAgICAgICAgbWVzc2FnZTogdQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBuKHUpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sIGwpIHsKICAgICAgICB2YXIgcyA9IChNYXRoLnJhbmRvbSgpICogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lKCkpLnRvU3RyaW5nKCksIGMgPSB7IGlkOiBzLCBidWZmZXI6IHUgfTsKICAgICAgICB3aW5kb3cuX19oZWljMmFueV9fd29ya2VyLnBvc3RNZXNzYWdlKGMpLCB3aW5kb3cuX19oZWljMmFueV9fd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5kYXRhLmlkID09PSBzKQogICAgICAgICAgICByZXR1cm4gZC5kYXRhLmVycm9yID8gbChkLmRhdGEuZXJyb3IpIDogbyhkLmRhdGEuaW1hZ2VEYXRhQXJyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBmKHUpIHsKICAgICAgdmFyIG8gPSB1LmJsb2IsIGwgPSB1LnRvVHlwZTsKICAgICAgbCA9PT0gdm9pZCAwICYmIChsID0gImltYWdlL3BuZyIpOwogICAgICB2YXIgcyA9IHUucXVhbGl0eTsKICAgICAgcyA9PT0gdm9pZCAwICYmIChzID0gMC45Mik7CiAgICAgIHZhciBjID0gdS5naWZJbnRlcnZhbDsKICAgICAgYyA9PT0gdm9pZCAwICYmIChjID0gMC40KTsKICAgICAgdmFyIGQgPSB1Lm11bHRpcGxlOwogICAgICByZXR1cm4gZCA9PT0gdm9pZCAwICYmIChkID0gdm9pZCAwKSwgbmV3IFByb21pc2UoZnVuY3Rpb24odiwgaykgewogICAgICAgIG8gaW5zdGFuY2VvZiBCbG9iIHx8IGkuZXJyb3IoIkVSUl9VU0VSIGxpYnJhcnkgb25seSBhY2NlcHRzIEJMT0JzIGFzIGlucHV0IiksIHR5cGVvZiBkICE9ICJib29sZWFuIiAmJiBpLmVycm9yKCdFUlJfVVNFUiAibXVsdGlwbGUiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAiYm9vbGVhbiInKSwgdHlwZW9mIHMgIT0gIm51bWJlciIgJiYgaS5lcnJvcignRVJSX1VTRVIgInF1YWxpdHkiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAibnVtYmVyIicpLCB0eXBlb2YgYyAhPSAibnVtYmVyIiAmJiBpLmVycm9yKCdFUlJfVVNFUiAiZ2lmSW50ZXJ2YWwiIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSAibnVtYmVyIicpOwogICAgICAgIHZhciBFID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICBFLm9ubG9hZCA9IGZ1bmN0aW9uKGcpIHsKICAgICAgICAgIHZhciB3ID0gMCwgQiA9IDAsIG0gPSBnLnRhcmdldC5yZXN1bHQsIHAgPSBpLm90aGVySW1hZ2VUeXBlKG0pOwogICAgICAgICAgaWYgKHApCiAgICAgICAgICAgIHJldHVybiBrKGkuZXJyb3IoIkVSUl9VU0VSIEltYWdlIGlzIGFscmVhZHkgYnJvd3NlciByZWFkYWJsZTogIiArIHApKTsKICAgICAgICAgIG4obSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiB3ID0gV1swXS53aWR0aCwgQiA9IFdbMF0uaGVpZ2h0LCBQcm9taXNlLmFsbChXLm1hcChmdW5jdGlvbihDKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGkuaW1hZ2VEYXRhVG9CbG9iKHsKICAgICAgICAgICAgICAgIGltYWdlRGF0YTogQywKICAgICAgICAgICAgICAgIHRvVHlwZTogbCwKICAgICAgICAgICAgICAgIHF1YWxpdHk6IHMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiBsID09PSAiaW1hZ2UvZ2lmIiA/IFByb21pc2UuYWxsKFcubWFwKGZ1bmN0aW9uKEMpIHsKICAgICAgICAgICAgICByZXR1cm4gaS5ibG9iVG9EYXRhVVJMKEMpOwogICAgICAgICAgICB9KSkgOiBkID8gKHYoVyksIFsiIl0pIDogKHYoV1swXSksIFsiIl0pOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIHJldHVybiBsID09PSAiaW1hZ2UvZ2lmIiAmJiBXID8gaS5pbWFnZXNUb0dpZih7CiAgICAgICAgICAgICAgaW1hZ2VzOiBXLAogICAgICAgICAgICAgIGludGVydmFsOiBjLAogICAgICAgICAgICAgIGdpZldpZHRoOiB3LAogICAgICAgICAgICAgIGdpZkhlaWdodDogQgogICAgICAgICAgICB9KSA6ICIiOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbihXKSB7CiAgICAgICAgICAgIGlmIChsID09PSAiaW1hZ2UvZ2lmIiAmJiBXKSB7CiAgICAgICAgICAgICAgdmFyIEMgPSBpLmRhdGFVUkl0b0Jsb2IoVyk7CiAgICAgICAgICAgICAgdHlwZW9mIEMgPT0gInN0cmluZyIgPyBrKGkuZXJyb3IoQykpIDogdihDKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oVykgewogICAgICAgICAgICBrKGkuZXJyb3IoVykpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwgRS5yZWFkQXNBcnJheUJ1ZmZlcihvKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZjsKICB9KTsKfSkoSGkpOwp2YXIgemkgPSBIaS5leHBvcnRzLCBXZiA9IC8qIEBfX1BVUkVfXyAqLyBDZih6aSksIF9mID0gLyogQF9fUFVSRV9fICovIGRmKHsKICBfX3Byb3RvX186IG51bGwsCiAgZGVmYXVsdDogV2YKfSwgW3ppXSk7Ci8qISBwYWtvIDIuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGFrbyBAbGljZW5zZSAoTUlUIEFORCBabGliKSAqLwpjb25zdCBHZiA9IDQsICRBID0gMCwgcnQgPSAxLCBYZiA9IDI7CmZ1bmN0aW9uIHFhKHIpIHsKICBsZXQgZSA9IHIubGVuZ3RoOwogIGZvciAoOyAtLWUgPj0gMDsgKQogICAgcltlXSA9IDA7Cn0KY29uc3QgUmYgPSAwLCBMaSA9IDEsIFZmID0gMiwgU2YgPSAzLCBEZiA9IDI1OCwgVkEgPSAyOSwgWDIgPSAyNTYsIFoyID0gWDIgKyAxICsgVkEsIFlhID0gMzAsIFNBID0gMTksIEtpID0gMiAqIFoyICsgMSwgRWEgPSAxNSwgTmUgPSAxNiwgeGYgPSA3LCBEQSA9IDI1NiwgcWkgPSAxNiwgJGkgPSAxNywgcm4gPSAxOCwgYkEgPSAoCiAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqLwogIG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwXSkKKSwgZGUgPSAoCiAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBkaXN0YW5jZSBjb2RlICovCiAgbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxM10pCiksIE5mID0gKAogIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovCiAgbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDddKQopLCBhbiA9IG5ldyBVaW50OEFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSksIE1mID0gNTEyLCBxciA9IG5ldyBBcnJheSgoWjIgKyAyKSAqIDIpOwpxYShxcik7CmNvbnN0IGgyID0gbmV3IEFycmF5KFlhICogMik7CnFhKGgyKTsKY29uc3QgQjIgPSBuZXcgQXJyYXkoTWYpOwpxYShCMik7CmNvbnN0IEkyID0gbmV3IEFycmF5KERmIC0gU2YgKyAxKTsKcWEoSTIpOwpjb25zdCB4QSA9IG5ldyBBcnJheShWQSk7CnFhKHhBKTsKY29uc3QgdmUgPSBuZXcgQXJyYXkoWWEpOwpxYSh2ZSk7CmZ1bmN0aW9uIE1lKHIsIGUsIGEsIEEsIHQpIHsKICB0aGlzLnN0YXRpY190cmVlID0gciwgdGhpcy5leHRyYV9iaXRzID0gZSwgdGhpcy5leHRyYV9iYXNlID0gYSwgdGhpcy5lbGVtcyA9IEEsIHRoaXMubWF4X2xlbmd0aCA9IHQsIHRoaXMuaGFzX3N0cmVlID0gciAmJiByLmxlbmd0aDsKfQpsZXQgZW4sIEFuLCB0bjsKZnVuY3Rpb24gVGUociwgZSkgewogIHRoaXMuZHluX3RyZWUgPSByLCB0aGlzLm1heF9jb2RlID0gMCwgdGhpcy5zdGF0X2Rlc2MgPSBlOwp9CmNvbnN0IG5uID0gKHIpID0+IHIgPCAyNTYgPyBCMltyXSA6IEIyWzI1NiArIChyID4+PiA3KV0sIEYyID0gKHIsIGUpID0+IHsKICByLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IGUgJiAyNTUsIHIucGVuZGluZ19idWZbci5wZW5kaW5nKytdID0gZSA+Pj4gOCAmIDI1NTsKfSwgbHIgPSAociwgZSwgYSkgPT4gewogIHIuYmlfdmFsaWQgPiBOZSAtIGEgPyAoci5iaV9idWYgfD0gZSA8PCByLmJpX3ZhbGlkICYgNjU1MzUsIEYyKHIsIHIuYmlfYnVmKSwgci5iaV9idWYgPSBlID4+IE5lIC0gci5iaV92YWxpZCwgci5iaV92YWxpZCArPSBhIC0gTmUpIDogKHIuYmlfYnVmIHw9IGUgPDwgci5iaV92YWxpZCAmIDY1NTM1LCByLmJpX3ZhbGlkICs9IGEpOwp9LCBPciA9IChyLCBlLCBhKSA9PiB7CiAgbHIoCiAgICByLAogICAgYVtlICogMl0sCiAgICBhW2UgKiAyICsgMV0KICAgIC8qLkxlbiovCiAgKTsKfSwgZm4gPSAociwgZSkgPT4gewogIGxldCBhID0gMDsKICBkbwogICAgYSB8PSByICYgMSwgciA+Pj49IDEsIGEgPDw9IDE7CiAgd2hpbGUgKC0tZSA+IDApOwogIHJldHVybiBhID4+PiAxOwp9LCBUZiA9IChyKSA9PiB7CiAgci5iaV92YWxpZCA9PT0gMTYgPyAoRjIociwgci5iaV9idWYpLCByLmJpX2J1ZiA9IDAsIHIuYmlfdmFsaWQgPSAwKSA6IHIuYmlfdmFsaWQgPj0gOCAmJiAoci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSByLmJpX2J1ZiAmIDI1NSwgci5iaV9idWYgPj49IDgsIHIuYmlfdmFsaWQgLT0gOCk7Cn0sIFBmID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZS5keW5fdHJlZSwgQSA9IGUubWF4X2NvZGUsIHQgPSBlLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSwgaSA9IGUuc3RhdF9kZXNjLmhhc19zdHJlZSwgbiA9IGUuc3RhdF9kZXNjLmV4dHJhX2JpdHMsIGYgPSBlLnN0YXRfZGVzYy5leHRyYV9iYXNlLCB1ID0gZS5zdGF0X2Rlc2MubWF4X2xlbmd0aDsKICBsZXQgbywgbCwgcywgYywgZCwgdiwgayA9IDA7CiAgZm9yIChjID0gMDsgYyA8PSBFYTsgYysrKQogICAgci5ibF9jb3VudFtjXSA9IDA7CiAgZm9yIChhW3IuaGVhcFtyLmhlYXBfbWF4XSAqIDIgKyAxXSA9IDAsIG8gPSByLmhlYXBfbWF4ICsgMTsgbyA8IEtpOyBvKyspCiAgICBsID0gci5oZWFwW29dLCBjID0gYVthW2wgKiAyICsgMV0gKiAyICsgMV0gKyAxLCBjID4gdSAmJiAoYyA9IHUsIGsrKyksIGFbbCAqIDIgKyAxXSA9IGMsICEobCA+IEEpICYmIChyLmJsX2NvdW50W2NdKyssIGQgPSAwLCBsID49IGYgJiYgKGQgPSBuW2wgLSBmXSksIHYgPSBhW2wgKiAyXSwgci5vcHRfbGVuICs9IHYgKiAoYyArIGQpLCBpICYmIChyLnN0YXRpY19sZW4gKz0gdiAqICh0W2wgKiAyICsgMV0gKyBkKSkpOwogIGlmIChrICE9PSAwKSB7CiAgICBkbyB7CiAgICAgIGZvciAoYyA9IHUgLSAxOyByLmJsX2NvdW50W2NdID09PSAwOyApCiAgICAgICAgYy0tOwogICAgICByLmJsX2NvdW50W2NdLS0sIHIuYmxfY291bnRbYyArIDFdICs9IDIsIHIuYmxfY291bnRbdV0tLSwgayAtPSAyOwogICAgfSB3aGlsZSAoayA+IDApOwogICAgZm9yIChjID0gdTsgYyAhPT0gMDsgYy0tKQogICAgICBmb3IgKGwgPSByLmJsX2NvdW50W2NdOyBsICE9PSAwOyApCiAgICAgICAgcyA9IHIuaGVhcFstLW9dLCAhKHMgPiBBKSAmJiAoYVtzICogMiArIDFdICE9PSBjICYmIChyLm9wdF9sZW4gKz0gKGMgLSBhW3MgKiAyICsgMV0pICogYVtzICogMl0sIGFbcyAqIDIgKyAxXSA9IGMpLCBsLS0pOwogIH0KfSwgb24gPSAociwgZSwgYSkgPT4gewogIGNvbnN0IEEgPSBuZXcgQXJyYXkoRWEgKyAxKTsKICBsZXQgdCA9IDAsIGksIG47CiAgZm9yIChpID0gMTsgaSA8PSBFYTsgaSsrKQogICAgdCA9IHQgKyBhW2kgLSAxXSA8PCAxLCBBW2ldID0gdDsKICBmb3IgKG4gPSAwOyBuIDw9IGU7IG4rKykgewogICAgbGV0IGYgPSByW24gKiAyICsgMV07CiAgICBmICE9PSAwICYmIChyW24gKiAyXSA9IGZuKEFbZl0rKywgZikpOwogIH0KfSwgWWYgPSAoKSA9PiB7CiAgbGV0IHIsIGUsIGEsIEEsIHQ7CiAgY29uc3QgaSA9IG5ldyBBcnJheShFYSArIDEpOwogIGZvciAoYSA9IDAsIEEgPSAwOyBBIDwgVkEgLSAxOyBBKyspCiAgICBmb3IgKHhBW0FdID0gYSwgciA9IDA7IHIgPCAxIDw8IGJBW0FdOyByKyspCiAgICAgIEkyW2ErK10gPSBBOwogIGZvciAoSTJbYSAtIDFdID0gQSwgdCA9IDAsIEEgPSAwOyBBIDwgMTY7IEErKykKICAgIGZvciAodmVbQV0gPSB0LCByID0gMDsgciA8IDEgPDwgZGVbQV07IHIrKykKICAgICAgQjJbdCsrXSA9IEE7CiAgZm9yICh0ID4+PSA3OyBBIDwgWWE7IEErKykKICAgIGZvciAodmVbQV0gPSB0IDw8IDcsIHIgPSAwOyByIDwgMSA8PCBkZVtBXSAtIDc7IHIrKykKICAgICAgQjJbMjU2ICsgdCsrXSA9IEE7CiAgZm9yIChlID0gMDsgZSA8PSBFYTsgZSsrKQogICAgaVtlXSA9IDA7CiAgZm9yIChyID0gMDsgciA8PSAxNDM7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA4LCByKyssIGlbOF0rKzsKICBmb3IgKDsgciA8PSAyNTU7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA5LCByKyssIGlbOV0rKzsKICBmb3IgKDsgciA8PSAyNzk7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA3LCByKyssIGlbN10rKzsKICBmb3IgKDsgciA8PSAyODc7ICkKICAgIHFyW3IgKiAyICsgMV0gPSA4LCByKyssIGlbOF0rKzsKICBmb3IgKG9uKHFyLCBaMiArIDEsIGkpLCByID0gMDsgciA8IFlhOyByKyspCiAgICBoMltyICogMiArIDFdID0gNSwgaDJbciAqIDJdID0gZm4ociwgNSk7CiAgZW4gPSBuZXcgTWUocXIsIGJBLCBYMiArIDEsIFoyLCBFYSksIEFuID0gbmV3IE1lKGgyLCBkZSwgMCwgWWEsIEVhKSwgdG4gPSBuZXcgTWUobmV3IEFycmF5KDApLCBOZiwgMCwgU0EsIHhmKTsKfSwgdW4gPSAocikgPT4gewogIGxldCBlOwogIGZvciAoZSA9IDA7IGUgPCBaMjsgZSsrKQogICAgci5keW5fbHRyZWVbZSAqIDJdID0gMDsKICBmb3IgKGUgPSAwOyBlIDwgWWE7IGUrKykKICAgIHIuZHluX2R0cmVlW2UgKiAyXSA9IDA7CiAgZm9yIChlID0gMDsgZSA8IFNBOyBlKyspCiAgICByLmJsX3RyZWVbZSAqIDJdID0gMDsKICByLmR5bl9sdHJlZVtEQSAqIDJdID0gMSwgci5vcHRfbGVuID0gci5zdGF0aWNfbGVuID0gMCwgci5zeW1fbmV4dCA9IHIubWF0Y2hlcyA9IDA7Cn0sIGxuID0gKHIpID0+IHsKICByLmJpX3ZhbGlkID4gOCA/IEYyKHIsIHIuYmlfYnVmKSA6IHIuYmlfdmFsaWQgPiAwICYmIChyLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IHIuYmlfYnVmKSwgci5iaV9idWYgPSAwLCByLmJpX3ZhbGlkID0gMDsKfSwgYXQgPSAociwgZSwgYSwgQSkgPT4gewogIGNvbnN0IHQgPSBlICogMiwgaSA9IGEgKiAyOwogIHJldHVybiByW3RdIDwgcltpXSB8fCByW3RdID09PSByW2ldICYmIEFbZV0gPD0gQVthXTsKfSwgUGUgPSAociwgZSwgYSkgPT4gewogIGNvbnN0IEEgPSByLmhlYXBbYV07CiAgbGV0IHQgPSBhIDw8IDE7CiAgZm9yICg7IHQgPD0gci5oZWFwX2xlbiAmJiAodCA8IHIuaGVhcF9sZW4gJiYgYXQoZSwgci5oZWFwW3QgKyAxXSwgci5oZWFwW3RdLCByLmRlcHRoKSAmJiB0KyssICFhdChlLCBBLCByLmhlYXBbdF0sIHIuZGVwdGgpKTsgKQogICAgci5oZWFwW2FdID0gci5oZWFwW3RdLCBhID0gdCwgdCA8PD0gMTsKICByLmhlYXBbYV0gPSBBOwp9LCBldCA9IChyLCBlLCBhKSA9PiB7CiAgbGV0IEEsIHQsIGkgPSAwLCBuLCBmOwogIGlmIChyLnN5bV9uZXh0ICE9PSAwKQogICAgZG8KICAgICAgQSA9IHIucGVuZGluZ19idWZbci5zeW1fYnVmICsgaSsrXSAmIDI1NSwgQSArPSAoci5wZW5kaW5nX2J1ZltyLnN5bV9idWYgKyBpKytdICYgMjU1KSA8PCA4LCB0ID0gci5wZW5kaW5nX2J1ZltyLnN5bV9idWYgKyBpKytdLCBBID09PSAwID8gT3IociwgdCwgZSkgOiAobiA9IEkyW3RdLCBPcihyLCBuICsgWDIgKyAxLCBlKSwgZiA9IGJBW25dLCBmICE9PSAwICYmICh0IC09IHhBW25dLCBscihyLCB0LCBmKSksIEEtLSwgbiA9IG5uKEEpLCBPcihyLCBuLCBhKSwgZiA9IGRlW25dLCBmICE9PSAwICYmIChBIC09IHZlW25dLCBscihyLCBBLCBmKSkpOwogICAgd2hpbGUgKGkgPCByLnN5bV9uZXh0KTsKICBPcihyLCBEQSwgZSk7Cn0sIGRBID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZS5keW5fdHJlZSwgQSA9IGUuc3RhdF9kZXNjLnN0YXRpY190cmVlLCB0ID0gZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLCBpID0gZS5zdGF0X2Rlc2MuZWxlbXM7CiAgbGV0IG4sIGYsIHUgPSAtMSwgbzsKICBmb3IgKHIuaGVhcF9sZW4gPSAwLCByLmhlYXBfbWF4ID0gS2ksIG4gPSAwOyBuIDwgaTsgbisrKQogICAgYVtuICogMl0gIT09IDAgPyAoci5oZWFwWysrci5oZWFwX2xlbl0gPSB1ID0gbiwgci5kZXB0aFtuXSA9IDApIDogYVtuICogMiArIDFdID0gMDsKICBmb3IgKDsgci5oZWFwX2xlbiA8IDI7ICkKICAgIG8gPSByLmhlYXBbKytyLmhlYXBfbGVuXSA9IHUgPCAyID8gKyt1IDogMCwgYVtvICogMl0gPSAxLCByLmRlcHRoW29dID0gMCwgci5vcHRfbGVuLS0sIHQgJiYgKHIuc3RhdGljX2xlbiAtPSBBW28gKiAyICsgMV0pOwogIGZvciAoZS5tYXhfY29kZSA9IHUsIG4gPSByLmhlYXBfbGVuID4+IDE7IG4gPj0gMTsgbi0tKQogICAgUGUociwgYSwgbik7CiAgbyA9IGk7CiAgZG8KICAgIG4gPSByLmhlYXBbCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICBdLCByLmhlYXBbCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICBdID0gci5oZWFwW3IuaGVhcF9sZW4tLV0sIFBlKAogICAgICByLAogICAgICBhLAogICAgICAxCiAgICAgIC8qU01BTExFU1QqLwogICAgKSwgZiA9IHIuaGVhcFsKICAgICAgMQogICAgICAvKlNNQUxMRVNUKi8KICAgIF0sIHIuaGVhcFstLXIuaGVhcF9tYXhdID0gbiwgci5oZWFwWy0tci5oZWFwX21heF0gPSBmLCBhW28gKiAyXSA9IGFbbiAqIDJdICsgYVtmICogMl0sIHIuZGVwdGhbb10gPSAoci5kZXB0aFtuXSA+PSByLmRlcHRoW2ZdID8gci5kZXB0aFtuXSA6IHIuZGVwdGhbZl0pICsgMSwgYVtuICogMiArIDFdID0gYVtmICogMiArIDFdID0gbywgci5oZWFwWwogICAgICAxCiAgICAgIC8qU01BTExFU1QqLwogICAgXSA9IG8rKywgUGUoCiAgICAgIHIsCiAgICAgIGEsCiAgICAgIDEKICAgICAgLypTTUFMTEVTVCovCiAgICApOwogIHdoaWxlIChyLmhlYXBfbGVuID49IDIpOwogIHIuaGVhcFstLXIuaGVhcF9tYXhdID0gci5oZWFwWwogICAgMQogICAgLypTTUFMTEVTVCovCiAgXSwgUGYociwgZSksIG9uKGEsIHUsIHIuYmxfY291bnQpOwp9LCBBdCA9IChyLCBlLCBhKSA9PiB7CiAgbGV0IEEsIHQgPSAtMSwgaSwgbiA9IGVbMCAqIDIgKyAxXSwgZiA9IDAsIHUgPSA3LCBvID0gNDsKICBmb3IgKG4gPT09IDAgJiYgKHUgPSAxMzgsIG8gPSAzKSwgZVsoYSArIDEpICogMiArIDFdID0gNjU1MzUsIEEgPSAwOyBBIDw9IGE7IEErKykKICAgIGkgPSBuLCBuID0gZVsoQSArIDEpICogMiArIDFdLCAhKCsrZiA8IHUgJiYgaSA9PT0gbikgJiYgKGYgPCBvID8gci5ibF90cmVlW2kgKiAyXSArPSBmIDogaSAhPT0gMCA/IChpICE9PSB0ICYmIHIuYmxfdHJlZVtpICogMl0rKywgci5ibF90cmVlW3FpICogMl0rKykgOiBmIDw9IDEwID8gci5ibF90cmVlWyRpICogMl0rKyA6IHIuYmxfdHJlZVtybiAqIDJdKyssIGYgPSAwLCB0ID0gaSwgbiA9PT0gMCA/ICh1ID0gMTM4LCBvID0gMykgOiBpID09PSBuID8gKHUgPSA2LCBvID0gMykgOiAodSA9IDcsIG8gPSA0KSk7Cn0sIHR0ID0gKHIsIGUsIGEpID0+IHsKICBsZXQgQSwgdCA9IC0xLCBpLCBuID0gZVswICogMiArIDFdLCBmID0gMCwgdSA9IDcsIG8gPSA0OwogIGZvciAobiA9PT0gMCAmJiAodSA9IDEzOCwgbyA9IDMpLCBBID0gMDsgQSA8PSBhOyBBKyspCiAgICBpZiAoaSA9IG4sIG4gPSBlWyhBICsgMSkgKiAyICsgMV0sICEoKytmIDwgdSAmJiBpID09PSBuKSkgewogICAgICBpZiAoZiA8IG8pCiAgICAgICAgZG8KICAgICAgICAgIE9yKHIsIGksIHIuYmxfdHJlZSk7CiAgICAgICAgd2hpbGUgKC0tZiAhPT0gMCk7CiAgICAgIGVsc2UgaSAhPT0gMCA/IChpICE9PSB0ICYmIChPcihyLCBpLCByLmJsX3RyZWUpLCBmLS0pLCBPcihyLCBxaSwgci5ibF90cmVlKSwgbHIociwgZiAtIDMsIDIpKSA6IGYgPD0gMTAgPyAoT3IociwgJGksIHIuYmxfdHJlZSksIGxyKHIsIGYgLSAzLCAzKSkgOiAoT3Iociwgcm4sIHIuYmxfdHJlZSksIGxyKHIsIGYgLSAxMSwgNykpOwogICAgICBmID0gMCwgdCA9IGksIG4gPT09IDAgPyAodSA9IDEzOCwgbyA9IDMpIDogaSA9PT0gbiA/ICh1ID0gNiwgbyA9IDMpIDogKHUgPSA3LCBvID0gNCk7CiAgICB9Cn0sIE9mID0gKHIpID0+IHsKICBsZXQgZTsKICBmb3IgKEF0KHIsIHIuZHluX2x0cmVlLCByLmxfZGVzYy5tYXhfY29kZSksIEF0KHIsIHIuZHluX2R0cmVlLCByLmRfZGVzYy5tYXhfY29kZSksIGRBKHIsIHIuYmxfZGVzYyksIGUgPSBTQSAtIDE7IGUgPj0gMyAmJiByLmJsX3RyZWVbYW5bZV0gKiAyICsgMV0gPT09IDA7IGUtLSkKICAgIDsKICByZXR1cm4gci5vcHRfbGVuICs9IDMgKiAoZSArIDEpICsgNSArIDUgKyA0LCBlOwp9LCBVZiA9IChyLCBlLCBhLCBBKSA9PiB7CiAgbGV0IHQ7CiAgZm9yIChscihyLCBlIC0gMjU3LCA1KSwgbHIociwgYSAtIDEsIDUpLCBscihyLCBBIC0gNCwgNCksIHQgPSAwOyB0IDwgQTsgdCsrKQogICAgbHIociwgci5ibF90cmVlW2FuW3RdICogMiArIDFdLCAzKTsKICB0dChyLCByLmR5bl9sdHJlZSwgZSAtIDEpLCB0dChyLCByLmR5bl9kdHJlZSwgYSAtIDEpOwp9LCBqZiA9IChyKSA9PiB7CiAgbGV0IGUgPSA0MDkzNjI0NDQ3LCBhOwogIGZvciAoYSA9IDA7IGEgPD0gMzE7IGErKywgZSA+Pj49IDEpCiAgICBpZiAoZSAmIDEgJiYgci5keW5fbHRyZWVbYSAqIDJdICE9PSAwKQogICAgICByZXR1cm4gJEE7CiAgaWYgKHIuZHluX2x0cmVlWzkgKiAyXSAhPT0gMCB8fCByLmR5bl9sdHJlZVsxMCAqIDJdICE9PSAwIHx8IHIuZHluX2x0cmVlWzEzICogMl0gIT09IDApCiAgICByZXR1cm4gcnQ7CiAgZm9yIChhID0gMzI7IGEgPCBYMjsgYSsrKQogICAgaWYgKHIuZHluX2x0cmVlW2EgKiAyXSAhPT0gMCkKICAgICAgcmV0dXJuIHJ0OwogIHJldHVybiAkQTsKfTsKbGV0IGl0ID0gITE7CmNvbnN0IFFmID0gKHIpID0+IHsKICBpdCB8fCAoWWYoKSwgaXQgPSAhMCksIHIubF9kZXNjID0gbmV3IFRlKHIuZHluX2x0cmVlLCBlbiksIHIuZF9kZXNjID0gbmV3IFRlKHIuZHluX2R0cmVlLCBBbiksIHIuYmxfZGVzYyA9IG5ldyBUZShyLmJsX3RyZWUsIHRuKSwgci5iaV9idWYgPSAwLCByLmJpX3ZhbGlkID0gMCwgdW4ocik7Cn0sIGNuID0gKHIsIGUsIGEsIEEpID0+IHsKICBscihyLCAoUmYgPDwgMSkgKyAoQSA/IDEgOiAwKSwgMyksIGxuKHIpLCBGMihyLCBhKSwgRjIociwgfmEpLCBhICYmIHIucGVuZGluZ19idWYuc2V0KHIud2luZG93LnN1YmFycmF5KGUsIGUgKyBhKSwgci5wZW5kaW5nKSwgci5wZW5kaW5nICs9IGE7Cn0sIEpmID0gKHIpID0+IHsKICBscihyLCBMaSA8PCAxLCAzKSwgT3IociwgREEsIHFyKSwgVGYocik7Cn0sIEhmID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdCwgaSwgbiA9IDA7CiAgci5sZXZlbCA+IDAgPyAoci5zdHJtLmRhdGFfdHlwZSA9PT0gWGYgJiYgKHIuc3RybS5kYXRhX3R5cGUgPSBqZihyKSksIGRBKHIsIHIubF9kZXNjKSwgZEEociwgci5kX2Rlc2MpLCBuID0gT2YociksIHQgPSByLm9wdF9sZW4gKyAzICsgNyA+Pj4gMywgaSA9IHIuc3RhdGljX2xlbiArIDMgKyA3ID4+PiAzLCBpIDw9IHQgJiYgKHQgPSBpKSkgOiB0ID0gaSA9IGEgKyA1LCBhICsgNCA8PSB0ICYmIGUgIT09IC0xID8gY24ociwgZSwgYSwgQSkgOiByLnN0cmF0ZWd5ID09PSBHZiB8fCBpID09PSB0ID8gKGxyKHIsIChMaSA8PCAxKSArIChBID8gMSA6IDApLCAzKSwgZXQociwgcXIsIGgyKSkgOiAobHIociwgKFZmIDw8IDEpICsgKEEgPyAxIDogMCksIDMpLCBVZihyLCByLmxfZGVzYy5tYXhfY29kZSArIDEsIHIuZF9kZXNjLm1heF9jb2RlICsgMSwgbiArIDEpLCBldChyLCByLmR5bl9sdHJlZSwgci5keW5fZHRyZWUpKSwgdW4ociksIEEgJiYgbG4ocik7Cn0sIHpmID0gKHIsIGUsIGEpID0+IChyLnBlbmRpbmdfYnVmW3Iuc3ltX2J1ZiArIHIuc3ltX25leHQrK10gPSBlLCByLnBlbmRpbmdfYnVmW3Iuc3ltX2J1ZiArIHIuc3ltX25leHQrK10gPSBlID4+IDgsIHIucGVuZGluZ19idWZbci5zeW1fYnVmICsgci5zeW1fbmV4dCsrXSA9IGEsIGUgPT09IDAgPyByLmR5bl9sdHJlZVthICogMl0rKyA6IChyLm1hdGNoZXMrKywgZS0tLCByLmR5bl9sdHJlZVsoSTJbYV0gKyBYMiArIDEpICogMl0rKywgci5keW5fZHRyZWVbbm4oZSkgKiAyXSsrKSwgci5zeW1fbmV4dCA9PT0gci5zeW1fZW5kKTsKdmFyIExmID0gUWYsIEtmID0gY24sIHFmID0gSGYsICRmID0gemYsIHJvID0gSmYsIGFvID0gewogIF90cl9pbml0OiBMZiwKICBfdHJfc3RvcmVkX2Jsb2NrOiBLZiwKICBfdHJfZmx1c2hfYmxvY2s6IHFmLAogIF90cl90YWxseTogJGYsCiAgX3RyX2FsaWduOiBybwp9Owpjb25zdCBlbyA9IChyLCBlLCBhLCBBKSA9PiB7CiAgbGV0IHQgPSByICYgNjU1MzUgfCAwLCBpID0gciA+Pj4gMTYgJiA2NTUzNSB8IDAsIG4gPSAwOwogIGZvciAoOyBhICE9PSAwOyApIHsKICAgIG4gPSBhID4gMmUzID8gMmUzIDogYSwgYSAtPSBuOwogICAgZG8KICAgICAgdCA9IHQgKyBlW0ErK10gfCAwLCBpID0gaSArIHQgfCAwOwogICAgd2hpbGUgKC0tbik7CiAgICB0ICU9IDY1NTIxLCBpICU9IDY1NTIxOwogIH0KICByZXR1cm4gdCB8IGkgPDwgMTYgfCAwOwp9Owp2YXIgQzIgPSBlbzsKY29uc3QgQW8gPSAoKSA9PiB7CiAgbGV0IHIsIGUgPSBbXTsKICBmb3IgKHZhciBhID0gMDsgYSA8IDI1NjsgYSsrKSB7CiAgICByID0gYTsKICAgIGZvciAodmFyIEEgPSAwOyBBIDwgODsgQSsrKQogICAgICByID0gciAmIDEgPyAzOTg4MjkyMzg0IF4gciA+Pj4gMSA6IHIgPj4+IDE7CiAgICBlW2FdID0gcjsKICB9CiAgcmV0dXJuIGU7Cn0sIHRvID0gbmV3IFVpbnQzMkFycmF5KEFvKCkpLCBpbyA9IChyLCBlLCBhLCBBKSA9PiB7CiAgY29uc3QgdCA9IHRvLCBpID0gQSArIGE7CiAgciBePSAtMTsKICBmb3IgKGxldCBuID0gQTsgbiA8IGk7IG4rKykKICAgIHIgPSByID4+PiA4IF4gdFsociBeIGVbbl0pICYgMjU1XTsKICByZXR1cm4gciBeIC0xOwp9Owp2YXIgcTAgPSBpbywgSWEgPSB7CiAgMjogIm5lZWQgZGljdGlvbmFyeSIsCiAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICAxOiAic3RyZWFtIGVuZCIsCiAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICAwOiAiIiwKICAvKiBaX09LICAgICAgICAgICAgICAwICAqLwogICItMSI6ICJmaWxlIGVycm9yIiwKICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqLwogICItMiI6ICJzdHJlYW0gZXJyb3IiLAogIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCiAgIi0zIjogImRhdGEgZXJyb3IiLAogIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCiAgIi00IjogImluc3VmZmljaWVudCBtZW1vcnkiLAogIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCiAgIi01IjogImJ1ZmZlciBlcnJvciIsCiAgLyogWl9CVUZfRVJST1IgICAgICgtNSkgKi8KICAiLTYiOiAiaW5jb21wYXRpYmxlIHZlcnNpb24iCiAgLyogWl9WRVJTSU9OX0VSUk9SICgtNikgKi8KfSwgSWUgPSB7CiAgLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLwogIFpfTk9fRkxVU0g6IDAsCiAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogIFpfU1lOQ19GTFVTSDogMiwKICBaX0ZVTExfRkxVU0g6IDMsCiAgWl9GSU5JU0g6IDQsCiAgWl9CTE9DSzogNSwKICBaX1RSRUVTOiA2LAogIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKICAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KICAqLwogIFpfT0s6IDAsCiAgWl9TVFJFQU1fRU5EOiAxLAogIFpfTkVFRF9ESUNUOiAyLAogIFpfU1RSRUFNX0VSUk9SOiAtMiwKICBaX0RBVEFfRVJST1I6IC0zLAogIFpfTUVNX0VSUk9SOiAtNCwKICBaX0JVRl9FUlJPUjogLTUsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSwKICBaX0ZJTFRFUkVEOiAxLAogIFpfSFVGRk1BTl9PTkxZOiAyLAogIFpfUkxFOiAzLAogIFpfRklYRUQ6IDQsCiAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpCiAgWl9VTktOT1dOOiAyLAogIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqLwogIFpfREVGTEFURUQ6IDgKICAvL1pfTlVMTDogICAgICAgICAgICAgICAgIG51bGwgLy8gVXNlIC0xIG9yIG51bGwgaW5saW5lLCBkZXBlbmRpbmcgb24gdmFyIHR5cGUKfTsKY29uc3QgeyBfdHJfaW5pdDogbm8sIF90cl9zdG9yZWRfYmxvY2s6IGhBLCBfdHJfZmx1c2hfYmxvY2s6IGZvLCBfdHJfdGFsbHk6IGJhLCBfdHJfYWxpZ246IG9vIH0gPSBhbywgewogIFpfTk9fRkxVU0g6IGRhLAogIFpfUEFSVElBTF9GTFVTSDogdW8sCiAgWl9GVUxMX0ZMVVNIOiBsbywKICBaX0ZJTklTSDogQnIsCiAgWl9CTE9DSzogbnQsCiAgWl9PSzogYXIsCiAgWl9TVFJFQU1fRU5EOiBmdCwKICBaX1NUUkVBTV9FUlJPUjoganIsCiAgWl9EQVRBX0VSUk9SOiBjbywKICBaX0JVRl9FUlJPUjogWWUsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiBzbywKICBaX0ZJTFRFUkVEOiBibywKICBaX0hVRkZNQU5fT05MWTogUDIsCiAgWl9STEU6IGhvLAogIFpfRklYRUQ6IHZvLAogIFpfREVGQVVMVF9TVFJBVEVHWToga28sCiAgWl9VTktOT1dOOiBnbywKICBaX0RFRkxBVEVEOiBGZQp9ID0gSWUsIG1vID0gOSwgcG8gPSAxNSwgd28gPSA4LCB5byA9IDI5LCBFbyA9IDI1NiwgdkEgPSBFbyArIDEgKyB5bywgWm8gPSAzMCwgQm8gPSAxOSwgSW8gPSAyICogdkEgKyAxLCBGbyA9IDE1LCB5MCA9IDMsIHVhID0gMjU4LCBRciA9IHVhICsgeTAgKyAxLCBDbyA9IDMyLCBqYSA9IDQyLCBOQSA9IDU3LCBrQSA9IDY5LCBnQSA9IDczLCBtQSA9IDkxLCBwQSA9IDEwMywgWmEgPSAxMTMsIGMyID0gNjY2LCBmciA9IDEsICRhID0gMiwgRmEgPSAzLCByMiA9IDQsIFdvID0gMywgQmEgPSAociwgZSkgPT4gKHIubXNnID0gSWFbZV0sIGUpLCBvdCA9IChyKSA9PiByICogMiAtIChyID4gNCA/IDkgOiAwKSwgb2EgPSAocikgPT4gewogIGxldCBlID0gci5sZW5ndGg7CiAgZm9yICg7IC0tZSA+PSAwOyApCiAgICByW2VdID0gMDsKfSwgX28gPSAocikgPT4gewogIGxldCBlLCBhLCBBLCB0ID0gci53X3NpemU7CiAgZSA9IHIuaGFzaF9zaXplLCBBID0gZTsKICBkbwogICAgYSA9IHIuaGVhZFstLUFdLCByLmhlYWRbQV0gPSBhID49IHQgPyBhIC0gdCA6IDA7CiAgd2hpbGUgKC0tZSk7CiAgZSA9IHQsIEEgPSBlOwogIGRvCiAgICBhID0gci5wcmV2Wy0tQV0sIHIucHJldltBXSA9IGEgPj0gdCA/IGEgLSB0IDogMDsKICB3aGlsZSAoLS1lKTsKfTsKbGV0IEdvID0gKHIsIGUsIGEpID0+IChlIDw8IHIuaGFzaF9zaGlmdCBeIGEpICYgci5oYXNoX21hc2ssIGhhID0gR287CmNvbnN0IHZyID0gKHIpID0+IHsKICBjb25zdCBlID0gci5zdGF0ZTsKICBsZXQgYSA9IGUucGVuZGluZzsKICBhID4gci5hdmFpbF9vdXQgJiYgKGEgPSByLmF2YWlsX291dCksIGEgIT09IDAgJiYgKHIub3V0cHV0LnNldChlLnBlbmRpbmdfYnVmLnN1YmFycmF5KGUucGVuZGluZ19vdXQsIGUucGVuZGluZ19vdXQgKyBhKSwgci5uZXh0X291dCksIHIubmV4dF9vdXQgKz0gYSwgZS5wZW5kaW5nX291dCArPSBhLCByLnRvdGFsX291dCArPSBhLCByLmF2YWlsX291dCAtPSBhLCBlLnBlbmRpbmcgLT0gYSwgZS5wZW5kaW5nID09PSAwICYmIChlLnBlbmRpbmdfb3V0ID0gMCkpOwp9LCB3ciA9IChyLCBlKSA9PiB7CiAgZm8ociwgci5ibG9ja19zdGFydCA+PSAwID8gci5ibG9ja19zdGFydCA6IC0xLCByLnN0cnN0YXJ0IC0gci5ibG9ja19zdGFydCwgZSksIHIuYmxvY2tfc3RhcnQgPSByLnN0cnN0YXJ0LCB2cihyLnN0cm0pOwp9LCBHMCA9IChyLCBlKSA9PiB7CiAgci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSBlOwp9LCBpMiA9IChyLCBlKSA9PiB7CiAgci5wZW5kaW5nX2J1ZltyLnBlbmRpbmcrK10gPSBlID4+PiA4ICYgMjU1LCByLnBlbmRpbmdfYnVmW3IucGVuZGluZysrXSA9IGUgJiAyNTU7Cn0sIHdBID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdCA9IHIuYXZhaWxfaW47CiAgcmV0dXJuIHQgPiBBICYmICh0ID0gQSksIHQgPT09IDAgPyAwIDogKHIuYXZhaWxfaW4gLT0gdCwgZS5zZXQoci5pbnB1dC5zdWJhcnJheShyLm5leHRfaW4sIHIubmV4dF9pbiArIHQpLCBhKSwgci5zdGF0ZS53cmFwID09PSAxID8gci5hZGxlciA9IEMyKHIuYWRsZXIsIGUsIHQsIGEpIDogci5zdGF0ZS53cmFwID09PSAyICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgZSwgdCwgYSkpLCByLm5leHRfaW4gKz0gdCwgci50b3RhbF9pbiArPSB0LCB0KTsKfSwgc24gPSAociwgZSkgPT4gewogIGxldCBhID0gci5tYXhfY2hhaW5fbGVuZ3RoLCBBID0gci5zdHJzdGFydCwgdCwgaSwgbiA9IHIucHJldl9sZW5ndGgsIGYgPSByLm5pY2VfbWF0Y2g7CiAgY29uc3QgdSA9IHIuc3Ryc3RhcnQgPiByLndfc2l6ZSAtIFFyID8gci5zdHJzdGFydCAtIChyLndfc2l6ZSAtIFFyKSA6IDAsIG8gPSByLndpbmRvdywgbCA9IHIud19tYXNrLCBzID0gci5wcmV2LCBjID0gci5zdHJzdGFydCArIHVhOwogIGxldCBkID0gb1tBICsgbiAtIDFdLCB2ID0gb1tBICsgbl07CiAgci5wcmV2X2xlbmd0aCA+PSByLmdvb2RfbWF0Y2ggJiYgKGEgPj49IDIpLCBmID4gci5sb29rYWhlYWQgJiYgKGYgPSByLmxvb2thaGVhZCk7CiAgZG8KICAgIGlmICh0ID0gZSwgIShvW3QgKyBuXSAhPT0gdiB8fCBvW3QgKyBuIC0gMV0gIT09IGQgfHwgb1t0XSAhPT0gb1tBXSB8fCBvWysrdF0gIT09IG9bQSArIDFdKSkgewogICAgICBBICs9IDIsIHQrKzsKICAgICAgZG8KICAgICAgICA7CiAgICAgIHdoaWxlIChvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBvWysrQV0gPT09IG9bKyt0XSAmJiBBIDwgYyk7CiAgICAgIGlmIChpID0gdWEgLSAoYyAtIEEpLCBBID0gYyAtIHVhLCBpID4gbikgewogICAgICAgIGlmIChyLm1hdGNoX3N0YXJ0ID0gZSwgbiA9IGksIGkgPj0gZikKICAgICAgICAgIGJyZWFrOwogICAgICAgIGQgPSBvW0EgKyBuIC0gMV0sIHYgPSBvW0EgKyBuXTsKICAgICAgfQogICAgfQogIHdoaWxlICgoZSA9IHNbZSAmIGxdKSA+IHUgJiYgLS1hICE9PSAwKTsKICByZXR1cm4gbiA8PSByLmxvb2thaGVhZCA/IG4gOiByLmxvb2thaGVhZDsKfSwgUWEgPSAocikgPT4gewogIGNvbnN0IGUgPSByLndfc2l6ZTsKICBsZXQgYSwgQSwgdDsKICBkbyB7CiAgICBpZiAoQSA9IHIud2luZG93X3NpemUgLSByLmxvb2thaGVhZCAtIHIuc3Ryc3RhcnQsIHIuc3Ryc3RhcnQgPj0gZSArIChlIC0gUXIpICYmIChyLndpbmRvdy5zZXQoci53aW5kb3cuc3ViYXJyYXkoZSwgZSArIGUgLSBBKSwgMCksIHIubWF0Y2hfc3RhcnQgLT0gZSwgci5zdHJzdGFydCAtPSBlLCByLmJsb2NrX3N0YXJ0IC09IGUsIHIuaW5zZXJ0ID4gci5zdHJzdGFydCAmJiAoci5pbnNlcnQgPSByLnN0cnN0YXJ0KSwgX28ociksIEEgKz0gZSksIHIuc3RybS5hdmFpbF9pbiA9PT0gMCkKICAgICAgYnJlYWs7CiAgICBpZiAoYSA9IHdBKHIuc3RybSwgci53aW5kb3csIHIuc3Ryc3RhcnQgKyByLmxvb2thaGVhZCwgQSksIHIubG9va2FoZWFkICs9IGEsIHIubG9va2FoZWFkICsgci5pbnNlcnQgPj0geTApCiAgICAgIGZvciAodCA9IHIuc3Ryc3RhcnQgLSByLmluc2VydCwgci5pbnNfaCA9IHIud2luZG93W3RdLCByLmluc19oID0gaGEociwgci5pbnNfaCwgci53aW5kb3dbdCArIDFdKTsgci5pbnNlcnQgJiYgKHIuaW5zX2ggPSBoYShyLCByLmluc19oLCByLndpbmRvd1t0ICsgeTAgLSAxXSksIHIucHJldlt0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSB0LCB0KyssIHIuaW5zZXJ0LS0sICEoci5sb29rYWhlYWQgKyByLmluc2VydCA8IHkwKSk7ICkKICAgICAgICA7CiAgfSB3aGlsZSAoci5sb29rYWhlYWQgPCBRciAmJiByLnN0cm0uYXZhaWxfaW4gIT09IDApOwp9LCBibiA9IChyLCBlKSA9PiB7CiAgbGV0IGEgPSByLnBlbmRpbmdfYnVmX3NpemUgLSA1ID4gci53X3NpemUgPyByLndfc2l6ZSA6IHIucGVuZGluZ19idWZfc2l6ZSAtIDUsIEEsIHQsIGksIG4gPSAwLCBmID0gci5zdHJtLmF2YWlsX2luOwogIGRvIHsKICAgIGlmIChBID0gNjU1MzUsIGkgPSByLmJpX3ZhbGlkICsgNDIgPj4gMywgci5zdHJtLmF2YWlsX291dCA8IGkgfHwgKGkgPSByLnN0cm0uYXZhaWxfb3V0IC0gaSwgdCA9IHIuc3Ryc3RhcnQgLSByLmJsb2NrX3N0YXJ0LCBBID4gdCArIHIuc3RybS5hdmFpbF9pbiAmJiAoQSA9IHQgKyByLnN0cm0uYXZhaWxfaW4pLCBBID4gaSAmJiAoQSA9IGkpLCBBIDwgYSAmJiAoQSA9PT0gMCAmJiBlICE9PSBCciB8fCBlID09PSBkYSB8fCBBICE9PSB0ICsgci5zdHJtLmF2YWlsX2luKSkpCiAgICAgIGJyZWFrOwogICAgbiA9IGUgPT09IEJyICYmIEEgPT09IHQgKyByLnN0cm0uYXZhaWxfaW4gPyAxIDogMCwgaEEociwgMCwgMCwgbiksIHIucGVuZGluZ19idWZbci5wZW5kaW5nIC0gNF0gPSBBLCByLnBlbmRpbmdfYnVmW3IucGVuZGluZyAtIDNdID0gQSA+PiA4LCByLnBlbmRpbmdfYnVmW3IucGVuZGluZyAtIDJdID0gfkEsIHIucGVuZGluZ19idWZbci5wZW5kaW5nIC0gMV0gPSB+QSA+PiA4LCB2cihyLnN0cm0pLCB0ICYmICh0ID4gQSAmJiAodCA9IEEpLCByLnN0cm0ub3V0cHV0LnNldChyLndpbmRvdy5zdWJhcnJheShyLmJsb2NrX3N0YXJ0LCByLmJsb2NrX3N0YXJ0ICsgdCksIHIuc3RybS5uZXh0X291dCksIHIuc3RybS5uZXh0X291dCArPSB0LCByLnN0cm0uYXZhaWxfb3V0IC09IHQsIHIuc3RybS50b3RhbF9vdXQgKz0gdCwgci5ibG9ja19zdGFydCArPSB0LCBBIC09IHQpLCBBICYmICh3QShyLnN0cm0sIHIuc3RybS5vdXRwdXQsIHIuc3RybS5uZXh0X291dCwgQSksIHIuc3RybS5uZXh0X291dCArPSBBLCByLnN0cm0uYXZhaWxfb3V0IC09IEEsIHIuc3RybS50b3RhbF9vdXQgKz0gQSk7CiAgfSB3aGlsZSAobiA9PT0gMCk7CiAgcmV0dXJuIGYgLT0gci5zdHJtLmF2YWlsX2luLCBmICYmIChmID49IHIud19zaXplID8gKHIubWF0Y2hlcyA9IDIsIHIud2luZG93LnNldChyLnN0cm0uaW5wdXQuc3ViYXJyYXkoci5zdHJtLm5leHRfaW4gLSByLndfc2l6ZSwgci5zdHJtLm5leHRfaW4pLCAwKSwgci5zdHJzdGFydCA9IHIud19zaXplLCByLmluc2VydCA9IHIuc3Ryc3RhcnQpIDogKHIud2luZG93X3NpemUgLSByLnN0cnN0YXJ0IDw9IGYgJiYgKHIuc3Ryc3RhcnQgLT0gci53X3NpemUsIHIud2luZG93LnNldChyLndpbmRvdy5zdWJhcnJheShyLndfc2l6ZSwgci53X3NpemUgKyByLnN0cnN0YXJ0KSwgMCksIHIubWF0Y2hlcyA8IDIgJiYgci5tYXRjaGVzKyssIHIuaW5zZXJ0ID4gci5zdHJzdGFydCAmJiAoci5pbnNlcnQgPSByLnN0cnN0YXJ0KSksIHIud2luZG93LnNldChyLnN0cm0uaW5wdXQuc3ViYXJyYXkoci5zdHJtLm5leHRfaW4gLSBmLCByLnN0cm0ubmV4dF9pbiksIHIuc3Ryc3RhcnQpLCByLnN0cnN0YXJ0ICs9IGYsIHIuaW5zZXJ0ICs9IGYgPiByLndfc2l6ZSAtIHIuaW5zZXJ0ID8gci53X3NpemUgLSByLmluc2VydCA6IGYpLCByLmJsb2NrX3N0YXJ0ID0gci5zdHJzdGFydCksIHIuaGlnaF93YXRlciA8IHIuc3Ryc3RhcnQgJiYgKHIuaGlnaF93YXRlciA9IHIuc3Ryc3RhcnQpLCBuID8gcjIgOiBlICE9PSBkYSAmJiBlICE9PSBCciAmJiByLnN0cm0uYXZhaWxfaW4gPT09IDAgJiYgci5zdHJzdGFydCA9PT0gci5ibG9ja19zdGFydCA/ICRhIDogKGkgPSByLndpbmRvd19zaXplIC0gci5zdHJzdGFydCwgci5zdHJtLmF2YWlsX2luID4gaSAmJiByLmJsb2NrX3N0YXJ0ID49IHIud19zaXplICYmIChyLmJsb2NrX3N0YXJ0IC09IHIud19zaXplLCByLnN0cnN0YXJ0IC09IHIud19zaXplLCByLndpbmRvdy5zZXQoci53aW5kb3cuc3ViYXJyYXkoci53X3NpemUsIHIud19zaXplICsgci5zdHJzdGFydCksIDApLCByLm1hdGNoZXMgPCAyICYmIHIubWF0Y2hlcysrLCBpICs9IHIud19zaXplLCByLmluc2VydCA+IHIuc3Ryc3RhcnQgJiYgKHIuaW5zZXJ0ID0gci5zdHJzdGFydCkpLCBpID4gci5zdHJtLmF2YWlsX2luICYmIChpID0gci5zdHJtLmF2YWlsX2luKSwgaSAmJiAod0Eoci5zdHJtLCByLndpbmRvdywgci5zdHJzdGFydCwgaSksIHIuc3Ryc3RhcnQgKz0gaSwgci5pbnNlcnQgKz0gaSA+IHIud19zaXplIC0gci5pbnNlcnQgPyByLndfc2l6ZSAtIHIuaW5zZXJ0IDogaSksIHIuaGlnaF93YXRlciA8IHIuc3Ryc3RhcnQgJiYgKHIuaGlnaF93YXRlciA9IHIuc3Ryc3RhcnQpLCBpID0gci5iaV92YWxpZCArIDQyID4+IDMsIGkgPSByLnBlbmRpbmdfYnVmX3NpemUgLSBpID4gNjU1MzUgPyA2NTUzNSA6IHIucGVuZGluZ19idWZfc2l6ZSAtIGksIGEgPSBpID4gci53X3NpemUgPyByLndfc2l6ZSA6IGksIHQgPSByLnN0cnN0YXJ0IC0gci5ibG9ja19zdGFydCwgKHQgPj0gYSB8fCAodCB8fCBlID09PSBCcikgJiYgZSAhPT0gZGEgJiYgci5zdHJtLmF2YWlsX2luID09PSAwICYmIHQgPD0gaSkgJiYgKEEgPSB0ID4gaSA/IGkgOiB0LCBuID0gZSA9PT0gQnIgJiYgci5zdHJtLmF2YWlsX2luID09PSAwICYmIEEgPT09IHQgPyAxIDogMCwgaEEociwgci5ibG9ja19zdGFydCwgQSwgbiksIHIuYmxvY2tfc3RhcnQgKz0gQSwgdnIoci5zdHJtKSksIG4gPyBGYSA6IGZyKTsKfSwgT2UgPSAociwgZSkgPT4gewogIGxldCBhLCBBOwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkIDwgUXIpIHsKICAgICAgaWYgKFFhKHIpLCByLmxvb2thaGVhZCA8IFFyICYmIGUgPT09IGRhKQogICAgICAgIHJldHVybiBmcjsKICAgICAgaWYgKHIubG9va2FoZWFkID09PSAwKQogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGEgPSAwLCByLmxvb2thaGVhZCA+PSB5MCAmJiAoci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0KSwgYSAhPT0gMCAmJiByLnN0cnN0YXJ0IC0gYSA8PSByLndfc2l6ZSAtIFFyICYmIChyLm1hdGNoX2xlbmd0aCA9IHNuKHIsIGEpKSwgci5tYXRjaF9sZW5ndGggPj0geTApCiAgICAgIGlmIChBID0gYmEociwgci5zdHJzdGFydCAtIHIubWF0Y2hfc3RhcnQsIHIubWF0Y2hfbGVuZ3RoIC0geTApLCByLmxvb2thaGVhZCAtPSByLm1hdGNoX2xlbmd0aCwgci5tYXRjaF9sZW5ndGggPD0gci5tYXhfbGF6eV9tYXRjaCAmJiByLmxvb2thaGVhZCA+PSB5MCkgewogICAgICAgIHIubWF0Y2hfbGVuZ3RoLS07CiAgICAgICAgZG8KICAgICAgICAgIHIuc3Ryc3RhcnQrKywgci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0OwogICAgICAgIHdoaWxlICgtLXIubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICByLnN0cnN0YXJ0Kys7CiAgICAgIH0gZWxzZQogICAgICAgIHIuc3Ryc3RhcnQgKz0gci5tYXRjaF9sZW5ndGgsIHIubWF0Y2hfbGVuZ3RoID0gMCwgci5pbnNfaCA9IHIud2luZG93W3Iuc3Ryc3RhcnRdLCByLmluc19oID0gaGEociwgci5pbnNfaCwgci53aW5kb3dbci5zdHJzdGFydCArIDFdKTsKICAgIGVsc2UKICAgICAgQSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnRdKSwgci5sb29rYWhlYWQtLSwgci5zdHJzdGFydCsrOwogICAgaWYgKEEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgIHJldHVybiBmcjsKICB9CiAgcmV0dXJuIHIuaW5zZXJ0ID0gci5zdHJzdGFydCA8IHkwIC0gMSA/IHIuc3Ryc3RhcnQgOiB5MCAtIDEsIGUgPT09IEJyID8gKHdyKHIsICEwKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCA/IEZhIDogcjIpIDogci5zeW1fbmV4dCAmJiAod3IociwgITEpLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IGZyIDogJGE7Cn0sIEdhID0gKHIsIGUpID0+IHsKICBsZXQgYSwgQSwgdDsKICBmb3IgKDsgOyApIHsKICAgIGlmIChyLmxvb2thaGVhZCA8IFFyKSB7CiAgICAgIGlmIChRYShyKSwgci5sb29rYWhlYWQgPCBRciAmJiBlID09PSBkYSkKICAgICAgICByZXR1cm4gZnI7CiAgICAgIGlmIChyLmxvb2thaGVhZCA9PT0gMCkKICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChhID0gMCwgci5sb29rYWhlYWQgPj0geTAgJiYgKHIuaW5zX2ggPSBoYShyLCByLmluc19oLCByLndpbmRvd1tyLnN0cnN0YXJ0ICsgeTAgLSAxXSksIGEgPSByLnByZXZbci5zdHJzdGFydCAmIHIud19tYXNrXSA9IHIuaGVhZFtyLmluc19oXSwgci5oZWFkW3IuaW5zX2hdID0gci5zdHJzdGFydCksIHIucHJldl9sZW5ndGggPSByLm1hdGNoX2xlbmd0aCwgci5wcmV2X21hdGNoID0gci5tYXRjaF9zdGFydCwgci5tYXRjaF9sZW5ndGggPSB5MCAtIDEsIGEgIT09IDAgJiYgci5wcmV2X2xlbmd0aCA8IHIubWF4X2xhenlfbWF0Y2ggJiYgci5zdHJzdGFydCAtIGEgPD0gci53X3NpemUgLSBRciAmJiAoci5tYXRjaF9sZW5ndGggPSBzbihyLCBhKSwgci5tYXRjaF9sZW5ndGggPD0gNSAmJiAoci5zdHJhdGVneSA9PT0gYm8gfHwgci5tYXRjaF9sZW5ndGggPT09IHkwICYmIHIuc3Ryc3RhcnQgLSByLm1hdGNoX3N0YXJ0ID4gNDA5NikgJiYgKHIubWF0Y2hfbGVuZ3RoID0geTAgLSAxKSksIHIucHJldl9sZW5ndGggPj0geTAgJiYgci5tYXRjaF9sZW5ndGggPD0gci5wcmV2X2xlbmd0aCkgewogICAgICB0ID0gci5zdHJzdGFydCArIHIubG9va2FoZWFkIC0geTAsIEEgPSBiYShyLCByLnN0cnN0YXJ0IC0gMSAtIHIucHJldl9tYXRjaCwgci5wcmV2X2xlbmd0aCAtIHkwKSwgci5sb29rYWhlYWQgLT0gci5wcmV2X2xlbmd0aCAtIDEsIHIucHJldl9sZW5ndGggLT0gMjsKICAgICAgZG8KICAgICAgICArK3Iuc3Ryc3RhcnQgPD0gdCAmJiAoci5pbnNfaCA9IGhhKHIsIHIuaW5zX2gsIHIud2luZG93W3Iuc3Ryc3RhcnQgKyB5MCAtIDFdKSwgYSA9IHIucHJldltyLnN0cnN0YXJ0ICYgci53X21hc2tdID0gci5oZWFkW3IuaW5zX2hdLCByLmhlYWRbci5pbnNfaF0gPSByLnN0cnN0YXJ0KTsKICAgICAgd2hpbGUgKC0tci5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgIGlmIChyLm1hdGNoX2F2YWlsYWJsZSA9IDAsIHIubWF0Y2hfbGVuZ3RoID0geTAgLSAxLCByLnN0cnN0YXJ0KyssIEEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgICAgcmV0dXJuIGZyOwogICAgfSBlbHNlIGlmIChyLm1hdGNoX2F2YWlsYWJsZSkgewogICAgICBpZiAoQSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnQgLSAxXSksIEEgJiYgd3IociwgITEpLCByLnN0cnN0YXJ0KyssIHIubG9va2FoZWFkLS0sIHIuc3RybS5hdmFpbF9vdXQgPT09IDApCiAgICAgICAgcmV0dXJuIGZyOwogICAgfSBlbHNlCiAgICAgIHIubWF0Y2hfYXZhaWxhYmxlID0gMSwgci5zdHJzdGFydCsrLCByLmxvb2thaGVhZC0tOwogIH0KICByZXR1cm4gci5tYXRjaF9hdmFpbGFibGUgJiYgKEEgPSBiYShyLCAwLCByLndpbmRvd1tyLnN0cnN0YXJ0IC0gMV0pLCByLm1hdGNoX2F2YWlsYWJsZSA9IDApLCByLmluc2VydCA9IHIuc3Ryc3RhcnQgPCB5MCAtIDEgPyByLnN0cnN0YXJ0IDogeTAgLSAxLCBlID09PSBCciA/ICh3cihyLCAhMCksIHIuc3RybS5hdmFpbF9vdXQgPT09IDAgPyBGYSA6IHIyKSA6IHIuc3ltX25leHQgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkgPyBmciA6ICRhOwp9LCBYbyA9IChyLCBlKSA9PiB7CiAgbGV0IGEsIEEsIHQsIGk7CiAgY29uc3QgbiA9IHIud2luZG93OwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkIDw9IHVhKSB7CiAgICAgIGlmIChRYShyKSwgci5sb29rYWhlYWQgPD0gdWEgJiYgZSA9PT0gZGEpCiAgICAgICAgcmV0dXJuIGZyOwogICAgICBpZiAoci5sb29rYWhlYWQgPT09IDApCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoci5tYXRjaF9sZW5ndGggPSAwLCByLmxvb2thaGVhZCA+PSB5MCAmJiByLnN0cnN0YXJ0ID4gMCAmJiAodCA9IHIuc3Ryc3RhcnQgLSAxLCBBID0gblt0XSwgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0pKSB7CiAgICAgIGkgPSByLnN0cnN0YXJ0ICsgdWE7CiAgICAgIGRvCiAgICAgICAgOwogICAgICB3aGlsZSAoQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0gJiYgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiBBID09PSBuWysrdF0gJiYgQSA9PT0gblsrK3RdICYmIEEgPT09IG5bKyt0XSAmJiB0IDwgaSk7CiAgICAgIHIubWF0Y2hfbGVuZ3RoID0gdWEgLSAoaSAtIHQpLCByLm1hdGNoX2xlbmd0aCA+IHIubG9va2FoZWFkICYmIChyLm1hdGNoX2xlbmd0aCA9IHIubG9va2FoZWFkKTsKICAgIH0KICAgIGlmIChyLm1hdGNoX2xlbmd0aCA+PSB5MCA/IChhID0gYmEociwgMSwgci5tYXRjaF9sZW5ndGggLSB5MCksIHIubG9va2FoZWFkIC09IHIubWF0Y2hfbGVuZ3RoLCByLnN0cnN0YXJ0ICs9IHIubWF0Y2hfbGVuZ3RoLCByLm1hdGNoX2xlbmd0aCA9IDApIDogKGEgPSBiYShyLCAwLCByLndpbmRvd1tyLnN0cnN0YXJ0XSksIHIubG9va2FoZWFkLS0sIHIuc3Ryc3RhcnQrKyksIGEgJiYgKHdyKHIsICExKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCkpCiAgICAgIHJldHVybiBmcjsKICB9CiAgcmV0dXJuIHIuaW5zZXJ0ID0gMCwgZSA9PT0gQnIgPyAod3IociwgITApLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwID8gRmEgOiByMikgOiByLnN5bV9uZXh0ICYmICh3cihyLCAhMSksIHIuc3RybS5hdmFpbF9vdXQgPT09IDApID8gZnIgOiAkYTsKfSwgUm8gPSAociwgZSkgPT4gewogIGxldCBhOwogIGZvciAoOyA7ICkgewogICAgaWYgKHIubG9va2FoZWFkID09PSAwICYmIChRYShyKSwgci5sb29rYWhlYWQgPT09IDApKSB7CiAgICAgIGlmIChlID09PSBkYSkKICAgICAgICByZXR1cm4gZnI7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHIubWF0Y2hfbGVuZ3RoID0gMCwgYSA9IGJhKHIsIDAsIHIud2luZG93W3Iuc3Ryc3RhcnRdKSwgci5sb29rYWhlYWQtLSwgci5zdHJzdGFydCsrLCBhICYmICh3cihyLCAhMSksIHIuc3RybS5hdmFpbF9vdXQgPT09IDApKQogICAgICByZXR1cm4gZnI7CiAgfQogIHJldHVybiByLmluc2VydCA9IDAsIGUgPT09IEJyID8gKHdyKHIsICEwKSwgci5zdHJtLmF2YWlsX291dCA9PT0gMCA/IEZhIDogcjIpIDogci5zeW1fbmV4dCAmJiAod3IociwgITEpLCByLnN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IGZyIDogJGE7Cn07CmZ1bmN0aW9uIFByKHIsIGUsIGEsIEEsIHQpIHsKICB0aGlzLmdvb2RfbGVuZ3RoID0gciwgdGhpcy5tYXhfbGF6eSA9IGUsIHRoaXMubmljZV9sZW5ndGggPSBhLCB0aGlzLm1heF9jaGFpbiA9IEEsIHRoaXMuZnVuYyA9IHQ7Cn0KY29uc3QgczIgPSBbCiAgLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqLwogIG5ldyBQcigwLCAwLCAwLCAwLCBibiksCiAgLyogMCBzdG9yZSBvbmx5ICovCiAgbmV3IFByKDQsIDQsIDgsIDQsIE9lKSwKICAvKiAxIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovCiAgbmV3IFByKDQsIDUsIDE2LCA4LCBPZSksCiAgLyogMiAqLwogIG5ldyBQcig0LCA2LCAzMiwgMzIsIE9lKSwKICAvKiAzICovCiAgbmV3IFByKDQsIDQsIDE2LCAxNiwgR2EpLAogIC8qIDQgbGF6eSBtYXRjaGVzICovCiAgbmV3IFByKDgsIDE2LCAzMiwgMzIsIEdhKSwKICAvKiA1ICovCiAgbmV3IFByKDgsIDE2LCAxMjgsIDEyOCwgR2EpLAogIC8qIDYgKi8KICBuZXcgUHIoOCwgMzIsIDEyOCwgMjU2LCBHYSksCiAgLyogNyAqLwogIG5ldyBQcigzMiwgMTI4LCAyNTgsIDEwMjQsIEdhKSwKICAvKiA4ICovCiAgbmV3IFByKDMyLCAyNTgsIDI1OCwgNDA5NiwgR2EpCiAgLyogOSBtYXggY29tcHJlc3Npb24gKi8KXSwgVm8gPSAocikgPT4gewogIHIud2luZG93X3NpemUgPSAyICogci53X3NpemUsIG9hKHIuaGVhZCksIHIubWF4X2xhenlfbWF0Y2ggPSBzMltyLmxldmVsXS5tYXhfbGF6eSwgci5nb29kX21hdGNoID0gczJbci5sZXZlbF0uZ29vZF9sZW5ndGgsIHIubmljZV9tYXRjaCA9IHMyW3IubGV2ZWxdLm5pY2VfbGVuZ3RoLCByLm1heF9jaGFpbl9sZW5ndGggPSBzMltyLmxldmVsXS5tYXhfY2hhaW4sIHIuc3Ryc3RhcnQgPSAwLCByLmJsb2NrX3N0YXJ0ID0gMCwgci5sb29rYWhlYWQgPSAwLCByLmluc2VydCA9IDAsIHIubWF0Y2hfbGVuZ3RoID0gci5wcmV2X2xlbmd0aCA9IHkwIC0gMSwgci5tYXRjaF9hdmFpbGFibGUgPSAwLCByLmluc19oID0gMDsKfTsKZnVuY3Rpb24gU28oKSB7CiAgdGhpcy5zdHJtID0gbnVsbCwgdGhpcy5zdGF0dXMgPSAwLCB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbCwgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMCwgdGhpcy5wZW5kaW5nX291dCA9IDAsIHRoaXMucGVuZGluZyA9IDAsIHRoaXMud3JhcCA9IDAsIHRoaXMuZ3poZWFkID0gbnVsbCwgdGhpcy5nemluZGV4ID0gMCwgdGhpcy5tZXRob2QgPSBGZSwgdGhpcy5sYXN0X2ZsdXNoID0gLTEsIHRoaXMud19zaXplID0gMCwgdGhpcy53X2JpdHMgPSAwLCB0aGlzLndfbWFzayA9IDAsIHRoaXMud2luZG93ID0gbnVsbCwgdGhpcy53aW5kb3dfc2l6ZSA9IDAsIHRoaXMucHJldiA9IG51bGwsIHRoaXMuaGVhZCA9IG51bGwsIHRoaXMuaW5zX2ggPSAwLCB0aGlzLmhhc2hfc2l6ZSA9IDAsIHRoaXMuaGFzaF9iaXRzID0gMCwgdGhpcy5oYXNoX21hc2sgPSAwLCB0aGlzLmhhc2hfc2hpZnQgPSAwLCB0aGlzLmJsb2NrX3N0YXJ0ID0gMCwgdGhpcy5tYXRjaF9sZW5ndGggPSAwLCB0aGlzLnByZXZfbWF0Y2ggPSAwLCB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDAsIHRoaXMuc3Ryc3RhcnQgPSAwLCB0aGlzLm1hdGNoX3N0YXJ0ID0gMCwgdGhpcy5sb29rYWhlYWQgPSAwLCB0aGlzLnByZXZfbGVuZ3RoID0gMCwgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMCwgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDAsIHRoaXMubGV2ZWwgPSAwLCB0aGlzLnN0cmF0ZWd5ID0gMCwgdGhpcy5nb29kX21hdGNoID0gMCwgdGhpcy5uaWNlX21hdGNoID0gMCwgdGhpcy5keW5fbHRyZWUgPSBuZXcgVWludDE2QXJyYXkoSW8gKiAyKSwgdGhpcy5keW5fZHRyZWUgPSBuZXcgVWludDE2QXJyYXkoKDIgKiBabyArIDEpICogMiksIHRoaXMuYmxfdHJlZSA9IG5ldyBVaW50MTZBcnJheSgoMiAqIEJvICsgMSkgKiAyKSwgb2EodGhpcy5keW5fbHRyZWUpLCBvYSh0aGlzLmR5bl9kdHJlZSksIG9hKHRoaXMuYmxfdHJlZSksIHRoaXMubF9kZXNjID0gbnVsbCwgdGhpcy5kX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2NvdW50ID0gbmV3IFVpbnQxNkFycmF5KEZvICsgMSksIHRoaXMuaGVhcCA9IG5ldyBVaW50MTZBcnJheSgyICogdkEgKyAxKSwgb2EodGhpcy5oZWFwKSwgdGhpcy5oZWFwX2xlbiA9IDAsIHRoaXMuaGVhcF9tYXggPSAwLCB0aGlzLmRlcHRoID0gbmV3IFVpbnQxNkFycmF5KDIgKiB2QSArIDEpLCBvYSh0aGlzLmRlcHRoKSwgdGhpcy5zeW1fYnVmID0gMCwgdGhpcy5saXRfYnVmc2l6ZSA9IDAsIHRoaXMuc3ltX25leHQgPSAwLCB0aGlzLnN5bV9lbmQgPSAwLCB0aGlzLm9wdF9sZW4gPSAwLCB0aGlzLnN0YXRpY19sZW4gPSAwLCB0aGlzLm1hdGNoZXMgPSAwLCB0aGlzLmluc2VydCA9IDAsIHRoaXMuYmlfYnVmID0gMCwgdGhpcy5iaV92YWxpZCA9IDA7Cn0KY29uc3QgUjIgPSAocikgPT4gewogIGlmICghcikKICAgIHJldHVybiAxOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiAhZSB8fCBlLnN0cm0gIT09IHIgfHwgZS5zdGF0dXMgIT09IGphICYmIC8vI2lmZGVmIEdaSVAKICBlLnN0YXR1cyAhPT0gTkEgJiYgLy8jZW5kaWYKICBlLnN0YXR1cyAhPT0ga0EgJiYgZS5zdGF0dXMgIT09IGdBICYmIGUuc3RhdHVzICE9PSBtQSAmJiBlLnN0YXR1cyAhPT0gcEEgJiYgZS5zdGF0dXMgIT09IFphICYmIGUuc3RhdHVzICE9PSBjMiA/IDEgOiAwOwp9LCBkbiA9IChyKSA9PiB7CiAgaWYgKFIyKHIpKQogICAgcmV0dXJuIEJhKHIsIGpyKTsKICByLnRvdGFsX2luID0gci50b3RhbF9vdXQgPSAwLCByLmRhdGFfdHlwZSA9IGdvOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiBlLnBlbmRpbmcgPSAwLCBlLnBlbmRpbmdfb3V0ID0gMCwgZS53cmFwIDwgMCAmJiAoZS53cmFwID0gLWUud3JhcCksIGUuc3RhdHVzID0gLy8jaWZkZWYgR1pJUAogIGUud3JhcCA9PT0gMiA/IE5BIDogKAogICAgLy8jZW5kaWYKICAgIGUud3JhcCA/IGphIDogWmEKICApLCByLmFkbGVyID0gZS53cmFwID09PSAyID8gMCA6IDEsIGUubGFzdF9mbHVzaCA9IC0yLCBubyhlKSwgYXI7Cn0sIGhuID0gKHIpID0+IHsKICBjb25zdCBlID0gZG4ocik7CiAgcmV0dXJuIGUgPT09IGFyICYmIFZvKHIuc3RhdGUpLCBlOwp9LCBEbyA9IChyLCBlKSA9PiBSMihyKSB8fCByLnN0YXRlLndyYXAgIT09IDIgPyBqciA6IChyLnN0YXRlLmd6aGVhZCA9IGUsIGFyKSwgdm4gPSAociwgZSwgYSwgQSwgdCwgaSkgPT4gewogIGlmICghcikKICAgIHJldHVybiBqcjsKICBsZXQgbiA9IDE7CiAgaWYgKGUgPT09IHNvICYmIChlID0gNiksIEEgPCAwID8gKG4gPSAwLCBBID0gLUEpIDogQSA+IDE1ICYmIChuID0gMiwgQSAtPSAxNiksIHQgPCAxIHx8IHQgPiBtbyB8fCBhICE9PSBGZSB8fCBBIDwgOCB8fCBBID4gMTUgfHwgZSA8IDAgfHwgZSA+IDkgfHwgaSA8IDAgfHwgaSA+IHZvIHx8IEEgPT09IDggJiYgbiAhPT0gMSkKICAgIHJldHVybiBCYShyLCBqcik7CiAgQSA9PT0gOCAmJiAoQSA9IDkpOwogIGNvbnN0IGYgPSBuZXcgU28oKTsKICByZXR1cm4gci5zdGF0ZSA9IGYsIGYuc3RybSA9IHIsIGYuc3RhdHVzID0gamEsIGYud3JhcCA9IG4sIGYuZ3poZWFkID0gbnVsbCwgZi53X2JpdHMgPSBBLCBmLndfc2l6ZSA9IDEgPDwgZi53X2JpdHMsIGYud19tYXNrID0gZi53X3NpemUgLSAxLCBmLmhhc2hfYml0cyA9IHQgKyA3LCBmLmhhc2hfc2l6ZSA9IDEgPDwgZi5oYXNoX2JpdHMsIGYuaGFzaF9tYXNrID0gZi5oYXNoX3NpemUgLSAxLCBmLmhhc2hfc2hpZnQgPSB+figoZi5oYXNoX2JpdHMgKyB5MCAtIDEpIC8geTApLCBmLndpbmRvdyA9IG5ldyBVaW50OEFycmF5KGYud19zaXplICogMiksIGYuaGVhZCA9IG5ldyBVaW50MTZBcnJheShmLmhhc2hfc2l6ZSksIGYucHJldiA9IG5ldyBVaW50MTZBcnJheShmLndfc2l6ZSksIGYubGl0X2J1ZnNpemUgPSAxIDw8IHQgKyA2LCBmLnBlbmRpbmdfYnVmX3NpemUgPSBmLmxpdF9idWZzaXplICogNCwgZi5wZW5kaW5nX2J1ZiA9IG5ldyBVaW50OEFycmF5KGYucGVuZGluZ19idWZfc2l6ZSksIGYuc3ltX2J1ZiA9IGYubGl0X2J1ZnNpemUsIGYuc3ltX2VuZCA9IChmLmxpdF9idWZzaXplIC0gMSkgKiAzLCBmLmxldmVsID0gZSwgZi5zdHJhdGVneSA9IGksIGYubWV0aG9kID0gYSwgaG4ocik7Cn0sIHhvID0gKHIsIGUpID0+IHZuKHIsIGUsIEZlLCBwbywgd28sIGtvKSwgTm8gPSAociwgZSkgPT4gewogIGlmIChSMihyKSB8fCBlID4gbnQgfHwgZSA8IDApCiAgICByZXR1cm4gciA/IEJhKHIsIGpyKSA6IGpyOwogIGNvbnN0IGEgPSByLnN0YXRlOwogIGlmICghci5vdXRwdXQgfHwgci5hdmFpbF9pbiAhPT0gMCAmJiAhci5pbnB1dCB8fCBhLnN0YXR1cyA9PT0gYzIgJiYgZSAhPT0gQnIpCiAgICByZXR1cm4gQmEociwgci5hdmFpbF9vdXQgPT09IDAgPyBZZSA6IGpyKTsKICBjb25zdCBBID0gYS5sYXN0X2ZsdXNoOwogIGlmIChhLmxhc3RfZmx1c2ggPSBlLCBhLnBlbmRpbmcgIT09IDApIHsKICAgIGlmICh2cihyKSwgci5hdmFpbF9vdXQgPT09IDApCiAgICAgIHJldHVybiBhLmxhc3RfZmx1c2ggPSAtMSwgYXI7CiAgfSBlbHNlIGlmIChyLmF2YWlsX2luID09PSAwICYmIG90KGUpIDw9IG90KEEpICYmIGUgIT09IEJyKQogICAgcmV0dXJuIEJhKHIsIFllKTsKICBpZiAoYS5zdGF0dXMgPT09IGMyICYmIHIuYXZhaWxfaW4gIT09IDApCiAgICByZXR1cm4gQmEociwgWWUpOwogIGlmIChhLnN0YXR1cyA9PT0gamEgJiYgYS53cmFwID09PSAwICYmIChhLnN0YXR1cyA9IFphKSwgYS5zdGF0dXMgPT09IGphKSB7CiAgICBsZXQgdCA9IEZlICsgKGEud19iaXRzIC0gOCA8PCA0KSA8PCA4LCBpID0gLTE7CiAgICBpZiAoYS5zdHJhdGVneSA+PSBQMiB8fCBhLmxldmVsIDwgMiA/IGkgPSAwIDogYS5sZXZlbCA8IDYgPyBpID0gMSA6IGEubGV2ZWwgPT09IDYgPyBpID0gMiA6IGkgPSAzLCB0IHw9IGkgPDwgNiwgYS5zdHJzdGFydCAhPT0gMCAmJiAodCB8PSBDbyksIHQgKz0gMzEgLSB0ICUgMzEsIGkyKGEsIHQpLCBhLnN0cnN0YXJ0ICE9PSAwICYmIChpMihhLCByLmFkbGVyID4+PiAxNiksIGkyKGEsIHIuYWRsZXIgJiA2NTUzNSkpLCByLmFkbGVyID0gMSwgYS5zdGF0dXMgPSBaYSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBOQSkgewogICAgaWYgKHIuYWRsZXIgPSAwLCBHMChhLCAzMSksIEcwKGEsIDEzOSksIEcwKGEsIDgpLCBhLmd6aGVhZCkKICAgICAgRzAoCiAgICAgICAgYSwKICAgICAgICAoYS5nemhlYWQudGV4dCA/IDEgOiAwKSArIChhLmd6aGVhZC5oY3JjID8gMiA6IDApICsgKGEuZ3poZWFkLmV4dHJhID8gNCA6IDApICsgKGEuZ3poZWFkLm5hbWUgPyA4IDogMCkgKyAoYS5nemhlYWQuY29tbWVudCA/IDE2IDogMCkKICAgICAgKSwgRzAoYSwgYS5nemhlYWQudGltZSAmIDI1NSksIEcwKGEsIGEuZ3poZWFkLnRpbWUgPj4gOCAmIDI1NSksIEcwKGEsIGEuZ3poZWFkLnRpbWUgPj4gMTYgJiAyNTUpLCBHMChhLCBhLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KSwgRzAoYSwgYS5sZXZlbCA9PT0gOSA/IDIgOiBhLnN0cmF0ZWd5ID49IFAyIHx8IGEubGV2ZWwgPCAyID8gNCA6IDApLCBHMChhLCBhLmd6aGVhZC5vcyAmIDI1NSksIGEuZ3poZWFkLmV4dHJhICYmIGEuZ3poZWFkLmV4dHJhLmxlbmd0aCAmJiAoRzAoYSwgYS5nemhlYWQuZXh0cmEubGVuZ3RoICYgMjU1KSwgRzAoYSwgYS5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDggJiAyNTUpKSwgYS5nemhlYWQuaGNyYyAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZywgMCkpLCBhLmd6aW5kZXggPSAwLCBhLnN0YXR1cyA9IGtBOwogICAgZWxzZSBpZiAoRzAoYSwgMCksIEcwKGEsIDApLCBHMChhLCAwKSwgRzAoYSwgMCksIEcwKGEsIDApLCBHMChhLCBhLmxldmVsID09PSA5ID8gMiA6IGEuc3RyYXRlZ3kgPj0gUDIgfHwgYS5sZXZlbCA8IDIgPyA0IDogMCksIEcwKGEsIFdvKSwgYS5zdGF0dXMgPSBaYSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBrQSkgewogICAgaWYgKGEuZ3poZWFkLmV4dHJhKSB7CiAgICAgIGxldCB0ID0gYS5wZW5kaW5nLCBpID0gKGEuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDY1NTM1KSAtIGEuZ3ppbmRleDsKICAgICAgZm9yICg7IGEucGVuZGluZyArIGkgPiBhLnBlbmRpbmdfYnVmX3NpemU7ICkgewogICAgICAgIGxldCBmID0gYS5wZW5kaW5nX2J1Zl9zaXplIC0gYS5wZW5kaW5nOwogICAgICAgIGlmIChhLnBlbmRpbmdfYnVmLnNldChhLmd6aGVhZC5leHRyYS5zdWJhcnJheShhLmd6aW5kZXgsIGEuZ3ppbmRleCArIGYpLCBhLnBlbmRpbmcpLCBhLnBlbmRpbmcgPSBhLnBlbmRpbmdfYnVmX3NpemUsIGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgYS5nemluZGV4ICs9IGYsIHZyKHIpLCBhLnBlbmRpbmcgIT09IDApCiAgICAgICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogICAgICAgIHQgPSAwLCBpIC09IGY7CiAgICAgIH0KICAgICAgbGV0IG4gPSBuZXcgVWludDhBcnJheShhLmd6aGVhZC5leHRyYSk7CiAgICAgIGEucGVuZGluZ19idWYuc2V0KG4uc3ViYXJyYXkoYS5nemluZGV4LCBhLmd6aW5kZXggKyBpKSwgYS5wZW5kaW5nKSwgYS5wZW5kaW5nICs9IGksIGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgYS5nemluZGV4ID0gMDsKICAgIH0KICAgIGEuc3RhdHVzID0gZ0E7CiAgfQogIGlmIChhLnN0YXR1cyA9PT0gZ0EpIHsKICAgIGlmIChhLmd6aGVhZC5uYW1lKSB7CiAgICAgIGxldCB0ID0gYS5wZW5kaW5nLCBpOwogICAgICBkbyB7CiAgICAgICAgaWYgKGEucGVuZGluZyA9PT0gYS5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBpZiAoYS5nemhlYWQuaGNyYyAmJiBhLnBlbmRpbmcgPiB0ICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgYS5wZW5kaW5nX2J1ZiwgYS5wZW5kaW5nIC0gdCwgdCkpLCB2cihyKSwgYS5wZW5kaW5nICE9PSAwKQogICAgICAgICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogICAgICAgICAgdCA9IDA7CiAgICAgICAgfQogICAgICAgIGEuZ3ppbmRleCA8IGEuZ3poZWFkLm5hbWUubGVuZ3RoID8gaSA9IGEuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChhLmd6aW5kZXgrKykgJiAyNTUgOiBpID0gMCwgRzAoYSwgaSk7CiAgICAgIH0gd2hpbGUgKGkgIT09IDApOwogICAgICBhLmd6aGVhZC5oY3JjICYmIGEucGVuZGluZyA+IHQgJiYgKHIuYWRsZXIgPSBxMChyLmFkbGVyLCBhLnBlbmRpbmdfYnVmLCBhLnBlbmRpbmcgLSB0LCB0KSksIGEuZ3ppbmRleCA9IDA7CiAgICB9CiAgICBhLnN0YXR1cyA9IG1BOwogIH0KICBpZiAoYS5zdGF0dXMgPT09IG1BKSB7CiAgICBpZiAoYS5nemhlYWQuY29tbWVudCkgewogICAgICBsZXQgdCA9IGEucGVuZGluZywgaTsKICAgICAgZG8gewogICAgICAgIGlmIChhLnBlbmRpbmcgPT09IGEucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgaWYgKGEuZ3poZWFkLmhjcmMgJiYgYS5wZW5kaW5nID4gdCAmJiAoci5hZGxlciA9IHEwKHIuYWRsZXIsIGEucGVuZGluZ19idWYsIGEucGVuZGluZyAtIHQsIHQpKSwgdnIociksIGEucGVuZGluZyAhPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICAgICAgICAgIHQgPSAwOwogICAgICAgIH0KICAgICAgICBhLmd6aW5kZXggPCBhLmd6aGVhZC5jb21tZW50Lmxlbmd0aCA/IGkgPSBhLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoYS5nemluZGV4KyspICYgMjU1IDogaSA9IDAsIEcwKGEsIGkpOwogICAgICB9IHdoaWxlIChpICE9PSAwKTsKICAgICAgYS5nemhlYWQuaGNyYyAmJiBhLnBlbmRpbmcgPiB0ICYmIChyLmFkbGVyID0gcTAoci5hZGxlciwgYS5wZW5kaW5nX2J1ZiwgYS5wZW5kaW5nIC0gdCwgdCkpOwogICAgfQogICAgYS5zdGF0dXMgPSBwQTsKICB9CiAgaWYgKGEuc3RhdHVzID09PSBwQSkgewogICAgaWYgKGEuZ3poZWFkLmhjcmMpIHsKICAgICAgaWYgKGEucGVuZGluZyArIDIgPiBhLnBlbmRpbmdfYnVmX3NpemUgJiYgKHZyKHIpLCBhLnBlbmRpbmcgIT09IDApKQogICAgICAgIHJldHVybiBhLmxhc3RfZmx1c2ggPSAtMSwgYXI7CiAgICAgIEcwKGEsIHIuYWRsZXIgJiAyNTUpLCBHMChhLCByLmFkbGVyID4+IDggJiAyNTUpLCByLmFkbGVyID0gMDsKICAgIH0KICAgIGlmIChhLnN0YXR1cyA9IFphLCB2cihyKSwgYS5wZW5kaW5nICE9PSAwKQogICAgICByZXR1cm4gYS5sYXN0X2ZsdXNoID0gLTEsIGFyOwogIH0KICBpZiAoci5hdmFpbF9pbiAhPT0gMCB8fCBhLmxvb2thaGVhZCAhPT0gMCB8fCBlICE9PSBkYSAmJiBhLnN0YXR1cyAhPT0gYzIpIHsKICAgIGxldCB0ID0gYS5sZXZlbCA9PT0gMCA/IGJuKGEsIGUpIDogYS5zdHJhdGVneSA9PT0gUDIgPyBSbyhhLCBlKSA6IGEuc3RyYXRlZ3kgPT09IGhvID8gWG8oYSwgZSkgOiBzMlthLmxldmVsXS5mdW5jKGEsIGUpOwogICAgaWYgKCh0ID09PSBGYSB8fCB0ID09PSByMikgJiYgKGEuc3RhdHVzID0gYzIpLCB0ID09PSBmciB8fCB0ID09PSBGYSkKICAgICAgcmV0dXJuIHIuYXZhaWxfb3V0ID09PSAwICYmIChhLmxhc3RfZmx1c2ggPSAtMSksIGFyOwogICAgaWYgKHQgPT09ICRhICYmIChlID09PSB1byA/IG9vKGEpIDogZSAhPT0gbnQgJiYgKGhBKGEsIDAsIDAsICExKSwgZSA9PT0gbG8gJiYgKG9hKGEuaGVhZCksIGEubG9va2FoZWFkID09PSAwICYmIChhLnN0cnN0YXJ0ID0gMCwgYS5ibG9ja19zdGFydCA9IDAsIGEuaW5zZXJ0ID0gMCkpKSwgdnIociksIHIuYXZhaWxfb3V0ID09PSAwKSkKICAgICAgcmV0dXJuIGEubGFzdF9mbHVzaCA9IC0xLCBhcjsKICB9CiAgcmV0dXJuIGUgIT09IEJyID8gYXIgOiBhLndyYXAgPD0gMCA/IGZ0IDogKGEud3JhcCA9PT0gMiA/IChHMChhLCByLmFkbGVyICYgMjU1KSwgRzAoYSwgci5hZGxlciA+PiA4ICYgMjU1KSwgRzAoYSwgci5hZGxlciA+PiAxNiAmIDI1NSksIEcwKGEsIHIuYWRsZXIgPj4gMjQgJiAyNTUpLCBHMChhLCByLnRvdGFsX2luICYgMjU1KSwgRzAoYSwgci50b3RhbF9pbiA+PiA4ICYgMjU1KSwgRzAoYSwgci50b3RhbF9pbiA+PiAxNiAmIDI1NSksIEcwKGEsIHIudG90YWxfaW4gPj4gMjQgJiAyNTUpKSA6IChpMihhLCByLmFkbGVyID4+PiAxNiksIGkyKGEsIHIuYWRsZXIgJiA2NTUzNSkpLCB2cihyKSwgYS53cmFwID4gMCAmJiAoYS53cmFwID0gLWEud3JhcCksIGEucGVuZGluZyAhPT0gMCA/IGFyIDogZnQpOwp9LCBNbyA9IChyKSA9PiB7CiAgaWYgKFIyKHIpKQogICAgcmV0dXJuIGpyOwogIGNvbnN0IGUgPSByLnN0YXRlLnN0YXR1czsKICByZXR1cm4gci5zdGF0ZSA9IG51bGwsIGUgPT09IFphID8gQmEociwgY28pIDogYXI7Cn0sIFRvID0gKHIsIGUpID0+IHsKICBsZXQgYSA9IGUubGVuZ3RoOwogIGlmIChSMihyKSkKICAgIHJldHVybiBqcjsKICBjb25zdCBBID0gci5zdGF0ZSwgdCA9IEEud3JhcDsKICBpZiAodCA9PT0gMiB8fCB0ID09PSAxICYmIEEuc3RhdHVzICE9PSBqYSB8fCBBLmxvb2thaGVhZCkKICAgIHJldHVybiBqcjsKICBpZiAodCA9PT0gMSAmJiAoci5hZGxlciA9IEMyKHIuYWRsZXIsIGUsIGEsIDApKSwgQS53cmFwID0gMCwgYSA+PSBBLndfc2l6ZSkgewogICAgdCA9PT0gMCAmJiAob2EoQS5oZWFkKSwgQS5zdHJzdGFydCA9IDAsIEEuYmxvY2tfc3RhcnQgPSAwLCBBLmluc2VydCA9IDApOwogICAgbGV0IHUgPSBuZXcgVWludDhBcnJheShBLndfc2l6ZSk7CiAgICB1LnNldChlLnN1YmFycmF5KGEgLSBBLndfc2l6ZSwgYSksIDApLCBlID0gdSwgYSA9IEEud19zaXplOwogIH0KICBjb25zdCBpID0gci5hdmFpbF9pbiwgbiA9IHIubmV4dF9pbiwgZiA9IHIuaW5wdXQ7CiAgZm9yIChyLmF2YWlsX2luID0gYSwgci5uZXh0X2luID0gMCwgci5pbnB1dCA9IGUsIFFhKEEpOyBBLmxvb2thaGVhZCA+PSB5MDsgKSB7CiAgICBsZXQgdSA9IEEuc3Ryc3RhcnQsIG8gPSBBLmxvb2thaGVhZCAtICh5MCAtIDEpOwogICAgZG8KICAgICAgQS5pbnNfaCA9IGhhKEEsIEEuaW5zX2gsIEEud2luZG93W3UgKyB5MCAtIDFdKSwgQS5wcmV2W3UgJiBBLndfbWFza10gPSBBLmhlYWRbQS5pbnNfaF0sIEEuaGVhZFtBLmluc19oXSA9IHUsIHUrKzsKICAgIHdoaWxlICgtLW8pOwogICAgQS5zdHJzdGFydCA9IHUsIEEubG9va2FoZWFkID0geTAgLSAxLCBRYShBKTsKICB9CiAgcmV0dXJuIEEuc3Ryc3RhcnQgKz0gQS5sb29rYWhlYWQsIEEuYmxvY2tfc3RhcnQgPSBBLnN0cnN0YXJ0LCBBLmluc2VydCA9IEEubG9va2FoZWFkLCBBLmxvb2thaGVhZCA9IDAsIEEubWF0Y2hfbGVuZ3RoID0gQS5wcmV2X2xlbmd0aCA9IHkwIC0gMSwgQS5tYXRjaF9hdmFpbGFibGUgPSAwLCByLm5leHRfaW4gPSBuLCByLmlucHV0ID0gZiwgci5hdmFpbF9pbiA9IGksIEEud3JhcCA9IHQsIGFyOwp9Owp2YXIgUG8gPSB4bywgWW8gPSB2biwgT28gPSBobiwgVW8gPSBkbiwgam8gPSBEbywgUW8gPSBObywgSm8gPSBNbywgSG8gPSBUbywgem8gPSAicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSIsIHYyID0gewogIGRlZmxhdGVJbml0OiBQbywKICBkZWZsYXRlSW5pdDI6IFlvLAogIGRlZmxhdGVSZXNldDogT28sCiAgZGVmbGF0ZVJlc2V0S2VlcDogVW8sCiAgZGVmbGF0ZVNldEhlYWRlcjogam8sCiAgZGVmbGF0ZTogUW8sCiAgZGVmbGF0ZUVuZDogSm8sCiAgZGVmbGF0ZVNldERpY3Rpb25hcnk6IEhvLAogIGRlZmxhdGVJbmZvOiB6bwp9Owpjb25zdCBMbyA9IChyLCBlKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgZSk7CnZhciBLbyA9IGZ1bmN0aW9uKHIpIHsKICBjb25zdCBlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICBmb3IgKDsgZS5sZW5ndGg7ICkgewogICAgY29uc3QgYSA9IGUuc2hpZnQoKTsKICAgIGlmIChhKSB7CiAgICAgIGlmICh0eXBlb2YgYSAhPSAib2JqZWN0IikKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGEgKyAibXVzdCBiZSBub24tb2JqZWN0Iik7CiAgICAgIGZvciAoY29uc3QgQSBpbiBhKQogICAgICAgIExvKGEsIEEpICYmIChyW0FdID0gYVtBXSk7CiAgICB9CiAgfQogIHJldHVybiByOwp9LCBxbyA9IChyKSA9PiB7CiAgbGV0IGUgPSAwOwogIGZvciAobGV0IEEgPSAwLCB0ID0gci5sZW5ndGg7IEEgPCB0OyBBKyspCiAgICBlICs9IHJbQV0ubGVuZ3RoOwogIGNvbnN0IGEgPSBuZXcgVWludDhBcnJheShlKTsKICBmb3IgKGxldCBBID0gMCwgdCA9IDAsIGkgPSByLmxlbmd0aDsgQSA8IGk7IEErKykgewogICAgbGV0IG4gPSByW0FdOwogICAgYS5zZXQobiwgdCksIHQgKz0gbi5sZW5ndGg7CiAgfQogIHJldHVybiBhOwp9LCBDZSA9IHsKICBhc3NpZ246IEtvLAogIGZsYXR0ZW5DaHVua3M6IHFvCn07CmxldCBrbiA9ICEwOwp0cnkgewogIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOwp9IGNhdGNoIHsKICBrbiA9ICExOwp9CmNvbnN0IFcyID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKZm9yIChsZXQgciA9IDA7IHIgPCAyNTY7IHIrKykKICBXMltyXSA9IHIgPj0gMjUyID8gNiA6IHIgPj0gMjQ4ID8gNSA6IHIgPj0gMjQwID8gNCA6IHIgPj0gMjI0ID8gMyA6IHIgPj0gMTkyID8gMiA6IDE7ClcyWzI1NF0gPSBXMlsyNTRdID0gMTsKdmFyICRvID0gKHIpID0+IHsKICBpZiAodHlwZW9mIFRleHRFbmNvZGVyID09ICJmdW5jdGlvbiIgJiYgVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSkKICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocik7CiAgbGV0IGUsIGEsIEEsIHQsIGksIG4gPSByLmxlbmd0aCwgZiA9IDA7CiAgZm9yICh0ID0gMDsgdCA8IG47IHQrKykKICAgIGEgPSByLmNoYXJDb2RlQXQodCksIChhICYgNjQ1MTIpID09PSA1NTI5NiAmJiB0ICsgMSA8IG4gJiYgKEEgPSByLmNoYXJDb2RlQXQodCArIDEpLCAoQSAmIDY0NTEyKSA9PT0gNTYzMjAgJiYgKGEgPSA2NTUzNiArIChhIC0gNTUyOTYgPDwgMTApICsgKEEgLSA1NjMyMCksIHQrKykpLCBmICs9IGEgPCAxMjggPyAxIDogYSA8IDIwNDggPyAyIDogYSA8IDY1NTM2ID8gMyA6IDQ7CiAgZm9yIChlID0gbmV3IFVpbnQ4QXJyYXkoZiksIGkgPSAwLCB0ID0gMDsgaSA8IGY7IHQrKykKICAgIGEgPSByLmNoYXJDb2RlQXQodCksIChhICYgNjQ1MTIpID09PSA1NTI5NiAmJiB0ICsgMSA8IG4gJiYgKEEgPSByLmNoYXJDb2RlQXQodCArIDEpLCAoQSAmIDY0NTEyKSA9PT0gNTYzMjAgJiYgKGEgPSA2NTUzNiArIChhIC0gNTUyOTYgPDwgMTApICsgKEEgLSA1NjMyMCksIHQrKykpLCBhIDwgMTI4ID8gZVtpKytdID0gYSA6IGEgPCAyMDQ4ID8gKGVbaSsrXSA9IDE5MiB8IGEgPj4+IDYsIGVbaSsrXSA9IDEyOCB8IGEgJiA2MykgOiBhIDwgNjU1MzYgPyAoZVtpKytdID0gMjI0IHwgYSA+Pj4gMTIsIGVbaSsrXSA9IDEyOCB8IGEgPj4+IDYgJiA2MywgZVtpKytdID0gMTI4IHwgYSAmIDYzKSA6IChlW2krK10gPSAyNDAgfCBhID4+PiAxOCwgZVtpKytdID0gMTI4IHwgYSA+Pj4gMTIgJiA2MywgZVtpKytdID0gMTI4IHwgYSA+Pj4gNiAmIDYzLCBlW2krK10gPSAxMjggfCBhICYgNjMpOwogIHJldHVybiBlOwp9Owpjb25zdCBydSA9IChyLCBlKSA9PiB7CiAgaWYgKGUgPCA2NTUzNCAmJiByLnN1YmFycmF5ICYmIGtuKQogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgci5sZW5ndGggPT09IGUgPyByIDogci5zdWJhcnJheSgwLCBlKSk7CiAgbGV0IGEgPSAiIjsKICBmb3IgKGxldCBBID0gMDsgQSA8IGU7IEErKykKICAgIGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyW0FdKTsKICByZXR1cm4gYTsKfTsKdmFyIGF1ID0gKHIsIGUpID0+IHsKICBjb25zdCBhID0gZSB8fCByLmxlbmd0aDsKICBpZiAodHlwZW9mIFRleHREZWNvZGVyID09ICJmdW5jdGlvbiIgJiYgVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSkKICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoci5zdWJhcnJheSgwLCBlKSk7CiAgbGV0IEEsIHQ7CiAgY29uc3QgaSA9IG5ldyBBcnJheShhICogMik7CiAgZm9yICh0ID0gMCwgQSA9IDA7IEEgPCBhOyApIHsKICAgIGxldCBuID0gcltBKytdOwogICAgaWYgKG4gPCAxMjgpIHsKICAgICAgaVt0KytdID0gbjsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgZiA9IFcyW25dOwogICAgaWYgKGYgPiA0KSB7CiAgICAgIGlbdCsrXSA9IDY1NTMzLCBBICs9IGYgLSAxOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGZvciAobiAmPSBmID09PSAyID8gMzEgOiBmID09PSAzID8gMTUgOiA3OyBmID4gMSAmJiBBIDwgYTsgKQogICAgICBuID0gbiA8PCA2IHwgcltBKytdICYgNjMsIGYtLTsKICAgIGlmIChmID4gMSkgewogICAgICBpW3QrK10gPSA2NTUzMzsKICAgICAgY29udGludWU7CiAgICB9CiAgICBuIDwgNjU1MzYgPyBpW3QrK10gPSBuIDogKG4gLT0gNjU1MzYsIGlbdCsrXSA9IDU1Mjk2IHwgbiA+PiAxMCAmIDEwMjMsIGlbdCsrXSA9IDU2MzIwIHwgbiAmIDEwMjMpOwogIH0KICByZXR1cm4gcnUoaSwgdCk7Cn0sIGV1ID0gKHIsIGUpID0+IHsKICBlID0gZSB8fCByLmxlbmd0aCwgZSA+IHIubGVuZ3RoICYmIChlID0gci5sZW5ndGgpOwogIGxldCBhID0gZSAtIDE7CiAgZm9yICg7IGEgPj0gMCAmJiAoclthXSAmIDE5MikgPT09IDEyODsgKQogICAgYS0tOwogIHJldHVybiBhIDwgMCB8fCBhID09PSAwID8gZSA6IGEgKyBXMltyW2FdXSA+IGUgPyBhIDogZTsKfSwgXzIgPSB7CiAgc3RyaW5nMmJ1ZjogJG8sCiAgYnVmMnN0cmluZzogYXUsCiAgdXRmOGJvcmRlcjogZXUKfTsKZnVuY3Rpb24gQXUoKSB7CiAgdGhpcy5pbnB1dCA9IG51bGwsIHRoaXMubmV4dF9pbiA9IDAsIHRoaXMuYXZhaWxfaW4gPSAwLCB0aGlzLnRvdGFsX2luID0gMCwgdGhpcy5vdXRwdXQgPSBudWxsLCB0aGlzLm5leHRfb3V0ID0gMCwgdGhpcy5hdmFpbF9vdXQgPSAwLCB0aGlzLnRvdGFsX291dCA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuc3RhdGUgPSBudWxsLCB0aGlzLmRhdGFfdHlwZSA9IDIsIHRoaXMuYWRsZXIgPSAwOwp9CnZhciBnbiA9IEF1Owpjb25zdCBtbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIHsKICBaX05PX0ZMVVNIOiB0dSwKICBaX1NZTkNfRkxVU0g6IGl1LAogIFpfRlVMTF9GTFVTSDogbnUsCiAgWl9GSU5JU0g6IGZ1LAogIFpfT0s6IGtlLAogIFpfU1RSRUFNX0VORDogb3UsCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiB1dSwKICBaX0RFRkFVTFRfU1RSQVRFR1k6IGx1LAogIFpfREVGTEFURUQ6IGN1Cn0gPSBJZTsKZnVuY3Rpb24gV2UocikgewogIHRoaXMub3B0aW9ucyA9IENlLmFzc2lnbih7CiAgICBsZXZlbDogdXUsCiAgICBtZXRob2Q6IGN1LAogICAgY2h1bmtTaXplOiAxNjM4NCwKICAgIHdpbmRvd0JpdHM6IDE1LAogICAgbWVtTGV2ZWw6IDgsCiAgICBzdHJhdGVneTogbHUKICB9LCByIHx8IHt9KTsKICBsZXQgZSA9IHRoaXMub3B0aW9uczsKICBlLnJhdyAmJiBlLndpbmRvd0JpdHMgPiAwID8gZS53aW5kb3dCaXRzID0gLWUud2luZG93Qml0cyA6IGUuZ3ppcCAmJiBlLndpbmRvd0JpdHMgPiAwICYmIGUud2luZG93Qml0cyA8IDE2ICYmIChlLndpbmRvd0JpdHMgKz0gMTYpLCB0aGlzLmVyciA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuZW5kZWQgPSAhMSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5zdHJtID0gbmV3IGduKCksIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogIGxldCBhID0gdjIuZGVmbGF0ZUluaXQyKAogICAgdGhpcy5zdHJtLAogICAgZS5sZXZlbCwKICAgIGUubWV0aG9kLAogICAgZS53aW5kb3dCaXRzLAogICAgZS5tZW1MZXZlbCwKICAgIGUuc3RyYXRlZ3kKICApOwogIGlmIChhICE9PSBrZSkKICAgIHRocm93IG5ldyBFcnJvcihJYVthXSk7CiAgaWYgKGUuaGVhZGVyICYmIHYyLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBlLmhlYWRlciksIGUuZGljdGlvbmFyeSkgewogICAgbGV0IEE7CiAgICBpZiAodHlwZW9mIGUuZGljdGlvbmFyeSA9PSAic3RyaW5nIiA/IEEgPSBfMi5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSkgOiBtbi5jYWxsKGUuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIgPyBBID0gbmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSA6IEEgPSBlLmRpY3Rpb25hcnksIGEgPSB2Mi5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIEEpLCBhICE9PSBrZSkKICAgICAgdGhyb3cgbmV3IEVycm9yKElhW2FdKTsKICAgIHRoaXMuX2RpY3Rfc2V0ID0gITA7CiAgfQp9CldlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24ociwgZSkgewogIGNvbnN0IGEgPSB0aGlzLnN0cm0sIEEgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogIGxldCB0LCBpOwogIGlmICh0aGlzLmVuZGVkKQogICAgcmV0dXJuICExOwogIGZvciAoZSA9PT0gfn5lID8gaSA9IGUgOiBpID0gZSA9PT0gITAgPyBmdSA6IHR1LCB0eXBlb2YgciA9PSAic3RyaW5nIiA/IGEuaW5wdXQgPSBfMi5zdHJpbmcyYnVmKHIpIDogbW4uY2FsbChyKSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIiA/IGEuaW5wdXQgPSBuZXcgVWludDhBcnJheShyKSA6IGEuaW5wdXQgPSByLCBhLm5leHRfaW4gPSAwLCBhLmF2YWlsX2luID0gYS5pbnB1dC5sZW5ndGg7IDsgKSB7CiAgICBpZiAoYS5hdmFpbF9vdXQgPT09IDAgJiYgKGEub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoQSksIGEubmV4dF9vdXQgPSAwLCBhLmF2YWlsX291dCA9IEEpLCAoaSA9PT0gaXUgfHwgaSA9PT0gbnUpICYmIGEuYXZhaWxfb3V0IDw9IDYpIHsKICAgICAgdGhpcy5vbkRhdGEoYS5vdXRwdXQuc3ViYXJyYXkoMCwgYS5uZXh0X291dCkpLCBhLmF2YWlsX291dCA9IDA7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHQgPSB2Mi5kZWZsYXRlKGEsIGkpLCB0ID09PSBvdSkKICAgICAgcmV0dXJuIGEubmV4dF9vdXQgPiAwICYmIHRoaXMub25EYXRhKGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKSwgdCA9IHYyLmRlZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZCh0KSwgdGhpcy5lbmRlZCA9ICEwLCB0ID09PSBrZTsKICAgIGlmIChhLmF2YWlsX291dCA9PT0gMCkgewogICAgICB0aGlzLm9uRGF0YShhLm91dHB1dCk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGkgPiAwICYmIGEubmV4dF9vdXQgPiAwKSB7CiAgICAgIHRoaXMub25EYXRhKGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKSwgYS5hdmFpbF9vdXQgPSAwOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChhLmF2YWlsX2luID09PSAwKSBicmVhazsKICB9CiAgcmV0dXJuICEwOwp9OwpXZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24ocikgewogIHRoaXMuY2h1bmtzLnB1c2gocik7Cn07CldlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHIpIHsKICByID09PSBrZSAmJiAodGhpcy5yZXN1bHQgPSBDZS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksIHRoaXMuY2h1bmtzID0gW10sIHRoaXMuZXJyID0gciwgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnOwp9OwpmdW5jdGlvbiBzdShyLCBlKSB7CiAgY29uc3QgYSA9IG5ldyBXZShlKTsKICBpZiAoYS5wdXNoKHIsICEwKSwgYS5lcnIpCiAgICB0aHJvdyBhLm1zZyB8fCBJYVthLmVycl07CiAgcmV0dXJuIGEucmVzdWx0Owp9CnZhciBidSA9IHN1LCBkdSA9IHsKICBkZWZsYXRlOiBidQp9Owpjb25zdCBZMiA9IDE2MjA5LCBodSA9IDE2MTkxOwp2YXIgdnUgPSBmdW5jdGlvbihlLCBhKSB7CiAgbGV0IEEsIHQsIGksIG4sIGYsIHUsIG8sIGwsIHMsIGMsIGQsIHYsIGssIEUsIGcsIHcsIEIsIG0sIHAsIFcsIEMsIF8sIE4sIEQ7CiAgY29uc3QgWSA9IGUuc3RhdGU7CiAgQSA9IGUubmV4dF9pbiwgTiA9IGUuaW5wdXQsIHQgPSBBICsgKGUuYXZhaWxfaW4gLSA1KSwgaSA9IGUubmV4dF9vdXQsIEQgPSBlLm91dHB1dCwgbiA9IGkgLSAoYSAtIGUuYXZhaWxfb3V0KSwgZiA9IGkgKyAoZS5hdmFpbF9vdXQgLSAyNTcpLCB1ID0gWS5kbWF4LCBvID0gWS53c2l6ZSwgbCA9IFkud2hhdmUsIHMgPSBZLnduZXh0LCBjID0gWS53aW5kb3csIGQgPSBZLmhvbGQsIHYgPSBZLmJpdHMsIGsgPSBZLmxlbmNvZGUsIEUgPSBZLmRpc3Rjb2RlLCBnID0gKDEgPDwgWS5sZW5iaXRzKSAtIDEsIHcgPSAoMSA8PCBZLmRpc3RiaXRzKSAtIDE7CiAgcjoKICAgIGRvIHsKICAgICAgdiA8IDE1ICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgsIGQgKz0gTltBKytdIDw8IHYsIHYgKz0gOCksIEIgPSBrW2QgJiBnXTsKICAgICAgYToKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmIChtID0gQiA+Pj4gMjQsIGQgPj4+PSBtLCB2IC09IG0sIG0gPSBCID4+PiAxNiAmIDI1NSwgbSA9PT0gMCkKICAgICAgICAgICAgRFtpKytdID0gQiAmIDY1NTM1OwogICAgICAgICAgZWxzZSBpZiAobSAmIDE2KSB7CiAgICAgICAgICAgIHAgPSBCICYgNjU1MzUsIG0gJj0gMTUsIG0gJiYgKHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgpLCBwICs9IGQgJiAoMSA8PCBtKSAtIDEsIGQgPj4+PSBtLCB2IC09IG0pLCB2IDwgMTUgJiYgKGQgKz0gTltBKytdIDw8IHYsIHYgKz0gOCwgZCArPSBOW0ErK10gPDwgdiwgdiArPSA4KSwgQiA9IEVbZCAmIHddOwogICAgICAgICAgICBlOgogICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgaWYgKG0gPSBCID4+PiAyNCwgZCA+Pj49IG0sIHYgLT0gbSwgbSA9IEIgPj4+IDE2ICYgMjU1LCBtICYgMTYpIHsKICAgICAgICAgICAgICAgICAgaWYgKFcgPSBCICYgNjU1MzUsIG0gJj0gMTUsIHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgsIHYgPCBtICYmIChkICs9IE5bQSsrXSA8PCB2LCB2ICs9IDgpKSwgVyArPSBkICYgKDEgPDwgbSkgLSAxLCBXID4gdSkgewogICAgICAgICAgICAgICAgICAgIGUubXNnID0gImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZCA+Pj49IG0sIHYgLT0gbSwgbSA9IGkgLSBuLCBXID4gbSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtID0gVyAtIG0sIG0gPiBsICYmIFkuc2FuZSkgewogICAgICAgICAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCBZLm1vZGUgPSBZMjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChDID0gMCwgXyA9IGMsIHMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChDICs9IG8gLSBtLCBtIDwgcCkgewogICAgICAgICAgICAgICAgICAgICAgICBwIC09IG07CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgRFtpKytdID0gY1tDKytdOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1tKTsKICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMgPCBtKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoQyArPSBvICsgcyAtIG0sIG0gLT0gcywgbSA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcCAtPSBtOwogICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgIERbaSsrXSA9IGNbQysrXTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDID0gMCwgcyA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gcywgcCAtPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBjW0MrK107CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQyArPSBzIC0gbSwgbSA8IHApIHsKICAgICAgICAgICAgICAgICAgICAgIHAgLT0gbTsKICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICAgIERbaSsrXSA9IGNbQysrXTsKICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgtLW0pOwogICAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXLCBfID0gRDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHAgPiAyOyApCiAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBfW0MrK10sIERbaSsrXSA9IF9bQysrXSwgRFtpKytdID0gX1tDKytdLCBwIC09IDM7CiAgICAgICAgICAgICAgICAgICAgcCAmJiAoRFtpKytdID0gX1tDKytdLCBwID4gMSAmJiAoRFtpKytdID0gX1tDKytdKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgQyA9IGkgLSBXOwogICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgICAgICBEW2krK10gPSBEW0MrK10sIERbaSsrXSA9IERbQysrXSwgRFtpKytdID0gRFtDKytdLCBwIC09IDM7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPiAyKTsKICAgICAgICAgICAgICAgICAgICBwICYmIChEW2krK10gPSBEW0MrK10sIHAgPiAxICYmIChEW2krK10gPSBEW0MrK10pKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtICYgNjQpIHsKICAgICAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBCID0gRVsoQiAmIDY1NTM1KSArIChkICYgKDEgPDwgbSkgLSAxKV07CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKG0gJiA2NCkKICAgICAgICAgICAgaWYgKG0gJiAzMikgewogICAgICAgICAgICAgIFkubW9kZSA9IGh1OwogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZS5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIiwgWS5tb2RlID0gWTI7CiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEIgPSBrWyhCICYgNjU1MzUpICsgKGQgJiAoMSA8PCBtKSAtIDEpXTsKICAgICAgICAgICAgY29udGludWUgYTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0gd2hpbGUgKEEgPCB0ICYmIGkgPCBmKTsKICBwID0gdiA+PiAzLCBBIC09IHAsIHYgLT0gcCA8PCAzLCBkICY9ICgxIDw8IHYpIC0gMSwgZS5uZXh0X2luID0gQSwgZS5uZXh0X291dCA9IGksIGUuYXZhaWxfaW4gPSBBIDwgdCA/IDUgKyAodCAtIEEpIDogNSAtIChBIC0gdCksIGUuYXZhaWxfb3V0ID0gaSA8IGYgPyAyNTcgKyAoZiAtIGkpIDogMjU3IC0gKGkgLSBmKSwgWS5ob2xkID0gZCwgWS5iaXRzID0gdjsKfTsKY29uc3QgWGEgPSAxNSwgdXQgPSA4NTIsIGx0ID0gNTkyLCBjdCA9IDAsIFVlID0gMSwgc3QgPSAyLCBrdSA9IG5ldyBVaW50MTZBcnJheShbCiAgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGJhc2UgKi8KICAzLAogIDQsCiAgNSwKICA2LAogIDcsCiAgOCwKICA5LAogIDEwLAogIDExLAogIDEzLAogIDE1LAogIDE3LAogIDE5LAogIDIzLAogIDI3LAogIDMxLAogIDM1LAogIDQzLAogIDUxLAogIDU5LAogIDY3LAogIDgzLAogIDk5LAogIDExNSwKICAxMzEsCiAgMTYzLAogIDE5NSwKICAyMjcsCiAgMjU4LAogIDAsCiAgMApdKSwgZ3UgPSBuZXcgVWludDhBcnJheShbCiAgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTYsCiAgMTcsCiAgMTcsCiAgMTcsCiAgMTcsCiAgMTgsCiAgMTgsCiAgMTgsCiAgMTgsCiAgMTksCiAgMTksCiAgMTksCiAgMTksCiAgMjAsCiAgMjAsCiAgMjAsCiAgMjAsCiAgMjEsCiAgMjEsCiAgMjEsCiAgMjEsCiAgMTYsCiAgNzIsCiAgNzgKXSksIG11ID0gbmV3IFVpbnQxNkFycmF5KFsKICAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgMSwKICAyLAogIDMsCiAgNCwKICA1LAogIDcsCiAgOSwKICAxMywKICAxNywKICAyNSwKICAzMywKICA0OSwKICA2NSwKICA5NywKICAxMjksCiAgMTkzLAogIDI1NywKICAzODUsCiAgNTEzLAogIDc2OSwKICAxMDI1LAogIDE1MzcsCiAgMjA0OSwKICAzMDczLAogIDQwOTcsCiAgNjE0NSwKICA4MTkzLAogIDEyMjg5LAogIDE2Mzg1LAogIDI0NTc3LAogIDAsCiAgMApdKSwgcHUgPSBuZXcgVWludDhBcnJheShbCiAgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgZXh0cmEgKi8KICAxNiwKICAxNiwKICAxNiwKICAxNiwKICAxNywKICAxNywKICAxOCwKICAxOCwKICAxOSwKICAxOSwKICAyMCwKICAyMCwKICAyMSwKICAyMSwKICAyMiwKICAyMiwKICAyMywKICAyMywKICAyNCwKICAyNCwKICAyNSwKICAyNSwKICAyNiwKICAyNiwKICAyNywKICAyNywKICAyOCwKICAyOCwKICAyOSwKICAyOSwKICA2NCwKICA2NApdKSwgd3UgPSAociwgZSwgYSwgQSwgdCwgaSwgbiwgZikgPT4gewogIGNvbnN0IHUgPSBmLmJpdHM7CiAgbGV0IG8gPSAwLCBsID0gMCwgcyA9IDAsIGMgPSAwLCBkID0gMCwgdiA9IDAsIGsgPSAwLCBFID0gMCwgZyA9IDAsIHcgPSAwLCBCLCBtLCBwLCBXLCBDLCBfID0gbnVsbCwgTjsKICBjb25zdCBEID0gbmV3IFVpbnQxNkFycmF5KFhhICsgMSksIFkgPSBuZXcgVWludDE2QXJyYXkoWGEgKyAxKTsKICBsZXQgZjAgPSBudWxsLCBHLCBKLCBLOwogIGZvciAobyA9IDA7IG8gPD0gWGE7IG8rKykKICAgIERbb10gPSAwOwogIGZvciAobCA9IDA7IGwgPCBBOyBsKyspCiAgICBEW2VbYSArIGxdXSsrOwogIGZvciAoZCA9IHUsIGMgPSBYYTsgYyA+PSAxICYmIERbY10gPT09IDA7IGMtLSkKICAgIDsKICBpZiAoZCA+IGMgJiYgKGQgPSBjKSwgYyA9PT0gMCkKICAgIHJldHVybiB0W2krK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwLCB0W2krK10gPSAxIDw8IDI0IHwgNjQgPDwgMTYgfCAwLCBmLmJpdHMgPSAxLCAwOwogIGZvciAocyA9IDE7IHMgPCBjICYmIERbc10gPT09IDA7IHMrKykKICAgIDsKICBmb3IgKGQgPCBzICYmIChkID0gcyksIEUgPSAxLCBvID0gMTsgbyA8PSBYYTsgbysrKQogICAgaWYgKEUgPDw9IDEsIEUgLT0gRFtvXSwgRSA8IDApCiAgICAgIHJldHVybiAtMTsKICBpZiAoRSA+IDAgJiYgKHIgPT09IGN0IHx8IGMgIT09IDEpKQogICAgcmV0dXJuIC0xOwogIGZvciAoWVsxXSA9IDAsIG8gPSAxOyBvIDwgWGE7IG8rKykKICAgIFlbbyArIDFdID0gWVtvXSArIERbb107CiAgZm9yIChsID0gMDsgbCA8IEE7IGwrKykKICAgIGVbYSArIGxdICE9PSAwICYmIChuW1lbZVthICsgbF1dKytdID0gbCk7CiAgaWYgKHIgPT09IGN0ID8gKF8gPSBmMCA9IG4sIE4gPSAyMCkgOiByID09PSBVZSA/IChfID0ga3UsIGYwID0gZ3UsIE4gPSAyNTcpIDogKF8gPSBtdSwgZjAgPSBwdSwgTiA9IDApLCB3ID0gMCwgbCA9IDAsIG8gPSBzLCBDID0gaSwgdiA9IGQsIGsgPSAwLCBwID0gLTEsIGcgPSAxIDw8IGQsIFcgPSBnIC0gMSwgciA9PT0gVWUgJiYgZyA+IHV0IHx8IHIgPT09IHN0ICYmIGcgPiBsdCkKICAgIHJldHVybiAxOwogIGZvciAoOyA7ICkgewogICAgRyA9IG8gLSBrLCBuW2xdICsgMSA8IE4gPyAoSiA9IDAsIEsgPSBuW2xdKSA6IG5bbF0gPj0gTiA/IChKID0gZjBbbltsXSAtIE5dLCBLID0gX1tuW2xdIC0gTl0pIDogKEogPSA5NiwgSyA9IDApLCBCID0gMSA8PCBvIC0gaywgbSA9IDEgPDwgdiwgcyA9IG07CiAgICBkbwogICAgICBtIC09IEIsIHRbQyArICh3ID4+IGspICsgbV0gPSBHIDw8IDI0IHwgSiA8PCAxNiB8IEsgfCAwOwogICAgd2hpbGUgKG0gIT09IDApOwogICAgZm9yIChCID0gMSA8PCBvIC0gMTsgdyAmIEI7ICkKICAgICAgQiA+Pj0gMTsKICAgIGlmIChCICE9PSAwID8gKHcgJj0gQiAtIDEsIHcgKz0gQikgOiB3ID0gMCwgbCsrLCAtLURbb10gPT09IDApIHsKICAgICAgaWYgKG8gPT09IGMpCiAgICAgICAgYnJlYWs7CiAgICAgIG8gPSBlW2EgKyBuW2xdXTsKICAgIH0KICAgIGlmIChvID4gZCAmJiAodyAmIFcpICE9PSBwKSB7CiAgICAgIGZvciAoayA9PT0gMCAmJiAoayA9IGQpLCBDICs9IHMsIHYgPSBvIC0gaywgRSA9IDEgPDwgdjsgdiArIGsgPCBjICYmIChFIC09IERbdiArIGtdLCAhKEUgPD0gMCkpOyApCiAgICAgICAgdisrLCBFIDw8PSAxOwogICAgICBpZiAoZyArPSAxIDw8IHYsIHIgPT09IFVlICYmIGcgPiB1dCB8fCByID09PSBzdCAmJiBnID4gbHQpCiAgICAgICAgcmV0dXJuIDE7CiAgICAgIHAgPSB3ICYgVywgdFtwXSA9IGQgPDwgMjQgfCB2IDw8IDE2IHwgQyAtIGkgfCAwOwogICAgfQogIH0KICByZXR1cm4gdyAhPT0gMCAmJiAodFtDICsgd10gPSBvIC0gayA8PCAyNCB8IDY0IDw8IDE2IHwgMCksIGYuYml0cyA9IGQsIDA7Cn07CnZhciBrMiA9IHd1Owpjb25zdCB5dSA9IDAsIHBuID0gMSwgd24gPSAyLCB7CiAgWl9GSU5JU0g6IGJ0LAogIFpfQkxPQ0s6IEV1LAogIFpfVFJFRVM6IE8yLAogIFpfT0s6IENhLAogIFpfU1RSRUFNX0VORDogWnUsCiAgWl9ORUVEX0RJQ1Q6IEJ1LAogIFpfU1RSRUFNX0VSUk9SOiBDciwKICBaX0RBVEFfRVJST1I6IHluLAogIFpfTUVNX0VSUk9SOiBFbiwKICBaX0JVRl9FUlJPUjogSXUsCiAgWl9ERUZMQVRFRDogZHQKfSA9IEllLCBfZSA9IDE2MTgwLCBodCA9IDE2MTgxLCB2dCA9IDE2MTgyLCBrdCA9IDE2MTgzLCBndCA9IDE2MTg0LCBtdCA9IDE2MTg1LCBwdCA9IDE2MTg2LCB3dCA9IDE2MTg3LCB5dCA9IDE2MTg4LCBFdCA9IDE2MTg5LCBnZSA9IDE2MTkwLCB6ciA9IDE2MTkxLCBqZSA9IDE2MTkyLCBadCA9IDE2MTkzLCBRZSA9IDE2MTk0LCBCdCA9IDE2MTk1LCBJdCA9IDE2MTk2LCBGdCA9IDE2MTk3LCBDdCA9IDE2MTk4LCBVMiA9IDE2MTk5LCBqMiA9IDE2MjAwLCBXdCA9IDE2MjAxLCBfdCA9IDE2MjAyLCBHdCA9IDE2MjAzLCBYdCA9IDE2MjA0LCBSdCA9IDE2MjA1LCBKZSA9IDE2MjA2LCBWdCA9IDE2MjA3LCBTdCA9IDE2MjA4LCBNMCA9IDE2MjA5LCBabiA9IDE2MjEwLCBCbiA9IDE2MjExLCBGdSA9IDg1MiwgQ3UgPSA1OTIsIFd1ID0gMTUsIF91ID0gV3UsIER0ID0gKHIpID0+IChyID4+PiAyNCAmIDI1NSkgKyAociA+Pj4gOCAmIDY1MjgwKSArICgociAmIDY1MjgwKSA8PCA4KSArICgociAmIDI1NSkgPDwgMjQpOwpmdW5jdGlvbiBHdSgpIHsKICB0aGlzLnN0cm0gPSBudWxsLCB0aGlzLm1vZGUgPSAwLCB0aGlzLmxhc3QgPSAhMSwgdGhpcy53cmFwID0gMCwgdGhpcy5oYXZlZGljdCA9ICExLCB0aGlzLmZsYWdzID0gMCwgdGhpcy5kbWF4ID0gMCwgdGhpcy5jaGVjayA9IDAsIHRoaXMudG90YWwgPSAwLCB0aGlzLmhlYWQgPSBudWxsLCB0aGlzLndiaXRzID0gMCwgdGhpcy53c2l6ZSA9IDAsIHRoaXMud2hhdmUgPSAwLCB0aGlzLnduZXh0ID0gMCwgdGhpcy53aW5kb3cgPSBudWxsLCB0aGlzLmhvbGQgPSAwLCB0aGlzLmJpdHMgPSAwLCB0aGlzLmxlbmd0aCA9IDAsIHRoaXMub2Zmc2V0ID0gMCwgdGhpcy5leHRyYSA9IDAsIHRoaXMubGVuY29kZSA9IG51bGwsIHRoaXMuZGlzdGNvZGUgPSBudWxsLCB0aGlzLmxlbmJpdHMgPSAwLCB0aGlzLmRpc3RiaXRzID0gMCwgdGhpcy5uY29kZSA9IDAsIHRoaXMubmxlbiA9IDAsIHRoaXMubmRpc3QgPSAwLCB0aGlzLmhhdmUgPSAwLCB0aGlzLm5leHQgPSBudWxsLCB0aGlzLmxlbnMgPSBuZXcgVWludDE2QXJyYXkoMzIwKSwgdGhpcy53b3JrID0gbmV3IFVpbnQxNkFycmF5KDI4OCksIHRoaXMubGVuZHluID0gbnVsbCwgdGhpcy5kaXN0ZHluID0gbnVsbCwgdGhpcy5zYW5lID0gMCwgdGhpcy5iYWNrID0gMCwgdGhpcy53YXMgPSAwOwp9CmNvbnN0IF9hID0gKHIpID0+IHsKICBpZiAoIXIpCiAgICByZXR1cm4gMTsKICBjb25zdCBlID0gci5zdGF0ZTsKICByZXR1cm4gIWUgfHwgZS5zdHJtICE9PSByIHx8IGUubW9kZSA8IF9lIHx8IGUubW9kZSA+IEJuID8gMSA6IDA7Cn0sIEluID0gKHIpID0+IHsKICBpZiAoX2EocikpCiAgICByZXR1cm4gQ3I7CiAgY29uc3QgZSA9IHIuc3RhdGU7CiAgcmV0dXJuIHIudG90YWxfaW4gPSByLnRvdGFsX291dCA9IGUudG90YWwgPSAwLCByLm1zZyA9ICIiLCBlLndyYXAgJiYgKHIuYWRsZXIgPSBlLndyYXAgJiAxKSwgZS5tb2RlID0gX2UsIGUubGFzdCA9IDAsIGUuaGF2ZWRpY3QgPSAwLCBlLmZsYWdzID0gLTEsIGUuZG1heCA9IDMyNzY4LCBlLmhlYWQgPSBudWxsLCBlLmhvbGQgPSAwLCBlLmJpdHMgPSAwLCBlLmxlbmNvZGUgPSBlLmxlbmR5biA9IG5ldyBJbnQzMkFycmF5KEZ1KSwgZS5kaXN0Y29kZSA9IGUuZGlzdGR5biA9IG5ldyBJbnQzMkFycmF5KEN1KSwgZS5zYW5lID0gMSwgZS5iYWNrID0gLTEsIENhOwp9LCBGbiA9IChyKSA9PiB7CiAgaWYgKF9hKHIpKQogICAgcmV0dXJuIENyOwogIGNvbnN0IGUgPSByLnN0YXRlOwogIHJldHVybiBlLndzaXplID0gMCwgZS53aGF2ZSA9IDAsIGUud25leHQgPSAwLCBJbihyKTsKfSwgQ24gPSAociwgZSkgPT4gewogIGxldCBhOwogIGlmIChfYShyKSkKICAgIHJldHVybiBDcjsKICBjb25zdCBBID0gci5zdGF0ZTsKICByZXR1cm4gZSA8IDAgPyAoYSA9IDAsIGUgPSAtZSkgOiAoYSA9IChlID4+IDQpICsgNSwgZSA8IDQ4ICYmIChlICY9IDE1KSksIGUgJiYgKGUgPCA4IHx8IGUgPiAxNSkgPyBDciA6IChBLndpbmRvdyAhPT0gbnVsbCAmJiBBLndiaXRzICE9PSBlICYmIChBLndpbmRvdyA9IG51bGwpLCBBLndyYXAgPSBhLCBBLndiaXRzID0gZSwgRm4ocikpOwp9LCBXbiA9IChyLCBlKSA9PiB7CiAgaWYgKCFyKQogICAgcmV0dXJuIENyOwogIGNvbnN0IGEgPSBuZXcgR3UoKTsKICByLnN0YXRlID0gYSwgYS5zdHJtID0gciwgYS53aW5kb3cgPSBudWxsLCBhLm1vZGUgPSBfZTsKICBjb25zdCBBID0gQ24ociwgZSk7CiAgcmV0dXJuIEEgIT09IENhICYmIChyLnN0YXRlID0gbnVsbCksIEE7Cn0sIFh1ID0gKHIpID0+IFduKHIsIF91KTsKbGV0IHh0ID0gITAsIEhlLCB6ZTsKY29uc3QgUnUgPSAocikgPT4gewogIGlmICh4dCkgewogICAgSGUgPSBuZXcgSW50MzJBcnJheSg1MTIpLCB6ZSA9IG5ldyBJbnQzMkFycmF5KDMyKTsKICAgIGxldCBlID0gMDsKICAgIGZvciAoOyBlIDwgMTQ0OyApCiAgICAgIHIubGVuc1tlKytdID0gODsKICAgIGZvciAoOyBlIDwgMjU2OyApCiAgICAgIHIubGVuc1tlKytdID0gOTsKICAgIGZvciAoOyBlIDwgMjgwOyApCiAgICAgIHIubGVuc1tlKytdID0gNzsKICAgIGZvciAoOyBlIDwgMjg4OyApCiAgICAgIHIubGVuc1tlKytdID0gODsKICAgIGZvciAoazIocG4sIHIubGVucywgMCwgMjg4LCBIZSwgMCwgci53b3JrLCB7IGJpdHM6IDkgfSksIGUgPSAwOyBlIDwgMzI7ICkKICAgICAgci5sZW5zW2UrK10gPSA1OwogICAgazIod24sIHIubGVucywgMCwgMzIsIHplLCAwLCByLndvcmssIHsgYml0czogNSB9KSwgeHQgPSAhMTsKICB9CiAgci5sZW5jb2RlID0gSGUsIHIubGVuYml0cyA9IDksIHIuZGlzdGNvZGUgPSB6ZSwgci5kaXN0Yml0cyA9IDU7Cn0sIF9uID0gKHIsIGUsIGEsIEEpID0+IHsKICBsZXQgdDsKICBjb25zdCBpID0gci5zdGF0ZTsKICByZXR1cm4gaS53aW5kb3cgPT09IG51bGwgJiYgKGkud3NpemUgPSAxIDw8IGkud2JpdHMsIGkud25leHQgPSAwLCBpLndoYXZlID0gMCwgaS53aW5kb3cgPSBuZXcgVWludDhBcnJheShpLndzaXplKSksIEEgPj0gaS53c2l6ZSA/IChpLndpbmRvdy5zZXQoZS5zdWJhcnJheShhIC0gaS53c2l6ZSwgYSksIDApLCBpLnduZXh0ID0gMCwgaS53aGF2ZSA9IGkud3NpemUpIDogKHQgPSBpLndzaXplIC0gaS53bmV4dCwgdCA+IEEgJiYgKHQgPSBBKSwgaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkoYSAtIEEsIGEgLSBBICsgdCksIGkud25leHQpLCBBIC09IHQsIEEgPyAoaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkoYSAtIEEsIGEpLCAwKSwgaS53bmV4dCA9IEEsIGkud2hhdmUgPSBpLndzaXplKSA6IChpLnduZXh0ICs9IHQsIGkud25leHQgPT09IGkud3NpemUgJiYgKGkud25leHQgPSAwKSwgaS53aGF2ZSA8IGkud3NpemUgJiYgKGkud2hhdmUgKz0gdCkpKSwgMDsKfSwgVnUgPSAociwgZSkgPT4gewogIGxldCBhLCBBLCB0LCBpLCBuLCBmLCB1LCBvLCBsLCBzLCBjLCBkLCB2LCBrLCBFID0gMCwgZywgdywgQiwgbSwgcCwgVywgQywgXzsKICBjb25zdCBOID0gbmV3IFVpbnQ4QXJyYXkoNCk7CiAgbGV0IEQsIFk7CiAgY29uc3QgZjAgPSAoCiAgICAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgIG5ldyBVaW50OEFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSkKICApOwogIGlmIChfYShyKSB8fCAhci5vdXRwdXQgfHwgIXIuaW5wdXQgJiYgci5hdmFpbF9pbiAhPT0gMCkKICAgIHJldHVybiBDcjsKICBhID0gci5zdGF0ZSwgYS5tb2RlID09PSB6ciAmJiAoYS5tb2RlID0gamUpLCBuID0gci5uZXh0X291dCwgdCA9IHIub3V0cHV0LCB1ID0gci5hdmFpbF9vdXQsIGkgPSByLm5leHRfaW4sIEEgPSByLmlucHV0LCBmID0gci5hdmFpbF9pbiwgbyA9IGEuaG9sZCwgbCA9IGEuYml0cywgcyA9IGYsIGMgPSB1LCBfID0gQ2E7CiAgcjoKICAgIGZvciAoOyA7ICkKICAgICAgc3dpdGNoIChhLm1vZGUpIHsKICAgICAgICBjYXNlIF9lOgogICAgICAgICAgaWYgKGEud3JhcCA9PT0gMCkgewogICAgICAgICAgICBhLm1vZGUgPSBqZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKDsgbCA8IDE2OyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS53cmFwICYgMiAmJiBvID09PSAzNTYxNSkgewogICAgICAgICAgICBhLndiaXRzID09PSAwICYmIChhLndiaXRzID0gMTUpLCBhLmNoZWNrID0gMCwgTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCksIG8gPSAwLCBsID0gMCwgYS5tb2RlID0gaHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGEuaGVhZCAmJiAoYS5oZWFkLmRvbmUgPSAhMSksICEoYS53cmFwICYgMSkgfHwgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqLwogICAgICAgICAgKCgobyAmIDI1NSkgPDwgOCkgKyAobyA+PiA4KSkgJSAzMSkgewogICAgICAgICAgICByLm1zZyA9ICJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKChvICYgMTUpICE9PSBkdCkgewogICAgICAgICAgICByLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvID4+Pj0gNCwgbCAtPSA0LCBDID0gKG8gJiAxNSkgKyA4LCBhLndiaXRzID09PSAwICYmIChhLndiaXRzID0gQyksIEMgPiAxNSB8fCBDID4gYS53Yml0cykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIHdpbmRvdyBzaXplIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5kbWF4ID0gMSA8PCBhLndiaXRzLCBhLmZsYWdzID0gMCwgci5hZGxlciA9IGEuY2hlY2sgPSAxLCBhLm1vZGUgPSBvICYgNTEyID8gRXQgOiB6ciwgbyA9IDAsIGwgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBodDoKICAgICAgICAgIGZvciAoOyBsIDwgMTY7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLmZsYWdzID0gbywgKGEuZmxhZ3MgJiAyNTUpICE9PSBkdCkgewogICAgICAgICAgICByLm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLmZsYWdzICYgNTczNDQpIHsKICAgICAgICAgICAgci5tc2cgPSAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQudGV4dCA9IG8gPj4gOCAmIDEpLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKE5bMF0gPSBvICYgMjU1LCBOWzFdID0gbyA+Pj4gOCAmIDI1NSwgYS5jaGVjayA9IHEwKGEuY2hlY2ssIE4sIDIsIDApKSwgbyA9IDAsIGwgPSAwLCBhLm1vZGUgPSB2dDsKICAgICAgICBjYXNlIHZ0OgogICAgICAgICAgZm9yICg7IGwgPCAzMjsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQudGltZSA9IG8pLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKE5bMF0gPSBvICYgMjU1LCBOWzFdID0gbyA+Pj4gOCAmIDI1NSwgTlsyXSA9IG8gPj4+IDE2ICYgMjU1LCBOWzNdID0gbyA+Pj4gMjQgJiAyNTUsIGEuY2hlY2sgPSBxMChhLmNoZWNrLCBOLCA0LCAwKSksIG8gPSAwLCBsID0gMCwgYS5tb2RlID0ga3Q7CiAgICAgICAgY2FzZSBrdDoKICAgICAgICAgIGZvciAoOyBsIDwgMTY7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLnhmbGFncyA9IG8gJiAyNTUsIGEuaGVhZC5vcyA9IG8gPj4gOCksIGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCkpLCBvID0gMCwgbCA9IDAsIGEubW9kZSA9IGd0OwogICAgICAgIGNhc2UgZ3Q6CiAgICAgICAgICBpZiAoYS5mbGFncyAmIDEwMjQpIHsKICAgICAgICAgICAgZm9yICg7IGwgPCAxNjsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGEubGVuZ3RoID0gbywgYS5oZWFkICYmIChhLmhlYWQuZXh0cmFfbGVuID0gbyksIGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoTlswXSA9IG8gJiAyNTUsIE5bMV0gPSBvID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gcTAoYS5jaGVjaywgTiwgMiwgMCkpLCBvID0gMCwgbCA9IDA7CiAgICAgICAgICB9IGVsc2UgYS5oZWFkICYmIChhLmhlYWQuZXh0cmEgPSBudWxsKTsKICAgICAgICAgIGEubW9kZSA9IG10OwogICAgICAgIGNhc2UgbXQ6CiAgICAgICAgICBpZiAoYS5mbGFncyAmIDEwMjQgJiYgKGQgPSBhLmxlbmd0aCwgZCA+IGYgJiYgKGQgPSBmKSwgZCAmJiAoYS5oZWFkICYmIChDID0gYS5oZWFkLmV4dHJhX2xlbiAtIGEubGVuZ3RoLCBhLmhlYWQuZXh0cmEgfHwgKGEuaGVhZC5leHRyYSA9IG5ldyBVaW50OEFycmF5KGEuaGVhZC5leHRyYV9sZW4pKSwgYS5oZWFkLmV4dHJhLnNldCgKICAgICAgICAgICAgQS5zdWJhcnJheSgKICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGlzIGxpbWl0ZWQgdG8gNjU1MzYgYnl0ZXMKICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVjawogICAgICAgICAgICAgIGkgKyBkCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qbGVuICsgY29weSA+IHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuID8gc3RhdGUuaGVhZC5leHRyYV9tYXggOiBjb3B5LCovCiAgICAgICAgICAgIEMKICAgICAgICAgICkpLCBhLmZsYWdzICYgNTEyICYmIGEud3JhcCAmIDQgJiYgKGEuY2hlY2sgPSBxMChhLmNoZWNrLCBBLCBkLCBpKSksIGYgLT0gZCwgaSArPSBkLCBhLmxlbmd0aCAtPSBkKSwgYS5sZW5ndGgpKQogICAgICAgICAgICBicmVhayByOwogICAgICAgICAgYS5sZW5ndGggPSAwLCBhLm1vZGUgPSBwdDsKICAgICAgICBjYXNlIHB0OgogICAgICAgICAgaWYgKGEuZmxhZ3MgJiAyMDQ4KSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGQgPSAwOwogICAgICAgICAgICBkbwogICAgICAgICAgICAgIEMgPSBBW2kgKyBkKytdLCBhLmhlYWQgJiYgQyAmJiBhLmxlbmd0aCA8IDY1NTM2ICYmIChhLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEMpKTsKICAgICAgICAgICAgd2hpbGUgKEMgJiYgZCA8IGYpOwogICAgICAgICAgICBpZiAoYS5mbGFncyAmIDUxMiAmJiBhLndyYXAgJiA0ICYmIChhLmNoZWNrID0gcTAoYS5jaGVjaywgQSwgZCwgaSkpLCBmIC09IGQsIGkgKz0gZCwgQykKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgfSBlbHNlIGEuaGVhZCAmJiAoYS5oZWFkLm5hbWUgPSBudWxsKTsKICAgICAgICAgIGEubGVuZ3RoID0gMCwgYS5tb2RlID0gd3Q7CiAgICAgICAgY2FzZSB3dDoKICAgICAgICAgIGlmIChhLmZsYWdzICYgNDA5NikgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBkID0gMDsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgICBDID0gQVtpICsgZCsrXSwgYS5oZWFkICYmIEMgJiYgYS5sZW5ndGggPCA2NTUzNiAmJiAoYS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShDKSk7CiAgICAgICAgICAgIHdoaWxlIChDICYmIGQgPCBmKTsKICAgICAgICAgICAgaWYgKGEuZmxhZ3MgJiA1MTIgJiYgYS53cmFwICYgNCAmJiAoYS5jaGVjayA9IHEwKGEuY2hlY2ssIEEsIGQsIGkpKSwgZiAtPSBkLCBpICs9IGQsIEMpCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgIH0gZWxzZSBhLmhlYWQgJiYgKGEuaGVhZC5jb21tZW50ID0gbnVsbCk7CiAgICAgICAgICBhLm1vZGUgPSB5dDsKICAgICAgICBjYXNlIHl0OgogICAgICAgICAgaWYgKGEuZmxhZ3MgJiA1MTIpIHsKICAgICAgICAgICAgZm9yICg7IGwgPCAxNjsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhLndyYXAgJiA0ICYmIG8gIT09IChhLmNoZWNrICYgNjU1MzUpKSB7CiAgICAgICAgICAgICAgci5tc2cgPSAiaGVhZGVyIGNyYyBtaXNtYXRjaCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG8gPSAwLCBsID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLmhjcmMgPSBhLmZsYWdzID4+IDkgJiAxLCBhLmhlYWQuZG9uZSA9ICEwKSwgci5hZGxlciA9IGEuY2hlY2sgPSAwLCBhLm1vZGUgPSB6cjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRXQ6CiAgICAgICAgICBmb3IgKDsgbCA8IDMyOyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICByLmFkbGVyID0gYS5jaGVjayA9IER0KG8pLCBvID0gMCwgbCA9IDAsIGEubW9kZSA9IGdlOwogICAgICAgIGNhc2UgZ2U6CiAgICAgICAgICBpZiAoYS5oYXZlZGljdCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIHIubmV4dF9vdXQgPSBuLCByLmF2YWlsX291dCA9IHUsIHIubmV4dF9pbiA9IGksIHIuYXZhaWxfaW4gPSBmLCBhLmhvbGQgPSBvLCBhLmJpdHMgPSBsLCBCdTsKICAgICAgICAgIHIuYWRsZXIgPSBhLmNoZWNrID0gMSwgYS5tb2RlID0genI7CiAgICAgICAgY2FzZSB6cjoKICAgICAgICAgIGlmIChlID09PSBFdSB8fCBlID09PSBPMikKICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIGplOgogICAgICAgICAgaWYgKGEubGFzdCkgewogICAgICAgICAgICBvID4+Pj0gbCAmIDcsIGwgLT0gbCAmIDcsIGEubW9kZSA9IEplOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoOyBsIDwgMzsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgc3dpdGNoIChhLmxhc3QgPSBvICYgMSwgbyA+Pj49IDEsIGwgLT0gMSwgbyAmIDMpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGEubW9kZSA9IFp0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgaWYgKFJ1KGEpLCBhLm1vZGUgPSBVMiwgZSA9PT0gTzIpIHsKICAgICAgICAgICAgICAgIG8gPj4+PSAyLCBsIC09IDI7CiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGEubW9kZSA9IEl0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBibG9jayB0eXBlIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICB9CiAgICAgICAgICBvID4+Pj0gMiwgbCAtPSAyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBadDoKICAgICAgICAgIGZvciAobyA+Pj49IGwgJiA3LCBsIC09IGwgJiA3OyBsIDwgMzI7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgobyAmIDY1NTM1KSAhPT0gKG8gPj4+IDE2IF4gNjU1MzUpKSB7CiAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5sZW5ndGggPSBvICYgNjU1MzUsIG8gPSAwLCBsID0gMCwgYS5tb2RlID0gUWUsIGUgPT09IE8yKQogICAgICAgICAgICBicmVhayByOwogICAgICAgIGNhc2UgUWU6CiAgICAgICAgICBhLm1vZGUgPSBCdDsKICAgICAgICBjYXNlIEJ0OgogICAgICAgICAgaWYgKGQgPSBhLmxlbmd0aCwgZCkgewogICAgICAgICAgICBpZiAoZCA+IGYgJiYgKGQgPSBmKSwgZCA+IHUgJiYgKGQgPSB1KSwgZCA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICB0LnNldChBLnN1YmFycmF5KGksIGkgKyBkKSwgbiksIGYgLT0gZCwgaSArPSBkLCB1IC09IGQsIG4gKz0gZCwgYS5sZW5ndGggLT0gZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhLm1vZGUgPSB6cjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSXQ6CiAgICAgICAgICBmb3IgKDsgbCA8IDE0OyApIHsKICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5ubGVuID0gKG8gJiAzMSkgKyAyNTcsIG8gPj4+PSA1LCBsIC09IDUsIGEubmRpc3QgPSAobyAmIDMxKSArIDEsIG8gPj4+PSA1LCBsIC09IDUsIGEubmNvZGUgPSAobyAmIDE1KSArIDQsIG8gPj4+PSA0LCBsIC09IDQsIGEubmxlbiA+IDI4NiB8fCBhLm5kaXN0ID4gMzApIHsKICAgICAgICAgICAgci5tc2cgPSAidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhLmhhdmUgPSAwLCBhLm1vZGUgPSBGdDsKICAgICAgICBjYXNlIEZ0OgogICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IGEubmNvZGU7ICkgewogICAgICAgICAgICBmb3IgKDsgbCA8IDM7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBhLmxlbnNbZjBbYS5oYXZlKytdXSA9IG8gJiA3LCBvID4+Pj0gMywgbCAtPSAzOwogICAgICAgICAgfQogICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IDE5OyApCiAgICAgICAgICAgIGEubGVuc1tmMFthLmhhdmUrK11dID0gMDsKICAgICAgICAgIGlmIChhLmxlbmNvZGUgPSBhLmxlbmR5biwgYS5sZW5iaXRzID0gNywgRCA9IHsgYml0czogYS5sZW5iaXRzIH0sIF8gPSBrMih5dSwgYS5sZW5zLCAwLCAxOSwgYS5sZW5jb2RlLCAwLCBhLndvcmssIEQpLCBhLmxlbmJpdHMgPSBELmJpdHMsIF8pIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5oYXZlID0gMCwgYS5tb2RlID0gQ3Q7CiAgICAgICAgY2FzZSBDdDoKICAgICAgICAgIGZvciAoOyBhLmhhdmUgPCBhLm5sZW4gKyBhLm5kaXN0OyApIHsKICAgICAgICAgICAgZm9yICg7IEUgPSBhLmxlbmNvZGVbbyAmICgxIDw8IGEubGVuYml0cykgLSAxXSwgZyA9IEUgPj4+IDI0LCB3ID0gRSA+Pj4gMTYgJiAyNTUsIEIgPSBFICYgNjU1MzUsICEoZyA8PSBsKTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChCIDwgMTYpCiAgICAgICAgICAgICAgbyA+Pj49IGcsIGwgLT0gZywgYS5sZW5zW2EuaGF2ZSsrXSA9IEI7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGlmIChCID09PSAxNikgewogICAgICAgICAgICAgICAgZm9yIChZID0gZyArIDI7IGwgPCBZOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobyA+Pj49IGcsIGwgLT0gZywgYS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBDID0gYS5sZW5zW2EuaGF2ZSAtIDFdLCBkID0gMyArIChvICYgMyksIG8gPj4+PSAyLCBsIC09IDI7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChCID09PSAxNykgewogICAgICAgICAgICAgICAgZm9yIChZID0gZyArIDM7IGwgPCBZOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvID4+Pj0gZywgbCAtPSBnLCBDID0gMCwgZCA9IDMgKyAobyAmIDcpLCBvID4+Pj0gMywgbCAtPSAzOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKFkgPSBnICsgNzsgbCA8IFk7ICkgewogICAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG8gPj4+PSBnLCBsIC09IGcsIEMgPSAwLCBkID0gMTEgKyAobyAmIDEyNyksIG8gPj4+PSA3LCBsIC09IDc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhLmhhdmUgKyBkID4gYS5ubGVuICsgYS5uZGlzdCkgewogICAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoOyBkLS07ICkKICAgICAgICAgICAgICAgIGEubGVuc1thLmhhdmUrK10gPSBDOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5tb2RlID09PSBNMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoYS5sZW5zWzI1Nl0gPT09IDApIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGEubGVuYml0cyA9IDksIEQgPSB7IGJpdHM6IGEubGVuYml0cyB9LCBfID0gazIocG4sIGEubGVucywgMCwgYS5ubGVuLCBhLmxlbmNvZGUsIDAsIGEud29yaywgRCksIGEubGVuYml0cyA9IEQuYml0cywgXykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5kaXN0Yml0cyA9IDYsIGEuZGlzdGNvZGUgPSBhLmRpc3RkeW4sIEQgPSB7IGJpdHM6IGEuZGlzdGJpdHMgfSwgXyA9IGsyKHduLCBhLmxlbnMsIGEubmxlbiwgYS5uZGlzdCwgYS5kaXN0Y29kZSwgMCwgYS53b3JrLCBEKSwgYS5kaXN0Yml0cyA9IEQuYml0cywgXykgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5tb2RlID0gVTIsIGUgPT09IE8yKQogICAgICAgICAgICBicmVhayByOwogICAgICAgIGNhc2UgVTI6CiAgICAgICAgICBhLm1vZGUgPSBqMjsKICAgICAgICBjYXNlIGoyOgogICAgICAgICAgaWYgKGYgPj0gNiAmJiB1ID49IDI1OCkgewogICAgICAgICAgICByLm5leHRfb3V0ID0gbiwgci5hdmFpbF9vdXQgPSB1LCByLm5leHRfaW4gPSBpLCByLmF2YWlsX2luID0gZiwgYS5ob2xkID0gbywgYS5iaXRzID0gbCwgdnUociwgYyksIG4gPSByLm5leHRfb3V0LCB0ID0gci5vdXRwdXQsIHUgPSByLmF2YWlsX291dCwgaSA9IHIubmV4dF9pbiwgQSA9IHIuaW5wdXQsIGYgPSByLmF2YWlsX2luLCBvID0gYS5ob2xkLCBsID0gYS5iaXRzLCBhLm1vZGUgPT09IHpyICYmIChhLmJhY2sgPSAtMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChhLmJhY2sgPSAwOyBFID0gYS5sZW5jb2RlW28gJiAoMSA8PCBhLmxlbmJpdHMpIC0gMV0sIGcgPSBFID4+PiAyNCwgdyA9IEUgPj4+IDE2ICYgMjU1LCBCID0gRSAmIDY1NTM1LCAhKGcgPD0gbCk7ICkgewogICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh3ICYmICEodyAmIDI0MCkpIHsKICAgICAgICAgICAgZm9yIChtID0gZywgcCA9IHcsIFcgPSBCOyBFID0gYS5sZW5jb2RlW1cgKyAoKG8gJiAoMSA8PCBtICsgcCkgLSAxKSA+PiBtKV0sIGcgPSBFID4+PiAyNCwgdyA9IEUgPj4+IDE2ICYgMjU1LCBCID0gRSAmIDY1NTM1LCAhKG0gKyBnIDw9IGwpOyApIHsKICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbyA+Pj49IG0sIGwgLT0gbSwgYS5iYWNrICs9IG07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobyA+Pj49IGcsIGwgLT0gZywgYS5iYWNrICs9IGcsIGEubGVuZ3RoID0gQiwgdyA9PT0gMCkgewogICAgICAgICAgICBhLm1vZGUgPSBSdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodyAmIDMyKSB7CiAgICAgICAgICAgIGEuYmFjayA9IC0xLCBhLm1vZGUgPSB6cjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodyAmIDY0KSB7CiAgICAgICAgICAgIHIubXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGEuZXh0cmEgPSB3ICYgMTUsIGEubW9kZSA9IFd0OwogICAgICAgIGNhc2UgV3Q6CiAgICAgICAgICBpZiAoYS5leHRyYSkgewogICAgICAgICAgICBmb3IgKFkgPSBhLmV4dHJhOyBsIDwgWTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGEubGVuZ3RoICs9IG8gJiAoMSA8PCBhLmV4dHJhKSAtIDEsIG8gPj4+PSBhLmV4dHJhLCBsIC09IGEuZXh0cmEsIGEuYmFjayArPSBhLmV4dHJhOwogICAgICAgICAgfQogICAgICAgICAgYS53YXMgPSBhLmxlbmd0aCwgYS5tb2RlID0gX3Q7CiAgICAgICAgY2FzZSBfdDoKICAgICAgICAgIGZvciAoOyBFID0gYS5kaXN0Y29kZVtvICYgKDEgPDwgYS5kaXN0Yml0cykgLSAxXSwgZyA9IEUgPj4+IDI0LCB3ID0gRSA+Pj4gMTYgJiAyNTUsIEIgPSBFICYgNjU1MzUsICEoZyA8PSBsKTsgKSB7CiAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgfQogICAgICAgICAgaWYgKCEodyAmIDI0MCkpIHsKICAgICAgICAgICAgZm9yIChtID0gZywgcCA9IHcsIFcgPSBCOyBFID0gYS5kaXN0Y29kZVtXICsgKChvICYgKDEgPDwgbSArIHApIC0gMSkgPj4gbSldLCBnID0gRSA+Pj4gMjQsIHcgPSBFID4+PiAxNiAmIDI1NSwgQiA9IEUgJiA2NTUzNSwgIShtICsgZyA8PSBsKTsgKSB7CiAgICAgICAgICAgICAgaWYgKGYgPT09IDApCiAgICAgICAgICAgICAgICBicmVhayByOwogICAgICAgICAgICAgIGYtLSwgbyArPSBBW2krK10gPDwgbCwgbCArPSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG8gPj4+PSBtLCBsIC09IG0sIGEuYmFjayArPSBtOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG8gPj4+PSBnLCBsIC09IGcsIGEuYmFjayArPSBnLCB3ICYgNjQpIHsKICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgYS5vZmZzZXQgPSBCLCBhLmV4dHJhID0gdyAmIDE1LCBhLm1vZGUgPSBHdDsKICAgICAgICBjYXNlIEd0OgogICAgICAgICAgaWYgKGEuZXh0cmEpIHsKICAgICAgICAgICAgZm9yIChZID0gYS5leHRyYTsgbCA8IFk7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gKz0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBhLm9mZnNldCArPSBvICYgKDEgPDwgYS5leHRyYSkgLSAxLCBvID4+Pj0gYS5leHRyYSwgbCAtPSBhLmV4dHJhLCBhLmJhY2sgKz0gYS5leHRyYTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLm9mZnNldCA+IGEuZG1heCkgewogICAgICAgICAgICByLm1zZyA9ICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsIGEubW9kZSA9IE0wOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGEubW9kZSA9IFh0OwogICAgICAgIGNhc2UgWHQ6CiAgICAgICAgICBpZiAodSA9PT0gMCkKICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgIGlmIChkID0gYyAtIHUsIGEub2Zmc2V0ID4gZCkgewogICAgICAgICAgICBpZiAoZCA9IGEub2Zmc2V0IC0gZCwgZCA+IGEud2hhdmUgJiYgYS5zYW5lKSB7CiAgICAgICAgICAgICAgci5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkID4gYS53bmV4dCA/IChkIC09IGEud25leHQsIHYgPSBhLndzaXplIC0gZCkgOiB2ID0gYS53bmV4dCAtIGQsIGQgPiBhLmxlbmd0aCAmJiAoZCA9IGEubGVuZ3RoKSwgayA9IGEud2luZG93OwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGsgPSB0LCB2ID0gbiAtIGEub2Zmc2V0LCBkID0gYS5sZW5ndGg7CiAgICAgICAgICBkID4gdSAmJiAoZCA9IHUpLCB1IC09IGQsIGEubGVuZ3RoIC09IGQ7CiAgICAgICAgICBkbwogICAgICAgICAgICB0W24rK10gPSBrW3YrK107CiAgICAgICAgICB3aGlsZSAoLS1kKTsKICAgICAgICAgIGEubGVuZ3RoID09PSAwICYmIChhLm1vZGUgPSBqMik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJ0OgogICAgICAgICAgaWYgKHUgPT09IDApCiAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICB0W24rK10gPSBhLmxlbmd0aCwgdS0tLCBhLm1vZGUgPSBqMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSmU6CiAgICAgICAgICBpZiAoYS53cmFwKSB7CiAgICAgICAgICAgIGZvciAoOyBsIDwgMzI7ICkgewogICAgICAgICAgICAgIGlmIChmID09PSAwKQogICAgICAgICAgICAgICAgYnJlYWsgcjsKICAgICAgICAgICAgICBmLS0sIG8gfD0gQVtpKytdIDw8IGwsIGwgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYyAtPSB1LCByLnRvdGFsX291dCArPSBjLCBhLnRvdGFsICs9IGMsIGEud3JhcCAmIDQgJiYgYyAmJiAoci5hZGxlciA9IGEuY2hlY2sgPSAvKlVQREFURV9DSEVDSyhzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki8KICAgICAgICAgICAgYS5mbGFncyA/IHEwKGEuY2hlY2ssIHQsIGMsIG4gLSBjKSA6IEMyKGEuY2hlY2ssIHQsIGMsIG4gLSBjKSksIGMgPSB1LCBhLndyYXAgJiA0ICYmIChhLmZsYWdzID8gbyA6IER0KG8pKSAhPT0gYS5jaGVjaykgewogICAgICAgICAgICAgIHIubXNnID0gImluY29ycmVjdCBkYXRhIGNoZWNrIiwgYS5tb2RlID0gTTA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbyA9IDAsIGwgPSAwOwogICAgICAgICAgfQogICAgICAgICAgYS5tb2RlID0gVnQ7CiAgICAgICAgY2FzZSBWdDoKICAgICAgICAgIGlmIChhLndyYXAgJiYgYS5mbGFncykgewogICAgICAgICAgICBmb3IgKDsgbCA8IDMyOyApIHsKICAgICAgICAgICAgICBpZiAoZiA9PT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrIHI7CiAgICAgICAgICAgICAgZi0tLCBvICs9IEFbaSsrXSA8PCBsLCBsICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGEud3JhcCAmIDQgJiYgbyAhPT0gKGEudG90YWwgJiA0Mjk0OTY3Mjk1KSkgewogICAgICAgICAgICAgIHIubXNnID0gImluY29ycmVjdCBsZW5ndGggY2hlY2siLCBhLm1vZGUgPSBNMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBvID0gMCwgbCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBhLm1vZGUgPSBTdDsKICAgICAgICBjYXNlIFN0OgogICAgICAgICAgXyA9IFp1OwogICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIE0wOgogICAgICAgICAgXyA9IHluOwogICAgICAgICAgYnJlYWsgcjsKICAgICAgICBjYXNlIFpuOgogICAgICAgICAgcmV0dXJuIEVuOwogICAgICAgIGNhc2UgQm46CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBDcjsKICAgICAgfQogIHJldHVybiByLm5leHRfb3V0ID0gbiwgci5hdmFpbF9vdXQgPSB1LCByLm5leHRfaW4gPSBpLCByLmF2YWlsX2luID0gZiwgYS5ob2xkID0gbywgYS5iaXRzID0gbCwgKGEud3NpemUgfHwgYyAhPT0gci5hdmFpbF9vdXQgJiYgYS5tb2RlIDwgTTAgJiYgKGEubW9kZSA8IEplIHx8IGUgIT09IGJ0KSkgJiYgX24ociwgci5vdXRwdXQsIHIubmV4dF9vdXQsIGMgLSByLmF2YWlsX291dCksIHMgLT0gci5hdmFpbF9pbiwgYyAtPSByLmF2YWlsX291dCwgci50b3RhbF9pbiArPSBzLCByLnRvdGFsX291dCArPSBjLCBhLnRvdGFsICs9IGMsIGEud3JhcCAmIDQgJiYgYyAmJiAoci5hZGxlciA9IGEuY2hlY2sgPSAvKlVQREFURV9DSEVDSyhzdGF0ZS5jaGVjaywgc3RybS5uZXh0X291dCAtIF9vdXQsIF9vdXQpOyovCiAgYS5mbGFncyA/IHEwKGEuY2hlY2ssIHQsIGMsIHIubmV4dF9vdXQgLSBjKSA6IEMyKGEuY2hlY2ssIHQsIGMsIHIubmV4dF9vdXQgLSBjKSksIHIuZGF0YV90eXBlID0gYS5iaXRzICsgKGEubGFzdCA/IDY0IDogMCkgKyAoYS5tb2RlID09PSB6ciA/IDEyOCA6IDApICsgKGEubW9kZSA9PT0gVTIgfHwgYS5tb2RlID09PSBRZSA/IDI1NiA6IDApLCAocyA9PT0gMCAmJiBjID09PSAwIHx8IGUgPT09IGJ0KSAmJiBfID09PSBDYSAmJiAoXyA9IEl1KSwgXzsKfSwgU3UgPSAocikgPT4gewogIGlmIChfYShyKSkKICAgIHJldHVybiBDcjsKICBsZXQgZSA9IHIuc3RhdGU7CiAgcmV0dXJuIGUud2luZG93ICYmIChlLndpbmRvdyA9IG51bGwpLCByLnN0YXRlID0gbnVsbCwgQ2E7Cn0sIER1ID0gKHIsIGUpID0+IHsKICBpZiAoX2EocikpCiAgICByZXR1cm4gQ3I7CiAgY29uc3QgYSA9IHIuc3RhdGU7CiAgcmV0dXJuIGEud3JhcCAmIDIgPyAoYS5oZWFkID0gZSwgZS5kb25lID0gITEsIENhKSA6IENyOwp9LCB4dSA9IChyLCBlKSA9PiB7CiAgY29uc3QgYSA9IGUubGVuZ3RoOwogIGxldCBBLCB0LCBpOwogIHJldHVybiBfYShyKSB8fCAoQSA9IHIuc3RhdGUsIEEud3JhcCAhPT0gMCAmJiBBLm1vZGUgIT09IGdlKSA/IENyIDogQS5tb2RlID09PSBnZSAmJiAodCA9IDEsIHQgPSBDMih0LCBlLCBhLCAwKSwgdCAhPT0gQS5jaGVjaykgPyB5biA6IChpID0gX24ociwgZSwgYSwgYSksIGkgPyAoQS5tb2RlID0gWm4sIEVuKSA6IChBLmhhdmVkaWN0ID0gMSwgQ2EpKTsKfTsKdmFyIE51ID0gRm4sIE11ID0gQ24sIFR1ID0gSW4sIFB1ID0gWHUsIFl1ID0gV24sIE91ID0gVnUsIFV1ID0gU3UsIGp1ID0gRHUsIFF1ID0geHUsIEp1ID0gInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiLCAkciA9IHsKICBpbmZsYXRlUmVzZXQ6IE51LAogIGluZmxhdGVSZXNldDI6IE11LAogIGluZmxhdGVSZXNldEtlZXA6IFR1LAogIGluZmxhdGVJbml0OiBQdSwKICBpbmZsYXRlSW5pdDI6IFl1LAogIGluZmxhdGU6IE91LAogIGluZmxhdGVFbmQ6IFV1LAogIGluZmxhdGVHZXRIZWFkZXI6IGp1LAogIGluZmxhdGVTZXREaWN0aW9uYXJ5OiBRdSwKICBpbmZsYXRlSW5mbzogSnUKfTsKZnVuY3Rpb24gSHUoKSB7CiAgdGhpcy50ZXh0ID0gMCwgdGhpcy50aW1lID0gMCwgdGhpcy54ZmxhZ3MgPSAwLCB0aGlzLm9zID0gMCwgdGhpcy5leHRyYSA9IG51bGwsIHRoaXMuZXh0cmFfbGVuID0gMCwgdGhpcy5uYW1lID0gIiIsIHRoaXMuY29tbWVudCA9ICIiLCB0aGlzLmhjcmMgPSAwLCB0aGlzLmRvbmUgPSAhMTsKfQp2YXIgenUgPSBIdTsKY29uc3QgR24gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCB7CiAgWl9OT19GTFVTSDogTHUsCiAgWl9GSU5JU0g6IEt1LAogIFpfT0s6IEcyLAogIFpfU1RSRUFNX0VORDogTGUsCiAgWl9ORUVEX0RJQ1Q6IEtlLAogIFpfU1RSRUFNX0VSUk9SOiBxdSwKICBaX0RBVEFfRVJST1I6IE50LAogIFpfTUVNX0VSUk9SOiAkdQp9ID0gSWU7CmZ1bmN0aW9uIEdlKHIpIHsKICB0aGlzLm9wdGlvbnMgPSBDZS5hc3NpZ24oewogICAgY2h1bmtTaXplOiAxMDI0ICogNjQsCiAgICB3aW5kb3dCaXRzOiAxNSwKICAgIHRvOiAiIgogIH0sIHIgfHwge30pOwogIGNvbnN0IGUgPSB0aGlzLm9wdGlvbnM7CiAgZS5yYXcgJiYgZS53aW5kb3dCaXRzID49IDAgJiYgZS53aW5kb3dCaXRzIDwgMTYgJiYgKGUud2luZG93Qml0cyA9IC1lLndpbmRvd0JpdHMsIGUud2luZG93Qml0cyA9PT0gMCAmJiAoZS53aW5kb3dCaXRzID0gLTE1KSksIGUud2luZG93Qml0cyA+PSAwICYmIGUud2luZG93Qml0cyA8IDE2ICYmICEociAmJiByLndpbmRvd0JpdHMpICYmIChlLndpbmRvd0JpdHMgKz0gMzIpLCBlLndpbmRvd0JpdHMgPiAxNSAmJiBlLndpbmRvd0JpdHMgPCA0OCAmJiAoZS53aW5kb3dCaXRzICYgMTUgfHwgKGUud2luZG93Qml0cyB8PSAxNSkpLCB0aGlzLmVyciA9IDAsIHRoaXMubXNnID0gIiIsIHRoaXMuZW5kZWQgPSAhMSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5zdHJtID0gbmV3IGduKCksIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwogIGxldCBhID0gJHIuaW5mbGF0ZUluaXQyKAogICAgdGhpcy5zdHJtLAogICAgZS53aW5kb3dCaXRzCiAgKTsKICBpZiAoYSAhPT0gRzIpCiAgICB0aHJvdyBuZXcgRXJyb3IoSWFbYV0pOwogIGlmICh0aGlzLmhlYWRlciA9IG5ldyB6dSgpLCAkci5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpLCBlLmRpY3Rpb25hcnkgJiYgKHR5cGVvZiBlLmRpY3Rpb25hcnkgPT0gInN0cmluZyIgPyBlLmRpY3Rpb25hcnkgPSBfMi5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSkgOiBHbi5jYWxsKGUuZGljdGlvbmFyeSkgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIgJiYgKGUuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSkpLCBlLnJhdyAmJiAoYSA9ICRyLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZS5kaWN0aW9uYXJ5KSwgYSAhPT0gRzIpKSkKICAgIHRocm93IG5ldyBFcnJvcihJYVthXSk7Cn0KR2UucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihyLCBlKSB7CiAgY29uc3QgYSA9IHRoaXMuc3RybSwgQSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemUsIHQgPSB0aGlzLm9wdGlvbnMuZGljdGlvbmFyeTsKICBsZXQgaSwgbiwgZjsKICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuICExOwogIGZvciAoZSA9PT0gfn5lID8gbiA9IGUgOiBuID0gZSA9PT0gITAgPyBLdSA6IEx1LCBHbi5jYWxsKHIpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iID8gYS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KHIpIDogYS5pbnB1dCA9IHIsIGEubmV4dF9pbiA9IDAsIGEuYXZhaWxfaW4gPSBhLmlucHV0Lmxlbmd0aDsgOyApIHsKICAgIGZvciAoYS5hdmFpbF9vdXQgPT09IDAgJiYgKGEub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoQSksIGEubmV4dF9vdXQgPSAwLCBhLmF2YWlsX291dCA9IEEpLCBpID0gJHIuaW5mbGF0ZShhLCBuKSwgaSA9PT0gS2UgJiYgdCAmJiAoaSA9ICRyLmluZmxhdGVTZXREaWN0aW9uYXJ5KGEsIHQpLCBpID09PSBHMiA/IGkgPSAkci5pbmZsYXRlKGEsIG4pIDogaSA9PT0gTnQgJiYgKGkgPSBLZSkpOyBhLmF2YWlsX2luID4gMCAmJiBpID09PSBMZSAmJiBhLnN0YXRlLndyYXAgPiAwICYmIHJbYS5uZXh0X2luXSAhPT0gMDsgKQogICAgICAkci5pbmZsYXRlUmVzZXQoYSksIGkgPSAkci5pbmZsYXRlKGEsIG4pOwogICAgc3dpdGNoIChpKSB7CiAgICAgIGNhc2UgcXU6CiAgICAgIGNhc2UgTnQ6CiAgICAgIGNhc2UgS2U6CiAgICAgIGNhc2UgJHU6CiAgICAgICAgcmV0dXJuIHRoaXMub25FbmQoaSksIHRoaXMuZW5kZWQgPSAhMCwgITE7CiAgICB9CiAgICBpZiAoZiA9IGEuYXZhaWxfb3V0LCBhLm5leHRfb3V0ICYmIChhLmF2YWlsX291dCA9PT0gMCB8fCBpID09PSBMZSkpCiAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciKSB7CiAgICAgICAgbGV0IHUgPSBfMi51dGY4Ym9yZGVyKGEub3V0cHV0LCBhLm5leHRfb3V0KSwgbyA9IGEubmV4dF9vdXQgLSB1LCBsID0gXzIuYnVmMnN0cmluZyhhLm91dHB1dCwgdSk7CiAgICAgICAgYS5uZXh0X291dCA9IG8sIGEuYXZhaWxfb3V0ID0gQSAtIG8sIG8gJiYgYS5vdXRwdXQuc2V0KGEub3V0cHV0LnN1YmFycmF5KHUsIHUgKyBvKSwgMCksIHRoaXMub25EYXRhKGwpOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLm9uRGF0YShhLm91dHB1dC5sZW5ndGggPT09IGEubmV4dF9vdXQgPyBhLm91dHB1dCA6IGEub3V0cHV0LnN1YmFycmF5KDAsIGEubmV4dF9vdXQpKTsKICAgIGlmICghKGkgPT09IEcyICYmIGYgPT09IDApKSB7CiAgICAgIGlmIChpID09PSBMZSkKICAgICAgICByZXR1cm4gaSA9ICRyLmluZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZChpKSwgdGhpcy5lbmRlZCA9ICEwLCAhMDsKICAgICAgaWYgKGEuYXZhaWxfaW4gPT09IDApIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gITA7Cn07CkdlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihyKSB7CiAgdGhpcy5jaHVua3MucHVzaChyKTsKfTsKR2UucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24ocikgewogIHIgPT09IEcyICYmICh0aGlzLm9wdGlvbnMudG8gPT09ICJzdHJpbmciID8gdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCIiKSA6IHRoaXMucmVzdWx0ID0gQ2UuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLmVyciA9IHIsIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZzsKfTsKZnVuY3Rpb24gcmwociwgZSkgewogIGNvbnN0IGEgPSBuZXcgR2UoZSk7CiAgaWYgKGEucHVzaChyKSwgYS5lcnIpIHRocm93IGEubXNnIHx8IElhW2EuZXJyXTsKICByZXR1cm4gYS5yZXN1bHQ7Cn0KdmFyIGFsID0gcmwsIGVsID0gewogIGluZmxhdGU6IGFsCn07CmNvbnN0IHsgZGVmbGF0ZTogQWwgfSA9IGR1LCB7IGluZmxhdGU6IHRsIH0gPSBlbDsKdmFyIGlsID0gQWwsIG5sID0gdGwsIGcyID0gbmV3IEludDMyQXJyYXkoWwogIDAsCiAgMSwKICA4LAogIDE2LAogIDksCiAgMiwKICAzLAogIDEwLAogIDE3LAogIDI0LAogIDMyLAogIDI1LAogIDE4LAogIDExLAogIDQsCiAgNSwKICAxMiwKICAxOSwKICAyNiwKICAzMywKICA0MCwKICA0OCwKICA0MSwKICAzNCwKICAyNywKICAyMCwKICAxMywKICA2LAogIDcsCiAgMTQsCiAgMjEsCiAgMjgsCiAgMzUsCiAgNDIsCiAgNDksCiAgNTYsCiAgNTcsCiAgNTAsCiAgNDMsCiAgMzYsCiAgMjksCiAgMjIsCiAgMTUsCiAgMjMsCiAgMzAsCiAgMzcsCiAgNDQsCiAgNTEsCiAgNTgsCiAgNTksCiAgNTIsCiAgNDUsCiAgMzgsCiAgMzEsCiAgMzksCiAgNDYsCiAgNTMsCiAgNjAsCiAgNjEsCiAgNTQsCiAgNDcsCiAgNTUsCiAgNjIsCiAgNjMKXSksIFEyID0gNDAxNywgSjIgPSA3OTksIEgyID0gMzQwNiwgejIgPSAyMjc2LCBMMiA9IDE1NjcsIEsyID0gMzc4NCwgUmEgPSA1NzkzLCBxMiA9IDI4OTYsIGZsID0gMTAwLCBNdCA9IDY0ICogMTAyNCAqIDEwMjQsIHlBID0gMDsKZnVuY3Rpb24gT2EocikgewogIHZhciBlID0geUEgKyByOwogIGlmIChlID4gTXQpIHsKICAgIHZhciBhID0gTWF0aC5jZWlsKChlIC0gTXQpIC8gMTAyNCAvIDEwMjQpOwogICAgdGhyb3cgbmV3IEVycm9yKCJNYXggbWVtb3J5IGxpbWl0IGV4Y2VlZGVkIGJ5IGF0IGxlYXN0ICIuY29uY2F0KGEsICJNQiIpKTsKICB9CiAgeUEgPSBlOwp9CmZ1bmN0aW9uIG9sKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMTY7IGEgPiAwICYmICFyW2EgLSAxXTsgKQogICAgYS0tOwogIGZvciAodmFyIEEgPSBbeyBjaGlsZHJlbjogW10sIGluZGV4OiAwIH1dLCB0ID0gMCwgaSA9IEFbMF0sIG4gPSAwOyBuIDwgYTsgbisrKSB7CiAgICBmb3IgKHZhciBmID0gMDsgZiA8IHJbbl07IGYrKykgewogICAgICBmb3IgKGkgPSBBLnBvcCgpLCBpLmNoaWxkcmVuW2kuaW5kZXhdID0gZVt0XTsgaS5pbmRleCA+IDA7ICkgewogICAgICAgIGlmIChBLmxlbmd0aCA9PT0gMCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlY3JlYXRlIEh1ZmZtYW4gVGFibGUiKTsKICAgICAgICBpID0gQS5wb3AoKTsKICAgICAgfQogICAgICBmb3IgKGkuaW5kZXgrKywgQS5wdXNoKGkpOyBBLmxlbmd0aCA8PSBuOyApIHsKICAgICAgICB2YXIgdSA9IHsgY2hpbGRyZW46IFtdLCBpbmRleDogMCB9OwogICAgICAgIEEucHVzaCh1KSwgaS5jaGlsZHJlbltpLmluZGV4XSA9IHUuY2hpbGRyZW4sIGkgPSB1OwogICAgICB9CiAgICAgIHQrKzsKICAgIH0KICAgIGlmIChuICsgMSA8IGEpIHsKICAgICAgdmFyIHUgPSB7IGNoaWxkcmVuOiBbXSwgaW5kZXg6IDAgfTsKICAgICAgQS5wdXNoKHUpLCBpLmNoaWxkcmVuW2kuaW5kZXhdID0gdS5jaGlsZHJlbiwgaSA9IHU7CiAgICB9CiAgfQogIHJldHVybiBBWzBdLmNoaWxkcmVuOwp9CmZ1bmN0aW9uIHVsKHIsIGUsIGEsIEEsIHQsIGksIG4sIGYsIHUpIHsKICB2YXIgbyA9IGEubWN1c1BlckxpbmUsIGwgPSBhLnByb2dyZXNzaXZlLCBzID0gZSwgYyA9IDAsIGQgPSAwOwogIGZ1bmN0aW9uIHYoKSB7CiAgICBpZiAoZCA+IDApCiAgICAgIHJldHVybiBkLS0sIGMgPj4gZCAmIDE7CiAgICBpZiAoYyA9IHJbZSsrXSwgYyA9PSAyNTUpIHsKICAgICAgdmFyIEkgPSByW2UrK107CiAgICAgIGlmIChJKQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBtYXJrZXI6ICIuY29uY2F0KChjIDw8IDggfCBJKS50b1N0cmluZygxNikpKTsKICAgIH0KICAgIHJldHVybiBkID0gNywgYyA+Pj4gNzsKICB9CiAgZnVuY3Rpb24gayhJKSB7CiAgICBmb3IgKHZhciBWID0gSTsgOyApIHsKICAgICAgaWYgKFYgPSBWW3YoKV0sIHR5cGVvZiBWID09ICJudW1iZXIiKQogICAgICAgIHJldHVybiBWOwogICAgICBpZiAoViA9PT0gdm9pZCAwKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlIik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIEUoSSkgewogICAgZm9yICh2YXIgViA9IDA7IEkgPiAwOyApCiAgICAgIFYgPSBWIDw8IDEgfCB2KCksIEktLTsKICAgIHJldHVybiBWOwogIH0KICBmdW5jdGlvbiBnKEkpIHsKICAgIHZhciBWID0gRShJKTsKICAgIHJldHVybiBWID49IDEgPDwgSSAtIDEgPyBWIDogViArICgtMSA8PCBJKSArIDE7CiAgfQogIGZ1bmN0aW9uIHcoSSwgVikgewogICAgdmFyIHogPSBrKEkuaHVmZm1hblRhYmxlREMpLCBqID0geiA9PT0gMCA/IDAgOiBnKHopOwogICAgVlswXSA9IEkucHJlZCArPSBqOwogICAgZm9yICh2YXIgYTAgPSAxOyBhMCA8IDY0OyApIHsKICAgICAgdmFyIGIwID0gayhJLmh1ZmZtYW5UYWJsZUFDKSwgZTAgPSBiMCAmIDE1LCBxID0gYjAgPj4gNDsKICAgICAgaWYgKGUwID09PSAwKSB7CiAgICAgICAgaWYgKHEgPCAxNSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGEwICs9IDE2OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGEwICs9IHE7CiAgICAgIHZhciBvMCA9IGcyW2EwXTsKICAgICAgVltvMF0gPSBnKGUwKSwgYTArKzsKICAgIH0KICB9CiAgZnVuY3Rpb24gQihJLCBWKSB7CiAgICB2YXIgeiA9IGsoSS5odWZmbWFuVGFibGVEQyksIGogPSB6ID09PSAwID8gMCA6IGcoeikgPDwgdTsKICAgIFZbMF0gPSBJLnByZWQgKz0gajsKICB9CiAgZnVuY3Rpb24gbShJLCBWKSB7CiAgICBWWzBdIHw9IHYoKSA8PCB1OwogIH0KICB2YXIgcCA9IDA7CiAgZnVuY3Rpb24gVyhJLCBWKSB7CiAgICBpZiAocCA+IDApIHsKICAgICAgcC0tOwogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKHZhciB6ID0gaSwgaiA9IG47IHogPD0gajsgKSB7CiAgICAgIHZhciBhMCA9IGsoSS5odWZmbWFuVGFibGVBQyksIGIwID0gYTAgJiAxNSwgZTAgPSBhMCA+PiA0OwogICAgICBpZiAoYjAgPT09IDApIHsKICAgICAgICBpZiAoZTAgPCAxNSkgewogICAgICAgICAgcCA9IEUoZTApICsgKDEgPDwgZTApIC0gMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB6ICs9IDE2OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHogKz0gZTA7CiAgICAgIHZhciBxID0gZzJbel07CiAgICAgIFZbcV0gPSBnKGIwKSAqICgxIDw8IHUpLCB6Kys7CiAgICB9CiAgfQogIHZhciBDID0gMCwgXyA9IDA7CiAgZnVuY3Rpb24gTihJLCBWKSB7CiAgICBmb3IgKHZhciB6ID0gaSwgaiA9IG4sIGEwID0gMDsgeiA8PSBqOyApIHsKICAgICAgdmFyIGIwID0gZzJbel0sIGUwID0gVltiMF0gPCAwID8gLTEgOiAxOwogICAgICBzd2l0Y2ggKEMpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICB2YXIgcSA9IGsoSS5odWZmbWFuVGFibGVBQyksIG8wID0gcSAmIDE1OwogICAgICAgICAgaWYgKGEwID0gcSA+PiA0LCBvMCA9PT0gMCkKICAgICAgICAgICAgYTAgPCAxNSA/IChwID0gRShhMCkgKyAoMSA8PCBhMCksIEMgPSA0KSA6IChhMCA9IDE2LCBDID0gMSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKG8wICE9PSAxKQogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBBQ24gZW5jb2RpbmciKTsKICAgICAgICAgICAgXyA9IGcobzApLCBDID0gYTAgPyAyIDogMzsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBWW2IwXSA/IFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCA6IChhMC0tLCBhMCA9PT0gMCAmJiAoQyA9IEMgPT0gMiA/IDMgOiAwKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICBWW2IwXSA/IFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCA6IChWW2IwXSA9IF8gPDwgdSwgQyA9IDApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgVltiMF0gJiYgKFZbYjBdICs9ICh2KCkgPDwgdSkgKiBlMCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICB6Kys7CiAgICB9CiAgICBDID09PSA0ICYmIChwLS0sIHAgPT09IDAgJiYgKEMgPSAwKSk7CiAgfQogIGZ1bmN0aW9uIEQoSSwgViwgeiwgaiwgYTApIHsKICAgIHZhciBiMCA9IHogLyBvIHwgMCwgZTAgPSB6ICUgbywgcSA9IGIwICogSS52ICsgaiwgbzAgPSBlMCAqIEkuaCArIGEwOwogICAgSS5ibG9ja3NbcV0gIT09IHZvaWQgMCAmJiBWKEksIEkuYmxvY2tzW3FdW28wXSk7CiAgfQogIGZ1bmN0aW9uIFkoSSwgViwgeikgewogICAgdmFyIGogPSB6IC8gSS5ibG9ja3NQZXJMaW5lIHwgMCwgYTAgPSB6ICUgSS5ibG9ja3NQZXJMaW5lOwogICAgSS5ibG9ja3Nbal0gIT09IHZvaWQgMCAmJiBWKEksIEkuYmxvY2tzW2pdW2EwXSk7CiAgfQogIHZhciBmMCA9IEEubGVuZ3RoLCBHLCBKOwogIGwgPyBpID09PSAwID8gSiA9IGYgPT09IDAgPyBCIDogbSA6IEogPSBmID09PSAwID8gVyA6IE4gOiBKID0gdzsKICB2YXIgSyA9IDAsIFg7CiAgZjAgPT0gMSA/IFggPSBBWzBdLmJsb2Nrc1BlckxpbmUgKiBBWzBdLmJsb2Nrc1BlckNvbHVtbiA6IFggPSBvICogYS5tY3VzUGVyQ29sdW1uLCB0IHx8ICh0ID0gWCk7CiAgZm9yICh2YXIgbDAsIGIsIFo7IEsgPCBYOyApIHsKICAgIGZvciAodmFyIHkgPSAwOyB5IDwgZjA7IHkrKykKICAgICAgQVt5XS5wcmVkID0gMDsKICAgIGlmIChwID0gMCwgZjAgPT0gMSkgewogICAgICBHID0gQVswXTsKICAgICAgZm9yICh2YXIgRiA9IDA7IEYgPCB0OyBGKyspCiAgICAgICAgWShHLCBKLCBLKSwgSysrOwogICAgfSBlbHNlCiAgICAgIGZvciAodmFyIEYgPSAwOyBGIDwgdDsgRisrKSB7CiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBmMDsgeSsrKSB7CiAgICAgICAgICBHID0gQVt5XSwgbDAgPSBHLmgsIGIgPSBHLnY7CiAgICAgICAgICBmb3IgKHZhciBSID0gMDsgUiA8IGI7IFIrKykKICAgICAgICAgICAgZm9yICh2YXIgTSA9IDA7IE0gPCBsMDsgTSsrKQogICAgICAgICAgICAgIEQoRywgSiwgSywgUiwgTSk7CiAgICAgICAgfQogICAgICAgIGlmIChLKyssIEsgPT09IFgpCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgaWYgKEsgPT09IFgpCiAgICAgIGRvIHsKICAgICAgICBpZiAocltlXSA9PT0gMjU1ICYmIHJbZSArIDFdICE9PSAwKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZSArPSAxOwogICAgICB9IHdoaWxlIChlIDwgci5sZW5ndGggLSAyKTsKICAgIGlmIChkID0gMCwgWiA9IHJbZV0gPDwgOCB8IHJbZSArIDFdLCBaIDwgNjUyODApCiAgICAgIHRocm93IG5ldyBFcnJvcigibWFya2VyIHdhcyBub3QgZm91bmQiKTsKICAgIGlmIChaID49IDY1NDg4ICYmIFogPD0gNjU0OTUpCiAgICAgIGUgKz0gMjsKICAgIGVsc2UKICAgICAgYnJlYWs7CiAgfQogIHJldHVybiBlIC0gczsKfQpmdW5jdGlvbiBsbChyKSB7CiAgdmFyIGUgPSBbXSwgYSA9IHIuYmxvY2tzUGVyTGluZSwgQSA9IHIuYmxvY2tzUGVyQ29sdW1uLCB0ID0gYSA8PCAzLCBpID0gbmV3IEludDMyQXJyYXkoNjQpLCBuID0gbmV3IFVpbnQ4QXJyYXkoNjQpOwogIGZ1bmN0aW9uIGYoRSwgZywgdykgewogICAgZm9yICh2YXIgQiA9IHIucXVhbnRpemF0aW9uVGFibGUsIG0gPSB3LCBwID0gMDsgcCA8IDY0OyBwKyspCiAgICAgIG1bcF0gPSBFW3BdICogQltwXTsKICAgIGZvciAodmFyIHAgPSAwOyBwIDwgODsgKytwKSB7CiAgICAgIHZhciBXID0gOCAqIHA7CiAgICAgIGlmIChtWzEgKyBXXSA9PSAwICYmIG1bMiArIFddID09IDAgJiYgbVszICsgV10gPT0gMCAmJiBtWzQgKyBXXSA9PSAwICYmIG1bNSArIFddID09IDAgJiYgbVs2ICsgV10gPT0gMCAmJiBtWzcgKyBXXSA9PSAwKSB7CiAgICAgICAgdmFyIEMgPSBSYSAqIG1bMCArIFddICsgNTEyID4+IDEwOwogICAgICAgIG1bMCArIFddID0gQywgbVsxICsgV10gPSBDLCBtWzIgKyBXXSA9IEMsIG1bMyArIFddID0gQywgbVs0ICsgV10gPSBDLCBtWzUgKyBXXSA9IEMsIG1bNiArIFddID0gQywgbVs3ICsgV10gPSBDOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBfID0gUmEgKiBtWzAgKyBXXSArIDEyOCA+PiA4LCBOID0gUmEgKiBtWzQgKyBXXSArIDEyOCA+PiA4LCBEID0gbVsyICsgV10sIFkgPSBtWzYgKyBXXSwgZjAgPSBxMiAqIChtWzEgKyBXXSAtIG1bNyArIFddKSArIDEyOCA+PiA4LCBHID0gcTIgKiAobVsxICsgV10gKyBtWzcgKyBXXSkgKyAxMjggPj4gOCwgSiA9IG1bMyArIFddIDw8IDQsIEsgPSBtWzUgKyBXXSA8PCA0LCBYID0gXyAtIE4gKyAxID4+IDE7CiAgICAgIF8gPSBfICsgTiArIDEgPj4gMSwgTiA9IFgsIFggPSBEICogSzIgKyBZICogTDIgKyAxMjggPj4gOCwgRCA9IEQgKiBMMiAtIFkgKiBLMiArIDEyOCA+PiA4LCBZID0gWCwgWCA9IGYwIC0gSyArIDEgPj4gMSwgZjAgPSBmMCArIEsgKyAxID4+IDEsIEsgPSBYLCBYID0gRyArIEogKyAxID4+IDEsIEogPSBHIC0gSiArIDEgPj4gMSwgRyA9IFgsIFggPSBfIC0gWSArIDEgPj4gMSwgXyA9IF8gKyBZICsgMSA+PiAxLCBZID0gWCwgWCA9IE4gLSBEICsgMSA+PiAxLCBOID0gTiArIEQgKyAxID4+IDEsIEQgPSBYLCBYID0gZjAgKiB6MiArIEcgKiBIMiArIDIwNDggPj4gMTIsIGYwID0gZjAgKiBIMiAtIEcgKiB6MiArIDIwNDggPj4gMTIsIEcgPSBYLCBYID0gSiAqIEoyICsgSyAqIFEyICsgMjA0OCA+PiAxMiwgSiA9IEogKiBRMiAtIEsgKiBKMiArIDIwNDggPj4gMTIsIEsgPSBYLCBtWzAgKyBXXSA9IF8gKyBHLCBtWzcgKyBXXSA9IF8gLSBHLCBtWzEgKyBXXSA9IE4gKyBLLCBtWzYgKyBXXSA9IE4gLSBLLCBtWzIgKyBXXSA9IEQgKyBKLCBtWzUgKyBXXSA9IEQgLSBKLCBtWzMgKyBXXSA9IFkgKyBmMCwgbVs0ICsgV10gPSBZIC0gZjA7CiAgICB9CiAgICBmb3IgKHZhciBwID0gMDsgcCA8IDg7ICsrcCkgewogICAgICB2YXIgbDAgPSBwOwogICAgICBpZiAobVsxICogOCArIGwwXSA9PSAwICYmIG1bMiAqIDggKyBsMF0gPT0gMCAmJiBtWzMgKiA4ICsgbDBdID09IDAgJiYgbVs0ICogOCArIGwwXSA9PSAwICYmIG1bNSAqIDggKyBsMF0gPT0gMCAmJiBtWzYgKiA4ICsgbDBdID09IDAgJiYgbVs3ICogOCArIGwwXSA9PSAwKSB7CiAgICAgICAgdmFyIGIgPSBSYSAqIHdbcCArIDBdICsgODE5MiA+PiAxNDsKICAgICAgICBtWzAgKiA4ICsgbDBdID0gYiwgbVsxICogOCArIGwwXSA9IGIsIG1bMiAqIDggKyBsMF0gPSBiLCBtWzMgKiA4ICsgbDBdID0gYiwgbVs0ICogOCArIGwwXSA9IGIsIG1bNSAqIDggKyBsMF0gPSBiLCBtWzYgKiA4ICsgbDBdID0gYiwgbVs3ICogOCArIGwwXSA9IGI7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdmFyIF8gPSBSYSAqIG1bMCAqIDggKyBsMF0gKyAyMDQ4ID4+IDEyLCBOID0gUmEgKiBtWzQgKiA4ICsgbDBdICsgMjA0OCA+PiAxMiwgRCA9IG1bMiAqIDggKyBsMF0sIFkgPSBtWzYgKiA4ICsgbDBdLCBmMCA9IHEyICogKG1bMSAqIDggKyBsMF0gLSBtWzcgKiA4ICsgbDBdKSArIDIwNDggPj4gMTIsIEcgPSBxMiAqIChtWzEgKiA4ICsgbDBdICsgbVs3ICogOCArIGwwXSkgKyAyMDQ4ID4+IDEyLCBKID0gbVszICogOCArIGwwXSwgSyA9IG1bNSAqIDggKyBsMF0sIFggPSBfIC0gTiArIDEgPj4gMTsKICAgICAgXyA9IF8gKyBOICsgMSA+PiAxLCBOID0gWCwgWCA9IEQgKiBLMiArIFkgKiBMMiArIDIwNDggPj4gMTIsIEQgPSBEICogTDIgLSBZICogSzIgKyAyMDQ4ID4+IDEyLCBZID0gWCwgWCA9IGYwIC0gSyArIDEgPj4gMSwgZjAgPSBmMCArIEsgKyAxID4+IDEsIEsgPSBYLCBYID0gRyArIEogKyAxID4+IDEsIEogPSBHIC0gSiArIDEgPj4gMSwgRyA9IFgsIFggPSBfIC0gWSArIDEgPj4gMSwgXyA9IF8gKyBZICsgMSA+PiAxLCBZID0gWCwgWCA9IE4gLSBEICsgMSA+PiAxLCBOID0gTiArIEQgKyAxID4+IDEsIEQgPSBYLCBYID0gZjAgKiB6MiArIEcgKiBIMiArIDIwNDggPj4gMTIsIGYwID0gZjAgKiBIMiAtIEcgKiB6MiArIDIwNDggPj4gMTIsIEcgPSBYLCBYID0gSiAqIEoyICsgSyAqIFEyICsgMjA0OCA+PiAxMiwgSiA9IEogKiBRMiAtIEsgKiBKMiArIDIwNDggPj4gMTIsIEsgPSBYLCBtWzAgKiA4ICsgbDBdID0gXyArIEcsIG1bNyAqIDggKyBsMF0gPSBfIC0gRywgbVsxICogOCArIGwwXSA9IE4gKyBLLCBtWzYgKiA4ICsgbDBdID0gTiAtIEssIG1bMiAqIDggKyBsMF0gPSBEICsgSiwgbVs1ICogOCArIGwwXSA9IEQgLSBKLCBtWzMgKiA4ICsgbDBdID0gWSArIGYwLCBtWzQgKiA4ICsgbDBdID0gWSAtIGYwOwogICAgfQogICAgZm9yICh2YXIgcCA9IDA7IHAgPCA2NDsgKytwKSB7CiAgICAgIHZhciBaID0gMTI4ICsgKG1bcF0gKyA4ID4+IDQpOwogICAgICBnW3BdID0gWiA8IDAgPyAwIDogWiA+IDI1NSA/IDI1NSA6IFo7CiAgICB9CiAgfQogIE9hKHQgKiBBICogOCk7CiAgZm9yICh2YXIgdSA9IDA7IHUgPCBBOyB1KyspIHsKICAgIGZvciAodmFyIG8gPSB1IDw8IDMsIGwgPSAwOyBsIDwgODsgbCsrKQogICAgICBlLnB1c2gobmV3IFVpbnQ4QXJyYXkodCkpOwogICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhOyBzKyspIHsKICAgICAgZihyLmJsb2Nrc1t1XVtzXSwgbiwgaSk7CiAgICAgIGZvciAodmFyIGMgPSAwLCBkID0gcyA8PCAzLCB2ID0gMDsgdiA8IDg7IHYrKykKICAgICAgICBmb3IgKHZhciBrID0gZVtvICsgdl0sIGwgPSAwOyBsIDwgODsgbCsrKQogICAgICAgICAga1tkICsgbF0gPSBuW2MrK107CiAgICB9CiAgfQogIHJldHVybiBlOwp9CmZ1bmN0aW9uIHJhKHIpIHsKICByZXR1cm4gciA8IDAgPyAwIDogciA+IDI1NSA/IDI1NSA6IHI7Cn0KZnVuY3Rpb24gY2wocikgewogIHZhciBlID0gewogICAgd2lkdGg6IDAsCiAgICBoZWlnaHQ6IDAsCiAgICBjb21tZW50czogW10sCiAgICBhZG9iZTogdm9pZCAwLAogICAgY29tcG9uZW50czogW10sCiAgICBleGlmQnVmZmVyOiB2b2lkIDAsCiAgICBqZmlmOiB2b2lkIDAKICB9LCBhID0gZmwgKiAxZTMgKiAxZTMsIEEgPSAwOwogIGZ1bmN0aW9uIHQoKSB7CiAgICB2YXIgdjAgPSByW0FdIDw8IDggfCByW0EgKyAxXTsKICAgIHJldHVybiBBICs9IDIsIHYwOwogIH0KICBmdW5jdGlvbiBpKCkgewogICAgdmFyIHYwID0gdCgpLCBJMCA9IHIuc3ViYXJyYXkoQSwgQSArIHYwIC0gMik7CiAgICByZXR1cm4gQSArPSBJMC5sZW5ndGgsIEkwOwogIH0KICBmdW5jdGlvbiBuKHYwKSB7CiAgICB2YXIgSTAgPSAwLCBDMCA9IDA7CiAgICBmb3IgKHZhciBPMCBpbiB2MC5jb21wb25lbnRzKQogICAgICBpZiAodjAuY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShPMCkpIHsKICAgICAgICB2YXIgVzAgPSB2MC5jb21wb25lbnRzW08wXTsKICAgICAgICBJMCA8IFcwLmggJiYgKEkwID0gVzAuaCksIEMwIDwgVzAudiAmJiAoQzAgPSBXMC52KTsKICAgICAgfQogICAgdmFyIE4wID0gTWF0aC5jZWlsKHYwLnNhbXBsZXNQZXJMaW5lIC8gOCAvIEkwKSwgUTAgPSBNYXRoLmNlaWwodjAuc2NhbkxpbmVzIC8gOCAvIEMwKTsKICAgIGZvciAodmFyIE8wIGluIHYwLmNvbXBvbmVudHMpCiAgICAgIGlmICh2MC5jb21wb25lbnRzLmhhc093blByb3BlcnR5KE8wKSkgewogICAgICAgIHZhciBXMCA9IHYwLmNvbXBvbmVudHNbTzBdLCBVMCA9IE1hdGguY2VpbChNYXRoLmNlaWwodjAuc2FtcGxlc1BlckxpbmUgLyA4KSAqIFcwLmggLyBJMCksIFAwID0gTWF0aC5jZWlsKE1hdGguY2VpbCh2MC5zY2FuTGluZXMgLyA4KSAqIFcwLnYgLyBDMCksIEowID0gTjAgKiBXMC5oLCBBciA9IFEwICogVzAudiwgTDAgPSBBciAqIEowLCBjciA9IFtdOwogICAgICAgIE9hKEwwICogMjU2KTsKICAgICAgICBmb3IgKHZhciB5ciA9IDA7IHlyIDwgQXI7IHlyKyspIHsKICAgICAgICAgIGZvciAodmFyIFdyID0gW10sIE1yID0gMDsgTXIgPCBKMDsgTXIrKykKICAgICAgICAgICAgV3IucHVzaChuZXcgSW50MzJBcnJheSg2NCkpOwogICAgICAgICAgY3IucHVzaChXcik7CiAgICAgICAgfQogICAgICAgIFcwLmJsb2Nrc1BlckxpbmUgPSBVMCwgVzAuYmxvY2tzUGVyQ29sdW1uID0gUDAsIFcwLmJsb2NrcyA9IGNyOwogICAgICB9CiAgICB2MC5tYXhIID0gSTAsIHYwLm1heFYgPSBDMCwgdjAubWN1c1BlckxpbmUgPSBOMCwgdjAubWN1c1BlckNvbHVtbiA9IFEwOwogIH0KICB2YXIgZiA9IG51bGwsIHUgPSBudWxsLCBvID0gdm9pZCAwLCBsID0gMCwgcyA9IFtdLCBjID0gW10sIGQgPSBbXSwgdiA9IFtdLCBrID0gdCgpLCBFID0gLTE7CiAgaWYgKGsgIT0gNjU0OTYpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlNPSSBub3QgZm91bmQiKTsKICBmb3IgKGsgPSB0KCk7IGsgIT0gNjU0OTc7ICkgewogICAgc3dpdGNoIChrKSB7CiAgICAgIGNhc2UgNjUyODA6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjU1MDQ6CiAgICAgIGNhc2UgNjU1MDU6CiAgICAgIGNhc2UgNjU1MDY6CiAgICAgIGNhc2UgNjU1MDc6CiAgICAgIGNhc2UgNjU1MDg6CiAgICAgIGNhc2UgNjU1MDk6CiAgICAgIGNhc2UgNjU1MTA6CiAgICAgIGNhc2UgNjU1MTE6CiAgICAgIGNhc2UgNjU1MTI6CiAgICAgIGNhc2UgNjU1MTM6CiAgICAgIGNhc2UgNjU1MTQ6CiAgICAgIGNhc2UgNjU1MTU6CiAgICAgIGNhc2UgNjU1MTY6CiAgICAgIGNhc2UgNjU1MTc6CiAgICAgIGNhc2UgNjU1MTg6CiAgICAgIGNhc2UgNjU1MTk6CiAgICAgIGNhc2UgNjU1MzQ6IHsKICAgICAgICB2YXIgZyA9IGkoKTsKICAgICAgICBpZiAoayA9PT0gNjU1MzQpIHsKICAgICAgICAgIGZvciAodmFyIHcgPSAiIiwgQiA9IDA7IEIgPCBnLmJ5dGVMZW5ndGg7IEIrKykKICAgICAgICAgICAgdyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdbQl0pOwogICAgICAgICAgZS5jb21tZW50cy5wdXNoKHcpOwogICAgICAgIH0KICAgICAgICBrID09PSA2NTUwNCAmJiBnWzBdID09PSA3NCAmJiBnWzFdID09PSA3MCAmJiBnWzJdID09PSA3MyAmJiBnWzNdID09PSA3MCAmJiBnWzRdID09PSAwICYmIChmID0gewogICAgICAgICAgdmVyc2lvbjogeyBtYWpvcjogZ1s1XSwgbWlub3I6IGdbNl0gfSwKICAgICAgICAgIGRlbnNpdHlVbml0czogZ1s3XSwKICAgICAgICAgIHhEZW5zaXR5OiBnWzhdIDw8IDggfCBnWzldLAogICAgICAgICAgeURlbnNpdHk6IGdbMTBdIDw8IDggfCBnWzExXSwKICAgICAgICAgIHRodW1iV2lkdGg6IGdbMTJdLAogICAgICAgICAgdGh1bWJIZWlnaHQ6IGdbMTNdLAogICAgICAgICAgdGh1bWJEYXRhOiBnLnN1YmFycmF5KDE0LCAxNCArIDMgKiBnWzEyXSAqIGdbMTNdKQogICAgICAgIH0pLCBrID09PSA2NTUwNSAmJiBnWzBdID09PSA2OSAmJiBnWzFdID09PSAxMjAgJiYgZ1syXSA9PT0gMTA1ICYmIGdbM10gPT09IDEwMiAmJiBnWzRdID09PSAwICYmIChlLmV4aWZCdWZmZXIgPSBnLnN1YmFycmF5KDUsIGcubGVuZ3RoKSksIGsgPT09IDY1NTE4ICYmIGdbMF0gPT09IDY1ICYmIGdbMV0gPT09IDEwMCAmJiBnWzJdID09PSAxMTEgJiYgZ1szXSA9PT0gOTggJiYgZ1s0XSA9PT0gMTAxICYmIGdbNV0gPT09IDAgJiYgKHUgPSB7CiAgICAgICAgICB2ZXJzaW9uOiBnWzZdLAogICAgICAgICAgZmxhZ3MwOiBnWzddIDw8IDggfCBnWzhdLAogICAgICAgICAgZmxhZ3MxOiBnWzldIDw8IDggfCBnWzEwXSwKICAgICAgICAgIHRyYW5zZm9ybUNvZGU6IGdbMTFdCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSA2NTQ5OTogewogICAgICAgIGZvciAodmFyIG0gPSB0KCksIHAgPSBtICsgQSAtIDI7IEEgPCBwOyApIHsKICAgICAgICAgIHZhciBXID0gcltBKytdOwogICAgICAgICAgT2EoNjQgKiA0KTsKICAgICAgICAgIHZhciBDID0gbmV3IEludDMyQXJyYXkoNjQpOwogICAgICAgICAgaWYgKFcgPj4gNCkKICAgICAgICAgICAgaWYgKFcgPj4gNCA9PT0gMSkKICAgICAgICAgICAgICBmb3IgKHZhciBfID0gMDsgXyA8IDY0OyBfKyspIHsKICAgICAgICAgICAgICAgIHZhciBOID0gZzJbX107CiAgICAgICAgICAgICAgICBDW05dID0gdCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRFFUOiBpbnZhbGlkIHRhYmxlIHNwZWMiKTsKICAgICAgICAgIGVsc2UgZm9yICh2YXIgXyA9IDA7IF8gPCA2NDsgXysrKSB7CiAgICAgICAgICAgIHZhciBOID0gZzJbX107CiAgICAgICAgICAgIENbTl0gPSByW0ErK107CiAgICAgICAgICB9CiAgICAgICAgICBzW1cgJiAxNV0gPSBDOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NDcyOgogICAgICBjYXNlIDY1NDczOgogICAgICBjYXNlIDY1NDc0OiB7CiAgICAgICAgdCgpLCBvID0gewogICAgICAgICAgZXh0ZW5kZWQ6IGsgPT09IDY1NDczLAogICAgICAgICAgcHJvZ3Jlc3NpdmU6IGsgPT09IDY1NDc0LAogICAgICAgICAgcHJlY2lzaW9uOiByW0ErK10sCiAgICAgICAgICBzY2FuTGluZXM6IHQoKSwKICAgICAgICAgIHNhbXBsZXNQZXJMaW5lOiB0KCksCiAgICAgICAgICBjb21wb25lbnRzOiB7fSwKICAgICAgICAgIGNvbXBvbmVudHNPcmRlcjogW10sCiAgICAgICAgICBtYXhIOiAwLAogICAgICAgICAgbWF4VjogMCwKICAgICAgICAgIG1jdXNQZXJMaW5lOiAwLAogICAgICAgICAgbWN1c1BlckNvbHVtbjogMAogICAgICAgIH07CiAgICAgICAgdmFyIEQgPSBvLnNjYW5MaW5lcyAqIG8uc2FtcGxlc1BlckxpbmU7CiAgICAgICAgaWYgKEQgPiBhKSB7CiAgICAgICAgICB2YXIgWSA9IE1hdGguY2VpbCgoRCAtIGEpIC8gMWU2KTsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibWF4UmVzb2x1dGlvbkluTVAgbGltaXQgZXhjZWVkZWQgYnkgIi5jb25jYXQoWSwgIk1QIikpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBmMCA9IHJbQSsrXSwgRyA9IDA7IEcgPCBmMDsgRysrKSB7CiAgICAgICAgICB2YXIgSiA9IHJbQV0sIEsgPSByW0EgKyAxXSA+PiA0LCBYID0gcltBICsgMV0gJiAxNSwgbDAgPSByW0EgKyAyXTsKICAgICAgICAgIG8uY29tcG9uZW50c09yZGVyLnB1c2goSiksIG8uY29tcG9uZW50c1tKXSA9IHsKICAgICAgICAgICAgaDogSywKICAgICAgICAgICAgdjogWCwKICAgICAgICAgICAgcXVhbnRpemF0aW9uSWR4OiBsMCwKICAgICAgICAgICAgYmxvY2tzUGVyQ29sdW1uOiAwLAogICAgICAgICAgICBibG9ja3NQZXJMaW5lOiAwLAogICAgICAgICAgICBibG9ja3M6IFtdLAogICAgICAgICAgICBwcmVkOiAwCiAgICAgICAgICB9LCBBICs9IDM7CiAgICAgICAgfQogICAgICAgIG4obyksIGMucHVzaChvKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NDc2OiB7CiAgICAgICAgZm9yICh2YXIgYiA9IHQoKSwgRyA9IDI7IEcgPCBiOyApIHsKICAgICAgICAgIGZvciAodmFyIFogPSByW0ErK10sIHkgPSBuZXcgVWludDhBcnJheSgxNiksIEYgPSAwLCBfID0gMDsgXyA8IDE2OyBfKyssIEErKykKICAgICAgICAgICAgRiArPSB5W19dID0gcltBXTsKICAgICAgICAgIE9hKDE2ICsgRik7CiAgICAgICAgICBmb3IgKHZhciBSID0gbmV3IFVpbnQ4QXJyYXkoRiksIF8gPSAwOyBfIDwgRjsgXysrLCBBKyspCiAgICAgICAgICAgIFJbX10gPSByW0FdOwogICAgICAgICAgRyArPSAxNyArIEY7CiAgICAgICAgICB2YXIgTSA9IFogJiAxNSwgSSA9IFogPj4gNCA/IGQgOiB2OwogICAgICAgICAgSVtNXSA9IG9sKHksIFIpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY1NTAxOgogICAgICAgIHQoKSwgbCA9IHQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2NTUwMDoKICAgICAgICB0KCksIHQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2NTQ5ODogewogICAgICAgIHQoKTsKICAgICAgICBmb3IgKHZhciBWID0gcltBKytdLCB6ID0gW10sIEcgPSAwOyBHIDwgVjsgRysrKSB7CiAgICAgICAgICB2YXIgaiA9IG8uY29tcG9uZW50c1tyW0ErK11dLCBhMCA9IHJbQSsrXTsKICAgICAgICAgIGouaHVmZm1hblRhYmxlREMgPSB2W2EwID4+IDRdLCBqLmh1ZmZtYW5UYWJsZUFDID0gZFthMCAmIDE1XSwgei5wdXNoKGopOwogICAgICAgIH0KICAgICAgICB2YXIgYjAgPSByW0ErK10sIGUwID0gcltBKytdLCBxID0gcltBKytdLCBvMCA9IHVsKHIsIEEsIG8sIHosIGwsIGIwLCBlMCwgcSA+PiA0LCBxICYgMTUpOwogICAgICAgIEEgKz0gbzA7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSA2NTUzNToKICAgICAgICByW0FdICE9PSAyNTUgJiYgQS0tOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKHJbQSAtIDNdID09IDI1NSAmJiByW0EgLSAyXSA+PSAxOTIgJiYgcltBIC0gMl0gPD0gMjU0KSB7CiAgICAgICAgICBBIC09IDM7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDIyNCB8fCBrID09IDIyNSkgewogICAgICAgICAgaWYgKEUgIT09IC0xKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImZpcnN0IHVua25vd24gSlBFRyBtYXJrZXIgYXQgb2Zmc2V0ICIuY29uY2F0KEUudG9TdHJpbmcoMTYpLCAiLCBzZWNvbmQgdW5rbm93biBKUEVHIG1hcmtlciAiKS5jb25jYXQoay50b1N0cmluZygxNiksICIgYXQgb2Zmc2V0ICIpLmNvbmNhdCgoQSAtIDEpLnRvU3RyaW5nKDE2KSkpOwogICAgICAgICAgRSA9IEEgLSAxOwogICAgICAgICAgdmFyIGMwID0gdCgpOwogICAgICAgICAgaWYgKHJbQSArIGMwIC0gMl0gPT09IDI1NSkgewogICAgICAgICAgICBBICs9IGMwIC0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcigidW5rbm93biBKUEVHIG1hcmtlciAiICsgay50b1N0cmluZygxNikpOwogICAgICB9CiAgICB9CiAgICBrID0gdCgpOwogIH0KICBpZiAoYy5sZW5ndGggIT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigib25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkIik7CiAgZm9yICh2YXIgRyA9IDA7IEcgPCBjLmxlbmd0aDsgRysrKSB7CiAgICB2YXIgUzAgPSBjW0ddLmNvbXBvbmVudHM7CiAgICBmb3IgKHZhciBfIGluIFMwKQogICAgICBTMFtfXS5xdWFudGl6YXRpb25UYWJsZSA9IHNbUzBbX10ucXVhbnRpemF0aW9uSWR4XSwgZGVsZXRlIFMwW19dLnF1YW50aXphdGlvbklkeDsKICB9CiAgZS53aWR0aCA9IG8uc2FtcGxlc1BlckxpbmUsIGUuaGVpZ2h0ID0gby5zY2FuTGluZXMsIGUuamZpZiA9IGYsIGUuYWRvYmUgPSB1LCBlLmNvbXBvbmVudHMgPSBbXTsKICBmb3IgKHZhciBHID0gMDsgRyA8IG8uY29tcG9uZW50c09yZGVyLmxlbmd0aDsgRysrKSB7CiAgICB2YXIgaiA9IG8uY29tcG9uZW50c1tvLmNvbXBvbmVudHNPcmRlcltHXV07CiAgICBlLmNvbXBvbmVudHMucHVzaCh7CiAgICAgIGxpbmVzOiBsbChqKSwKICAgICAgc2NhbGVYOiBqLmggLyBvLm1heEgsCiAgICAgIHNjYWxlWTogai52IC8gby5tYXhWCiAgICB9KTsKICB9CiAgcmV0dXJuIGU7Cn0KZnVuY3Rpb24gc2wocikgewogIHZhciBlID0gMCwgYSA9ICExLCBBID0gci53aWR0aCwgdCA9IHIuaGVpZ2h0LCBpID0gQSAqIHQgKiByLmNvbXBvbmVudHMubGVuZ3RoOwogIE9hKGkpOwogIHZhciBuID0gbmV3IFVpbnQ4QXJyYXkoaSk7CiAgc3dpdGNoIChyLmNvbXBvbmVudHMubGVuZ3RoKSB7CiAgICBjYXNlIDE6IHsKICAgICAgZm9yICh2YXIgZiA9IHIuY29tcG9uZW50c1swXSwgdSA9IDA7IHUgPCB0OyB1KyspCiAgICAgICAgZm9yICh2YXIgbyA9IGYubGluZXNbMCB8IHUgKiBmLnNjYWxlWV0sIGwgPSAwOyBsIDwgQTsgbCsrKSB7CiAgICAgICAgICB2YXIgcyA9IG9bMCB8IGwgKiBmLnNjYWxlWF07CiAgICAgICAgICBuW2UrK10gPSBzOwogICAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIDI6IHsKICAgICAgZm9yICh2YXIgZiA9IHIuY29tcG9uZW50c1swXSwgYyA9IHIuY29tcG9uZW50c1sxXSwgdSA9IDA7IHUgPCB0OyB1KyspCiAgICAgICAgZm9yICh2YXIgbyA9IGYubGluZXNbMCB8IHUgKiBmLnNjYWxlWV0sIGQgPSBjLmxpbmVzWzAgfCB1ICogYy5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHYgPSBvWzAgfCBsICogZi5zY2FsZVhdOwogICAgICAgICAgbltlKytdID0gdjsKICAgICAgICAgIHZhciBrID0gZFswIHwgbCAqIGMuc2NhbGVYXTsKICAgICAgICAgIG5bZSsrXSA9IGs7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgMzogewogICAgICBhID0gITAsIHIuYWRvYmUgJiYgci5hZG9iZS50cmFuc2Zvcm1Db2RlICYmIChhID0gITApOwogICAgICBmb3IgKHZhciBmID0gci5jb21wb25lbnRzWzBdLCBjID0gci5jb21wb25lbnRzWzFdLCBFID0gci5jb21wb25lbnRzWzJdLCB1ID0gMDsgdSA8IHQ7IHUrKykKICAgICAgICBmb3IgKHZhciBvID0gZi5saW5lc1swIHwgdSAqIGYuc2NhbGVZXSwgZCA9IGMubGluZXNbMCB8IHUgKiBjLnNjYWxlWV0sIGcgPSBFLmxpbmVzWzAgfCB1ICogRS5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHMgPSB2b2lkIDAsIHcgPSB2b2lkIDAsIEIgPSB2b2lkIDAsIG0gPSB2b2lkIDAsIHAgPSB2b2lkIDAsIFcgPSB2b2lkIDA7CiAgICAgICAgICBhID8gKHMgPSBvWzAgfCBsICogZi5zY2FsZVhdLCB3ID0gZFswIHwgbCAqIGMuc2NhbGVYXSwgQiA9IGdbMCB8IGwgKiBFLnNjYWxlWF0sIG0gPSByYShzICsgMS40MDIgKiAoQiAtIDEyOCkpLCBwID0gcmEocyAtIDAuMzQ0MTM2MyAqICh3IC0gMTI4KSAtIDAuNzE0MTM2MzYgKiAoQiAtIDEyOCkpLCBXID0gcmEocyArIDEuNzcyICogKHcgLSAxMjgpKSkgOiAobSA9IG9bMCB8IGwgKiBmLnNjYWxlWF0sIHAgPSBkWzAgfCBsICogYy5zY2FsZVhdLCBXID0gZ1swIHwgbCAqIEUuc2NhbGVYXSksIG5bZSsrXSA9IG0sIG5bZSsrXSA9IHAsIG5bZSsrXSA9IFc7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgNDogewogICAgICBpZiAoIXIuYWRvYmUpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlICg0IGNvbXBvbmVudHMpIik7CiAgICAgIGEgPSAhMSwgci5hZG9iZSAmJiByLmFkb2JlLnRyYW5zZm9ybUNvZGUgJiYgKGEgPSAhMCk7CiAgICAgIGZvciAodmFyIGYgPSByLmNvbXBvbmVudHNbMF0sIGMgPSByLmNvbXBvbmVudHNbMV0sIEUgPSByLmNvbXBvbmVudHNbMl0sIEMgPSByLmNvbXBvbmVudHNbM10sIHUgPSAwOyB1IDwgdDsgdSsrKQogICAgICAgIGZvciAodmFyIG8gPSBmLmxpbmVzWzAgfCB1ICogZi5zY2FsZVldLCBkID0gYy5saW5lc1swIHwgdSAqIGMuc2NhbGVZXSwgZyA9IEUubGluZXNbMCB8IHUgKiBFLnNjYWxlWV0sIF8gPSBDLmxpbmVzWzAgfCB1ICogQy5zY2FsZVldLCBsID0gMDsgbCA8IEE7IGwrKykgewogICAgICAgICAgdmFyIHMgPSB2b2lkIDAsIHcgPSB2b2lkIDAsIEIgPSB2b2lkIDAsIE4gPSB2b2lkIDAsIEQgPSB2b2lkIDAsIFkgPSB2b2lkIDAsIGYwID0gdm9pZCAwOwogICAgICAgICAgYSA/IChzID0gb1swIHwgbCAqIGYuc2NhbGVYXSwgdyA9IGRbMCB8IGwgKiBjLnNjYWxlWF0sIEIgPSBnWzAgfCBsICogRS5zY2FsZVhdLCBOID0gX1swIHwgbCAqIEMuc2NhbGVYXSwgRCA9IDI1NSAtIHJhKHMgKyAxLjQwMiAqIChCIC0gMTI4KSksIFkgPSAyNTUgLSByYShzIC0gMC4zNDQxMzYzICogKHcgLSAxMjgpIC0gMC43MTQxMzYzNiAqIChCIC0gMTI4KSksIGYwID0gMjU1IC0gcmEocyArIDEuNzcyICogKHcgLSAxMjgpKSkgOiAoRCA9IG9bMCB8IGwgKiBmLnNjYWxlWF0sIFkgPSBkWzAgfCBsICogYy5zY2FsZVhdLCBmMCA9IGdbMCB8IGwgKiBFLnNjYWxlWF0sIE4gPSBfWzAgfCBsICogQy5zY2FsZVhdKSwgbltlKytdID0gMjU1IC0gRCwgbltlKytdID0gMjU1IC0gWSwgbltlKytdID0gMjU1IC0gZjAsIG5bZSsrXSA9IDI1NSAtIE47CiAgICAgICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpOwogIH0KICByZXR1cm4gbjsKfQpmdW5jdGlvbiBibChyLCBlKSB7CiAgaWYgKHlBID0gMCwgci5sZW5ndGggPT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkVtcHR5IGpwZWcgYnVmZmVyIik7CiAgdmFyIGEgPSBjbChyKTsKICBPYShhLndpZHRoICogYS5oZWlnaHQgKiA0KTsKICB2YXIgQSA9IHNsKGEpLCB0ID0gZShhLndpZHRoLCBhLmhlaWdodCksIGkgPSB0LndpZHRoLCBuID0gdC5oZWlnaHQsIGYgPSB0LmRhdGEsIHUgPSAwLCBvID0gMDsKICBzd2l0Y2ggKGEuY29tcG9uZW50cy5sZW5ndGgpIHsKICAgIGNhc2UgMToKICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBuOyBsKyspCiAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCBpOyBzKyspIHsKICAgICAgICAgIHZhciBjID0gQVt1KytdOwogICAgICAgICAgZltvKytdID0gYywgZltvKytdID0gYywgZltvKytdID0gYywgZltvKytdID0gMjU1OwogICAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbjsgbCsrKQogICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgaTsgcysrKSB7CiAgICAgICAgICB2YXIgZCA9IEFbdSsrXSwgdiA9IEFbdSsrXSwgayA9IEFbdSsrXTsKICAgICAgICAgIGZbbysrXSA9IGQsIGZbbysrXSA9IHYsIGZbbysrXSA9IGssIGZbbysrXSA9IDI1NTsKICAgICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG47IGwrKykKICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGk7IHMrKykgewogICAgICAgICAgdmFyIEUgPSBBW3UrK10sIGcgPSBBW3UrK10sIGMgPSBBW3UrK10sIHcgPSBBW3UrK10sIGQgPSAyNTUgLSByYShFICogKDEgLSB3IC8gMjU1KSArIHcpLCB2ID0gMjU1IC0gcmEoZyAqICgxIC0gdyAvIDI1NSkgKyB3KSwgayA9IDI1NSAtIHJhKGMgKiAoMSAtIHcgLyAyNTUpICsgdyk7CiAgICAgICAgICBmW28rK10gPSBkLCBmW28rK10gPSB2LCBmW28rK10gPSBrLCBmW28rK10gPSAyNTU7CiAgICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpOwogIH0KICByZXR1cm4gdDsKfQp2YXIgZGwgPSAhMSwgWGUgPSB7fSwgSmEgPSB7CiAgcGFzczogInBhc3MgdGhyb3VnaCIsCiAgbm9ybTogIm5vcm1hbCIsCiAgZGlzczogImRpc3NvbHZlIiwKICBkYXJrOiAiZGFya2VuIiwKICAibXVsICI6ICJtdWx0aXBseSIsCiAgaWRpdjogImNvbG9yIGJ1cm4iLAogIGxicm46ICJsaW5lYXIgYnVybiIsCiAgZGtDbDogImRhcmtlciBjb2xvciIsCiAgbGl0ZTogImxpZ2h0ZW4iLAogIHNjcm46ICJzY3JlZW4iLAogICJkaXYgIjogImNvbG9yIGRvZGdlIiwKICBsZGRnOiAibGluZWFyIGRvZGdlIiwKICBsZ0NsOiAibGlnaHRlciBjb2xvciIsCiAgb3ZlcjogIm92ZXJsYXkiLAogIHNMaXQ6ICJzb2Z0IGxpZ2h0IiwKICBoTGl0OiAiaGFyZCBsaWdodCIsCiAgdkxpdDogInZpdmlkIGxpZ2h0IiwKICBsTGl0OiAibGluZWFyIGxpZ2h0IiwKICBwTGl0OiAicGluIGxpZ2h0IiwKICBoTWl4OiAiaGFyZCBtaXgiLAogIGRpZmY6ICJkaWZmZXJlbmNlIiwKICBzbXVkOiAiZXhjbHVzaW9uIiwKICBmc3ViOiAic3VidHJhY3QiLAogIGZkaXY6ICJkaXZpZGUiLAogICJodWUgIjogImh1ZSIsCiAgInNhdCAiOiAic2F0dXJhdGlvbiIsCiAgY29scjogImNvbG9yIiwKICAibHVtICI6ICJsdW1pbm9zaXR5Igp9OwpPYmplY3Qua2V5cyhKYSkuZm9yRWFjaChmdW5jdGlvbihyKSB7CiAgcmV0dXJuIFhlW0phW3JdXSA9IHI7Cn0pOwp2YXIgVHQgPSBbCiAgIm5vbmUiLAogICJyZWQiLAogICJvcmFuZ2UiLAogICJ5ZWxsb3ciLAogICJncmVlbiIsCiAgImJsdWUiLAogICJ2aW9sZXQiLAogICJncmF5IgpdLCBYbiA9IFsKICAvLyBmcm9tIGRvY3VtZW50YXRpb24KICAiTE1zayIsCiAgIkxyMTYiLAogICJMcjMyIiwKICAiTGF5ciIsCiAgIk10MTYiLAogICJNdDMyIiwKICAiTXRybiIsCiAgIkFscGgiLAogICJGTXNrIiwKICAibG5rMiIsCiAgIkZFaWQiLAogICJGWGlkIiwKICAiUHhTRCIsCiAgLy8gZnJvbSBndWVzc2luZwogICJjaW5mIgpdOwpmdW5jdGlvbiBobChyKSB7CiAgdmFyIGUgPSB7fTsKICByZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gZVtyW2FdXSA9IGE7CiAgfSksIGU7Cn0KZnVuY3Rpb24gdTAociwgZSwgYSkgewogIHZhciBBID0gaGwoYSksIHQgPSBmdW5jdGlvbihuKSB7CiAgICB2YXIgZiA9IG4uc3BsaXQoIi4iKVsxXTsKICAgIGlmIChmICYmICFBW2ZdKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB2YWx1ZSBmb3IgZW51bTogJyIuY29uY2F0KG4sICInIikpOwogICAgcmV0dXJuIEFbZl0gfHwgZTsKICB9LCBpID0gZnVuY3Rpb24obikgewogICAgaWYgKG4gJiYgIWFbbl0pCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgZW51bTogJyIuY29uY2F0KG4sICInIikpOwogICAgcmV0dXJuICIiLmNvbmNhdChyLCAiLiIpLmNvbmNhdChhW25dIHx8IGFbZV0pOwogIH07CiAgcmV0dXJuIHsgZGVjb2RlOiB0LCBlbmNvZGU6IGkgfTsKfQp2YXIgUHQ7CihmdW5jdGlvbihyKSB7CiAgcltyLlJHQiA9IDBdID0gIlJHQiIsIHJbci5IU0IgPSAxXSA9ICJIU0IiLCByW3IuQ01ZSyA9IDJdID0gIkNNWUsiLCByW3IuTGFiID0gN10gPSAiTGFiIiwgcltyLkdyYXlzY2FsZSA9IDhdID0gIkdyYXlzY2FsZSI7Cn0pKFB0IHx8IChQdCA9IHt9KSk7CnZhciBZdDsKKGZ1bmN0aW9uKHIpIHsKICByW3IuUG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAxXSA9ICJQb3NpdGlvblJlbGF0aXZlVG9MYXllciIsIHJbci5MYXllck1hc2tEaXNhYmxlZCA9IDJdID0gIkxheWVyTWFza0Rpc2FibGVkIiwgcltyLkludmVydExheWVyTWFza1doZW5CbGVuZGluZyA9IDRdID0gIkludmVydExheWVyTWFza1doZW5CbGVuZGluZyIsIHJbci5MYXllck1hc2tGcm9tUmVuZGVyaW5nT3RoZXJEYXRhID0gOF0gPSAiTGF5ZXJNYXNrRnJvbVJlbmRlcmluZ090aGVyRGF0YSIsIHJbci5NYXNrSGFzUGFyYW1ldGVyc0FwcGxpZWRUb0l0ID0gMTZdID0gIk1hc2tIYXNQYXJhbWV0ZXJzQXBwbGllZFRvSXQiOwp9KShZdCB8fCAoWXQgPSB7fSkpOwp2YXIgT3Q7CihmdW5jdGlvbihyKSB7CiAgcltyLlVzZXJNYXNrRGVuc2l0eSA9IDFdID0gIlVzZXJNYXNrRGVuc2l0eSIsIHJbci5Vc2VyTWFza0ZlYXRoZXIgPSAyXSA9ICJVc2VyTWFza0ZlYXRoZXIiLCByW3IuVmVjdG9yTWFza0RlbnNpdHkgPSA0XSA9ICJWZWN0b3JNYXNrRGVuc2l0eSIsIHJbci5WZWN0b3JNYXNrRmVhdGhlciA9IDhdID0gIlZlY3Rvck1hc2tGZWF0aGVyIjsKfSkoT3QgfHwgKE90ID0ge30pKTsKZnVuY3Rpb24gUm4ociwgZSkgewogIHN3aXRjaCAocikgewogICAgY2FzZSAwOgogICAgICByZXR1cm4gMDsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIDE7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiAyOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gZSA/IDMgOiByICsgMTsKICAgIGNhc2UgLTE6CiAgICAgIHJldHVybiBlID8gNCA6IDM7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gciArIDE7CiAgfQp9CmZ1bmN0aW9uIE1BKHIsIGUsIGEpIHsKICByZXR1cm4gciA8IGUgPyBlIDogciA+IGEgPyBhIDogcjsKfQpmdW5jdGlvbiBWbihyKSB7CiAgZm9yICh2YXIgZSA9IHIud2lkdGggKiByLmhlaWdodCAqIDQsIGEgPSAzOyBhIDwgZTsgYSArPSA0KQogICAgaWYgKHIuZGF0YVthXSAhPT0gMjU1KQogICAgICByZXR1cm4gITA7CiAgcmV0dXJuICExOwp9CmZ1bmN0aW9uIHZsKHIpIHsKICBmb3IgKHZhciBlID0gci5kYXRhLCBhID0gZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSA/IDEgOiBlIGluc3RhbmNlb2YgVWludDE2QXJyYXkgPyA2NTUzNSA6IDI1NSwgQSA9IDAsIHQgPSBlLmxlbmd0aCB8IDA7IEEgPCB0OyBBID0gQSArIDQgfCAwKQogICAgZVtBICsgMF0gPSAwLCBlW0EgKyAxXSA9IDAsIGVbQSArIDJdID0gMCwgZVtBICsgM10gPSBhOwp9CmZ1bmN0aW9uIG1lKHIpIHsKICB2YXIgZSA9IGEyKHIud2lkdGgsIHIuaGVpZ2h0KSwgYTsKICBpZiAoci5kYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpCiAgICBhID0gcjsKICBlbHNlIHsKICAgIGEgPSBIYShyLndpZHRoLCByLmhlaWdodCk7CiAgICB2YXIgQSA9IHIuZGF0YSwgdCA9IGEuZGF0YTsKICAgIGlmIChBIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KQogICAgICBmb3IgKHZhciBpID0gMCwgbiA9IEEubGVuZ3RoOyBpIDwgbjsgaSArPSA0KQogICAgICAgIHRbaSArIDBdID0gTWF0aC5yb3VuZChNYXRoLnBvdyhBW2kgKyAwXSwgMSAvIDIuMikgKiAyNTUpLCB0W2kgKyAxXSA9IE1hdGgucm91bmQoTWF0aC5wb3coQVtpICsgMV0sIDEgLyAyLjIpICogMjU1KSwgdFtpICsgMl0gPSBNYXRoLnJvdW5kKE1hdGgucG93KEFbaSArIDJdLCAxIC8gMi4yKSAqIDI1NSksIHRbaSArIDNdID0gTWF0aC5yb3VuZChBW2kgKyAzXSAqIDI1NSk7CiAgICBlbHNlCiAgICAgIGZvciAodmFyIGYgPSBBIGluc3RhbmNlb2YgVWludDE2QXJyYXkgPyA4IDogMCwgaSA9IDAsIG4gPSBBLmxlbmd0aDsgaSA8IG47IGkrKykKICAgICAgICB0W2ldID0gQVtpXSA+Pj4gZjsKICB9CiAgcmV0dXJuIGUuZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEoYSwgMCwgMCksIGU7Cn0KZnVuY3Rpb24ga2wociwgZSwgYSwgQSkgewogIGlmICghKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYml0IGRlcHRoIik7CiAgZm9yICh2YXIgdCA9IDAsIGkgPSAwLCBuID0gMDsgdCA8IEE7IHQrKykKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYTsgKQogICAgICBmb3IgKHZhciB1ID0gcltuKytdLCBvID0gMDsgbyA8IDggJiYgZiA8IGE7IG8rKywgZisrLCBpICs9IDQpIHsKICAgICAgICB2YXIgbCA9IHUgJiAxMjggPyAwIDogMjU1OwogICAgICAgIHUgPSB1IDw8IDEsIGVbaSArIDBdID0gbCwgZVtpICsgMV0gPSBsLCBlW2kgKyAyXSA9IGwsIGVbaSArIDNdID0gMjU1OwogICAgICB9Cn0KZnVuY3Rpb24gVEEociwgZSwgYSwgQSkgewogIHZhciB0ID0gZS5kYXRhLCBpID0gZS53aWR0aCwgbiA9IGUuaGVpZ2h0OwogIGlmICghKCFpIHx8ICFuKSkgewogICAgZm9yICh2YXIgZiA9IDQgKiBpIHwgMCwgdSA9IDAsIG8gPSBhLmxlbmd0aCAqIChBID8gNCA6IDIpICogbiB8IDAsIGwgPSAwLCBzID0gYTsgbCA8IHMubGVuZ3RoOyBsKyspCiAgICAgIGZvciAodmFyIGMgPSBzW2xdLCBkID0gMCwgdiA9IGMgfCAwOyBkIDwgbjsgZCsrKSB7CiAgICAgICAgdmFyIGsgPSBkICogZiB8IDAsIEUgPSBrICsgZiB8IDAsIGcgPSBFICsgYyAtIDQgfCAwLCB3ID0gZyAtIDQgfCAwLCBCID0gbzsKICAgICAgICBmb3IgKHYgPSBrICsgYyB8IDA7IHYgPCBFOyB2ID0gdiArIDQgfCAwKQogICAgICAgICAgaWYgKHYgPCB3KSB7CiAgICAgICAgICAgIHZhciBtID0gdFt2XTsKICAgICAgICAgICAgdiA9IHYgKyA0IHwgMDsKICAgICAgICAgICAgdmFyIHAgPSB0W3ZdOwogICAgICAgICAgICB2ID0gdiArIDQgfCAwOwogICAgICAgICAgICB2YXIgVyA9IHRbdl07CiAgICAgICAgICAgIGlmIChtID09PSBwICYmIG0gPT09IFcpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBDID0gMzsgQyA8IDEyOCAmJiB2IDwgZyAmJiB0W3YgKyA0IHwgMF0gPT09IG07ICkKICAgICAgICAgICAgICAgIEMgPSBDICsgMSB8IDAsIHYgPSB2ICsgNCB8IDA7CiAgICAgICAgICAgICAgcltvKytdID0gMSAtIEMsIHJbbysrXSA9IG07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIF8gPSBvLCBOID0gITAsIEMgPSAxOwogICAgICAgICAgICAgIGZvciAocltvKytdID0gMCwgcltvKytdID0gbTsgdiA8IGcgJiYgQyA8IDEyODsgKQogICAgICAgICAgICAgICAgaWYgKHYgPSB2ICsgNCB8IDAsIG0gPSBwLCBwID0gVywgVyA9IHRbdl0sIG0gPT09IHAgJiYgbSA9PT0gVykgewogICAgICAgICAgICAgICAgICB2ID0gdiAtIDEyIHwgMCwgTiA9ICExOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICBDKyssIHJbbysrXSA9IG07CiAgICAgICAgICAgICAgTiAmJiAoQyA8IDEyNyA/IChyW28rK10gPSBwLCByW28rK10gPSBXLCBDICs9IDIpIDogQyA8IDEyOCA/IChyW28rK10gPSBwLCBDKyssIHYgPSB2IC0gNCB8IDApIDogdiA9IHYgLSA4IHwgMCksIHJbX10gPSBDIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHYgPT09IGcgPyAocltvKytdID0gMCwgcltvKytdID0gdFt2XSkgOiAocltvKytdID0gMSwgcltvKytdID0gdFt2XSwgdiA9IHYgKyA0IHwgMCwgcltvKytdID0gdFt2XSk7CiAgICAgICAgdmFyIEQgPSBvIC0gQjsKICAgICAgICBBICYmIChyW3UrK10gPSBEID4+IDI0ICYgMjU1LCByW3UrK10gPSBEID4+IDE2ICYgMjU1KSwgclt1KytdID0gRCA+PiA4ICYgMjU1LCByW3UrK10gPSBEICYgMjU1OwogICAgICB9CiAgICByZXR1cm4gci5zbGljZSgwLCBvKTsKICB9Cn0KZnVuY3Rpb24gU24ociwgZSkgewogIGZvciAodmFyIGEgPSByLmRhdGEsIEEgPSByLndpZHRoLCB0ID0gci5oZWlnaHQsIGkgPSBBICogdCwgbiA9IG5ldyBVaW50OEFycmF5KGkpLCBmID0gW10sIHUgPSAwLCBvID0gMCwgbCA9IGU7IG8gPCBsLmxlbmd0aDsgbysrKSB7CiAgICBmb3IgKHZhciBzID0gbFtvXSwgYyA9IDAsIGQgPSBzOyBjIDwgaTsgYysrLCBkICs9IDQpCiAgICAgIG5bY10gPSBhW2RdOwogICAgdmFyIHYgPSBpbChuKTsKICAgIGYucHVzaCh2KSwgdSArPSB2LmJ5dGVMZW5ndGg7CiAgfQogIGlmIChmLmxlbmd0aCA+IDApIHsKICAgIGZvciAodmFyIHYgPSBuZXcgVWludDhBcnJheSh1KSwgcyA9IDAsIGsgPSAwLCBFID0gZjsgayA8IEUubGVuZ3RoOyBrKyspIHsKICAgICAgdmFyIGcgPSBFW2tdOwogICAgICB2LnNldChnLCBzKSwgcyArPSBnLmJ5dGVMZW5ndGg7CiAgICB9CiAgICByZXR1cm4gdjsKICB9IGVsc2UKICAgIHJldHVybiBmWzBdOwp9CmZ1bmN0aW9uIGdsKHIpIHsKICB2YXIgZSA9IGEyKDEwMCwgMTAwKTsKICB0cnkgewogICAgdmFyIGEgPSBlLmdldENvbnRleHQoIjJkIiksIEEgPSBibChyLCBmdW5jdGlvbih0LCBpKSB7CiAgICAgIHJldHVybiBhLmNyZWF0ZUltYWdlRGF0YSh0LCBpKTsKICAgIH0pOwogICAgZS53aWR0aCA9IEEud2lkdGgsIGUuaGVpZ2h0ID0gQS5oZWlnaHQsIGEucHV0SW1hZ2VEYXRhKEEsIDAsIDApOwogIH0gY2F0Y2ggKHQpIHsKICAgIGNvbnNvbGUuZXJyb3IoIkpQRUcgZGVjb21wcmVzc2lvbiBlcnJvciIsIHQubWVzc2FnZSk7CiAgfQogIHJldHVybiBlOwp9CnZhciBhMiA9IGZ1bmN0aW9uKCkgewogIHRocm93IG5ldyBFcnJvcigiQ2FudmFzIG5vdCBpbml0aWFsaXplZCwgdXNlIGluaXRpYWxpemVDYW52YXMgbWV0aG9kIHRvIHNldCB1cCBjcmVhdGVDYW52YXMgbWV0aG9kIik7Cn0sIHFlID0gdm9pZCAwLCBIYSA9IGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gcWUgfHwgKHFlID0gYTIoMSwgMSkpLCBxZS5nZXRDb250ZXh0KCIyZCIpLmNyZWF0ZUltYWdlRGF0YShyLCBlKTsKfTsKdHlwZW9mIGRvY3VtZW50IDwgInUiICYmIChhMiA9IGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogIHJldHVybiBhLndpZHRoID0gciwgYS5oZWlnaHQgPSBlLCBhOwp9KTsKZnVuY3Rpb24gbWwociwgZSkgewogIGEyID0gciwgSGEgPSBlIHx8IEhhOwp9CnZhciBEbiA9IFpsLCB4biA9IEZsLCBVciA9IFtdLCBaciA9IFtdLCBwbCA9IHR5cGVvZiBVaW50OEFycmF5IDwgInUiID8gVWludDhBcnJheSA6IEFycmF5LCAkZSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKZm9yICh2YXIgVmEgPSAwLCB3bCA9ICRlLmxlbmd0aDsgVmEgPCB3bDsgKytWYSkKICBVcltWYV0gPSAkZVtWYV0sIFpyWyRlLmNoYXJDb2RlQXQoVmEpXSA9IFZhOwpacls0NV0gPSA2MjsKWnJbOTVdID0gNjM7CmZ1bmN0aW9uIHlsKHIpIHsKICB2YXIgZSA9IHIubGVuZ3RoOwogIGlmIChlICUgNCA+IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTsKICB2YXIgYSA9IHIuaW5kZXhPZigiPSIpOwogIGEgPT09IC0xICYmIChhID0gZSk7CiAgdmFyIEEgPSBhID09PSBlID8gMCA6IDQgLSBhICUgNDsKICByZXR1cm4gW2EsIEFdOwp9CmZ1bmN0aW9uIEVsKHIsIGUsIGEpIHsKICByZXR1cm4gKGUgKyBhKSAqIDMgLyA0IC0gYTsKfQpmdW5jdGlvbiBabChyKSB7CiAgdmFyIGUsIGEgPSB5bChyKSwgQSA9IGFbMF0sIHQgPSBhWzFdLCBpID0gbmV3IHBsKEVsKHIsIEEsIHQpKSwgbiA9IDAsIGYgPSB0ID4gMCA/IEEgLSA0IDogQSwgdTsKICBmb3IgKHUgPSAwOyB1IDwgZjsgdSArPSA0KQogICAgZSA9IFpyW3IuY2hhckNvZGVBdCh1KV0gPDwgMTggfCBacltyLmNoYXJDb2RlQXQodSArIDEpXSA8PCAxMiB8IFpyW3IuY2hhckNvZGVBdCh1ICsgMildIDw8IDYgfCBacltyLmNoYXJDb2RlQXQodSArIDMpXSwgaVtuKytdID0gZSA+PiAxNiAmIDI1NSwgaVtuKytdID0gZSA+PiA4ICYgMjU1LCBpW24rK10gPSBlICYgMjU1OwogIHJldHVybiB0ID09PSAyICYmIChlID0gWnJbci5jaGFyQ29kZUF0KHUpXSA8PCAyIHwgWnJbci5jaGFyQ29kZUF0KHUgKyAxKV0gPj4gNCwgaVtuKytdID0gZSAmIDI1NSksIHQgPT09IDEgJiYgKGUgPSBacltyLmNoYXJDb2RlQXQodSldIDw8IDEwIHwgWnJbci5jaGFyQ29kZUF0KHUgKyAxKV0gPDwgNCB8IFpyW3IuY2hhckNvZGVBdCh1ICsgMildID4+IDIsIGlbbisrXSA9IGUgPj4gOCAmIDI1NSwgaVtuKytdID0gZSAmIDI1NSksIGk7Cn0KZnVuY3Rpb24gQmwocikgewogIHJldHVybiBVcltyID4+IDE4ICYgNjNdICsgVXJbciA+PiAxMiAmIDYzXSArIFVyW3IgPj4gNiAmIDYzXSArIFVyW3IgJiA2M107Cn0KZnVuY3Rpb24gSWwociwgZSwgYSkgewogIGZvciAodmFyIEEsIHQgPSBbXSwgaSA9IGU7IGkgPCBhOyBpICs9IDMpCiAgICBBID0gKHJbaV0gPDwgMTYgJiAxNjcxMTY4MCkgKyAocltpICsgMV0gPDwgOCAmIDY1MjgwKSArIChyW2kgKyAyXSAmIDI1NSksIHQucHVzaChCbChBKSk7CiAgcmV0dXJuIHQuam9pbigiIik7Cn0KZnVuY3Rpb24gRmwocikgewogIGZvciAodmFyIGUsIGEgPSByLmxlbmd0aCwgQSA9IGEgJSAzLCB0ID0gW10sIGkgPSAxNjM4MywgbiA9IDAsIGYgPSBhIC0gQTsgbiA8IGY7IG4gKz0gaSkKICAgIHQucHVzaChJbChyLCBuLCBuICsgaSA+IGYgPyBmIDogbiArIGkpKTsKICByZXR1cm4gQSA9PT0gMSA/IChlID0gclthIC0gMV0sIHQucHVzaCgKICAgIFVyW2UgPj4gMl0gKyBVcltlIDw8IDQgJiA2M10gKyAiPT0iCiAgKSkgOiBBID09PSAyICYmIChlID0gKHJbYSAtIDJdIDw8IDgpICsgclthIC0gMV0sIHQucHVzaCgKICAgIFVyW2UgPj4gMTBdICsgVXJbZSA+PiA0ICYgNjNdICsgVXJbZSA8PCAyICYgNjNdICsgIj0iCiAgKSksIHQuam9pbigiIik7Cn0KZnVuY3Rpb24gRUEocikgewogIHJldHVybiByICYgNDI5NDk2NzE2OCA/IHIgJiA0Mjk0OTY1MjQ4ID8gciAmIDQyOTQ5MDE3NjAgPyA0IDogMyA6IDIgOiAxOwp9CmZ1bmN0aW9uIENsKHIpIHsKICBmb3IgKHZhciBlID0gMCwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgQSA9IHIuY2hhckNvZGVBdChhKTsKICAgIGlmIChBID49IDU1Mjk2ICYmIEEgPD0gNTYzMTkpIHsKICAgICAgaWYgKGEgKyAxIDwgci5sZW5ndGgpIHsKICAgICAgICB2YXIgdCA9IHIuY2hhckNvZGVBdChhICsgMSk7CiAgICAgICAgKHQgJiA2NDUxMikgPT09IDU2MzIwICYmIChhKyssIGUgKz0gRUEoKChBICYgMTAyMykgPDwgMTApICsgKHQgJiAxMDIzKSArIDY1NTM2KSk7CiAgICAgIH0KICAgIH0gZWxzZQogICAgICBlICs9IEVBKEEpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBVdChyLCBlLCBhKSB7CiAgdmFyIEEgPSBFQShhKTsKICBzd2l0Y2ggKEEpIHsKICAgIGNhc2UgMToKICAgICAgcltlXSA9IGE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICByW2VdID0gYSA+PiA2ICYgMzEgfCAxOTIsIHJbZSArIDFdID0gYSAmIDYzIHwgMTI4OwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgcltlXSA9IGEgPj4gMTIgJiAxNSB8IDIyNCwgcltlICsgMV0gPSBhID4+IDYgJiA2MyB8IDEyOCwgcltlICsgMl0gPSBhICYgNjMgfCAxMjg7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcltlXSA9IGEgPj4gMTggJiA3IHwgMjQwLCByW2UgKyAxXSA9IGEgPj4gMTIgJiA2MyB8IDEyOCwgcltlICsgMl0gPSBhID4+IDYgJiA2MyB8IDEyOCwgcltlICsgM10gPSBhICYgNjMgfCAxMjg7CiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gQTsKfQpmdW5jdGlvbiBXbChyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSA9IDA7IEEgPCBhLmxlbmd0aDsgQSsrKSB7CiAgICB2YXIgdCA9IGEuY2hhckNvZGVBdChBKTsKICAgIGlmICh0ID49IDU1Mjk2ICYmIHQgPD0gNTYzMTkpIHsKICAgICAgaWYgKEEgKyAxIDwgYS5sZW5ndGgpIHsKICAgICAgICB2YXIgaSA9IGEuY2hhckNvZGVBdChBICsgMSk7CiAgICAgICAgaWYgKChpICYgNjQ1MTIpID09PSA1NjMyMCkgewogICAgICAgICAgQSsrOwogICAgICAgICAgdmFyIG4gPSAoKHQgJiAxMDIzKSA8PCAxMCkgKyAoaSAmIDEwMjMpICsgNjU1MzY7CiAgICAgICAgICBlICs9IFV0KHIsIGUsIG4pOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlCiAgICAgIGUgKz0gVXQociwgZSwgdCk7CiAgfQogIHJldHVybiBlOwp9CmZ1bmN0aW9uIE5uKHIpIHsKICBpZiAoci5sZW5ndGggPiAxZTMgJiYgdHlwZW9mIFRleHRFbmNvZGVyIDwgInUiKQogICAgcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyKTsKICB2YXIgZSA9IG5ldyBVaW50OEFycmF5KENsKHIpKTsKICByZXR1cm4gV2woZSwgMCwgciksIGU7Cn0KZnVuY3Rpb24gU2EociwgZSkgewogIGlmIChlID49IHIubGVuZ3RoKQogICAgdGhyb3cgRXJyb3IoIkludmFsaWQgYnl0ZSBpbmRleCIpOwogIHZhciBhID0gcltlXTsKICBpZiAoKGEgJiAxOTIpID09PSAxMjgpCiAgICByZXR1cm4gYSAmIDYzOwogIHRocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIik7Cn0KZnVuY3Rpb24gTW4ocikgewogIGlmIChyLmJ5dGVMZW5ndGggPiAxZTMgJiYgdHlwZW9mIFRleHREZWNvZGVyIDwgInUiKQogICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShyKTsKICBmb3IgKHZhciBlID0gW10sIGEgPSAwOyBhIDwgci5sZW5ndGg7ICkgewogICAgdmFyIEEgPSByW2ErK10sIHQgPSB2b2lkIDA7CiAgICBpZiAoIShBICYgMTI4KSkKICAgICAgdCA9IEE7CiAgICBlbHNlIGlmICgoQSAmIDIyNCkgPT09IDE5MikgewogICAgICB2YXIgaSA9IFNhKHIsIGErKyk7CiAgICAgIGlmICh0ID0gKEEgJiAzMSkgPDwgNiB8IGksIHQgPCAxMjgpCiAgICAgICAgdGhyb3cgRXJyb3IoIkludmFsaWQgY29udGludWF0aW9uIGJ5dGUiKTsKICAgIH0gZWxzZSBpZiAoKEEgJiAyNDApID09PSAyMjQpIHsKICAgICAgdmFyIGkgPSBTYShyLCBhKyspLCBuID0gU2EociwgYSsrKTsKICAgICAgaWYgKHQgPSAoQSAmIDE1KSA8PCAxMiB8IGkgPDwgNiB8IG4sIHQgPCAyMDQ4KQogICAgICAgIHRocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIik7CiAgICAgIGlmICh0ID49IDU1Mjk2ICYmIHQgPD0gNTczNDMpCiAgICAgICAgdGhyb3cgRXJyb3IoIkxvbmUgc3Vycm9nYXRlIFUrIi5jb25jYXQodC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwgIiBpcyBub3QgYSBzY2FsYXIgdmFsdWUiKSk7CiAgICB9IGVsc2UgaWYgKChBICYgMjQ4KSA9PT0gMjQwKSB7CiAgICAgIHZhciBpID0gU2EociwgYSsrKSwgbiA9IFNhKHIsIGErKyksIGYgPSBTYShyLCBhKyspOwogICAgICBpZiAodCA9IChBICYgMTUpIDw8IDE4IHwgaSA8PCAxMiB8IG4gPDwgNiB8IGYsIHQgPCA2NTUzNiB8fCB0ID4gMTExNDExMSkKICAgICAgICB0aHJvdyBFcnJvcigiSW52YWxpZCBjb250aW51YXRpb24gYnl0ZSIpOwogICAgfSBlbHNlCiAgICAgIHRocm93IEVycm9yKCJJbnZhbGlkIFVURi04IGRldGVjdGVkIik7CiAgICB0ID4gNjU1MzUgJiYgKHQgLT0gNjU1MzYsIGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQgPj4+IDEwICYgMTAyMyB8IDU1Mjk2KSksIHQgPSA1NjMyMCB8IHQgJiAxMDIzKSwgZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpOwogIH0KICByZXR1cm4gZS5qb2luKCIiKTsKfQp2YXIgYWEgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gYWEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgYWEuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwgX2wgPSBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB7fTsKICBmb3IgKHZhciBBIGluIHIpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBBKSAmJiBlLmluZGV4T2YoQSkgPCAwICYmIChhW0FdID0gcltBXSk7CiAgaWYgKHIgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PSAiZnVuY3Rpb24iKQogICAgZm9yICh2YXIgdCA9IDAsIEEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpOyB0IDwgQS5sZW5ndGg7IHQrKykKICAgICAgZS5pbmRleE9mKEFbdF0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwociwgQVt0XSkgJiYgKGFbQVt0XV0gPSByW0FbdF1dKTsKICByZXR1cm4gYTsKfTsKZnVuY3Rpb24gR2wocikgewogIHZhciBlID0ge307CiAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oYSkgewogICAgcmV0dXJuIGVbclthXV0gPSBhOwogIH0pLCBlOwp9CnZhciBiMiA9IHsKICAiI0FuZyI6ICJBbmdsZSIsCiAgIiNSc2wiOiAiRGVuc2l0eSIsCiAgIiNSbHQiOiAiRGlzdGFuY2UiLAogICIjTm5lIjogIk5vbmUiLAogICIjUHJjIjogIlBlcmNlbnQiLAogICIjUHhsIjogIlBpeGVscyIsCiAgIiNNbG0iOiAiTWlsbGltZXRlcnMiLAogICIjUG50IjogIlBvaW50cyIsCiAgUnJQaTogIlBpY2FzIiwKICBSckluOiAiSW5jaGVzIiwKICBSckNtOiAiQ2VudGltZXRlcnMiCn0sICQyID0gR2woYjIpOwpmdW5jdGlvbiBRKHIsIGUpIHsKICByZXR1cm4geyBuYW1lOiByLCBjbGFzc0lEOiBlIH07Cn0KdmFyIHcwID0gUSgiIiwgIm51bGwiKSwgVG4gPSB7CiAgc3Ryb2tlU3R5bGVDb250ZW50OiBRKCIiLCAic29saWRDb2xvckxheWVyIiksCiAgcHJpbnRQcm9vZlNldHVwOiBRKCJQcm9vZiBTZXR1cCIsICJwcm9vZlNldHVwIiksCiAgR3JhZDogUSgiR3JhZGllbnQiLCAiR3JkbiIpLAogIFRybmY6IFEoIlRyYW5zZm9ybSIsICJUcm5mIiksCiAgcGF0dGVybkZpbGw6IFEoIiIsICJwYXR0ZXJuRmlsbCIpLAogIGViYmw6IFEoIiIsICJlYmJsIiksCiAgU29GaTogUSgiIiwgIlNvRmkiKSwKICBHckZsOiBRKCIiLCAiR3JGbCIpLAogIHNkd0M6IFEoIiIsICJSR0JDIiksCiAgaGdsQzogUSgiIiwgIlJHQkMiKSwKICAiQ2xyICI6IFEoIiIsICJSR0JDIiksCiAgdGludENvbG9yOiBRKCIiLCAiUkdCQyIpLAogIE9mc3Q6IFEoIiIsICJQbnQgIiksCiAgQ2hGWDogUSgiIiwgIkNoRlgiKSwKICBNcGdTOiBRKCIiLCAiU2hwQyIpLAogIERyU2g6IFEoIiIsICJEclNoIiksCiAgSXJTaDogUSgiIiwgIklyU2giKSwKICBPckdsOiBRKCIiLCAiT3JHbCIpLAogIElyR2w6IFEoIiIsICJJckdsIiksCiAgVHJuUzogUSgiIiwgIlNocEMiKSwKICBQdHJuOiBRKCIiLCAiUHRybiIpLAogIEZyRlg6IFEoIiIsICJGckZYIiksCiAgcGhhc2U6IFEoIiIsICJQbnQgIiksCiAgZnJhbWVTdGVwOiB3MCwKICBkdXJhdGlvbjogdzAsCiAgd29ya0luVGltZTogdzAsCiAgd29ya091dFRpbWU6IHcwLAogIGF1ZGlvQ2xpcEdyb3VwTGlzdDogdzAsCiAgYm91bmRzOiBRKCIiLCAiUmN0biIpLAogIGN1c3RvbUVudmVsb3BlV2FycDogUSgiIiwgImN1c3RvbUVudmVsb3BlV2FycCIpLAogIHdhcnA6IFEoIiIsICJ3YXJwIiksCiAgIlN6ICAiOiBRKCIiLCAiUG50ICIpLAogIG9yaWdpbjogUSgiIiwgIlBudCAiKSwKICBhdXRvRXhwYW5kT2Zmc2V0OiBRKCIiLCAiUG50ICIpLAogIGtleU9yaWdpblNoYXBlQkJveDogUSgiIiwgInVuaXRSZWN0IiksCiAgVnJzbjogdzAsCiAgcHNWZXJzaW9uOiB3MCwKICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3I6IFEoIiIsICJSR0JDIiksCiAgYXJ0Ym9hcmRSZWN0OiBRKCIiLCAiY2xhc3NGbG9hdFJlY3QiKSwKICBrZXlPcmlnaW5SUmVjdFJhZGlpOiBRKCIiLCAicmFkaWkiKSwKICBrZXlPcmlnaW5Cb3hDb3JuZXJzOiB3MCwKICByZWN0YW5nbGVDb3JuZXJBOiBRKCIiLCAiUG50ICIpLAogIHJlY3RhbmdsZUNvcm5lckI6IFEoIiIsICJQbnQgIiksCiAgcmVjdGFuZ2xlQ29ybmVyQzogUSgiIiwgIlBudCAiKSwKICByZWN0YW5nbGVDb3JuZXJEOiBRKCIiLCAiUG50ICIpLAogIGNvbXBJbmZvOiB3MCwKICBxdWlsdFdhcnA6IFEoIiIsICJxdWlsdFdhcnAiKSwKICBnZW5lcmF0b3JTZXR0aW5nczogdzAsCiAgY3JlbWE6IHcwLAogIEZySW46IHcwLAogIGJsZW5kT3B0aW9uczogdzAsCiAgRlhSZjogdzAsCiAgTGVmeDogdzAsCiAgdGltZTogdzAsCiAgYW5pbUtleTogdzAsCiAgdGltZVNjb3BlOiB3MCwKICBpblRpbWU6IHcwLAogIG91dFRpbWU6IHcwLAogIHNoZWV0U3R5bGU6IHcwLAogIHRyYW5zbGF0aW9uOiB3MCwKICBTa2V3OiB3MCwKICBib3VuZGluZ0JveDogUSgiIiwgImJvdW5kaW5nQm94IiksCiAgIkxuayAiOiBRKCIiLCAiRXh0ZXJuYWxGaWxlTGluayIpLAogIGZyYW1lUmVhZGVyOiBRKCIiLCAiRnJhbWVSZWFkZXIiKSwKICBlZmZlY3RQYXJhbXM6IFEoIiIsICJtb3Rpb25UcmFja0VmZmVjdFBhcmFtcyIpLAogIEltcHI6IFEoIk5vbmUiLCAibm9uZSIpLAogIEFuY2g6IFEoIiIsICJQbnQgIiksCiAgIkZ3ZCAiOiBRKCIiLCAiUG50ICIpLAogICJCd2QgIjogUSgiIiwgIlBudCAiKSwKICBGbHJDOiBRKCIiLCAiUG50ICIpLAogIG1lc2hCb3VuZGFyeVBhdGg6IFEoIiIsICJwYXRoQ2xhc3MiKSwKICBmaWx0ZXJGWDogUSgiIiwgImZpbHRlckZYU3R5bGUiKSwKICBGbHRyOiBRKCIiLCAicmlnaWRUcmFuc2Zvcm0iKSwKICBGcmdDOiBRKCIiLCAiUkdCQyIpLAogIEJja0M6IFEoIiIsICJSR0JDIiksCiAgc2R3TTogUSgiUGFyYW1ldGVycyIsICJhZGFwdENvcnJlY3RUb25lcyIpLAogIGhnbE06IFEoIlBhcmFtZXRlcnMiLCAiYWRhcHRDb3JyZWN0VG9uZXMiKSwKICBjdXN0b21TaGFwZTogUSgiIiwgImN1c3RvbVNoYXBlIiksCiAgb3JpZ0ZYUmVmUG9pbnQ6IHcwLAogIEZYUmVmUG9pbnQ6IHcwLAogIENsTWc6IFEoIiIsICJDbE1nIikKfSwgUG4gPSB7CiAgIkNydiAiOiBRKCIiLCAiQ3JQdCIpLAogIENscnM6IFEoIiIsICJDbHJ0IiksCiAgVHJuczogUSgiIiwgIlRyblMiKSwKICBrZXlEZXNjcmlwdG9yTGlzdDogdzAsCiAgc29saWRGaWxsTXVsdGk6IFEoIiIsICJTb0ZpIiksCiAgZ3JhZGllbnRGaWxsTXVsdGk6IFEoIiIsICJHckZsIiksCiAgZHJvcFNoYWRvd011bHRpOiBRKCIiLCAiRHJTaCIpLAogIGlubmVyU2hhZG93TXVsdGk6IFEoIiIsICJJclNoIiksCiAgZnJhbWVGWE11bHRpOiBRKCIiLCAiRnJGWCIpLAogIEZySW46IHcwLAogIEZTdHM6IHcwLAogIExhU3Q6IHcwLAogIHNoZWV0VGltZWxpbmVPcHRpb25zOiB3MCwKICB0cmFja0xpc3Q6IFEoIiIsICJhbmltYXRpb25UcmFjayIpLAogIGdsb2JhbFRyYWNrTGlzdDogUSgiIiwgImFuaW1hdGlvblRyYWNrIiksCiAga2V5TGlzdDogdzAsCiAgYXVkaW9DbGlwR3JvdXBMaXN0OiB3MCwKICBhdWRpb0NsaXBMaXN0OiB3MCwKICBjb3VudE9iamVjdExpc3Q6IFEoIiIsICJjb3VudE9iamVjdCIpLAogIGNvdW50R3JvdXBMaXN0OiBRKCIiLCAiY291bnRHcm91cCIpLAogIHNsaWNlczogUSgiIiwgInNsaWNlIiksCiAgIlB0cyAiOiBRKCIiLCAiUHRocCIpLAogIFNicEw6IFEoIiIsICJTYnBMIiksCiAgcGF0aENvbXBvbmVudHM6IFEoIiIsICJQYUNtIiksCiAgZmlsdGVyRlhMaXN0OiBRKCIiLCAiZmlsdGVyRlgiKSwKICBwdXBwZXRTaGFwZUxpc3Q6IFEoIiIsICJwdXBwZXRTaGFwZSIpLAogIGNoYW5uZWxEZW5vaXNlOiBRKCIiLCAiY2hhbm5lbERlbm9pc2VQYXJhbXMiKSwKICBTaHJQOiBRKCIiLCAiUG50ICIpLAogIGxheWVyU2V0dGluZ3M6IHcwLAogIGxpc3Q6IHcwLAogIEFkanM6IFEoIiIsICJDcnZBIikKfSwganQgPSB7CiAgVEVYVDogWwogICAgIlR4dCAiLAogICAgInByaW50ZXJOYW1lIiwKICAgICJObSAgIiwKICAgICJJZG50IiwKICAgICJibGFja0FuZFdoaXRlUHJlc2V0RmlsZU5hbWUiLAogICAgIkxVVDNERmlsZU5hbWUiLAogICAgInByZXNldEZpbGVOYW1lIiwKICAgICJjdXJ2ZXNQcmVzZXRGaWxlTmFtZSIsCiAgICAibWl4ZXJQcmVzZXRGaWxlTmFtZSIsCiAgICAicGxhY2VkIiwKICAgICJkZXNjcmlwdGlvbiIsCiAgICAicmVhc29uIiwKICAgICJhcnRib2FyZFByZXNldE5hbWUiLAogICAgImpzb24iLAogICAgImNsaXBJRCIsCiAgICAicmVsUGF0aCIsCiAgICAiZnVsbFBhdGgiLAogICAgIm1lZGlhRGVzY3JpcHRvciIsCiAgICAiTXNnZSIsCiAgICAiYWx0VGFnIiwKICAgICJ1cmwiLAogICAgImNlbGxUZXh0IiwKICAgICJwcmVzZXQiLAogICAgIktuTm0iLAogICAgIkZQdGgiLAogICAgImNvbW1lbnQiLAogICAgIm9yaWdpbmFsUGF0aCIKICBdLAogIHRkdGE6IFsKICAgICJFbmdpbmVEYXRhIiwKICAgICJMVVQzREZpbGVEYXRhIiwKICAgICJpbmRleEFycmF5IiwKICAgICJvcmlnaW5hbFZlcnRleEFycmF5IiwKICAgICJkZWZvcm1lZFZlcnRleEFycmF5IiwKICAgICJMcU1lIgogIF0sCiAgbG9uZzogWwogICAgIlRleHRJbmRleCIsCiAgICAiUm5kUyIsCiAgICAiTWRwbiIsCiAgICAiU210aCIsCiAgICAiTGN0biIsCiAgICAic3Ryb2tlU3R5bGVWZXJzaW9uIiwKICAgICJMYUlEIiwKICAgICJWcnNuIiwKICAgICJDbnQgIiwKICAgICJCcmdoIiwKICAgICJDbnRyIiwKICAgICJtZWFucyIsCiAgICAidmlicmFuY2UiLAogICAgIlN0cnQiLAogICAgImJ3UHJlc2V0S2luZCIsCiAgICAiY29tcCIsCiAgICAiY29tcElEIiwKICAgICJvcmlnaW5hbENvbXBJRCIsCiAgICAiY3VydmVzUHJlc2V0S2luZCIsCiAgICAibWl4ZXJQcmVzZXRLaW5kIiwKICAgICJ1T3JkZXIiLAogICAgInZPcmRlciIsCiAgICAiUGdObSIsCiAgICAidG90YWxQYWdlcyIsCiAgICAiQ3JvcCIsCiAgICAibnVtZXJhdG9yIiwKICAgICJkZW5vbWluYXRvciIsCiAgICAiZnJhbWVDb3VudCIsCiAgICAiQW5udCIsCiAgICAia2V5T3JpZ2luVHlwZSIsCiAgICAidW5pdFZhbHVlUXVhZFZlcnNpb24iLAogICAgImtleU9yaWdpbkluZGV4IiwKICAgICJtYWpvciIsCiAgICAibWlub3IiLAogICAgImZpeCIsCiAgICAiZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGUiLAogICAgImFydGJvYXJkQmFja2dyb3VuZFR5cGUiLAogICAgIm51bU1vZGlmeWluZ0ZYIiwKICAgICJkZWZvcm1OdW1Sb3dzIiwKICAgICJkZWZvcm1OdW1Db2xzIiwKICAgICJGcklEIiwKICAgICJGckRsIiwKICAgICJGc0lEIiwKICAgICJMQ250IiwKICAgICJBRnJtIiwKICAgICJBRlN0IiwKICAgICJudW1CZWZvcmUiLAogICAgIm51bUFmdGVyIiwKICAgICJTcGNuIiwKICAgICJtaW5PcGFjaXR5IiwKICAgICJtYXhPcGFjaXR5IiwKICAgICJCbG5NIiwKICAgICJzaGVldElEIiwKICAgICJnYmxBIiwKICAgICJnbG9iYWxBbHRpdHVkZSIsCiAgICAiZGVzY1ZlcnNpb24iLAogICAgImZyYW1lUmVhZGVyVHlwZSIsCiAgICAiTHlySSIsCiAgICAiem9vbU9yaWdpbiIsCiAgICAiZm9udFNpemUiLAogICAgIlJkcyAiLAogICAgInNsaWNlSUQiLAogICAgInRvcE91dHNldCIsCiAgICAibGVmdE91dHNldCIsCiAgICAiYm90dG9tT3V0c2V0IiwKICAgICJyaWdodE91dHNldCIsCiAgICAiZmlsdGVySUQiLAogICAgIm1lc2hRdWFsaXR5IiwKICAgICJtZXNoRXhwYW5zaW9uIiwKICAgICJtZXNoUmlnaWRpdHkiLAogICAgIlZyc00iLAogICAgIlZyc04iLAogICAgIk5tYkciLAogICAgIldMTW4iLAogICAgIldMTXgiLAogICAgIkFtTW4iLAogICAgIkFtTXgiLAogICAgIlNjbEgiLAogICAgIlNjbFYiLAogICAgIkx2bCAiLAogICAgIlRsTm0iLAogICAgIlRsT2YiLAogICAgIkZsUnMiLAogICAgIlRoc2giLAogICAgIlNoclMiLAogICAgIlNockUiLAogICAgIkZsUnMiLAogICAgIlZybmMiLAogICAgIlN0cmciLAogICAgIkV4dFMiLAogICAgIkV4dEQiLAogICAgIkhyelMiLAogICAgIlZydFMiLAogICAgIk5tYlIiLAogICAgIkVkZ0YiLAogICAgIkFuZzEiLAogICAgIkFuZzIiLAogICAgIkFuZzMiLAogICAgIkFuZzQiLAogICAgImxhc3RBcHBsaWVkQ29tcCIsCiAgICAiY2FwdHVyZWRJbmZvIgogIF0sCiAgZW51bTogWwogICAgInRleHRHcmlkZGluZyIsCiAgICAiT3JudCIsCiAgICAid2FycFN0eWxlIiwKICAgICJ3YXJwUm90YXRlIiwKICAgICJJbnRlIiwKICAgICJCbHRuIiwKICAgICJDbHJTIiwKICAgICJCbHJRIiwKICAgICJidmxUIiwKICAgICJidmxTIiwKICAgICJidmxEIiwKICAgICJNZCAgIiwKICAgICJnbHdTIiwKICAgICJHcmRGIiwKICAgICJHbHdUIiwKICAgICJScGxTIiwKICAgICJCbHJNIiwKICAgICJTbUJNIiwKICAgICJzdHJva2VTdHlsZUxpbmVDYXBUeXBlIiwKICAgICJzdHJva2VTdHlsZUxpbmVKb2luVHlwZSIsCiAgICAic3Ryb2tlU3R5bGVMaW5lQWxpZ25tZW50IiwKICAgICJzdHJva2VTdHlsZUJsZW5kTW9kZSIsCiAgICAiUG50VCIsCiAgICAiU3R5bCIsCiAgICAibG9va3VwVHlwZSIsCiAgICAiTFVURm9ybWF0IiwKICAgICJkYXRhT3JkZXIiLAogICAgInRhYmxlT3JkZXIiLAogICAgImVuYWJsZUNvbXBDb3JlIiwKICAgICJlbmFibGVDb21wQ29yZUdQVSIsCiAgICAiY29tcENvcmVTdXBwb3J0IiwKICAgICJjb21wQ29yZUdQVVN1cHBvcnQiLAogICAgIkVuZ24iLAogICAgImVuYWJsZUNvbXBDb3JlVGhyZWFkcyIsCiAgICAiZ3M5OSIsCiAgICAiRnJEcyIsCiAgICAidHJhY2tJRCIsCiAgICAiYW5pbUludGVycFN0eWxlIiwKICAgICJob3J6QWxpZ24iLAogICAgInZlcnRBbGlnbiIsCiAgICAiYmdDb2xvclR5cGUiLAogICAgInNoYXBlT3BlcmF0aW9uIiwKICAgICJVbmRBIiwKICAgICJXdnRwIiwKICAgICJEcmN0IiwKICAgICJXbmRNIiwKICAgICJFZGcgIiwKICAgICJGbENsIiwKICAgICJJbnRFIiwKICAgICJJbnRDIiwKICAgICJDbnZyIiwKICAgICJGbCAgIiwKICAgICJEc3RyIiwKICAgICJNenRUIiwKICAgICJMbnMgIiwKICAgICJFeHRUIiwKICAgICJEc3BNIiwKICAgICJFeHRSIiwKICAgICJaWlR5IiwKICAgICJTcGhNIiwKICAgICJTbUJRIiwKICAgICJwbGFjZWRMYXllck9DSU9Db252ZXJzaW9uIiwKICAgICJncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kIgogIF0sCiAgYm9vbDogWwogICAgIlBzdFMiLAogICAgInByaW50U2l4dGVlbkJpdCIsCiAgICAibWFzdGVyRlhTd2l0Y2giLAogICAgImVuYWIiLAogICAgInVnbGciLAogICAgImFudGlhbGlhc0dsb3NzIiwKICAgICJ1c2VTaGFwZSIsCiAgICAidXNlVGV4dHVyZSIsCiAgICAidWdsZyIsCiAgICAiYW50aWFsaWFzR2xvc3MiLAogICAgInVzZVNoYXBlIiwKICAgICJWc2JsIiwKICAgICJ1c2VUZXh0dXJlIiwKICAgICJBbGduIiwKICAgICJSdnJzIiwKICAgICJEdGhyIiwKICAgICJJbnZyIiwKICAgICJWY3RDIiwKICAgICJTaFRyIiwKICAgICJsYXllckNvbmNlYWxzIiwKICAgICJzdHJva2VFbmFibGVkIiwKICAgICJmaWxsRW5hYmxlZCIsCiAgICAic3Ryb2tlU3R5bGVTY2FsZUxvY2siLAogICAgInN0cm9rZVN0eWxlU3Ryb2tlQWRqdXN0IiwKICAgICJoYXJkUHJvb2YiLAogICAgIk1wQmwiLAogICAgInBhcGVyV2hpdGUiLAogICAgInVzZUxlZ2FjeSIsCiAgICAiQXV0byIsCiAgICAiTGFiICIsCiAgICAidXNlVGludCIsCiAgICAia2V5U2hhcGVJbnZhbGlkYXRlZCIsCiAgICAiYXV0b0V4cGFuZEVuYWJsZWQiLAogICAgImF1dG9OZXN0RW5hYmxlZCIsCiAgICAiYXV0b1Bvc2l0aW9uRW5hYmxlZCIsCiAgICAic2hyaW5rd3JhcE9uU2F2ZUVuYWJsZWQiLAogICAgInByZXNlbnQiLAogICAgInNob3dJbkRpYWxvZyIsCiAgICAib3ZlcnByaW50IiwKICAgICJzaGVldERpc2Nsb3NlZCIsCiAgICAibGlnaHRzRGlzY2xvc2VkIiwKICAgICJtZXNoZXNEaXNjbG9zZWQiLAogICAgIm1hdGVyaWFsc0Rpc2Nsb3NlZCIsCiAgICAiaGFzTW90aW9uIiwKICAgICJtdXRlZCIsCiAgICAiRWZmYyIsCiAgICAic2VsZWN0ZWQiLAogICAgImF1dG9TY29wZSIsCiAgICAiZmlsbENhbnZhcyIsCiAgICAiY2VsbFRleHRJc0hUTUwiLAogICAgIlNtb28iLAogICAgIkNsc3AiLAogICAgInZhbGlkQXRQb3NpdGlvbiIsCiAgICAicmlnaWRUeXBlIiwKICAgICJoYXNvcHRpb25zIiwKICAgICJmaWx0ZXJNYXNrRW5hYmxlIiwKICAgICJmaWx0ZXJNYXNrTGlua2VkIiwKICAgICJmaWx0ZXJNYXNrRXh0ZW5kV2l0aFdoaXRlIiwKICAgICJyZW1vdmVKUEVHQXJ0aWZhY3QiLAogICAgIk1uY2giLAogICAgIkV4dEYiLAogICAgIkV4dE0iLAogICAgIm1vcmVBY2N1cmF0ZSIsCiAgICAiR3B1WSIsCiAgICAiTElXeSIsCiAgICAiQ250eSIKICBdLAogIGRvdWI6IFsKICAgICJ3YXJwVmFsdWUiLAogICAgIndhcnBQZXJzcGVjdGl2ZSIsCiAgICAid2FycFBlcnNwZWN0aXZlT3RoZXIiLAogICAgIkludHIiLAogICAgIldkdGgiLAogICAgIkhnaHQiLAogICAgInN0cm9rZVN0eWxlTWl0ZXJMaW1pdCIsCiAgICAic3Ryb2tlU3R5bGVSZXNvbHV0aW9uIiwKICAgICJsYXllclRpbWUiLAogICAgImtleU9yaWdpblJlc29sdXRpb24iLAogICAgInh4IiwKICAgICJ4eSIsCiAgICAieXgiLAogICAgInl5IiwKICAgICJ0eCIsCiAgICAidHkiLAogICAgIkZyR0EiLAogICAgImZyYW1lUmF0ZSIsCiAgICAiYXVkaW9MZXZlbCIsCiAgICAicm90YXRpb24iLAogICAgIlggICAiLAogICAgIlkgICAiLAogICAgInJlZEZsb2F0IiwKICAgICJncmVlbkZsb2F0IiwKICAgICJibHVlRmxvYXQiLAogICAgImltYWdlUmVzb2x1dGlvbiIsCiAgICAiUHVYMCIsCiAgICAiUHVYMSIsCiAgICAiUHVYMiIsCiAgICAiUHVYMyIsCiAgICAiUHVZMCIsCiAgICAiUHVZMSIsCiAgICAiUHVZMiIsCiAgICAiUHVZMyIKICBdLAogIFVudEY6IFsKICAgICJzZHdPIiwKICAgICJoZ2xPIiwKICAgICJsYWdsIiwKICAgICJMYWxkIiwKICAgICJzcmdSIiwKICAgICJibHVyIiwKICAgICJTZnRuIiwKICAgICJPcGN0IiwKICAgICJEc3RuIiwKICAgICJBbmdsIiwKICAgICJDa210IiwKICAgICJOb3NlIiwKICAgICJJbnByIiwKICAgICJTaGROIiwKICAgICJzdHJva2VTdHlsZUxpbmVXaWR0aCIsCiAgICAic3Ryb2tlU3R5bGVMaW5lRGFzaE9mZnNldCIsCiAgICAic3Ryb2tlU3R5bGVPcGFjaXR5IiwKICAgICJIICAgIiwKICAgICJUb3AgIiwKICAgICJMZWZ0IiwKICAgICJCdG9tIiwKICAgICJSZ2h0IiwKICAgICJSc2x0IiwKICAgICJ0b3BSaWdodCIsCiAgICAidG9wTGVmdCIsCiAgICAiYm90dG9tTGVmdCIsCiAgICAiYm90dG9tUmlnaHQiLAogICAgIkNsTnMiLAogICAgIlNocnAiCiAgXSwKICBWbExzOiBbCiAgICAiQ3J2ICIsCiAgICAiQ2xycyIsCiAgICAiTW5tICIsCiAgICAiTXhtICIsCiAgICAiVHJucyIsCiAgICAicGF0aExpc3QiLAogICAgInN0cm9rZVN0eWxlTGluZURhc2hTZXQiLAogICAgIkZyTHMiLAogICAgInNsaWNlcyIsCiAgICAiTGFTdCIsCiAgICAiVHJuZiIsCiAgICAibm9uQWZmaW5lVHJhbnNmb3JtIiwKICAgICJrZXlEZXNjcmlwdG9yTGlzdCIsCiAgICAiZ3VpZGVJbmRlY2VzIiwKICAgICJncmFkaWVudEZpbGxNdWx0aSIsCiAgICAic29saWRGaWxsTXVsdGkiLAogICAgImZyYW1lRlhNdWx0aSIsCiAgICAiaW5uZXJTaGFkb3dNdWx0aSIsCiAgICAiZHJvcFNoYWRvd011bHRpIiwKICAgICJGckluIiwKICAgICJGU3RzIiwKICAgICJGc0ZyIiwKICAgICJzaGVldFRpbWVsaW5lT3B0aW9ucyIsCiAgICAiYXVkaW9DbGlwTGlzdCIsCiAgICAidHJhY2tMaXN0IiwKICAgICJnbG9iYWxUcmFja0xpc3QiLAogICAgImtleUxpc3QiLAogICAgImF1ZGlvQ2xpcExpc3QiLAogICAgIndhcnBWYWx1ZXMiLAogICAgInNlbGVjdGVkUGluIiwKICAgICJQdHMgIiwKICAgICJTYnBMIiwKICAgICJwYXRoQ29tcG9uZW50cyIsCiAgICAicGluT2Zmc2V0cyIsCiAgICAicG9zRmluYWxQaW5zIiwKICAgICJwaW5WZXJ0ZXhJbmRpY2VzIiwKICAgICJQaW5QIiwKICAgICJQblJ0IiwKICAgICJQbk92IiwKICAgICJQbkRwIiwKICAgICJmaWx0ZXJGWExpc3QiLAogICAgInB1cHBldFNoYXBlTGlzdCIsCiAgICAiU2hyUCIsCiAgICAiY2hhbm5lbERlbm9pc2UiLAogICAgIk10cngiLAogICAgImxheWVyU2V0dGluZ3MiLAogICAgImxpc3QiLAogICAgImNvbXBMaXN0IiwKICAgICJBZGpzIgogIF0sCiAgT2JBcjogWyJtZXNoUG9pbnRzIiwgInF1aWx0U2xpY2VYIiwgInF1aWx0U2xpY2VZIl0sCiAgIm9iaiAiOiBbIm51bGwiLCAiQ2hubCJdLAogICJQdGggIjogWyJEc3BGIl0KfSwgWGwgPSBbCiAgIlJkICAiLAogICJHcm4gIiwKICAiQmwgICIsCiAgIllsbHciLAogICJZbHcgIiwKICAiQ3luICIsCiAgIk1nbnQiLAogICJCbGNrIiwKICAiR3J5ICIsCiAgIkxtbmMiLAogICJBICAgIiwKICAiQiAgICIKXSwgWW4gPSB7CiAgIk1ubSAiOiAibG9uZyIsCiAgIk14bSAiOiAibG9uZyIsCiAgRnJMczogImxvbmciLAogIHN0cm9rZVN0eWxlTGluZURhc2hTZXQ6ICJVbnRGIiwKICBUcm5mOiAiZG91YiIsCiAgbm9uQWZmaW5lVHJhbnNmb3JtOiAiZG91YiIsCiAga2V5RGVzY3JpcHRvckxpc3Q6ICJPYmpjIiwKICBncmFkaWVudEZpbGxNdWx0aTogIk9iamMiLAogIHNvbGlkRmlsbE11bHRpOiAiT2JqYyIsCiAgZnJhbWVGWE11bHRpOiAiT2JqYyIsCiAgaW5uZXJTaGFkb3dNdWx0aTogIk9iamMiLAogIGRyb3BTaGFkb3dNdWx0aTogIk9iamMiLAogIExhU3Q6ICJPYmpjIiwKICBGckluOiAiT2JqYyIsCiAgRlN0czogIk9iamMiLAogIEZzRnI6ICJsb25nIiwKICBibGVuZE9wdGlvbnM6ICJPYmpjIiwKICBzaGVldFRpbWVsaW5lT3B0aW9uczogIk9iamMiLAogIGtleUxpc3Q6ICJPYmpjIiwKICB3YXJwVmFsdWVzOiAiZG91YiIsCiAgc2VsZWN0ZWRQaW46ICJsb25nIiwKICAiUHRzICI6ICJPYmpjIiwKICBTYnBMOiAiT2JqYyIsCiAgcGF0aENvbXBvbmVudHM6ICJPYmpjIiwKICBwaW5PZmZzZXRzOiAiZG91YiIsCiAgcG9zRmluYWxQaW5zOiAiZG91YiIsCiAgcGluVmVydGV4SW5kaWNlczogImxvbmciLAogIFBpblA6ICJkb3ViIiwKICBQblJ0OiAibG9uZyIsCiAgUG5PdjogImJvb2wiLAogIFBuRHA6ICJkb3ViIiwKICBmaWx0ZXJGWExpc3Q6ICJPYmpjIiwKICBwdXBwZXRTaGFwZUxpc3Q6ICJPYmpjIiwKICBTaHJQOiAiT2JqYyIsCiAgY2hhbm5lbERlbm9pc2U6ICJPYmpjIiwKICBNdHJ4OiAibG9uZyIsCiAgY29tcExpc3Q6ICJsb25nIiwKICBDaG5sOiAiZW51bSIKfSwgcGUgPSB7fTsKZm9yICh2YXIgckEgPSAwLCBRdCA9IE9iamVjdC5rZXlzKGp0KTsgckEgPCBRdC5sZW5ndGg7IHJBKyspCiAgZm9yICh2YXIgSnQgPSBRdFtyQV0sIGFBID0gMCwgSHQgPSBqdFtKdF07IGFBIDwgSHQubGVuZ3RoOyBhQSsrKSB7CiAgICB2YXIgemEgPSBIdFthQV07CiAgICBwZVt6YV0gPSBKdDsKICB9CmZvciAodmFyIGVBID0gMCwgenQgPSBPYmplY3Qua2V5cyhUbik7IGVBIDwgenQubGVuZ3RoOyBlQSsrKSB7CiAgdmFyIHphID0genRbZUFdOwogIHBlW3phXSB8fCAocGVbemFdID0gIk9iamMiKTsKfQpmb3IgKHZhciBBQSA9IDAsIEx0ID0gT2JqZWN0LmtleXMoUG4pOyBBQSA8IEx0Lmxlbmd0aDsgQUErKykgewogIHZhciB6YSA9IEx0W0FBXTsKICBZblt6YV0gPSAiT2JqYyI7Cn0KZnVuY3Rpb24gUmwociwgZSwgYSwgQSkgewogIHJldHVybiByID09PSAicHJlc2V0S2luZCIgPyB0eXBlb2YgZSA9PSAic3RyaW5nIiA/ICJlbnVtIiA6ICJsb25nIiA6IHIgPT09ICJudWxsIiAmJiBhID09PSAic2xpY2VzIiA/ICJURVhUIiA6IHIgPT09ICJncm91cElEIiA/IGEgPT09ICJzbGljZXMiID8gImxvbmciIDogIlRFWFQiIDogciA9PT0gIlN6ICAiID8gIldkdGgiIGluIGUgPyAiT2JqYyIgOiAidW5pdHMiIGluIGUgPyAiVW50RiIgOiAiZG91YiIgOiByID09PSAiVHlwZSIgPyB0eXBlb2YgZSA9PSAic3RyaW5nIiA/ICJlbnVtIiA6ICJsb25nIiA6IHIgPT09ICJBbnRBIiA/IHR5cGVvZiBlID09ICJzdHJpbmciID8gImVudW0iIDogImJvb2wiIDogKHIgPT09ICJIcnpuIiB8fCByID09PSAiVnJ0YyIpICYmIChBLlR5cGUgPT09ICJrZXlUeXBlLlBzdG4iIHx8IEEuX2NsYXNzSUQgPT09ICJPZnN0IikgPyAibG9uZyIgOiByID09PSAiSHJ6biIgfHwgciA9PT0gIlZydGMiIHx8IHIgPT09ICJUb3AgIiB8fCByID09PSAiTGVmdCIgfHwgciA9PT0gIkJ0b20iIHx8IHIgPT09ICJSZ2h0IiA/IGEgPT09ICJzbGljZXMiID8gImxvbmciIDogdHlwZW9mIGUgPT0gIm51bWJlciIgPyAiZG91YiIgOiAiVW50RiIgOiByID09PSAiVnJzbiIgPyB0eXBlb2YgZSA9PSAibnVtYmVyIiA/ICJsb25nIiA6ICJPYmpjIiA6IHIgPT09ICJSZCAgIiB8fCByID09PSAiR3JuICIgfHwgciA9PT0gIkJsICAiID8gYSA9PT0gImFydGQiID8gImxvbmciIDogImRvdWIiIDogciA9PT0gIlRybmYiID8gQXJyYXkuaXNBcnJheShlKSA/ICJWbExzIiA6ICJPYmpjIiA6IHBlW3JdOwp9CmZ1bmN0aW9uIGVhKHIpIHsKICB2YXIgZSA9IEwocik7CiAgcmV0dXJuIFNlKHIsIGUgfHwgNCk7Cn0KZnVuY3Rpb24gQWEociwgZSkgewogIGlmIChlLmxlbmd0aCA9PT0gNCAmJiBlICE9PSAid2FycCIgJiYgZSAhPT0gInRpbWUiICYmIGUgIT09ICJob2xkIiAmJiBlICE9PSAibGlzdCIpCiAgICB0MChyLCAwKSwgbjAociwgZSk7CiAgZWxzZSB7CiAgICB0MChyLCBlLmxlbmd0aCk7CiAgICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICAgIFQociwgZS5jaGFyQ29kZUF0KGEpKTsKICB9Cn0KZnVuY3Rpb24gT24ociwgZSkgewogIGZvciAodmFyIGEgPSB5YShyKSwgQSA9IGUgPyB7IF9uYW1lOiBhLm5hbWUsIF9jbGFzc0lEOiBhLmNsYXNzSUQgfSA6IHt9LCB0ID0gUyhyKSwgaSA9IDA7IGkgPCB0OyBpKyspIHsKICAgIHZhciBuID0gZWEociksIGYgPSBSMChyKSwgdSA9IGpuKHIsIGYsIGUpOwogICAgQVtuXSA9IHU7CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIFVuKHIsIGUsIGEsIEEsIHQpIHsKICBXYShyLCBlKSwgQWEociwgYSk7CiAgdmFyIGkgPSBPYmplY3Qua2V5cyhBKSwgbiA9IGkubGVuZ3RoOwogICJfbmFtZSIgaW4gQSAmJiBuLS0sICJfY2xhc3NJRCIgaW4gQSAmJiBuLS0sIFUociwgbik7CiAgZm9yICh2YXIgZiA9IDAsIHUgPSBpOyBmIDwgdS5sZW5ndGg7IGYrKykgewogICAgdmFyIG8gPSB1W2ZdOwogICAgaWYgKCEobyA9PT0gIl9uYW1lIiB8fCBvID09PSAiX2NsYXNzSUQiKSkgewogICAgICB2YXIgbCA9IFJsKG8sIEFbb10sIHQsIEEpLCBzID0gVG5bb107CiAgICAgIG8gPT09ICJib3VuZHMiICYmIHQgPT09ICJ0ZXh0IiA/IHMgPSBRKCIiLCAiYm91bmRzIikgOiBvID09PSAib3JpZ2luIiA/IGwgPSB0ID09PSAic2xpY2VzIiA/ICJlbnVtIiA6ICJPYmpjIiA6IChvID09PSAiQ3luICIgfHwgbyA9PT0gIk1nbnQiIHx8IG8gPT09ICJZbHcgIiB8fCBvID09PSAiQmxjayIpICYmIEEuX2NsYXNzSUQgPT09ICJDTVlDIiA/IGwgPSAiZG91YiIgOiAvXlBOW2Etel1bYS16XSQvLnRlc3QobykgPyBsID0gIlRFWFQiIDogL15QVFthLXpdW2Etel0kLy50ZXN0KG8pID8gbCA9ICJsb25nIiA6IC9eUEZbYS16XVthLXpdJC8udGVzdChvKSB8fCAobyA9PT0gIlJkcyAiIHx8IG8gPT09ICJUaHNoIikgJiYgdHlwZW9mIEFbb10gPT0gIm51bWJlciIgJiYgQS5fY2xhc3NJRCA9PT0gIlNtckIiID8gbCA9ICJkb3ViIiA6IG8gPT09ICJDbFN6IiB8fCBvID09PSAiUmRzICIgfHwgbyA9PT0gIkFtbnQiID8gbCA9IHR5cGVvZiBBW29dID09ICJudW1iZXIiID8gImxvbmciIDogIlVudEYiIDogKG8gPT09ICJzZHdNIiB8fCBvID09PSAiaGdsTSIpICYmIHR5cGVvZiBBW29dID09ICJzdHJpbmciIHx8IG8gPT09ICJibHVyIiAmJiB0eXBlb2YgQVtvXSA9PSAic3RyaW5nIiA/IGwgPSAiZW51bSIgOiBvID09PSAiSGdodCIgJiYgdHlwZW9mIEFbb10gPT0gIm51bWJlciIgJiYgQS5fY2xhc3NJRCA9PT0gIkVtYnMiIHx8IG8gPT09ICJBbmdsIiAmJiB0eXBlb2YgQVtvXSA9PSAibnVtYmVyIiAmJiAoQS5fY2xhc3NJRCA9PT0gIkVtYnMiIHx8IEEuX2NsYXNzSUQgPT09ICJzbWFydFNoYXJwZW4iIHx8IEEuX2NsYXNzSUQgPT09ICJUd3JsIiB8fCBBLl9jbGFzc0lEID09PSAiTXRuQiIpID8gbCA9ICJsb25nIiA6IG8gPT09ICJBbmdsIiAmJiB0eXBlb2YgQVtvXSA9PSAibnVtYmVyIiA/IGwgPSAiZG91YiIgOiBvID09PSAiYm91bmRzIiAmJiB0ID09PSAic2xpY2VzIiA/IChsID0gIk9iamMiLCBzID0gUSgiIiwgIlJjdDEiKSkgOiBvID09PSAiU2NsICIgPyB0eXBlb2YgQVtvXSA9PSAib2JqZWN0IiAmJiAiSHJ6biIgaW4gQVtvXSA/IChsID0gIk9iamMiLCBzID0gdzApIDogdHlwZW9mIEFbb10gPT0gIm51bWJlciIgPyBsID0gImxvbmciIDogbCA9ICJVbnRGIiA6IG8gPT09ICJhdWRpb0NsaXBHcm91cExpc3QiICYmIGkubGVuZ3RoID09PSAxID8gbCA9ICJWbExzIiA6IChvID09PSAiU3RydCIgfHwgbyA9PT0gIkJyZ2giKSAmJiAiSCAgICIgaW4gQSA/IGwgPSAiZG91YiIgOiBvID09PSAiV2R0aCIgJiYgdHlwZW9mIEFbb10gPT0gIm9iamVjdCIgPyBsID0gIlVudEYiIDogbyA9PT0gIk9mc3QiICYmIHR5cGVvZiBBW29dID09ICJudW1iZXIiID8gbCA9ICJsb25nIiA6IG8gPT09ICJTdHJ0IiAmJiB0eXBlb2YgQVtvXSA9PSAib2JqZWN0IiA/IChsID0gIk9iamMiLCBzID0gdzApIDogWGwuaW5kZXhPZihvKSAhPT0gLTEgPyBsID0gYSA9PT0gIlJHQkMiICYmIHQgIT09ICJhcnRkIiA/ICJkb3ViIiA6ICJsb25nIiA6IG8gPT09ICJwcm9maWxlIiA/IGwgPSBhID09PSAicHJpbnRPdXRwdXQiID8gIlRFWFQiIDogInRkdGEiIDogbyA9PT0gInN0cm9rZVN0eWxlQ29udGVudCIgPyBBW29dWyJDbHIgIl0gPyBzID0gUSgiIiwgInNvbGlkQ29sb3JMYXllciIpIDogQVtvXS5HcmFkID8gcyA9IFEoIiIsICJncmFkaWVudExheWVyIikgOiBBW29dLlB0cm4gJiYgKHMgPSBRKCIiLCAicGF0dGVybkxheWVyIikpIDogbyA9PT0gImJvdW5kcyIgJiYgdCA9PT0gInF1aWx0V2FycCIgJiYgKHMgPSBRKCIiLCAiY2xhc3NGbG9hdFJlY3QiKSksIHMgJiYgcy5jbGFzc0lEID09PSAiUkdCQyIgJiYgIkggICAiIGluIEFbb10gJiYgKHMgPSB7IGNsYXNzSUQ6ICJIU0JDIiwgbmFtZTogIiIgfSksIEFhKHIsIG8pLCBuMChyLCBsIHx8ICJsb25nIiksIFFuKHIsIGwgfHwgImxvbmciLCBBW29dLCBvLCBzLCB0KTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gam4ociwgZSwgYSkgewogIHN3aXRjaCAoZSkgewogICAgY2FzZSAib2JqICI6CiAgICAgIHJldHVybiBTbChyKTsKICAgIGNhc2UgIk9iamMiOgogICAgY2FzZSAiR2xiTyI6CiAgICAgIHJldHVybiBPbihyLCBhKTsKICAgIGNhc2UgIlZsTHMiOiB7CiAgICAgIGZvciAodmFyIEEgPSBMKHIpLCB0ID0gW10sIGkgPSAwOyBpIDwgQTsgaSsrKSB7CiAgICAgICAgdmFyIG4gPSBSMChyKTsKICAgICAgICB0LnB1c2goam4ociwgbiwgYSkpOwogICAgICB9CiAgICAgIHJldHVybiB0OwogICAgfQogICAgY2FzZSAiZG91YiI6CiAgICAgIHJldHVybiBJcihyKTsKICAgIGNhc2UgIlVudEYiOiB7CiAgICAgIHZhciBmID0gUjAociksIHUgPSBJcihyKTsKICAgICAgaWYgKCFiMltmXSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KGYpKTsKICAgICAgcmV0dXJuIHsgdW5pdHM6IGIyW2ZdLCB2YWx1ZTogdSB9OwogICAgfQogICAgY2FzZSAiVW5GbCI6IHsKICAgICAgdmFyIGYgPSBSMChyKSwgdSA9IFJyKHIpOwogICAgICBpZiAoIWIyW2ZdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoZikpOwogICAgICByZXR1cm4geyB1bml0czogYjJbZl0sIHZhbHVlOiB1IH07CiAgICB9CiAgICBjYXNlICJURVhUIjoKICAgICAgcmV0dXJuIHowKHIpOwogICAgY2FzZSAiZW51bSI6IHsKICAgICAgdmFyIG8gPSBlYShyKSwgdSA9IGVhKHIpOwogICAgICByZXR1cm4gIiIuY29uY2F0KG8sICIuIikuY29uY2F0KHUpOwogICAgfQogICAgY2FzZSAibG9uZyI6CiAgICAgIHJldHVybiBMKHIpOwogICAgY2FzZSAiY29tcCI6IHsKICAgICAgdmFyIGwgPSBTKHIpLCBzID0gUyhyKTsKICAgICAgcmV0dXJuIHsgbG93OiBsLCBoaWdoOiBzIH07CiAgICB9CiAgICBjYXNlICJib29sIjoKICAgICAgcmV0dXJuICEhTyhyKTsKICAgIGNhc2UgInR5cGUiOgogICAgY2FzZSAiR2xiQyI6CiAgICAgIHJldHVybiB5YShyKTsKICAgIGNhc2UgImFsaXMiOiB7CiAgICAgIHZhciBjID0gTChyKTsKICAgICAgcmV0dXJuIFNlKHIsIGMpOwogICAgfQogICAgY2FzZSAidGR0YSI6IHsKICAgICAgdmFyIGQgPSBMKHIpOwogICAgICByZXR1cm4gWTAociwgZCk7CiAgICB9CiAgICBjYXNlICJPYkFyIjogewogICAgICBMKHIpLCB6MChyKSwgZWEocik7CiAgICAgIGZvciAodmFyIHYgPSBMKHIpLCB0ID0gW10sIGkgPSAwOyBpIDwgdjsgaSsrKSB7CiAgICAgICAgdmFyIGsgPSBlYShyKTsKICAgICAgICBSMChyKSwgUjAocik7CiAgICAgICAgZm9yICh2YXIgRSA9IEwociksIGcgPSBbXSwgdyA9IDA7IHcgPCBFOyB3KyspCiAgICAgICAgICBnLnB1c2goSXIocikpOwogICAgICAgIHQucHVzaCh7IHR5cGU6IGssIHZhbHVlczogZyB9KTsKICAgICAgfQogICAgICByZXR1cm4gdDsKICAgIH0KICAgIGNhc2UgIlB0aCAiOiB7CiAgICAgIEwocik7CiAgICAgIHZhciBCID0gUjAocik7CiAgICAgIEVpKHIpOwogICAgICB2YXIgbSA9IEVpKHIpLCBwID0gUWwociwgbSk7CiAgICAgIHJldHVybiB7IHNpZzogQiwgcGF0aDogcCB9OwogICAgfQogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFR5U2ggZGVzY3JpcHRvciBPU1R5cGU6ICIuY29uY2F0KGUsICIgYXQgIikuY29uY2F0KHIub2Zmc2V0LnRvU3RyaW5nKDE2KSkpOwogIH0KfQp2YXIgVmwgPSB7CiAgbWVzaFBvaW50czogInJhdGlvbmFsUG9pbnQiLAogIHF1aWx0U2xpY2VYOiAiVW50RiIsCiAgcXVpbHRTbGljZVk6ICJVbnRGIgp9OwpmdW5jdGlvbiBRbihyLCBlLCBhLCBBLCB0LCBpKSB7CiAgc3dpdGNoIChlKSB7CiAgICBjYXNlICJvYmogIjoKICAgICAgRGwociwgQSwgYSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiT2JqYyI6CiAgICBjYXNlICJHbGJPIjogewogICAgICBpZiAodHlwZW9mIGEgIT0gIm9iamVjdCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cnVjdCB2YWx1ZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksICIsIGtleTogIikuY29uY2F0KEEpKTsKICAgICAgaWYgKCF0KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTWlzc2luZyBleHQgdHlwZSBmb3I6ICciLmNvbmNhdChBLCAiJyAoIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiKSIpKTsKICAgICAgdmFyIG4gPSBhLl9uYW1lIHx8IHQubmFtZSwgZiA9IGEuX2NsYXNzSUQgfHwgdC5jbGFzc0lEOwogICAgICBVbihyLCBuLCBmLCBhLCBpKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJWbExzIjoKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGEpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0IHZhbHVlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShhKSwgIiwga2V5OiAiKS5jb25jYXQoQSkpOwogICAgICB0MChyLCBhLmxlbmd0aCk7CiAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgYS5sZW5ndGg7IHUrKykgewogICAgICAgIHZhciBvID0gWW5bQV07CiAgICAgICAgbjAociwgbyB8fCAibG9uZyIpLCBRbihyLCBvIHx8ICJsb25nIiwgYVt1XSwgIiIuY29uY2F0KEEsICJbXSIpLCBQbltBXSwgaSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICJkb3ViIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJudW1iZXIiKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBudW1iZXIgdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiLCBrZXk6ICIpLmNvbmNhdChBKSk7CiAgICAgIEZyKHIsIGEpOwogICAgICBicmVhazsKICAgIGNhc2UgIlVudEYiOgogICAgICBpZiAoISQyW2EudW5pdHNdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoYS51bml0cywgIiBpbiAiKS5jb25jYXQoQSkpOwogICAgICBuMChyLCAkMlthLnVuaXRzXSksIEZyKHIsIGEudmFsdWUpOwogICAgICBicmVhazsKICAgIGNhc2UgIlVuRmwiOgogICAgICBpZiAoISQyW2EudW5pdHNdKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoYS51bml0cywgIiBpbiAiKS5jb25jYXQoQSkpOwogICAgICBuMChyLCAkMlthLnVuaXRzXSksIFZyKHIsIGEudmFsdWUpOwogICAgICBicmVhazsKICAgIGNhc2UgIlRFWFQiOgogICAgICBXYShyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJlbnVtIjogewogICAgICBpZiAodHlwZW9mIGEgIT0gInN0cmluZyIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVudW0gdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCAiLCBrZXk6ICIpLmNvbmNhdChBKSk7CiAgICAgIHZhciBsID0gYS5zcGxpdCgiLiIpLCBzID0gbFswXSwgYyA9IGxbMV07CiAgICAgIEFhKHIsIHMpLCBBYShyLCBjKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJsb25nIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJudW1iZXIiKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIHZhbHVlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShhKSwgIiwga2V5OiAiKS5jb25jYXQoQSkpOwogICAgICB0MChyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJib29sIjoKICAgICAgaWYgKHR5cGVvZiBhICE9ICJib29sZWFuIikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksICIsIGtleTogIikuY29uY2F0KEEpKTsKICAgICAgVChyLCBhID8gMSA6IDApOwogICAgICBicmVhazsKICAgIGNhc2UgInRkdGEiOgogICAgICB0MChyLCBhLmJ5dGVMZW5ndGgpLCBOcihyLCBhKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJPYkFyIjogewogICAgICB0MChyLCAxNiksIFdhKHIsICIiKTsKICAgICAgdmFyIGQgPSBWbFtBXTsKICAgICAgaWYgKCFkKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIE9iQXJUeXBlIGZvcjogIi5jb25jYXQoQSkpOwogICAgICBBYShyLCBkKSwgdDAociwgYS5sZW5ndGgpOwogICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGEubGVuZ3RoOyB1KyspIHsKICAgICAgICBBYShyLCBhW3VdLnR5cGUpLCBuMChyLCAiVW5GbCIpLCBuMChyLCAiI1B4bCIpLCB0MChyLCBhW3VdLnZhbHVlcy5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgYVt1XS52YWx1ZXMubGVuZ3RoOyB2KyspCiAgICAgICAgICBGcihyLCBhW3VdLnZhbHVlc1t2XSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJQdGggIjogewogICAgICB2YXIgayA9IDEyICsgYS5wYXRoLmxlbmd0aCAqIDI7CiAgICAgIHQwKHIsIGspLCBuMChyLCBhLnNpZyksIFBpKHIsIGspLCBQaShyLCBhLnBhdGgubGVuZ3RoKSwgVjQociwgYS5wYXRoKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCBkZXNjcmlwdG9yIE9TVHlwZTogIi5jb25jYXQoZSkpOwogIH0KfQpmdW5jdGlvbiBTbChyKSB7CiAgZm9yICh2YXIgZSA9IEwociksIGEgPSBbXSwgQSA9IDA7IEEgPCBlOyBBKyspIHsKICAgIHZhciB0ID0gUjAocik7CiAgICBzd2l0Y2ggKHQpIHsKICAgICAgY2FzZSAicHJvcCI6IHsKICAgICAgICB5YShyKTsKICAgICAgICB2YXIgaSA9IGVhKHIpOwogICAgICAgIGEucHVzaChpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJDbHNzIjoKICAgICAgICBhLnB1c2goeWEocikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJFbm1yIjogewogICAgICAgIHlhKHIpOwogICAgICAgIHZhciBuID0gZWEociksIGYgPSBlYShyKTsKICAgICAgICBhLnB1c2goIiIuY29uY2F0KG4sICIuIikuY29uY2F0KGYpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJyZWxlIjogewogICAgICAgIHlhKHIpLCBhLnB1c2goUyhyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiSWRudCI6CiAgICAgICAgYS5wdXNoKEwocikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbmR4IjoKICAgICAgICBhLnB1c2goTChyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIm5hbWUiOiB7CiAgICAgICAgeWEociksIGEucHVzaCh6MChyKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVzY3JpcHRvciByZWZlcmVuY2UgdHlwZTogIi5jb25jYXQodCkpOwogICAgfQogIH0KICByZXR1cm4gYTsKfQpmdW5jdGlvbiBEbChyLCBlLCBhKSB7CiAgdDAociwgYS5sZW5ndGgpOwogIGZvciAodmFyIEEgPSAwOyBBIDwgYS5sZW5ndGg7IEErKykgewogICAgdmFyIHQgPSBhW0FdLCBpID0gInVua25vd24iOwogICAgc3dpdGNoICh0eXBlb2YgdCA9PSAic3RyaW5nIiAmJiAoL15bYS16IF0rXC5bYS16IF0rJC9pLnRlc3QodCkgPyBpID0gIkVubXIiIDogaSA9ICJuYW1lIiksIG4wKHIsIGkpLCBpKSB7CiAgICAgIGNhc2UgIkVubXIiOiB7CiAgICAgICAgdmFyIG4gPSB0LnNwbGl0KCIuIiksIGYgPSBuWzBdLCB1ID0gblsxXTsKICAgICAgICBLdChyLCAiXDAiLCBmKSwgQWEociwgZiksIEFhKHIsIHUpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgIm5hbWUiOiB7CiAgICAgICAgS3QociwgIlwwIiwgIkx5ciAiKSwgbXIociwgdCArICJcMCIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlc2NyaXB0b3IgcmVmZXJlbmNlIHR5cGU6ICIuY29uY2F0KGkpKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24geWEocikgewogIHZhciBlID0gejAociksIGEgPSBlYShyKTsKICByZXR1cm4geyBuYW1lOiBlLCBjbGFzc0lEOiBhIH07Cn0KZnVuY3Rpb24gS3QociwgZSwgYSkgewogIG1yKHIsIGUpLCBBYShyLCBhKTsKfQpmdW5jdGlvbiBtMChyLCBlKSB7CiAgZSA9PT0gdm9pZCAwICYmIChlID0gITEpOwogIHZhciBhID0gUyhyKTsKICBpZiAoYSAhPT0gMTYpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVzY3JpcHRvciB2ZXJzaW9uOiAiLmNvbmNhdChhKSk7CiAgdmFyIEEgPSBPbihyLCBlKTsKICByZXR1cm4gQTsKfQpmdW5jdGlvbiBwMChyLCBlLCBhLCBBLCB0KSB7CiAgdCA9PT0gdm9pZCAwICYmICh0ID0gIiIpLCBVKHIsIDE2KSwgVW4ociwgZSwgYSwgQSwgdCk7Cn0KZnVuY3Rpb24gbTIocikgewogIHJldHVybiB7IHg6IHIuSHJ6biwgeTogci5WcnRjIH07Cn0KZnVuY3Rpb24gcDIocikgewogIHJldHVybiB7IEhyem46IHIueCwgVnJ0Yzogci55IH07Cn0KZnVuY3Rpb24gcXQocikgewogIHJldHVybiB7CiAgICB0b3A6IEYwKHJbIlRvcCAiXSksCiAgICBsZWZ0OiBGMChyLkxlZnQpLAogICAgcmlnaHQ6IEYwKHIuUmdodCksCiAgICBib3R0b206IEYwKHIuQnRvbSkKICB9Owp9CmZ1bmN0aW9uICR0KHIpIHsKICB2YXIgZTsKICByZXR1cm4gZSA9IHsKICAgIExlZnQ6IEQwKHIubGVmdCwgImJvdW5kcy5sZWZ0IikKICB9LCBlWyJUb3AgIl0gPSBEMChyLnRvcCwgImJvdW5kcy50b3AiKSwgZS5SZ2h0ID0gRDAoci5yaWdodCwgImJvdW5kcy5yaWdodCIpLCBlLkJ0b20gPSBEMChyLmJvdHRvbSwgImJvdW5kcy5ib3R0b20iKSwgZTsKfQpmdW5jdGlvbiByaShyKSB7CiAgdmFyIGUgPSB7CiAgICBlbmFibGVkOiAhIXIuZW5hYiwKICAgIHBvc2l0aW9uOiBWZS5kZWNvZGUoci5TdHlsKSwKICAgIGZpbGxUeXBlOiBvMS5kZWNvZGUoci5QbnRUKSwKICAgIGJsZW5kTW9kZTogb3IuZGVjb2RlKHJbIk1kICAiXSksCiAgICBvcGFjaXR5OiBBMChyLk9wY3QpLAogICAgc2l6ZTogRjAoclsiU3ogICJdKQogIH07CiAgcmV0dXJuIHIucHJlc2VudCAhPT0gdm9pZCAwICYmIChlLnByZXNlbnQgPSByLnByZXNlbnQpLCByLnNob3dJbkRpYWxvZyAhPT0gdm9pZCAwICYmIChlLnNob3dJbkRpYWxvZyA9IHIuc2hvd0luRGlhbG9nKSwgci5vdmVycHJpbnQgIT09IHZvaWQgMCAmJiAoZS5vdmVycHJpbnQgPSByLm92ZXJwcmludCksIHJbIkNsciAiXSAmJiAoZS5jb2xvciA9IFNyKHJbIkNsciAiXSkpLCByLkdyYWQgJiYgKGUuZ3JhZGllbnQgPSBLbihyKSksIHIuUHRybiAmJiAoZS5wYXR0ZXJuID0gcW4ocikpLCBlOwp9CmZ1bmN0aW9uIGFpKHIpIHsKICB2YXIgZSA9IHt9OwogIHJldHVybiBlLmVuYWIgPSAhIXIuZW5hYmxlZCwgci5wcmVzZW50ICE9PSB2b2lkIDAgJiYgKGUucHJlc2VudCA9ICEhci5wcmVzZW50KSwgci5zaG93SW5EaWFsb2cgIT09IHZvaWQgMCAmJiAoZS5zaG93SW5EaWFsb2cgPSAhIXIuc2hvd0luRGlhbG9nKSwgZS5TdHlsID0gVmUuZW5jb2RlKHIucG9zaXRpb24pLCBlLlBudFQgPSBvMS5lbmNvZGUoci5maWxsVHlwZSksIGVbIk1kICAiXSA9IG9yLmVuY29kZShyLmJsZW5kTW9kZSksIGUuT3BjdCA9ICQwKHIub3BhY2l0eSksIGVbIlN6ICAiXSA9IEQwKHIuc2l6ZSwgInNpemUiKSwgci5jb2xvciAmJiAoZVsiQ2xyICJdID0gRHIoci5jb2xvcikpLCByLmdyYWRpZW50ICYmIChlID0gYWEoYWEoe30sIGUpLCAkbihyLmdyYWRpZW50KSkpLCByLnBhdHRlcm4gJiYgKGUgPSBhYShhYSh7fSwgZSksIHIxKHIucGF0dGVybikpKSwgci5vdmVycHJpbnQgIT09IHZvaWQgMCAmJiAoZS5vdmVycHJpbnQgPSAhIXIub3ZlcnByaW50KSwgZTsKfQpmdW5jdGlvbiBWMihyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSwgdCwgaSwgbiA9IGEgPyB7CiAgICAiU2NsICI6IEVyKChBID0gci5zY2FsZSkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IDEpLAogICAgbWFzdGVyRlhTd2l0Y2g6ICFyLmRpc2FibGVkCiAgfSA6IHsKICAgIG1hc3RlckZYU3dpdGNoOiAhci5kaXNhYmxlZCwKICAgICJTY2wgIjogRXIoKHQgPSByLnNjYWxlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogMSkKICB9LCBmID0gWyJkcm9wU2hhZG93IiwgImlubmVyU2hhZG93IiwgInNvbGlkRmlsbCIsICJncmFkaWVudE92ZXJsYXkiLCAic3Ryb2tlIl0sIHUgPSAwLCBvID0gZjsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgIHZhciBsID0gb1t1XTsKICAgIGlmIChyW2xdICYmICFBcnJheS5pc0FycmF5KHJbbF0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIiIuY29uY2F0KGwsICIgc2hvdWxkIGJlIGFuIGFycmF5IikpOwogIH0KICB2YXIgcyA9IGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiAhIUIgJiYgQi5sZW5ndGggPiAxICYmIGE7CiAgfSwgYyA9IGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiAhIUIgJiYgQi5sZW5ndGggPj0gMSAmJiAoIWEgfHwgQi5sZW5ndGggPT09IDEpOwogIH07CiAgaWYgKGMoci5kcm9wU2hhZG93KSAmJiAobi5EclNoID0gZHIoci5kcm9wU2hhZG93WzBdLCAiZHJvcFNoYWRvdyIsIGUpKSwgcyhyLmRyb3BTaGFkb3cpICYmIChuLmRyb3BTaGFkb3dNdWx0aSA9IHIuZHJvcFNoYWRvdy5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGRyKEIsICJkcm9wU2hhZG93IiwgZSk7CiAgfSkpLCBjKHIuaW5uZXJTaGFkb3cpICYmIChuLklyU2ggPSBkcihyLmlubmVyU2hhZG93WzBdLCAiaW5uZXJTaGFkb3ciLCBlKSksIHMoci5pbm5lclNoYWRvdykgJiYgKG4uaW5uZXJTaGFkb3dNdWx0aSA9IHIuaW5uZXJTaGFkb3cubWFwKGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiBkcihCLCAiaW5uZXJTaGFkb3ciLCBlKTsKICB9KSksIHIub3V0ZXJHbG93ICYmIChuLk9yR2wgPSBkcihyLm91dGVyR2xvdywgIm91dGVyR2xvdyIsIGUpKSwgcyhyLnNvbGlkRmlsbCkgJiYgKG4uc29saWRGaWxsTXVsdGkgPSByLnNvbGlkRmlsbC5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGRyKEIsICJzb2xpZEZpbGwiLCBlKTsKICB9KSksIHMoci5ncmFkaWVudE92ZXJsYXkpICYmIChuLmdyYWRpZW50RmlsbE11bHRpID0gci5ncmFkaWVudE92ZXJsYXkubWFwKGZ1bmN0aW9uKEIpIHsKICAgIHJldHVybiBkcihCLCAiZ3JhZGllbnRPdmVybGF5IiwgZSk7CiAgfSkpLCBzKHIuc3Ryb2tlKSAmJiAobi5mcmFtZUZYTXVsdGkgPSByLnN0cm9rZS5tYXAoZnVuY3Rpb24oQikgewogICAgcmV0dXJuIGFpKEIpOwogIH0pKSwgci5pbm5lckdsb3cgJiYgKG4uSXJHbCA9IGRyKHIuaW5uZXJHbG93LCAiaW5uZXJHbG93IiwgZSkpLCByLmJldmVsICYmIChuLmViYmwgPSBkcihyLmJldmVsLCAiYmV2ZWwiLCBlKSksIGMoci5zb2xpZEZpbGwpICYmIChuLlNvRmkgPSBkcihyLnNvbGlkRmlsbFswXSwgInNvbGlkRmlsbCIsIGUpKSwgci5wYXR0ZXJuT3ZlcmxheSAmJiAobi5wYXR0ZXJuRmlsbCA9IGRyKHIucGF0dGVybk92ZXJsYXksICJwYXR0ZXJuT3ZlcmxheSIsIGUpKSwgYyhyLmdyYWRpZW50T3ZlcmxheSkgJiYgKG4uR3JGbCA9IGRyKHIuZ3JhZGllbnRPdmVybGF5WzBdLCAiZ3JhZGllbnRPdmVybGF5IiwgZSkpLCByLnNhdGluICYmIChuLkNoRlggPSBkcihyLnNhdGluLCAic2F0aW4iLCBlKSksIGMoci5zdHJva2UpICYmIChuLkZyRlggPSBhaSgoaSA9IHIuc3Ryb2tlKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpWzBdKSksIGEpIHsKICAgIG4ubnVtTW9kaWZ5aW5nRlggPSAwOwogICAgZm9yICh2YXIgZCA9IDAsIHYgPSBPYmplY3Qua2V5cyhyKTsgZCA8IHYubGVuZ3RoOyBkKyspIHsKICAgICAgdmFyIGwgPSB2W2RdLCBrID0gcltsXTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaykpCiAgICAgICAgZm9yICh2YXIgRSA9IDAsIGcgPSBrOyBFIDwgZy5sZW5ndGg7IEUrKykgewogICAgICAgICAgdmFyIHcgPSBnW0VdOwogICAgICAgICAgdy5lbmFibGVkICYmIG4ubnVtTW9kaWZ5aW5nRlgrKzsKICAgICAgICB9CiAgICAgIGVsc2Ugay5lbmFibGVkICYmIG4ubnVtTW9kaWZ5aW5nRlgrKzsKICAgIH0KICB9CiAgcmV0dXJuIG47Cn0KZnVuY3Rpb24gUzIociwgZSkgewogIHZhciBhID0ge30sIEEgPSByLm1hc3RlckZYU3dpdGNoLCB0ID0gci5EclNoLCBpID0gci5kcm9wU2hhZG93TXVsdGksIG4gPSByLklyU2gsIGYgPSByLmlubmVyU2hhZG93TXVsdGksIHUgPSByLk9yR2wsIG8gPSByLklyR2wsIGwgPSByLmViYmwsIHMgPSByLlNvRmksIGMgPSByLnNvbGlkRmlsbE11bHRpLCBkID0gci5wYXR0ZXJuRmlsbCwgdiA9IHIuR3JGbCwgayA9IHIuZ3JhZGllbnRGaWxsTXVsdGksIEUgPSByLkNoRlgsIGcgPSByLkZyRlgsIHcgPSByLmZyYW1lRlhNdWx0aTsKICByLm51bU1vZGlmeWluZ0ZYOwogIHZhciBCID0gX2wociwgWyJtYXN0ZXJGWFN3aXRjaCIsICJEclNoIiwgImRyb3BTaGFkb3dNdWx0aSIsICJJclNoIiwgImlubmVyU2hhZG93TXVsdGkiLCAiT3JHbCIsICJJckdsIiwgImViYmwiLCAiU29GaSIsICJzb2xpZEZpbGxNdWx0aSIsICJwYXR0ZXJuRmlsbCIsICJHckZsIiwgImdyYWRpZW50RmlsbE11bHRpIiwgIkNoRlgiLCAiRnJGWCIsICJmcmFtZUZYTXVsdGkiLCAibnVtTW9kaWZ5aW5nRlgiXSk7CiAgcmV0dXJuIEEgfHwgKGEuZGlzYWJsZWQgPSAhMCksIHJbIlNjbCAiXSAmJiAoYS5zY2FsZSA9IEEwKHJbIlNjbCAiXSkpLCB0ICYmIChhLmRyb3BTaGFkb3cgPSBbYnIodCwgZSldKSwgaSAmJiAoYS5kcm9wU2hhZG93ID0gaS5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgbiAmJiAoYS5pbm5lclNoYWRvdyA9IFticihuLCBlKV0pLCBmICYmIChhLmlubmVyU2hhZG93ID0gZi5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgdSAmJiAoYS5vdXRlckdsb3cgPSBicih1LCBlKSksIG8gJiYgKGEuaW5uZXJHbG93ID0gYnIobywgZSkpLCBsICYmIChhLmJldmVsID0gYnIobCwgZSkpLCBzICYmIChhLnNvbGlkRmlsbCA9IFticihzLCBlKV0pLCBjICYmIChhLnNvbGlkRmlsbCA9IGMubWFwKGZ1bmN0aW9uKG0pIHsKICAgIHJldHVybiBicihtLCBlKTsKICB9KSksIGQgJiYgKGEucGF0dGVybk92ZXJsYXkgPSBicihkLCBlKSksIHYgJiYgKGEuZ3JhZGllbnRPdmVybGF5ID0gW2JyKHYsIGUpXSksIGsgJiYgKGEuZ3JhZGllbnRPdmVybGF5ID0gay5tYXAoZnVuY3Rpb24obSkgewogICAgcmV0dXJuIGJyKG0sIGUpOwogIH0pKSwgRSAmJiAoYS5zYXRpbiA9IGJyKEUsIGUpKSwgZyAmJiAoYS5zdHJva2UgPSBbcmkoZyldKSwgdyAmJiAoYS5zdHJva2UgPSB3Lm1hcChmdW5jdGlvbihtKSB7CiAgICByZXR1cm4gcmkobSk7CiAgfSkpLCBlICYmIE9iamVjdC5rZXlzKEIpLmxlbmd0aCA+IDEgJiYgY29uc29sZS5sb2coIlVuaGFuZGxlZCBlZmZlY3Qga2V5czoiLCBCKSwgYTsKfQpmdW5jdGlvbiBlaShyLCBlKSB7CiAgZm9yICh2YXIgYSA9IFtdLCBBID0gMDsgQSA8IHIubGVuZ3RoOyBBKyspIHsKICAgIHZhciB0ID0gcltBXSwgaSA9IHQudGltZSwgbiA9IGkuZGVub21pbmF0b3IsIGYgPSBpLm51bWVyYXRvciwgdSA9IHQuc2VsZWN0ZWQsIG8gPSB0LmFuaW1LZXksIGwgPSB7IG51bWVyYXRvcjogZiwgZGVub21pbmF0b3I6IG4gfSwgcyA9IG4xLmRlY29kZSh0LmFuaW1JbnRlcnBTdHlsZSk7CiAgICBzd2l0Y2ggKG8uVHlwZSkgewogICAgICBjYXNlICJrZXlUeXBlLk9wY3QiOgogICAgICAgIGEucHVzaCh7IGludGVycG9sYXRpb246IHMsIHRpbWU6IGwsIHNlbGVjdGVkOiB1LCB0eXBlOiAib3BhY2l0eSIsIHZhbHVlOiBBMChvLk9wY3QpIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJrZXlUeXBlLlBzdG4iOgogICAgICAgIGEucHVzaCh7IGludGVycG9sYXRpb246IHMsIHRpbWU6IGwsIHNlbGVjdGVkOiB1LCB0eXBlOiAicG9zaXRpb24iLCB4OiBvLkhyem4sIHk6IG8uVnJ0YyB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAia2V5VHlwZS5Ucm5mIjoKICAgICAgICBhLnB1c2goewogICAgICAgICAgaW50ZXJwb2xhdGlvbjogcywKICAgICAgICAgIHRpbWU6IGwsCiAgICAgICAgICBzZWxlY3RlZDogdSwKICAgICAgICAgIHR5cGU6ICJ0cmFuc2Zvcm0iLAogICAgICAgICAgc2NhbGU6IG0yKG9bIlNjbCAiXSksCiAgICAgICAgICBza2V3OiBtMihvLlNrZXcpLAogICAgICAgICAgcm90YXRpb246IG8ucm90YXRpb24sCiAgICAgICAgICB0cmFuc2xhdGlvbjogbTIoby50cmFuc2xhdGlvbikKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAia2V5VHlwZS5zaGVldFN0eWxlIjogewogICAgICAgIHZhciBjID0geyBpbnRlcnBvbGF0aW9uOiBzLCB0aW1lOiBsLCBzZWxlY3RlZDogdSwgdHlwZTogInN0eWxlIiB9OwogICAgICAgIG8uc2hlZXRTdHlsZS5MZWZ4ICYmIChjLnN0eWxlID0gUzIoby5zaGVldFN0eWxlLkxlZngsIGUpKSwgYS5wdXNoKGMpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgImtleVR5cGUuZ2xvYmFsTGlnaHRpbmciOiB7CiAgICAgICAgYS5wdXNoKHsKICAgICAgICAgIGludGVycG9sYXRpb246IHMsCiAgICAgICAgICB0aW1lOiBsLAogICAgICAgICAgc2VsZWN0ZWQ6IHUsCiAgICAgICAgICB0eXBlOiAiZ2xvYmFsTGlnaHRpbmciLAogICAgICAgICAgZ2xvYmFsQW5nbGU6IG8uZ2JsQSwKICAgICAgICAgIGdsb2JhbEFsdGl0dWRlOiBvLmdsb2JhbEFsdGl0dWRlCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGtleVR5cGUgdmFsdWUiKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gQWkocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgQSA9IHJbYV0sIHQgPSBBLnRpbWUsIGkgPSBBLnNlbGVjdGVkLCBuID0gaSA9PT0gdm9pZCAwID8gITEgOiBpLCBmID0gQS5pbnRlcnBvbGF0aW9uLCB1ID0gbjEuZW5jb2RlKGYpLCBvID0gdm9pZCAwOwogICAgc3dpdGNoIChBLnR5cGUpIHsKICAgICAgY2FzZSAib3BhY2l0eSI6CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuT3BjdCIsIE9wY3Q6ICQwKEEudmFsdWUpIH07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInBvc2l0aW9uIjoKICAgICAgICBvID0geyBUeXBlOiAia2V5VHlwZS5Qc3RuIiwgSHJ6bjogQS54LCBWcnRjOiBBLnkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidHJhbnNmb3JtIjoKICAgICAgICBvID0geyBUeXBlOiAia2V5VHlwZS5Ucm5mIiwgIlNjbCAiOiBwMihBLnNjYWxlKSwgU2tldzogcDIoQS5za2V3KSwgcm90YXRpb246IEEucm90YXRpb24sIHRyYW5zbGF0aW9uOiBwMihBLnRyYW5zbGF0aW9uKSB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHlsZSI6CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuc2hlZXRTdHlsZSIsIHNoZWV0U3R5bGU6IHsgVnJzbjogMSwgYmxlbmRPcHRpb25zOiB7fSB9IH0sIEEuc3R5bGUgJiYgKG8uc2hlZXRTdHlsZSA9IHsgVnJzbjogMSwgTGVmeDogVjIoQS5zdHlsZSwgITEsICExKSwgYmxlbmRPcHRpb25zOiB7fSB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiZ2xvYmFsTGlnaHRpbmciOiB7CiAgICAgICAgbyA9IHsgVHlwZTogImtleVR5cGUuZ2xvYmFsTGlnaHRpbmciLCBnYmxBOiBBLmdsb2JhbEFuZ2xlLCBnbG9iYWxBbHRpdHVkZTogQS5nbG9iYWxBbHRpdHVkZSB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBrZXlUeXBlIHZhbHVlIik7CiAgICB9CiAgICBlLnB1c2goeyBWcnNuOiAxLCBhbmltSW50ZXJwU3R5bGU6IHUsIHRpbWU6IHQsIGFuaW1LZXk6IG8sIHNlbGVjdGVkOiBuIH0pOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBKbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IFtdLCBBID0gMDsgQSA8IHIubGVuZ3RoOyBBKyspIHsKICAgIHZhciB0ID0gcltBXSwgaSA9IHsKICAgICAgdHlwZTogZjEuZGVjb2RlKHQudHJhY2tJRCksCiAgICAgIGVuYWJsZWQ6IHQuZW5hYiwKICAgICAga2V5czogZWkodC5rZXlMaXN0LCBlKQogICAgfTsKICAgIHQuZWZmZWN0UGFyYW1zICYmIChpLmVmZmVjdFBhcmFtcyA9IHsKICAgICAgZmlsbENhbnZhczogdC5lZmZlY3RQYXJhbXMuZmlsbENhbnZhcywKICAgICAgem9vbU9yaWdpbjogdC5lZmZlY3RQYXJhbXMuem9vbU9yaWdpbiwKICAgICAga2V5czogZWkodC5lZmZlY3RQYXJhbXMua2V5TGlzdCwgZSkKICAgIH0pLCBhLnB1c2goaSk7CiAgfQogIHJldHVybiBhOwp9CmZ1bmN0aW9uIEhuKHIpIHsKICBmb3IgKHZhciBlID0gW10sIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykgewogICAgdmFyIEEgPSByW2FdOwogICAgZS5wdXNoKGFhKGFhKHsgdHJhY2tJRDogZjEuZW5jb2RlKEEudHlwZSksIFZyc246IDEsIGVuYWI6ICEhQS5lbmFibGVkLCBFZmZjOiAhIUEuZWZmZWN0UGFyYW1zIH0sIEEuZWZmZWN0UGFyYW1zID8gewogICAgICBlZmZlY3RQYXJhbXM6IHsKICAgICAgICBrZXlMaXN0OiBBaShBLmtleXMpLAogICAgICAgIGZpbGxDYW52YXM6IEEuZWZmZWN0UGFyYW1zLmZpbGxDYW52YXMsCiAgICAgICAgem9vbU9yaWdpbjogQS5lZmZlY3RQYXJhbXMuem9vbU9yaWdpbgogICAgICB9CiAgICB9IDoge30pLCB7IGtleUxpc3Q6IEFpKEEua2V5cykgfSkpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBicihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IHt9LCBBID0gMCwgdCA9IE9iamVjdC5rZXlzKHIpOyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgdmFyIGkgPSB0W0FdLCBuID0gcltpXTsKICAgIHN3aXRjaCAoaSkgewogICAgICBjYXNlICJlbmFiIjoKICAgICAgICBhLmVuYWJsZWQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVnbGciOgogICAgICAgIGEudXNlR2xvYmFsTGlnaHQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFudEEiOgogICAgICAgIGEuYW50aWFsaWFzZWQgPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFsZ24iOgogICAgICAgIGEuYWxpZ24gPSAhIW47CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkR0aHIiOgogICAgICAgIGEuZGl0aGVyID0gISFuOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJJbnZyIjoKICAgICAgICBhLmludmVydCA9ICEhbjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiUnZycyI6CiAgICAgICAgYS5yZXZlcnNlID0gISFuOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJDbHIgIjoKICAgICAgICBhLmNvbG9yID0gU3Iobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhnbEMiOgogICAgICAgIGEuaGlnaGxpZ2h0Q29sb3IgPSBTcihuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2R3QyI6CiAgICAgICAgYS5zaGFkb3dDb2xvciA9IFNyKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJTdHlsIjoKICAgICAgICBhLnBvc2l0aW9uID0gVmUuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJNZCAgIjoKICAgICAgICBhLmJsZW5kTW9kZSA9IG9yLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaGdsTSI6CiAgICAgICAgYS5oaWdobGlnaHRCbGVuZE1vZGUgPSBvci5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNkd00iOgogICAgICAgIGEuc2hhZG93QmxlbmRNb2RlID0gb3IuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJidmxTIjoKICAgICAgICBhLnN0eWxlID0gYTEuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJidmxEIjoKICAgICAgICBhLmRpcmVjdGlvbiA9IEExLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYnZsVCI6CiAgICAgICAgYS50ZWNobmlxdWUgPSBlMS5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkdsd1QiOgogICAgICAgIGEudGVjaG5pcXVlID0gdDEuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJnbHdTIjoKICAgICAgICBhLnNvdXJjZSA9IGkxLmRlY29kZShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiVHlwZSI6CiAgICAgICAgYS50eXBlID0gUmUuZGVjb2RlKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJnczk5IjoKICAgICAgICBhLmludGVycG9sYXRpb25NZXRob2QgPSBMYS5kZWNvZGUobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIk9wY3QiOgogICAgICAgIGEub3BhY2l0eSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJoZ2xPIjoKICAgICAgICBhLmhpZ2hsaWdodE9wYWNpdHkgPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2R3TyI6CiAgICAgICAgYS5zaGFkb3dPcGFjaXR5ID0gQTAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImxhZ2wiOgogICAgICAgIGEuYW5nbGUgPSBsYShuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiQW5nbCI6CiAgICAgICAgYS5hbmdsZSA9IGxhKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJMYWxkIjoKICAgICAgICBhLmFsdGl0dWRlID0gbGEobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlNmdG4iOgogICAgICAgIGEuc29mdGVuID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNyZ1IiOgogICAgICAgIGEuc3RyZW5ndGggPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYmx1ciI6CiAgICAgICAgYS5zaXplID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIk5vc2UiOgogICAgICAgIGEubm9pc2UgPSBBMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiSW5wciI6CiAgICAgICAgYS5yYW5nZSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJDa210IjoKICAgICAgICBhLmNob2tlID0gRjAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlNoZE4iOgogICAgICAgIGEuaml0dGVyID0gQTAobik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkRzdG4iOgogICAgICAgIGEuZGlzdGFuY2UgPSBGMChuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiU2NsICI6CiAgICAgICAgYS5zY2FsZSA9IEEwKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJQdHJuIjoKICAgICAgICBhLnBhdHRlcm4gPSB7IG5hbWU6IG5bIk5tICAiXSwgaWQ6IG4uSWRudCB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwaGFzZSI6CiAgICAgICAgYS5waGFzZSA9IHsgeDogbi5IcnpuLCB5OiBuLlZydGMgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiT2ZzdCI6CiAgICAgICAgYS5vZmZzZXQgPSB7IHg6IEEwKG4uSHJ6biksIHk6IEEwKG4uVnJ0YykgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiTXBnUyI6CiAgICAgIGNhc2UgIlRyblMiOgogICAgICAgIGEuY29udG91ciA9IHsKICAgICAgICAgIG5hbWU6IG5bIk5tICAiXSwKICAgICAgICAgIGN1cnZlOiBuWyJDcnYgIl0ubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIHsgeDogZi5IcnpuLCB5OiBmLlZydGMgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiR3JhZCI6CiAgICAgICAgYS5ncmFkaWVudCA9IHpuKG4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ1c2VUZXh0dXJlIjoKICAgICAgY2FzZSAidXNlU2hhcGUiOgogICAgICBjYXNlICJsYXllckNvbmNlYWxzIjoKICAgICAgY2FzZSAicHJlc2VudCI6CiAgICAgIGNhc2UgInNob3dJbkRpYWxvZyI6CiAgICAgIGNhc2UgImFudGlhbGlhc0dsb3NzIjoKICAgICAgICBhW2ldID0gbjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiX25hbWUiOgogICAgICBjYXNlICJfY2xhc3NJRCI6CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgZSAmJiBjb25zb2xlLmxvZygiSW52YWxpZCBlZmZlY3Qga2V5OiAnIi5jb25jYXQoaSwgIicsIHZhbHVlOiIpLCBuKTsKICAgIH0KICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gZHIociwgZSwgYSkgewogIHZhciBBID0gewogICAgZW5hYjogITEKICB9OwogIGUgPT09ICJkcm9wU2hhZG93IiAmJiAoQS5Ucm5TID0geyAiTm0gICI6ICIiLCAiQ3J2ICI6IFtdIH0pOwogIGZvciAodmFyIHQgPSAwLCBpID0gT2JqZWN0LmtleXMocik7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF0sIGYgPSBuLCB1ID0gcltmXTsKICAgIHN3aXRjaCAoZikgewogICAgICBjYXNlICJlbmFibGVkIjoKICAgICAgICBBLmVuYWIgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVzZUdsb2JhbExpZ2h0IjoKICAgICAgICBBLnVnbGcgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFudGlhbGlhc2VkIjoKICAgICAgICBBLkFudEEgPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFsaWduIjoKICAgICAgICBBLkFsZ24gPSAhIXU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImRpdGhlciI6CiAgICAgICAgQS5EdGhyID0gISF1OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbnZlcnQiOgogICAgICAgIEEuSW52ciA9ICEhdTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAicmV2ZXJzZSI6CiAgICAgICAgQS5SdnJzID0gISF1OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2xvciI6CiAgICAgICAgQVsiQ2xyICJdID0gRHIodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhpZ2hsaWdodENvbG9yIjoKICAgICAgICBBLmhnbEMgPSBEcih1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2hhZG93Q29sb3IiOgogICAgICAgIEEuc2R3QyA9IERyKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwb3NpdGlvbiI6CiAgICAgICAgQS5TdHlsID0gVmUuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJibGVuZE1vZGUiOgogICAgICAgIEFbIk1kICAiXSA9IG9yLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaGlnaGxpZ2h0QmxlbmRNb2RlIjoKICAgICAgICBBLmhnbE0gPSBvci5lbmNvZGUodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNoYWRvd0JsZW5kTW9kZSI6CiAgICAgICAgQS5zZHdNID0gb3IuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHlsZSI6CiAgICAgICAgQS5idmxTID0gYTEuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkaXJlY3Rpb24iOgogICAgICAgIEEuYnZsRCA9IEExLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidGVjaG5pcXVlIjoKICAgICAgICBlID09PSAiYmV2ZWwiID8gQS5idmxUID0gZTEuZW5jb2RlKHUpIDogQS5HbHdUID0gdDEuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzb3VyY2UiOgogICAgICAgIEEuZ2x3UyA9IGkxLmVuY29kZSh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidHlwZSI6CiAgICAgICAgQS5UeXBlID0gUmUuZW5jb2RlKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbnRlcnBvbGF0aW9uTWV0aG9kIjoKICAgICAgICBBLmdzOTkgPSBMYS5lbmNvZGUodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIm9wYWNpdHkiOgogICAgICAgIEEuT3BjdCA9ICQwKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJoaWdobGlnaHRPcGFjaXR5IjoKICAgICAgICBBLmhnbE8gPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2hhZG93T3BhY2l0eSI6CiAgICAgICAgQS5zZHdPID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImFuZ2xlIjoKICAgICAgICBlID09PSAiZ3JhZGllbnRPdmVybGF5IiB8fCBlID09PSAicGF0dGVybkZpbGwiID8gQS5BbmdsID0gdzIodSkgOiBBLmxhZ2wgPSB3Mih1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYWx0aXR1ZGUiOgogICAgICAgIEEuTGFsZCA9IHcyKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzb2Z0ZW4iOgogICAgICAgIEEuU2Z0biA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJlbmd0aCI6CiAgICAgICAgQS5zcmdSID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNpemUiOgogICAgICAgIEEuYmx1ciA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJub2lzZSI6CiAgICAgICAgQS5Ob3NlID0gJDAodSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInJhbmdlIjoKICAgICAgICBBLklucHIgPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiY2hva2UiOgogICAgICAgIEEuQ2ttdCA9IEQwKHUsIGYpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJqaXR0ZXIiOgogICAgICAgIEEuU2hkTiA9ICQwKHUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkaXN0YW5jZSI6CiAgICAgICAgQS5Ec3RuID0gRDAodSwgZik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInNjYWxlIjoKICAgICAgICBBWyJTY2wgIl0gPSAkMCh1KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAicGF0dGVybiI6CiAgICAgICAgQS5QdHJuID0geyAiTm0gICI6IHUubmFtZSwgSWRudDogdS5pZCB9OwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwaGFzZSI6CiAgICAgICAgQS5waGFzZSA9IHsgSHJ6bjogdS54LCBWcnRjOiB1LnkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAib2Zmc2V0IjoKICAgICAgICBBLk9mc3QgPSB7IEhyem46ICQwKHUueCksIFZydGM6ICQwKHUueSkgfTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiY29udG91ciI6IHsKICAgICAgICBBW2UgPT09ICJzYXRpbiIgPyAiTXBnUyIgOiAiVHJuUyJdID0gewogICAgICAgICAgIk5tICAiOiB1Lm5hbWUsCiAgICAgICAgICAiQ3J2ICI6IHUuY3VydmUubWFwKGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgcmV0dXJuIHsgSHJ6bjogby54LCBWcnRjOiBvLnkgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJncmFkaWVudCI6CiAgICAgICAgQS5HcmFkID0gTG4odSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInVzZVRleHR1cmUiOgogICAgICBjYXNlICJ1c2VTaGFwZSI6CiAgICAgIGNhc2UgImxheWVyQ29uY2VhbHMiOgogICAgICBjYXNlICJwcmVzZW50IjoKICAgICAgY2FzZSAic2hvd0luRGlhbG9nIjoKICAgICAgY2FzZSAiYW50aWFsaWFzR2xvc3MiOgogICAgICAgIEFbZl0gPSB1OwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGEgJiYgY29uc29sZS5sb2coIkludmFsaWQgZWZmZWN0IGtleTogJyIuY29uY2F0KGYsICInLCB2YWx1ZToiKSwgdSk7CiAgICB9CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIHpuKHIpIHsKICBpZiAoci5HcmRGID09PSAiR3JkRi5Dc3RTIikgewogICAgdmFyIGUgPSByLkludHIgfHwgNDA5NjsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJzb2xpZCIsCiAgICAgIG5hbWU6IHJbIk5tICAiXSwKICAgICAgc21vb3RobmVzczogci5JbnRyIC8gNDA5NiwKICAgICAgY29sb3JTdG9wczogci5DbHJzLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNvbG9yOiBTcihhWyJDbHIgIl0pLAogICAgICAgICAgbG9jYXRpb246IGEuTGN0biAvIGUsCiAgICAgICAgICBtaWRwb2ludDogYS5NZHBuIC8gMTAwCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIG9wYWNpdHlTdG9wczogci5Ucm5zLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG9wYWNpdHk6IEEwKGEuT3BjdCksCiAgICAgICAgICBsb2NhdGlvbjogYS5MY3RuIC8gZSwKICAgICAgICAgIG1pZHBvaW50OiBhLk1kcG4gLyAxMDAKICAgICAgICB9OwogICAgICB9KQogICAgfTsKICB9IGVsc2UKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJub2lzZSIsCiAgICAgIG5hbWU6IHJbIk5tICAiXSwKICAgICAgcm91Z2huZXNzOiByLlNtdGggLyA0MDk2LAogICAgICBjb2xvck1vZGVsOiB3ZS5kZWNvZGUoci5DbHJTKSwKICAgICAgcmFuZG9tU2VlZDogci5SbmRTLAogICAgICByZXN0cmljdENvbG9yczogISFyLlZjdEMsCiAgICAgIGFkZFRyYW5zcGFyZW5jeTogISFyLlNoVHIsCiAgICAgIG1pbjogclsiTW5tICJdLm1hcChmdW5jdGlvbihhKSB7CiAgICAgICAgcmV0dXJuIGEgLyAxMDA7CiAgICAgIH0pLAogICAgICBtYXg6IHJbIk14bSAiXS5tYXAoZnVuY3Rpb24oYSkgewogICAgICAgIHJldHVybiBhIC8gMTAwOwogICAgICB9KQogICAgfTsKfQpmdW5jdGlvbiBMbihyKSB7CiAgdmFyIGUsIGE7CiAgaWYgKHIudHlwZSA9PT0gInNvbGlkIikgewogICAgdmFyIEEgPSBNYXRoLnJvdW5kKCgoZSA9IHIuc21vb3RobmVzcykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IDEpICogNDA5Nik7CiAgICByZXR1cm4gewogICAgICAiTm0gICI6IHIubmFtZSB8fCAiIiwKICAgICAgR3JkRjogIkdyZEYuQ3N0UyIsCiAgICAgIEludHI6IEEsCiAgICAgIENscnM6IHIuY29sb3JTdG9wcy5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHZhciBpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAiQ2xyICI6IERyKHQuY29sb3IpLAogICAgICAgICAgVHlwZTogIkNscnkuVXNyUyIsCiAgICAgICAgICBMY3RuOiBNYXRoLnJvdW5kKHQubG9jYXRpb24gKiBBKSwKICAgICAgICAgIE1kcG46IE1hdGgucm91bmQoKChpID0gdC5taWRwb2ludCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDAuNSkgKiAxMDApCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIFRybnM6IHIub3BhY2l0eVN0b3BzLm1hcChmdW5jdGlvbih0KSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIE9wY3Q6ICQwKHQub3BhY2l0eSksCiAgICAgICAgICBMY3RuOiBNYXRoLnJvdW5kKHQubG9jYXRpb24gKiBBKSwKICAgICAgICAgIE1kcG46IE1hdGgucm91bmQoKChpID0gdC5taWRwb2ludCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDAuNSkgKiAxMDApCiAgICAgICAgfTsKICAgICAgfSkKICAgIH07CiAgfSBlbHNlCiAgICByZXR1cm4gewogICAgICBHcmRGOiAiR3JkRi5DbE5zIiwKICAgICAgIk5tICAiOiByLm5hbWUgfHwgIiIsCiAgICAgIFNoVHI6ICEhci5hZGRUcmFuc3BhcmVuY3ksCiAgICAgIFZjdEM6ICEhci5yZXN0cmljdENvbG9ycywKICAgICAgQ2xyUzogd2UuZW5jb2RlKHIuY29sb3JNb2RlbCksCiAgICAgIFJuZFM6IHIucmFuZG9tU2VlZCB8fCAwLAogICAgICBTbXRoOiBNYXRoLnJvdW5kKCgoYSA9IHIucm91Z2huZXNzKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMSkgKiA0MDk2KSwKICAgICAgIk1ubSAiOiAoci5taW4gfHwgWzAsIDAsIDAsIDBdKS5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHJldHVybiB0ICogMTAwOwogICAgICB9KSwKICAgICAgIk14bSAiOiAoci5tYXggfHwgWzEsIDEsIDEsIDFdKS5tYXAoZnVuY3Rpb24odCkgewogICAgICAgIHJldHVybiB0ICogMTAwOwogICAgICB9KQogICAgfTsKfQpmdW5jdGlvbiBLbihyKSB7CiAgdmFyIGUgPSB6bihyLkdyYWQpOwogIHJldHVybiBlLnN0eWxlID0gUmUuZGVjb2RlKHIuVHlwZSksIHIuRHRociAhPT0gdm9pZCAwICYmIChlLmRpdGhlciA9IHIuRHRociksIHIuZ3JhZGllbnRzSW50ZXJwb2xhdGlvbk1ldGhvZCAhPT0gdm9pZCAwICYmIChlLmludGVycG9sYXRpb25NZXRob2QgPSBMYS5kZWNvZGUoci5ncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kKSksIHIuUnZycyAhPT0gdm9pZCAwICYmIChlLnJldmVyc2UgPSByLlJ2cnMpLCByLkFuZ2wgIT09IHZvaWQgMCAmJiAoZS5hbmdsZSA9IGxhKHIuQW5nbCkpLCByWyJTY2wgIl0gIT09IHZvaWQgMCAmJiAoZS5zY2FsZSA9IEEwKHJbIlNjbCAiXSkpLCByLkFsZ24gIT09IHZvaWQgMCAmJiAoZS5hbGlnbiA9IHIuQWxnbiksIHIuT2ZzdCAhPT0gdm9pZCAwICYmIChlLm9mZnNldCA9IHsKICAgIHg6IEEwKHIuT2ZzdC5IcnpuKSwKICAgIHk6IEEwKHIuT2ZzdC5WcnRjKQogIH0pLCBlOwp9CmZ1bmN0aW9uIHFuKHIpIHsKICB2YXIgZSA9IHsKICAgIG5hbWU6IHIuUHRyblsiTm0gICJdLAogICAgaWQ6IHIuUHRybi5JZG50CiAgfTsKICByZXR1cm4gci5MbmtkICE9PSB2b2lkIDAgJiYgKGUubGlua2VkID0gci5MbmtkKSwgci5waGFzZSAhPT0gdm9pZCAwICYmIChlLnBoYXNlID0geyB4OiByLnBoYXNlLkhyem4sIHk6IHIucGhhc2UuVnJ0YyB9KSwgZTsKfQpmdW5jdGlvbiBEMihyKSB7CiAgaWYgKCJHcmFkIiBpbiByKQogICAgcmV0dXJuIEtuKHIpOwogIGlmICgiUHRybiIgaW4gcikKICAgIHJldHVybiBhYSh7IHR5cGU6ICJwYXR0ZXJuIiB9LCBxbihyKSk7CiAgaWYgKCJDbHIgIiBpbiByKQogICAgcmV0dXJuIHsgdHlwZTogImNvbG9yIiwgY29sb3I6IFNyKHJbIkNsciAiXSkgfTsKICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmVjdG9yIGNvbnRlbnQiKTsKfQpmdW5jdGlvbiAkbihyKSB7CiAgdmFyIGUgPSB7fTsKICByZXR1cm4gci5kaXRoZXIgIT09IHZvaWQgMCAmJiAoZS5EdGhyID0gci5kaXRoZXIpLCByLmludGVycG9sYXRpb25NZXRob2QgIT09IHZvaWQgMCAmJiAoZS5ncmFkaWVudHNJbnRlcnBvbGF0aW9uTWV0aG9kID0gTGEuZW5jb2RlKHIuaW50ZXJwb2xhdGlvbk1ldGhvZCkpLCByLnJldmVyc2UgIT09IHZvaWQgMCAmJiAoZS5SdnJzID0gci5yZXZlcnNlKSwgci5hbmdsZSAhPT0gdm9pZCAwICYmIChlLkFuZ2wgPSB3MihyLmFuZ2xlKSksIGUuVHlwZSA9IFJlLmVuY29kZShyLnN0eWxlKSwgci5hbGlnbiAhPT0gdm9pZCAwICYmIChlLkFsZ24gPSByLmFsaWduKSwgci5zY2FsZSAhPT0gdm9pZCAwICYmIChlWyJTY2wgIl0gPSAkMChyLnNjYWxlKSksIHIub2Zmc2V0ICYmIChlLk9mc3QgPSB7CiAgICBIcnpuOiAkMChyLm9mZnNldC54KSwKICAgIFZydGM6ICQwKHIub2Zmc2V0LnkpCiAgfSksIGUuR3JhZCA9IExuKHIpLCBlOwp9CmZ1bmN0aW9uIHIxKHIpIHsKICB2YXIgZSA9IHsKICAgIFB0cm46IHsKICAgICAgIk5tICAiOiByLm5hbWUgfHwgIiIsCiAgICAgIElkbnQ6IHIuaWQgfHwgIiIKICAgIH0KICB9OwogIHJldHVybiByLmxpbmtlZCAhPT0gdm9pZCAwICYmIChlLkxua2QgPSAhIXIubGlua2VkKSwgci5waGFzZSAhPT0gdm9pZCAwICYmIChlLnBoYXNlID0geyBIcnpuOiByLnBoYXNlLngsIFZydGM6IHIucGhhc2UueSB9KSwgZTsKfQpmdW5jdGlvbiB4MihyKSB7CiAgcmV0dXJuIHIudHlwZSA9PT0gImNvbG9yIiA/IHsga2V5OiAiU29DbyIsIGRlc2NyaXB0b3I6IHsgIkNsciAiOiBEcihyLmNvbG9yKSB9IH0gOiByLnR5cGUgPT09ICJwYXR0ZXJuIiA/IHsga2V5OiAiUHRGbCIsIGRlc2NyaXB0b3I6IHIxKHIpIH0gOiB7IGtleTogIkdkRmwiLCBkZXNjcmlwdG9yOiAkbihyKSB9Owp9CmZ1bmN0aW9uIFNyKHIpIHsKICBpZiAoIkggICAiIGluIHIpCiAgICByZXR1cm4geyBoOiB4bChyWyJIICAgIl0pLCBzOiByLlN0cnQsIGI6IHIuQnJnaCB9OwogIGlmICgiUmQgICIgaW4gcikKICAgIHJldHVybiB7IHI6IHJbIlJkICAiXSwgZzogclsiR3JuICJdLCBiOiByWyJCbCAgIl0gfTsKICBpZiAoIkN5biAiIGluIHIpCiAgICByZXR1cm4geyBjOiByWyJDeW4gIl0sIG06IHIuTWdudCwgeTogclsiWWx3ICJdLCBrOiByLkJsY2sgfTsKICBpZiAoIkdyeSAiIGluIHIpCiAgICByZXR1cm4geyBrOiByWyJHcnkgIl0gfTsKICBpZiAoIkxtbmMiIGluIHIpCiAgICByZXR1cm4geyBsOiByLkxtbmMsIGE6IHJbIkEgICAiXSwgYjogclsiQiAgICJdIH07CiAgaWYgKCJyZWRGbG9hdCIgaW4gcikKICAgIHJldHVybiB7IGZyOiByLnJlZEZsb2F0LCBmZzogci5ncmVlbkZsb2F0LCBmYjogci5ibHVlRmxvYXQgfTsKICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNvbG9yIGRlc2NyaXB0b3IiKTsKfQpmdW5jdGlvbiBEcihyKSB7CiAgaWYgKHIpIHsKICAgIGlmICgiciIgaW4gcikKICAgICAgcmV0dXJuIHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIlJHQkMiLCAiUmQgICI6IHIuciB8fCAwLCAiR3JuICI6IHIuZyB8fCAwLCAiQmwgICI6IHIuYiB8fCAwIH07CiAgICBpZiAoImZyIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUkdCQyIsIHJlZEZsb2F0OiByLmZyLCBncmVlbkZsb2F0OiByLmZnLCBibHVlRmxvYXQ6IHIuZmIgfTsKICAgIGlmICgiaCIgaW4gcikKICAgICAgcmV0dXJuIHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIkhTQkMiLCAiSCAgICI6IHcyKHIuaCAqIDM2MCksIFN0cnQ6IHIucyB8fCAwLCBCcmdoOiByLmIgfHwgMCB9OwogICAgaWYgKCJjIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiQ01ZQyIsICJDeW4gIjogci5jIHx8IDAsIE1nbnQ6IHIubSB8fCAwLCAiWWx3ICI6IHIueSB8fCAwLCBCbGNrOiByLmsgfHwgMCB9OwogICAgaWYgKCJsIiBpbiByKQogICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiTEFCQyIsIExtbmM6IHIubCB8fCAwLCAiQSAgICI6IHIuYSB8fCAwLCAiQiAgICI6IHIuYiB8fCAwIH07CiAgICBpZiAoImsiIGluIHIpCiAgICAgIHJldHVybiB7IF9uYW1lOiAiIiwgX2NsYXNzSUQ6ICJHUllDIiwgIkdyeSAiOiByLmsgfTsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciB2YWx1ZSIpOwogIH0gZWxzZSByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUkdCQyIsICJSZCAgIjogMCwgIkdybiAiOiAwLCAiQmwgICI6IDAgfTsKfQpmdW5jdGlvbiBsYShyKSB7CiAgaWYgKHIgPT09IHZvaWQgMCkKICAgIHJldHVybiAwOwogIGlmIChyLnVuaXRzICE9PSAiQW5nbGUiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHVuaXRzOiAiLmNvbmNhdChyLnVuaXRzKSk7CiAgcmV0dXJuIHIudmFsdWU7Cn0KZnVuY3Rpb24gQTAocikgewogIGlmIChyID09PSB2b2lkIDApCiAgICByZXR1cm4gMTsKICBpZiAoci51bml0cyAhPT0gIlBlcmNlbnQiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHVuaXRzOiAiLmNvbmNhdChyLnVuaXRzKSk7CiAgcmV0dXJuIHIudmFsdWUgLyAxMDA7Cn0KZnVuY3Rpb24geGwocikgewogIGlmIChyID09PSB2b2lkIDApCiAgICByZXR1cm4gMTsKICBpZiAoci51bml0cyA9PT0gIlBlcmNlbnQiKQogICAgcmV0dXJuIHIudmFsdWUgLyAxMDA7CiAgaWYgKHIudW5pdHMgPT09ICJBbmdsZSIpCiAgICByZXR1cm4gci52YWx1ZSAvIDM2MDsKICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KHIudW5pdHMpKTsKfQpmdW5jdGlvbiBGMChyKSB7CiAgdmFyIGUgPSByLnVuaXRzLCBhID0gci52YWx1ZTsKICBpZiAoZSAhPT0gIlBpeGVscyIgJiYgZSAhPT0gIk1pbGxpbWV0ZXJzIiAmJiBlICE9PSAiUG9pbnRzIiAmJiBlICE9PSAiTm9uZSIgJiYgZSAhPT0gIlBpY2FzIiAmJiBlICE9PSAiSW5jaGVzIiAmJiBlICE9PSAiQ2VudGltZXRlcnMiICYmIGUgIT09ICJEZW5zaXR5IikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1bml0czogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoeyB1bml0czogZSwgdmFsdWU6IGEgfSkpKTsKICByZXR1cm4geyB2YWx1ZTogYSwgdW5pdHM6IGUgfTsKfQpmdW5jdGlvbiBjYShyLCBlKSB7CiAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9ICJQaXhlbHMiKSwgdHlwZW9mIHIgPT0gIm51bWJlciIgPyB7IHZhbHVlOiByLCB1bml0czogZSB9IDogRjAocik7Cn0KZnVuY3Rpb24gcmUociwgZSkgewogIHZhciBhID0gci51bml0cywgQSA9IHIudmFsdWU7CiAgaWYgKGEgIT09IGUpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHM6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHsgdW5pdHM6IGEsIHZhbHVlOiBBIH0pKSk7CiAgcmV0dXJuIEE7Cn0KZnVuY3Rpb24gdzIocikgewogIHJldHVybiB7IHVuaXRzOiAiQW5nbGUiLCB2YWx1ZTogciB8fCAwIH07Cn0KZnVuY3Rpb24gJDAocikgewogIHJldHVybiB7IHVuaXRzOiAiUGVyY2VudCIsIHZhbHVlOiBNYXRoLnJvdW5kKChyIHx8IDApICogMTAwKSB9Owp9CmZ1bmN0aW9uIEVyKHIpIHsKICByZXR1cm4geyB1bml0czogIlBlcmNlbnQiLCB2YWx1ZTogKHIgfHwgMCkgKiAxMDAgfTsKfQpmdW5jdGlvbiBEMChyLCBlKSB7CiAgaWYgKHIgPT0gbnVsbCkKICAgIHJldHVybiB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfTsKICBpZiAodHlwZW9mIHIgIT0gIm9iamVjdCIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHIpLCAiIChrZXk6ICIpLmNvbmNhdChlLCAiKSAoc2hvdWxkIGhhdmUgdmFsdWUgYW5kIHVuaXRzKSIpKTsKICB2YXIgYSA9IHIudW5pdHMsIEEgPSByLnZhbHVlOwogIGlmICh0eXBlb2YgQSAhPSAibnVtYmVyIikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBpbiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShyKSwgIiAoa2V5OiAiKS5jb25jYXQoZSwgIikiKSk7CiAgaWYgKGEgIT09ICJQaXhlbHMiICYmIGEgIT09ICJNaWxsaW1ldGVycyIgJiYgYSAhPT0gIlBvaW50cyIgJiYgYSAhPT0gIk5vbmUiICYmIGEgIT09ICJQaWNhcyIgJiYgYSAhPT0gIkluY2hlcyIgJiYgYSAhPT0gIkNlbnRpbWV0ZXJzIiAmJiBhICE9PSAiRGVuc2l0eSIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdW5pdHMgaW4gIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkociksICIgKGtleTogIikuY29uY2F0KGUsICIpIikpOwogIHJldHVybiB7IHVuaXRzOiBhLCB2YWx1ZTogQSB9Owp9CmZ1bmN0aW9uIG5yKHIpIHsKICB2YXIgZSA9IHIubnVtZXJhdG9yLCBhID0gci5kZW5vbWluYXRvcjsKICByZXR1cm4geyBudW1lcmF0b3I6IGUsIGRlbm9taW5hdG9yOiBhIH07Cn0KdmFyIHRpID0gdTAoInRleHRHcmlkZGluZyIsICJub25lIiwgewogIG5vbmU6ICJOb25lIiwKICByb3VuZDogIlJuZCAiCn0pLCB5MiA9IHUwKCJPcm50IiwgImhvcml6b250YWwiLCB7CiAgaG9yaXpvbnRhbDogIkhyem4iLAogIHZlcnRpY2FsOiAiVnJ0YyIKfSksIGlpID0gdTAoIkFubnQiLCAic2hhcnAiLCB7CiAgbm9uZTogIkFubm8iLAogIHNoYXJwOiAiYW50aUFsaWFzU2hhcnAiLAogIGNyaXNwOiAiQW5DciIsCiAgc3Ryb25nOiAiQW5TdCIsCiAgc21vb3RoOiAiQW5TbSIsCiAgcGxhdGZvcm06ICJhbnRpQWxpYXNQbGF0Zm9ybUdyYXkiLAogIHBsYXRmb3JtTENEOiAiYW50aUFsaWFzUGxhdGZvcm1MQ0QiCn0pLCBQQSA9IHUwKCJ3YXJwU3R5bGUiLCAibm9uZSIsIHsKICBub25lOiAid2FycE5vbmUiLAogIGFyYzogIndhcnBBcmMiLAogIGFyY0xvd2VyOiAid2FycEFyY0xvd2VyIiwKICBhcmNVcHBlcjogIndhcnBBcmNVcHBlciIsCiAgYXJjaDogIndhcnBBcmNoIiwKICBidWxnZTogIndhcnBCdWxnZSIsCiAgc2hlbGxMb3dlcjogIndhcnBTaGVsbExvd2VyIiwKICBzaGVsbFVwcGVyOiAid2FycFNoZWxsVXBwZXIiLAogIGZsYWc6ICJ3YXJwRmxhZyIsCiAgd2F2ZTogIndhcnBXYXZlIiwKICBmaXNoOiAid2FycEZpc2giLAogIHJpc2U6ICJ3YXJwUmlzZSIsCiAgZmlzaGV5ZTogIndhcnBGaXNoZXllIiwKICBpbmZsYXRlOiAid2FycEluZmxhdGUiLAogIHNxdWVlemU6ICJ3YXJwU3F1ZWV6ZSIsCiAgdHdpc3Q6ICJ3YXJwVHdpc3QiLAogIGN5bGluZGVyOiAid2FycEN5bGluZGVyIiwKICBjdXN0b206ICJ3YXJwQ3VzdG9tIgp9KSwgb3IgPSB1MCgiQmxuTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgZGlzc29sdmU6ICJEc2x2IiwKICBkYXJrZW46ICJEcmtuIiwKICBtdWx0aXBseTogIk1sdHAiLAogICJjb2xvciBidXJuIjogIkNCcm4iLAogICJsaW5lYXIgYnVybiI6ICJsaW5lYXJCdXJuIiwKICAiZGFya2VyIGNvbG9yIjogImRhcmtlckNvbG9yIiwKICBsaWdodGVuOiAiTGdobiIsCiAgc2NyZWVuOiAiU2NybiIsCiAgImNvbG9yIGRvZGdlIjogIkNEZGciLAogICJsaW5lYXIgZG9kZ2UiOiAibGluZWFyRG9kZ2UiLAogICJsaWdodGVyIGNvbG9yIjogImxpZ2h0ZXJDb2xvciIsCiAgb3ZlcmxheTogIk92cmwiLAogICJzb2Z0IGxpZ2h0IjogIlNmdEwiLAogICJoYXJkIGxpZ2h0IjogIkhyZEwiLAogICJ2aXZpZCBsaWdodCI6ICJ2aXZpZExpZ2h0IiwKICAibGluZWFyIGxpZ2h0IjogImxpbmVhckxpZ2h0IiwKICAicGluIGxpZ2h0IjogInBpbkxpZ2h0IiwKICAiaGFyZCBtaXgiOiAiaGFyZE1peCIsCiAgZGlmZmVyZW5jZTogIkRmcm4iLAogIGV4Y2x1c2lvbjogIlhjbHUiLAogIHN1YnRyYWN0OiAiYmxlbmRTdWJ0cmFjdGlvbiIsCiAgZGl2aWRlOiAiYmxlbmREaXZpZGUiLAogIGh1ZTogIkggICAiLAogIHNhdHVyYXRpb246ICJTdHJ0IiwKICBjb2xvcjogIkNsciAiLAogIGx1bWlub3NpdHk6ICJMbW5zIiwKICAvLyB1c2VkIGluIEFCUgogICJsaW5lYXIgaGVpZ2h0IjogImxpbmVhckhlaWdodCIsCiAgaGVpZ2h0OiAiSGdodCIsCiAgc3VidHJhY3Rpb246ICJTYnRyIgogIC8vIDJuZCB2ZXJzaW9uIG9mIHN1YnRyYWN0ID8KfSksIGExID0gdTAoIkJFU2wiLCAiaW5uZXIgYmV2ZWwiLCB7CiAgImlubmVyIGJldmVsIjogIkluckIiLAogICJvdXRlciBiZXZlbCI6ICJPdHJCIiwKICBlbWJvc3M6ICJFbWJzIiwKICAicGlsbG93IGVtYm9zcyI6ICJQbEViIiwKICAic3Ryb2tlIGVtYm9zcyI6ICJzdHJva2VFbWJvc3MiCn0pLCBlMSA9IHUwKCJidmxUIiwgInNtb290aCIsIHsKICBzbW9vdGg6ICJTZkJMIiwKICAiY2hpc2VsIGhhcmQiOiAiUHJCTCIsCiAgImNoaXNlbCBzb2Z0IjogIlNsbXQiCn0pLCBBMSA9IHUwKCJCRVNzIiwgInVwIiwgewogIHVwOiAiSW4gICIsCiAgZG93bjogIk91dCAiCn0pLCB0MSA9IHUwKCJCRVRFIiwgInNvZnRlciIsIHsKICBzb2Z0ZXI6ICJTZkJMIiwKICBwcmVjaXNlOiAiUHJCTCIKfSksIGkxID0gdTAoIklHU3IiLCAiZWRnZSIsIHsKICBlZGdlOiAiU3JjRSIsCiAgY2VudGVyOiAiU3JjQyIKfSksIFJlID0gdTAoIkdyZFQiLCAibGluZWFyIiwgewogIGxpbmVhcjogIkxuciAiLAogIHJhZGlhbDogIlJkbCAiLAogIGFuZ2xlOiAiQW5nbCIsCiAgcmVmbGVjdGVkOiAiUmZsYyIsCiAgZGlhbW9uZDogIkRtbmQiCn0pLCBuMSA9IHUwKCJhbmltSW50ZXJwU3R5bGUiLCAibGluZWFyIiwgewogIGxpbmVhcjogIkxuciAiLAogIGhvbGQ6ICJob2xkIgp9KSwgZjEgPSB1MCgic3RkVHJhY2tJRCIsICJvcGFjaXR5IiwgewogIG9wYWNpdHk6ICJvcGFjaXR5VHJhY2siLAogIHN0eWxlOiAic3R5bGVUcmFjayIsCiAgc2hlZXRUcmFuc2Zvcm06ICJzaGVldFRyYW5zZm9ybVRyYWNrIiwKICBzaGVldFBvc2l0aW9uOiAic2hlZXRQb3NpdGlvblRyYWNrIiwKICBnbG9iYWxMaWdodGluZzogImdsb2JhbExpZ2h0aW5nVHJhY2siCn0pLCBMYSA9IHUwKCJncmFkaWVudEludGVycG9sYXRpb25NZXRob2RUeXBlIiwgInBlcmNlcHR1YWwiLCB7CiAgcGVyY2VwdHVhbDogIlBlcmMiLAogIGxpbmVhcjogIkxuciAiLAogIGNsYXNzaWM6ICJHY2xzIiwKICBzbW9vdGg6ICJTbW9vIgogIC8vIFRPRE86IHN0cmlwZXMKfSksIHdlID0gdTAoIkNsclMiLCAicmdiIiwgewogIHJnYjogIlJHQkMiLAogIGhzYjogIkhTQmwiLAogIGxhYjogIkxiQ2wiLAogIGhzbDogIkhTTEMiCn0pLCBWZSA9IHUwKCJGU3RsIiwgIm91dHNpZGUiLCB7CiAgb3V0c2lkZTogIk91dEYiLAogIGNlbnRlcjogIkN0ckYiLAogIGluc2lkZTogIkluc0YiCn0pLCBvMSA9IHUwKCJGckZsIiwgImNvbG9yIiwgewogIGNvbG9yOiAiU0NsciIsCiAgZ3JhZGllbnQ6ICJHckZsIiwKICBwYXR0ZXJuOiAiUHRybiIKfSksIG5pID0gdTAoIkVTbGljZVR5cGUiLCAiaW1hZ2UiLCB7CiAgaW1hZ2U6ICJJbWcgIiwKICBub0ltYWdlOiAibm9JbWFnZSIKfSksIGZpID0gdTAoIkVTbGljZUhvcnpBbGlnbiIsICJkZWZhdWx0IiwgewogIGRlZmF1bHQ6ICJkZWZhdWx0Igp9KSwgb2kgPSB1MCgiRVNsaWNlVmVydEFsaWduIiwgImRlZmF1bHQiLCB7CiAgZGVmYXVsdDogImRlZmF1bHQiCn0pLCB1aSA9IHUwKCJFU2xpY2VPcmlnaW4iLCAidXNlckdlbmVyYXRlZCIsIHsKICB1c2VyR2VuZXJhdGVkOiAidXNlckdlbmVyYXRlZCIsCiAgYXV0b0dlbmVyYXRlZDogImF1dG9HZW5lcmF0ZWQiLAogIGxheWVyOiAibGF5ZXIiCn0pLCBsaSA9IHUwKCJFU2xpY2VCR0NvbG9yVHlwZSIsICJub25lIiwgewogIG5vbmU6ICJOb25lIiwKICBtYXR0ZTogIm1hdHRlIiwKICBjb2xvcjogIkNsciAiCn0pLCBjaSA9IHUwKCJzdHJva2VTdHlsZUxpbmVDYXBUeXBlIiwgImJ1dHQiLCB7CiAgYnV0dDogInN0cm9rZVN0eWxlQnV0dENhcCIsCiAgcm91bmQ6ICJzdHJva2VTdHlsZVJvdW5kQ2FwIiwKICBzcXVhcmU6ICJzdHJva2VTdHlsZVNxdWFyZUNhcCIKfSksIHNpID0gdTAoInN0cm9rZVN0eWxlTGluZUpvaW5UeXBlIiwgIm1pdGVyIiwgewogIG1pdGVyOiAic3Ryb2tlU3R5bGVNaXRlckpvaW4iLAogIHJvdW5kOiAic3Ryb2tlU3R5bGVSb3VuZEpvaW4iLAogIGJldmVsOiAic3Ryb2tlU3R5bGVCZXZlbEpvaW4iCn0pLCBiaSA9IHUwKCJzdHJva2VTdHlsZUxpbmVBbGlnbm1lbnQiLCAiaW5zaWRlIiwgewogIGluc2lkZTogInN0cm9rZVN0eWxlQWxpZ25JbnNpZGUiLAogIGNlbnRlcjogInN0cm9rZVN0eWxlQWxpZ25DZW50ZXIiLAogIG91dHNpZGU6ICJzdHJva2VTdHlsZUFsaWduT3V0c2lkZSIKfSksIHUxID0gdTAoIkJsck0iLCAiaXNwaW5tYWdlIiwgewogIHNwaW46ICJTcG4gIiwKICB6b29tOiAiWm0gICIKfSksIGwxID0gdTAoIkJsclEiLCAiZ29vZCIsIHsKICBkcmFmdDogIkRyZnQiLAogIGdvb2Q6ICJHZCAgIiwKICBiZXN0OiAiQnN0ICIKfSksIGMxID0gdTAoIlNtQk0iLCAibm9ybWFsIiwgewogIG5vcm1hbDogIlNCTU4iLAogICJlZGdlIG9ubHkiOiAiU0JNRSIsCiAgIm92ZXJsYXkgZWRnZSI6ICJTQk1PIgp9KSwgczEgPSB1MCgiU21CUSIsICJtZWRpdW0iLCB7CiAgbG93OiAiU0JRTCIsCiAgbWVkaXVtOiAiU0JRTSIsCiAgaGlnaDogIlNCUUgiCn0pLCBiMSA9IHUwKCJEc3BNIiwgInN0cmV0Y2ggdG8gZml0IiwgewogICJzdHJldGNoIHRvIGZpdCI6ICJTdHJGIiwKICB0aWxlOiAiVGlsZSIKfSksIFVhID0gdTAoIlVuZEEiLCAicmVwZWF0IGVkZ2UgcGl4ZWxzIiwgewogICJ3cmFwIGFyb3VuZCI6ICJXcnBBIiwKICAicmVwZWF0IGVkZ2UgcGl4ZWxzIjogIlJwdEUiCn0pLCBkMSA9IHUwKCJDbnZyIiwgInJlY3Rhbmd1bGFyIHRvIHBvbGFyIiwgewogICJyZWN0YW5ndWxhciB0byBwb2xhciI6ICJSY3RQIiwKICAicG9sYXIgdG8gcmVjdGFuZ3VsYXIiOiAiUGxyUiIKfSksIGgxID0gdTAoIlJwbFMiLCAibWVkaXVtIiwgewogIHNtYWxsOiAiU21sICIsCiAgbWVkaXVtOiAiTWRtICIsCiAgbGFyZ2U6ICJMcmcgIgp9KSwgdjEgPSB1MCgiU3BoTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgImhvcml6b250YWwgb25seSI6ICJIcnpPIiwKICAidmVydGljYWwgb25seSI6ICJWcnRPIgp9KSwgazEgPSB1MCgiV3Z0cCIsICJzaW5lIiwgewogIHNpbmU6ICJXdlNuIiwKICB0cmlhbmdsZTogIld2VHIiLAogIHNxdWFyZTogIld2U3EiCn0pLCBnMSA9IHUwKCJaWlR5IiwgInBvbmQgcmlwcGxlcyIsIHsKICAiYXJvdW5kIGNlbnRlciI6ICJBcm5DIiwKICAib3V0IGZyb20gY2VudGVyIjogIk90RnIiLAogICJwb25kIHJpcHBsZXMiOiAiUG5kUiIKfSksIG0xID0gdTAoIkRzdHIiLCAidW5pZm9ybSIsIHsKICB1bmlmb3JtOiAiVW5mciIsCiAgZ2F1c3NpYW46ICJHc24gIgp9KSwgRTIgPSB1MCgiQ2hubCIsICJjb21wb3NpdGUiLCB7CiAgcmVkOiAiUmQgICIsCiAgZ3JlZW46ICJHcm4gIiwKICBibHVlOiAiQmwgICIsCiAgY29tcG9zaXRlOiAiQ21wcyIKfSksIHAxID0gdTAoIk16dFQiLCAiZmluZSBkb3RzIiwgewogICJmaW5lIGRvdHMiOiAiRm5EdCIsCiAgIm1lZGl1bSBkb3RzIjogIk1kbUQiLAogICJncmFpbnkgZG90cyI6ICJHcm5EIiwKICAiY29hcnNlIGRvdHMiOiAiQ3JzRCIsCiAgInNob3J0IGxpbmVzIjogIlNockwiLAogICJtZWRpdW0gbGluZXMiOiAiTWRtTCIsCiAgImxvbmcgbGluZXMiOiAiTG5nTCIsCiAgInNob3J0IHN0cm9rZXMiOiAiU2hTdCIsCiAgIm1lZGl1bSBzdHJva2VzIjogIk1kbVMiLAogICJsb25nIHN0cm9rZXMiOiAiTG5nUyIKfSksIHcxID0gdTAoIkxucyAiLCAiNTAtMzAwbW0gem9vbSIsIHsKICAiNTAtMzAwbW0gem9vbSI6ICJabSAgIiwKICAiMzJtbSBwcmltZSI6ICJOa24gIiwKICAiMTA1bW0gcHJpbWUiOiAiTmtuMSIsCiAgIm1vdmllIHByaW1lIjogIlBuVnMiCn0pLCB5MSA9IHUwKCJibHVyVHlwZSIsICJnYXVzc2lhbiBibHVyIiwgewogICJnYXVzc2lhbiBibHVyIjogIkdzbkIiLAogICJsZW5zIGJsdXIiOiAibGVuc0JsdXIiLAogICJtb3Rpb24gYmx1ciI6ICJNdG5CIgp9KSwgRTEgPSB1MCgiRGZzTSIsICJub3JtYWwiLCB7CiAgbm9ybWFsOiAiTnJtbCIsCiAgImRhcmtlbiBvbmx5IjogIkRya08iLAogICJsaWdodGVuIG9ubHkiOiAiTGdoTyIsCiAgYW5pc290cm9waWM6ICJhbmlzb3Ryb3BpYyIKfSksIFoxID0gdTAoIkV4dFQiLCAiYmxvY2tzIiwgewogIGJsb2NrczogIkJsa3MiLAogIHB5cmFtaWRzOiAiUHlybSIKfSksIEIxID0gdTAoIkV4dFIiLCAicmFuZG9tIiwgewogIHJhbmRvbTogIlJuZG0iLAogICJsZXZlbC1iYXNlZCI6ICJMdmxCIgp9KSwgSTEgPSB1MCgiRmxDbCIsICJiYWNrZ3JvdW5kIGNvbG9yIiwgewogICJiYWNrZ3JvdW5kIGNvbG9yIjogIkZsQmMiLAogICJmb3JlZ3JvdW5kIGNvbG9yIjogIkZsRnIiLAogICJpbnZlcnNlIGltYWdlIjogIkZsSW4iLAogICJ1bmFsdGVyZWQgaW1hZ2UiOiAiRmxTbSIKfSksIEYxID0gdTAoIkNudEUiLCAidXBwZXIiLCB7CiAgbG93ZXI6ICJMd3IgIiwKICB1cHBlcjogIlVwciAiCn0pLCBDMSA9IHUwKCJXbmRNIiwgIndpbmQiLCB7CiAgd2luZDogIlduZCAiLAogIGJsYXN0OiAiQmxzdCIsCiAgc3RhZ2dlcjogIlN0Z3IiCn0pLCBXMSA9IHUwKCJEcmN0IiwgImZyb20gdGhlIHJpZ2h0IiwgewogIGxlZnQ6ICJMZWZ0IiwKICByaWdodDogIlJnaHQiCn0pLCBfMSA9IHUwKCJJbnRFIiwgIm9kZCBsaW5lcyIsIHsKICAib2RkIGxpbmVzIjogIkVsbU8iLAogICJldmVuIGxpbmVzIjogIkVsbUUiCn0pLCBHMSA9IHUwKCJJbnRDIiwgImludGVycG9sYXRpb24iLCB7CiAgZHVwbGljYXRpb246ICJDcnREIiwKICBpbnRlcnBvbGF0aW9uOiAiQ3J0SSIKfSksIFgxID0gdTAoIkZsTWQiLCAid3JhcCBhcm91bmQiLCB7CiAgInNldCB0byB0cmFuc3BhcmVudCI6ICJCY2tnIiwKICAicmVwZWF0IGVkZ2UgcGl4ZWxzIjogIlJwdCAiLAogICJ3cmFwIGFyb3VuZCI6ICJXcnAgIgp9KTsKdTAoInByak0iLCAiZmlzaGV5ZSIsIHsKICBmaXNoZXllOiAiZmlzUCIsCiAgcGVyc3BlY3RpdmU6ICJwZXJQIiwKICBhdXRvOiAiYXV0byIsCiAgImZ1bGwgc3BoZXJpY2FsIjogImZ1c1AiCn0pOwp2YXIgUjEgPSB1MCgicHJlc2V0S2luZFR5cGUiLCAicHJlc2V0S2luZEN1c3RvbSIsIHsKICBjdXN0b206ICJwcmVzZXRLaW5kQ3VzdG9tIiwKICBkZWZhdWx0OiAicHJlc2V0S2luZERlZmF1bHQiCn0pLCBUYSA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBUYSA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24ocikgewogICAgZm9yICh2YXIgZSwgYSA9IDEsIEEgPSBhcmd1bWVudHMubGVuZ3RoOyBhIDwgQTsgYSsrKSB7CiAgICAgIGUgPSBhcmd1bWVudHNbYV07CiAgICAgIGZvciAodmFyIHQgaW4gZSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHQpICYmIChyW3RdID0gZVt0XSk7CiAgICB9CiAgICByZXR1cm4gcjsKICB9LCBUYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9LCBWMSA9IFtdLCBTMSA9IHt9OwpmdW5jdGlvbiBCMChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSB7IGtleTogciwgaGFzOiBlLCByZWFkOiBhLCB3cml0ZTogQSB9OwogIFYxLnB1c2godCksIFMxW3Qua2V5XSA9IHQ7Cn0KdmFyIGFlID0gW3ZvaWQgMCwgIlBQSSIsICJQUENNIl0sIGVlID0gW3ZvaWQgMCwgIkluY2hlcyIsICJDZW50aW1ldGVycyIsICJQb2ludHMiLCAiUGljYXMiLCAiQ29sdW1ucyJdLCBkaSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKZnVuY3Rpb24gaGkocikgewogIHJldHVybiByIDw9IDU3ID8gciAtIDQ4IDogciAtIDg3Owp9CmZ1bmN0aW9uIE5sKHIsIGUpIHsKICByZXR1cm4gaGkoci5jaGFyQ29kZUF0KGUpKSA8PCA0IHwgaGkoci5jaGFyQ29kZUF0KGUgKyAxKSk7Cn0KZnVuY3Rpb24gWUEociwgZSkgewogIHZhciBhID0gWTAociwgZSk7CiAgcmV0dXJuIE1uKGEpOwp9CmZ1bmN0aW9uIE9BKHIsIGUpIHsKICB2YXIgYSA9IE5uKGUpOwogIE5yKHIsIGEpOwp9CmZ1bmN0aW9uIE1sKHIpIHsKICBmb3IgKHZhciBlID0gTyhyKSwgYSA9IFkwKHIsIGUpLCBBID0gITEsIHQgPSAwOyB0IDwgYS5ieXRlTGVuZ3RoOyB0KyspCiAgICBpZiAoYVt0XSAmIDEyOCkgewogICAgICBBID0gITA7CiAgICAgIGJyZWFrOwogICAgfQogIGlmIChBKSB7CiAgICB2YXIgaSA9IG5ldyBUZXh0RGVjb2RlcigiZ2JrIik7CiAgICByZXR1cm4gaS5kZWNvZGUoYSk7CiAgfSBlbHNlCiAgICByZXR1cm4gTW4oYSk7Cn0KZnVuY3Rpb24gVGwociwgZSkgewogIGZvciAodmFyIGEgPSAiIiwgQSA9IDAsIHQgPSBlLmNvZGVQb2ludEF0KEErKyk7IHQgIT09IHZvaWQgMDsgdCA9IGUuY29kZVBvaW50QXQoQSsrKSkKICAgIGEgKz0gdCA+IDEyNyA/ICI/IiA6IFN0cmluZy5mcm9tQ29kZVBvaW50KHQpOwogIHZhciBpID0gTm4oYSk7CiAgVChyLCBpLmJ5dGVMZW5ndGgpLCBOcihyLCBpKTsKfQpCMCgxMDYxLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuY2FwdGlvbkRpZ2VzdCAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9ICIiLCBBID0gMDsgQSA8IDE2OyBBKyspIHsKICAgIHZhciB0ID0gTyhyKTsKICAgIGEgKz0gZGlbdCA+PiA0XSwgYSArPSBkaVt0ICYgMTVdOwogIH0KICBlLmNhcHRpb25EaWdlc3QgPSBhOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCAxNjsgYSsrKQogICAgVChyLCBObChlLmNhcHRpb25EaWdlc3QsIGEgKiAyKSk7Cn0pOwpCMCgxMDYwLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIueG1wTWV0YWRhdGEgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUueG1wTWV0YWRhdGEgPSBZQShyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgT0EociwgZS54bXBNZXRhZGF0YSk7Cn0pOwp2YXIgQWUgPSB1MCgiSW50ZSIsICJwZXJjZXB0dWFsIiwgewogIHBlcmNlcHR1YWw6ICJJbWcgIiwKICBzYXR1cmF0aW9uOiAiR3JwICIsCiAgInJlbGF0aXZlIGNvbG9yaW1ldHJpYyI6ICJDbHJtIiwKICAiYWJzb2x1dGUgY29sb3JpbWV0cmljIjogIkFDbHIiCn0pOwpCMCgxMDgyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucHJpbnRJbmZvcm1hdGlvbiAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEsIEEsIHQgPSBtMChyKTsKICBlLnByaW50SW5mb3JtYXRpb24gPSB7CiAgICBwcmludGVyTmFtZTogdC5wcmludGVyTmFtZSB8fCAiIiwKICAgIHJlbmRlcmluZ0ludGVudDogQWUuZGVjb2RlKChhID0gdC5JbnRlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogIkludGUuSW1nICIpCiAgfTsKICB2YXIgaSA9IGUucHJpbnRJbmZvcm1hdGlvbjsKICB0LlBzdFMgIT09IHZvaWQgMCAmJiAoaS5wcmludGVyTWFuYWdlc0NvbG9ycyA9IHQuUHN0UyksIHRbIk5tICAiXSAhPT0gdm9pZCAwICYmIChpLnByaW50ZXJQcm9maWxlID0gdFsiTm0gICJdKSwgdC5NcEJsICE9PSB2b2lkIDAgJiYgKGkuYmxhY2tQb2ludENvbXBlbnNhdGlvbiA9IHQuTXBCbCksIHQucHJpbnRTaXh0ZWVuQml0ICE9PSB2b2lkIDAgJiYgKGkucHJpbnRTaXh0ZWVuQml0ID0gdC5wcmludFNpeHRlZW5CaXQpLCB0LmhhcmRQcm9vZiAhPT0gdm9pZCAwICYmIChpLmhhcmRQcm9vZiA9IHQuaGFyZFByb29mKSwgdC5wcmludFByb29mU2V0dXAgJiYgKCJCbHRuIiBpbiB0LnByaW50UHJvb2ZTZXR1cCA/IGkucHJvb2ZTZXR1cCA9IHsgYnVpbHRpbjogdC5wcmludFByb29mU2V0dXAuQmx0bi5zcGxpdCgiLiIpWzFdIH0gOiBpLnByb29mU2V0dXAgPSB7CiAgICBwcm9maWxlOiB0LnByaW50UHJvb2ZTZXR1cC5wcm9maWxlLAogICAgcmVuZGVyaW5nSW50ZW50OiBBZS5kZWNvZGUoKEEgPSB0LnByaW50UHJvb2ZTZXR1cC5JbnRlKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogIkludGUuSW1nICIpLAogICAgYmxhY2tQb2ludENvbXBlbnNhdGlvbjogISF0LnByaW50UHJvb2ZTZXR1cC5NcEJsLAogICAgcGFwZXJXaGl0ZTogISF0LnByaW50UHJvb2ZTZXR1cC5wYXBlcldoaXRlCiAgfSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCA9IGUucHJpbnRJbmZvcm1hdGlvbiwgaSA9IHt9OwogIHQucHJpbnRlck1hbmFnZXNDb2xvcnMgPyBpLlBzdFMgPSAhMCA6ICh0LmhhcmRQcm9vZiAhPT0gdm9pZCAwICYmIChpLmhhcmRQcm9vZiA9ICEhdC5oYXJkUHJvb2YpLCBpLkNsclMgPSAiQ2xyUy5SR0JDIiwgaVsiTm0gICJdID0gKGEgPSB0LnByaW50ZXJQcm9maWxlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogIkNJRSBSR0IiKSwgaS5JbnRlID0gQWUuZW5jb2RlKHQucmVuZGVyaW5nSW50ZW50KSwgdC5wcmludGVyTWFuYWdlc0NvbG9ycyB8fCAoaS5NcEJsID0gISF0LmJsYWNrUG9pbnRDb21wZW5zYXRpb24pLCBpLnByaW50U2l4dGVlbkJpdCA9ICEhdC5wcmludFNpeHRlZW5CaXQsIGkucHJpbnRlck5hbWUgPSB0LnByaW50ZXJOYW1lIHx8ICIiLCB0LnByb29mU2V0dXAgJiYgInByb2ZpbGUiIGluIHQucHJvb2ZTZXR1cCA/IGkucHJpbnRQcm9vZlNldHVwID0gewogICAgcHJvZmlsZTogdC5wcm9vZlNldHVwLnByb2ZpbGUgfHwgIiIsCiAgICBJbnRlOiBBZS5lbmNvZGUodC5wcm9vZlNldHVwLnJlbmRlcmluZ0ludGVudCksCiAgICBNcEJsOiAhIXQucHJvb2ZTZXR1cC5ibGFja1BvaW50Q29tcGVuc2F0aW9uLAogICAgcGFwZXJXaGl0ZTogISF0LnByb29mU2V0dXAucGFwZXJXaGl0ZQogIH0gOiBpLnByaW50UHJvb2ZTZXR1cCA9IHsKICAgIEJsdG46ICEoKEEgPSB0LnByb29mU2V0dXApID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCkgJiYgQS5idWlsdGluID8gImJ1aWx0aW5Qcm9vZi4iLmNvbmNhdCh0LnByb29mU2V0dXAuYnVpbHRpbikgOiAiYnVpbHRpblByb29mLnByb29mQ01ZSyIKICB9LCBwMChyLCAiIiwgInByaW50T3V0cHV0IiwgaSk7Cn0pOwpCMCgxMDA1LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucmVzb2x1dGlvbkluZm8gIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gaHIociksIEEgPSBQKHIpLCB0ID0gUChyKSwgaSA9IGhyKHIpLCBuID0gUChyKSwgZiA9IFAocik7CiAgZS5yZXNvbHV0aW9uSW5mbyA9IHsKICAgIGhvcml6b250YWxSZXNvbHV0aW9uOiBhLAogICAgaG9yaXpvbnRhbFJlc29sdXRpb25Vbml0OiBhZVtBXSB8fCAiUFBJIiwKICAgIHdpZHRoVW5pdDogZWVbdF0gfHwgIkluY2hlcyIsCiAgICB2ZXJ0aWNhbFJlc29sdXRpb246IGksCiAgICB2ZXJ0aWNhbFJlc29sdXRpb25Vbml0OiBhZVtuXSB8fCAiUFBJIiwKICAgIGhlaWdodFVuaXQ6IGVlW2ZdIHx8ICJJbmNoZXMiCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5yZXNvbHV0aW9uSW5mbzsKICBncihyLCBhLmhvcml6b250YWxSZXNvbHV0aW9uIHx8IDApLCB4KHIsIE1hdGgubWF4KDEsIGFlLmluZGV4T2YoYS5ob3Jpem9udGFsUmVzb2x1dGlvblVuaXQpKSksIHgociwgTWF0aC5tYXgoMSwgZWUuaW5kZXhPZihhLndpZHRoVW5pdCkpKSwgZ3IociwgYS52ZXJ0aWNhbFJlc29sdXRpb24gfHwgMCksIHgociwgTWF0aC5tYXgoMSwgYWUuaW5kZXhPZihhLnZlcnRpY2FsUmVzb2x1dGlvblVuaXQpKSksIHgociwgTWF0aC5tYXgoMSwgZWUuaW5kZXhPZihhLmhlaWdodFVuaXQpKSk7Cn0pOwp2YXIgdmkgPSBbImNlbnRlcmVkIiwgInNpemUgdG8gZml0IiwgInVzZXIgZGVmaW5lZCJdOwpCMCgxMDYyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIucHJpbnRTY2FsZSAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZS5wcmludFNjYWxlID0gewogICAgc3R5bGU6IHZpW2cwKHIpXSwKICAgIHg6IFJyKHIpLAogICAgeTogUnIociksCiAgICBzY2FsZTogUnIocikKICB9Owp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnByaW50U2NhbGUsIEEgPSBhLnN0eWxlLCB0ID0gYS54LCBpID0gYS55LCBuID0gYS5zY2FsZTsKICBFMChyLCBNYXRoLm1heCgwLCB2aS5pbmRleE9mKEEpKSksIFZyKHIsIHQgfHwgMCksIFZyKHIsIGkgfHwgMCksIFZyKHIsIG4gfHwgMCk7Cn0pOwpCMCgxMDA2LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuYWxwaGFDaGFubmVsTmFtZXMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChlLmFscGhhQ2hhbm5lbE5hbWVzKQogICAgSChyLCBhKCkpOwogIGVsc2UKICAgIGZvciAoZS5hbHBoYUNoYW5uZWxOYW1lcyA9IFtdOyBhKCkgPiAwOyApIHsKICAgICAgdmFyIEEgPSBNbChyKTsKICAgICAgZS5hbHBoYUNoYW5uZWxOYW1lcy5wdXNoKEEpOwogICAgfQp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBlLmFscGhhQ2hhbm5lbE5hbWVzOyBhIDwgQS5sZW5ndGg7IGErKykgewogICAgdmFyIHQgPSBBW2FdOwogICAgVGwociwgdCk7CiAgfQp9KTsKQjAoMTA0NSwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmFscGhhQ2hhbm5lbE5hbWVzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUuYWxwaGFDaGFubmVsTmFtZXMgPSBbXTsgYSgpID4gMDsgKQogICAgZS5hbHBoYUNoYW5uZWxOYW1lcy5wdXNoKHowKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSAwLCBBID0gZS5hbHBoYUNoYW5uZWxOYW1lczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFdhKHIsIHQpOwogIH0KfSk7CkIwKDEwNTMsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5hbHBoYUlkZW50aWZpZXJzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUuYWxwaGFJZGVudGlmaWVycyA9IFtdOyBhKCkgPj0gNDsgKQogICAgZS5hbHBoYUlkZW50aWZpZXJzLnB1c2goUyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMCwgQSA9IGUuYWxwaGFJZGVudGlmaWVyczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFUociwgdCk7CiAgfQp9KTsKQjAoMTAxMCwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmJhY2tncm91bmRDb2xvciAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgcmV0dXJuIGUuYmFja2dyb3VuZENvbG9yID0gSzAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gcnIociwgZS5iYWNrZ3JvdW5kQ29sb3IpOwp9KTsKQjAoMTAzNywgZnVuY3Rpb24ocikgewogIHJldHVybiByLmdsb2JhbEFuZ2xlICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5nbG9iYWxBbmdsZSA9IEwocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gdDAociwgZS5nbG9iYWxBbmdsZSk7Cn0pOwpCMCgxMDQ5LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuZ2xvYmFsQWx0aXR1ZGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBlLmdsb2JhbEFsdGl0dWRlID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUuZ2xvYmFsQWx0aXR1ZGUpOwp9KTsKQjAoMTAxMSwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnByaW50RmxhZ3MgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIGUucHJpbnRGbGFncyA9IHsKICAgIGxhYmVsczogISFPKHIpLAogICAgY3JvcE1hcmtzOiAhIU8ociksCiAgICBjb2xvckJhcnM6ICEhTyhyKSwKICAgIHJlZ2lzdHJhdGlvbk1hcmtzOiAhIU8ociksCiAgICBuZWdhdGl2ZTogISFPKHIpLAogICAgZmxpcDogISFPKHIpLAogICAgaW50ZXJwb2xhdGU6ICEhTyhyKSwKICAgIGNhcHRpb246ICEhTyhyKSwKICAgIHByaW50RmxhZ3M6ICEhTyhyKQogIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUucHJpbnRGbGFnczsKICBUKHIsIGEubGFiZWxzID8gMSA6IDApLCBUKHIsIGEuY3JvcE1hcmtzID8gMSA6IDApLCBUKHIsIGEuY29sb3JCYXJzID8gMSA6IDApLCBUKHIsIGEucmVnaXN0cmF0aW9uTWFya3MgPyAxIDogMCksIFQociwgYS5uZWdhdGl2ZSA/IDEgOiAwKSwgVChyLCBhLmZsaXAgPyAxIDogMCksIFQociwgYS5pbnRlcnBvbGF0ZSA/IDEgOiAwKSwgVChyLCBhLmNhcHRpb24gPyAxIDogMCksIFQociwgYS5wcmludEZsYWdzID8gMSA6IDApOwp9KTsKQjAoCiAgMTAzNCwKICAvLyBDb3B5cmlnaHQgZmxhZwogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLmNvcHlyaWdodGVkICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICBlLmNvcHlyaWdodGVkID0gISFPKHIpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgVChyLCBlLmNvcHlyaWdodGVkID8gMSA6IDApOwogIH0KKTsKQjAoCiAgMTAzNSwKICAvLyBVUkwKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci51cmwgIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIGUudXJsID0gU2UociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIFg0KHIsIGUudXJsKTsKICB9Cik7CkIwKAogIDEwODAsCiAgLy8gQ291bnQgSW5mb3JtYXRpb24KICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5jb3VudEluZm9ybWF0aW9uICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IG0wKHIpOwogICAgZS5jb3VudEluZm9ybWF0aW9uID0gYS5jb3VudEdyb3VwTGlzdC5tYXAoZnVuY3Rpb24oQSkgewogICAgICByZXR1cm4gewogICAgICAgIGNvbG9yOiB7IHI6IEFbIlJkICAiXSwgZzogQVsiR3JuICJdLCBiOiBBWyJCbCAgIl0gfSwKICAgICAgICBuYW1lOiBBWyJObSAgIl0sCiAgICAgICAgc2l6ZTogQVsiUmRzICJdLAogICAgICAgIGZvbnRTaXplOiBBLmZvbnRTaXplLAogICAgICAgIHZpc2libGU6IEEuVnNibCwKICAgICAgICBwb2ludHM6IEEuY291bnRPYmplY3RMaXN0Lm1hcChmdW5jdGlvbih0KSB7CiAgICAgICAgICByZXR1cm4geyB4OiB0WyJYICAgIl0sIHk6IHRbIlkgICAiXSB9OwogICAgICAgIH0pCiAgICAgIH07CiAgICB9KTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhID0gewogICAgICBWcnNuOiAxLAogICAgICBjb3VudEdyb3VwTGlzdDogZS5jb3VudEluZm9ybWF0aW9uLm1hcChmdW5jdGlvbihBKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICJSZCAgIjogQS5jb2xvci5yLAogICAgICAgICAgIkdybiAiOiBBLmNvbG9yLmcsCiAgICAgICAgICAiQmwgICI6IEEuY29sb3IuYiwKICAgICAgICAgICJObSAgIjogQS5uYW1lLAogICAgICAgICAgIlJkcyAiOiBBLnNpemUsCiAgICAgICAgICBmb250U2l6ZTogQS5mb250U2l6ZSwKICAgICAgICAgIFZzYmw6IEEudmlzaWJsZSwKICAgICAgICAgIGNvdW50T2JqZWN0TGlzdDogQS5wb2ludHMubWFwKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgcmV0dXJuIHsgIlggICAiOiB0LngsICJZICAgIjogdC55IH07CiAgICAgICAgICB9KQogICAgICAgIH07CiAgICAgIH0pCiAgICB9OwogICAgcDAociwgIiIsICJDbnQgIiwgYSk7CiAgfQopOwpCMCgxMDI0LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIubGF5ZXJTdGF0ZSAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgcmV0dXJuIGUubGF5ZXJTdGF0ZSA9IFAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4geChyLCBlLmxheWVyU3RhdGUpOwp9KTsKQjAoMTAyNiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmxheWVyc0dyb3VwICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBmb3IgKGUubGF5ZXJzR3JvdXAgPSBbXTsgYSgpID4gMDsgKQogICAgZS5sYXllcnNHcm91cC5wdXNoKFAocikpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBlLmxheWVyc0dyb3VwOyBhIDwgQS5sZW5ndGg7IGErKykgewogICAgdmFyIHQgPSBBW2FdOwogICAgeChyLCB0KTsKICB9Cn0pOwpCMCgxMDcyLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIubGF5ZXJHcm91cHNFbmFibGVkSWQgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGZvciAoZS5sYXllckdyb3Vwc0VuYWJsZWRJZCA9IFtdOyBhKCkgPiAwOyApCiAgICBlLmxheWVyR3JvdXBzRW5hYmxlZElkLnB1c2goTyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmb3IgKHZhciBhID0gMCwgQSA9IGUubGF5ZXJHcm91cHNFbmFibGVkSWQ7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICBUKHIsIHQpOwogIH0KfSk7CkIwKDEwNjksIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5sYXllclNlbGVjdGlvbklkcyAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBQKHIpOwogIGZvciAoZS5sYXllclNlbGVjdGlvbklkcyA9IFtdOyBhLS07ICkKICAgIGUubGF5ZXJTZWxlY3Rpb25JZHMucHVzaChTKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHgociwgZS5sYXllclNlbGVjdGlvbklkcy5sZW5ndGgpOwogIGZvciAodmFyIGEgPSAwLCBBID0gZS5sYXllclNlbGVjdGlvbklkczsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIFUociwgdCk7CiAgfQp9KTsKQjAoMTAzMiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbiAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBTKHIpLCBBID0gUyhyKSwgdCA9IFMociksIGkgPSBTKHIpOwogIGlmIChhICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIDEwMzIgcmVzb3VyY2UgdmVyc2lvbjogIi5jb25jYXQoYSkpOwogIGUuZ3JpZEFuZEd1aWRlc0luZm9ybWF0aW9uID0gewogICAgZ3JpZDogeyBob3Jpem9udGFsOiBBLCB2ZXJ0aWNhbDogdCB9LAogICAgZ3VpZGVzOiBbXQogIH07CiAgZm9yICh2YXIgbiA9IDA7IG4gPCBpOyBuKyspCiAgICBlLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbi5ndWlkZXMucHVzaCh7CiAgICAgIGxvY2F0aW9uOiBTKHIpIC8gMzIsCiAgICAgIGRpcmVjdGlvbjogTyhyKSA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIKICAgIH0pOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmdyaWRBbmRHdWlkZXNJbmZvcm1hdGlvbiwgQSA9IGEuZ3JpZCB8fCB7IGhvcml6b250YWw6IDE4ICogMzIsIHZlcnRpY2FsOiAxOCAqIDMyIH0sIHQgPSBhLmd1aWRlcyB8fCBbXTsKICBVKHIsIDEpLCBVKHIsIEEuaG9yaXpvbnRhbCksIFUociwgQS52ZXJ0aWNhbCksIFUociwgdC5sZW5ndGgpOwogIGZvciAodmFyIGkgPSAwLCBuID0gdDsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIFUociwgZi5sb2NhdGlvbiAqIDMyKSwgVChyLCBmLmRpcmVjdGlvbiA9PT0gImhvcml6b250YWwiID8gMSA6IDApOwogIH0KfSk7CkIwKAogIDEwNjUsCiAgLy8gTGF5ZXIgQ29tcHMKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5sYXllckNvbXBzICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IG0wKHIsICEwKTsKICAgIGUubGF5ZXJDb21wcyA9IHsgbGlzdDogW10gfTsKICAgIGZvciAodmFyIEEgPSAwLCB0ID0gYS5saXN0OyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgICB2YXIgaSA9IHRbQV07CiAgICAgIGUubGF5ZXJDb21wcy5saXN0LnB1c2goewogICAgICAgIGlkOiBpLmNvbXBJRCwKICAgICAgICBuYW1lOiBpWyJObSAgIl0sCiAgICAgICAgY2FwdHVyZWRJbmZvOiBpLmNhcHR1cmVkSW5mbwogICAgICB9KSwgImNvbW1lbnQiIGluIGkgJiYgKGUubGF5ZXJDb21wcy5saXN0W2UubGF5ZXJDb21wcy5saXN0Lmxlbmd0aCAtIDFdLmNvbW1lbnQgPSBpLmNvbW1lbnQpOwogICAgfQogICAgImxhc3RBcHBsaWVkQ29tcCIgaW4gYSAmJiAoZS5sYXllckNvbXBzLmxhc3RBcHBsaWVkID0gYS5sYXN0QXBwbGllZENvbXApOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgZm9yICh2YXIgYSA9IGUubGF5ZXJDb21wcywgQSA9IHsgbGlzdDogW10gfSwgdCA9IDAsIGkgPSBhLmxpc3Q7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICAgIHZhciBuID0gaVt0XSwgZiA9IHt9OwogICAgICBmLl9jbGFzc0lEID0gIkNvbXAiLCBmWyJObSAgIl0gPSBuLm5hbWUsICJjb21tZW50IiBpbiBuICYmIChmLmNvbW1lbnQgPSBuLmNvbW1lbnQpLCBmLmNvbXBJRCA9IG4uaWQsIGYuY2FwdHVyZWRJbmZvID0gbi5jYXB0dXJlZEluZm8sIEEubGlzdC5wdXNoKGYpOwogICAgfQogICAgImxhc3RBcHBsaWVkIiBpbiBhICYmIChBLmxhc3RBcHBsaWVkQ29tcCA9IGEubGFzdEFwcGxpZWQpLCBwMChyLCAiIiwgIkNvbXBMaXN0IiwgQSk7CiAgfQopOwp2YXIga2kgPSBbCiAgIm5vcm1hbCIsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgIm11bHRpcGx5IiwKICAic2NyZWVuIiwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogIHZvaWQgMCwKICB2b2lkIDAsCiAgdm9pZCAwLAogICJkaWZmZXJlbmNlIgpdOwpCMCgKICAxMDc4LAogIC8vIE9uaW9uIFNraW5zCiAgZnVuY3Rpb24ocikgewogICAgcmV0dXJuIHIub25pb25Ta2lucyAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBtMChyKTsKICAgIGUub25pb25Ta2lucyA9IHsKICAgICAgZW5hYmxlZDogYS5lbmFiLAogICAgICBmcmFtZXNCZWZvcmU6IGEubnVtQmVmb3JlLAogICAgICBmcmFtZXNBZnRlcjogYS5udW1BZnRlciwKICAgICAgZnJhbWVTcGFjaW5nOiBhLlNwY24sCiAgICAgIG1pbk9wYWNpdHk6IGEubWluT3BhY2l0eSAvIDEwMCwKICAgICAgbWF4T3BhY2l0eTogYS5tYXhPcGFjaXR5IC8gMTAwLAogICAgICBibGVuZE1vZGU6IGtpW2EuQmxuTV0gfHwgIm5vcm1hbCIKICAgIH07CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IGUub25pb25Ta2lucywgQSA9IHsKICAgICAgVnJzbjogMSwKICAgICAgZW5hYjogYS5lbmFibGVkLAogICAgICBudW1CZWZvcmU6IGEuZnJhbWVzQmVmb3JlLAogICAgICBudW1BZnRlcjogYS5mcmFtZXNBZnRlciwKICAgICAgU3BjbjogYS5mcmFtZVNwYWNpbmcsCiAgICAgIG1pbk9wYWNpdHk6IGEubWluT3BhY2l0eSAqIDEwMCB8IDAsCiAgICAgIG1heE9wYWNpdHk6IGEubWF4T3BhY2l0eSAqIDEwMCB8IDAsCiAgICAgIEJsbk06IE1hdGgubWF4KDAsIGtpLmluZGV4T2YoYS5ibGVuZE1vZGUpKQogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIEEpOwogIH0KKTsKQjAoCiAgMTA3NSwKICAvLyBUaW1lbGluZSBJbmZvcm1hdGlvbgogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLnRpbWVsaW5lSW5mb3JtYXRpb24gIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBLCB0ID0gbTAocik7CiAgICBlLnRpbWVsaW5lSW5mb3JtYXRpb24gPSB7CiAgICAgIGVuYWJsZWQ6IHQuZW5hYiwKICAgICAgZnJhbWVTdGVwOiBucih0LmZyYW1lU3RlcCksCiAgICAgIGZyYW1lUmF0ZTogdC5mcmFtZVJhdGUsCiAgICAgIHRpbWU6IG5yKHQudGltZSksCiAgICAgIGR1cmF0aW9uOiBucih0LmR1cmF0aW9uKSwKICAgICAgd29ya0luVGltZTogbnIodC53b3JrSW5UaW1lKSwKICAgICAgd29ya091dFRpbWU6IG5yKHQud29ya091dFRpbWUpLAogICAgICByZXBlYXRzOiB0LkxDbnQsCiAgICAgIGhhc01vdGlvbjogdC5oYXNNb3Rpb24sCiAgICAgIGdsb2JhbFRyYWNrczogSm4odC5nbG9iYWxUcmFja0xpc3QsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpCiAgICB9LCAhKChBID0gKGEgPSB0LmF1ZGlvQ2xpcEdyb3VwTGlzdCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5hdWRpb0NsaXBHcm91cExpc3QpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCkgJiYgQS5sZW5ndGggJiYgKGUudGltZWxpbmVJbmZvcm1hdGlvbi5hdWRpb0NsaXBHcm91cHMgPSB0LmF1ZGlvQ2xpcEdyb3VwTGlzdC5hdWRpb0NsaXBHcm91cExpc3QubWFwKGZ1bmN0aW9uKGkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBpZDogaS5ncm91cElELAogICAgICAgIG11dGVkOiBpLm11dGVkLAogICAgICAgIGF1ZGlvQ2xpcHM6IGkuYXVkaW9DbGlwTGlzdC5tYXAoZnVuY3Rpb24obikgewogICAgICAgICAgdmFyIGYgPSBuLmNsaXBJRCwgdSA9IG4udGltZVNjb3BlLCBvID0gbi5tdXRlZCwgbCA9IG4uYXVkaW9MZXZlbCwgcyA9IG4uZnJhbWVSZWFkZXI7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpZDogZiwKICAgICAgICAgICAgc3RhcnQ6IG5yKHUuU3RydCksCiAgICAgICAgICAgIGR1cmF0aW9uOiBucih1LmR1cmF0aW9uKSwKICAgICAgICAgICAgaW5UaW1lOiBucih1LmluVGltZSksCiAgICAgICAgICAgIG91dFRpbWU6IG5yKHUub3V0VGltZSksCiAgICAgICAgICAgIG11dGVkOiBvLAogICAgICAgICAgICBhdWRpb0xldmVsOiBsLAogICAgICAgICAgICBmcmFtZVJlYWRlcjogewogICAgICAgICAgICAgIHR5cGU6IHMuZnJhbWVSZWFkZXJUeXBlLAogICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRvcjogcy5tZWRpYURlc2NyaXB0b3IsCiAgICAgICAgICAgICAgbGluazogewogICAgICAgICAgICAgICAgbmFtZTogc1siTG5rICJdWyJObSAgIl0sCiAgICAgICAgICAgICAgICBmdWxsUGF0aDogc1siTG5rICJdLmZ1bGxQYXRoLAogICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBzWyJMbmsgIl0ucmVsUGF0aAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9OwogICAgfSkpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEsIEEgPSBlLnRpbWVsaW5lSW5mb3JtYXRpb24sIHQgPSB7CiAgICAgIFZyc246IDEsCiAgICAgIGVuYWI6IEEuZW5hYmxlZCwKICAgICAgZnJhbWVTdGVwOiBBLmZyYW1lU3RlcCwKICAgICAgZnJhbWVSYXRlOiBBLmZyYW1lUmF0ZSwKICAgICAgdGltZTogQS50aW1lLAogICAgICBkdXJhdGlvbjogQS5kdXJhdGlvbiwKICAgICAgd29ya0luVGltZTogQS53b3JrSW5UaW1lLAogICAgICB3b3JrT3V0VGltZTogQS53b3JrT3V0VGltZSwKICAgICAgTENudDogQS5yZXBlYXRzLAogICAgICBnbG9iYWxUcmFja0xpc3Q6IEhuKEEuZ2xvYmFsVHJhY2tzKSwKICAgICAgYXVkaW9DbGlwR3JvdXBMaXN0OiB7CiAgICAgICAgYXVkaW9DbGlwR3JvdXBMaXN0OiAoYSA9IEEuYXVkaW9DbGlwR3JvdXBzKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLm1hcChmdW5jdGlvbihpKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBncm91cElEOiBpLmlkLAogICAgICAgICAgICBtdXRlZDogaS5tdXRlZCwKICAgICAgICAgICAgYXVkaW9DbGlwTGlzdDogaS5hdWRpb0NsaXBzLm1hcChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNsaXBJRDogbi5pZCwKICAgICAgICAgICAgICAgIHRpbWVTY29wZTogewogICAgICAgICAgICAgICAgICBWcnNuOiAxLAogICAgICAgICAgICAgICAgICBTdHJ0OiBuLnN0YXJ0LAogICAgICAgICAgICAgICAgICBkdXJhdGlvbjogbi5kdXJhdGlvbiwKICAgICAgICAgICAgICAgICAgaW5UaW1lOiBuLmluVGltZSwKICAgICAgICAgICAgICAgICAgb3V0VGltZTogbi5vdXRUaW1lCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnJhbWVSZWFkZXI6IHsKICAgICAgICAgICAgICAgICAgZnJhbWVSZWFkZXJUeXBlOiBuLmZyYW1lUmVhZGVyLnR5cGUsCiAgICAgICAgICAgICAgICAgIGRlc2NWZXJzaW9uOiAxLAogICAgICAgICAgICAgICAgICAiTG5rICI6IHsKICAgICAgICAgICAgICAgICAgICBkZXNjVmVyc2lvbjogMSwKICAgICAgICAgICAgICAgICAgICAiTm0gICI6IG4uZnJhbWVSZWFkZXIubGluay5uYW1lLAogICAgICAgICAgICAgICAgICAgIGZ1bGxQYXRoOiBuLmZyYW1lUmVhZGVyLmxpbmsuZnVsbFBhdGgsCiAgICAgICAgICAgICAgICAgICAgcmVsUGF0aDogbi5mcmFtZVJlYWRlci5saW5rLnJlbGF0aXZlUGF0aAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0b3I6IG4uZnJhbWVSZWFkZXIubWVkaWFEZXNjcmlwdG9yCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbXV0ZWQ6IG4ubXV0ZWQsCiAgICAgICAgICAgICAgICBhdWRpb0xldmVsOiBuLmF1ZGlvTGV2ZWwKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBoYXNNb3Rpb246IEEuaGFzTW90aW9uCiAgICB9OwogICAgcDAociwgIiIsICJudWxsIiwgdCwgImFuaW0iKTsKICB9Cik7CkIwKAogIDEwNzYsCiAgLy8gU2hlZXQgRGlzY2xvc3VyZQogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiByLnNoZWV0RGlzY2xvc3VyZSAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBtMChyKTsKICAgIGUuc2hlZXREaXNjbG9zdXJlID0ge30sIGEuc2hlZXRUaW1lbGluZU9wdGlvbnMgJiYgKGUuc2hlZXREaXNjbG9zdXJlLnNoZWV0VGltZWxpbmVPcHRpb25zID0gYS5zaGVldFRpbWVsaW5lT3B0aW9ucy5tYXAoZnVuY3Rpb24oQSkgewogICAgICByZXR1cm4gewogICAgICAgIHNoZWV0SUQ6IEEuc2hlZXRJRCwKICAgICAgICBzaGVldERpc2Nsb3NlZDogQS5zaGVldERpc2Nsb3NlZCwKICAgICAgICBsaWdodHNEaXNjbG9zZWQ6IEEubGlnaHRzRGlzY2xvc2VkLAogICAgICAgIG1lc2hlc0Rpc2Nsb3NlZDogQS5tZXNoZXNEaXNjbG9zZWQsCiAgICAgICAgbWF0ZXJpYWxzRGlzY2xvc2VkOiBBLm1hdGVyaWFsc0Rpc2Nsb3NlZAogICAgICB9OwogICAgfSkpOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBlLnNoZWV0RGlzY2xvc3VyZSwgQSA9IHsgVnJzbjogMSB9OwogICAgYS5zaGVldFRpbWVsaW5lT3B0aW9ucyAmJiAoQS5zaGVldFRpbWVsaW5lT3B0aW9ucyA9IGEuc2hlZXRUaW1lbGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBWcnNuOiAyLAogICAgICAgIHNoZWV0SUQ6IHQuc2hlZXRJRCwKICAgICAgICBzaGVldERpc2Nsb3NlZDogdC5zaGVldERpc2Nsb3NlZCwKICAgICAgICBsaWdodHNEaXNjbG9zZWQ6IHQubGlnaHRzRGlzY2xvc2VkLAogICAgICAgIG1lc2hlc0Rpc2Nsb3NlZDogdC5tZXNoZXNEaXNjbG9zZWQsCiAgICAgICAgbWF0ZXJpYWxzRGlzY2xvc2VkOiB0Lm1hdGVyaWFsc0Rpc2Nsb3NlZAogICAgICB9OwogICAgfSkpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKICB9Cik7CkIwKAogIDEwNTQsCiAgLy8gVVJMIExpc3QKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci51cmxzTGlzdCAhPT0gdm9pZCAwOwogIH0sCiAgZnVuY3Rpb24ociwgZSkgewogICAgdmFyIGEgPSBTKHIpOwogICAgZS51cmxzTGlzdCA9IFtdOwogICAgZm9yICh2YXIgQSA9IDA7IEEgPCBhOyBBKyspIHsKICAgICAgdmFyIHQgPSBSMChyKTsKICAgICAgaWYgKHQgIT09ICJzbGljIiAmJiByLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBsb25nIik7CiAgICAgIHZhciBpID0gUyhyKSwgbiA9IHowKHIpOwogICAgICBlLnVybHNMaXN0LnB1c2goeyBpZDogaSwgdXJsOiBuLCByZWY6ICJzbGljZSIgfSk7CiAgICB9CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICB2YXIgYSA9IGUudXJsc0xpc3Q7CiAgICBVKHIsIGEubGVuZ3RoKTsKICAgIGZvciAodmFyIEEgPSAwOyBBIDwgYS5sZW5ndGg7IEErKykKICAgICAgbjAociwgInNsaWMiKSwgVShyLCBhW0FdLmlkKSwgbXIociwgYVtBXS51cmwpOwogIH0KKTsKZnVuY3Rpb24gZ2kocikgewogIHJldHVybiB7ICJUb3AgIjogci50b3AsIExlZnQ6IHIubGVmdCwgQnRvbTogci5ib3R0b20sIFJnaHQ6IHIucmlnaHQgfTsKfQpmdW5jdGlvbiBtaShyKSB7CiAgcmV0dXJuIHsgdG9wOiByWyJUb3AgIl0sIGxlZnQ6IHIuTGVmdCwgYm90dG9tOiByLkJ0b20sIHJpZ2h0OiByLlJnaHQgfTsKfQpmdW5jdGlvbiB0ZShyLCBlKSB7CiAgcmV0dXJuIHJbTWF0aC5tYXgoMCwgTWF0aC5taW4oci5sZW5ndGggLSAxLCBlKSldOwp9CnZhciBwaSA9IFsiYXV0b0dlbmVyYXRlZCIsICJsYXllciIsICJ1c2VyR2VuZXJhdGVkIl0sIHdpID0gWyJub0ltYWdlIiwgImltYWdlIl0sIGllID0gWyJkZWZhdWx0Il07CkIwKAogIDEwNTAsCiAgLy8gU2xpY2VzCiAgZnVuY3Rpb24ocikgewogICAgcmV0dXJuIHIuc2xpY2VzID8gci5zbGljZXMubGVuZ3RoIDogMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhID0gUyhyKTsKICAgIGlmIChhID09PSA2KSB7CiAgICAgIGUuc2xpY2VzIHx8IChlLnNsaWNlcyA9IFtdKTsKICAgICAgdmFyIEEgPSBMKHIpLCB0ID0gTChyKSwgaSA9IEwociksIG4gPSBMKHIpLCBmID0gejAociksIHUgPSBTKHIpOwogICAgICBlLnNsaWNlcy5wdXNoKHsgYm91bmRzOiB7IHRvcDogQSwgbGVmdDogdCwgYm90dG9tOiBpLCByaWdodDogbiB9LCBncm91cE5hbWU6IGYsIHNsaWNlczogW10gfSk7CiAgICAgIGZvciAodmFyIG8gPSBlLnNsaWNlc1tlLnNsaWNlcy5sZW5ndGggLSAxXS5zbGljZXMsIGwgPSAwOyBsIDwgdTsgbCsrKSB7CiAgICAgICAgdmFyIHMgPSBTKHIpLCBjID0gUyhyKSwgZCA9IHRlKHBpLCBTKHIpKSwgdiA9IGQgPT0gImxheWVyIiA/IFMocikgOiAwLCBrID0gejAociksIEUgPSB0ZSh3aSwgUyhyKSksIGcgPSBMKHIpLCB3ID0gTChyKSwgQiA9IEwociksIG0gPSBMKHIpLCBwID0gejAociksIFcgPSB6MChyKSwgQyA9IHowKHIpLCBfID0gejAociksIE4gPSAhIU8ociksIEQgPSB6MChyKSwgWSA9IHRlKGllLCBTKHIpKSwgZjAgPSB0ZShpZSwgUyhyKSksIEcgPSBPKHIpLCBKID0gTyhyKSwgSyA9IE8ociksIFggPSBPKHIpLCBsMCA9IEcgKyBKICsgSyArIFggPT09IDAgPyAibm9uZSIgOiBHID09PSAwID8gIm1hdHRlIiA6ICJjb2xvciI7CiAgICAgICAgby5wdXNoKHsKICAgICAgICAgIGlkOiBzLAogICAgICAgICAgZ3JvdXBJZDogYywKICAgICAgICAgIG9yaWdpbjogZCwKICAgICAgICAgIGFzc29jaWF0ZWRMYXllcklkOiB2LAogICAgICAgICAgbmFtZTogaywKICAgICAgICAgIHRhcmdldDogVywKICAgICAgICAgIG1lc3NhZ2U6IEMsCiAgICAgICAgICBhbHRUYWc6IF8sCiAgICAgICAgICBjZWxsVGV4dElzSFRNTDogTiwKICAgICAgICAgIGNlbGxUZXh0OiBELAogICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogWSwKICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBmMCwKICAgICAgICAgIHR5cGU6IEUsCiAgICAgICAgICB1cmw6IHAsCiAgICAgICAgICBib3VuZHM6IHsgdG9wOiB3LCBsZWZ0OiBnLCBib3R0b206IG0sIHJpZ2h0OiBCIH0sCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3JUeXBlOiBsMCwKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogeyByOiBKLCBnOiBLLCBiOiBYLCBhOiBHIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB2YXIgYiA9IG0wKHIpOwogICAgICBiLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKFopIHsKICAgICAgICB2YXIgeSA9IG8uZmluZChmdW5jdGlvbihGKSB7CiAgICAgICAgICByZXR1cm4gWi5zbGljZUlEID09IEYuaWQ7CiAgICAgICAgfSk7CiAgICAgICAgeSAmJiAoeS50b3BPdXRzZXQgPSBaLnRvcE91dHNldCwgeS5sZWZ0T3V0c2V0ID0gWi5sZWZ0T3V0c2V0LCB5LmJvdHRvbU91dHNldCA9IFouYm90dG9tT3V0c2V0LCB5LnJpZ2h0T3V0c2V0ID0gWi5yaWdodE91dHNldCk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChhID09PSA3IHx8IGEgPT09IDgpIHsKICAgICAgdmFyIGIgPSBtMChyKTsKICAgICAgZS5zbGljZXMgfHwgKGUuc2xpY2VzID0gW10pLCBlLnNsaWNlcy5wdXNoKHsKICAgICAgICBncm91cE5hbWU6IGIuYmFzZU5hbWUsCiAgICAgICAgYm91bmRzOiBtaShiLmJvdW5kcyksCiAgICAgICAgc2xpY2VzOiBiLnNsaWNlcy5tYXAoZnVuY3Rpb24oeSkgewogICAgICAgICAgcmV0dXJuIFRhKFRhKHt9LCB5WyJObSAgIl0gPyB7IG5hbWU6IHlbIk5tICAiXSB9IDoge30pLCB7IGlkOiB5LnNsaWNlSUQsIGdyb3VwSWQ6IHkuZ3JvdXBJRCwgYXNzb2NpYXRlZExheWVySWQ6IDAsIG9yaWdpbjogdWkuZGVjb2RlKHkub3JpZ2luKSwgdHlwZTogbmkuZGVjb2RlKHkuVHlwZSksIGJvdW5kczogbWkoeS5ib3VuZHMpLCB1cmw6IHkudXJsLCB0YXJnZXQ6IHkubnVsbCwgbWVzc2FnZTogeS5Nc2dlLCBhbHRUYWc6IHkuYWx0VGFnLCBjZWxsVGV4dElzSFRNTDogeS5jZWxsVGV4dElzSFRNTCwgY2VsbFRleHQ6IHkuY2VsbFRleHQsIGhvcml6b250YWxBbGlnbm1lbnQ6IGZpLmRlY29kZSh5LmhvcnpBbGlnbiksIHZlcnRpY2FsQWxpZ25tZW50OiBvaS5kZWNvZGUoeS52ZXJ0QWxpZ24pLCBiYWNrZ3JvdW5kQ29sb3JUeXBlOiBsaS5kZWNvZGUoeS5iZ0NvbG9yVHlwZSksIGJhY2tncm91bmRDb2xvcjogeS5iZ0NvbG9yID8geyByOiB5LmJnQ29sb3JbIlJkICAiXSwgZzogeS5iZ0NvbG9yWyJHcm4gIl0sIGI6IHkuYmdDb2xvclsiQmwgICJdLCBhOiB5LmJnQ29sb3IuYWxwaGEgfSA6IHsgcjogMCwgZzogMCwgYjogMCwgYTogMCB9LCB0b3BPdXRzZXQ6IHkudG9wT3V0c2V0IHx8IDAsIGxlZnRPdXRzZXQ6IHkubGVmdE91dHNldCB8fCAwLCBib3R0b21PdXRzZXQ6IHkuYm90dG9tT3V0c2V0IHx8IDAsIHJpZ2h0T3V0c2V0OiB5LnJpZ2h0T3V0c2V0IHx8IDAgfSk7CiAgICAgICAgfSkKICAgICAgfSk7CiAgICB9IGVsc2UKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNsaWNlcyB2ZXJzaW9uICgiLmNvbmNhdChhLCAiKSIpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIHZhciBBID0gZS5zbGljZXNbYV0sIHQgPSBBLmJvdW5kcywgaSA9IEEuZ3JvdXBOYW1lLCBuID0gQS5zbGljZXM7CiAgICBVKHIsIDYpLCB0MChyLCB0LnRvcCksIHQwKHIsIHQubGVmdCksIHQwKHIsIHQuYm90dG9tKSwgdDAociwgdC5yaWdodCksIG1yKHIsIGkpLCBVKHIsIG4ubGVuZ3RoKTsKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbi5sZW5ndGg7IGYrKykgewogICAgICB2YXIgdSA9IG5bZl0sIG8gPSB1LmJhY2tncm91bmRDb2xvciwgbCA9IG8uYSwgcyA9IG8uciwgYyA9IG8uZywgZCA9IG8uYjsKICAgICAgdS5iYWNrZ3JvdW5kQ29sb3JUeXBlID09PSAibm9uZSIgPyBsID0gcyA9IGMgPSBkID0gMCA6IHUuYmFja2dyb3VuZENvbG9yVHlwZSA9PT0gIm1hdHRlIiAmJiAobCA9IDAsIHMgPSBjID0gZCA9IDI1NSksIFUociwgdS5pZCksIFUociwgdS5ncm91cElkKSwgVShyLCBwaS5pbmRleE9mKHUub3JpZ2luKSksIHUub3JpZ2luID09PSAibGF5ZXIiICYmIFUociwgdS5hc3NvY2lhdGVkTGF5ZXJJZCksIG1yKHIsIHUubmFtZSB8fCAiIiksIFUociwgd2kuaW5kZXhPZih1LnR5cGUpKSwgdDAociwgdS5ib3VuZHMubGVmdCksIHQwKHIsIHUuYm91bmRzLnRvcCksIHQwKHIsIHUuYm91bmRzLnJpZ2h0KSwgdDAociwgdS5ib3VuZHMuYm90dG9tKSwgbXIociwgdS51cmwpLCBtcihyLCB1LnRhcmdldCksIG1yKHIsIHUubWVzc2FnZSksIG1yKHIsIHUuYWx0VGFnKSwgVChyLCB1LmNlbGxUZXh0SXNIVE1MID8gMSA6IDApLCBtcihyLCB1LmNlbGxUZXh0KSwgVShyLCBpZS5pbmRleE9mKHUuaG9yaXpvbnRhbEFsaWdubWVudCkpLCBVKHIsIGllLmluZGV4T2YodS52ZXJ0aWNhbEFsaWdubWVudCkpLCBUKHIsIGwpLCBUKHIsIHMpLCBUKHIsIGMpLCBUKHIsIGQpOwogICAgfQogICAgdmFyIHYgPSB7CiAgICAgIGJvdW5kczogZ2kodCksCiAgICAgIHNsaWNlczogW10KICAgIH07CiAgICBuLmZvckVhY2goZnVuY3Rpb24oaykgewogICAgICB2YXIgRSA9IFRhKFRhKHsgc2xpY2VJRDogay5pZCwgZ3JvdXBJRDogay5ncm91cElkLCBvcmlnaW46IHVpLmVuY29kZShrLm9yaWdpbiksIFR5cGU6IG5pLmVuY29kZShrLnR5cGUpLCBib3VuZHM6IGdpKGsuYm91bmRzKSB9LCBrLm5hbWUgPyB7ICJObSAgIjogay5uYW1lIH0gOiB7fSksIHsgdXJsOiBrLnVybCwgbnVsbDogay50YXJnZXQsIE1zZ2U6IGsubWVzc2FnZSwgYWx0VGFnOiBrLmFsdFRhZywgY2VsbFRleHRJc0hUTUw6IGsuY2VsbFRleHRJc0hUTUwsIGNlbGxUZXh0OiBrLmNlbGxUZXh0LCBob3J6QWxpZ246IGZpLmVuY29kZShrLmhvcml6b250YWxBbGlnbm1lbnQpLCB2ZXJ0QWxpZ246IG9pLmVuY29kZShrLnZlcnRpY2FsQWxpZ25tZW50KSwgYmdDb2xvclR5cGU6IGxpLmVuY29kZShrLmJhY2tncm91bmRDb2xvclR5cGUpIH0pOwogICAgICBpZiAoay5iYWNrZ3JvdW5kQ29sb3JUeXBlID09PSAiY29sb3IiKSB7CiAgICAgICAgdmFyIGcgPSBrLmJhY2tncm91bmRDb2xvciwgdyA9IGcuciwgQiA9IGcuZywgbSA9IGcuYiwgcCA9IGcuYTsKICAgICAgICBFLmJnQ29sb3IgPSB7ICJSZCAgIjogdywgIkdybiAiOiBCLCAiQmwgICI6IG0sIGFscGhhOiBwIH07CiAgICAgIH0KICAgICAgRS50b3BPdXRzZXQgPSBrLnRvcE91dHNldCB8fCAwLCBFLmxlZnRPdXRzZXQgPSBrLmxlZnRPdXRzZXQgfHwgMCwgRS5ib3R0b21PdXRzZXQgPSBrLmJvdHRvbU91dHNldCB8fCAwLCBFLnJpZ2h0T3V0c2V0ID0gay5yaWdodE91dHNldCB8fCAwLCB2LnNsaWNlcy5wdXNoKEUpOwogICAgfSksIHAwKHIsICIiLCAibnVsbCIsIHYsICJzbGljZXMiKTsKICB9Cik7CkIwKDEwNjQsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5waXhlbEFzcGVjdFJhdGlvICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBpZiAoUyhyKSA+IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGl4ZWxBc3BlY3RSYXRpbyB2ZXJzaW9uIik7CiAgZS5waXhlbEFzcGVjdFJhdGlvID0geyBhc3BlY3Q6IElyKHIpIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBVKHIsIDIpLCBGcihyLCBlLnBpeGVsQXNwZWN0UmF0aW8uYXNwZWN0KTsKfSk7CkIwKDEwNDEsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pY2NVbnRhZ2dlZFByb2ZpbGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSkgewogIGUuaWNjVW50YWdnZWRQcm9maWxlID0gISFPKHIpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmljY1VudGFnZ2VkUHJvZmlsZSA/IDEgOiAwKTsKfSk7CkIwKDEwNDQsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pZHNTZWVkTnVtYmVyICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5pZHNTZWVkTnVtYmVyID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUuaWRzU2VlZE51bWJlcik7Cn0pOwpCMCgxMDM2LCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIudGh1bWJuYWlsICE9PSB2b2lkIDAgfHwgci50aHVtYm5haWxSYXcgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUyhyKSwgdCA9IFMociksIGkgPSBTKHIpOwogIFMociksIFMociksIFMocik7CiAgdmFyIG4gPSBQKHIpLCBmID0gUChyKTsKICBpZiAoQSAhPT0gMSB8fCBuICE9PSAyNCB8fCBmICE9PSAxKSB7CiAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiSW52YWxpZCB0aHVtYm5haWwgZGF0YSAoZm9ybWF0OiAiLmNvbmNhdChBLCAiLCBiaXRzUGVyUGl4ZWw6ICIpLmNvbmNhdChuLCAiLCBwbGFuZXM6ICIpLmNvbmNhdChmLCAiKSIpKSwgSChyLCBhKCkpOwogICAgcmV0dXJuOwogIH0KICB2YXIgdSA9IGEoKSwgbyA9IFkwKHIsIHUpOwogIHIudXNlUmF3VGh1bWJuYWlsID8gZS50aHVtYm5haWxSYXcgPSB7IHdpZHRoOiB0LCBoZWlnaHQ6IGksIGRhdGE6IG8gfSA6IG8uYnl0ZUxlbmd0aCAmJiAoZS50aHVtYm5haWwgPSBnbChvKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IDAsIHQgPSAwLCBpID0gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgaWYgKGUudGh1bWJuYWlsUmF3KQogICAgQSA9IGUudGh1bWJuYWlsUmF3LndpZHRoLCB0ID0gZS50aHVtYm5haWxSYXcuaGVpZ2h0LCBpID0gZS50aHVtYm5haWxSYXcuZGF0YTsKICBlbHNlCiAgICB0cnkgewogICAgICB2YXIgbiA9IChhID0gZS50aHVtYm5haWwudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwgMSkpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuc3Vic3RyaW5nKDIzKTsKICAgICAgbiAmJiAoaSA9IERuKG4pLCBBID0gZS50aHVtYm5haWwud2lkdGgsIHQgPSBlLnRodW1ibmFpbC5oZWlnaHQpOwogICAgfSBjYXRjaCB7CiAgICB9CiAgdmFyIGYgPSAyNCwgdSA9IE1hdGguZmxvb3IoKEEgKiBmICsgMzEpIC8gMzIpICogNCwgbyA9IDEsIGwgPSB1ICogdCAqIG8sIHMgPSBpLmxlbmd0aDsKICBVKHIsIDEpLCBVKHIsIEEpLCBVKHIsIHQpLCBVKHIsIHUpLCBVKHIsIGwpLCBVKHIsIHMpLCB4KHIsIGYpLCB4KHIsIG8pLCBOcihyLCBpKTsKfSk7CkIwKDEwNTcsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZXJzaW9uSW5mbyAhPT0gdm9pZCAwOwp9LCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBTKHIpOwogIGlmIChBICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZlcnNpb25JbmZvIHZlcnNpb24iKTsKICBlLnZlcnNpb25JbmZvID0gewogICAgaGFzUmVhbE1lcmdlZERhdGE6ICEhTyhyKSwKICAgIHdyaXRlck5hbWU6IHowKHIpLAogICAgcmVhZGVyTmFtZTogejAociksCiAgICBmaWxlVmVyc2lvbjogUyhyKQogIH0sIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS52ZXJzaW9uSW5mbzsKICBVKHIsIDEpLCBUKHIsIGEuaGFzUmVhbE1lcmdlZERhdGEgPyAxIDogMCksIG1yKHIsIGEud3JpdGVyTmFtZSksIG1yKHIsIGEucmVhZGVyTmFtZSksIFUociwgYS5maWxlVmVyc2lvbik7Cn0pOwpCMCg3ZTMsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pbWFnZVJlYWR5VmFyaWFibGVzICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLmltYWdlUmVhZHlWYXJpYWJsZXMgPSBZQShyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgT0EociwgZS5pbWFnZVJlYWR5VmFyaWFibGVzKTsKfSk7CkIwKDcwMDEsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5pbWFnZVJlYWR5RGF0YVNldHMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuaW1hZ2VSZWFkeURhdGFTZXRzID0gWUEociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIE9BKHIsIGUuaW1hZ2VSZWFkeURhdGFTZXRzKTsKfSk7CkIwKDEwODgsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5wYXRoU2VsZWN0aW9uU3RhdGUgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gbTAocik7CiAgZS5wYXRoU2VsZWN0aW9uU3RhdGUgPSBBLm51bGw7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHsgbnVsbDogZS5wYXRoU2VsZWN0aW9uU3RhdGUgfTsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnZhciB5aSA9IHUwKCJGcm1EIiwgIiIsIHsKICBhdXRvOiAiQXV0byIsCiAgbm9uZTogIk5vbmUiLAogIGRpc3Bvc2U6ICJEaXNwIgp9KTsKQjAoCiAgNGUzLAogIC8vIFBsdWctSW4gcmVzb3VyY2UocykKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5hbmltYXRpb25zICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICB2YXIgQSA9IFIwKHIpOwogICAgaWYgKEEgPT09ICJtYW5pIikKICAgICAgSnIociwgIklSRlIiKSwgcHIociwgMSwgZnVuY3Rpb24oaSkgewogICAgICAgIGZvciAodmFyIG4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgIEpyKHIsICI4QklNIik7CiAgICAgICAgICB2YXIgZiA9IFIwKHIpOwogICAgICAgICAgcHIociwgMSwgZnVuY3Rpb24odSkgewogICAgICAgICAgICBpZiAoZiA9PT0gIkFuRHMiKSB7CiAgICAgICAgICAgICAgdmFyIG8gPSBtMChyKTsKICAgICAgICAgICAgICBlLmFuaW1hdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAvLyBkZXNjLkFGU3QgPz8/CiAgICAgICAgICAgICAgICBmcmFtZXM6IG8uRnJJbi5tYXAoZnVuY3Rpb24ocykgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGlkOiBzLkZySUQsCiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IChzLkZyRGwgfHwgMCkgLyAxMDAsCiAgICAgICAgICAgICAgICAgICAgZGlzcG9zZTogcy5GckRzID8geWkuZGVjb2RlKHMuRnJEcykgOiAiYXV0byIKICAgICAgICAgICAgICAgICAgICAvLyBtaXNzaW5nID09IGF1dG8KICAgICAgICAgICAgICAgICAgICAvLyB4LkZyR0EgPz8/CiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGFuaW1hdGlvbnM6IG8uRlN0cy5tYXAoZnVuY3Rpb24ocykgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGlkOiBzLkZzSUQsCiAgICAgICAgICAgICAgICAgICAgZnJhbWVzOiBzLkZzRnIsCiAgICAgICAgICAgICAgICAgICAgcmVwZWF0czogcy5MQ250LAogICAgICAgICAgICAgICAgICAgIGFjdGl2ZUZyYW1lOiBzLkFGcm0gfHwgMAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgaWYgKGYgPT09ICJSb2xsIikgewogICAgICAgICAgICAgIHZhciBsID0gWTAociwgdSgpKTsKICAgICAgICAgICAgICByLmxvZ0RldkZlYXR1cmVzICYmIHIubG9nKCIjNDAwMCBSb2xsIiwgbCk7CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgIHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCJVbmhhbmRsZWQgc3Vic2VjdGlvbiBpbiAjNDAwMCIsIGYpOwogICAgICAgICAgfSk7CiAgICAgICAgfTsgaSgpID4gMDsgKQogICAgICAgICAgbigpOwogICAgICB9KTsKICAgIGVsc2UgaWYgKEEgPT09ICJtb3B0IikgewogICAgICB2YXIgdCA9IFkwKHIsIGEoKSk7CiAgICAgIHIubG9nRGV2RmVhdHVyZXMgJiYgci5sb2coIiM0MDAwIG1vcHQiLCB0KTsKICAgIH0gZWxzZQogICAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiVW5oYW5kbGVkIGtleSBpbiAjNDAwMDoiLCBBKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIGUuYW5pbWF0aW9ucyAmJiAobjAociwgIm1hbmkiKSwgbjAociwgIklSRlIiKSwgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICAgIG4wKHIsICI4QklNIiksIG4wKHIsICJBbkRzIiksIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgICAgIGZvciAodmFyIGEgPSB7CiAgICAgICAgICAvLyBBRlN0OiAwLCAvLyA/Pz8KICAgICAgICAgIEZySW46IFtdLAogICAgICAgICAgRlN0czogW10KICAgICAgICB9LCBBID0gMDsgQSA8IGUuYW5pbWF0aW9ucy5mcmFtZXMubGVuZ3RoOyBBKyspIHsKICAgICAgICAgIHZhciB0ID0gZS5hbmltYXRpb25zLmZyYW1lc1tBXSwgaSA9IHsKICAgICAgICAgICAgRnJJRDogdC5pZAogICAgICAgICAgfTsKICAgICAgICAgIHQuZGVsYXkgJiYgKGkuRnJEbCA9IHQuZGVsYXkgKiAxMDAgfCAwKSwgaS5GckRzID0geWkuZW5jb2RlKHQuZGlzcG9zZSksIGEuRnJJbi5wdXNoKGkpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBBID0gMDsgQSA8IGUuYW5pbWF0aW9ucy5hbmltYXRpb25zLmxlbmd0aDsgQSsrKSB7CiAgICAgICAgICB2YXIgbiA9IGUuYW5pbWF0aW9ucy5hbmltYXRpb25zW0FdLCBmID0gewogICAgICAgICAgICBGc0lEOiBuLmlkLAogICAgICAgICAgICBBRnJtOiBuLmFjdGl2ZUZyYW1lIHwgMCwKICAgICAgICAgICAgRnNGcjogbi5mcmFtZXMsCiAgICAgICAgICAgIExDbnQ6IG4ucmVwZWF0cyB8IDAKICAgICAgICAgIH07CiAgICAgICAgICBhLkZTdHMucHVzaChmKTsKICAgICAgICB9CiAgICAgICAgcDAociwgIiIsICJudWxsIiwgYSk7CiAgICAgIH0pOwogICAgfSkpOwogIH0KKTsKdmFyIFBsID0gZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0ge307CiAgZm9yICh2YXIgQSBpbiByKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgQSkgJiYgZS5pbmRleE9mKEEpIDwgMCAmJiAoYVtBXSA9IHJbQV0pOwogIGlmIChyICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT0gImZ1bmN0aW9uIikKICAgIGZvciAodmFyIHQgPSAwLCBBID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKTsgdCA8IEEubGVuZ3RoOyB0KyspCiAgICAgIGUuaW5kZXhPZihBW3RdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHIsIEFbdF0pICYmIChhW0FbdF1dID0gcltBW3RdXSk7CiAgcmV0dXJuIGE7Cn0sIEQxID0gWwogIDAsCiAgMSwKICAzLAogIDIKICAvKiBDb2xvck1vZGUuSW5kZXhlZCAqLwpdLCBZbCA9IFsiYml0bWFwIiwgImdyYXlzY2FsZSIsICJpbmRleGVkIiwgIlJHQiIsICJDTVlLIiwgIm11bHRpY2hhbm5lbCIsICJkdW90b25lIiwgImxhYiJdOwpmdW5jdGlvbiB5ZShyKSB7CiAgZm9yICh2YXIgZSA9IHIud2lkdGggKiByLmhlaWdodCAqIDQsIGEgPSAwOyBhIDwgZTsgYSArPSA0KSB7CiAgICB2YXIgQSA9IHIuZGF0YVthXTsKICAgIHIuZGF0YVthICsgMV0gPSBBLCByLmRhdGFbYSArIDJdID0gQTsKICB9Cn0KZnVuY3Rpb24gS2EociwgZSwgYSkgewogIHZhciBBID0gbmV3IERhdGFWaWV3KHIsIGUsIGEpOwogIHJldHVybiB7IHZpZXc6IEEsIG9mZnNldDogMCwgc3RyaWN0OiAhMSwgZGVidWc6ICExLCBsYXJnZTogITEsIGdsb2JhbEFscGhhOiAhMSwgbG9nOiBjb25zb2xlLmxvZyB9Owp9CmZ1bmN0aW9uIFpBKHIsIGUpIHsKICBpZiAoci5zdHJpY3QpCiAgICB0aHJvdyBuZXcgRXJyb3IoZSk7CiAgci5kZWJ1ZyAmJiByLmxvZyhlKTsKfQpmdW5jdGlvbiBPKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMSwgci52aWV3LmdldFVpbnQ4KHIub2Zmc2V0IC0gMSk7Cn0KZnVuY3Rpb24gT2wocikgewogIHJldHVybiByLnZpZXcuZ2V0VWludDgoci5vZmZzZXQpOwp9CmZ1bmN0aW9uIGcwKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMiwgci52aWV3LmdldEludDE2KHIub2Zmc2V0IC0gMiwgITEpOwp9CmZ1bmN0aW9uIFAocikgewogIHJldHVybiByLm9mZnNldCArPSAyLCByLnZpZXcuZ2V0VWludDE2KHIub2Zmc2V0IC0gMiwgITEpOwp9CmZ1bmN0aW9uIFVsKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gMiwgci52aWV3LmdldFVpbnQxNihyLm9mZnNldCAtIDIsICEwKTsKfQpmdW5jdGlvbiBMKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEludDMyKHIub2Zmc2V0IC0gNCwgITEpOwp9CmZ1bmN0aW9uIEVpKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEludDMyKHIub2Zmc2V0IC0gNCwgITApOwp9CmZ1bmN0aW9uIFMocikgewogIHJldHVybiByLm9mZnNldCArPSA0LCByLnZpZXcuZ2V0VWludDMyKHIub2Zmc2V0IC0gNCwgITEpOwp9CmZ1bmN0aW9uIFJyKHIpIHsKICByZXR1cm4gci5vZmZzZXQgKz0gNCwgci52aWV3LmdldEZsb2F0MzIoci5vZmZzZXQgLSA0LCAhMSk7Cn0KZnVuY3Rpb24gSXIocikgewogIHJldHVybiByLm9mZnNldCArPSA4LCByLnZpZXcuZ2V0RmxvYXQ2NChyLm9mZnNldCAtIDgsICExKTsKfQpmdW5jdGlvbiBocihyKSB7CiAgcmV0dXJuIEwocikgLyA2NTUzNjsKfQpmdW5jdGlvbiBHcihyKSB7CiAgcmV0dXJuIEwocikgLyAoMSA8PCAyNCk7Cn0KZnVuY3Rpb24gWTAociwgZSkgewogIHZhciBhID0gci52aWV3LmJ5dGVPZmZzZXQgKyByLm9mZnNldDsKICBpZiAoci5vZmZzZXQgKz0gZSwgYSArIGUgPiByLnZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpIHsKICAgIGlmIChaQShyLCAiUmVhZGluZyBieXRlcyBleGNlZWRpbmcgYnVmZmVyIGxlbmd0aCIpLCBlID4gMTAwICogMTAyNCAqIDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiUmVhZGluZyBwYXN0IGVuZCBvZiBmaWxlIik7CiAgICB2YXIgQSA9IG5ldyBVaW50OEFycmF5KGUpLCB0ID0gTWF0aC5taW4oZSwgci52aWV3LmJ5dGVMZW5ndGggLSBhKTsKICAgIHJldHVybiB0ID4gMCAmJiBBLnNldChuZXcgVWludDhBcnJheShyLnZpZXcuYnVmZmVyLCBhLCB0KSksIEE7CiAgfSBlbHNlCiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoci52aWV3LmJ1ZmZlciwgYSwgZSk7Cn0KZnVuY3Rpb24gUjAocikgewogIHJldHVybiB4MShyLCA0KTsKfQpmdW5jdGlvbiBqbChyLCBlKSB7CiAgdmFyIGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHIudmlldy5nZXRVaW50OChlKSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHIudmlldy5nZXRVaW50OChlICsgMSkpICsgU3RyaW5nLmZyb21DaGFyQ29kZShyLnZpZXcuZ2V0VWludDgoZSArIDIpKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoci52aWV3LmdldFVpbnQ4KGUgKyAzKSk7CiAgcmV0dXJuIGEgPT0gIjhCSU0iIHx8IGEgPT0gIjhCNjQiOwp9CmZ1bmN0aW9uIHhyKHIsIGUpIHsKICBmb3IgKHZhciBhID0gTyhyKSwgQSA9IGEgPyB4MShyLCBhKSA6ICIiOyArK2EgJSBlOyApCiAgICByLm9mZnNldCsrOwogIHJldHVybiBBOwp9CmZ1bmN0aW9uIHowKHIpIHsKICB2YXIgZSA9IFMocik7CiAgcmV0dXJuIFVBKHIsIGUpOwp9CmZ1bmN0aW9uIFVBKHIsIGUpIHsKICBmb3IgKHZhciBhID0gIiI7IGUtLTsgKSB7CiAgICB2YXIgQSA9IFAocik7CiAgICAoQSB8fCBlID4gMCkgJiYgKGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShBKSk7CiAgfQogIHJldHVybiBhOwp9CmZ1bmN0aW9uIFFsKHIsIGUpIHsKICBmb3IgKHZhciBhID0gIiI7IGUtLTsgKSB7CiAgICB2YXIgQSA9IFVsKHIpOwogICAgKEEgfHwgZSA+IDApICYmIChhICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoQSkpOwogIH0KICByZXR1cm4gYTsKfQpmdW5jdGlvbiBTZShyLCBlKSB7CiAgZm9yICh2YXIgYSA9ICIiOyBlLS07ICkKICAgIGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShPKHIpKTsKICByZXR1cm4gYTsKfQpmdW5jdGlvbiBIKHIsIGUpIHsKICByLm9mZnNldCArPSBlOwp9CmZ1bmN0aW9uIEpyKHIsIGUsIGEpIHsKICB2YXIgQSA9IHIub2Zmc2V0LCB0ID0gUjAocik7CiAgaWYgKHQgIT09IGUgJiYgdCAhPT0gYSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaWduYXR1cmU6ICciLmNvbmNhdCh0LCAiJyBhdCAweCIpLmNvbmNhdChBLnRvU3RyaW5nKDE2KSkpOwp9CmZ1bmN0aW9uIHgxKHIsIGUpIHsKICBmb3IgKHZhciBhID0gWTAociwgZSksIEEgPSAiIiwgdCA9IDA7IHQgPCBhLmxlbmd0aDsgdCsrKQogICAgQSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbdF0pOwogIHJldHVybiBBOwp9CmZ1bmN0aW9uIEpsKHIpIHsKICByZXR1cm4gciA9PT0gIjhCSU0iIHx8IHIgPT09ICJNZVNhIiB8fCByID09PSAiQWdIZyIgfHwgciA9PT0gIlBIVVQiIHx8IHIgPT09ICJEQ1NSIjsKfQpmdW5jdGlvbiBIbChyLCBlKSB7CiAgdmFyIGE7CiAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pLCBKcihyLCAiOEJQUyIpOwogIHZhciBBID0gUChyKTsKICBpZiAoQSAhPT0gMSAmJiBBICE9PSAyKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFBTRCBmaWxlIHZlcnNpb246ICIuY29uY2F0KEEpKTsKICBIKHIsIDYpOwogIHZhciB0ID0gUChyKSwgaSA9IFMociksIG4gPSBTKHIpLCBmID0gUChyKSwgdSA9IFAociksIG8gPSBBID09PSAxID8gM2U0IDogM2U1OwogIGlmIChuID4gbyB8fCBpID4gbykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaXplOiAiLmNvbmNhdChuLCAieCIpLmNvbmNhdChpKSk7CiAgaWYgKHQgPiAxNikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjaGFubmVsIGNvdW50OiAiLmNvbmNhdCh0KSk7CiAgaWYgKCFbMSwgOCwgMTYsIDMyXS5pbmNsdWRlcyhmKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXRzUGVyQ2hhbm5lbDogIi5jb25jYXQoZikpOwogIGlmIChEMS5pbmRleE9mKHUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdCgoYSA9IFlsW3VdKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdSkpOwogIHZhciBsID0geyB3aWR0aDogbiwgaGVpZ2h0OiBpLCBjaGFubmVsczogdCwgYml0c1BlckNoYW5uZWw6IGYsIGNvbG9yTW9kZTogdSB9OwogIE9iamVjdC5hc3NpZ24ociwgZSksIHIubGFyZ2UgPSBBID09PSAyLCByLmdsb2JhbEFscGhhID0gITEsIHByKHIsIDEsIGZ1bmN0aW9uKGspIHsKICAgIGlmIChrKCkpIHsKICAgICAgaWYgKHUgPT09IDIpIHsKICAgICAgICBpZiAoaygpICE9IDc2OCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBwYWxldHRlIHNpemUiKTsKICAgICAgICBsLnBhbGV0dGUgPSBbXTsKICAgICAgICBmb3IgKHZhciBFID0gMDsgRSA8IDI1NjsgRSsrKQogICAgICAgICAgbC5wYWxldHRlLnB1c2goeyByOiBPKHIpLCBnOiAwLCBiOiAwIH0pOwogICAgICAgIGZvciAodmFyIEUgPSAwOyBFIDwgMjU2OyBFKyspCiAgICAgICAgICBsLnBhbGV0dGVbRV0uZyA9IE8ocik7CiAgICAgICAgZm9yICh2YXIgRSA9IDA7IEUgPCAyNTY7IEUrKykKICAgICAgICAgIGwucGFsZXR0ZVtFXS5iID0gTyhyKTsKICAgICAgfQogICAgICBIKHIsIGsoKSk7CiAgICB9CiAgfSk7CiAgdmFyIHMgPSB7fTsKICBwcihyLCAxLCBmdW5jdGlvbihrKSB7CiAgICBmb3IgKHZhciBFID0gZnVuY3Rpb24oKSB7CiAgICAgIE0xKHIsIEpsKTsKICAgICAgdmFyIGcgPSBQKHIpOwogICAgICB4cihyLCAyKSwgcHIociwgMiwgZnVuY3Rpb24odykgewogICAgICAgIHZhciBCID0gUzFbZ10sIG0gPSBnID09PSAxMDM2ICYmICEhci5za2lwVGh1bWJuYWlsOwogICAgICAgIGlmIChCICYmICFtKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgQi5yZWFkKHIsIHMsIHcpOwogICAgICAgICAgfSBjYXRjaCAocCkgewogICAgICAgICAgICBpZiAoci50aHJvd0Zvck1pc3NpbmdGZWF0dXJlcykKICAgICAgICAgICAgICB0aHJvdyBwOwogICAgICAgICAgICBIKHIsIHcoKSk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgSChyLCB3KCkpOwogICAgICB9KTsKICAgIH07IGsoKSA+IDA7ICkKICAgICAgRSgpOwogIH0pLCBzLmxheWVyc0dyb3VwLCBzLmxheWVyR3JvdXBzRW5hYmxlZElkOwogIHZhciBjID0gUGwocywgWyJsYXllcnNHcm91cCIsICJsYXllckdyb3Vwc0VuYWJsZWRJZCJdKTsKICBPYmplY3Qua2V5cyhjKSAmJiAobC5pbWFnZVJlc291cmNlcyA9IGMpLCBwcihyLCAxLCBmdW5jdGlvbihrKSB7CiAgICBpZiAocHIociwgMiwgZnVuY3Rpb24oZykgewogICAgICBqQShyLCBsLCBzKSwgSChyLCBnKCkpOwogICAgfSwgdm9pZCAwLCByLmxhcmdlKSwgaygpID4gMCkgewogICAgICB2YXIgRSA9ICRsKHIpOwogICAgICBFICYmIChsLmdsb2JhbExheWVyTWFza0luZm8gPSBFKTsKICAgIH0gZWxzZQogICAgICBIKHIsIGsoKSk7CiAgICBmb3IgKDsgaygpID4gMDsgKSB7CiAgICAgIGZvciAoOyBrKCkgJiYgT2wocikgPT09IDA7ICkKICAgICAgICBIKHIsIDEpOwogICAgICBrKCkgPj0gMTIgPyBUMShyLCBsLCBsLCBzKSA6IEgociwgaygpKTsKICAgIH0KICB9LCB2b2lkIDAsIHIubGFyZ2UpOwogIHZhciBkID0gbC5jaGlsZHJlbiAmJiBsLmNoaWxkcmVuLmxlbmd0aCwgdiA9IHIuc2tpcENvbXBvc2l0ZUltYWdlRGF0YSAmJiAoci5za2lwTGF5ZXJJbWFnZURhdGEgfHwgZCk7CiAgcmV0dXJuIHYgfHwgZTQociwgbCksIGw7Cn0KZnVuY3Rpb24gakEociwgZSwgYSkgewogIHZhciBBLCB0LCBpID0gYS5sYXllcnNHcm91cCwgbiA9IGkgPT09IHZvaWQgMCA/IFtdIDogaSwgZiA9IGEubGF5ZXJHcm91cHNFbmFibGVkSWQsIHUgPSBmID09PSB2b2lkIDAgPyBbXSA6IGYsIG8gPSBnMChyKTsKICBvIDwgMCAmJiAoci5nbG9iYWxBbHBoYSA9ICEwLCBvID0gLW8pOwogIGZvciAodmFyIGwgPSBbXSwgcyA9IFtdLCBjID0gMDsgYyA8IG87IGMrKykgewogICAgdmFyIGQgPSB6bChyLCBlLCBhKSwgdiA9IGQubGF5ZXIsIGsgPSBkLmNoYW5uZWxzOwogICAgbltjXSAhPT0gdm9pZCAwICYmICh2LmxpbmtHcm91cCA9IG5bY10pLCB1W2NdICE9PSB2b2lkIDAgJiYgKHYubGlua0dyb3VwRW5hYmxlZCA9ICEhdVtjXSksIGwucHVzaCh2KSwgcy5wdXNoKGspOwogIH0KICBmb3IgKHZhciBjID0gMDsgYyA8IG87IGMrKykKICAgIHFsKHIsIGUsIGxbY10sIHNbY10pOwogIGUuY2hpbGRyZW4gfHwgKGUuY2hpbGRyZW4gPSBbXSk7CiAgZm9yICh2YXIgRSA9IFtlXSwgYyA9IGwubGVuZ3RoIC0gMTsgYyA+PSAwOyBjLS0pIHsKICAgIHZhciBnID0gbFtjXSwgdyA9IGcuc2VjdGlvbkRpdmlkZXIgPyBnLnNlY3Rpb25EaXZpZGVyLnR5cGUgOiAwOwogICAgdyA9PT0gMSB8fCB3ID09PSAyID8gKGcub3BlbmVkID0gdyA9PT0gMSwgZy5jaGlsZHJlbiA9IFtdLCAhKChBID0gZy5zZWN0aW9uRGl2aWRlcikgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwKSAmJiBBLmtleSAmJiAoZy5ibGVuZE1vZGUgPSAodCA9IEphW2cuc2VjdGlvbkRpdmlkZXIua2V5XSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGcuYmxlbmRNb2RlKSwgRVtFLmxlbmd0aCAtIDFdLmNoaWxkcmVuLnVuc2hpZnQoZyksIEUucHVzaChnKSkgOiB3ID09PSAzID8gRS5wb3AoKSA6IEVbRS5sZW5ndGggLSAxXS5jaGlsZHJlbi51bnNoaWZ0KGcpOwogIH0KfQpmdW5jdGlvbiB6bChyLCBlLCBhKSB7CiAgdmFyIEEgPSB7fTsKICBBLnRvcCA9IEwociksIEEubGVmdCA9IEwociksIEEuYm90dG9tID0gTChyKSwgQS5yaWdodCA9IEwocik7CiAgZm9yICh2YXIgdCA9IFAociksIGkgPSBbXSwgbiA9IDA7IG4gPCB0OyBuKyspIHsKICAgIHZhciBmID0gZzAociksIHUgPSBTKHIpOwogICAgaWYgKHIubGFyZ2UpIHsKICAgICAgaWYgKHUgIT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaXplcyBsYXJnZXIgdGhhbiA0R0IgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgdSA9IFMocik7CiAgICB9CiAgICBpLnB1c2goeyBpZDogZiwgbGVuZ3RoOiB1IH0pOwogIH0KICBKcihyLCAiOEJJTSIpOwogIHZhciBvID0gUjAocik7CiAgaWYgKCFKYVtvXSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBibGVuZCBtb2RlOiAnIi5jb25jYXQobywgIiciKSk7CiAgQS5ibGVuZE1vZGUgPSBKYVtvXSwgQS5vcGFjaXR5ID0gTyhyKSAvIDI1NSwgQS5jbGlwcGluZyA9IE8ocikgPT09IDE7CiAgdmFyIGwgPSBPKHIpOwogIHJldHVybiBBLnRyYW5zcGFyZW5jeVByb3RlY3RlZCA9IChsICYgMSkgIT09IDAsIEEuaGlkZGVuID0gKGwgJiAyKSAhPT0gMCwgbCAmIDMyICYmIChBLmVmZmVjdHNPcGVuID0gITApLCBIKHIsIDEpLCBwcihyLCAxLCBmdW5jdGlvbihzKSB7CiAgICBMbChyLCBBKTsKICAgIHZhciBjID0gS2wocik7CiAgICBmb3IgKGMgJiYgKEEuYmxlbmRpbmdSYW5nZXMgPSBjKSwgQS5uYW1lID0geHIociwgMSk7IHMoKSA+IDQgJiYgIWpsKHIsIHIub2Zmc2V0KTsgKQogICAgICByLm9mZnNldCsrOwogICAgZm9yICg7IHMoKSA+PSAxMjsgKQogICAgICBUMShyLCBBLCBlLCBhKTsKICAgIEgociwgcygpKTsKICB9KSwgeyBsYXllcjogQSwgY2hhbm5lbHM6IGkgfTsKfQpmdW5jdGlvbiBMbChyLCBlKSB7CiAgcmV0dXJuIHByKHIsIDEsIGZ1bmN0aW9uKGEpIHsKICAgIGlmIChhKCkpIHsKICAgICAgdmFyIEEgPSB7fTsKICAgICAgZS5tYXNrID0gQSwgQS50b3AgPSBMKHIpLCBBLmxlZnQgPSBMKHIpLCBBLmJvdHRvbSA9IEwociksIEEucmlnaHQgPSBMKHIpLCBBLmRlZmF1bHRDb2xvciA9IE8ocik7CiAgICAgIHZhciB0ID0gTyhyKTsKICAgICAgaWYgKEEucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAodCAmIDEpICE9PSAwLCBBLmRpc2FibGVkID0gKHQgJiAyKSAhPT0gMCwgQS5mcm9tVmVjdG9yRGF0YSA9ICh0ICYgOCkgIT09IDAsIGEoKSA+PSAxOCkgewogICAgICAgIHZhciBpID0ge307CiAgICAgICAgZS5yZWFsTWFzayA9IGk7CiAgICAgICAgdmFyIG4gPSBPKHIpOwogICAgICAgIGkucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgPSAobiAmIDEpICE9PSAwLCBpLmRpc2FibGVkID0gKG4gJiAyKSAhPT0gMCwgaS5mcm9tVmVjdG9yRGF0YSA9IChuICYgOCkgIT09IDAsIGkuZGVmYXVsdENvbG9yID0gTyhyKSwgaS50b3AgPSBMKHIpLCBpLmxlZnQgPSBMKHIpLCBpLmJvdHRvbSA9IEwociksIGkucmlnaHQgPSBMKHIpOwogICAgICB9CiAgICAgIGlmICh0ICYgMTYpIHsKICAgICAgICB2YXIgZiA9IE8ocik7CiAgICAgICAgZiAmIDEgJiYgKEEudXNlck1hc2tEZW5zaXR5ID0gTyhyKSAvIDI1NSksIGYgJiAyICYmIChBLnVzZXJNYXNrRmVhdGhlciA9IElyKHIpKSwgZiAmIDQgJiYgKEEudmVjdG9yTWFza0RlbnNpdHkgPSBPKHIpIC8gMjU1KSwgZiAmIDggJiYgKEEudmVjdG9yTWFza0ZlYXRoZXIgPSBJcihyKSk7CiAgICAgIH0KICAgICAgSChyLCBhKCkpOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIG5lKHIpIHsKICByZXR1cm4gW08ociksIE8ociksIE8ociksIE8ocildOwp9CmZ1bmN0aW9uIEtsKHIpIHsKICByZXR1cm4gcHIociwgMSwgZnVuY3Rpb24oZSkgewogICAgZm9yICh2YXIgYSA9IG5lKHIpLCBBID0gbmUociksIHQgPSBbXTsgZSgpID4gMDsgKSB7CiAgICAgIHZhciBpID0gbmUociksIG4gPSBuZShyKTsKICAgICAgdC5wdXNoKHsgc291cmNlUmFuZ2U6IGksIGRlc3RSYW5nZTogbiB9KTsKICAgIH0KICAgIHJldHVybiB7IGNvbXBvc2l0ZUdyYXlCbGVuZFNvdXJjZTogYSwgY29tcG9zaXRlR3JhcGhCbGVuZERlc3RpbmF0aW9uUmFuZ2U6IEEsIHJhbmdlczogdCB9OwogIH0pOwp9CmZ1bmN0aW9uIHFsKHIsIGUsIGEsIEEpIHsKICBpZiAoIXIuc2tpcExheWVySW1hZ2VEYXRhKSB7CiAgICB2YXIgdCA9IGUuY29sb3JNb2RlLCBpID0gdCA9PT0gdm9pZCAwID8gMyA6IHQsIG4gPSBlLmJpdHNQZXJDaGFubmVsLCBmID0gbiA9PT0gdm9pZCAwID8gOCA6IG47CiAgICBhLnJhd0RhdGEgPSB7IGNvbG9yTW9kZTogaSwgYml0c1BlckNoYW5uZWw6IGYsIGNoYW5uZWxzOiBbXSwgbGFyZ2U6IHIubGFyZ2UgfTsKICAgIGZvciAodmFyIHUgPSAwLCBvID0gQTsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgICAgdmFyIGwgPSBvW3VdLCBzID0gci5vZmZzZXQsIGMgPSAwLCBkID0gdm9pZCAwOwogICAgICBpZiAobC5sZW5ndGggPT09IDEpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNoYW5uZWwgbGVuZ3RoIik7CiAgICAgIGlmIChsLmxlbmd0aCkgewogICAgICAgIGlmIChjID0gUChyKSwgYyA+IDMgJiYgKHIub2Zmc2V0IC09IDEsIGMgPSBQKHIpKSwgYyA+IDMgJiYgKHIub2Zmc2V0IC09IDMsIGMgPSBQKHIpKSwgYyA+IDMpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29tcHJlc3Npb246ICIuY29uY2F0KGMpKTsKICAgICAgICBsLmxlbmd0aCA+IDIgJiYgKGQgPSBZMChyLCBsLmxlbmd0aCAtIDIpKTsKICAgICAgfQogICAgICByLm9mZnNldCA9IHMgKyBsLmxlbmd0aCwgYS5yYXdEYXRhLmNoYW5uZWxzLnB1c2goeyBpZDogbC5pZCwgY29tcHJlc3Npb246IGMsIGRhdGE6IGQgfSk7CiAgICB9CiAgICByLnVzZVJhd0RhdGEgfHwgTjEoYSwgISFyLnVzZUltYWdlRGF0YSwgISFyLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKTsKICB9Cn0KZnVuY3Rpb24gWmkociwgZSkgewogIGZvciAodmFyIGEgPSByLmRhdGEsIEEgPSBhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ID8gMSA6IGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSA/IDY1NTM1IDogMjU1LCB0ID0gKGUgPyA0IDogMykgfCAwLCBpID0gYS5sZW5ndGggfCAwLCBuID0gKGUgPyA1IDogNCkgfCAwLCBmID0gdDsgZiA8IGk7IGYgPSBmICsgbiB8IDApCiAgICBhW2ZdID0gQTsKfQpmdW5jdGlvbiBOMShyLCBlLCBhKSB7CiAgaWYgKHIucmF3RGF0YSkgewogICAgdmFyIEEgPSByLnJhd0RhdGEsIHQgPSBBLmNvbG9yTW9kZSwgaSA9IEEuYml0c1BlckNoYW5uZWwsIG4gPSBBLmNoYW5uZWxzLCBmID0gQS5sYXJnZSwgdSA9IChyLnJpZ2h0IHx8IDApIC0gKHIubGVmdCB8fCAwKSwgbyA9IChyLmJvdHRvbSB8fCAwKSAtIChyLnRvcCB8fCAwKSwgbCA9IHQgPT09IDQsIHMsIGMgPSAhMTsKICAgIGlmICh1ICYmIG8pCiAgICAgIGlmIChsKSB7CiAgICAgICAgaWYgKGkgIT09IDgpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJpdHNQZXJDaGFubmVsIE5vdCBzdXBwcm90ZWQiKTsKICAgICAgICBzID0geyB3aWR0aDogdSwgaGVpZ2h0OiBvLCBkYXRhOiBuZXcgVWludDhDbGFtcGVkQXJyYXkodSAqIG8gKiA1KSB9OwogICAgICB9IGVsc2UKICAgICAgICBzID0gQkEodSwgbywgaSk7CiAgICBmb3IgKHZhciBkID0gMCwgdiA9IG47IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICAgIHZhciBrID0gdltkXSwgRSA9IGsuaWQsIGcgPSBrLmNvbXByZXNzaW9uLCB3ID0gay5kYXRhOwogICAgICBpZiAodykgewogICAgICAgIHZhciBCID0gS2Eody5idWZmZXIsIHcuYnl0ZU9mZnNldCwgdy5ieXRlTGVuZ3RoKTsKICAgICAgICBpZiAoRSA9PT0gLTIgfHwgRSA9PT0gLTMpIHsKICAgICAgICAgIHZhciBtID0gRSA9PT0gLTIgPyByLm1hc2sgOiByLnJlYWxNYXNrOwogICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgbGF5ZXIgIi5jb25jYXQoRSA9PT0gLTIgPyAibWFzayIgOiAicmVhbCBtYXNrIiwgIiBkYXRhIikpOwogICAgICAgICAgdmFyIHAgPSAobS5yaWdodCB8fCAwKSAtIChtLmxlZnQgfHwgMCksIFcgPSAobS5ib3R0b20gfHwgMCkgLSAobS50b3AgfHwgMCk7CiAgICAgICAgICBpZiAocCA8IDAgfHwgVyA8IDAgfHwgcCA+IDNlNCB8fCBXID4gM2U0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFzayBzaXplIik7CiAgICAgICAgICBpZiAocCAmJiBXKSB7CiAgICAgICAgICAgIHZhciBDID0gQkEocCwgVywgaSk7CiAgICAgICAgICAgIEJpKEIsIHcuYnl0ZUxlbmd0aCwgQywgZywgcCwgVywgaSwgMCwgZiwgNCksIHllKEMpLCBaaShDLCAhMSksIGUgPyBtLmltYWdlRGF0YSA9IEMgOiBtLmNhbnZhcyA9IG1lKEMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgXyA9IFJuKEUsIGwpLCBOID0gczsKICAgICAgICAgIGlmIChfIDwgMCAmJiAoTiA9IHZvaWQgMCwgYSkpCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2hhbm5lbCBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChFKSk7CiAgICAgICAgICBCaShCLCB3LmJ5dGVMZW5ndGgsIE4sIGcsIHUsIG8sIGksIF8sIGYsIGwgPyA1IDogNCksIE4gJiYgdCA9PT0gMSAmJiB5ZShOKTsKICAgICAgICB9CiAgICAgICAgRSA9PT0gLTEgJiYgKGMgPSAhMCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChzKSB7CiAgICAgIGlmIChjIHx8IFppKHMsIGwpLCBsKSB7CiAgICAgICAgdmFyIEQgPSBzOwogICAgICAgIHMgPSBIYShELndpZHRoLCBELmhlaWdodCksIFAxKEQsIHMsICExKTsKICAgICAgfQogICAgICBlID8gci5pbWFnZURhdGEgPSBzIDogci5jYW52YXMgPSBtZShzKTsKICAgIH0KICAgIGRlbGV0ZSByLnJhd0RhdGE7CiAgfQp9CmZ1bmN0aW9uIEJpKHIsIGUsIGEsIEEsIHQsIGksIG4sIGYsIHUsIG8pIHsKICBpZiAoZSkKICAgIGlmIChBID09PSAwKSB7CiAgICAgIGUgIT09IHQgKiBpICogTWF0aC5mbG9vcihuIC8gOCkgJiYgci5sb2coIkludmFsaWQgbGVuZ3RoICgiLmNvbmNhdChlLCAiLCAiKS5jb25jYXQodCAqIGkgKiBNYXRoLmZsb29yKG4gLyA4KSwgIikiKSk7CiAgICAgIHZhciBsID0gWTAociwgZSk7CiAgICAgIE8xKGwsIGEsIG4sIG8sIGYpOwogICAgfSBlbHNlIGlmIChBID09PSAxKQogICAgICBzYShyLCBhLCB0LCBpLCBuLCBvLCBbZl0sIHUpOwogICAgZWxzZSBpZiAoQSA9PT0gMikgewogICAgICB2YXIgbCA9IFkwKHIsIGUpOwogICAgICBJaShsLCBhLCB0LCBpLCBuLCBvLCBmLCAhMSk7CiAgICB9IGVsc2UgaWYgKEEgPT09IDMpIHsKICAgICAgdmFyIGwgPSBZMChyLCBlKTsKICAgICAgSWkobCwgYSwgdCwgaSwgbiwgbywgZiwgITApOwogICAgfSBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDb21wcmVzc2lvbiB0eXBlOiAiLmNvbmNhdChBKSk7Cn0KZnVuY3Rpb24gJGwocikgewogIHJldHVybiBwcihyLCAxLCBmdW5jdGlvbihlKSB7CiAgICBpZiAoZSgpKSB7CiAgICAgIHZhciBhID0gUChyKSwgQSA9IFAociksIHQgPSBQKHIpLCBpID0gUChyKSwgbiA9IFAociksIGYgPSBQKHIpIC8gMjU1LCB1ID0gTyhyKTsKICAgICAgcmV0dXJuIEgociwgZSgpKSwgeyBvdmVybGF5Q29sb3JTcGFjZTogYSwgY29sb3JTcGFjZTE6IEEsIGNvbG9yU3BhY2UyOiB0LCBjb2xvclNwYWNlMzogaSwgY29sb3JTcGFjZTQ6IG4sIG9wYWNpdHk6IGYsIGtpbmQ6IHUgfTsKICAgIH0KICB9KTsKfQp2YXIgcjQgPSBbMCwgMSwgLTEsIDIsIC0yLCAzLCAtMywgNCwgLTRdOwpmdW5jdGlvbiBNMShyLCBlKSB7CiAgZm9yICh2YXIgYSA9IHIub2Zmc2V0LCBBID0gIiIsIHQgPSAwLCBpID0gcjQ7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF07CiAgICB0cnkgewogICAgICByLm9mZnNldCA9IGEgKyBuLCBBID0gUjAocik7CiAgICB9IGNhdGNoIHsKICAgIH0KICAgIGlmIChlKEEpKQogICAgICBicmVhazsKICB9CiAgaWYgKCFlKEEpKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNpZ25hdHVyZTogJyIuY29uY2F0KEEsICInIGF0IDB4IikuY29uY2F0KGEudG9TdHJpbmcoMTYpKSk7CiAgcmV0dXJuIEE7Cn0KZnVuY3Rpb24gYTQocikgewogIHJldHVybiByID09PSAiOEJJTSIgfHwgciA9PT0gIjhCNjQiOwp9CmZ1bmN0aW9uIFQxKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IE0xKHIsIGE0KSwgaSA9IFIwKHIpLCBuID0gdCA9PT0gIjhCNjQiIHx8IHIubGFyZ2UgJiYgWG4uaW5kZXhPZihpKSAhPT0gLTE7CiAgcHIociwgMiwgZnVuY3Rpb24oZikgewogICAgdmFyIHUgPSBFZVtpXTsKICAgIGlmICh1KQogICAgICB0cnkgewogICAgICAgIHUucmVhZChyLCBlLCBmLCBhLCBBKTsKICAgICAgfSBjYXRjaCAobykgewogICAgICAgIGlmIChyLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgICAgdGhyb3cgbzsKICAgICAgfQogICAgZWxzZQogICAgICByLmxvZ01pc3NpbmdGZWF0dXJlcyAmJiByLmxvZygiVW5oYW5kbGVkIGFkZGl0aW9uYWwgaW5mbzogIi5jb25jYXQoaSkpLCBIKHIsIGYoKSk7CiAgICBmKCkgJiYgKHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCJVbnJlYWQgIi5jb25jYXQoZigpLCAiIGJ5dGVzIGxlZnQgZm9yIGFkZGl0aW9uYWwgaW5mbzogIikuY29uY2F0KGkpKSwgSChyLCBmKCkpKTsKICB9LCAhMSwgbik7Cn0KZnVuY3Rpb24gQkEociwgZSwgYSwgQSkgewogIGlmIChBID09PSB2b2lkIDAgJiYgKEEgPSA0KSwgYSA9PT0gMSB8fCBhID09PSA4KQogICAgcmV0dXJuIEEgPT09IDQgPyBIYShyLCBlKSA6IHsgd2lkdGg6IHIsIGhlaWdodDogZSwgZGF0YTogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIgKiBlICogQSkgfTsKICBpZiAoYSA9PT0gMTYpCiAgICByZXR1cm4geyB3aWR0aDogciwgaGVpZ2h0OiBlLCBkYXRhOiBuZXcgVWludDE2QXJyYXkociAqIGUgKiBBKSB9OwogIGlmIChhID09PSAzMikKICAgIHJldHVybiB7IHdpZHRoOiByLCBoZWlnaHQ6IGUsIGRhdGE6IG5ldyBGbG9hdDMyQXJyYXkociAqIGUgKiBBKSB9OwogIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXREZXB0aCAoIi5jb25jYXQoYSwgIikiKSk7Cn0KZnVuY3Rpb24gZTQociwgZSkgewogIHZhciBhLCBBID0gUChyKSwgdCA9IChhID0gZS5iaXRzUGVyQ2hhbm5lbCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDg7CiAgaWYgKEQxLmluZGV4T2YoZS5jb2xvck1vZGUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChlLmNvbG9yTW9kZSkpOwogIGlmIChBICE9PSAwICYmIEEgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbXByZXNzaW9uIHR5cGUgbm90IHN1cHBvcnRlZDogIi5jb25jYXQoQSkpOwogIHZhciBpID0gQkEoZS53aWR0aCwgZS5oZWlnaHQsIHQpOwogIHN3aXRjaCAodmwoaSksIGUuY29sb3JNb2RlKSB7CiAgICBjYXNlIDA6IHsKICAgICAgaWYgKHQgIT09IDEpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJpdHNQZXJDaGFubmVsIGZvciBiaXRtYXAgY29sb3IgbW9kZSIpOwogICAgICB2YXIgbiA9IHZvaWQgMDsKICAgICAgaWYgKEEgPT09IDApCiAgICAgICAgbiA9IFkwKHIsIE1hdGguY2VpbChlLndpZHRoIC8gOCkgKiBlLmhlaWdodCk7CiAgICAgIGVsc2UgaWYgKEEgPT09IDEpCiAgICAgICAgbiA9IG5ldyBVaW50OEFycmF5KGUud2lkdGggKiBlLmhlaWdodCksIHNhKHIsIHsgZGF0YTogbiwgd2lkdGg6IGUud2lkdGgsIGhlaWdodDogZS5oZWlnaHQgfSwgZS53aWR0aCwgZS5oZWlnaHQsIDgsIDEsIFswXSwgci5sYXJnZSk7CiAgICAgIGVsc2UKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJpdG1hcCBjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChBKSk7CiAgICAgIGtsKG4sIGkuZGF0YSwgZS53aWR0aCwgZS5oZWlnaHQpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgMzoKICAgIGNhc2UgMTogewogICAgICB2YXIgZiA9IGUuY29sb3JNb2RlID09PSAxID8gWzBdIDogWzAsIDEsIDJdOwogICAgICBpZiAoZS5jaGFubmVscyAmJiBlLmNoYW5uZWxzID4gMykKICAgICAgICBmb3IgKHZhciB1ID0gMzsgdSA8IGUuY2hhbm5lbHM7IHUrKykKICAgICAgICAgIGYucHVzaCh1KTsKICAgICAgZWxzZSByLmdsb2JhbEFscGhhICYmIGYucHVzaCgzKTsKICAgICAgaWYgKEEgPT09IDApCiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBmLmxlbmd0aDsgdSsrKSB7CiAgICAgICAgICB2YXIgbyA9IFkwKHIsIGUud2lkdGggKiBlLmhlaWdodCAqIE1hdGguZmxvb3IodCAvIDgpKTsKICAgICAgICAgIE8xKG8sIGksIHQsIDQsIGZbdV0pOwogICAgICAgIH0KICAgICAgZWxzZSBBID09PSAxICYmIChyLm9mZnNldCwgc2EociwgaSwgZS53aWR0aCwgZS5oZWlnaHQsIHQsIDQsIGYsIHIubGFyZ2UpKTsKICAgICAgZS5jb2xvck1vZGUgPT09IDEgJiYgeWUoaSk7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAyOiB7CiAgICAgIGlmICh0ICE9PSA4KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgICBpZiAoZS5jaGFubmVscyAhPT0gMSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbm5lbCBjb3VudCIpOwogICAgICBpZiAoIWUucGFsZXR0ZSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29sb3IgcGFsZXR0ZSIpOwogICAgICBpZiAoQSA9PT0gMCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwogICAgICBpZiAoQSA9PT0gMSkgewogICAgICAgIHZhciBsID0gewogICAgICAgICAgd2lkdGg6IGkud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IGkuaGVpZ2h0LAogICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoaS53aWR0aCAqIGkuaGVpZ2h0KQogICAgICAgIH07CiAgICAgICAgc2EociwgbCwgZS53aWR0aCwgZS5oZWlnaHQsIHQsIDEsIFswXSwgci5sYXJnZSksIEE0KGwsIGksIGUucGFsZXR0ZSk7CiAgICAgIH0gZWxzZQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSA0OiB7CiAgICAgIGlmICh0ICE9PSA4KQogICAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgICBpZiAoZS5jaGFubmVscyAhPT0gNCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbm5lbCBjb3VudCIpOwogICAgICB2YXIgZiA9IFswLCAxLCAyLCAzXTsKICAgICAgaWYgKHIuZ2xvYmFsQWxwaGEgJiYgZi5wdXNoKDQpLCBBID09PSAwKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7CiAgICAgIGlmIChBID09PSAxKSB7CiAgICAgICAgdmFyIHMgPSB7CiAgICAgICAgICB3aWR0aDogaS53aWR0aCwKICAgICAgICAgIGhlaWdodDogaS5oZWlnaHQsCiAgICAgICAgICBkYXRhOiBuZXcgVWludDhBcnJheShpLndpZHRoICogaS5oZWlnaHQgKiA1KQogICAgICAgIH07CiAgICAgICAgci5vZmZzZXQsIHNhKHIsIHMsIGUud2lkdGgsIGUuaGVpZ2h0LCB0LCA1LCBmLCByLmxhcmdlKSwgUDEocywgaSwgITApOwogICAgICB9IGVsc2UKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwogICAgICBicmVhazsKICAgIH0KICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbW9kZSBub3Qgc3VwcG9ydGVkOiAiLmNvbmNhdChlLmNvbG9yTW9kZSkpOwogIH0KICBpZiAoci5nbG9iYWxBbHBoYSkgewogICAgaWYgKGUuYml0c1BlckNoYW5uZWwgIT09IDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYml0c1BlckNoYW5uZWwgTm90IHN1cHByb3RlZCIpOwogICAgZm9yICh2YXIgYyA9IGkuZGF0YSwgZCA9IGkud2lkdGggKiBpLmhlaWdodCAqIDQsIHUgPSAwOyB1IDwgZDsgdSArPSA0KSB7CiAgICAgIHZhciB2ID0gY1t1ICsgM107CiAgICAgIGlmICh2ICE9IDAgJiYgdiAhPSAyNTUpIHsKICAgICAgICB2YXIgayA9IHYgLyAyNTUsIEUgPSAxIC8gaywgZyA9IDI1NSAqICgxIC0gRSk7CiAgICAgICAgY1t1ICsgMF0gPSBjW3UgKyAwXSAqIEUgKyBnLCBjW3UgKyAxXSA9IGNbdSArIDFdICogRSArIGcsIGNbdSArIDJdID0gY1t1ICsgMl0gKiBFICsgZzsKICAgICAgfQogICAgfQogIH0KICByLnVzZUltYWdlRGF0YSA/IGUuaW1hZ2VEYXRhID0gaSA6IGUuY2FudmFzID0gbWUoaSk7Cn0KZnVuY3Rpb24gUDEociwgZSwgYSkgewogIGZvciAodmFyIEEgPSBlLndpZHRoICogZS5oZWlnaHQgKiA0LCB0ID0gci5kYXRhLCBpID0gZS5kYXRhLCBuID0gMCwgZiA9IDA7IGYgPCBBOyBuICs9IDUsIGYgKz0gNCkgewogICAgdmFyIHUgPSB0W25dLCBvID0gdFtuICsgMV0sIGwgPSB0W24gKyAyXSwgcyA9IHRbbiArIDNdOwogICAgaVtmXSA9ICh1ICogcyB8IDApIC8gMjU1IHwgMCwgaVtmICsgMV0gPSAobyAqIHMgfCAwKSAvIDI1NSB8IDAsIGlbZiArIDJdID0gKGwgKiBzIHwgMCkgLyAyNTUgfCAwLCBpW2YgKyAzXSA9IGEgPyAyNTUgLSB0W24gKyA0XSA6IHRbbiArIDRdOwogIH0KfQpmdW5jdGlvbiBBNChyLCBlLCBhKSB7CiAgZm9yICh2YXIgQSA9IHIud2lkdGggKiByLmhlaWdodCwgdCA9IHIuZGF0YSwgaSA9IGUuZGF0YSwgbiA9IDAsIGYgPSAwOyBuIDwgQTsgbisrLCBmICs9IDQpIHsKICAgIHZhciB1ID0gYVt0W25dXTsKICAgIGlbZiArIDBdID0gdS5yLCBpW2YgKyAxXSA9IHUuZywgaVtmICsgMl0gPSB1LmIsIGlbZiArIDNdID0gMjU1OwogIH0KfQpmdW5jdGlvbiB0NChyLCBlKSB7CiAgaWYgKHIuYnl0ZUxlbmd0aCAvIHIubGVuZ3RoICE9PSBlLmJ5dGVMZW5ndGggLyBlLmxlbmd0aCkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcnJheSB0eXBlcyIpOwp9CmZ1bmN0aW9uIFkxKHIsIGUpIHsKICBpZiAoZSA9PT0gOCkKICAgIHJldHVybiByOwogIGlmIChlID09PSAxNikgewogICAgZm9yICh2YXIgYSA9IDA7IGEgPCByLmJ5dGVMZW5ndGg7IGEgKz0gMikgewogICAgICB2YXIgQSA9IHJbYV07CiAgICAgIHJbYV0gPSByW2EgKyAxXSwgclthICsgMV0gPSBBOwogICAgfQogICAgaWYgKHIuYnl0ZU9mZnNldCAlIDIpIHsKICAgICAgdmFyIHQgPSBuZXcgVWludDE2QXJyYXkoci5ieXRlTGVuZ3RoIC8gMik7CiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwgdC5ieXRlT2Zmc2V0LCB0LmJ5dGVMZW5ndGgpLnNldChyKSwgdDsKICAgIH0gZWxzZQogICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCAvIDIpOwogIH0gZWxzZSBpZiAoZSA9PT0gMzIpCiAgICBpZiAoci5ieXRlT2Zmc2V0ICUgNCkgewogICAgICB2YXIgdCA9IG5ldyBGbG9hdDMyQXJyYXkoci5ieXRlTGVuZ3RoIC8gNCk7CiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwgdC5ieXRlT2Zmc2V0LCB0LmJ5dGVMZW5ndGgpLnNldChyKSwgdDsKICAgIH0gZWxzZQogICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlciwgci5ieXRlT2Zmc2V0LCByLmJ5dGVMZW5ndGggLyA0KTsKICBlbHNlCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYml0RGVwdGggKCIuY29uY2F0KGUsICIpIikpOwp9CmZ1bmN0aW9uIElBKHIsIGUsIGEsIEEpIHsKICB0NChyLmRhdGEsIGUpOwogIGZvciAodmFyIHQgPSByLndpZHRoICogci5oZWlnaHQsIGkgPSByLmRhdGEsIG4gPSAwLCBmID0gYSB8IDA7IG4gPCB0OyBuKyssIGYgPSBmICsgQSB8IDApCiAgICBpW2ZdID0gZVtuXTsKfQpmdW5jdGlvbiBPMShyLCBlLCBhLCBBLCB0KSB7CiAgaWYgKGEgPT0gMzIpCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHIuYnl0ZUxlbmd0aDsgaSArPSA0KSB7CiAgICAgIHZhciBuID0gcltpICsgMF0sIGYgPSByW2kgKyAxXSwgdSA9IHJbaSArIDJdLCBvID0gcltpICsgM107CiAgICAgIHJbaSArIDBdID0gbywgcltpICsgMV0gPSB1LCByW2kgKyAyXSA9IGYsIHJbaSArIDNdID0gbjsKICAgIH0KICB2YXIgbCA9IFkxKHIsIGEpOwogIGUgJiYgdCA8IEEgJiYgSUEoZSwgbCwgdCwgQSk7Cn0KZnVuY3Rpb24gdEEociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSAwOyB0IDwgYTsgdCsrKQogICAgZm9yICh2YXIgaSA9IHQgKiBlLCBuID0gMSwgZiA9IGkgKyAxOyBuIDwgZTsgbisrLCBmKyspCiAgICAgIHJbZl0gPSAocltmIC0gMV0gKyByW2ZdKSAlIEE7Cn0KZnVuY3Rpb24gSWkociwgZSwgYSwgQSwgdCwgaSwgbiwgZikgewogIHZhciB1ID0gbmwocik7CiAgaWYgKGUgJiYgbiA8IGkpIHsKICAgIHZhciBvID0gWTEodSwgdCk7CiAgICBpZiAodCA9PT0gOCkKICAgICAgZiAmJiB0QSh1LCBhLCBBLCAyNTYpLCBJQShlLCB1LCBuLCBpKTsKICAgIGVsc2UgaWYgKHQgPT09IDE2KQogICAgICBmICYmIHRBKG8sIGEsIEEsIDY1NTM2KSwgSUEoZSwgbywgbiwgaSk7CiAgICBlbHNlIGlmICh0ID09PSAzMikgewogICAgICBmICYmIHRBKHUsIGEgKiA0LCBBLCAyNTYpOwogICAgICBmb3IgKHZhciBsID0gbiwgcyA9IG5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyLCBlLmRhdGEuYnl0ZU9mZnNldCwgZS5kYXRhLmxlbmd0aCksIGMgPSAwOyBjIDwgQTsgYysrKQogICAgICAgIGZvciAodmFyIGQgPSBhICogNCAqIGMsIHYgPSAwOyB2IDwgYTsgdisrLCBkKyssIGwgKz0gaSkgewogICAgICAgICAgdmFyIGsgPSBkICsgYSwgRSA9IGsgKyBhLCBnID0gRSArIGE7CiAgICAgICAgICBzW2xdID0gKHVbZF0gPDwgMjQgfCB1W2tdIDw8IDE2IHwgdVtFXSA8PCA4IHwgdVtnXSkgPj4+IDA7CiAgICAgICAgfQogICAgfSBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiaXREZXB0aCIpOwogIH0KfQpmdW5jdGlvbiBzYShyLCBlLCBhLCBBLCB0LCBpLCBuLCBmKSB7CiAgdmFyIHUgPSBlICYmIGUuZGF0YSwgbzsKICBpZiAoZikgewogICAgbyA9IG5ldyBVaW50MzJBcnJheShuLmxlbmd0aCAqIEEpOwogICAgZm9yICh2YXIgbCA9IDAsIHMgPSAwOyBsIDwgbi5sZW5ndGg7IGwrKykKICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBBOyBjKyssIHMrKykKICAgICAgICBvW3NdID0gUyhyKTsKICB9IGVsc2UgewogICAgbyA9IG5ldyBVaW50MTZBcnJheShuLmxlbmd0aCAqIEEpOwogICAgZm9yICh2YXIgbCA9IDAsIHMgPSAwOyBsIDwgbi5sZW5ndGg7IGwrKykKICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBBOyBjKyssIHMrKykKICAgICAgICBvW3NdID0gUChyKTsKICB9CiAgZm9yICh2YXIgZCA9IGkgLSAxIHwgMCwgdiA9IDAsIHMgPSAwOyB2IDwgbi5sZW5ndGg7IHYrKykgewogICAgdmFyIGsgPSBuW3ZdIHwgMCwgRSA9IHYgPiBkIHx8IGsgPiBkOwogICAgaWYgKCF1IHx8IEUpCiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgQTsgYysrLCBzKyspCiAgICAgICAgSChyLCBvW3NdKTsKICAgIGVsc2UKICAgICAgZm9yICh2YXIgYyA9IDAsIGcgPSBrIHwgMDsgYyA8IEE7IGMrKywgcysrKQogICAgICAgIGZvciAodmFyIHcgPSBvW3NdLCBCID0gWTAociwgdyksIG0gPSAwLCBwID0gMDsgbSA8IHc7IG0rKykgewogICAgICAgICAgdmFyIFcgPSBCW21dOwogICAgICAgICAgaWYgKFcgPiAxMjgpIHsKICAgICAgICAgICAgdmFyIEMgPSBCWysrbV07CiAgICAgICAgICAgIFcgPSAyNTYgLSBXIHwgMDsKICAgICAgICAgICAgZm9yICh2YXIgXyA9IDA7IF8gPD0gVyAmJiBwIDwgYTsgXyA9IF8gKyAxIHwgMCwgcCA9IHAgKyAxIHwgMCkKICAgICAgICAgICAgICB1W2ddID0gQywgZyA9IGcgKyBpIHwgMDsKICAgICAgICAgIH0gZWxzZSBpZiAoVyA8IDEyOCkKICAgICAgICAgICAgZm9yICh2YXIgXyA9IDA7IF8gPD0gVyAmJiBwIDwgYTsgXyA9IF8gKyAxIHwgMCwgcCA9IHAgKyAxIHwgMCkKICAgICAgICAgICAgICB1W2ddID0gQlsrK21dLCBnID0gZyArIGkgfCAwOwogICAgICAgIH0KICB9Cn0KZnVuY3Rpb24gcHIociwgZSwgYSwgQSwgdCkgewogIEEgPT09IHZvaWQgMCAmJiAoQSA9ICEwKSwgdCA9PT0gdm9pZCAwICYmICh0ID0gITEpOwogIHZhciBpID0gUyhyKTsKICBpZiAodCkgewogICAgaWYgKGkgIT09IDApCiAgICAgIHRocm93IG5ldyBFcnJvcigiU2l6ZXMgbGFyZ2VyIHRoYW4gNEdCIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICBpID0gUyhyKTsKICB9CiAgaWYgKCEoaSA8PSAwICYmIEEpKSB7CiAgICB2YXIgbiA9IHIub2Zmc2V0ICsgaTsKICAgIGlmIChuID4gci52aWV3LmJ5dGVMZW5ndGgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiU2VjdGlvbiBleGNlZWRzIGZpbGUgc2l6ZSIpOwogICAgdmFyIGYgPSBhKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbiAtIHIub2Zmc2V0OwogICAgfSk7CiAgICBmb3IgKHIub2Zmc2V0ICE9PSBuICYmIChyLm9mZnNldCA+IG4gPyBaQShyLCAiRXhjZWVkZWQgc2VjdGlvbiBsaW1pdHMiKSA6IFpBKHIsICJVbnJlYWQgc2VjdGlvbiBkYXRhIikpOyBpICUgZTsgKQogICAgICBpKyssIG4rKzsKICAgIHJldHVybiByLm9mZnNldCA9IG4sIGY7CiAgfQp9CmZ1bmN0aW9uIEswKHIpIHsKICB2YXIgZSA9IFAocik7CiAgc3dpdGNoIChlKSB7CiAgICBjYXNlIDA6IHsKICAgICAgdmFyIGEgPSBQKHIpIC8gMjU3LCBBID0gUChyKSAvIDI1NywgdCA9IFAocikgLyAyNTc7CiAgICAgIHJldHVybiBIKHIsIDIpLCB7IHI6IGEsIGc6IEEsIGI6IHQgfTsKICAgIH0KICAgIGNhc2UgMTogewogICAgICB2YXIgaSA9IFAocikgLyA2NTUzNSwgbiA9IFAocikgLyA2NTUzNSwgdCA9IFAocikgLyA2NTUzNTsKICAgICAgcmV0dXJuIEgociwgMiksIHsgaDogaSwgczogbiwgYjogdCB9OwogICAgfQogICAgY2FzZSAyOiB7CiAgICAgIHZhciBmID0gUChyKSAvIDI1NywgdSA9IFAocikgLyAyNTcsIG8gPSBQKHIpIC8gMjU3LCBsID0gUChyKSAvIDI1NzsKICAgICAgcmV0dXJuIHsgYzogZiwgbTogdSwgeTogbywgazogbCB9OwogICAgfQogICAgY2FzZSA3OiB7CiAgICAgIHZhciBzID0gZzAocikgLyAxZTQsIGMgPSBnMChyKSwgZCA9IGcwKHIpLCB2ID0gYyA8IDAgPyBjIC8gMTI4MDAgOiBjIC8gMTI3MDAsIHQgPSBkIDwgMCA/IGQgLyAxMjgwMCA6IGQgLyAxMjcwMDsKICAgICAgcmV0dXJuIEgociwgMiksIHsgbDogcywgYTogdiwgYjogdCB9OwogICAgfQogICAgY2FzZSA4OiB7CiAgICAgIHZhciBsID0gUChyKSAqIDI1NSAvIDFlNDsKICAgICAgcmV0dXJuIEgociwgNiksIHsgazogbCB9OwogICAgfQogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIHNwYWNlIik7CiAgfQp9CmZ1bmN0aW9uIGk0KHIpIHsKICBmb3IgKHZhciBlID0gUyhyKTsgZSAlIDQ7ICkKICAgIGUrKzsKICB2YXIgYSA9IHIub2Zmc2V0ICsgZSwgQSA9IFMocik7CiAgaWYgKEEgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGF0dGVybiB2ZXJzaW9uOiAiLmNvbmNhdChBKSk7CiAgdmFyIHQgPSBTKHIpLCBpID0gZzAociksIG4gPSBnMChyKTsKICBpZiAodCAhPT0gMyAmJiB0ICE9PSAxICYmIHQgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHBhdHRlcm4gY29sb3IgbW9kZTogIi5jb25jYXQodCkpOwogIHZhciBmID0gejAociksIHUgPSB4cihyLCAxKSwgbyA9IFtdOwogIGlmICh0ID09PSAyKSB7CiAgICBmb3IgKHZhciBsID0gMDsgbCA8IDI1NjsgbCsrKQogICAgICBvLnB1c2goewogICAgICAgIHI6IE8ociksCiAgICAgICAgZzogTyhyKSwKICAgICAgICBiOiBPKHIpCiAgICAgIH0pOwogICAgSChyLCA0KTsKICB9CiAgdmFyIHMgPSBTKHIpOwogIGlmIChzICE9PSAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhdHRlcm4gVk1BTCB2ZXJzaW9uOiAiLmNvbmNhdChzKSk7CiAgUyhyKTsKICBmb3IgKHZhciBjID0gUyhyKSwgZCA9IFMociksIHYgPSBTKHIpLCBrID0gUyhyKSwgRSA9IFMociksIGcgPSBrIC0gZCwgdyA9IHYgLSBjLCBCID0gbmV3IFVpbnQ4QXJyYXkoZyAqIHcgKiA0KSwgbCA9IDM7IGwgPCBCLmJ5dGVMZW5ndGg7IGwgKz0gNCkKICAgIEJbbF0gPSAyNTU7CiAgZm9yICh2YXIgbCA9IDAsIG0gPSAwOyBsIDwgRSArIDI7IGwrKykgewogICAgdmFyIHAgPSBTKHIpOwogICAgaWYgKHApIHsKICAgICAgdmFyIFcgPSBTKHIpLCBDID0gUyhyKSwgXyA9IFMociksIE4gPSBTKHIpLCBEID0gUyhyKSwgWSA9IFMociksIGYwID0gUChyKSwgRyA9IE8ociksIEogPSBXIC0gMjMsIEsgPSBZMChyLCBKKTsKICAgICAgaWYgKEMgIT09IDggfHwgZjAgIT09IDgpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIxNmJpdCBwaXhlbCBkZXB0aCBub3Qgc3VwcG9ydGVkIGZvciBwYXR0ZXJucyIpOwogICAgICB2YXIgWCA9IFkgLSBOLCBsMCA9IEQgLSBfLCBiID0gTiAtIGQsIFogPSBfIC0gYzsKICAgICAgaWYgKEcgPT09IDApIHsKICAgICAgICBpZiAodCA9PT0gMyAmJiBtIDwgMykKICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbDA7IHkrKykKICAgICAgICAgICAgZm9yICh2YXIgRiA9IDA7IEYgPCBYOyBGKyspIHsKICAgICAgICAgICAgICB2YXIgUiA9IEYgKyB5ICogWCwgTSA9IChiICsgRiArICh5ICsgWikgKiBnKSAqIDQ7CiAgICAgICAgICAgICAgQltNICsgbV0gPSBLW1JdOwogICAgICAgICAgICB9CiAgICAgICAgaWYgKHQgPT09IDEgJiYgbSA8IDEpCiAgICAgICAgICBmb3IgKHZhciBJID0gMDsgSSA8IGwwOyBJKyspCiAgICAgICAgICAgIGZvciAodmFyIFYgPSAwOyBWIDwgWDsgVisrKSB7CiAgICAgICAgICAgICAgdmFyIFIgPSBWICsgSSAqIFgsIE0gPSAoYiArIFYgKyAoSSArIFopICogZykgKiA0LCB6ID0gS1tSXTsKICAgICAgICAgICAgICBCW00gKyAwXSA9IHosIEJbTSArIDFdID0geiwgQltNICsgMl0gPSB6OwogICAgICAgICAgICB9CiAgICAgICAgaWYgKHQgPT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluZGV4ZWQgcGF0dGVybiBjb2xvciBtb2RlIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgICB9IGVsc2UgaWYgKEcgPT09IDEpIHsKICAgICAgICB2YXIgaiA9IHsgZGF0YTogQiwgd2lkdGg6IGcsIGhlaWdodDogdyB9LCBhMCA9IHsgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWCAqIGwwKSwgd2lkdGg6IFgsIGhlaWdodDogbDAgfSwgYjAgPSBLYShLLmJ1ZmZlciwgSy5ieXRlT2Zmc2V0LCBLLmJ5dGVMZW5ndGgpOwogICAgICAgIGlmICh0ID09PSAzICYmIG0gPCAzICYmIChzYShiMCwgYTAsIFgsIGwwLCA4LCAxLCBbMF0sICExKSwgRmkoYTAsIGosIGIsIFosIG0pKSwgdCA9PT0gMSAmJiBtIDwgMSAmJiAoc2EoYjAsIGEwLCBYLCBsMCwgOCwgMSwgWzBdLCAhMSksIEZpKGEwLCBqLCBiLCBaLCAwKSwgeWUoaikpLCB0ID09PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmRleGVkIHBhdHRlcm4gY29sb3IgbW9kZSBub3QgaW1wbGVtZW50ZWQiKTsKICAgICAgfSBlbHNlCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhdHRlcm4gY29tcHJlc3Npb24gbW9kZSIpOwogICAgICBtKys7CiAgICB9CiAgfQogIHJldHVybiByLm9mZnNldCA9IGEsIHsgaWQ6IHUsIG5hbWU6IGYsIHg6IGksIHk6IG4sIGJvdW5kczogeyB4OiBkLCB5OiBjLCB3OiBnLCBoOiB3IH0sIGRhdGE6IEIgfTsKfQpmdW5jdGlvbiBGaShyLCBlLCBhLCBBLCB0KSB7CiAgZm9yICh2YXIgaSA9IHIud2lkdGgsIG4gPSByLmhlaWdodCwgZiA9IGUud2lkdGgsIHUgPSAwOyB1IDwgbjsgdSsrKQogICAgZm9yICh2YXIgbyA9IDA7IG8gPCBpOyBvKyspIHsKICAgICAgdmFyIGwgPSBvICsgdSAqIGksIHMgPSAoYSArIG8gKyAodSArIEEpICogZikgKiA0LCBjID0gci5kYXRhW2xdOwogICAgICBlLmRhdGFbcyArIHRdID0gYzsKICAgIH0KfQp2YXIgVTEgPSBbCiAgdm9pZCAwLAogICJvdXRlciBiZXZlbCIsCiAgImlubmVyIGJldmVsIiwKICAiZW1ib3NzIiwKICAicGlsbG93IGVtYm9zcyIsCiAgInN0cm9rZSBlbWJvc3MiCl07CmZ1bmN0aW9uIERhKHIpIHsKICByZXR1cm4gSnIociwgIjhCSU0iKSwgSmFbUjAocildIHx8ICJub3JtYWwiOwp9CmZ1bmN0aW9uIE5hKHIsIGUpIHsKICBuMChyLCAiOEJJTSIpLCBuMChyLCBYZVtlXSB8fCAibm9ybSIpOwp9CmZ1bmN0aW9uIHhhKHIpIHsKICByZXR1cm4gTyhyKSAvIDI1NTsKfQpmdW5jdGlvbiBNYShyLCBlKSB7CiAgVChyLCBNYXRoLnJvdW5kKGUgKiAyNTUpIHwgMCk7Cn0KZnVuY3Rpb24gbjQocikgewogIHZhciBlID0gUChyKTsKICBpZiAoZSAhPT0gMCkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBlZmZlY3RzIGxheWVyIHZlcnNpb246ICIuY29uY2F0KGUpKTsKICBmb3IgKHZhciBhID0gUChyKSwgQSA9IHt9LCB0ID0gMDsgdCA8IGE7IHQrKykgewogICAgSnIociwgIjhCSU0iKTsKICAgIHZhciBpID0gUjAocik7CiAgICBzd2l0Y2ggKGkpIHsKICAgICAgY2FzZSAiY21uUyI6IHsKICAgICAgICB2YXIgbiA9IFMociksIGYgPSBTKHIpLCB1ID0gISFPKHIpOwogICAgICAgIGlmIChIKHIsIDIpLCBuICE9PSA3IHx8IGYgIT09IDAgfHwgIXUpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZWZmZWN0cyBjb21tb24gc3RhdGUiKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJkc2R3IjoKICAgICAgY2FzZSAiaXNkdyI6IHsKICAgICAgICB2YXIgbyA9IFMociksIGwgPSBTKHIpOwogICAgICAgIGlmIChvICE9PSA0MSAmJiBvICE9PSA1MSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaGFkb3cgc2l6ZTogIi5jb25jYXQobykpOwogICAgICAgIGlmIChsICE9PSAwICYmIGwgIT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2hhZG93IHZlcnNpb246ICIuY29uY2F0KGwpKTsKICAgICAgICB2YXIgbiA9IGhyKHIpOwogICAgICAgIGhyKHIpOwogICAgICAgIHZhciBzID0gaHIociksIGMgPSBocihyKSwgZCA9IEswKHIpLCB2ID0gRGEociksIGsgPSAhIU8ociksIEUgPSAhIU8ociksIGcgPSB4YShyKTsKICAgICAgICBvID49IDUxICYmIEswKHIpOwogICAgICAgIHZhciB3ID0gewogICAgICAgICAgc2l6ZTogeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiBuIH0sCiAgICAgICAgICBkaXN0YW5jZTogeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiBjIH0sCiAgICAgICAgICBhbmdsZTogcywKICAgICAgICAgIGNvbG9yOiBkLAogICAgICAgICAgYmxlbmRNb2RlOiB2LAogICAgICAgICAgZW5hYmxlZDogaywKICAgICAgICAgIHVzZUdsb2JhbExpZ2h0OiBFLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgaSA9PT0gImRzZHciID8gQS5kcm9wU2hhZG93ID0gW3ddIDogQS5pbm5lclNoYWRvdyA9IFt3XTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICJvZ2x3IjogewogICAgICAgIHZhciBvID0gUyhyKSwgQiA9IFMocik7CiAgICAgICAgaWYgKG8gIT09IDMyICYmIG8gIT09IDQyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG91dGVyIGdsb3cgc2l6ZTogIi5jb25jYXQobykpOwogICAgICAgIGlmIChCICE9PSAwICYmIEIgIT09IDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3V0ZXIgZ2xvdyB2ZXJzaW9uOiAiLmNvbmNhdChCKSk7CiAgICAgICAgdmFyIG4gPSBocihyKTsKICAgICAgICBocihyKTsKICAgICAgICB2YXIgZCA9IEswKHIpLCB2ID0gRGEociksIGsgPSAhIU8ociksIGcgPSB4YShyKTsKICAgICAgICBvID49IDQyICYmIEswKHIpLCBBLm91dGVyR2xvdyA9IHsKICAgICAgICAgIHNpemU6IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogbiB9LAogICAgICAgICAgY29sb3I6IGQsCiAgICAgICAgICBibGVuZE1vZGU6IHYsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiaWdsdyI6IHsKICAgICAgICB2YXIgbyA9IFMociksIG0gPSBTKHIpOwogICAgICAgIGlmIChvICE9PSAzMiAmJiBvICE9PSA0MykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbm5lciBnbG93IHNpemU6ICIuY29uY2F0KG8pKTsKICAgICAgICBpZiAobSAhPT0gMCAmJiBtICE9PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlubmVyIGdsb3cgdmVyc2lvbjogIi5jb25jYXQobSkpOwogICAgICAgIHZhciBuID0gaHIocik7CiAgICAgICAgaHIocik7CiAgICAgICAgdmFyIGQgPSBLMChyKSwgdiA9IERhKHIpLCBrID0gISFPKHIpLCBnID0geGEocik7CiAgICAgICAgbyA+PSA0MyAmJiAoTyhyKSwgSzAocikpLCBBLmlubmVyR2xvdyA9IHsKICAgICAgICAgIHNpemU6IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogbiB9LAogICAgICAgICAgY29sb3I6IGQsCiAgICAgICAgICBibGVuZE1vZGU6IHYsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgb3BhY2l0eTogZwogICAgICAgIH07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAiYmV2bCI6IHsKICAgICAgICB2YXIgbyA9IFMociksIHAgPSBTKHIpOwogICAgICAgIGlmIChvICE9PSA1OCAmJiBvICE9PSA3OCkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiZXZlbCBzaXplOiAiLmNvbmNhdChvKSk7CiAgICAgICAgaWYgKHAgIT09IDAgJiYgcCAhPT0gMikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiZXZlbCB2ZXJzaW9uOiAiLmNvbmNhdChwKSk7CiAgICAgICAgdmFyIHMgPSBocihyKSwgVyA9IGhyKHIpLCBuID0gaHIociksIEMgPSBEYShyKSwgXyA9IERhKHIpLCBOID0gSzAociksIEQgPSBLMChyKSwgWSA9IFUxW08ocildIHx8ICJpbm5lciBiZXZlbCIsIGYwID0geGEociksIEcgPSB4YShyKSwgayA9ICEhTyhyKSwgRSA9ICEhTyhyKSwgSiA9IE8ocikgPyAiZG93biIgOiAidXAiOwogICAgICAgIG8gPj0gNzggJiYgKEswKHIpLCBLMChyKSksIEEuYmV2ZWwgPSB7CiAgICAgICAgICBzaXplOiB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IG4gfSwKICAgICAgICAgIGFuZ2xlOiBzLAogICAgICAgICAgc3RyZW5ndGg6IFcsCiAgICAgICAgICBoaWdobGlnaHRCbGVuZE1vZGU6IEMsCiAgICAgICAgICBzaGFkb3dCbGVuZE1vZGU6IF8sCiAgICAgICAgICBoaWdobGlnaHRDb2xvcjogTiwKICAgICAgICAgIHNoYWRvd0NvbG9yOiBELAogICAgICAgICAgc3R5bGU6IFksCiAgICAgICAgICBoaWdobGlnaHRPcGFjaXR5OiBmMCwKICAgICAgICAgIHNoYWRvd09wYWNpdHk6IEcsCiAgICAgICAgICBlbmFibGVkOiBrLAogICAgICAgICAgdXNlR2xvYmFsTGlnaHQ6IEUsCiAgICAgICAgICBkaXJlY3Rpb246IEoKICAgICAgICB9OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgInNvZmkiOiB7CiAgICAgICAgdmFyIG4gPSBTKHIpLCBLID0gUyhyKTsKICAgICAgICBpZiAobiAhPT0gMzQpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZWZmZWN0cyBzb2xpZCBmaWxsIGluZm8gc2l6ZTogIi5jb25jYXQobikpOwogICAgICAgIGlmIChLICE9PSAyKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVmZmVjdHMgc29saWQgZmlsbCBpbmZvIHZlcnNpb246ICIuY29uY2F0KEspKTsKICAgICAgICB2YXIgdiA9IERhKHIpLCBkID0gSzAociksIGcgPSB4YShyKSwgayA9ICEhTyhyKTsKICAgICAgICBLMChyKSwgQS5zb2xpZEZpbGwgPSBbeyBibGVuZE1vZGU6IHYsIGNvbG9yOiBkLCBvcGFjaXR5OiBnLCBlbmFibGVkOiBrIH1dOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVmZmVjdCB0eXBlOiAnIi5jb25jYXQoaSwgIiciKSk7CiAgICB9CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIENpKHIsIGUpIHsKICB2YXIgYTsKICBVKHIsIDUxKSwgVShyLCAyKSwgZ3IociwgZS5zaXplICYmIGUuc2l6ZS52YWx1ZSB8fCAwKSwgZ3IociwgMCksIGdyKHIsIGUuYW5nbGUgfHwgMCksIGdyKHIsIGUuZGlzdGFuY2UgJiYgZS5kaXN0YW5jZS52YWx1ZSB8fCAwKSwgcnIociwgZS5jb2xvciksIE5hKHIsIGUuYmxlbmRNb2RlKSwgVChyLCBlLmVuYWJsZWQgPyAxIDogMCksIFQociwgZS51c2VHbG9iYWxMaWdodCA/IDEgOiAwKSwgTWEociwgKGEgPSBlLm9wYWNpdHkpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiAxKSwgcnIociwgZS5jb2xvcik7Cn0KZnVuY3Rpb24gZjQociwgZSkgewogIHZhciBhLCBBLCB0LCBpLCBuLCBmLCB1ID0gKGEgPSBlLmRyb3BTaGFkb3cpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFbMF0sIG8gPSAoQSA9IGUuaW5uZXJTaGFkb3cpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEFbMF0sIGwgPSBlLm91dGVyR2xvdywgcyA9IGUuaW5uZXJHbG93LCBjID0gZS5iZXZlbCwgZCA9ICh0ID0gZS5zb2xpZEZpbGwpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRbMF0sIHYgPSAxOwogIGlmICh1ICYmIHYrKywgbyAmJiB2KyssIGwgJiYgdisrLCBzICYmIHYrKywgYyAmJiB2KyssIGQgJiYgdisrLCB4KHIsIDApLCB4KHIsIHYpLCBuMChyLCAiOEJJTSIpLCBuMChyLCAiY21uUyIpLCBVKHIsIDcpLCBVKHIsIDApLCBUKHIsIDEpLCBaMChyLCAyKSwgdSAmJiAobjAociwgIjhCSU0iKSwgbjAociwgImRzZHciKSwgQ2kociwgdSkpLCBvICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiaXNkdyIpLCBDaShyLCBvKSksIGwgJiYgKG4wKHIsICI4QklNIiksIG4wKHIsICJvZ2x3IiksIFUociwgNDIpLCBVKHIsIDIpLCBncihyLCAoKGkgPSBsLnNpemUpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGkudmFsdWUpIHx8IDApLCBncihyLCAwKSwgcnIociwgbC5jb2xvciksIE5hKHIsIGwuYmxlbmRNb2RlKSwgVChyLCBsLmVuYWJsZWQgPyAxIDogMCksIE1hKHIsIGwub3BhY2l0eSB8fCAwKSwgcnIociwgbC5jb2xvcikpLCBzICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiaWdsdyIpLCBVKHIsIDQzKSwgVShyLCAyKSwgZ3IociwgKChuID0gcy5zaXplKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnZhbHVlKSB8fCAwKSwgZ3IociwgMCksIHJyKHIsIHMuY29sb3IpLCBOYShyLCBzLmJsZW5kTW9kZSksIFQociwgcy5lbmFibGVkID8gMSA6IDApLCBNYShyLCBzLm9wYWNpdHkgfHwgMCksIFQociwgMCksIHJyKHIsIHMuY29sb3IpKSwgYykgewogICAgbjAociwgIjhCSU0iKSwgbjAociwgImJldmwiKSwgVShyLCA3OCksIFUociwgMiksIGdyKHIsIGMuYW5nbGUgfHwgMCksIGdyKHIsIGMuc3RyZW5ndGggfHwgMCksIGdyKHIsICgoZiA9IGMuc2l6ZSkgPT09IG51bGwgfHwgZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZi52YWx1ZSkgfHwgMCksIE5hKHIsIGMuaGlnaGxpZ2h0QmxlbmRNb2RlKSwgTmEociwgYy5zaGFkb3dCbGVuZE1vZGUpLCBycihyLCBjLmhpZ2hsaWdodENvbG9yKSwgcnIociwgYy5zaGFkb3dDb2xvcik7CiAgICB2YXIgayA9IFUxLmluZGV4T2YoYy5zdHlsZSk7CiAgICBUKHIsIGsgPD0gMCA/IDEgOiBrKSwgTWEociwgYy5oaWdobGlnaHRPcGFjaXR5IHx8IDApLCBNYShyLCBjLnNoYWRvd09wYWNpdHkgfHwgMCksIFQociwgYy5lbmFibGVkID8gMSA6IDApLCBUKHIsIGMudXNlR2xvYmFsTGlnaHQgPyAxIDogMCksIFQociwgYy5kaXJlY3Rpb24gPT09ICJkb3duIiA/IDEgOiAwKSwgcnIociwgYy5oaWdobGlnaHRDb2xvciksIHJyKHIsIGMuc2hhZG93Q29sb3IpOwogIH0KICBkICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAic29maSIpLCBVKHIsIDM0KSwgVShyLCAyKSwgTmEociwgZC5ibGVuZE1vZGUpLCBycihyLCBkLmNvbG9yKSwgTWEociwgZC5vcGFjaXR5IHx8IDApLCBUKHIsIGQuZW5hYmxlZCA/IDEgOiAwKSwgcnIociwgZC5jb2xvcikpOwp9CmZ1bmN0aW9uIFdpKHIpIHsKICByZXR1cm4gciA9PT0gMzIgfHwgciA9PT0gMTAgfHwgciA9PT0gMTMgfHwgciA9PT0gOTsKfQpmdW5jdGlvbiBfaShyKSB7CiAgcmV0dXJuIHIgPj0gNDggJiYgciA8PSA1NyB8fCByID09PSA0NiB8fCByID09PSA0NTsKfQpmdW5jdGlvbiBqMShyKSB7CiAgdmFyIGUgPSAwOwogIGZ1bmN0aW9uIGEoKSB7CiAgICBmb3IgKDsgZSA8IHIubGVuZ3RoICYmIFdpKHJbZV0pOyApCiAgICAgIGUrKzsKICB9CiAgZnVuY3Rpb24gQSgpIHsKICAgIHZhciB3ID0gcltlXTsKICAgIHJldHVybiBlKyssIHcgPT09IDkyICYmICh3ID0gcltlXSwgZSsrKSwgdzsKICB9CiAgZnVuY3Rpb24gdCgpIHsKICAgIHZhciB3ID0gIiI7CiAgICBpZiAocltlXSA9PT0gNDEpCiAgICAgIHJldHVybiBlKyssIHc7CiAgICBpZiAocltlXSAhPT0gMjU0IHx8IHJbZSArIDFdICE9PSAyNTUpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB1dGYtMTYgQk9NIik7CiAgICBmb3IgKGUgKz0gMjsgZSA8IHIubGVuZ3RoICYmIHJbZV0gIT09IDQxOyApIHsKICAgICAgdmFyIEIgPSBBKCksIG0gPSBBKCksIHAgPSBCIDw8IDggfCBtOwogICAgICB3ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocCk7CiAgICB9CiAgICByZXR1cm4gZSsrLCB3OwogIH0KICB2YXIgaSA9IG51bGwsIG4gPSBbXTsKICBmdW5jdGlvbiBmKHcpIHsKICAgIG4ubGVuZ3RoID8gKHUodyksIG4ucHVzaCh3KSkgOiAobi5wdXNoKHcpLCBpID0gdyk7CiAgfQogIGZ1bmN0aW9uIHUodykgewogICAgaWYgKCFuLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEiKTsKICAgIHZhciBCID0gbltuLmxlbmd0aCAtIDFdOwogICAgaWYgKHR5cGVvZiBCID09ICJzdHJpbmciKQogICAgICBuW24ubGVuZ3RoIC0gMl1bQl0gPSB3LCBsKCk7CiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KEIpKQogICAgICBCLnB1c2godyk7CiAgICBlbHNlCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRhIik7CiAgfQogIGZ1bmN0aW9uIG8odykgewogICAgbi5sZW5ndGggfHwgZih7fSk7CiAgICB2YXIgQiA9IG5bbi5sZW5ndGggLSAxXTsKICAgIGlmIChCICYmIHR5cGVvZiBCID09ICJzdHJpbmciKQogICAgICB1KHcgPT09ICJuaWwiID8gbnVsbCA6ICIvIi5jb25jYXQodykpOwogICAgZWxzZSBpZiAoQiAmJiB0eXBlb2YgQiA9PSAib2JqZWN0IikKICAgICAgbi5wdXNoKHcpOwogICAgZWxzZQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSIpOwogIH0KICBmdW5jdGlvbiBsKCkgewogICAgaWYgKCFuLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEiKTsKICAgIG4ucG9wKCk7CiAgfQogIGEoKTsKICBmb3IgKHZhciBzID0gci5sZW5ndGg7IHMgPiAwICYmIHJbcyAtIDFdID09PSAwOyApCiAgICBzLS07CiAgZm9yICg7IGUgPCBzOyApIHsKICAgIHZhciBjID0gZSwgZCA9IHJbY107CiAgICBpZiAoZCA9PT0gNjAgJiYgcltjICsgMV0gPT09IDYwKQogICAgICBlICs9IDIsIGYoe30pOwogICAgZWxzZSBpZiAoZCA9PT0gNjIgJiYgcltjICsgMV0gPT09IDYyKQogICAgICBlICs9IDIsIGwoKTsKICAgIGVsc2UgaWYgKGQgPT09IDQ3KSB7CiAgICAgIGUgKz0gMTsKICAgICAgZm9yICh2YXIgdiA9IGU7IGUgPCByLmxlbmd0aCAmJiAhV2kocltlXSk7ICkKICAgICAgICBlKys7CiAgICAgIGZvciAodmFyIGsgPSAiIiwgRSA9IHY7IEUgPCBlOyBFKyspCiAgICAgICAgayArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJbRV0pOwogICAgICBvKGspOwogICAgfSBlbHNlIGlmIChkID09PSA0MCkKICAgICAgZSArPSAxLCB1KHQoKSk7CiAgICBlbHNlIGlmIChkID09PSA5MSkKICAgICAgZSArPSAxLCBmKFtdKTsKICAgIGVsc2UgaWYgKGQgPT09IDkzKQogICAgICBlICs9IDEsIGwoKTsKICAgIGVsc2UgaWYgKGQgPT09IDExMCAmJiByW2MgKyAxXSA9PT0gMTE3ICYmIHJbYyArIDJdID09PSAxMDggJiYgcltjICsgM10gPT09IDEwOCkKICAgICAgZSArPSA0LCB1KG51bGwpOwogICAgZWxzZSBpZiAoZCA9PT0gMTE2ICYmIHJbYyArIDFdID09PSAxMTQgJiYgcltjICsgMl0gPT09IDExNyAmJiByW2MgKyAzXSA9PT0gMTAxKQogICAgICBlICs9IDQsIHUoITApOwogICAgZWxzZSBpZiAoZCA9PT0gMTAyICYmIHJbYyArIDFdID09PSA5NyAmJiByW2MgKyAyXSA9PT0gMTA4ICYmIHJbYyArIDNdID09PSAxMTUgJiYgcltjICsgNF0gPT09IDEwMSkKICAgICAgZSArPSA1LCB1KCExKTsKICAgIGVsc2UgaWYgKF9pKGQpKSB7CiAgICAgIGZvciAodmFyIGcgPSAiIjsgZSA8IHIubGVuZ3RoICYmIF9pKHJbZV0pOyApCiAgICAgICAgZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJbZV0pLCBlKys7CiAgICAgIHUocGFyc2VGbG9hdChnKSk7CiAgICB9IGVsc2UKICAgICAgZSArPSAxLCBjb25zb2xlLmxvZygKICAgICAgICAiSW52YWxpZCB0b2tlbiAnIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShkKSwgIicgKCIpLmNvbmNhdChkLCAiKSBhdCAiKS5jb25jYXQoZSkKICAgICAgICAvLyArIGAgbmVhciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGRhdGEuc2xpY2UoaW5kZXggLSAxMCwgaW5kZXggKyAyMCkgYXMgYW55KX0nYAogICAgICAgIC8vICsgYCBkYXRhIFske0FycmF5LmZyb20oZGF0YS5zbGljZShpbmRleCAtIDEwLCBpbmRleCArIDIwKSkuam9pbignLCAnKX1dYAogICAgICApOwogICAgYSgpOwogIH0KICByZXR1cm4gaTsKfQp2YXIgbzQgPSBbCiAgIkF4aXMiLAogICJYWSIsCiAgIlpvbmUiLAogICJXb3JkU3BhY2luZyIsCiAgIkZpcnN0TGluZUluZGVudCIsCiAgIkdseXBoU3BhY2luZyIsCiAgIlN0YXJ0SW5kZW50IiwKICAiRW5kSW5kZW50IiwKICAiU3BhY2VCZWZvcmUiLAogICJTcGFjZUFmdGVyIiwKICAiTGV0dGVyU3BhY2luZyIsCiAgIlZhbHVlcyIsCiAgIkdyaWRTaXplIiwKICAiR3JpZExlYWRpbmciLAogICJQb2ludEJhc2UiLAogICJCb3hCb3VuZHMiLAogICJUcmFuc2Zvcm1Qb2ludDAiLAogICJUcmFuc2Zvcm1Qb2ludDEiLAogICJUcmFuc2Zvcm1Qb2ludDIiLAogICJGb250U2l6ZSIsCiAgIkxlYWRpbmciLAogICJIb3Jpem9udGFsU2NhbGUiLAogICJWZXJ0aWNhbFNjYWxlIiwKICAiQmFzZWxpbmVTaGlmdCIsCiAgIlRzdW1lIiwKICAiT3V0bGluZVdpZHRoIiwKICAiQXV0b0xlYWRpbmciCl0sIHU0ID0gWyJSdW5MZW5ndGhBcnJheSJdOwpmdW5jdGlvbiBsNChyLCBlKSB7CiAgZSA9PT0gdm9pZCAwICYmIChlID0gITEpOwogIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkoMTAyNCksIEEgPSAwLCB0ID0gMDsKICBmdW5jdGlvbiBpKHcpIHsKICAgIGlmIChBID49IGEubGVuZ3RoKSB7CiAgICAgIHZhciBCID0gbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGggKiAyKTsKICAgICAgQi5zZXQoYSksIGEgPSBCOwogICAgfQogICAgYVtBXSA9IHcsIEErKzsKICB9CiAgZnVuY3Rpb24gbih3KSB7CiAgICBmb3IgKHZhciBCID0gMDsgQiA8IHcubGVuZ3RoOyBCKyspCiAgICAgIGkody5jaGFyQ29kZUF0KEIpKTsKICB9CiAgZnVuY3Rpb24gZigpIHsKICAgIGlmIChlKQogICAgICBuKCIgIik7CiAgICBlbHNlCiAgICAgIGZvciAodmFyIHcgPSAwOyB3IDwgdDsgdysrKQogICAgICAgIG4oIgkiKTsKICB9CiAgZnVuY3Rpb24gdSh3LCBCKSB7CiAgICBmKCksIG4oIi8iLmNvbmNhdCh3KSksIHYoQiwgdywgITApLCBlIHx8IG4oYApgKTsKICB9CiAgZnVuY3Rpb24gbyh3KSB7CiAgICByZXR1cm4gdy50b1N0cmluZygpOwogIH0KICBmdW5jdGlvbiBsKHcpIHsKICAgIHJldHVybiB3LnRvRml4ZWQoNSkucmVwbGFjZSgvKFxkKTArJC9nLCAiJDEiKS5yZXBsYWNlKC9eMCtcLihbMS05XSkvZywgIi4kMSIpLnJlcGxhY2UoL14tMCtcLjAoXGQpL2csICItLjAkMSIpOwogIH0KICBmdW5jdGlvbiBzKHcsIEIpIHsKICAgIHZhciBtID0gQiAmJiBvNC5pbmRleE9mKEIpICE9PSAtMSB8fCAodyB8IDApICE9PSB3OwogICAgcmV0dXJuIG0gPyBsKHcpIDogbyh3KTsKICB9CiAgZnVuY3Rpb24gYyh3KSB7CiAgICB2YXIgQiA9IE9iamVjdC5rZXlzKHcpOwogICAgcmV0dXJuIEIuaW5kZXhPZigiOTgiKSAhPT0gLTEgJiYgQi51bnNoaWZ0LmFwcGx5KEIsIEIuc3BsaWNlKEIuaW5kZXhPZigiOTkiKSwgMSkpLCBCLmluZGV4T2YoIjk5IikgIT09IC0xICYmIEIudW5zaGlmdC5hcHBseShCLCBCLnNwbGljZShCLmluZGV4T2YoIjk5IiksIDEpKSwgQjsKICB9CiAgZnVuY3Rpb24gZCh3KSB7CiAgICAodyA9PT0gNDAgfHwgdyA9PT0gNDEgfHwgdyA9PT0gOTIpICYmIGkoOTIpLCBpKHcpOwogIH0KICBmdW5jdGlvbiB2KHcsIEIsIG0pIHsKICAgIG0gPT09IHZvaWQgMCAmJiAobSA9ICExKTsKICAgIGZ1bmN0aW9uIHAoKSB7CiAgICAgIG0gPyBuKCIgIikgOiBmKCk7CiAgICB9CiAgICBpZiAodyA9PT0gbnVsbCkKICAgICAgcCgpLCBuKGUgPyAiL25pbCIgOiAibnVsbCIpOwogICAgZWxzZSBpZiAodHlwZW9mIHcgPT0gIm51bWJlciIpCiAgICAgIHAoKSwgbihzKHcsIEIpKTsKICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJib29sZWFuIikKICAgICAgcCgpLCBuKHcgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJzdHJpbmciKQogICAgICBpZiAocCgpLCAoQiA9PT0gIjk5IiB8fCBCID09PSAiOTgiKSAmJiB3LmNoYXJBdCgwKSA9PT0gIi8iKQogICAgICAgIG4odyk7CiAgICAgIGVsc2UgewogICAgICAgIG4oIigiKSwgaSgyNTQpLCBpKDI1NSk7CiAgICAgICAgZm9yICh2YXIgVyA9IDA7IFcgPCB3Lmxlbmd0aDsgVysrKSB7CiAgICAgICAgICB2YXIgQyA9IHcuY2hhckNvZGVBdChXKTsKICAgICAgICAgIGQoQyA+PiA4ICYgMjU1KSwgZChDICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgbigiKSIpOwogICAgICB9CiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHcpKQogICAgICBpZiAocCgpLCB3LmV2ZXJ5KGZ1bmN0aW9uKGwwKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBsMCA9PSAibnVtYmVyIjsKICAgICAgfSkpIHsKICAgICAgICBuKCJbIik7CiAgICAgICAgZm9yICh2YXIgXyA9IHU0LmluZGV4T2YoQikgIT09IC0xLCBOID0gMCwgRCA9IHc7IE4gPCBELmxlbmd0aDsgTisrKSB7CiAgICAgICAgICB2YXIgWSA9IERbTl07CiAgICAgICAgICBuKCIgIiksIG4oXyA/IHMoWSkgOiBsKFkpKTsKICAgICAgICB9CiAgICAgICAgbigiIF0iKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuKCJbIiksIGUgfHwgbihgCmApOwogICAgICAgIGZvciAodmFyIGYwID0gMCwgRyA9IHc7IGYwIDwgRy5sZW5ndGg7IGYwKyspIHsKICAgICAgICAgIHZhciBZID0gR1tmMF07CiAgICAgICAgICB2KFksIEIpLCBlIHx8IG4oYApgKTsKICAgICAgICB9CiAgICAgICAgZigpLCBuKCJdIik7CiAgICAgIH0KICAgIGVsc2UgaWYgKHR5cGVvZiB3ID09ICJvYmplY3QiKSB7CiAgICAgIG0gJiYgIWUgJiYgbihgCmApLCBmKCksIG4oIjw8IiksIGUgfHwgbihgCmApLCB0Kys7CiAgICAgIGZvciAodmFyIEogPSAwLCBLID0gYyh3KTsgSiA8IEsubGVuZ3RoOyBKKyspIHsKICAgICAgICB2YXIgWCA9IEtbSl07CiAgICAgICAgdShYLCB3W1hdKTsKICAgICAgfQogICAgICB0LS0sIGYoKSwgbigiPj4iKTsKICAgIH0KICB9CiAgaWYgKGUpIHsKICAgIGlmICh0eXBlb2YgciA9PSAib2JqZWN0IikKICAgICAgZm9yICh2YXIgayA9IDAsIEUgPSBjKHIpOyBrIDwgRS5sZW5ndGg7IGsrKykgewogICAgICAgIHZhciBnID0gRVtrXTsKICAgICAgICB1KGcsIHJbZ10pOwogICAgICB9CiAgfSBlbHNlCiAgICBuKGAKCmApLCB2KHIpOwogIHJldHVybiBhLnNsaWNlKDAsIEEpOwp9CnZhciBIMCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBIMCA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24ocikgewogICAgZm9yICh2YXIgZSwgYSA9IDEsIEEgPSBhcmd1bWVudHMubGVuZ3RoOyBhIDwgQTsgYSsrKSB7CiAgICAgIGUgPSBhcmd1bWVudHNbYV07CiAgICAgIGZvciAodmFyIHQgaW4gZSkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHQpICYmIChyW3RdID0gZVt0XSk7CiAgICB9CiAgICByZXR1cm4gcjsKICB9LCBIMC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9LCBRMSA9IHsKICBuYW1lOiAiTXlyaWFkUHJvLVJlZ3VsYXIiLAogIHNjcmlwdDogMCwKICB0eXBlOiAwLAogIHN5bnRoZXRpYzogMAp9LCBmZSA9IHsKICBqdXN0aWZpY2F0aW9uOiAibGVmdCIsCiAgZmlyc3RMaW5lSW5kZW50OiAwLAogIHN0YXJ0SW5kZW50OiAwLAogIGVuZEluZGVudDogMCwKICBzcGFjZUJlZm9yZTogMCwKICBzcGFjZUFmdGVyOiAwLAogIGF1dG9IeXBoZW5hdGU6ICEwLAogIGh5cGhlbmF0ZWRXb3JkU2l6ZTogNiwKICBwcmVIeXBoZW46IDIsCiAgcG9zdEh5cGhlbjogMiwKICBjb25zZWN1dGl2ZUh5cGhlbnM6IDgsCiAgem9uZTogMzYsCiAgd29yZFNwYWNpbmc6IFswLjgsIDEsIDEuMzNdLAogIGxldHRlclNwYWNpbmc6IFswLCAwLCAwXSwKICBnbHlwaFNwYWNpbmc6IFsxLCAxLCAxXSwKICBhdXRvTGVhZGluZzogMS4yLAogIGxlYWRpbmdUeXBlOiAwLAogIGhhbmdpbmc6ICExLAogIGJ1cmFzYWdhcmk6ICExLAogIGtpbnNva3VPcmRlcjogMCwKICBldmVyeUxpbmVDb21wb3NlcjogITEKfSwgYzQgPSB7CiAgZm9udDogUTEsCiAgZm9udFNpemU6IDEyLAogIGZhdXhCb2xkOiAhMSwKICBmYXV4SXRhbGljOiAhMSwKICBhdXRvTGVhZGluZzogITAsCiAgbGVhZGluZzogMCwKICBob3Jpem9udGFsU2NhbGU6IDEsCiAgdmVydGljYWxTY2FsZTogMSwKICB0cmFja2luZzogMCwKICBhdXRvS2VybmluZzogITAsCiAga2VybmluZzogMCwKICBiYXNlbGluZVNoaWZ0OiAwLAogIGZvbnRDYXBzOiAwLAogIGZvbnRCYXNlbGluZTogMCwKICB1bmRlcmxpbmU6ICExLAogIHN0cmlrZXRocm91Z2g6ICExLAogIGxpZ2F0dXJlczogITAsCiAgZExpZ2F0dXJlczogITEsCiAgYmFzZWxpbmVEaXJlY3Rpb246IDIsCiAgdHN1bWU6IDAsCiAgc3R5bGVSdW5BbGlnbm1lbnQ6IDIsCiAgbGFuZ3VhZ2U6IDAsCiAgbm9CcmVhazogITEsCiAgZmlsbENvbG9yOiB7IHI6IDAsIGc6IDAsIGI6IDAgfSwKICBzdHJva2VDb2xvcjogeyByOiAwLCBnOiAwLCBiOiAwIH0sCiAgZmlsbEZsYWc6ICEwLAogIHN0cm9rZUZsYWc6ICExLAogIGZpbGxGaXJzdDogITAsCiAgeVVuZGVybGluZTogMSwKICBvdXRsaW5lV2lkdGg6IDEsCiAgY2hhcmFjdGVyRGlyZWN0aW9uOiAwLAogIGhpbmRpTnVtYmVyczogITEsCiAga2FzaGlkYTogMSwKICBkaWFjcml0aWNQb3M6IDIKfSwgczQgPSB7CiAgaXNPbjogITEsCiAgc2hvdzogITEsCiAgc2l6ZTogMTgsCiAgbGVhZGluZzogMjIsCiAgY29sb3I6IHsgcjogMCwgZzogMCwgYjogMjU1IH0sCiAgbGVhZGluZ0ZpbGxDb2xvcjogeyByOiAwLCBnOiAwLCBiOiAyNTUgfSwKICBhbGlnbkxpbmVIZWlnaHRUb0dyaWRGbGFnczogITEKfSwgUUEgPSBbCiAgImp1c3RpZmljYXRpb24iLAogICJmaXJzdExpbmVJbmRlbnQiLAogICJzdGFydEluZGVudCIsCiAgImVuZEluZGVudCIsCiAgInNwYWNlQmVmb3JlIiwKICAic3BhY2VBZnRlciIsCiAgImF1dG9IeXBoZW5hdGUiLAogICJoeXBoZW5hdGVkV29yZFNpemUiLAogICJwcmVIeXBoZW4iLAogICJwb3N0SHlwaGVuIiwKICAiY29uc2VjdXRpdmVIeXBoZW5zIiwKICAiem9uZSIsCiAgIndvcmRTcGFjaW5nIiwKICAibGV0dGVyU3BhY2luZyIsCiAgImdseXBoU3BhY2luZyIsCiAgImF1dG9MZWFkaW5nIiwKICAibGVhZGluZ1R5cGUiLAogICJoYW5naW5nIiwKICAiYnVyYXNhZ2FyaSIsCiAgImtpbnNva3VPcmRlciIsCiAgImV2ZXJ5TGluZUNvbXBvc2VyIgpdLCBKQSA9IFsKICAiZm9udCIsCiAgImZvbnRTaXplIiwKICAiZmF1eEJvbGQiLAogICJmYXV4SXRhbGljIiwKICAiYXV0b0xlYWRpbmciLAogICJsZWFkaW5nIiwKICAiaG9yaXpvbnRhbFNjYWxlIiwKICAidmVydGljYWxTY2FsZSIsCiAgInRyYWNraW5nIiwKICAiYXV0b0tlcm5pbmciLAogICJrZXJuaW5nIiwKICAiYmFzZWxpbmVTaGlmdCIsCiAgImZvbnRDYXBzIiwKICAiZm9udEJhc2VsaW5lIiwKICAidW5kZXJsaW5lIiwKICAic3RyaWtldGhyb3VnaCIsCiAgImxpZ2F0dXJlcyIsCiAgImRMaWdhdHVyZXMiLAogICJiYXNlbGluZURpcmVjdGlvbiIsCiAgInRzdW1lIiwKICAic3R5bGVSdW5BbGlnbm1lbnQiLAogICJsYW5ndWFnZSIsCiAgIm5vQnJlYWsiLAogICJmaWxsQ29sb3IiLAogICJzdHJva2VDb2xvciIsCiAgImZpbGxGbGFnIiwKICAic3Ryb2tlRmxhZyIsCiAgImZpbGxGaXJzdCIsCiAgInlVbmRlcmxpbmUiLAogICJvdXRsaW5lV2lkdGgiLAogICJjaGFyYWN0ZXJEaXJlY3Rpb24iLAogICJoaW5kaU51bWJlcnMiLAogICJrYXNoaWRhIiwKICAiZGlhY3JpdGljUG9zIgpdLCBKMSA9IFsibm9uZSIsICJjcmlzcCIsICJzdHJvbmciLCAic21vb3RoIiwgInNoYXJwIl0sIEgxID0gWwogICJsZWZ0IiwKICAicmlnaHQiLAogICJjZW50ZXIiLAogICJqdXN0aWZ5LWxlZnQiLAogICJqdXN0aWZ5LXJpZ2h0IiwKICAianVzdGlmeS1jZW50ZXIiLAogICJqdXN0aWZ5LWFsbCIKICAvLyA2Cl07CmZ1bmN0aW9uIHoxKHIpIHsKICByZXR1cm4gci5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHIuc3Vic3RyaW5nKDEpOwp9CmZ1bmN0aW9uIGI0KHIpIHsKICB2YXIgZSA9IHIuVmFsdWVzOwogIHN3aXRjaCAoci5UeXBlKSB7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiB7IGs6IGVbMV0gKiAyNTUgfTsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIGVbMF0gPT09IDEgPyB7IHI6IGVbMV0gKiAyNTUsIGc6IGVbMl0gKiAyNTUsIGI6IGVbM10gKiAyNTUgfSA6ICgKICAgICAgICAvLyByZ2IKICAgICAgICB7IHI6IGVbMV0gKiAyNTUsIGc6IGVbMl0gKiAyNTUsIGI6IGVbM10gKiAyNTUsIGE6IGVbMF0gKiAyNTUgfQogICAgICApOwogICAgY2FzZSAyOgogICAgICByZXR1cm4geyBjOiBlWzFdICogMjU1LCBtOiBlWzJdICogMjU1LCB5OiBlWzNdICogMjU1LCBrOiBlWzRdICogMjU1IH07CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3IgdHlwZSBpbiB0ZXh0IGxheWVyIik7CiAgfQp9CmZ1bmN0aW9uIEZBKHIpIHsKICBpZiAocikgewogICAgaWYgKCJyIiBpbiByKQogICAgICByZXR1cm4geyBUeXBlOiAxLCBWYWx1ZXM6IFsiYSIgaW4gciA/IHIuYSAvIDI1NSA6IDEsIHIuciAvIDI1NSwgci5nIC8gMjU1LCByLmIgLyAyNTVdIH07CiAgICBpZiAoImMiIGluIHIpCiAgICAgIHJldHVybiB7IFR5cGU6IDIsIFZhbHVlczogWzEsIHIuYyAvIDI1NSwgci5tIC8gMjU1LCByLnkgLyAyNTUsIHIuayAvIDI1NV0gfTsKICAgIGlmICgiayIgaW4gcikKICAgICAgcmV0dXJuIHsgVHlwZTogMCwgVmFsdWVzOiBbMSwgci5rIC8gMjU1XSB9OwogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIHR5cGUgaW4gdGV4dCBsYXllciIpOwogIH0gZWxzZSByZXR1cm4geyBUeXBlOiAxLCBWYWx1ZXM6IFswLCAwLCAwLCAwXSB9Owp9CmZ1bmN0aW9uIEdpKHIsIGUpIHsKICBpZiAoIXIgfHwgIWUgfHwgci5sZW5ndGggIT09IGUubGVuZ3RoKQogICAgcmV0dXJuICExOwogIGZvciAodmFyIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykKICAgIGlmIChyW2FdICE9PSBlW2FdKQogICAgICByZXR1cm4gITE7CiAgcmV0dXJuICEwOwp9CmZ1bmN0aW9uIFhpKHIsIGUpIHsKICBpZiAoIXIgfHwgIWUpCiAgICByZXR1cm4gITE7CiAgZm9yICh2YXIgYSA9IDAsIEEgPSBPYmplY3Qua2V5cyhyKTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIGlmIChyW3RdICE9PSBlW3RdKQogICAgICByZXR1cm4gITE7CiAgfQogIGZvciAodmFyIGkgPSAwLCBuID0gT2JqZWN0LmtleXMoZSk7IGkgPCBuLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgdCA9IG5baV07CiAgICBpZiAoclt0XSAhPT0gZVt0XSkKICAgICAgcmV0dXJuICExOwogIH0KICByZXR1cm4gITA7Cn0KZnVuY3Rpb24gZDQociwgZSkgewogIGZvciAodmFyIGEgPSAwOyBhIDwgci5sZW5ndGg7IGErKykKICAgIGlmIChyW2FdLm5hbWUgPT09IGUubmFtZSkKICAgICAgcmV0dXJuIGE7CiAgcmV0dXJuIHIucHVzaChlKSwgci5sZW5ndGggLSAxOwp9CmZ1bmN0aW9uIEwxKHIsIGUsIGEpIHsKICBmb3IgKHZhciBBID0ge30sIHQgPSAwLCBpID0gZTsgdCA8IGkubGVuZ3RoOyB0KyspIHsKICAgIHZhciBuID0gaVt0XSwgZiA9IHoxKG4pOwogICAgcltmXSAhPT0gdm9pZCAwICYmIChuID09PSAianVzdGlmaWNhdGlvbiIgPyBBW25dID0gSDFbcltmXV0gOiBuID09PSAiZm9udCIgPyBBW25dID0gYVtyW2ZdXSA6IG4gPT09ICJmaWxsQ29sb3IiIHx8IG4gPT09ICJzdHJva2VDb2xvciIgPyBBW25dID0gYjQocltmXSkgOiBBW25dID0gcltmXSk7CiAgfQogIHJldHVybiBBOwp9CmZ1bmN0aW9uIEsxKHIsIGUsIGEpIHsKICBmb3IgKHZhciBBLCB0ID0ge30sIGkgPSAwLCBuID0gZTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXSwgdSA9IHoxKGYpOwogICAgcltmXSAhPT0gdm9pZCAwICYmIChmID09PSAianVzdGlmaWNhdGlvbiIgPyB0W3VdID0gSDEuaW5kZXhPZigoQSA9IHJbZl0pICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAibGVmdCIpIDogZiA9PT0gImZvbnQiID8gdFt1XSA9IGQ0KGEsIHJbZl0pIDogZiA9PT0gImZpbGxDb2xvciIgfHwgZiA9PT0gInN0cm9rZUNvbG9yIiA/IHRbdV0gPSBGQShyW2ZdKSA6IHRbdV0gPSByW2ZdKTsKICB9CiAgcmV0dXJuIHQ7Cn0KZnVuY3Rpb24gaDQociwgZSkgewogIHJldHVybiBMMShyLCBRQSwgZSk7Cn0KZnVuY3Rpb24gdjQociwgZSkgewogIHJldHVybiBMMShyLCBKQSwgZSk7Cn0KZnVuY3Rpb24gb2UociwgZSkgewogIHJldHVybiBLMShyLCBRQSwgZSk7Cn0KZnVuY3Rpb24gaUEociwgZSkgewogIHJldHVybiBLMShyLCBKQSwgZSk7Cn0KZnVuY3Rpb24gUmkociwgZSwgYSkgewogIGlmIChlLmxlbmd0aCkgewogICAgZm9yICh2YXIgQSA9IGZ1bmN0aW9uKGYpIHsKICAgICAgdmFyIHUgPSBlWzBdLnN0eWxlW2ZdOwogICAgICBpZiAodSAhPT0gdm9pZCAwKSB7CiAgICAgICAgdmFyIG8gPSAhMTsKICAgICAgICBBcnJheS5pc0FycmF5KHUpID8gbyA9IGUuZXZlcnkoZnVuY3Rpb24oaykgewogICAgICAgICAgcmV0dXJuIEdpKGsuc3R5bGVbZl0sIHUpOwogICAgICAgIH0pIDogdHlwZW9mIHUgPT0gIm9iamVjdCIgPyBvID0gZS5ldmVyeShmdW5jdGlvbihrKSB7CiAgICAgICAgICByZXR1cm4gWGkoay5zdHlsZVtmXSwgdSk7CiAgICAgICAgfSkgOiBvID0gZS5ldmVyeShmdW5jdGlvbihrKSB7CiAgICAgICAgICByZXR1cm4gay5zdHlsZVtmXSA9PT0gdTsKICAgICAgICB9KSwgbyAmJiAocltmXSA9IHUpOwogICAgICB9CiAgICAgIHZhciBsID0gcltmXTsKICAgICAgaWYgKGwgIT09IHZvaWQgMCkKICAgICAgICBmb3IgKHZhciBzID0gMCwgYyA9IGU7IHMgPCBjLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICB2YXIgZCA9IGNbc10sIHYgPSAhMTsKICAgICAgICAgIEFycmF5LmlzQXJyYXkodSkgPyB2ID0gR2koZC5zdHlsZVtmXSwgdSkgOiB0eXBlb2YgdSA9PSAib2JqZWN0IiA/IHYgPSBYaShkLnN0eWxlW2ZdLCB1KSA6IHYgPSBkLnN0eWxlW2ZdID09PSB1LCB2ICYmIGRlbGV0ZSBkLnN0eWxlW2ZdOwogICAgICAgIH0KICAgIH0sIHQgPSAwLCBpID0gYTsgdCA8IGkubGVuZ3RoOyB0KyspIHsKICAgICAgdmFyIG4gPSBpW3RdOwogICAgICBBKG4pOwogICAgfQogICAgZS5ldmVyeShmdW5jdGlvbihmKSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmLnN0eWxlKS5sZW5ndGggPT09IDA7CiAgICB9KSAmJiAoZS5sZW5ndGggPSAwKTsKICB9Cn0KZnVuY3Rpb24gazQocikgewogIGZvciAodmFyIGUsIGEsIEEsIHQsIGksIG4sIGYgPSByLkVuZ2luZURpY3QsIHUgPSByLlJlc291cmNlRGljdCwgbyA9IHUuRm9udFNldC5tYXAoZnVuY3Rpb24oVykgewogICAgcmV0dXJuIHsKICAgICAgbmFtZTogVy5OYW1lLAogICAgICBzY3JpcHQ6IFcuU2NyaXB0LAogICAgICB0eXBlOiBXLkZvbnRUeXBlLAogICAgICBzeW50aGV0aWM6IFcuU3ludGhldGljCiAgICB9OwogIH0pLCBsID0gZi5FZGl0b3IuVGV4dC5yZXBsYWNlKC9cci9nLCBgCmApLCBzID0gMDsgL1xuJC8udGVzdChsKTsgKQogICAgbCA9IGwuc3Vic3RyaW5nKDAsIGwubGVuZ3RoIC0gMSksIHMrKzsKICB2YXIgYyA9IHsKICAgIHRleHQ6IGwsCiAgICBhbnRpQWxpYXM6IChlID0gSjFbZi5BbnRpQWxpYXNdKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogInNtb290aCIsCiAgICB1c2VGcmFjdGlvbmFsR2x5cGhXaWR0aHM6ICEhZi5Vc2VGcmFjdGlvbmFsR2x5cGhXaWR0aHMsCiAgICBzdXBlcnNjcmlwdFNpemU6IHUuU3VwZXJzY3JpcHRTaXplLAogICAgc3VwZXJzY3JpcHRQb3NpdGlvbjogdS5TdXBlcnNjcmlwdFBvc2l0aW9uLAogICAgc3Vic2NyaXB0U2l6ZTogdS5TdWJzY3JpcHRTaXplLAogICAgc3Vic2NyaXB0UG9zaXRpb246IHUuU3Vic2NyaXB0UG9zaXRpb24sCiAgICBzbWFsbENhcFNpemU6IHUuU21hbGxDYXBTaXplCiAgfSwgZCA9IChuID0gKGkgPSAodCA9IChBID0gKGEgPSBmLlJlbmRlcmVkKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLlNoYXBlcykgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5DaGlsZHJlbikgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdFswXSkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaS5Db29raWUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uUGhvdG9zaG9wOwogIGQgJiYgKGMuc2hhcGVUeXBlID0gZC5TaGFwZVR5cGUgPT09IDEgPyAiYm94IiA6ICJwb2ludCIsIGQuUG9pbnRCYXNlICYmIChjLnBvaW50QmFzZSA9IGQuUG9pbnRCYXNlKSwgZC5Cb3hCb3VuZHMgJiYgKGMuYm94Qm91bmRzID0gZC5Cb3hCb3VuZHMpKTsKICB2YXIgdiA9IGYuUGFyYWdyYXBoUnVuOwogIGMucGFyYWdyYXBoU3R5bGUgPSB7fSwgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMgPSBbXTsKICBmb3IgKHZhciBrID0gMDsgayA8IHYuUnVuQXJyYXkubGVuZ3RoOyBrKyspIHsKICAgIHZhciBFID0gdi5SdW5BcnJheVtrXSwgZyA9IHYuUnVuTGVuZ3RoQXJyYXlba10sIHcgPSBoNChFLlBhcmFncmFwaFNoZWV0LlByb3BlcnRpZXMsIG8pOwogICAgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMucHVzaCh7CiAgICAgIGxlbmd0aDogZywKICAgICAgc3R5bGU6IHcKICAgICAgLyosIGFkanVzdG1lbnRzKi8KICAgIH0pOwogIH0KICBmb3IgKHZhciBCID0gczsgYy5wYXJhZ3JhcGhTdHlsZVJ1bnMubGVuZ3RoICYmIEIgPiAwOyBCLS0pCiAgICAtLWMucGFyYWdyYXBoU3R5bGVSdW5zW2MucGFyYWdyYXBoU3R5bGVSdW5zLmxlbmd0aCAtIDFdLmxlbmd0aCA9PT0gMCAmJiBjLnBhcmFncmFwaFN0eWxlUnVucy5wb3AoKTsKICBSaShjLnBhcmFncmFwaFN0eWxlLCBjLnBhcmFncmFwaFN0eWxlUnVucywgUUEpLCBjLnBhcmFncmFwaFN0eWxlUnVucy5sZW5ndGggfHwgZGVsZXRlIGMucGFyYWdyYXBoU3R5bGVSdW5zOwogIHZhciBtID0gZi5TdHlsZVJ1bjsKICBjLnN0eWxlID0ge30sIGMuc3R5bGVSdW5zID0gW107CiAgZm9yICh2YXIgayA9IDA7IGsgPCBtLlJ1bkFycmF5Lmxlbmd0aDsgaysrKSB7CiAgICB2YXIgcCA9IG0uUnVuTGVuZ3RoQXJyYXlba10sIHcgPSB2NChtLlJ1bkFycmF5W2tdLlN0eWxlU2hlZXQuU3R5bGVTaGVldERhdGEsIG8pOwogICAgdy5mb250IHx8ICh3LmZvbnQgPSBvWzBdKSwgYy5zdHlsZVJ1bnMucHVzaCh7IGxlbmd0aDogcCwgc3R5bGU6IHcgfSk7CiAgfQogIGZvciAodmFyIEIgPSBzOyBjLnN0eWxlUnVucy5sZW5ndGggJiYgQiA+IDA7IEItLSkKICAgIC0tYy5zdHlsZVJ1bnNbYy5zdHlsZVJ1bnMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSAwICYmIGMuc3R5bGVSdW5zLnBvcCgpOwogIHJldHVybiBSaShjLnN0eWxlLCBjLnN0eWxlUnVucywgSkEpLCBjLnN0eWxlUnVucy5sZW5ndGggfHwgZGVsZXRlIGMuc3R5bGVSdW5zLCBjOwp9CmZ1bmN0aW9uIGc0KHIpIHsKICB2YXIgZSwgYSwgQSwgdCwgaSwgbiwgZiwgdSwgbywgbCwgcywgYywgZCA9ICIiLmNvbmNhdCgoci50ZXh0IHx8ICIiKS5yZXBsYWNlKC9ccj9cbi9nLCAiXHIiKSwgIlxyIiksIHYgPSBbCiAgICB7IG5hbWU6ICJBZG9iZUludmlzRm9udCIsIHNjcmlwdDogMCwgdHlwZTogMCwgc3ludGhldGljOiAwIH0KICBdLCBrID0gKChlID0gci5zdHlsZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5mb250KSB8fCAoKEEgPSAoYSA9IHIuc3R5bGVSdW5zKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLmZpbmQoZnVuY3Rpb24oVikgewogICAgcmV0dXJuIFYuc3R5bGUuZm9udDsKICB9KSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5zdHlsZS5mb250KSB8fCBRMSwgRSA9IFtdLCBnID0gW10sIHcgPSByLnBhcmFncmFwaFN0eWxlUnVuczsKICBpZiAodyAmJiB3Lmxlbmd0aCkgewogICAgZm9yICh2YXIgQiA9IGQubGVuZ3RoLCBtID0gMCwgcCA9IHc7IG0gPCBwLmxlbmd0aDsgbSsrKSB7CiAgICAgIHZhciBXID0gcFttXSwgQyA9IE1hdGgubWluKFcubGVuZ3RoLCBCKTsKICAgICAgQiAtPSBDLCBDICYmIChCID09PSAxICYmIFcgPT09IHdbdy5sZW5ndGggLSAxXSAmJiAoQysrLCBCLS0pLCBnLnB1c2goQyksIEUucHVzaCh7CiAgICAgICAgUGFyYWdyYXBoU2hlZXQ6IHsKICAgICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgICAgUHJvcGVydGllczogb2UoSDAoSDAoSDAoe30sIGZlKSwgci5wYXJhZ3JhcGhTdHlsZSksIFcuc3R5bGUpLCB2KQogICAgICAgIH0sCiAgICAgICAgQWRqdXN0bWVudHM6IHsgQXhpczogWzEsIDAsIDFdLCBYWTogWzAsIDBdIH0KICAgICAgfSkpOwogICAgfQogICAgQiAmJiAoZy5wdXNoKEIpLCBFLnB1c2goewogICAgICBQYXJhZ3JhcGhTaGVldDogewogICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgIFByb3BlcnRpZXM6IG9lKEgwKEgwKHt9LCBmZSksIHIucGFyYWdyYXBoU3R5bGUpLCB2KQogICAgICB9LAogICAgICBBZGp1c3RtZW50czogeyBBeGlzOiBbMSwgMCwgMV0sIFhZOiBbMCwgMF0gfQogICAgfSkpOwogIH0gZWxzZQogICAgZm9yICh2YXIgXyA9IDAsIE4gPSAwOyBfIDwgZC5sZW5ndGg7IF8rKykKICAgICAgZC5jaGFyQ29kZUF0KF8pID09PSAxMyAmJiAoZy5wdXNoKF8gLSBOICsgMSksIEUucHVzaCh7CiAgICAgICAgUGFyYWdyYXBoU2hlZXQ6IHsKICAgICAgICAgIERlZmF1bHRTdHlsZVNoZWV0OiAwLAogICAgICAgICAgUHJvcGVydGllczogb2UoSDAoSDAoe30sIGZlKSwgci5wYXJhZ3JhcGhTdHlsZSksIHYpCiAgICAgICAgfSwKICAgICAgICBBZGp1c3RtZW50czogeyBBeGlzOiBbMSwgMCwgMV0sIFhZOiBbMCwgMF0gfQogICAgICB9KSwgTiA9IF8gKyAxKTsKICBmb3IgKHZhciBEID0gaUEoSDAoSDAoe30sIGM0KSwgeyBmb250OiBrIH0pLCB2KSwgWSA9IHIuc3R5bGVSdW5zIHx8IFt7IGxlbmd0aDogZC5sZW5ndGgsIHN0eWxlOiByLnN0eWxlIHx8IHt9IH1dLCBmMCA9IFtdLCBHID0gW10sIEogPSBkLmxlbmd0aCwgSyA9IDAsIFggPSBZOyBLIDwgWC5sZW5ndGg7IEsrKykgewogICAgdmFyIGwwID0gWFtLXSwgQyA9IE1hdGgubWluKGwwLmxlbmd0aCwgSik7CiAgICBKIC09IEMsIEMgJiYgKEogPT09IDEgJiYgbDAgPT09IFlbWS5sZW5ndGggLSAxXSAmJiAoQysrLCBKLS0pLCBHLnB1c2goQyksIGYwLnB1c2goewogICAgICBTdHlsZVNoZWV0OiB7CiAgICAgICAgU3R5bGVTaGVldERhdGE6IGlBKEgwKEgwKHsga2VybmluZzogMCwgYXV0b0tlcm5pbmc6ICEwLCBmaWxsQ29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0sIHIuc3R5bGUpLCBsMC5zdHlsZSksIHYpCiAgICAgIH0KICAgIH0pKTsKICB9CiAgSiAmJiBZLmxlbmd0aCAmJiAoRy5wdXNoKEopLCBmMC5wdXNoKHsKICAgIFN0eWxlU2hlZXQ6IHsKICAgICAgU3R5bGVTaGVldERhdGE6IGlBKEgwKHsga2VybmluZzogMCwgYXV0b0tlcm5pbmc6ICEwLCBmaWxsQ29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0sIHIuc3R5bGUpLCB2KQogICAgfQogIH0pKTsKICB2YXIgYiA9IEgwKEgwKHt9LCBzNCksIHIuZ3JpZEluZm8pLCBaID0gci5vcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiA/IDIgOiAwLCB5ID0gci5vcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiA/IDEgOiAwLCBGID0gci5zaGFwZVR5cGUgPT09ICJib3giID8gMSA6IDAsIFIgPSB7CiAgICBTaGFwZVR5cGU6IEYKICB9OwogIEYgPT09IDAgPyBSLlBvaW50QmFzZSA9IHIucG9pbnRCYXNlIHx8IFswLCAwXSA6IFIuQm94Qm91bmRzID0gci5ib3hCb3VuZHMgfHwgWzAsIDAsIDAsIDBdLCBSLkJhc2UgPSB7CiAgICBTaGFwZVR5cGU6IEYsCiAgICBUcmFuc2Zvcm1Qb2ludDA6IFsxLCAwXSwKICAgIFRyYW5zZm9ybVBvaW50MTogWzAsIDFdLAogICAgVHJhbnNmb3JtUG9pbnQyOiBbMCwgMF0KICB9OwogIHZhciBNID0gewogICAgS2luc29rdVNldDogWwogICAgICB7CiAgICAgICAgTmFtZTogIlBob3Rvc2hvcEtpbnNva3VIYXJkIiwKICAgICAgICBOb1N0YXJ0OiAi44CB44CC77yM77yO44O777ya77yb77yf77yB44O84oCV4oCZ4oCd77yJ44CV77y9772d44CJ44CL44CN44CP44CR44O944O+44Kd44Ke44CF44GB44GD44GF44GH44GJ44Gj44KD44KF44KH44KO44Kh44Kj44Kl44Kn44Kp44OD44Oj44Ol44On44Ou44O144O244Kb44KcPyEpXX0sLjo74oSD4oSJwqLvvIXigLAiLAogICAgICAgIE5vRW5kOiAi4oCY4oCc77yI44CU77y7772b44CI44CK44CM44CO44CQKFt777+l77yEwqPvvKDCp+OAku+8gyIsCiAgICAgICAgS2VlcDogIuKAleKApSIsCiAgICAgICAgSGFuZ2luZzogIuOAgeOAgi4sIgogICAgICB9LAogICAgICB7CiAgICAgICAgTmFtZTogIlBob3Rvc2hvcEtpbnNva3VTb2Z0IiwKICAgICAgICBOb1N0YXJ0OiAi44CB44CC77yM77yO44O777ya77yb77yf77yB4oCZ4oCd77yJ44CV77y9772d44CJ44CL44CN44CP44CR44O944O+44Kd44Ke44CFIiwKICAgICAgICBOb0VuZDogIuKAmOKAnO+8iOOAlO+8u++9m+OAiOOAiuOAjOOAjuOAkCIsCiAgICAgICAgS2VlcDogIuKAleKApSIsCiAgICAgICAgSGFuZ2luZzogIuOAgeOAgi4sIgogICAgICB9CiAgICBdLAogICAgTW9qaUt1bWlTZXQ6IFsKICAgICAgeyBJbnRlcm5hbE5hbWU6ICJQaG90b3Nob3A2TW9qaUt1bWlTZXQxIiB9LAogICAgICB7IEludGVybmFsTmFtZTogIlBob3Rvc2hvcDZNb2ppS3VtaVNldDIiIH0sCiAgICAgIHsgSW50ZXJuYWxOYW1lOiAiUGhvdG9zaG9wNk1vamlLdW1pU2V0MyIgfSwKICAgICAgeyBJbnRlcm5hbE5hbWU6ICJQaG90b3Nob3A2TW9qaUt1bWlTZXQ0IiB9CiAgICBdLAogICAgVGhlTm9ybWFsU3R5bGVTaGVldDogMCwKICAgIFRoZU5vcm1hbFBhcmFncmFwaFNoZWV0OiAwLAogICAgUGFyYWdyYXBoU2hlZXRTZXQ6IFsKICAgICAgewogICAgICAgIE5hbWU6ICJOb3JtYWwgUkdCIiwKICAgICAgICBEZWZhdWx0U3R5bGVTaGVldDogMCwKICAgICAgICBQcm9wZXJ0aWVzOiBvZShIMChIMCh7fSwgZmUpLCByLnBhcmFncmFwaFN0eWxlKSwgdikKICAgICAgfQogICAgXSwKICAgIFN0eWxlU2hlZXRTZXQ6IFsKICAgICAgewogICAgICAgIE5hbWU6ICJOb3JtYWwgUkdCIiwKICAgICAgICBTdHlsZVNoZWV0RGF0YTogRAogICAgICB9CiAgICBdLAogICAgRm9udFNldDogdi5tYXAoZnVuY3Rpb24oVikgewogICAgICByZXR1cm4gewogICAgICAgIE5hbWU6IFYubmFtZSwKICAgICAgICBTY3JpcHQ6IFYuc2NyaXB0IHx8IDAsCiAgICAgICAgRm9udFR5cGU6IFYudHlwZSB8fCAwLAogICAgICAgIFN5bnRoZXRpYzogVi5zeW50aGV0aWMgfHwgMAogICAgICB9OwogICAgfSksCiAgICBTdXBlcnNjcmlwdFNpemU6ICh0ID0gci5zdXBlcnNjcmlwdFNpemUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiAwLjU4MywKICAgIFN1cGVyc2NyaXB0UG9zaXRpb246IChpID0gci5zdXBlcnNjcmlwdFBvc2l0aW9uKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogMC4zMzMsCiAgICBTdWJzY3JpcHRTaXplOiAobiA9IHIuc3Vic2NyaXB0U2l6ZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IDAuNTgzLAogICAgU3Vic2NyaXB0UG9zaXRpb246IChmID0gci5zdWJzY3JpcHRQb3NpdGlvbikgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IDAuMzMzLAogICAgU21hbGxDYXBTaXplOiAodSA9IHIuc21hbGxDYXBTaXplKSAhPT0gbnVsbCAmJiB1ICE9PSB2b2lkIDAgPyB1IDogMC43CiAgfSwgSSA9IHsKICAgIEVuZ2luZURpY3Q6IHsKICAgICAgRWRpdG9yOiB7IFRleHQ6IGQgfSwKICAgICAgUGFyYWdyYXBoUnVuOiB7CiAgICAgICAgRGVmYXVsdFJ1bkRhdGE6IHsKICAgICAgICAgIFBhcmFncmFwaFNoZWV0OiB7IERlZmF1bHRTdHlsZVNoZWV0OiAwLCBQcm9wZXJ0aWVzOiB7fSB9LAogICAgICAgICAgQWRqdXN0bWVudHM6IHsgQXhpczogWzEsIDAsIDFdLCBYWTogWzAsIDBdIH0KICAgICAgICB9LAogICAgICAgIFJ1bkFycmF5OiBFLAogICAgICAgIFJ1bkxlbmd0aEFycmF5OiBnLAogICAgICAgIElzSm9pbmFibGU6IDEKICAgICAgfSwKICAgICAgU3R5bGVSdW46IHsKICAgICAgICBEZWZhdWx0UnVuRGF0YTogeyBTdHlsZVNoZWV0OiB7IFN0eWxlU2hlZXREYXRhOiB7fSB9IH0sCiAgICAgICAgUnVuQXJyYXk6IGYwLAogICAgICAgIFJ1bkxlbmd0aEFycmF5OiBHLAogICAgICAgIElzSm9pbmFibGU6IDIKICAgICAgfSwKICAgICAgR3JpZEluZm86IHsKICAgICAgICBHcmlkSXNPbjogISFiLmlzT24sCiAgICAgICAgU2hvd0dyaWQ6ICEhYi5zaG93LAogICAgICAgIEdyaWRTaXplOiAobyA9IGIuc2l6ZSkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IDE4LAogICAgICAgIEdyaWRMZWFkaW5nOiAobCA9IGIubGVhZGluZykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IDIyLAogICAgICAgIEdyaWRDb2xvcjogRkEoYi5jb2xvciksCiAgICAgICAgR3JpZExlYWRpbmdGaWxsQ29sb3I6IEZBKGIuY29sb3IpLAogICAgICAgIEFsaWduTGluZUhlaWdodFRvR3JpZEZsYWdzOiAhIWIuYWxpZ25MaW5lSGVpZ2h0VG9HcmlkRmxhZ3MKICAgICAgfSwKICAgICAgQW50aUFsaWFzOiBKMS5pbmRleE9mKChzID0gci5hbnRpQWxpYXMpICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiAic2hhcnAiKSwKICAgICAgVXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzOiAoYyA9IHIudXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogITAsCiAgICAgIFJlbmRlcmVkOiB7CiAgICAgICAgVmVyc2lvbjogMSwKICAgICAgICBTaGFwZXM6IHsKICAgICAgICAgIFdyaXRpbmdEaXJlY3Rpb246IFosCiAgICAgICAgICBDaGlsZHJlbjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgU2hhcGVUeXBlOiBGLAogICAgICAgICAgICAgIFByb2Nlc3Npb246IHksCiAgICAgICAgICAgICAgTGluZXM6IHsgV3JpdGluZ0RpcmVjdGlvbjogWiwgQ2hpbGRyZW46IFtdIH0sCiAgICAgICAgICAgICAgQ29va2llOiB7IFBob3Rvc2hvcDogUiB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBSZXNvdXJjZURpY3Q6IEgwKHt9LCBNKSwKICAgIERvY3VtZW50UmVzb3VyY2VzOiBIMCh7fSwgTSkKICB9OwogIHJldHVybiBJOwp9CnZhciBuQSA9IHsKICAwOiB7CiAgICB1cHJvb3Q6ICEwLAogICAgY2hpbGRyZW46IHsKICAgICAgMDogeyBuYW1lOiAiVHlwZSIgfSwKICAgICAgMTogeyBuYW1lOiAiVmFsdWVzIiB9CiAgICB9CiAgfQp9LCBIQSA9IHsKICAwOiB7IG5hbWU6ICJGb250IiB9LAogIDE6IHsgbmFtZTogIkZvbnRTaXplIiB9LAogIDI6IHsgbmFtZTogIkZhdXhCb2xkIiB9LAogIDM6IHsgbmFtZTogIkZhdXhJdGFsaWMiIH0sCiAgNDogeyBuYW1lOiAiQXV0b0xlYWRpbmciIH0sCiAgNTogeyBuYW1lOiAiTGVhZGluZyIgfSwKICA2OiB7IG5hbWU6ICJIb3Jpem9udGFsU2NhbGUiIH0sCiAgNzogeyBuYW1lOiAiVmVydGljYWxTY2FsZSIgfSwKICA4OiB7IG5hbWU6ICJUcmFja2luZyIgfSwKICA5OiB7IG5hbWU6ICJCYXNlbGluZVNoaWZ0IiB9LAogIC8vICcxMCc6ID8/PwogIDExOiB7IG5hbWU6ICJLZXJuaW5nPyIgfSwKICAxMjogeyBuYW1lOiAiRm9udENhcHMiIH0sCiAgMTM6IHsgbmFtZTogIkZvbnRCYXNlbGluZSIgfSwKICAxNTogeyBuYW1lOiAiU3RyaWtldGhyb3VnaD8iIH0sCiAgMTY6IHsgbmFtZTogIlVuZGVybGluZT8iIH0sCiAgMTg6IHsgbmFtZTogIkxpZ2F0dXJlcyIgfSwKICAxOTogeyBuYW1lOiAiRExpZ2F0dXJlcyIgfSwKICAvLyAnMjAnOiA/Pz8KICAvLyAnMjEnOiA/Pz8KICAvLyAnMjInOiA/Pz8KICAyMzogeyBuYW1lOiAiRnJhY3Rpb25zIiB9LAogIDI0OiB7IG5hbWU6ICJPcmRpbmFscyIgfSwKICAvLyAnMjUnOiA/Pz8KICAvLyAnMjYnOiA/Pz8KICAvLyAnMjcnOiA/Pz8KICAyODogeyBuYW1lOiAiU3R5bGlzdGljQWx0ZXJuYXRlcyIgfSwKICAvLyAnMjknOiA/Pz8KICAzMDogeyBuYW1lOiAiT2xkU3R5bGU/IiB9LAogIDM1OiB7IG5hbWU6ICJCYXNlbGluZURpcmVjdGlvbiIgfSwKICAzODogeyBuYW1lOiAiTGFuZ3VhZ2UiIH0sCiAgNTI6IHsgbmFtZTogIk5vQnJlYWsiIH0sCiAgNTM6IHsgbmFtZTogIkZpbGxDb2xvciIsIGNoaWxkcmVuOiBuQSB9LAogIDU0OiB7IG5hbWU6ICJTdHJva2VDb2xvciIsIGNoaWxkcmVuOiBuQSB9LAogIDU1OiB7IGNoaWxkcmVuOiB7IDk5OiB7IHVwcm9vdDogITAgfSB9IH0sCiAgLy8gJzY4JzogPz8/CiAgLy8gJzcwJzogPz8/CiAgLy8gJzcxJzogPz8/CiAgLy8gJzcyJzogPz8/CiAgLy8gJzczJzogPz8/CiAgNzk6IHsgY2hpbGRyZW46IG5BIH0KICAvLyAnODUnOiA/Pz8KICAvLyAnODcnOiA/Pz8KICAvLyAnODgnOiA/Pz8KfSwgZkEgPSB7CiAgMDogeyBuYW1lOiAiSnVzdGlmaWNhdGlvbiIgfSwKICAxOiB7IG5hbWU6ICJGaXJzdExpbmVJbmRlbnQiIH0sCiAgMjogeyBuYW1lOiAiU3RhcnRJbmRlbnQiIH0sCiAgMzogeyBuYW1lOiAiRW5kSW5kZW50IiB9LAogIDQ6IHsgbmFtZTogIlNwYWNlQmVmb3JlIiB9LAogIDU6IHsgbmFtZTogIlNwYWNlQWZ0ZXIiIH0sCiAgNzogeyBuYW1lOiAiQXV0b0xlYWRpbmciIH0sCiAgOTogeyBuYW1lOiAiQXV0b0h5cGhlbmF0ZSIgfSwKICAxMDogeyBuYW1lOiAiSHlwaGVuYXRlZFdvcmRTaXplIiB9LAogIDExOiB7IG5hbWU6ICJQcmVIeXBoZW4iIH0sCiAgMTI6IHsgbmFtZTogIlBvc3RIeXBoZW4iIH0sCiAgMTM6IHsgbmFtZTogIkNvbnNlY3V0aXZlSHlwaGVucz8iIH0sCiAgMTQ6IHsgbmFtZTogIlpvbmUiIH0sCiAgMTU6IHsgbmFtZTogIkh5cGVuYXRlQ2FwaXRhbGl6ZWRXb3JkcyIgfSwKICAxNzogeyBuYW1lOiAiV29yZFNwYWNpbmciIH0sCiAgMTg6IHsgbmFtZTogIkxldHRlclNwYWNpbmciIH0sCiAgMTk6IHsgbmFtZTogIkdseXBoU3BhY2luZyIgfSwKICAzMjogeyBuYW1lOiAiU3R5bGVTaGVldCIsIGNoaWxkcmVuOiBIQSB9Cn0sIFZpID0gewogIG5hbWU6ICJTdHlsZVNoZWV0RGF0YSIsCiAgY2hpbGRyZW46IEhBCn0sIG00ID0gewogIDA6IHsKICAgIG5hbWU6ICJSZXNvdXJjZURpY3QiLAogICAgY2hpbGRyZW46IHsKICAgICAgMTogewogICAgICAgIG5hbWU6ICJGb250U2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIkZvbnRUeXBlIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAyOiB7CiAgICAgICAgbmFtZTogIjIiLAogICAgICAgIGNoaWxkcmVuOiB7fQogICAgICB9LAogICAgICAzOiB7CiAgICAgICAgbmFtZTogIk1vamlLdW1pU2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJJbnRlcm5hbE5hbWUiIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDQ6IHsKICAgICAgICBuYW1lOiAiS2luc29rdVNldCIsCiAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgIDA6IHsKICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogIk5vU3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICJOb0VuZCIgfSwKICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIktlZXAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAzOiB7IG5hbWU6ICJIYW5naW5nIiB9LAogICAgICAgICAgICAgICAgICAgICAgNDogeyBuYW1lOiAiTmFtZSIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgNTogewogICAgICAgIG5hbWU6ICJTdHlsZVNoZWV0U2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIHVwcm9vdDogITAsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJOYW1lIiB9LAogICAgICAgICAgICAgICAgICA2OiBWaQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgNjogewogICAgICAgIG5hbWU6ICJQYXJhZ3JhcGhTaGVldFNldCIsCiAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgIDA6IHsKICAgICAgICAgICAgdXByb290OiAhMCwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiTmFtZSIgfSwKICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJQcm9wZXJ0aWVzIiwKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZkEKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiRGVmYXVsdFN0eWxlU2hlZXQiIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDg6IHsKICAgICAgICBuYW1lOiAiVGV4dEZyYW1lU2V0IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgIG5hbWU6ICJwYXRoIiwKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogIm5hbWUiIH0sCiAgICAgICAgICAgICAgICAgIDE6IHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAiYmV6aWVyQ3VydmUiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJjb250cm9sUG9pbnRzIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAyOiB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJ0eXBlIiB9LAogICAgICAgICAgICAgICAgICAgICAgMTogeyBuYW1lOiAib3JpZW50YXRpb24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAyOiB7IG5hbWU6ICJmcmFtZU1hdHJpeCIgfSwKICAgICAgICAgICAgICAgICAgICAgIDQ6IHsgbmFtZTogIjQiIH0sCiAgICAgICAgICAgICAgICAgICAgICA2OiB7IG5hbWU6ICJ0ZXh0UmFuZ2UiIH0sCiAgICAgICAgICAgICAgICAgICAgICA3OiB7IG5hbWU6ICJyb3dHdXR0ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICA4OiB7IG5hbWU6ICJjb2x1bW5HdXR0ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICA5OiB7IG5hbWU6ICI5IiB9LAogICAgICAgICAgICAgICAgICAgICAgMTA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImJhc2VsaW5lQWxpZ25tZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJmbGFnIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDE6IHsgbmFtZTogIm1pbiIgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgMTE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInBhdGhEYXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICIxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDA6IHsgbmFtZTogInJldmVyc2VkIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDI6IHsgbmFtZTogIjIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgMzogeyBuYW1lOiAiMyIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICA0OiB7IG5hbWU6ICJzcGFjaW5nIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDU6IHsgbmFtZTogIjUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiNiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICA3OiB7IG5hbWU6ICI3IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiB7IG5hbWU6ICIxOCIgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgMTI6IHsgbmFtZTogIjEyIiB9LAogICAgICAgICAgICAgICAgICAgICAgMTM6IHsgbmFtZTogIjEzIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAzOiB7IG5hbWU6ICIzIiB9LAogICAgICAgICAgICAgICAgICA5NzogeyBuYW1lOiAidXVpZCIgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgOTogewogICAgICAgIG5hbWU6ICJQcmVkZWZpbmVkIiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICBjaGlsZHJlbjogeyAwOiB7IHVwcm9vdDogITAgfSB9CiAgICAgICAgICB9LAogICAgICAgICAgMTogewogICAgICAgICAgICBjaGlsZHJlbjogeyAwOiB7IHVwcm9vdDogITAgfSB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAxOiB7CiAgICBuYW1lOiAiRW5naW5lRGljdCIsCiAgICBjaGlsZHJlbjogewogICAgICAwOiB7CiAgICAgICAgbmFtZTogIjAiLAogICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAvLyAwOiA/Pz8KICAgICAgICAgIC8vIDE6ID8/PwogICAgICAgICAgLy8gMjogPz8/CiAgICAgICAgICAzOiB7IG5hbWU6ICJTdXBlcnNjcmlwdFNpemUiIH0sCiAgICAgICAgICA0OiB7IG5hbWU6ICJTdXBlcnNjcmlwdFBvc2l0aW9uIiB9LAogICAgICAgICAgNTogeyBuYW1lOiAiU3Vic2NyaXB0U2l6ZSIgfSwKICAgICAgICAgIDY6IHsgbmFtZTogIlN1YnNjcmlwdFBvc2l0aW9uIiB9LAogICAgICAgICAgNzogeyBuYW1lOiAiU21hbGxDYXBTaXplIiB9LAogICAgICAgICAgODogeyBuYW1lOiAiVXNlRnJhY3Rpb25hbEdseXBoV2lkdGhzIiB9LAogICAgICAgICAgMTU6IHsgY2hpbGRyZW46IHsgMDogeyB1cHJvb3Q6ICEwIH0gfSB9CiAgICAgICAgICAvLyAxNjogPz8/CiAgICAgICAgICAvLyAxNzogPz8/CiAgICAgICAgfQogICAgICB9LAogICAgICAxOiB7CiAgICAgICAgbmFtZTogIkVkaXRvcnM/IiwKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgMDogewogICAgICAgICAgICBuYW1lOiAiRWRpdG9yIiwKICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAwOiB7IG5hbWU6ICJUZXh0IiB9LAogICAgICAgICAgICAgIDU6IHsKICAgICAgICAgICAgICAgIG5hbWU6ICJQYXJhZ3JhcGhSdW4iLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgMDogewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJSdW5BcnJheSIsCiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIlBhcmFncmFwaFNoZWV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogeyBuYW1lOiAiMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZkEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogeyBuYW1lOiAiNiIgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIDE6IHsgbmFtZTogIlJ1bkxlbmd0aCIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgNjogewogICAgICAgICAgICAgICAgbmFtZTogIlN0eWxlUnVuIiwKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgIDA6IHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAiUnVuQXJyYXkiLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7CiAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJTdHlsZVNoZWV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHJvb3Q6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogVmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAxOiB7IG5hbWU6ICJSdW5MZW5ndGgiIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAxOiB7CiAgICAgICAgICAgIG5hbWU6ICJGb250VmVjdG9yRGF0YSA/Pz8iCiAgICAgICAgICAgIC8vIGNoaWxkcmVuOiB7CiAgICAgICAgICAgIC8vIAknMCc6IHt9LAogICAgICAgICAgICAvLyAJJzInOiB7CiAgICAgICAgICAgIC8vIAkJLy8gJzUnCiAgICAgICAgICAgIC8vIAkJLy8gJzYnCiAgICAgICAgICAgIC8vIAl9LAogICAgICAgICAgICAvLyB9CiAgICAgICAgICAgIC8vICAgICAiMSI6IFsgLy8gdGhpcyBpcyBwcm9iYWJseSBib3VuZGluZyBib3g/IHRoZXJlIHNlZW0gdG8gYmUgbWFueSBvZiB0aGVtIG5lc3RlZAogICAgICAgICAgICAvLyAgICAgICAwLAogICAgICAgICAgICAvLyAgICAgICAwLAogICAgICAgICAgICAvLyAgICAgICA5OTksCiAgICAgICAgICAgIC8vICAgICAgIDE3Ni4zMDAxNAogICAgICAgICAgICAvLyAgICAgXSwKICAgICAgICAgICAgLy8gdmFyaW91cyB0eXBlczogL1BDLCAvRiwgL1IsIC9MLCAvUywgL0cKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIDI6IHsKICAgICAgICBuYW1lOiAiU3R5bGVTaGVldCIsCiAgICAgICAgY2hpbGRyZW46IEhBCiAgICAgIH0sCiAgICAgIDM6IHsKICAgICAgICBuYW1lOiAiUGFyYWdyYXBoU2hlZXQiLAogICAgICAgIGNoaWxkcmVuOiBmQQogICAgICB9CiAgICB9CiAgfQp9OwpmdW5jdGlvbiBkMihyLCBlKSB7CiAgdmFyIGEsIEE7CiAgaWYgKHIgPT09IG51bGwpCiAgICByZXR1cm4gcjsKICBpZiAoQXJyYXkuaXNBcnJheShyKSkKICAgIHJldHVybiByLm1hcChmdW5jdGlvbih1KSB7CiAgICAgIHJldHVybiBkMih1LCBlKTsKICAgIH0pOwogIGlmICh0eXBlb2YgciAhPSAib2JqZWN0IikKICAgIHJldHVybiByOwogIGZvciAodmFyIHQgPSB7fSwgaSA9IDAsIG4gPSBPYmplY3Qua2V5cyhyKTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIGlmIChlW2ZdKQogICAgICBpZiAoZVtmXS51cHJvb3QpIHsKICAgICAgICBmICE9PSAiOTkiICYmICh0ID0gZDIocltmXSwgKGEgPSBlW2ZdLmNoaWxkcmVuKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDoge30pKSwgcls5OV0gJiYgKHQuX3R5cGUgPSByWzk5XSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZQogICAgICAgIHRbZVtmXS5uYW1lIHx8IGZdID0gZDIocltmXSwgKEEgPSBlW2ZdLmNoaWxkcmVuKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDoge30pOwogICAgZWxzZSBmID09PSAiOTkiID8gdC5fdHlwZSA9IHJbZl0gOiB0W2ZdID0gZDIocltmXSwge30pOwogIH0KICByZXR1cm4gdDsKfQpmdW5jdGlvbiBwNChyKSB7CiAgcmV0dXJuIGQyKHIsIG00KTsKfQp2YXIgaCA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBoID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7CiAgICBmb3IgKHZhciBlLCBhID0gMSwgQSA9IGFyZ3VtZW50cy5sZW5ndGg7IGEgPCBBOyBhKyspIHsKICAgICAgZSA9IGFyZ3VtZW50c1thXTsKICAgICAgZm9yICh2YXIgdCBpbiBlKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdCkgJiYgKHJbdF0gPSBlW3RdKTsKICAgIH0KICAgIHJldHVybiByOwogIH0sIGguYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwga3IgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLCBxMSA9IFtdLCBFZSA9IHt9OwpmdW5jdGlvbiByMChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSB7IGtleTogciwgaGFzOiBlLCByZWFkOiBhLCB3cml0ZTogQSB9OwogIHExLnB1c2godCksIEVlW3Qua2V5XSA9IHQ7Cn0KZnVuY3Rpb24gZTIociwgZSkgewogIEVlW3JdID0gRWVbZV07Cn0KZnVuY3Rpb24gWDAocikgewogIHJldHVybiBmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gZVtyXSAhPT0gdm9pZCAwOwogIH07Cn0KZnVuY3Rpb24gb0EocikgewogIGlmIChTKHIpKQogICAgdGhyb3cgbmV3IEVycm9yKCJSZXNvdXJjZSBzaXplIGFib3ZlIDQgR0IgbGltaXQgYXQgIi5jb25jYXQoci5vZmZzZXQudG9TdHJpbmcoMTYpKSk7CiAgcmV0dXJuIFMocik7Cn0KZnVuY3Rpb24gdUEociwgZSkgewogIFUociwgMCksIFUociwgZSk7Cn0KcjAoIlR5U2giLCBYMCgidGV4dCIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKGcwKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFR5U2ggdmVyc2lvbiIpOwogIGZvciAodmFyIEEgPSBbXSwgdCA9IDA7IHQgPCA2OyB0KyspCiAgICBBLnB1c2goSXIocikpOwogIGlmIChnMChyKSAhPT0gNTApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVHlTaCB0ZXh0IHZlcnNpb24iKTsKICB2YXIgaSA9IG0wKHIpOwogIGlmIChnMChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUeVNoIHdhcnAgdmVyc2lvbiIpOwogIHZhciBuID0gbTAocik7CiAgaWYgKGUudGV4dCA9IHsKICAgIHRyYW5zZm9ybTogQSwKICAgIGxlZnQ6IFJyKHIpLAogICAgdG9wOiBScihyKSwKICAgIHJpZ2h0OiBScihyKSwKICAgIGJvdHRvbTogUnIociksCiAgICB0ZXh0OiBpWyJUeHQgIl0ucmVwbGFjZSgvXHIvZywgYApgKSwKICAgIGluZGV4OiBpLlRleHRJbmRleCB8fCAwLAogICAgZ3JpZGRpbmc6IHRpLmRlY29kZShpLnRleHRHcmlkZGluZyksCiAgICBhbnRpQWxpYXM6IGlpLmRlY29kZShpLkFudEEpLAogICAgb3JpZW50YXRpb246IHkyLmRlY29kZShpLk9ybnQpLAogICAgd2FycDogewogICAgICBzdHlsZTogUEEuZGVjb2RlKG4ud2FycFN0eWxlKSwKICAgICAgdmFsdWU6IG4ud2FycFZhbHVlIHx8IDAsCiAgICAgIHBlcnNwZWN0aXZlOiBuLndhcnBQZXJzcGVjdGl2ZSB8fCAwLAogICAgICBwZXJzcGVjdGl2ZU90aGVyOiBuLndhcnBQZXJzcGVjdGl2ZU90aGVyIHx8IDAsCiAgICAgIHJvdGF0ZTogeTIuZGVjb2RlKG4ud2FycFJvdGF0ZSkKICAgIH0KICB9LCBpLmJvdW5kcyAmJiAoZS50ZXh0LmJvdW5kcyA9IHF0KGkuYm91bmRzKSksIGkuYm91bmRpbmdCb3ggJiYgKGUudGV4dC5ib3VuZGluZ0JveCA9IHF0KGkuYm91bmRpbmdCb3gpKSwgaS5FbmdpbmVEYXRhKSB7CiAgICB2YXIgZiA9IGoxKGkuRW5naW5lRGF0YSksIHUgPSBrNChmKTsKICAgIGUudGV4dCA9IGgoaCh7fSwgZS50ZXh0KSwgdSk7CiAgfQogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS50ZXh0LCBBID0gYS53YXJwIHx8IHt9LCB0ID0gYS50cmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdLCBpID0gaChoKGgoeyAiVHh0ICI6IChhLnRleHQgfHwgIiIpLnJlcGxhY2UoL1xyP1xuL2csICJcciIpLCB0ZXh0R3JpZGRpbmc6IHRpLmVuY29kZShhLmdyaWRkaW5nKSwgT3JudDogeTIuZW5jb2RlKGEub3JpZW50YXRpb24pLCBBbnRBOiBpaS5lbmNvZGUoYS5hbnRpQWxpYXMpIH0sIGEuYm91bmRzID8geyBib3VuZHM6ICR0KGEuYm91bmRzKSB9IDoge30pLCBhLmJvdW5kaW5nQm94ID8geyBib3VuZGluZ0JveDogJHQoYS5ib3VuZGluZ0JveCkgfSA6IHt9KSwgeyBUZXh0SW5kZXg6IGEuaW5kZXggfHwgMCwgRW5naW5lRGF0YTogbDQoZzQoYSkpIH0pOwogIEUwKHIsIDEpOwogIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgbisrKQogICAgRnIociwgdFtuXSk7CiAgRTAociwgNTApLCBwMChyLCAiIiwgIlR4THIiLCBpLCAidGV4dCIpLCBFMChyLCAxKSwgcDAociwgIiIsICJ3YXJwIiwgWmUoQSkpLCBWcihyLCBhLmxlZnQpLCBWcihyLCBhLnRvcCksIFZyKHIsIGEucmlnaHQpLCBWcihyLCBhLmJvdHRvbSk7Cn0pOwpyMCgiU29DbyIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZWN0b3JGaWxsICE9PSB2b2lkIDAgJiYgci52ZWN0b3JTdHJva2UgPT09IHZvaWQgMCAmJiByLnZlY3RvckZpbGwudHlwZSA9PT0gImNvbG9yIjsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gbTAocik7CiAgZS52ZWN0b3JGaWxsID0gRDIoYSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHgyKGUudmVjdG9yRmlsbCkuZGVzY3JpcHRvcjsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnIwKCJHZEZsIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnZlY3RvckZpbGwgIT09IHZvaWQgMCAmJiByLnZlY3RvclN0cm9rZSA9PT0gdm9pZCAwICYmIChyLnZlY3RvckZpbGwudHlwZSA9PT0gInNvbGlkIiB8fCByLnZlY3RvckZpbGwudHlwZSA9PT0gIm5vaXNlIik7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGUudmVjdG9yRmlsbCA9IEQyKEEpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IHgyKGUudmVjdG9yRmlsbCkuZGVzY3JpcHRvcjsKICBwMChyLCAiIiwgIm51bGwiLCBhKTsKfSk7CnIwKCJQdEZsIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLnZlY3RvckZpbGwgIT09IHZvaWQgMCAmJiByLnZlY3RvclN0cm9rZSA9PT0gdm9pZCAwICYmIHIudmVjdG9yRmlsbC50eXBlID09PSAicGF0dGVybiI7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IG0wKHIpOwogIGUudmVjdG9yRmlsbCA9IEQyKGEpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB4MihlLnZlY3RvckZpbGwpLmRlc2NyaXB0b3I7CiAgcDAociwgIiIsICJudWxsIiwgYSk7Cn0pOwpyMCgidnNjZyIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci52ZWN0b3JGaWxsICE9PSB2b2lkIDAgJiYgci52ZWN0b3JTdHJva2UgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIFIwKHIpOwogIHZhciBBID0gbTAocik7CiAgZS52ZWN0b3JGaWxsID0gRDIoQSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0geDIoZS52ZWN0b3JGaWxsKSwgQSA9IGEuZGVzY3JpcHRvciwgdCA9IGEua2V5OwogIG4wKHIsIHQpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CmZ1bmN0aW9uIHc0KHIsIGUsIGEpIHsKICB2YXIgQSA9IEdyKHIpICogYSwgdCA9IEdyKHIpICogZSwgaSA9IEdyKHIpICogYSwgbiA9IEdyKHIpICogZSwgZiA9IEdyKHIpICogYSwgdSA9IEdyKHIpICogZTsKICByZXR1cm4gW3QsIEEsIG4sIGksIHUsIGZdOwp9CmZ1bmN0aW9uIHk0KHIsIGUsIGEsIEEpIHsKICBYcihyLCBlWzFdIC8gQSksIFhyKHIsIGVbMF0gLyBhKSwgWHIociwgZVszXSAvIEEpLCBYcihyLCBlWzJdIC8gYSksIFhyKHIsIGVbNV0gLyBBKSwgWHIociwgZVs0XSAvIGEpOwp9CnZhciAkMSA9IFsiZXhjbHVkZSIsICJjb21iaW5lIiwgInN1YnRyYWN0IiwgImludGVyc2VjdCJdOwpmdW5jdGlvbiByZihyLCBlLCBhLCBBLCB0KSB7CiAgZm9yICh2YXIgaSA9IHIub2Zmc2V0ICsgdCwgbiA9IGUucGF0aHMsIGYgPSB2b2lkIDA7IGkgLSByLm9mZnNldCA+PSAyNjsgKSB7CiAgICB2YXIgdSA9IFAocik7CiAgICBzd2l0Y2ggKHUpIHsKICAgICAgY2FzZSAwOgogICAgICBjYXNlIDM6IHsKICAgICAgICBQKHIpOwogICAgICAgIHZhciBvID0gZzAociksIGwgPSBQKHIpOwogICAgICAgIEgociwgMTgpLCBmID0gewogICAgICAgICAgb3BlbjogdSA9PT0gMywKICAgICAgICAgIGtub3RzOiBbXSwKICAgICAgICAgIGZpbGxSdWxlOiBsID09PSAyID8gIm5vbi16ZXJvIiA6ICJldmVuLW9kZCIKICAgICAgICB9LCBvICE9PSAtMSAmJiAoZi5vcGVyYXRpb24gPSAkMVtvXSksIG4ucHVzaChmKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDE6CiAgICAgIGNhc2UgMjoKICAgICAgY2FzZSA0OgogICAgICBjYXNlIDU6CiAgICAgICAgZi5rbm90cy5wdXNoKHsgbGlua2VkOiB1ID09PSAxIHx8IHUgPT09IDQsIHBvaW50czogdzQociwgYSwgQSkgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjoKICAgICAgICBIKHIsIDI0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3OiB7CiAgICAgICAgdmFyIHMgPSBHcihyKSwgYyA9IEdyKHIpLCBkID0gR3IociksIHYgPSBHcihyKSwgayA9IEdyKHIpOwogICAgICAgIEgociwgNCksIGUuY2xpcGJvYXJkID0geyB0b3A6IHMsIGxlZnQ6IGMsIGJvdHRvbTogZCwgcmlnaHQ6IHYsIHJlc29sdXRpb246IGsgfTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDg6CiAgICAgICAgZS5maWxsU3RhcnRzV2l0aEFsbFBpeGVscyA9ICEhUChyKSwgSChyLCAyMik7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZtc2sgc2VjdGlvbiIpOwogICAgfQogIH0KICByZXR1cm4gbjsKfQpyMCgidm1zayIsIFgwKCJ2ZWN0b3JNYXNrIiksIGZ1bmN0aW9uKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IEEud2lkdGgsIGkgPSBBLmhlaWdodDsKICBpZiAoUyhyKSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2bXNrIHZlcnNpb24iKTsKICBlLnZlY3Rvck1hc2sgPSB7IHBhdGhzOiBbXSB9OwogIHZhciBuID0gZS52ZWN0b3JNYXNrLCBmID0gUyhyKTsKICBuLmludmVydCA9IChmICYgMSkgIT09IDAsIG4ubm90TGluayA9IChmICYgMikgIT09IDAsIG4uZGlzYWJsZSA9IChmICYgNCkgIT09IDAsIHJmKHIsIG4sIHQsIGksIGEoKSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gYS53aWR0aCwgdCA9IGEuaGVpZ2h0LCBpID0gZS52ZWN0b3JNYXNrLCBuID0gKGkuaW52ZXJ0ID8gMSA6IDApIHwgKGkubm90TGluayA/IDIgOiAwKSB8IChpLmRpc2FibGUgPyA0IDogMCk7CiAgVShyLCAzKSwgVShyLCBuKSwgeChyLCA2KSwgWjAociwgMjQpOwogIHZhciBmID0gaS5jbGlwYm9hcmQ7CiAgZiAmJiAoeChyLCA3KSwgWHIociwgZi50b3ApLCBYcihyLCBmLmxlZnQpLCBYcihyLCBmLmJvdHRvbSksIFhyKHIsIGYucmlnaHQpLCBYcihyLCBmLnJlc29sdXRpb24pLCBaMChyLCA0KSksIHgociwgOCksIHgociwgaS5maWxsU3RhcnRzV2l0aEFsbFBpeGVscyA/IDEgOiAwKSwgWjAociwgMjIpOwogIGZvciAodmFyIHUgPSAwLCBvID0gaS5wYXRoczsgdSA8IG8ubGVuZ3RoOyB1KyspIHsKICAgIHZhciBsID0gb1t1XTsKICAgIHgociwgbC5vcGVuID8gMyA6IDApLCB4KHIsIGwua25vdHMubGVuZ3RoKSwgeChyLCBsLm9wZXJhdGlvbiA/ICQxLmluZGV4T2YobC5vcGVyYXRpb24pIDogLTEpLCB4KHIsIGwuZmlsbFJ1bGUgPT09ICJub24temVybyIgPyAyIDogMSksIFowKHIsIDE4KTsKICAgIGZvciAodmFyIHMgPSBsLm9wZW4gPyA0IDogMSwgYyA9IGwub3BlbiA/IDUgOiAyLCBkID0gMCwgdiA9IGwua25vdHM7IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICAgIHZhciBrID0gdltkXSwgRSA9IGsubGlua2VkLCBnID0gay5wb2ludHM7CiAgICAgIHgociwgRSA/IHMgOiBjKSwgeTQociwgZywgQSwgdCk7CiAgICB9CiAgfQp9KTsKZTIoInZzbXMiLCAidm1zayIpOwpyMCgKICAidm93diIsCiAgLy8gc29tZXRoaW5nIHdpdGggdmVjdG9ycz8KICBYMCgidm93diIpLAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIGUudm93diA9IFMocik7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgICBVKHIsIGUudm93dik7CiAgfQopOwpyMCgidm9nayIsIFgwKCJ2ZWN0b3JPcmlnaW5hdGlvbiIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKEwocikgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdm9nayB2ZXJzaW9uIik7CiAgdmFyIEEgPSBtMChyKTsKICBlLnZlY3Rvck9yaWdpbmF0aW9uID0geyBrZXlEZXNjcmlwdG9yTGlzdDogW10gfTsKICBmb3IgKHZhciB0ID0gMCwgaSA9IEEua2V5RGVzY3JpcHRvckxpc3Q7IHQgPCBpLmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgbiA9IGlbdF0sIGYgPSB7fTsKICAgIG4ua2V5U2hhcGVJbnZhbGlkYXRlZCAhPSBudWxsICYmIChmLmtleVNoYXBlSW52YWxpZGF0ZWQgPSBuLmtleVNoYXBlSW52YWxpZGF0ZWQpLCBuLmtleU9yaWdpblR5cGUgIT0gbnVsbCAmJiAoZi5rZXlPcmlnaW5UeXBlID0gbi5rZXlPcmlnaW5UeXBlKSwgbi5rZXlPcmlnaW5SZXNvbHV0aW9uICE9IG51bGwgJiYgKGYua2V5T3JpZ2luUmVzb2x1dGlvbiA9IG4ua2V5T3JpZ2luUmVzb2x1dGlvbiksIG4ua2V5T3JpZ2luU2hhcGVCQm94ICYmIChmLmtleU9yaWdpblNoYXBlQm91bmRpbmdCb3ggPSB7CiAgICAgIHRvcDogY2Eobi5rZXlPcmlnaW5TaGFwZUJCb3hbIlRvcCAiXSksCiAgICAgIGxlZnQ6IGNhKG4ua2V5T3JpZ2luU2hhcGVCQm94LkxlZnQpLAogICAgICBib3R0b206IGNhKG4ua2V5T3JpZ2luU2hhcGVCQm94LkJ0b20pLAogICAgICByaWdodDogY2Eobi5rZXlPcmlnaW5TaGFwZUJCb3guUmdodCkKICAgIH0pOwogICAgdmFyIHUgPSBuLmtleU9yaWdpblJSZWN0UmFkaWk7CiAgICB1ICYmIChmLmtleU9yaWdpblJSZWN0UmFkaWkgPSB7CiAgICAgIHRvcFJpZ2h0OiBGMCh1LnRvcFJpZ2h0KSwKICAgICAgdG9wTGVmdDogRjAodS50b3BMZWZ0KSwKICAgICAgYm90dG9tTGVmdDogRjAodS5ib3R0b21MZWZ0KSwKICAgICAgYm90dG9tUmlnaHQ6IEYwKHUuYm90dG9tUmlnaHQpCiAgICB9KTsKICAgIHZhciBvID0gbi5rZXlPcmlnaW5Cb3hDb3JuZXJzOwogICAgbyAmJiAoZi5rZXlPcmlnaW5Cb3hDb3JuZXJzID0gWwogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQS5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckEuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQi5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckIuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyQy5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckMuVnJ0YyB9LAogICAgICB7IHg6IG8ucmVjdGFuZ2xlQ29ybmVyRC5IcnpuLCB5OiBvLnJlY3RhbmdsZUNvcm5lckQuVnJ0YyB9CiAgICBdKTsKICAgIHZhciBsID0gbi5Ucm5mOwogICAgbCAmJiAoZi50cmFuc2Zvcm0gPSBbbC54eCwgbC54eSwgbC55eCwgbC55eSwgbC50eCwgbC50eV0pLCBlLnZlY3Rvck9yaWdpbmF0aW9uLmtleURlc2NyaXB0b3JMaXN0LnB1c2goZik7CiAgfQogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSBlLnZlY3Rvck9yaWdpbmF0aW9uLCBBID0geyBrZXlEZXNjcmlwdG9yTGlzdDogW10gfSwgdCA9IDA7IHQgPCBhLmtleURlc2NyaXB0b3JMaXN0Lmxlbmd0aDsgdCsrKSB7CiAgICB2YXIgaSA9IGEua2V5RGVzY3JpcHRvckxpc3RbdF07CiAgICBBLmtleURlc2NyaXB0b3JMaXN0LnB1c2goe30pOwogICAgdmFyIG4gPSBBLmtleURlc2NyaXB0b3JMaXN0W0Eua2V5RGVzY3JpcHRvckxpc3QubGVuZ3RoIC0gMV07CiAgICBpLmtleU9yaWdpblR5cGUgIT0gbnVsbCAmJiAobi5rZXlPcmlnaW5UeXBlID0gaS5rZXlPcmlnaW5UeXBlKSwgaS5rZXlPcmlnaW5SZXNvbHV0aW9uICE9IG51bGwgJiYgKG4ua2V5T3JpZ2luUmVzb2x1dGlvbiA9IGkua2V5T3JpZ2luUmVzb2x1dGlvbik7CiAgICB2YXIgZiA9IGkua2V5T3JpZ2luUlJlY3RSYWRpaTsKICAgIGYgJiYgKG4ua2V5T3JpZ2luUlJlY3RSYWRpaSA9IHsKICAgICAgdW5pdFZhbHVlUXVhZFZlcnNpb246IDEsCiAgICAgIHRvcFJpZ2h0OiBEMChmLnRvcFJpZ2h0LCAidG9wUmlnaHQiKSwKICAgICAgdG9wTGVmdDogRDAoZi50b3BMZWZ0LCAidG9wTGVmdCIpLAogICAgICBib3R0b21MZWZ0OiBEMChmLmJvdHRvbUxlZnQsICJib3R0b21MZWZ0IiksCiAgICAgIGJvdHRvbVJpZ2h0OiBEMChmLmJvdHRvbVJpZ2h0LCAiYm90dG9tUmlnaHQiKQogICAgfSk7CiAgICB2YXIgdSA9IGkua2V5T3JpZ2luU2hhcGVCb3VuZGluZ0JveDsKICAgIHUgJiYgKG4ua2V5T3JpZ2luU2hhcGVCQm94ID0gewogICAgICB1bml0VmFsdWVRdWFkVmVyc2lvbjogMSwKICAgICAgIlRvcCAiOiBEMCh1LnRvcCwgInRvcCIpLAogICAgICBMZWZ0OiBEMCh1LmxlZnQsICJsZWZ0IiksCiAgICAgIEJ0b206IEQwKHUuYm90dG9tLCAiYm90dG9tIiksCiAgICAgIFJnaHQ6IEQwKHUucmlnaHQsICJyaWdodCIpCiAgICB9KTsKICAgIHZhciBvID0gaS5rZXlPcmlnaW5Cb3hDb3JuZXJzOwogICAgbyAmJiBvLmxlbmd0aCA9PT0gNCAmJiAobi5rZXlPcmlnaW5Cb3hDb3JuZXJzID0gewogICAgICByZWN0YW5nbGVDb3JuZXJBOiB7IEhyem46IG9bMF0ueCwgVnJ0Yzogb1swXS55IH0sCiAgICAgIHJlY3RhbmdsZUNvcm5lckI6IHsgSHJ6bjogb1sxXS54LCBWcnRjOiBvWzFdLnkgfSwKICAgICAgcmVjdGFuZ2xlQ29ybmVyQzogeyBIcnpuOiBvWzJdLngsIFZydGM6IG9bMl0ueSB9LAogICAgICByZWN0YW5nbGVDb3JuZXJEOiB7IEhyem46IG9bM10ueCwgVnJ0Yzogb1szXS55IH0KICAgIH0pOwogICAgdmFyIGwgPSBpLnRyYW5zZm9ybTsKICAgIGwgJiYgbC5sZW5ndGggPT09IDYgJiYgKG4uVHJuZiA9IHsKICAgICAgeHg6IGxbMF0sCiAgICAgIHh5OiBsWzFdLAogICAgICB5eDogbFsyXSwKICAgICAgeXk6IGxbM10sCiAgICAgIHR4OiBsWzRdLAogICAgICB0eTogbFs1XQogICAgfSksIGkua2V5U2hhcGVJbnZhbGlkYXRlZCAhPSBudWxsICYmIChuLmtleVNoYXBlSW52YWxpZGF0ZWQgPSBpLmtleVNoYXBlSW52YWxpZGF0ZWQpLCBuLmtleU9yaWdpbkluZGV4ID0gdDsKICB9CiAgdDAociwgMSksIHAwKHIsICIiLCAibnVsbCIsIEEpOwp9KTsKcjAoImxtZngiLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuZWZmZWN0cyAhPT0gdm9pZCAwICYmIHRmKHIuZWZmZWN0cyk7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFMocik7CiAgaWYgKEEgIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbG1meCB2ZXJzaW9uIik7CiAgdmFyIHQgPSBtMChyKTsKICBlLmVmZmVjdHMgPSBTMih0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBWMihlLmVmZmVjdHMsICEhQS5sb2dNaXNzaW5nRmVhdHVyZXMsICEwKTsKICBVKHIsIDApLCBwMChyLCAiIiwgIm51bGwiLCB0KTsKfSk7CnIwKCJsckZYIiwgWDAoImVmZmVjdHMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuZWZmZWN0cyB8fCAoZS5lZmZlY3RzID0gbjQocikpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBmNChyLCBlLmVmZmVjdHMpOwp9KTsKcjAoImx1bmkiLCBYMCgibmFtZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKGEoKSA+IDQpIHsKICAgIHZhciBBID0gUyhyKTsKICAgIGEoKSA+PSBBICogMiA/IGUubmFtZSA9IFVBKHIsIEEpIDogci5sb2dEZXZGZWF0dXJlcyAmJiByLmxvZygibmFtZSBpbiBsdW5pIHNlY3Rpb24gaXMgdG9vIGxvbmciKTsKICB9IGVsc2UKICAgIHIubG9nRGV2RmVhdHVyZXMgJiYgci5sb2coImVtcHR5IGx1bmkgc2VjdGlvbiIpOwogIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIG1yKHIsIGUubmFtZSk7Cn0pOwpyMCgibG5zciIsIFgwKCJuYW1lU291cmNlIiksIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS5uYW1lU291cmNlID0gUjAocik7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gbjAociwgZS5uYW1lU291cmNlKTsKfSk7CnIwKCJseWlkIiwgWDAoImlkIiksIGZ1bmN0aW9uKHIsIGUpIHsKICBlLmlkID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSBlLmlkOyBBLmxheWVySWRzLmhhcyh0KTsgKQogICAgdCArPSAxMDA7CiAgVShyLCB0KSwgQS5sYXllcklkcy5hZGQodCksIEEubGF5ZXJUb0lkLnNldChlLCB0KTsKfSk7CnIwKCJsc2N0IiwgWDAoInNlY3Rpb25EaXZpZGVyIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLnNlY3Rpb25EaXZpZGVyID0geyB0eXBlOiBTKHIpIH0sIGEoKSAmJiAoSnIociwgIjhCSU0iKSwgZS5zZWN0aW9uRGl2aWRlci5rZXkgPSBSMChyKSksIGEoKSAmJiAoZS5zZWN0aW9uRGl2aWRlci5zdWJUeXBlID0gUyhyKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBVKHIsIGUuc2VjdGlvbkRpdmlkZXIudHlwZSksIGUuc2VjdGlvbkRpdmlkZXIua2V5ICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCBlLnNlY3Rpb25EaXZpZGVyLmtleSksIGUuc2VjdGlvbkRpdmlkZXIuc3ViVHlwZSAhPT0gdm9pZCAwICYmIFUociwgZS5zZWN0aW9uRGl2aWRlci5zdWJUeXBlKSk7Cn0pOwplMigibHNkayIsICJsc2N0Iik7CnIwKCJjbGJsIiwgWDAoImJsZW5kQ2xpcHBlbmRFbGVtZW50cyIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5ibGVuZENsaXBwZW5kRWxlbWVudHMgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUuYmxlbmRDbGlwcGVuZEVsZW1lbnRzID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJpbmZ4IiwgWDAoImJsZW5kSW50ZXJpb3JFbGVtZW50cyIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5ibGVuZEludGVyaW9yRWxlbWVudHMgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUuYmxlbmRJbnRlcmlvckVsZW1lbnRzID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJrbmtvIiwgWDAoImtub2Nrb3V0IiksIGZ1bmN0aW9uKHIsIGUpIHsKICBlLmtub2Nrb3V0ID0gISFPKHIpLCBIKHIsIDMpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmtub2Nrb3V0ID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJsbWdtIiwgWDAoImxheWVyTWFza0FzR2xvYmFsTWFzayIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS5sYXllck1hc2tBc0dsb2JhbE1hc2sgPSAhIU8ociksIEgociwgMyk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBUKHIsIGUubGF5ZXJNYXNrQXNHbG9iYWxNYXNrID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CnIwKCJsc3BmIiwgWDAoInByb3RlY3RlZCIpLCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBTKHIpOwogIGUucHJvdGVjdGVkID0gewogICAgdHJhbnNwYXJlbmN5OiAoYSAmIDEpICE9PSAwLAogICAgY29tcG9zaXRlOiAoYSAmIDIpICE9PSAwLAogICAgcG9zaXRpb246IChhICYgNCkgIT09IDAKICB9LCBhICYgOCAmJiAoZS5wcm90ZWN0ZWQuYXJ0Ym9hcmRzID0gITApOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSAoZS5wcm90ZWN0ZWQudHJhbnNwYXJlbmN5ID8gMSA6IDApIHwgKGUucHJvdGVjdGVkLmNvbXBvc2l0ZSA/IDIgOiAwKSB8IChlLnByb3RlY3RlZC5wb3NpdGlvbiA/IDQgOiAwKSB8IChlLnByb3RlY3RlZC5hcnRib2FyZHMgPyA4IDogMCk7CiAgVShyLCBhKTsKfSk7CnIwKCJsY2xyIiwgWDAoImxheWVyQ29sb3IiKSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gUChyKTsKICBIKHIsIDYpLCBlLmxheWVyQ29sb3IgPSBUdFthXTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gVHQuaW5kZXhPZihlLmxheWVyQ29sb3IpOwogIHgociwgYSA9PT0gLTEgPyAwIDogYSksIFowKHIsIDYpOwp9KTsKcjAoCiAgInNobWQiLAogIC8vIE1ldGFkYXRhIHNldHRpbmcKICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci50aW1lc3RhbXAgIT09IHZvaWQgMCB8fCByLmFuaW1hdGlvbkZyYW1lcyAhPT0gdm9pZCAwIHx8IHIuYW5pbWF0aW9uRnJhbWVGbGFncyAhPT0gdm9pZCAwIHx8IHIudGltZWxpbmUgIT09IHZvaWQgMCB8fCByLmNvbXBzICE9PSB2b2lkIDA7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICBmb3IgKHZhciBBID0gUyhyKSwgdCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgSnIociwgIjhCSU0iKTsKICAgICAgdmFyIGYgPSBSMChyKTsKICAgICAgTyhyKSwgSChyLCAzKSwgcHIociwgMSwgZnVuY3Rpb24odSkgewogICAgICAgIGlmIChmID09PSAiY3VzdCIpIHsKICAgICAgICAgIHZhciBvID0gbTAocik7CiAgICAgICAgICBvLmxheWVyVGltZSAhPT0gdm9pZCAwICYmIChlLnRpbWVzdGFtcCA9IG8ubGF5ZXJUaW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGYgPT09ICJtbHN0IikgewogICAgICAgICAgdmFyIG8gPSBtMChyKTsKICAgICAgICAgIGUuYW5pbWF0aW9uRnJhbWVzID0gW107CiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG8uTGFTdC5sZW5ndGg7IGwrKykgewogICAgICAgICAgICB2YXIgcyA9IG8uTGFTdFtsXSwgYyA9IHsgZnJhbWVzOiBzLkZyTHMgfTsKICAgICAgICAgICAgcy5lbmFiICE9PSB2b2lkIDAgJiYgKGMuZW5hYmxlID0gcy5lbmFiKSwgcy5PZnN0ICYmIChjLm9mZnNldCA9IG0yKHMuT2ZzdCkpLCBzLkZYUmYgJiYgKGMucmVmZXJlbmNlUG9pbnQgPSBtMihzLkZYUmYpKSwgcy5MZWZ4ICYmIChjLmVmZmVjdHMgPSBTMihzLkxlZngsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpKSwgcy5ibGVuZE9wdGlvbnMgJiYgcy5ibGVuZE9wdGlvbnMuT3BjdCAmJiAoYy5vcGFjaXR5ID0gQTAocy5ibGVuZE9wdGlvbnMuT3BjdCkpLCBlLmFuaW1hdGlvbkZyYW1lcy5wdXNoKGMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gIm1keW4iKSB7CiAgICAgICAgICBQKHIpOwogICAgICAgICAgdmFyIGQgPSBPKHIpLCB2ID0gTyhyKTsKICAgICAgICAgIGUuYW5pbWF0aW9uRnJhbWVGbGFncyA9IHsKICAgICAgICAgICAgcHJvcGFnYXRlRnJhbWVPbmU6ICFkLAogICAgICAgICAgICB1bmlmeUxheWVyUG9zaXRpb246ICh2ICYgMSkgIT09IDAsCiAgICAgICAgICAgIHVuaWZ5TGF5ZXJTdHlsZTogKHYgJiAyKSAhPT0gMCwKICAgICAgICAgICAgdW5pZnlMYXllclZpc2liaWxpdHk6ICh2ICYgNCkgIT09IDAKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChmID09PSAidG1sbiIpIHsKICAgICAgICAgIHZhciBvID0gbTAociksIGsgPSBvLnRpbWVTY29wZSwgRSA9IHsKICAgICAgICAgICAgc3RhcnQ6IG5yKGsuU3RydCksCiAgICAgICAgICAgIGR1cmF0aW9uOiBucihrLmR1cmF0aW9uKSwKICAgICAgICAgICAgaW5UaW1lOiBucihrLmluVGltZSksCiAgICAgICAgICAgIG91dFRpbWU6IG5yKGsub3V0VGltZSksCiAgICAgICAgICAgIGF1dG9TY29wZTogby5hdXRvU2NvcGUsCiAgICAgICAgICAgIGF1ZGlvTGV2ZWw6IG8uYXVkaW9MZXZlbAogICAgICAgICAgfTsKICAgICAgICAgIG8udHJhY2tMaXN0ICYmIChFLnRyYWNrcyA9IEpuKG8udHJhY2tMaXN0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSksIGUudGltZWxpbmUgPSBFOwogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gImNtbHMiKSB7CiAgICAgICAgICB2YXIgbyA9IG0wKHIpOwogICAgICAgICAgZS5jb21wcyA9IHsKICAgICAgICAgICAgc2V0dGluZ3M6IFtdCiAgICAgICAgICB9LCBvLm9yaWdGWFJlZlBvaW50ICYmIChlLmNvbXBzLm9yaWdpbmFsRWZmZWN0c1JlZmVyZW5jZVBvaW50ID0geyB4OiBvLm9yaWdGWFJlZlBvaW50Lkhyem4sIHk6IG8ub3JpZ0ZYUmVmUG9pbnQuVnJ0YyB9KTsKICAgICAgICAgIGZvciAodmFyIGcgPSAwLCB3ID0gby5sYXllclNldHRpbmdzOyBnIDwgdy5sZW5ndGg7IGcrKykgewogICAgICAgICAgICB2YXIgQiA9IHdbZ107CiAgICAgICAgICAgIGUuY29tcHMuc2V0dGluZ3MucHVzaCh7IGNvbXBMaXN0OiBCLmNvbXBMaXN0IH0pOwogICAgICAgICAgICB2YXIgbSA9IGUuY29tcHMuc2V0dGluZ3NbZS5jb21wcy5zZXR0aW5ncy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgImVuYWIiIGluIEIgJiYgKG0uZW5hYmxlZCA9IEIuZW5hYiksIEIuT2ZzdCAmJiAobS5vZmZzZXQgPSB7IHg6IEIuT2ZzdC5IcnpuLCB5OiBCLk9mc3QuVnJ0YyB9KSwgQi5GWFJlZlBvaW50ICYmIChtLmVmZmVjdHNSZWZlcmVuY2VQb2ludCA9IHsgeDogQi5GWFJlZlBvaW50Lkhyem4sIHk6IEIuRlhSZWZQb2ludC5WcnRjIH0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZiA9PT0gImV4dG4iKSB7CiAgICAgICAgICB2YXIgbyA9IG0wKHIpOwogICAgICAgICAgci5sb2dNaXNzaW5nRmVhdHVyZXMgJiYgci5sb2coJ1VuaGFuZGxlZCAic2htZCIgc2VjdGlvbiBrZXknLCBmKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHIubG9nTWlzc2luZ0ZlYXR1cmVzICYmIHIubG9nKCdVbmhhbmRsZWQgInNobWQiIHNlY3Rpb24ga2V5JywgZik7CiAgICAgICAgSChyLCB1KCkpOwogICAgICB9KTsKICAgIH0sIGkgPSAwOyBpIDwgQTsgaSsrKQogICAgICB0KCk7CiAgICBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgICB2YXIgdCA9IGUuYW5pbWF0aW9uRnJhbWVzLCBpID0gZS5hbmltYXRpb25GcmFtZUZsYWdzLCBuID0gZS50aW1lc3RhbXAsIGYgPSBlLnRpbWVsaW5lLCB1ID0gZS5jb21wcywgbyA9IDA7CiAgICB0ICYmIG8rKywgaSAmJiBvKyssIGYgJiYgbysrLCBuICE9PSB2b2lkIDAgJiYgbysrLCB1ICYmIG8rKywgVShyLCBvKSwgdCAmJiAobjAociwgIjhCSU0iKSwgbjAociwgIm1sc3QiKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICBmb3IgKHZhciBsLCBzID0gewogICAgICAgIExhSUQ6IChsID0gZS5pZCkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IDAsCiAgICAgICAgTGFTdDogW10KICAgICAgfSwgYyA9IDA7IGMgPCB0Lmxlbmd0aDsgYysrKSB7CiAgICAgICAgdmFyIGQgPSB0W2NdLCB2ID0ge307CiAgICAgICAgZC5lbmFibGUgIT09IHZvaWQgMCAmJiAodi5lbmFiID0gZC5lbmFibGUpLCB2LkZyTHMgPSBkLmZyYW1lcywgZC5vZmZzZXQgJiYgKHYuT2ZzdCA9IHAyKGQub2Zmc2V0KSksIGQucmVmZXJlbmNlUG9pbnQgJiYgKHYuRlhSZiA9IHAyKGQucmVmZXJlbmNlUG9pbnQpKSwgZC5lZmZlY3RzICYmICh2LkxlZnggPSBWMihkLmVmZmVjdHMsICExLCAhMSkpLCBkLm9wYWNpdHkgIT09IHZvaWQgMCAmJiAodi5ibGVuZE9wdGlvbnMgPSB7IE9wY3Q6ICQwKGQub3BhY2l0eSkgfSksIHMuTGFTdC5wdXNoKHYpOwogICAgICB9CiAgICAgIHAwKHIsICIiLCAibnVsbCIsIHMpOwogICAgfSwgITApKSwgaSAmJiAobjAociwgIjhCSU0iKSwgbjAociwgIm1keW4iKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICB4KHIsIDApLCBUKHIsIGkucHJvcGFnYXRlRnJhbWVPbmUgPyAwIDogMTUpLCBUKHIsIChpLnVuaWZ5TGF5ZXJQb3NpdGlvbiA/IDEgOiAwKSB8IChpLnVuaWZ5TGF5ZXJTdHlsZSA/IDIgOiAwKSB8IChpLnVuaWZ5TGF5ZXJWaXNpYmlsaXR5ID8gNCA6IDApKTsKICAgIH0pKSwgZiAmJiAobjAociwgIjhCSU0iKSwgbjAociwgInRtbG4iKSwgVChyLCAwKSwgWjAociwgMyksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgbCA9IHsKICAgICAgICBWcnNuOiAxLAogICAgICAgIHRpbWVTY29wZTogewogICAgICAgICAgVnJzbjogMSwKICAgICAgICAgIFN0cnQ6IGYuc3RhcnQsCiAgICAgICAgICBkdXJhdGlvbjogZi5kdXJhdGlvbiwKICAgICAgICAgIGluVGltZTogZi5pblRpbWUsCiAgICAgICAgICBvdXRUaW1lOiBmLm91dFRpbWUKICAgICAgICB9LAogICAgICAgIGF1dG9TY29wZTogZi5hdXRvU2NvcGUsCiAgICAgICAgYXVkaW9MZXZlbDogZi5hdWRpb0xldmVsCiAgICAgIH07CiAgICAgIGYudHJhY2tzICYmIChsLnRyYWNrTGlzdCA9IEhuKGYudHJhY2tzKSk7CiAgICAgIHZhciBzID0gQS5sYXllclRvSWQuZ2V0KGUpIHx8IGUuaWQ7CiAgICAgIGlmICghcykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIHByb3ZpZGUgbGF5ZXIuaWQgdmFsdWUgd2hhbiB3cml0aW5nIGRvY3VtZW50IHdpdGggYW5pbWF0aW9ucyIpOwogICAgICBsLkx5ckkgPSBzLCBwMChyLCAiIiwgIm51bGwiLCBsLCAiYW5pbSIpOwogICAgfSwgITApKSwgbiAhPT0gdm9pZCAwICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiY3VzdCIpLCBUKHIsIDApLCBaMChyLCAzKSwgZXIociwgMiwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsID0gewogICAgICAgIGxheWVyVGltZTogbgogICAgICB9OwogICAgICBwMChyLCAiIiwgIm1ldGFkYXRhIiwgbCk7CiAgICB9LCAhMCkpLCB1ICYmIChuMChyLCAiOEJJTSIpLCBuMChyLCAiY21scyIpLCBUKHIsIDApLCBaMChyLCAzKSwgZXIociwgMiwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsID0gQS5sYXllclRvSWQuZ2V0KGUpIHx8IGUuaWQ7CiAgICAgIGlmICghbCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIHByb3ZpZGUgbGF5ZXIuaWQgdmFsdWUgd2hhbiB3cml0aW5nIGRvY3VtZW50IHdpdGggbGF5ZXIgY29tcHMiKTsKICAgICAgdmFyIHMgPSB7fTsKICAgICAgdS5vcmlnaW5hbEVmZmVjdHNSZWZlcmVuY2VQb2ludCAmJiAocy5vcmlnRlhSZWZQb2ludCA9IHsgSHJ6bjogdS5vcmlnaW5hbEVmZmVjdHNSZWZlcmVuY2VQb2ludC54LCBWcnRjOiB1Lm9yaWdpbmFsRWZmZWN0c1JlZmVyZW5jZVBvaW50LnkgfSksIHMuTHlySSA9IGwsIHMubGF5ZXJTZXR0aW5ncyA9IFtdOwogICAgICBmb3IgKHZhciBjID0gMCwgZCA9IHUuc2V0dGluZ3M7IGMgPCBkLmxlbmd0aDsgYysrKSB7CiAgICAgICAgdmFyIHYgPSBkW2NdLCBrID0ge307CiAgICAgICAgdi5lbmFibGVkICE9PSB2b2lkIDAgJiYgKGsuZW5hYiA9IHYuZW5hYmxlZCksIHYub2Zmc2V0ICYmIChrLk9mc3QgPSB7IEhyem46IHYub2Zmc2V0LngsIFZydGM6IHYub2Zmc2V0LnkgfSksIHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50ICYmIChrLkZYUmVmUG9pbnQgPSB7IEhyem46IHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50LngsIFZydGM6IHYuZWZmZWN0c1JlZmVyZW5jZVBvaW50LnkgfSksIGsuY29tcExpc3QgPSB2LmNvbXBMaXN0LCBzLmxheWVyU2V0dGluZ3MucHVzaChrKTsKICAgICAgfQogICAgICBwMChyLCAiIiwgIm51bGwiLCBzKTsKICAgIH0sICEwKSk7CiAgfQopOwpyMCgiUHhTYyIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gbTAociwgITApOwogIGEucGl4ZWxTb3VyY2VUeXBlID09PSAxOTg2Mjg1NjUxID8gZS5waXhlbFNvdXJjZSA9IHsKICAgIHR5cGU6ICJ2ZFBTIiwKICAgIG9yaWdpbjogeyB4OiBhLm9yaWdpbi5IcnpuLCB5OiBhLm9yaWdpbi5WcnRjIH0sCiAgICBpbnRlcnByZXRhdGlvbjogewogICAgICBpbnRlcnByZXRBbHBoYTogYS5pbnRlcnByZXRhdGlvbi5pbnRlcnByZXRBbHBoYS5zcGxpdCgiLiIpWzFdLAogICAgICBwcm9maWxlOiBhLmludGVycHJldGF0aW9uLnByb2ZpbGUKICAgIH0sCiAgICBmcmFtZVJlYWRlcjogewogICAgICB0eXBlOiAiUVRGUiIsCiAgICAgIGxpbms6IHsKICAgICAgICBuYW1lOiBhLmZyYW1lUmVhZGVyWyJMbmsgIl1bIk5tICAiXSwKICAgICAgICBmdWxsUGF0aDogYS5mcmFtZVJlYWRlclsiTG5rICJdLmZ1bGxQYXRoLAogICAgICAgIG9yaWdpbmFsUGF0aDogYS5mcmFtZVJlYWRlclsiTG5rICJdLm9yaWdpbmFsUGF0aCwKICAgICAgICByZWxhdGl2ZVBhdGg6IGEuZnJhbWVSZWFkZXJbIkxuayAiXS5yZWxQYXRoLAogICAgICAgIGFsaWFzOiBhLmZyYW1lUmVhZGVyWyJMbmsgIl0uYWxpcwogICAgICB9LAogICAgICBtZWRpYURlc2NyaXB0b3I6IGEuZnJhbWVSZWFkZXIubWVkaWFEZXNjcmlwdG9yCiAgICB9LAogICAgc2hvd0FsdGVyZWRWaWRlbzogYS5zaG93QWx0ZXJlZFZpZGVvCiAgfSA6IHIubG9nKCJVbmtub3duIHBpeGVsU291cmNlVHlwZSIpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnBpeGVsU291cmNlLCBBID0gewogICAgX25hbWU6ICIiLAogICAgX2NsYXNzSUQ6ICJQaXhlbFNvdXJjZSIsCiAgICBwaXhlbFNvdXJjZVR5cGU6IDE5ODYyODU2NTEsCiAgICBkZXNjVmVyc2lvbjogMSwKICAgIG9yaWdpbjogeyBIcnpuOiBhLm9yaWdpbi54LCBWcnRjOiBhLm9yaWdpbi55IH0sCiAgICBpbnRlcnByZXRhdGlvbjogewogICAgICBfbmFtZTogIiIsCiAgICAgIF9jbGFzc0lEOiAiZm9vdGFnZUludGVycHJldGF0aW9uIiwKICAgICAgVnJzbjogMSwKICAgICAgaW50ZXJwcmV0QWxwaGE6ICJhbHBoYUludGVycHJldGF0aW9uLiIuY29uY2F0KGEuaW50ZXJwcmV0YXRpb24uaW50ZXJwcmV0QWxwaGEpLAogICAgICBwcm9maWxlOiBhLmludGVycHJldGF0aW9uLnByb2ZpbGUKICAgIH0sCiAgICBmcmFtZVJlYWRlcjogewogICAgICBfbmFtZTogIiIsCiAgICAgIF9jbGFzc0lEOiAiRnJhbWVSZWFkZXIiLAogICAgICBmcmFtZVJlYWRlclR5cGU6IDEzNjQ0Nzc1MjIsCiAgICAgIGRlc2NWZXJzaW9uOiAxLAogICAgICAiTG5rICI6IHsKICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgX2NsYXNzSUQ6ICJFeHRlcm5hbEZpbGVMaW5rIiwKICAgICAgICBkZXNjVmVyc2lvbjogMiwKICAgICAgICAiTm0gICI6IGEuZnJhbWVSZWFkZXIubGluay5uYW1lLAogICAgICAgIGZ1bGxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsuZnVsbFBhdGgsCiAgICAgICAgb3JpZ2luYWxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsub3JpZ2luYWxQYXRoLAogICAgICAgIGFsaXM6IGEuZnJhbWVSZWFkZXIubGluay5hbGlhcywKICAgICAgICByZWxQYXRoOiBhLmZyYW1lUmVhZGVyLmxpbmsucmVsYXRpdmVQYXRoCiAgICAgIH0sCiAgICAgIG1lZGlhRGVzY3JpcHRvcjogYS5mcmFtZVJlYWRlci5tZWRpYURlc2NyaXB0b3IKICAgIH0sCiAgICBzaG93QWx0ZXJlZFZpZGVvOiBhLnNob3dBbHRlcmVkVmlkZW8KICB9OwogIHAwKHIsICIiLCAiUGl4ZWxTb3VyY2UiLCBBKTsKfSk7CnIwKCJ2c3RrIiwgWDAoInZlY3RvclN0cm9rZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBtMChyKTsKICBlLnZlY3RvclN0cm9rZSA9IHsKICAgIHN0cm9rZUVuYWJsZWQ6IEEuc3Ryb2tlRW5hYmxlZCwKICAgIGZpbGxFbmFibGVkOiBBLmZpbGxFbmFibGVkLAogICAgbGluZVdpZHRoOiBGMChBLnN0cm9rZVN0eWxlTGluZVdpZHRoKSwKICAgIGxpbmVEYXNoT2Zmc2V0OiBGMChBLnN0cm9rZVN0eWxlTGluZURhc2hPZmZzZXQpLAogICAgbWl0ZXJMaW1pdDogQS5zdHJva2VTdHlsZU1pdGVyTGltaXQsCiAgICBsaW5lQ2FwVHlwZTogY2kuZGVjb2RlKEEuc3Ryb2tlU3R5bGVMaW5lQ2FwVHlwZSksCiAgICBsaW5lSm9pblR5cGU6IHNpLmRlY29kZShBLnN0cm9rZVN0eWxlTGluZUpvaW5UeXBlKSwKICAgIGxpbmVBbGlnbm1lbnQ6IGJpLmRlY29kZShBLnN0cm9rZVN0eWxlTGluZUFsaWdubWVudCksCiAgICBzY2FsZUxvY2s6IEEuc3Ryb2tlU3R5bGVTY2FsZUxvY2ssCiAgICBzdHJva2VBZGp1c3Q6IEEuc3Ryb2tlU3R5bGVTdHJva2VBZGp1c3QsCiAgICBsaW5lRGFzaFNldDogQS5zdHJva2VTdHlsZUxpbmVEYXNoU2V0Lm1hcChGMCksCiAgICBibGVuZE1vZGU6IG9yLmRlY29kZShBLnN0cm9rZVN0eWxlQmxlbmRNb2RlKSwKICAgIG9wYWNpdHk6IEEwKEEuc3Ryb2tlU3R5bGVPcGFjaXR5KSwKICAgIGNvbnRlbnQ6IEQyKEEuc3Ryb2tlU3R5bGVDb250ZW50KSwKICAgIHJlc29sdXRpb246IEEuc3Ryb2tlU3R5bGVSZXNvbHV0aW9uCiAgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEsIEEsIHQsIGkgPSBlLnZlY3RvclN0cm9rZSwgbiA9IHsKICAgIHN0cm9rZVN0eWxlVmVyc2lvbjogMiwKICAgIHN0cm9rZUVuYWJsZWQ6ICEhaS5zdHJva2VFbmFibGVkLAogICAgZmlsbEVuYWJsZWQ6ICEhaS5maWxsRW5hYmxlZCwKICAgIHN0cm9rZVN0eWxlTGluZVdpZHRoOiBpLmxpbmVXaWR0aCB8fCB7IHZhbHVlOiAzLCB1bml0czogIlBvaW50cyIgfSwKICAgIHN0cm9rZVN0eWxlTGluZURhc2hPZmZzZXQ6IGkubGluZURhc2hPZmZzZXQgfHwgeyB2YWx1ZTogMCwgdW5pdHM6ICJQb2ludHMiIH0sCiAgICBzdHJva2VTdHlsZU1pdGVyTGltaXQ6IChhID0gaS5taXRlckxpbWl0KSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMTAwLAogICAgc3Ryb2tlU3R5bGVMaW5lQ2FwVHlwZTogY2kuZW5jb2RlKGkubGluZUNhcFR5cGUpLAogICAgc3Ryb2tlU3R5bGVMaW5lSm9pblR5cGU6IHNpLmVuY29kZShpLmxpbmVKb2luVHlwZSksCiAgICBzdHJva2VTdHlsZUxpbmVBbGlnbm1lbnQ6IGJpLmVuY29kZShpLmxpbmVBbGlnbm1lbnQpLAogICAgc3Ryb2tlU3R5bGVTY2FsZUxvY2s6ICEhaS5zY2FsZUxvY2ssCiAgICBzdHJva2VTdHlsZVN0cm9rZUFkanVzdDogISFpLnN0cm9rZUFkanVzdCwKICAgIHN0cm9rZVN0eWxlTGluZURhc2hTZXQ6IGkubGluZURhc2hTZXQgfHwgW10sCiAgICBzdHJva2VTdHlsZUJsZW5kTW9kZTogb3IuZW5jb2RlKGkuYmxlbmRNb2RlKSwKICAgIHN0cm9rZVN0eWxlT3BhY2l0eTogJDAoKEEgPSBpLm9wYWNpdHkpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAxKSwKICAgIHN0cm9rZVN0eWxlQ29udGVudDogeDIoaS5jb250ZW50IHx8IHsgdHlwZTogImNvbG9yIiwgY29sb3I6IHsgcjogMCwgZzogMCwgYjogMCB9IH0pLmRlc2NyaXB0b3IsCiAgICBzdHJva2VTdHlsZVJlc29sdXRpb246ICh0ID0gaS5yZXNvbHV0aW9uKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogNzIKICB9OwogIHAwKHIsICIiLCAic3Ryb2tlU3R5bGUiLCBuKTsKfSk7CnIwKAogICJhcnRiIiwKICAvLyBwZXItbGF5ZXIgYXJib2FyZCBpbmZvCiAgWDAoImFydGJvYXJkIiksCiAgZnVuY3Rpb24ociwgZSwgYSkgewogICAgdmFyIEEgPSBtMChyKSwgdCA9IEEuYXJ0Ym9hcmRSZWN0OwogICAgZS5hcnRib2FyZCA9IHsKICAgICAgcmVjdDogeyB0b3A6IHRbIlRvcCAiXSwgbGVmdDogdC5MZWZ0LCBib3R0b206IHQuQnRvbSwgcmlnaHQ6IHQuUmdodCB9LAogICAgICBndWlkZUluZGljZXM6IEEuZ3VpZGVJbmRlY2VzLAogICAgICBwcmVzZXROYW1lOiBBLmFydGJvYXJkUHJlc2V0TmFtZSwKICAgICAgY29sb3I6IFNyKEFbIkNsciAiXSksCiAgICAgIGJhY2tncm91bmRUeXBlOiBBLmFydGJvYXJkQmFja2dyb3VuZFR5cGUKICAgIH0sIEgociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBID0gZS5hcnRib2FyZCwgdCA9IEEucmVjdCwgaSA9IHsKICAgICAgYXJ0Ym9hcmRSZWN0OiB7ICJUb3AgIjogdC50b3AsIExlZnQ6IHQubGVmdCwgQnRvbTogdC5ib3R0b20sIFJnaHQ6IHQucmlnaHQgfSwKICAgICAgZ3VpZGVJbmRlY2VzOiBBLmd1aWRlSW5kaWNlcyB8fCBbXSwKICAgICAgYXJ0Ym9hcmRQcmVzZXROYW1lOiBBLnByZXNldE5hbWUgfHwgIiIsCiAgICAgICJDbHIgIjogRHIoQS5jb2xvciksCiAgICAgIGFydGJvYXJkQmFja2dyb3VuZFR5cGU6IChhID0gQS5iYWNrZ3JvdW5kVHlwZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEKICAgIH07CiAgICBwMChyLCAiIiwgImFydGJvYXJkIiwgaSk7CiAgfQopOwpyMCgic24yUCIsIFgwKCJ1c2luZ0FsaWduZWRSZW5kZXJpbmciKSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBlLnVzaW5nQWxpZ25lZFJlbmRlcmluZyA9ICEhUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUudXNpbmdBbGlnbmVkUmVuZGVyaW5nID8gMSA6IDApOwp9KTsKdmFyIFBhID0gWyJ1bmtub3duIiwgInZlY3RvciIsICJyYXN0ZXIiLCAiaW1hZ2Ugc3RhY2siXTsKZnVuY3Rpb24gYWYocikgewogIHZhciBlLCBhLCBBLCB0LCBpLCBuLCBmID0gaChoKHsgc3R5bGU6IFBBLmRlY29kZShyLndhcnBTdHlsZSkgfSwgci53YXJwVmFsdWVzID8geyB2YWx1ZXM6IHIud2FycFZhbHVlcyB9IDogeyB2YWx1ZTogci53YXJwVmFsdWUgfHwgMCB9KSwgeyBwZXJzcGVjdGl2ZTogci53YXJwUGVyc3BlY3RpdmUgfHwgMCwgcGVyc3BlY3RpdmVPdGhlcjogci53YXJwUGVyc3BlY3RpdmVPdGhlciB8fCAwLCByb3RhdGU6IHkyLmRlY29kZShyLndhcnBSb3RhdGUpLCBib3VuZHM6IHIuYm91bmRzICYmIHsKICAgIHRvcDogY2Eoci5ib3VuZHNbIlRvcCAiXSksCiAgICBsZWZ0OiBjYShyLmJvdW5kcy5MZWZ0KSwKICAgIGJvdHRvbTogY2Eoci5ib3VuZHMuQnRvbSksCiAgICByaWdodDogY2Eoci5ib3VuZHMuUmdodCkKICB9LCB1T3JkZXI6IHIudU9yZGVyLCB2T3JkZXI6IHIudk9yZGVyIH0pOwogIChyLmRlZm9ybU51bVJvd3MgIT0gbnVsbCB8fCByLmRlZm9ybU51bUNvbHMgIT0gbnVsbCkgJiYgKGYuZGVmb3JtTnVtUm93cyA9IHIuZGVmb3JtTnVtUm93cywgZi5kZWZvcm1OdW1Db2xzID0gci5kZWZvcm1OdW1Db2xzKTsKICB2YXIgdSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwOwogIGlmICh1KSB7CiAgICBmLmN1c3RvbUVudmVsb3BlV2FycCA9IHsKICAgICAgbWVzaFBvaW50czogW10KICAgIH07CiAgICBmb3IgKHZhciBvID0gKChlID0gdS5tZXNoUG9pbnRzLmZpbmQoZnVuY3Rpb24oYykgewogICAgICByZXR1cm4gYy50eXBlID09PSAiSHJ6biI7CiAgICB9KSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS52YWx1ZXMpIHx8IFtdLCBsID0gKChhID0gdS5tZXNoUG9pbnRzLmZpbmQoZnVuY3Rpb24oYykgewogICAgICByZXR1cm4gYy50eXBlID09PSAiVnJ0YyI7CiAgICB9KSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS52YWx1ZXMpIHx8IFtdLCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspCiAgICAgIGYuY3VzdG9tRW52ZWxvcGVXYXJwLm1lc2hQb2ludHMucHVzaCh7IHg6IG9bc10sIHk6IGxbc10gfSk7CiAgICAodS5xdWlsdFNsaWNlWCB8fCB1LnF1aWx0U2xpY2VZKSAmJiAoZi5jdXN0b21FbnZlbG9wZVdhcnAucXVpbHRTbGljZVggPSAoKHQgPSAoQSA9IHUucXVpbHRTbGljZVgpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEFbMF0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmFsdWVzKSB8fCBbXSwgZi5jdXN0b21FbnZlbG9wZVdhcnAucXVpbHRTbGljZVkgPSAoKG4gPSAoaSA9IHUucXVpbHRTbGljZVkpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlbMF0pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4udmFsdWVzKSB8fCBbXSk7CiAgfQogIHJldHVybiBmOwp9CmZ1bmN0aW9uIHpBKHIpIHsKICB2YXIgZSwgYTsKICByZXR1cm4gci5kZWZvcm1OdW1Db2xzICE9IG51bGwgfHwgci5kZWZvcm1OdW1Sb3dzICE9IG51bGwgfHwgKChlID0gci5jdXN0b21FbnZlbG9wZVdhcnApID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucXVpbHRTbGljZVgpIHx8ICgoYSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLnF1aWx0U2xpY2VZKTsKfQpmdW5jdGlvbiBaZShyKSB7CiAgdmFyIGUgPSByLmJvdW5kcywgYSA9IGgoaCh7IHdhcnBTdHlsZTogUEEuZW5jb2RlKHIuc3R5bGUpIH0sIHIudmFsdWVzID8geyB3YXJwVmFsdWVzOiByLnZhbHVlcyB9IDogeyB3YXJwVmFsdWU6IHIudmFsdWUgfHwgMCB9KSwgeyB3YXJwUGVyc3BlY3RpdmU6IHIucGVyc3BlY3RpdmUgfHwgMCwgd2FycFBlcnNwZWN0aXZlT3RoZXI6IHIucGVyc3BlY3RpdmVPdGhlciB8fCAwLCB3YXJwUm90YXRlOiB5Mi5lbmNvZGUoci5yb3RhdGUpLCBib3VuZHM6ICgKICAgIC8qMSA/IHsgLy8gdGVzdGluZwogICAgICAgIF9jbGFzc0lEOiAnY2xhc3NGbG9hdFJlY3QnLAogICAgICAgICdUb3AgJzogYm91bmRzICYmIGJvdW5kcy50b3AgJiYgYm91bmRzLnRvcC52YWx1ZSB8fCAwLAogICAgICAgIExlZnQ6IGJvdW5kcyAmJiBib3VuZHMubGVmdCAmJiBib3VuZHMubGVmdC52YWx1ZSB8fCAwLAogICAgICAgIEJ0b206IGJvdW5kcyAmJiBib3VuZHMuYm90dG9tICYmIGJvdW5kcy5ib3R0b20udmFsdWUgfHwgMCwKICAgICAgICBSZ2h0OiBib3VuZHMgJiYgYm91bmRzLnJpZ2h0ICYmIGJvdW5kcy5yaWdodC52YWx1ZSB8fCAwLAogICAgfSA6Ki8KICAgIHsKICAgICAgIlRvcCAiOiBEMChlICYmIGUudG9wIHx8IHsgdW5pdHM6ICJQaXhlbHMiLCB2YWx1ZTogMCB9LCAiYm91bmRzLnRvcCIpLAogICAgICBMZWZ0OiBEMChlICYmIGUubGVmdCB8fCB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfSwgImJvdW5kcy5sZWZ0IiksCiAgICAgIEJ0b206IEQwKGUgJiYgZS5ib3R0b20gfHwgeyB1bml0czogIlBpeGVscyIsIHZhbHVlOiAwIH0sICJib3VuZHMuYm90dG9tIiksCiAgICAgIFJnaHQ6IEQwKGUgJiYgZS5yaWdodCB8fCB7IHVuaXRzOiAiUGl4ZWxzIiwgdmFsdWU6IDAgfSwgImJvdW5kcy5yaWdodCIpCiAgICB9CiAgKSwgdU9yZGVyOiByLnVPcmRlciB8fCAwLCB2T3JkZXI6IHIudk9yZGVyIHx8IDAgfSksIEEgPSB6QShyKTsKICBpZiAoQSkgewogICAgdmFyIHQgPSBhOwogICAgdC5kZWZvcm1OdW1Sb3dzID0gci5kZWZvcm1OdW1Sb3dzIHx8IDAsIHQuZGVmb3JtTnVtQ29scyA9IHIuZGVmb3JtTnVtQ29scyB8fCAwOwogIH0KICB2YXIgaSA9IHIuY3VzdG9tRW52ZWxvcGVXYXJwOwogIGlmIChpKSB7CiAgICB2YXIgbiA9IGkubWVzaFBvaW50cyB8fCBbXTsKICAgIGlmIChBKSB7CiAgICAgIHZhciB0ID0gYTsKICAgICAgdC5jdXN0b21FbnZlbG9wZVdhcnAgPSB7CiAgICAgICAgX25hbWU6ICIiLAogICAgICAgIF9jbGFzc0lEOiAiY3VzdG9tRW52ZWxvcGVXYXJwIiwKICAgICAgICBxdWlsdFNsaWNlWDogW3sKICAgICAgICAgIHR5cGU6ICJxdWlsdFNsaWNlWCIsCiAgICAgICAgICB2YWx1ZXM6IGkucXVpbHRTbGljZVggfHwgW10KICAgICAgICB9XSwKICAgICAgICBxdWlsdFNsaWNlWTogW3sKICAgICAgICAgIHR5cGU6ICJxdWlsdFNsaWNlWSIsCiAgICAgICAgICB2YWx1ZXM6IGkucXVpbHRTbGljZVkgfHwgW10KICAgICAgICB9XSwKICAgICAgICBtZXNoUG9pbnRzOiBbCiAgICAgICAgICB7IHR5cGU6ICJIcnpuIiwgdmFsdWVzOiBuLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICAgIHJldHVybiB1Lng7CiAgICAgICAgICB9KSB9LAogICAgICAgICAgeyB0eXBlOiAiVnJ0YyIsIHZhbHVlczogbi5tYXAoZnVuY3Rpb24odSkgewogICAgICAgICAgICByZXR1cm4gdS55OwogICAgICAgICAgfSkgfQogICAgICAgIF0KICAgICAgfTsKICAgIH0gZWxzZQogICAgICBhLmN1c3RvbUVudmVsb3BlV2FycCA9IHsKICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgX2NsYXNzSUQ6ICJjdXN0b21FbnZlbG9wZVdhcnAiLAogICAgICAgIG1lc2hQb2ludHM6IFsKICAgICAgICAgIHsgdHlwZTogIkhyem4iLCB2YWx1ZXM6IG4ubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIGYueDsKICAgICAgICAgIH0pIH0sCiAgICAgICAgICB7IHR5cGU6ICJWcnRjIiwgdmFsdWVzOiBuLm1hcChmdW5jdGlvbihmKSB7CiAgICAgICAgICAgIHJldHVybiBmLnk7CiAgICAgICAgICB9KSB9CiAgICAgICAgXQogICAgICB9OwogIH0KICByZXR1cm4gYTsKfQpyMCgiUGxMZCIsIFgwKCJwbGFjZWRMYXllciIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFIwKHIpICE9PSAicGxjTCIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUGxMZCBzaWduYXR1cmUiKTsKICBpZiAoTChyKSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQbExkIHZlcnNpb24iKTsKICB2YXIgQSA9IHhyKHIsIDEpLCB0ID0gTChyKSwgaSA9IEwocik7CiAgTChyKTsKICB2YXIgbiA9IEwocik7CiAgaWYgKCFQYVtuXSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQbExkIHR5cGUiKTsKICBmb3IgKHZhciBmID0gW10sIHUgPSAwOyB1IDwgODsgdSsrKQogICAgZi5wdXNoKElyKHIpKTsKICB2YXIgbyA9IEwocik7CiAgaWYgKG8gIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgV2FycCB2ZXJzaW9uICIuY29uY2F0KG8pKTsKICB2YXIgbCA9IG0wKHIpOwogIGUucGxhY2VkTGF5ZXIgPSBlLnBsYWNlZExheWVyIHx8IHsKICAgIGlkOiBBLAogICAgdHlwZTogUGFbbl0sCiAgICBwYWdlTnVtYmVyOiB0LAogICAgdG90YWxQYWdlczogaSwKICAgIHRyYW5zZm9ybTogZiwKICAgIHdhcnA6IGFmKGwpCiAgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLnBsYWNlZExheWVyOwogIGlmIChuMChyLCAicGxjTCIpLCB0MChyLCAzKSwgIWEuaWQgfHwgdHlwZW9mIGEuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KGEuaWQpKQogICAgdGhyb3cgbmV3IEVycm9yKCJQbGFjZWQgbGF5ZXIgSUQgbXVzdCBiZSBpbiBhIEdVSUQgZm9ybWF0IChleGFtcGxlOiAyMDk1M2RkYi05MzkxLTExZWMtYjRmMS1jMTU2NzRmNTBiYzQpIik7CiAgaWYgKGthKHIsIGEuaWQsIDEpLCB0MChyLCAxKSwgdDAociwgMSksIHQwKHIsIDE2KSwgUGEuaW5kZXhPZihhLnR5cGUpID09PSAtMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwbGFjZWRMYXllciB0eXBlIik7CiAgdDAociwgUGEuaW5kZXhPZihhLnR5cGUpKTsKICBmb3IgKHZhciBBID0gMDsgQSA8IDg7IEErKykKICAgIEZyKHIsIGEudHJhbnNmb3JtW0FdKTsKICB0MChyLCAwKTsKICB2YXIgdCA9IGVmKGEpLCBpID0gekEodCksIG4gPSBpID8gInF1aWx0V2FycCIgOiAid2FycCI7CiAgcDAociwgIiIsIG4sIFplKHQpLCBuKTsKfSk7CmZ1bmN0aW9uIEU0KHIpIHsKICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlci5zbGljZShyLmJ5dGVPZmZzZXQpLCAwLCByLmJ5dGVMZW5ndGggLyA0KTsKfQpmdW5jdGlvbiBaNChyKSB7CiAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShyLmJ1ZmZlci5zbGljZShyLmJ5dGVPZmZzZXQpLCAwLCByLmJ5dGVMZW5ndGggLyA0KTsKfQpmdW5jdGlvbiBsQShyKSB7CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCk7Cn0KZnVuY3Rpb24gaGUocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSArPSAyKQogICAgZS5wdXNoKHsgeDogclthXSwgeTogclthICsgMV0gfSk7CiAgcmV0dXJuIGU7Cn0KZnVuY3Rpb24gbjIocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmxlbmd0aDsgYSsrKQogICAgZS5wdXNoKHJbYV0ueCwgclthXS55KTsKICByZXR1cm4gZTsKfQpmdW5jdGlvbiBTaShyKSB7CiAgcmV0dXJuIGhlKEU0KHIpKTsKfQpmdW5jdGlvbiBmMihyKSB7CiAgcmV0dXJuIHsKICAgIHg6IEYwKHIuSHJ6biksCiAgICB5OiBGMChyLlZydGMpCiAgfTsKfQpmdW5jdGlvbiBvMihyKSB7CiAgcmV0dXJuIHsKICAgIF9uYW1lOiAiIiwKICAgIF9jbGFzc0lEOiAiUG50ICIsCiAgICBIcnpuOiBEMChyLngsICJ4IiksCiAgICBWcnRjOiBEMChyLnksICJ5IikKICB9Owp9CmZ1bmN0aW9uIEI0KHIsIGUpIHsKICB2YXIgYSA9IHsKICAgIG5hbWU6IHJbIk5tICAiXSwKICAgIG9wYWNpdHk6IEEwKHIuYmxlbmRPcHRpb25zLk9wY3QpLAogICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoci5ibGVuZE9wdGlvbnNbIk1kICAiXSksCiAgICBlbmFibGVkOiByLmVuYWIsCiAgICBoYXNPcHRpb25zOiByLmhhc29wdGlvbnMsCiAgICBmb3JlZ3JvdW5kQ29sb3I6IFNyKHIuRnJnQyksCiAgICBiYWNrZ3JvdW5kQ29sb3I6IFNyKHIuQmNrQykKICB9OwogIGlmICgiRmx0ciIgaW4gcikKICAgIHN3aXRjaCAoci5GbHRyLl9jbGFzc0lEKSB7CiAgICAgIGNhc2UgImJveGJsdXIiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJib3ggYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJHc25CIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZ2F1c3NpYW4gYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNdG5CIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibW90aW9uIGJsdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFuZ2xlOiByLkZsdHIuQW5nbCwKICAgICAgICAgIGRpc3RhbmNlOiBGMChyLkZsdHIuRHN0bikKICAgICAgICB9IH0pOwogICAgICBjYXNlICJSZGxCIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicmFkaWFsIGJsdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFtb3VudDogci5GbHRyLkFtbnQsCiAgICAgICAgICBtZXRob2Q6IHUxLmRlY29kZShyLkZsdHIuQmxyTSksCiAgICAgICAgICBxdWFsaXR5OiBsMS5kZWNvZGUoci5GbHRyLkJsclEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAic2hhcGVCbHVyIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic2hhcGUgYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSksCiAgICAgICAgICBjdXN0b21TaGFwZTogeyBuYW1lOiByLkZsdHIuY3VzdG9tU2hhcGVbIk5tICAiXSwgaWQ6IHIuRmx0ci5jdXN0b21TaGFwZS5JZG50IH0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJTbXJCIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic21hcnQgYmx1ciIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiByLkZsdHJbIlJkcyAiXSwKICAgICAgICAgIHRocmVzaG9sZDogci5GbHRyLlRoc2gsCiAgICAgICAgICBxdWFsaXR5OiBzMS5kZWNvZGUoci5GbHRyLlNtQlEpLAogICAgICAgICAgbW9kZTogYzEuZGVjb2RlKHIuRmx0ci5TbUJNKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInN1cmZhY2VCbHVyIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic3VyZmFjZSBibHVyIiwgZmlsdGVyOiB7CiAgICAgICAgICByYWRpdXM6IEYwKHIuRmx0clsiUmRzICJdKSwKICAgICAgICAgIHRocmVzaG9sZDogci5GbHRyLlRoc2gKICAgICAgICB9IH0pOwogICAgICBjYXNlICJEc3BsIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZGlzcGxhY2UiLCBmaWx0ZXI6IHsKICAgICAgICAgIGhvcml6b250YWxTY2FsZTogci5GbHRyLkhyelMsCiAgICAgICAgICB2ZXJ0aWNhbFNjYWxlOiByLkZsdHIuVnJ0UywKICAgICAgICAgIGRpc3BsYWNlbWVudE1hcDogYjEuZGVjb2RlKHIuRmx0ci5Ec3BNKSwKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpLAogICAgICAgICAgZGlzcGxhY2VtZW50RmlsZTogewogICAgICAgICAgICBzaWduYXR1cmU6IHIuRmx0ci5Ec3BGLnNpZywKICAgICAgICAgICAgcGF0aDogci5GbHRyLkRzcEYucGF0aAogICAgICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIGRlY29kZWQgaW5jb3JyZWN0bHkgPz8/CiAgICAgICAgICB9CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUG5jaCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBpbmNoIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IHIuRmx0ci5BbW50CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUGxyICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBvbGFyIGNvb3JkaW5hdGVzIiwgZmlsdGVyOiB7CiAgICAgICAgICBjb252ZXJzaW9uOiBkMS5kZWNvZGUoci5GbHRyLkNudnIpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUnBsZSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInJpcHBsZSIsIGZpbHRlcjogewogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udCwKICAgICAgICAgIHNpemU6IGgxLmRlY29kZShyLkZsdHIuUnBsUykKICAgICAgICB9IH0pOwogICAgICBjYXNlICJTaHIgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic2hlYXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIHNoZWFyUG9pbnRzOiByLkZsdHIuU2hyUC5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4geyB4OiBmLkhyem4sIHk6IGYuVnJ0YyB9OwogICAgICAgICAgfSksCiAgICAgICAgICBzaGVhclN0YXJ0OiByLkZsdHIuU2hyUywKICAgICAgICAgIHNoZWFyRW5kOiByLkZsdHIuU2hyRSwKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiU3BociI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNwaGVyaXplIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IHIuRmx0ci5BbW50LAogICAgICAgICAgbW9kZTogdjEuZGVjb2RlKHIuRmx0ci5TcGhNKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIlR3cmwiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJ0d2lybCIsIGZpbHRlcjogewogICAgICAgICAgYW5nbGU6IHIuRmx0ci5BbmdsCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiV2F2ZSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIndhdmUiLCBmaWx0ZXI6IHsKICAgICAgICAgIG51bWJlck9mR2VuZXJhdG9yczogci5GbHRyLk5tYkcsCiAgICAgICAgICB0eXBlOiBrMS5kZWNvZGUoci5GbHRyLld2dHApLAogICAgICAgICAgd2F2ZWxlbmd0aDogeyBtaW46IHIuRmx0ci5XTE1uLCBtYXg6IHIuRmx0ci5XTE14IH0sCiAgICAgICAgICBhbXBsaXR1ZGU6IHsgbWluOiByLkZsdHIuQW1NbiwgbWF4OiByLkZsdHIuQW1NeCB9LAogICAgICAgICAgc2NhbGU6IHsgeDogci5GbHRyLlNjbEgsIHk6IHIuRmx0ci5TY2xWIH0sCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuUm5kUywKICAgICAgICAgIHVuZGVmaW5lZEFyZWFzOiBVYS5kZWNvZGUoci5GbHRyLlVuZEEpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiWmdaZyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInppZ3phZyIsIGZpbHRlcjogewogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udCwKICAgICAgICAgIHJpZGdlczogci5GbHRyLk5tYlIsCiAgICAgICAgICBzdHlsZTogZzEuZGVjb2RlKHIuRmx0ci5aWlR5KQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkFkTnMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJhZGQgbm9pc2UiLCBmaWx0ZXI6IHsKICAgICAgICAgIGFtb3VudDogQTAoci5GbHRyLk5vc2UpLAogICAgICAgICAgZGlzdHJpYnV0aW9uOiBtMS5kZWNvZGUoci5GbHRyLkRzdHIpLAogICAgICAgICAgbW9ub2Nocm9tYXRpYzogci5GbHRyLk1uY2gsCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkRzdFMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJkdXN0IGFuZCBzY3JhdGNoZXMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogci5GbHRyWyJSZHMgIl0sCiAgICAgICAgICB0aHJlc2hvbGQ6IHIuRmx0ci5UaHNoCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTWRuICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1lZGlhbiIsIGZpbHRlcjogewogICAgICAgICAgcmFkaXVzOiBGMChyLkZsdHJbIlJkcyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJkZW5vaXNlIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicmVkdWNlIG5vaXNlIiwgZmlsdGVyOiB7CiAgICAgICAgICBwcmVzZXQ6IHIuRmx0ci5wcmVzZXQsCiAgICAgICAgICByZW1vdmVKcGVnQXJ0aWZhY3Q6IHIuRmx0ci5yZW1vdmVKUEVHQXJ0aWZhY3QsCiAgICAgICAgICByZWR1Y2VDb2xvck5vaXNlOiBBMChyLkZsdHIuQ2xOcyksCiAgICAgICAgICBzaGFycGVuRGV0YWlsczogQTAoci5GbHRyLlNocnApLAogICAgICAgICAgY2hhbm5lbERlbm9pc2U6IHIuRmx0ci5jaGFubmVsRGVub2lzZS5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4gaCh7IGNoYW5uZWxzOiBmLkNobmwubWFwKEUyLmRlY29kZSksIGFtb3VudDogZi5BbW50IH0sIGYuRWRnRiA/IHsgcHJlc2VydmVEZXRhaWxzOiBmLkVkZ0YgfSA6IHt9KTsKICAgICAgICAgIH0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiQ2xySCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImNvbG9yIGhhbGZ0b25lIiwgZmlsdGVyOiB7CiAgICAgICAgICByYWRpdXM6IHIuRmx0clsiUmRzICJdLAogICAgICAgICAgYW5nbGUxOiByLkZsdHIuQW5nMSwKICAgICAgICAgIGFuZ2xlMjogci5GbHRyLkFuZzIsCiAgICAgICAgICBhbmdsZTM6IHIuRmx0ci5BbmczLAogICAgICAgICAgYW5nbGU0OiByLkZsdHIuQW5nNAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkNyc3QiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJjcnlzdGFsbGl6ZSIsIGZpbHRlcjogewogICAgICAgICAgY2VsbFNpemU6IHIuRmx0ci5DbFN6LAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNenRuIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibWV6em90aW50IiwgZmlsdGVyOiB7CiAgICAgICAgICB0eXBlOiBwMS5kZWNvZGUoci5GbHRyLk16dFQpLAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJNc2MgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAibW9zYWljIiwgZmlsdGVyOiB7CiAgICAgICAgICBjZWxsU2l6ZTogRjAoci5GbHRyLkNsU3opCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiUG50bCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBvaW50aWxsaXplIiwgZmlsdGVyOiB7CiAgICAgICAgICBjZWxsU2l6ZTogci5GbHRyLkNsU3osCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkNsZHMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJjbG91ZHMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5GbFJzCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiRGZyQyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImRpZmZlcmVuY2UgY2xvdWRzIiwgZmlsdGVyOiB7CiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScwogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkZicnMiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJmaWJlcnMiLCBmaWx0ZXI6IHsKICAgICAgICAgIHZhcmlhbmNlOiByLkZsdHIuVnJuYywKICAgICAgICAgIHN0cmVuZ3RoOiByLkZsdHIuU3RyZywKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5SbmRTCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTG5zRiI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImxlbnMgZmxhcmUiLCBmaWx0ZXI6IHsKICAgICAgICAgIGJyaWdodG5lc3M6IHIuRmx0ci5CcmdoLAogICAgICAgICAgcG9zaXRpb246IHsgeDogci5GbHRyLkZsckMuSHJ6biwgeTogci5GbHRyLkZsckMuVnJ0YyB9LAogICAgICAgICAgbGVuc1R5cGU6IHcxLmRlY29kZShyLkZsdHJbIkxucyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJzbWFydFNoYXJwZW4iOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJzbWFydCBzaGFycGVuIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IEEwKHIuRmx0ci5BbW50KSwKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pLAogICAgICAgICAgdGhyZXNob2xkOiByLkZsdHIuVGhzaCwKICAgICAgICAgIGFuZ2xlOiByLkZsdHIuQW5nbCwKICAgICAgICAgIG1vcmVBY2N1cmF0ZTogci5GbHRyLm1vcmVBY2N1cmF0ZSwKICAgICAgICAgIGJsdXI6IHkxLmRlY29kZShyLkZsdHIuYmx1ciksCiAgICAgICAgICBwcmVzZXQ6IHIuRmx0ci5wcmVzZXQsCiAgICAgICAgICBzaGFkb3c6IHsKICAgICAgICAgICAgZmFkZUFtb3VudDogQTAoci5GbHRyLnNkd00uQW1udCksCiAgICAgICAgICAgIHRvbmFsV2lkdGg6IEEwKHIuRmx0ci5zZHdNLldkdGgpLAogICAgICAgICAgICByYWRpdXM6IHIuRmx0ci5zZHdNWyJSZHMgIl0KICAgICAgICAgIH0sCiAgICAgICAgICBoaWdobGlnaHQ6IHsKICAgICAgICAgICAgZmFkZUFtb3VudDogQTAoci5GbHRyLmhnbE0uQW1udCksCiAgICAgICAgICAgIHRvbmFsV2lkdGg6IEEwKHIuRmx0ci5oZ2xNLldkdGgpLAogICAgICAgICAgICByYWRpdXM6IHIuRmx0ci5oZ2xNWyJSZHMgIl0KICAgICAgICAgIH0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJVbnNNIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAidW5zaGFycCBtYXNrIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbW91bnQ6IEEwKHIuRmx0ci5BbW50KSwKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pLAogICAgICAgICAgdGhyZXNob2xkOiByLkZsdHIuVGhzaAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkRmcyAiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJkaWZmdXNlIiwgZmlsdGVyOiB7CiAgICAgICAgICBtb2RlOiBFMS5kZWNvZGUoci5GbHRyWyJNZCAgIl0pLAogICAgICAgICAgcmFuZG9tU2VlZDogci5GbHRyLkZsUnMKICAgICAgICB9IH0pOwogICAgICBjYXNlICJFbWJzIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZW1ib3NzIiwgZmlsdGVyOiB7CiAgICAgICAgICBhbmdsZTogci5GbHRyLkFuZ2wsCiAgICAgICAgICBoZWlnaHQ6IHIuRmx0ci5IZ2h0LAogICAgICAgICAgYW1vdW50OiByLkZsdHIuQW1udAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkV4dHIiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJleHRydWRlIiwgZmlsdGVyOiB7CiAgICAgICAgICB0eXBlOiBaMS5kZWNvZGUoci5GbHRyLkV4dFQpLAogICAgICAgICAgc2l6ZTogci5GbHRyLkV4dFMsCiAgICAgICAgICBkZXB0aDogci5GbHRyLkV4dEQsCiAgICAgICAgICBkZXB0aE1vZGU6IEIxLmRlY29kZShyLkZsdHIuRXh0UiksCiAgICAgICAgICByYW5kb21TZWVkOiByLkZsdHIuRmxScywKICAgICAgICAgIHNvbGlkRnJvbnRGYWNlczogci5GbHRyLkV4dEYsCiAgICAgICAgICBtYXNrSW5jb21wbGV0ZUJsb2Nrczogci5GbHRyLkV4dE0KICAgICAgICB9IH0pOwogICAgICBjYXNlICJUbHMgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAidGlsZXMiLCBmaWx0ZXI6IHsKICAgICAgICAgIG51bWJlck9mVGlsZXM6IHIuRmx0ci5UbE5tLAogICAgICAgICAgbWF4aW11bU9mZnNldDogci5GbHRyLlRsT2YsCiAgICAgICAgICBmaWxsRW1wdHlBcmVhV2l0aDogSTEuZGVjb2RlKHIuRmx0ci5GbENsKSwKICAgICAgICAgIHJhbmRvbVNlZWQ6IHIuRmx0ci5GbFJzCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiVHJjQyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInRyYWNlIGNvbnRvdXIiLCBmaWx0ZXI6IHsKICAgICAgICAgIGxldmVsOiByLkZsdHJbIkx2bCAiXSwKICAgICAgICAgIGVkZ2U6IEYxLmRlY29kZShyLkZsdHJbIkVkZyAiXSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJXbmQgIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAid2luZCIsIGZpbHRlcjogewogICAgICAgICAgbWV0aG9kOiBDMS5kZWNvZGUoci5GbHRyLlduZE0pLAogICAgICAgICAgZGlyZWN0aW9uOiBXMS5kZWNvZGUoci5GbHRyLkRyY3QpCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiRG50ciI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImRlLWludGVybGFjZSIsIGZpbHRlcjogewogICAgICAgICAgZWxpbWluYXRlOiBfMS5kZWNvZGUoci5GbHRyLkludEUpLAogICAgICAgICAgbmV3RmllbGRzQnk6IEcxLmRlY29kZShyLkZsdHIuSW50QykKICAgICAgICB9IH0pOwogICAgICBjYXNlICJDc3RtIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiY3VzdG9tIiwgZmlsdGVyOiB7CiAgICAgICAgICBzY2FsZTogci5GbHRyWyJTY2wgIl0sCiAgICAgICAgICBvZmZzZXQ6IHIuRmx0ci5PZnN0LAogICAgICAgICAgbWF0cml4OiByLkZsdHIuTXRyeAogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgIkhnaFAiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJoaWdoIHBhc3MiLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTXhtICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1heGltdW0iLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTW5tICI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm1pbmltdW0iLCBmaWx0ZXI6IHsKICAgICAgICAgIHJhZGl1czogRjAoci5GbHRyWyJSZHMgIl0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiT2ZzdCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm9mZnNldCIsIGZpbHRlcjogewogICAgICAgICAgaG9yaXpvbnRhbDogci5GbHRyLkhyem4sCiAgICAgICAgICB2ZXJ0aWNhbDogci5GbHRyLlZydGMsCiAgICAgICAgICB1bmRlZmluZWRBcmVhczogWDEuZGVjb2RlKHIuRmx0clsiRmwgICJdKQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInJpZ2lkVHJhbnNmb3JtIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAicHVwcGV0IiwgZmlsdGVyOiB7CiAgICAgICAgICByaWdpZFR5cGU6IHIuRmx0ci5yaWdpZFR5cGUsCiAgICAgICAgICBib3VuZHM6IFsKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMCwgeTogci5GbHRyLlB1WTAgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMSwgeTogci5GbHRyLlB1WTEgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMiwgeTogci5GbHRyLlB1WTIgfSwKICAgICAgICAgICAgeyB4OiByLkZsdHIuUHVYMywgeTogci5GbHRyLlB1WTMgfQogICAgICAgICAgXSwKICAgICAgICAgIHB1cHBldFNoYXBlTGlzdDogci5GbHRyLnB1cHBldFNoYXBlTGlzdC5tYXAoZnVuY3Rpb24oZikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHJpZ2lkVHlwZTogZi5yaWdpZFR5cGUsCiAgICAgICAgICAgICAgLy8gVE9ETzogVnJzTQogICAgICAgICAgICAgIC8vIFRPRE86IFZyc04KICAgICAgICAgICAgICBvcmlnaW5hbFZlcnRleEFycmF5OiBTaShmLm9yaWdpbmFsVmVydGV4QXJyYXkpLAogICAgICAgICAgICAgIGRlZm9ybWVkVmVydGV4QXJyYXk6IFNpKGYuZGVmb3JtZWRWZXJ0ZXhBcnJheSksCiAgICAgICAgICAgICAgaW5kZXhBcnJheTogQXJyYXkuZnJvbShaNChmLmluZGV4QXJyYXkpKSwKICAgICAgICAgICAgICBwaW5PZmZzZXRzOiBoZShmLnBpbk9mZnNldHMpLAogICAgICAgICAgICAgIHBvc0ZpbmFsUGluczogaGUoZi5wb3NGaW5hbFBpbnMpLAogICAgICAgICAgICAgIHBpblZlcnRleEluZGljZXM6IGYucGluVmVydGV4SW5kaWNlcywKICAgICAgICAgICAgICBzZWxlY3RlZFBpbjogZi5zZWxlY3RlZFBpbiwKICAgICAgICAgICAgICBwaW5Qb3NpdGlvbjogaGUoZi5QaW5QKSwKICAgICAgICAgICAgICBwaW5Sb3RhdGlvbjogZi5QblJ0LAogICAgICAgICAgICAgIHBpbk92ZXJsYXk6IGYuUG5PdiwKICAgICAgICAgICAgICBwaW5EZXB0aDogZi5QbkRwLAogICAgICAgICAgICAgIG1lc2hRdWFsaXR5OiBmLm1lc2hRdWFsaXR5LAogICAgICAgICAgICAgIG1lc2hFeHBhbnNpb246IGYubWVzaEV4cGFuc2lvbiwKICAgICAgICAgICAgICBtZXNoUmlnaWRpdHk6IGYubWVzaFJpZ2lkaXR5LAogICAgICAgICAgICAgIGltYWdlUmVzb2x1dGlvbjogZi5pbWFnZVJlc29sdXRpb24sCiAgICAgICAgICAgICAgbWVzaEJvdW5kYXJ5UGF0aDogewogICAgICAgICAgICAgICAgcGF0aENvbXBvbmVudHM6IGYubWVzaEJvdW5kYXJ5UGF0aC5wYXRoQ29tcG9uZW50cy5tYXAoZnVuY3Rpb24odSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHNoYXBlT3BlcmF0aW9uOiB1LnNoYXBlT3BlcmF0aW9uLnNwbGl0KCIuIilbMV0sCiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHUuU2JwTC5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkOiBvLkNsc3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogb1siUHRzICJdLm1hcChmdW5jdGlvbihsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogZjIobC5BbmNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IGYyKGxbIkZ3ZCAiXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogZjIobFsiQndkICJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aDogbC5TbW9vCiAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJQYlBsIjogewogICAgICAgIGZvciAodmFyIEEgPSBbXSwgdCA9IHIuRmx0ciwgaSA9IDA7IGkgPCBrci5sZW5ndGggJiYgdFsiUE4iLmNvbmNhdChrcltpXSwgImEiKV07IGkrKykKICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwga3IubGVuZ3RoICYmIHRbIlBOIi5jb25jYXQoa3JbaV0pLmNvbmNhdChrcltuXSldOyBuKyspCiAgICAgICAgICAgIEEucHVzaCh7CiAgICAgICAgICAgICAgbmFtZTogdFsiUE4iLmNvbmNhdChrcltpXSkuY29uY2F0KGtyW25dKV0sCiAgICAgICAgICAgICAgdmFsdWU6IHRbIlBGIi5jb25jYXQoa3JbaV0pLmNvbmNhdChrcltuXSldCiAgICAgICAgICAgIH0pOwogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJvaWwgcGFpbnQgcGx1Z2luIiwgZmlsdGVyOiB7CiAgICAgICAgICBuYW1lOiByLkZsdHIuS25ObSwKICAgICAgICAgIGdwdTogci5GbHRyLkdwdVksCiAgICAgICAgICBsaWdodGluZzogci5GbHRyLkxJV3ksCiAgICAgICAgICBwYXJhbWV0ZXJzOiBBCiAgICAgICAgfSB9KTsKICAgICAgfQogICAgICBjYXNlICJIc2JQIjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiaHNiL2hzbCIsIGZpbHRlcjogewogICAgICAgICAgaW5wdXRNb2RlOiB3ZS5kZWNvZGUoci5GbHRyLklucHQpLAogICAgICAgICAgcm93T3JkZXI6IHdlLmRlY29kZShyLkZsdHIuT3RwdCkKICAgICAgICB9IH0pOwogICAgICBjYXNlICJvaWxQYWludCI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm9pbCBwYWludCIsIGZpbHRlcjogewogICAgICAgICAgbGlnaHRpbmdPbjogci5GbHRyLmxpZ2h0aW5nT24sCiAgICAgICAgICBzdHlsaXphdGlvbjogci5GbHRyLnN0eWxpemF0aW9uLAogICAgICAgICAgY2xlYW5saW5lc3M6IHIuRmx0ci5jbGVhbmxpbmVzcywKICAgICAgICAgIGJydXNoU2NhbGU6IHIuRmx0ci5icnVzaFNjYWxlLAogICAgICAgICAgbWljcm9CcnVzaDogci5GbHRyLm1pY3JvQnJ1c2gsCiAgICAgICAgICBsaWdodERpcmVjdGlvbjogci5GbHRyLkxnaEQsCiAgICAgICAgICBzcGVjdWxhcml0eTogci5GbHRyLnNwZWN1bGFyaXR5CiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiTHFGeSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImxpcXVpZnkiLCBmaWx0ZXI6IHsKICAgICAgICAgIGxpcXVpZnlNZXNoOiByLkZsdHIuTHFNZQogICAgICAgIH0gfSk7CiAgICAgIGNhc2UgInBlcnNwZWN0aXZlV2FycFRyYW5zZm9ybSI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInBlcnNwZWN0aXZlIHdhcnAiLCBmaWx0ZXI6IHsKICAgICAgICAgIHZlcnRpY2VzOiByLkZsdHIudmVydGljZXMubWFwKGYyKSwKICAgICAgICAgIHdhcnBlZFZlcnRpY2VzOiByLkZsdHIud2FycGVkVmVydGljZXMubWFwKGYyKSwKICAgICAgICAgIHF1YWRzOiByLkZsdHIucXVhZHMubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgcmV0dXJuIGYuaW5kaWNlczsKICAgICAgICAgIH0pCiAgICAgICAgfSB9KTsKICAgICAgY2FzZSAiQ3J2cyI6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImN1cnZlcyIsIGZpbHRlcjogaCh7IHByZXNldEtpbmQ6IFIxLmRlY29kZShyLkZsdHIucHJlc2V0S2luZCkgfSwgci5GbHRyLkFkanMgPyB7CiAgICAgICAgICBhZGp1c3RtZW50czogci5GbHRyLkFkanMubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgdmFyIHUgPSBmLkNobmwubWFwKEUyLmRlY29kZSk7CiAgICAgICAgICAgIGlmIChmWyJDcnYgIl0pCiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzOiB1LAogICAgICAgICAgICAgICAgY3VydmU6IGZbIkNydiAiXS5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgICB2YXIgbCA9IHsgeDogby5IcnpuLCB5OiBvLlZydGMgfTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uQ250eSAmJiAobC5jdXJ2ZWQgPSAhMCksIGw7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmLk1wbmcpCiAgICAgICAgICAgICAgcmV0dXJuIHsgY2hhbm5lbHM6IHUsIHZhbHVlczogZi5NcG5nIH07CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjdXJ2ZSBhZGp1c3RtZW50Iik7CiAgICAgICAgICB9KQogICAgICAgIH0gOiB7fSkgfSk7CiAgICAgIGNhc2UgIkJyZ0MiOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJicmlnaHRuZXNzL2NvbnRyYXN0IiwgZmlsdGVyOiB7CiAgICAgICAgICBicmlnaHRuZXNzOiByLkZsdHIuQnJnaCwKICAgICAgICAgIGNvbnRyYXN0OiByLkZsdHIuQ250ciwKICAgICAgICAgIHVzZUxlZ2FjeTogISFyLkZsdHIudXNlTGVnYWN5CiAgICAgICAgfSB9KTsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoZS50aHJvd0Zvck1pc3NpbmdGZWF0dXJlcykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBmaWx0ZXIgY2xhc3NJZDogIi5jb25jYXQoci5GbHRyLl9jbGFzc0lEKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogIGVsc2UKICAgIHN3aXRjaCAoci5maWx0ZXJJRCkgewogICAgICBjYXNlIDEwOTgyODE1NzU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImF2ZXJhZ2UiIH0pOwogICAgICBjYXNlIDExMTQ0MDMzNjA6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImJsdXIiIH0pOwogICAgICBjYXNlIDExMTQ0MDM0MDU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogImJsdXIgbW9yZSIgfSk7CiAgICAgIGNhc2UgMTE0ODQxNjA5OToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZGVzcGVja2xlIiB9KTsKICAgICAgY2FzZSAxMTgwOTIyOTEyOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJmYWNldCIgfSk7CiAgICAgIGNhc2UgMTE4MTkwMjcwMToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZnJhZ21lbnQiIH0pOwogICAgICBjYXNlIDEzOTkzNTM5Njg6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4iIH0pOwogICAgICBjYXNlIDEzOTkzNTM5MjU6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4gZWRnZXMiIH0pOwogICAgICBjYXNlIDEzOTkzNTM5MzM6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogInNoYXJwZW4gbW9yZSIgfSk7CiAgICAgIGNhc2UgMTE4MTYzOTc0OToKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAiZmluZCBlZGdlcyIgfSk7CiAgICAgIGNhc2UgMTM5OTYxNjEyMjoKICAgICAgICByZXR1cm4gaChoKHt9LCBhKSwgeyB0eXBlOiAic29sYXJpemUiIH0pOwogICAgICBjYXNlIDEzMTQxNDkxODc6CiAgICAgICAgcmV0dXJuIGgoaCh7fSwgYSksIHsgdHlwZTogIm50c2MgY29sb3JzIiB9KTsKICAgICAgY2FzZSAxMjMxOTc2MDUwOgogICAgICAgIHJldHVybiBoKGgoe30sIGEpLCB7IHR5cGU6ICJpbnZlcnQiIH0pOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChlLnRocm93Rm9yTWlzc2luZ0ZlYXR1cmVzKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbHRlcklEOiAiLmNvbmNhdChyLmZpbHRlcklEKSk7CiAgICB9Cn0KZnVuY3Rpb24gSTQociwgZSkgewogIHJldHVybiB7CiAgICBlbmFibGVkOiByLmVuYWIsCiAgICB2YWxpZEF0UG9zaXRpb246IHIudmFsaWRBdFBvc2l0aW9uLAogICAgbWFza0VuYWJsZWQ6IHIuZmlsdGVyTWFza0VuYWJsZSwKICAgIG1hc2tMaW5rZWQ6IHIuZmlsdGVyTWFza0xpbmtlZCwKICAgIG1hc2tFeHRlbmRXaXRoV2hpdGU6IHIuZmlsdGVyTWFza0V4dGVuZFdpdGhXaGl0ZSwKICAgIGxpc3Q6IHIuZmlsdGVyRlhMaXN0Lm1hcChmdW5jdGlvbihhKSB7CiAgICAgIHJldHVybiBCNChhLCBlKTsKICAgIH0pLmZpbHRlcihmdW5jdGlvbihhKSB7CiAgICAgIHJldHVybiAhIWE7CiAgICB9KQogIH07Cn0KZnVuY3Rpb24gWXIocikgewogIHJldHVybiBEMChyLnJhZGl1cywgInJhZGl1cyIpOwp9CmZ1bmN0aW9uIEY0KHIpIHsKICB2YXIgZSA9IHsKICAgIF9uYW1lOiAiIiwKICAgIF9jbGFzc0lEOiAiZmlsdGVyRlgiLAogICAgIk5tICAiOiByLm5hbWUsCiAgICBibGVuZE9wdGlvbnM6IHsKICAgICAgX25hbWU6ICIiLAogICAgICBfY2xhc3NJRDogImJsZW5kT3B0aW9ucyIsCiAgICAgIE9wY3Q6IEVyKHIub3BhY2l0eSksCiAgICAgICJNZCAgIjogb3IuZW5jb2RlKHIuYmxlbmRNb2RlKQogICAgfSwKICAgIGVuYWI6IHIuZW5hYmxlZCwKICAgIGhhc29wdGlvbnM6IHIuaGFzT3B0aW9ucywKICAgIEZyZ0M6IERyKHIuZm9yZWdyb3VuZENvbG9yKSwKICAgIEJja0M6IERyKHIuYmFja2dyb3VuZENvbG9yKQogIH07CiAgc3dpdGNoIChyLnR5cGUpIHsKICAgIGNhc2UgImF2ZXJhZ2UiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTA5ODI4MTU3NSB9KTsKICAgIGNhc2UgImJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTExNDQwMzM2MCB9KTsKICAgIGNhc2UgImJsdXIgbW9yZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMTE0NDAzNDA1IH0pOwogICAgY2FzZSAiYm94IGJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJCb3ggQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJib3hibHVyIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogNjk3IH0pOwogICAgY2FzZSAiZ2F1c3NpYW4gYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICAvLyBfbmFtZTogJ+mrmOaWr+aooeeziicsIC8vIFRlc3RpbmcKICAgICAgICBfbmFtZTogIkdhdXNzaWFuIEJsdXIiLAogICAgICAgIF9jbGFzc0lEOiAiR3NuQiIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlcikKICAgICAgfSwgZmlsdGVySUQ6IDExOTg3NDcyMDIgfSk7CiAgICBjYXNlICJtb3Rpb24gYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1vdGlvbiBCbHVyIiwKICAgICAgICBfY2xhc3NJRDogIk10bkIiLAogICAgICAgIEFuZ2w6IHIuZmlsdGVyLmFuZ2xlLAogICAgICAgIERzdG46IEQwKHIuZmlsdGVyLmRpc3RhbmNlLCAiZGlzdGFuY2UiKQogICAgICB9LCBmaWx0ZXJJRDogMTI5OTQ3NjAzNCB9KTsKICAgIGNhc2UgInJhZGlhbCBibHVyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmFkaWFsIEJsdXIiLAogICAgICAgIF9jbGFzc0lEOiAiUmRsQiIsCiAgICAgICAgQW1udDogci5maWx0ZXIuYW1vdW50LAogICAgICAgIEJsck06IHUxLmVuY29kZShyLmZpbHRlci5tZXRob2QpLAogICAgICAgIEJsclE6IGwxLmVuY29kZShyLmZpbHRlci5xdWFsaXR5KQogICAgICB9LCBmaWx0ZXJJRDogMTM4MjMxMzAyNiB9KTsKICAgIGNhc2UgInNoYXBlIGJsdXIiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJTaGFwZSBCbHVyIiwKICAgICAgICBfY2xhc3NJRDogInNoYXBlQmx1ciIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlciksCiAgICAgICAgY3VzdG9tU2hhcGU6IHsKICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgIF9jbGFzc0lEOiAiY3VzdG9tU2hhcGUiLAogICAgICAgICAgIk5tICAiOiByLmZpbHRlci5jdXN0b21TaGFwZS5uYW1lLAogICAgICAgICAgSWRudDogci5maWx0ZXIuY3VzdG9tU2hhcGUuaWQKICAgICAgICB9CiAgICAgIH0sIGZpbHRlcklEOiA3MDIgfSk7CiAgICBjYXNlICJzbWFydCBibHVyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiU21hcnQgQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJTbXJCIiwKICAgICAgICAiUmRzICI6IHIuZmlsdGVyLnJhZGl1cywKICAgICAgICBUaHNoOiByLmZpbHRlci50aHJlc2hvbGQsCiAgICAgICAgU21CUTogczEuZW5jb2RlKHIuZmlsdGVyLnF1YWxpdHkpLAogICAgICAgIFNtQk06IGMxLmVuY29kZShyLmZpbHRlci5tb2RlKQogICAgICB9LCBmaWx0ZXJJRDogMTM5OTY4MTYwMiB9KTsKICAgIGNhc2UgInN1cmZhY2UgYmx1ciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlN1cmZhY2UgQmx1ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJzdXJmYWNlQmx1ciIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlciksCiAgICAgICAgVGhzaDogci5maWx0ZXIudGhyZXNob2xkCiAgICAgIH0sIGZpbHRlcklEOiA3MDEgfSk7CiAgICBjYXNlICJkaXNwbGFjZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkRpc3BsYWNlIiwKICAgICAgICBfY2xhc3NJRDogIkRzcGwiLAogICAgICAgIEhyelM6IHIuZmlsdGVyLmhvcml6b250YWxTY2FsZSwKICAgICAgICBWcnRTOiByLmZpbHRlci52ZXJ0aWNhbFNjYWxlLAogICAgICAgIERzcE06IGIxLmVuY29kZShyLmZpbHRlci5kaXNwbGFjZW1lbnRNYXApLAogICAgICAgIFVuZEE6IFVhLmVuY29kZShyLmZpbHRlci51bmRlZmluZWRBcmVhcyksCiAgICAgICAgRHNwRjogewogICAgICAgICAgc2lnOiByLmZpbHRlci5kaXNwbGFjZW1lbnRGaWxlLnNpZ25hdHVyZSwKICAgICAgICAgIHBhdGg6IHIuZmlsdGVyLmRpc3BsYWNlbWVudEZpbGUucGF0aAogICAgICAgIH0KICAgICAgfSwgZmlsdGVySUQ6IDExNDg0MTYxMDggfSk7CiAgICBjYXNlICJwaW5jaCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBpbmNoIiwKICAgICAgICBfY2xhc3NJRDogIlBuY2giLAogICAgICAgIEFtbnQ6IHIuZmlsdGVyLmFtb3VudAogICAgICB9LCBmaWx0ZXJJRDogMTM0OTQxMTY4OCB9KTsKICAgIGNhc2UgInBvbGFyIGNvb3JkaW5hdGVzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUG9sYXIgQ29vcmRpbmF0ZXMiLAogICAgICAgIF9jbGFzc0lEOiAiUGxyICIsCiAgICAgICAgQ252cjogZDEuZW5jb2RlKHIuZmlsdGVyLmNvbnZlcnNpb24pCiAgICAgIH0sIGZpbHRlcklEOiAxMzQ5Mjg0Mzg0IH0pOwogICAgY2FzZSAicmlwcGxlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmlwcGxlIiwKICAgICAgICBfY2xhc3NJRDogIlJwbGUiLAogICAgICAgIEFtbnQ6IHIuZmlsdGVyLmFtb3VudCwKICAgICAgICBScGxTOiBoMS5lbmNvZGUoci5maWx0ZXIuc2l6ZSkKICAgICAgfSwgZmlsdGVySUQ6IDEzODMwOTk0OTMgfSk7CiAgICBjYXNlICJzaGVhciI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlNoZWFyIiwKICAgICAgICBfY2xhc3NJRDogIlNociAiLAogICAgICAgIFNoclA6IHIuZmlsdGVyLnNoZWFyUG9pbnRzLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4geyBfbmFtZTogIiIsIF9jbGFzc0lEOiAiUG50ICIsIEhyem46IHUueCwgVnJ0YzogdS55IH07CiAgICAgICAgfSksCiAgICAgICAgVW5kQTogVWEuZW5jb2RlKHIuZmlsdGVyLnVuZGVmaW5lZEFyZWFzKSwKICAgICAgICBTaHJTOiByLmZpbHRlci5zaGVhclN0YXJ0LAogICAgICAgIFNockU6IHIuZmlsdGVyLnNoZWFyRW5kCiAgICAgIH0sIGZpbHRlcklEOiAxMzk5MzUzODg4IH0pOwogICAgY2FzZSAic3BoZXJpemUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJTcGhlcml6ZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJTcGhyIiwKICAgICAgICBBbW50OiByLmZpbHRlci5hbW91bnQsCiAgICAgICAgU3BoTTogdjEuZW5jb2RlKHIuZmlsdGVyLm1vZGUpCiAgICAgIH0sIGZpbHRlcklEOiAxMzk5ODc1Njk4IH0pOwogICAgY2FzZSAidHdpcmwiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJUd2lybCIsCiAgICAgICAgX2NsYXNzSUQ6ICJUd3JsIiwKICAgICAgICBBbmdsOiByLmZpbHRlci5hbmdsZQogICAgICB9LCBmaWx0ZXJJRDogMTQxNzExNDIyMCB9KTsKICAgIGNhc2UgIndhdmUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJXYXZlIiwKICAgICAgICBfY2xhc3NJRDogIldhdmUiLAogICAgICAgIFd2dHA6IGsxLmVuY29kZShyLmZpbHRlci50eXBlKSwKICAgICAgICBObWJHOiByLmZpbHRlci5udW1iZXJPZkdlbmVyYXRvcnMsCiAgICAgICAgV0xNbjogci5maWx0ZXIud2F2ZWxlbmd0aC5taW4sCiAgICAgICAgV0xNeDogci5maWx0ZXIud2F2ZWxlbmd0aC5tYXgsCiAgICAgICAgQW1Nbjogci5maWx0ZXIuYW1wbGl0dWRlLm1pbiwKICAgICAgICBBbU14OiByLmZpbHRlci5hbXBsaXR1ZGUubWF4LAogICAgICAgIFNjbEg6IHIuZmlsdGVyLnNjYWxlLngsCiAgICAgICAgU2NsVjogci5maWx0ZXIuc2NhbGUueSwKICAgICAgICBVbmRBOiBVYS5lbmNvZGUoci5maWx0ZXIudW5kZWZpbmVkQXJlYXMpLAogICAgICAgIFJuZFM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDE0NjYwMDUwOTMgfSk7CiAgICBjYXNlICJ6aWd6YWciOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJaaWdaYWciLAogICAgICAgIF9jbGFzc0lEOiAiWmdaZyIsCiAgICAgICAgQW1udDogci5maWx0ZXIuYW1vdW50LAogICAgICAgIE5tYlI6IHIuZmlsdGVyLnJpZGdlcywKICAgICAgICBaWlR5OiBnMS5lbmNvZGUoci5maWx0ZXIuc3R5bGUpCiAgICAgIH0sIGZpbHRlcklEOiAxNTE2NzIyNzkxIH0pOwogICAgY2FzZSAiYWRkIG5vaXNlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiQWRkIE5vaXNlIiwKICAgICAgICBfY2xhc3NJRDogIkFkTnMiLAogICAgICAgIERzdHI6IG0xLmVuY29kZShyLmZpbHRlci5kaXN0cmlidXRpb24pLAogICAgICAgIE5vc2U6IEVyKHIuZmlsdGVyLmFtb3VudCksCiAgICAgICAgTW5jaDogci5maWx0ZXIubW9ub2Nocm9tYXRpYywKICAgICAgICBGbFJzOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMDk3MDkyNzIzIH0pOwogICAgY2FzZSAiZGVzcGVja2xlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDExNDg0MTYwOTkgfSk7CiAgICBjYXNlICJkdXN0IGFuZCBzY3JhdGNoZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJEdXN0ICYgU2NyYXRjaGVzIiwKICAgICAgICBfY2xhc3NJRDogIkRzdFMiLAogICAgICAgICJSZHMgIjogci5maWx0ZXIucmFkaXVzLAogICAgICAgIFRoc2g6IHIuZmlsdGVyLnRocmVzaG9sZAogICAgICB9LCBmaWx0ZXJJRDogMTE0ODQxNzEwNyB9KTsKICAgIGNhc2UgIm1lZGlhbiI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1lZGlhbiIsCiAgICAgICAgX2NsYXNzSUQ6ICJNZG4gIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogMTI5ODQyNzQyNCB9KTsKICAgIGNhc2UgInJlZHVjZSBub2lzZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlJlZHVjZSBOb2lzZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJkZW5vaXNlIiwKICAgICAgICBDbE5zOiBFcihyLmZpbHRlci5yZWR1Y2VDb2xvck5vaXNlKSwKICAgICAgICBTaHJwOiBFcihyLmZpbHRlci5zaGFycGVuRGV0YWlscyksCiAgICAgICAgcmVtb3ZlSlBFR0FydGlmYWN0OiByLmZpbHRlci5yZW1vdmVKcGVnQXJ0aWZhY3QsCiAgICAgICAgY2hhbm5lbERlbm9pc2U6IHIuZmlsdGVyLmNoYW5uZWxEZW5vaXNlLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gaCh7IF9uYW1lOiAiIiwgX2NsYXNzSUQ6ICJjaGFubmVsRGVub2lzZVBhcmFtcyIsIENobmw6IHUuY2hhbm5lbHMubWFwKGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgcmV0dXJuIEUyLmVuY29kZShvKTsKICAgICAgICAgIH0pLCBBbW50OiB1LmFtb3VudCB9LCB1LnByZXNlcnZlRGV0YWlscyA/IHsgRWRnRjogdS5wcmVzZXJ2ZURldGFpbHMgfSA6IHt9KTsKICAgICAgICB9KSwKICAgICAgICBwcmVzZXQ6IHIuZmlsdGVyLnByZXNldAogICAgICB9LCBmaWx0ZXJJRDogNjMzIH0pOwogICAgY2FzZSAiY29sb3IgaGFsZnRvbmUiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJDb2xvciBIYWxmdG9uZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJDbHJIIiwKICAgICAgICAiUmRzICI6IHIuZmlsdGVyLnJhZGl1cywKICAgICAgICBBbmcxOiByLmZpbHRlci5hbmdsZTEsCiAgICAgICAgQW5nMjogci5maWx0ZXIuYW5nbGUyLAogICAgICAgIEFuZzM6IHIuZmlsdGVyLmFuZ2xlMywKICAgICAgICBBbmc0OiByLmZpbHRlci5hbmdsZTQKICAgICAgfSwgZmlsdGVySUQ6IDExMzExODA2MTYgfSk7CiAgICBjYXNlICJjcnlzdGFsbGl6ZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkNyeXN0YWxsaXplIiwKICAgICAgICBfY2xhc3NJRDogIkNyc3QiLAogICAgICAgIENsU3o6IHIuZmlsdGVyLmNlbGxTaXplLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDExMzE1NzQxMzIgfSk7CiAgICBjYXNlICJmYWNldCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMTgwOTIyOTEyIH0pOwogICAgY2FzZSAiZnJhZ21lbnQiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTE4MTkwMjcwMSB9KTsKICAgIGNhc2UgIm1lenpvdGludCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1lenpvdGludCIsCiAgICAgICAgX2NsYXNzSUQ6ICJNenRuIiwKICAgICAgICBNenRUOiBwMS5lbmNvZGUoci5maWx0ZXIudHlwZSksCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTI5OTg3MDgzMCB9KTsKICAgIGNhc2UgIm1vc2FpYyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIk1vc2FpYyIsCiAgICAgICAgX2NsYXNzSUQ6ICJNc2MgIiwKICAgICAgICBDbFN6OiBEMChyLmZpbHRlci5jZWxsU2l6ZSwgImNlbGxTaXplIikKICAgICAgfSwgZmlsdGVySUQ6IDEyOTk0MDc2NDggfSk7CiAgICBjYXNlICJwb2ludGlsbGl6ZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBvaW50aWxsaXplIiwKICAgICAgICBfY2xhc3NJRDogIlBudGwiLAogICAgICAgIENsU3o6IHIuZmlsdGVyLmNlbGxTaXplLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDEzNDk0MTYwNDQgfSk7CiAgICBjYXNlICJjbG91ZHMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJDbG91ZHMiLAogICAgICAgIF9jbGFzc0lEOiAiQ2xkcyIsCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTEzMTE3NzA3NSB9KTsKICAgIGNhc2UgImRpZmZlcmVuY2UgY2xvdWRzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRGlmZmVyZW5jZSBDbG91ZHMiLAogICAgICAgIF9jbGFzc0lEOiAiRGZyQyIsCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTE0NzU2NDYxMSB9KTsKICAgIGNhc2UgImZpYmVycyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkZpYmVycyIsCiAgICAgICAgX2NsYXNzSUQ6ICJGYnJzIiwKICAgICAgICBWcm5jOiByLmZpbHRlci52YXJpYW5jZSwKICAgICAgICBTdHJnOiByLmZpbHRlci5zdHJlbmd0aCwKICAgICAgICBSbmRTOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMTgwODU2OTQ3IH0pOwogICAgY2FzZSAibGVucyBmbGFyZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkxlbnMgRmxhcmUiLAogICAgICAgIF9jbGFzc0lEOiAiTG5zRiIsCiAgICAgICAgQnJnaDogci5maWx0ZXIuYnJpZ2h0bmVzcywKICAgICAgICBGbHJDOiB7CiAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICBfY2xhc3NJRDogIlBudCAiLAogICAgICAgICAgSHJ6bjogci5maWx0ZXIucG9zaXRpb24ueCwKICAgICAgICAgIFZydGM6IHIuZmlsdGVyLnBvc2l0aW9uLnkKICAgICAgICB9LAogICAgICAgICJMbnMgIjogdzEuZW5jb2RlKHIuZmlsdGVyLmxlbnNUeXBlKQogICAgICB9LCBmaWx0ZXJJRDogMTI4MjMwNjg4NiB9KTsKICAgIGNhc2UgInNoYXJwZW4iOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTM5OTM1Mzk2OCB9KTsKICAgIGNhc2UgInNoYXJwZW4gZWRnZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTM5OTM1MzkyNSB9KTsKICAgIGNhc2UgInNoYXJwZW4gbW9yZSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IGZpbHRlcklEOiAxMzk5MzUzOTMzIH0pOwogICAgY2FzZSAic21hcnQgc2hhcnBlbiI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlNtYXJ0IFNoYXJwZW4iLAogICAgICAgIF9jbGFzc0lEOiAic21hcnRTaGFycGVuIiwKICAgICAgICBBbW50OiBFcihyLmZpbHRlci5hbW91bnQpLAogICAgICAgICJSZHMgIjogWXIoci5maWx0ZXIpLAogICAgICAgIFRoc2g6IHIuZmlsdGVyLnRocmVzaG9sZCwKICAgICAgICBBbmdsOiByLmZpbHRlci5hbmdsZSwKICAgICAgICBtb3JlQWNjdXJhdGU6IHIuZmlsdGVyLm1vcmVBY2N1cmF0ZSwKICAgICAgICBibHVyOiB5MS5lbmNvZGUoci5maWx0ZXIuYmx1ciksCiAgICAgICAgcHJlc2V0OiByLmZpbHRlci5wcmVzZXQsCiAgICAgICAgc2R3TTogewogICAgICAgICAgX25hbWU6ICJQYXJhbWV0ZXJzIiwKICAgICAgICAgIF9jbGFzc0lEOiAiYWRhcHRDb3JyZWN0VG9uZXMiLAogICAgICAgICAgQW1udDogRXIoci5maWx0ZXIuc2hhZG93LmZhZGVBbW91bnQpLAogICAgICAgICAgV2R0aDogRXIoci5maWx0ZXIuc2hhZG93LnRvbmFsV2lkdGgpLAogICAgICAgICAgIlJkcyAiOiByLmZpbHRlci5zaGFkb3cucmFkaXVzCiAgICAgICAgfSwKICAgICAgICBoZ2xNOiB7CiAgICAgICAgICBfbmFtZTogIlBhcmFtZXRlcnMiLAogICAgICAgICAgX2NsYXNzSUQ6ICJhZGFwdENvcnJlY3RUb25lcyIsCiAgICAgICAgICBBbW50OiBFcihyLmZpbHRlci5oaWdobGlnaHQuZmFkZUFtb3VudCksCiAgICAgICAgICBXZHRoOiBFcihyLmZpbHRlci5oaWdobGlnaHQudG9uYWxXaWR0aCksCiAgICAgICAgICAiUmRzICI6IHIuZmlsdGVyLmhpZ2hsaWdodC5yYWRpdXMKICAgICAgICB9CiAgICAgIH0sIGZpbHRlcklEOiA2OTggfSk7CiAgICBjYXNlICJ1bnNoYXJwIG1hc2siOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJVbnNoYXJwIE1hc2siLAogICAgICAgIF9jbGFzc0lEOiAiVW5zTSIsCiAgICAgICAgQW1udDogRXIoci5maWx0ZXIuYW1vdW50KSwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKSwKICAgICAgICBUaHNoOiByLmZpbHRlci50aHJlc2hvbGQKICAgICAgfSwgZmlsdGVySUQ6IDE0MzMzMDE4MzcgfSk7CiAgICBjYXNlICJkaWZmdXNlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRGlmZnVzZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJEZnMgIiwKICAgICAgICAiTWQgICI6IEUxLmVuY29kZShyLmZpbHRlci5tb2RlKSwKICAgICAgICBGbFJzOiByLmZpbHRlci5yYW5kb21TZWVkCiAgICAgIH0sIGZpbHRlcklEOiAxMTQ3NTY0ODMyIH0pOwogICAgY2FzZSAiZW1ib3NzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRW1ib3NzIiwKICAgICAgICBfY2xhc3NJRDogIkVtYnMiLAogICAgICAgIEFuZ2w6IHIuZmlsdGVyLmFuZ2xlLAogICAgICAgIEhnaHQ6IHIuZmlsdGVyLmhlaWdodCwKICAgICAgICBBbW50OiByLmZpbHRlci5hbW91bnQKICAgICAgfSwgZmlsdGVySUQ6IDExNjQ3OTY1MzEgfSk7CiAgICBjYXNlICJleHRydWRlIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiRXh0cnVkZSIsCiAgICAgICAgX2NsYXNzSUQ6ICJFeHRyIiwKICAgICAgICBFeHRTOiByLmZpbHRlci5zaXplLAogICAgICAgIEV4dEQ6IHIuZmlsdGVyLmRlcHRoLAogICAgICAgIEV4dEY6IHIuZmlsdGVyLnNvbGlkRnJvbnRGYWNlcywKICAgICAgICBFeHRNOiByLmZpbHRlci5tYXNrSW5jb21wbGV0ZUJsb2NrcywKICAgICAgICBFeHRUOiBaMS5lbmNvZGUoci5maWx0ZXIudHlwZSksCiAgICAgICAgRXh0UjogQjEuZW5jb2RlKHIuZmlsdGVyLmRlcHRoTW9kZSksCiAgICAgICAgRmxSczogci5maWx0ZXIucmFuZG9tU2VlZAogICAgICB9LCBmaWx0ZXJJRDogMTE2NTUyMjAzNCB9KTsKICAgIGNhc2UgImZpbmQgZWRnZXMiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTE4MTYzOTc0OSB9KTsKICAgIGNhc2UgInNvbGFyaXplIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDEzOTk2MTYxMjIgfSk7CiAgICBjYXNlICJ0aWxlcyI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlRpbGVzIiwKICAgICAgICBfY2xhc3NJRDogIlRscyAiLAogICAgICAgIFRsTm06IHIuZmlsdGVyLm51bWJlck9mVGlsZXMsCiAgICAgICAgVGxPZjogci5maWx0ZXIubWF4aW11bU9mZnNldCwKICAgICAgICBGbENsOiBJMS5lbmNvZGUoci5maWx0ZXIuZmlsbEVtcHR5QXJlYVdpdGgpLAogICAgICAgIEZsUnM6IHIuZmlsdGVyLnJhbmRvbVNlZWQKICAgICAgfSwgZmlsdGVySUQ6IDE0MTYzOTM1MDQgfSk7CiAgICBjYXNlICJ0cmFjZSBjb250b3VyIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiVHJhY2UgQ29udG91ciIsCiAgICAgICAgX2NsYXNzSUQ6ICJUcmNDIiwKICAgICAgICAiTHZsICI6IHIuZmlsdGVyLmxldmVsLAogICAgICAgICJFZGcgIjogRjEuZW5jb2RlKHIuZmlsdGVyLmVkZ2UpCiAgICAgIH0sIGZpbHRlcklEOiAxNDE2NzgyNjU5IH0pOwogICAgY2FzZSAid2luZCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIldpbmQiLAogICAgICAgIF9jbGFzc0lEOiAiV25kICIsCiAgICAgICAgV25kTTogQzEuZW5jb2RlKHIuZmlsdGVyLm1ldGhvZCksCiAgICAgICAgRHJjdDogVzEuZW5jb2RlKHIuZmlsdGVyLmRpcmVjdGlvbikKICAgICAgfSwgZmlsdGVySUQ6IDE0NjY4NTIzODQgfSk7CiAgICBjYXNlICJkZS1pbnRlcmxhY2UiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJEZS1JbnRlcmxhY2UiLAogICAgICAgIF9jbGFzc0lEOiAiRG50ciIsCiAgICAgICAgSW50RTogXzEuZW5jb2RlKHIuZmlsdGVyLmVsaW1pbmF0ZSksCiAgICAgICAgSW50QzogRzEuZW5jb2RlKHIuZmlsdGVyLm5ld0ZpZWxkc0J5KQogICAgICB9LCBmaWx0ZXJJRDogMTE0ODA4OTQ1OCB9KTsKICAgIGNhc2UgIm50c2MgY29sb3JzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgZmlsdGVySUQ6IDEzMTQxNDkxODcgfSk7CiAgICBjYXNlICJpbnZlcnQiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBmaWx0ZXJJRDogMTIzMTk3NjA1MCB9KTsKICAgIGNhc2UgImN1c3RvbSI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIkN1c3RvbSIsCiAgICAgICAgX2NsYXNzSUQ6ICJDc3RtIiwKICAgICAgICAiU2NsICI6IHIuZmlsdGVyLnNjYWxlLAogICAgICAgIE9mc3Q6IHIuZmlsdGVyLm9mZnNldCwKICAgICAgICBNdHJ4OiByLmZpbHRlci5tYXRyaXgKICAgICAgfSwgZmlsdGVySUQ6IDExMzE2Mzk5MTcgfSk7CiAgICBjYXNlICJoaWdoIHBhc3MiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJIaWdoIFBhc3MiLAogICAgICAgIF9jbGFzc0lEOiAiSGdoUCIsCiAgICAgICAgIlJkcyAiOiBZcihyLmZpbHRlcikKICAgICAgfSwgZmlsdGVySUQ6IDEyMTQ3MzY0NjQgfSk7CiAgICBjYXNlICJtYXhpbXVtIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiTWF4aW11bSIsCiAgICAgICAgX2NsYXNzSUQ6ICJNeG0gIiwKICAgICAgICAiUmRzICI6IFlyKHIuZmlsdGVyKQogICAgICB9LCBmaWx0ZXJJRDogMTI5OTczNzg4OCB9KTsKICAgIGNhc2UgIm1pbmltdW0iOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJNaW5pbXVtIiwKICAgICAgICBfY2xhc3NJRDogIk1ubSAiLAogICAgICAgICJSZHMgIjogWXIoci5maWx0ZXIpCiAgICAgIH0sIGZpbHRlcklEOiAxMjk5MDgyNTI4IH0pOwogICAgY2FzZSAib2Zmc2V0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiT2Zmc2V0IiwKICAgICAgICBfY2xhc3NJRDogIk9mc3QiLAogICAgICAgIEhyem46IHIuZmlsdGVyLmhvcml6b250YWwsCiAgICAgICAgVnJ0Yzogci5maWx0ZXIudmVydGljYWwsCiAgICAgICAgIkZsICAiOiBYMS5lbmNvZGUoci5maWx0ZXIudW5kZWZpbmVkQXJlYXMpCiAgICAgIH0sIGZpbHRlcklEOiAxMzMyMTE0MjkyIH0pOwogICAgY2FzZSAicHVwcGV0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiUmlnaWQgVHJhbnNmb3JtIiwKICAgICAgICBfY2xhc3NJRDogInJpZ2lkVHJhbnNmb3JtIiwKICAgICAgICBudWxsOiBbIk9yZG4uVHJndCJdLAogICAgICAgIHJpZ2lkVHlwZTogci5maWx0ZXIucmlnaWRUeXBlLAogICAgICAgIHB1cHBldFNoYXBlTGlzdDogci5maWx0ZXIucHVwcGV0U2hhcGVMaXN0Lm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgIF9jbGFzc0lEOiAicHVwcGV0U2hhcGUiLAogICAgICAgICAgICByaWdpZFR5cGU6IHUucmlnaWRUeXBlLAogICAgICAgICAgICBWcnNNOiAxLAogICAgICAgICAgICBWcnNOOiAwLAogICAgICAgICAgICBvcmlnaW5hbFZlcnRleEFycmF5OiBsQShuZXcgRmxvYXQzMkFycmF5KG4yKHUub3JpZ2luYWxWZXJ0ZXhBcnJheSkpKSwKICAgICAgICAgICAgZGVmb3JtZWRWZXJ0ZXhBcnJheTogbEEobmV3IEZsb2F0MzJBcnJheShuMih1LmRlZm9ybWVkVmVydGV4QXJyYXkpKSksCiAgICAgICAgICAgIGluZGV4QXJyYXk6IGxBKG5ldyBVaW50MzJBcnJheSh1LmluZGV4QXJyYXkpKSwKICAgICAgICAgICAgcGluT2Zmc2V0czogbjIodS5waW5PZmZzZXRzKSwKICAgICAgICAgICAgcG9zRmluYWxQaW5zOiBuMih1LnBvc0ZpbmFsUGlucyksCiAgICAgICAgICAgIHBpblZlcnRleEluZGljZXM6IHUucGluVmVydGV4SW5kaWNlcywKICAgICAgICAgICAgUGluUDogbjIodS5waW5Qb3NpdGlvbiksCiAgICAgICAgICAgIFBuUnQ6IHUucGluUm90YXRpb24sCiAgICAgICAgICAgIFBuT3Y6IHUucGluT3ZlcmxheSwKICAgICAgICAgICAgUG5EcDogdS5waW5EZXB0aCwKICAgICAgICAgICAgbWVzaFF1YWxpdHk6IHUubWVzaFF1YWxpdHksCiAgICAgICAgICAgIG1lc2hFeHBhbnNpb246IHUubWVzaEV4cGFuc2lvbiwKICAgICAgICAgICAgbWVzaFJpZ2lkaXR5OiB1Lm1lc2hSaWdpZGl0eSwKICAgICAgICAgICAgaW1hZ2VSZXNvbHV0aW9uOiB1LmltYWdlUmVzb2x1dGlvbiwKICAgICAgICAgICAgbWVzaEJvdW5kYXJ5UGF0aDogewogICAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgICBfY2xhc3NJRDogInBhdGhDbGFzcyIsCiAgICAgICAgICAgICAgcGF0aENvbXBvbmVudHM6IHUubWVzaEJvdW5kYXJ5UGF0aC5wYXRoQ29tcG9uZW50cy5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgX25hbWU6ICIiLAogICAgICAgICAgICAgICAgICBfY2xhc3NJRDogIlBhQ20iLAogICAgICAgICAgICAgICAgICBzaGFwZU9wZXJhdGlvbjogInNoYXBlT3BlcmF0aW9uLiIuY29uY2F0KG8uc2hhcGVPcGVyYXRpb24pLAogICAgICAgICAgICAgICAgICBTYnBMOiBvLnBhdGhzLm1hcChmdW5jdGlvbihsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0lEOiAiU2JwbCIsCiAgICAgICAgICAgICAgICAgICAgICBDbHNwOiBsLmNsb3NlZCwKICAgICAgICAgICAgICAgICAgICAgICJQdHMgIjogbC5wb2ludHMubWFwKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzSUQ6ICJQdGhwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBBbmNoOiBvMihzLmFuY2hvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ3ZCAiOiBvMihzLmZvcndhcmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCd2QgIjogbzIocy5iYWNrd2FyZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgU21vbzogcy5zbW9vdGgKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2VsZWN0ZWRQaW46IHUuc2VsZWN0ZWRQaW4KICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgUHVYMDogci5maWx0ZXIuYm91bmRzWzBdLngsCiAgICAgICAgUHVYMTogci5maWx0ZXIuYm91bmRzWzFdLngsCiAgICAgICAgUHVYMjogci5maWx0ZXIuYm91bmRzWzJdLngsCiAgICAgICAgUHVYMzogci5maWx0ZXIuYm91bmRzWzNdLngsCiAgICAgICAgUHVZMDogci5maWx0ZXIuYm91bmRzWzBdLnksCiAgICAgICAgUHVZMTogci5maWx0ZXIuYm91bmRzWzFdLnksCiAgICAgICAgUHVZMjogci5maWx0ZXIuYm91bmRzWzJdLnksCiAgICAgICAgUHVZMzogci5maWx0ZXIuYm91bmRzWzNdLnkKICAgICAgfSwgZmlsdGVySUQ6IDk5MSB9KTsKICAgIGNhc2UgIm9pbCBwYWludCBwbHVnaW4iOiB7CiAgICAgIGZvciAodmFyIGEgPSB7fSwgQSA9IDA7IEEgPCByLmZpbHRlci5wYXJhbWV0ZXJzLmxlbmd0aDsgQSsrKSB7CiAgICAgICAgdmFyIHQgPSByLmZpbHRlci5wYXJhbWV0ZXJzW0FdLCBpID0gdC5uYW1lLCBuID0gdC52YWx1ZSwgZiA9ICIiLmNvbmNhdChrcltNYXRoLmZsb29yKEEgLyBrci5sZW5ndGgpXSkuY29uY2F0KGtyW0EgJSBrci5sZW5ndGhdKTsKICAgICAgICBhWyJQTiIuY29uY2F0KGYpXSA9IGksIGFbIlBUIi5jb25jYXQoZildID0gMCwgYVsiUEYiLmNvbmNhdChmKV0gPSBuOwogICAgICB9CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IGgoeyBfbmFtZTogIk9pbCBQYWludCBQbHVnaW4iLCBfY2xhc3NJRDogIlBiUGwiLCBLbk5tOiByLmZpbHRlci5uYW1lLCBHcHVZOiByLmZpbHRlci5ncHUsIExJV3k6IHIuZmlsdGVyLmxpZ2h0aW5nLCBGUHRoOiAiMSIgfSwgYSksIGZpbHRlcklEOiAxMzQ4NjIwMzk2IH0pOwogICAgfQogICAgY2FzZSAib2lsIHBhaW50IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiT2lsIFBhaW50IiwKICAgICAgICBfY2xhc3NJRDogIm9pbFBhaW50IiwKICAgICAgICBsaWdodGluZ09uOiByLmZpbHRlci5saWdodGluZ09uLAogICAgICAgIHN0eWxpemF0aW9uOiByLmZpbHRlci5zdHlsaXphdGlvbiwKICAgICAgICBjbGVhbmxpbmVzczogci5maWx0ZXIuY2xlYW5saW5lc3MsCiAgICAgICAgYnJ1c2hTY2FsZTogci5maWx0ZXIuYnJ1c2hTY2FsZSwKICAgICAgICBtaWNyb0JydXNoOiByLmZpbHRlci5taWNyb0JydXNoLAogICAgICAgIExnaEQ6IHIuZmlsdGVyLmxpZ2h0RGlyZWN0aW9uLAogICAgICAgIHNwZWN1bGFyaXR5OiByLmZpbHRlci5zcGVjdWxhcml0eQogICAgICB9LCBmaWx0ZXJJRDogMTEyMiB9KTsKICAgIGNhc2UgImxpcXVpZnkiOgogICAgICByZXR1cm4gaChoKHt9LCBlKSwgeyBGbHRyOiB7CiAgICAgICAgX25hbWU6ICJMaXF1aWZ5IiwKICAgICAgICBfY2xhc3NJRDogIkxxRnkiLAogICAgICAgIExxTWU6IHIuZmlsdGVyLmxpcXVpZnlNZXNoCiAgICAgIH0sIGZpbHRlcklEOiAxMjgyNDkyMDI1IH0pOwogICAgY2FzZSAicGVyc3BlY3RpdmUgd2FycCI6CiAgICAgIHJldHVybiBoKGgoe30sIGUpLCB7IEZsdHI6IHsKICAgICAgICBfbmFtZTogIlBlcnNwZWN0aXZlIFdhcnAiLAogICAgICAgIF9jbGFzc0lEOiAicGVyc3BlY3RpdmVXYXJwVHJhbnNmb3JtIiwKICAgICAgICB2ZXJ0aWNlczogci5maWx0ZXIudmVydGljZXMubWFwKG8yKSwKICAgICAgICB3YXJwZWRWZXJ0aWNlczogci5maWx0ZXIud2FycGVkVmVydGljZXMubWFwKG8yKSwKICAgICAgICBxdWFkczogci5maWx0ZXIucXVhZHMubWFwKGZ1bmN0aW9uKHUpIHsKICAgICAgICAgIHJldHVybiB7IGluZGljZXM6IHUgfTsKICAgICAgICB9KQogICAgICB9LCBmaWx0ZXJJRDogNDQyIH0pOwogICAgY2FzZSAiY3VydmVzIjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogaCh7IF9uYW1lOiAiQ3VydmVzIiwgX2NsYXNzSUQ6ICJDcnZzIiwgcHJlc2V0S2luZDogUjEuZW5jb2RlKHIuZmlsdGVyLnByZXNldEtpbmQpIH0sIHIuZmlsdGVyLmFkanVzdG1lbnRzID8gewogICAgICAgIEFkanM6IHIuZmlsdGVyLmFkanVzdG1lbnRzLm1hcChmdW5jdGlvbih1KSB7CiAgICAgICAgICByZXR1cm4gImN1cnZlIiBpbiB1ID8gewogICAgICAgICAgICBfbmFtZTogIiIsCiAgICAgICAgICAgIF9jbGFzc0lEOiAiQ3J2QSIsCiAgICAgICAgICAgIENobmw6IHUuY2hhbm5lbHMubWFwKEUyLmVuY29kZSksCiAgICAgICAgICAgICJDcnYgIjogdS5jdXJ2ZS5tYXAoZnVuY3Rpb24obykgewogICAgICAgICAgICAgIHJldHVybiBoKHsgX25hbWU6ICIiLCBfY2xhc3NJRDogIlBudCAiLCBIcnpuOiBvLngsIFZydGM6IG8ueSB9LCBvLmN1cnZlZCA/IHsgQ250eTogITAgfSA6IHt9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIF9uYW1lOiAiIiwKICAgICAgICAgICAgX2NsYXNzSUQ6ICJDcnZBIiwKICAgICAgICAgICAgQ2hubDogdS5jaGFubmVscy5tYXAoRTIuZW5jb2RlKSwKICAgICAgICAgICAgTXBuZzogdS52YWx1ZXMKICAgICAgICAgIH07CiAgICAgICAgfSkKICAgICAgfSA6IHt9KSwgZmlsdGVySUQ6IDExMzE1NzQ4OTkgfSk7CiAgICBjYXNlICJicmlnaHRuZXNzL2NvbnRyYXN0IjoKICAgICAgcmV0dXJuIGgoaCh7fSwgZSksIHsgRmx0cjogewogICAgICAgIF9uYW1lOiAiQnJpZ2h0bmVzcy9Db250cmFzdCIsCiAgICAgICAgX2NsYXNzSUQ6ICJCcmdDIiwKICAgICAgICBCcmdoOiByLmZpbHRlci5icmlnaHRuZXNzLAogICAgICAgIENudHI6IHIuZmlsdGVyLmNvbnRyYXN0LAogICAgICAgIHVzZUxlZ2FjeTogISFyLmZpbHRlci51c2VMZWdhY3kKICAgICAgfSwgZmlsdGVySUQ6IDExMTQ3OTM3OTUgfSk7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vdyBmaWx0ZXIgdHlwZTogIi5jb25jYXQoci50eXBlKSk7CiAgfQp9CmZ1bmN0aW9uIGVmKHIpIHsKICBpZiAoci53YXJwKQogICAgcmV0dXJuIHIud2FycDsKICBpZiAoIXIud2lkdGggfHwgIXIuaGVpZ2h0KQogICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwcm92aWRlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGxpbmtlZCBpbWFnZSBpbiBwbGFjZWRMYXllciIpOwogIHZhciBlID0gci53aWR0aCwgYSA9IHIuaGVpZ2h0LCBBID0gMCwgdCA9IGUgLyAzLCBpID0gZSAqIDIgLyAzLCBuID0gZSwgZiA9IDAsIHUgPSBhIC8gMywgbyA9IGEgKiAyIC8gMywgbCA9IGE7CiAgcmV0dXJuIHsKICAgIHN0eWxlOiAiY3VzdG9tIiwKICAgIHZhbHVlOiAwLAogICAgcGVyc3BlY3RpdmU6IDAsCiAgICBwZXJzcGVjdGl2ZU90aGVyOiAwLAogICAgcm90YXRlOiAiaG9yaXpvbnRhbCIsCiAgICBib3VuZHM6IHsKICAgICAgdG9wOiB7IHZhbHVlOiAwLCB1bml0czogIlBpeGVscyIgfSwKICAgICAgbGVmdDogeyB2YWx1ZTogMCwgdW5pdHM6ICJQaXhlbHMiIH0sCiAgICAgIGJvdHRvbTogeyB2YWx1ZTogYSwgdW5pdHM6ICJQaXhlbHMiIH0sCiAgICAgIHJpZ2h0OiB7IHZhbHVlOiBlLCB1bml0czogIlBpeGVscyIgfQogICAgfSwKICAgIHVPcmRlcjogNCwKICAgIHZPcmRlcjogNCwKICAgIGN1c3RvbUVudmVsb3BlV2FycDogewogICAgICBtZXNoUG9pbnRzOiBbCiAgICAgICAgeyB4OiBBLCB5OiBmIH0sCiAgICAgICAgeyB4OiB0LCB5OiBmIH0sCiAgICAgICAgeyB4OiBpLCB5OiBmIH0sCiAgICAgICAgeyB4OiBuLCB5OiBmIH0sCiAgICAgICAgeyB4OiBBLCB5OiB1IH0sCiAgICAgICAgeyB4OiB0LCB5OiB1IH0sCiAgICAgICAgeyB4OiBpLCB5OiB1IH0sCiAgICAgICAgeyB4OiBuLCB5OiB1IH0sCiAgICAgICAgeyB4OiBBLCB5OiBvIH0sCiAgICAgICAgeyB4OiB0LCB5OiBvIH0sCiAgICAgICAgeyB4OiBpLCB5OiBvIH0sCiAgICAgICAgeyB4OiBuLCB5OiBvIH0sCiAgICAgICAgeyB4OiBBLCB5OiBsIH0sCiAgICAgICAgeyB4OiB0LCB5OiBsIH0sCiAgICAgICAgeyB4OiBpLCB5OiBsIH0sCiAgICAgICAgeyB4OiBuLCB5OiBsIH0KICAgICAgXQogICAgfQogIH07Cn0KcjAoIlNvTGQiLCBYMCgicGxhY2VkTGF5ZXIiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChSMChyKSAhPT0gInNvTEQiKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNvTGQgdHlwZSIpOwogIHZhciBBID0gTChyKTsKICBpZiAoQSAhPT0gNCAmJiBBICE9PSA1KQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNvTGQgdmVyc2lvbiIpOwogIHZhciB0ID0gbTAociwgITApOwogIGUucGxhY2VkTGF5ZXIgPSB7CiAgICBpZDogdC5JZG50LAogICAgcGxhY2VkOiB0LnBsYWNlZCwKICAgIHR5cGU6IFBhW3QuVHlwZV0sCiAgICBwYWdlTnVtYmVyOiB0LlBnTm0sCiAgICB0b3RhbFBhZ2VzOiB0LnRvdGFsUGFnZXMsCiAgICBmcmFtZVN0ZXA6IG5yKHQuZnJhbWVTdGVwKSwKICAgIGR1cmF0aW9uOiBucih0LmR1cmF0aW9uKSwKICAgIGZyYW1lQ291bnQ6IHQuZnJhbWVDb3VudCwKICAgIHRyYW5zZm9ybTogdC5Ucm5mLAogICAgd2lkdGg6IHRbIlN6ICAiXS5XZHRoLAogICAgaGVpZ2h0OiB0WyJTeiAgIl0uSGdodCwKICAgIHJlc29sdXRpb246IEYwKHQuUnNsdCksCiAgICB3YXJwOiBhZih0LnF1aWx0V2FycCB8fCB0LndhcnApCiAgfSwgdC5ub25BZmZpbmVUcmFuc2Zvcm0gJiYgdC5ub25BZmZpbmVUcmFuc2Zvcm0uc29tZShmdW5jdGlvbihpLCBuKSB7CiAgICByZXR1cm4gaSAhPT0gdC5Ucm5mW25dOwogIH0pICYmIChlLnBsYWNlZExheWVyLm5vbkFmZmluZVRyYW5zZm9ybSA9IHQubm9uQWZmaW5lVHJhbnNmb3JtKSwgdC5Dcm9wICYmIChlLnBsYWNlZExheWVyLmNyb3AgPSB0LkNyb3ApLCB0LmNvbXAgJiYgKGUucGxhY2VkTGF5ZXIuY29tcCA9IHQuY29tcCksIHQuY29tcEluZm8gJiYgKGUucGxhY2VkTGF5ZXIuY29tcEluZm8gPSB7CiAgICBjb21wSUQ6IHQuY29tcEluZm8uY29tcElELAogICAgb3JpZ2luYWxDb21wSUQ6IHQuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICB9KSwgdC5maWx0ZXJGWCAmJiAoZS5wbGFjZWRMYXllci5maWx0ZXIgPSBJNCh0LmZpbHRlckZYLCByKSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhLCBBOwogIG4wKHIsICJzb0xEIiksIHQwKHIsIDQpOwogIHZhciB0ID0gZS5wbGFjZWRMYXllcjsKICBpZiAoIXQuaWQgfHwgdHlwZW9mIHQuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KHQuaWQpKQogICAgdGhyb3cgbmV3IEVycm9yKCJQbGFjZWQgbGF5ZXIgSUQgbXVzdCBiZSBpbiBhIEdVSUQgZm9ybWF0IChleGFtcGxlOiAyMDk1M2RkYi05MzkxLTExZWMtYjRmMS1jMTU2NzRmNTBiYzQpIik7CiAgdmFyIGkgPSBoKGgoeyBJZG50OiB0LmlkLCBwbGFjZWQ6IChhID0gdC5wbGFjZWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0LmlkLCBQZ05tOiB0LnBhZ2VOdW1iZXIgfHwgMSwgdG90YWxQYWdlczogdC50b3RhbFBhZ2VzIHx8IDEgfSwgdC5jcm9wID8geyBDcm9wOiB0LmNyb3AgfSA6IHt9KSwgewogICAgZnJhbWVTdGVwOiB0LmZyYW1lU3RlcCB8fCB7IG51bWVyYXRvcjogMCwgZGVub21pbmF0b3I6IDYwMCB9LAogICAgZHVyYXRpb246IHQuZHVyYXRpb24gfHwgeyBudW1lcmF0b3I6IDAsIGRlbm9taW5hdG9yOiA2MDAgfSwKICAgIGZyYW1lQ291bnQ6IHQuZnJhbWVDb3VudCB8fCAwLAogICAgQW5udDogMTYsCiAgICBUeXBlOiBQYS5pbmRleE9mKHQudHlwZSksCiAgICBUcm5mOiB0LnRyYW5zZm9ybSwKICAgIG5vbkFmZmluZVRyYW5zZm9ybTogKEEgPSB0Lm5vbkFmZmluZVRyYW5zZm9ybSkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IHQudHJhbnNmb3JtLAogICAgLy8gcXVpbHRXYXJwOiB7fSBhcyBhbnksCiAgICB3YXJwOiBaZShlZih0KSksCiAgICAiU3ogICI6IHsKICAgICAgX25hbWU6ICIiLAogICAgICBfY2xhc3NJRDogIlBudCAiLAogICAgICBXZHRoOiB0LndpZHRoIHx8IDAsCiAgICAgIEhnaHQ6IHQuaGVpZ2h0IHx8IDAKICAgICAgLy8gVE9ETzogZmluZCBzaXplID8KICAgIH0sCiAgICBSc2x0OiB0LnJlc29sdXRpb24gPyBEMCh0LnJlc29sdXRpb24sICJyZXNvbHV0aW9uIikgOiB7IHVuaXRzOiAiRGVuc2l0eSIsIHZhbHVlOiA3MiB9CiAgfSk7CiAgaWYgKHQuZmlsdGVyICYmIChpLmZpbHRlckZYID0gewogICAgX25hbWU6ICIiLAogICAgX2NsYXNzSUQ6ICJmaWx0ZXJGWFN0eWxlIiwKICAgIGVuYWI6IHQuZmlsdGVyLmVuYWJsZWQsCiAgICB2YWxpZEF0UG9zaXRpb246IHQuZmlsdGVyLnZhbGlkQXRQb3NpdGlvbiwKICAgIGZpbHRlck1hc2tFbmFibGU6IHQuZmlsdGVyLm1hc2tFbmFibGVkLAogICAgZmlsdGVyTWFza0xpbmtlZDogdC5maWx0ZXIubWFza0xpbmtlZCwKICAgIGZpbHRlck1hc2tFeHRlbmRXaXRoV2hpdGU6IHQuZmlsdGVyLm1hc2tFeHRlbmRXaXRoV2hpdGUsCiAgICBmaWx0ZXJGWExpc3Q6IHQuZmlsdGVyLmxpc3QubWFwKGZ1bmN0aW9uKGYpIHsKICAgICAgcmV0dXJuIEY0KGYpOwogICAgfSkKICB9KSwgdC53YXJwICYmIHpBKHQud2FycCkpIHsKICAgIHZhciBuID0gWmUodC53YXJwKTsKICAgIGkucXVpbHRXYXJwID0gbiwgaS53YXJwID0gewogICAgICB3YXJwU3R5bGU6ICJ3YXJwU3R5bGUud2FycE5vbmUiLAogICAgICB3YXJwVmFsdWU6IG4ud2FycFZhbHVlLAogICAgICB3YXJwUGVyc3BlY3RpdmU6IG4ud2FycFBlcnNwZWN0aXZlLAogICAgICB3YXJwUGVyc3BlY3RpdmVPdGhlcjogbi53YXJwUGVyc3BlY3RpdmVPdGhlciwKICAgICAgd2FycFJvdGF0ZTogbi53YXJwUm90YXRlLAogICAgICBib3VuZHM6IG4uYm91bmRzLAogICAgICB1T3JkZXI6IG4udU9yZGVyLAogICAgICB2T3JkZXI6IG4udk9yZGVyCiAgICB9OwogIH0gZWxzZQogICAgZGVsZXRlIGkucXVpbHRXYXJwOwogIHQuY29tcCAmJiAoaS5jb21wID0gdC5jb21wKSwgdC5jb21wSW5mbyAmJiAoaS5jb21wSW5mbyA9IHQuY29tcEluZm8pLCBwMChyLCAiIiwgIm51bGwiLCBpLCBpLnF1aWx0V2FycCA/ICJxdWlsdFdhcnAiIDogIndhcnAiKTsKfSk7CmUyKCJTb0xFIiwgIlNvTGQiKTsKcjAoImZ4cnAiLCBYMCgicmVmZXJlbmNlUG9pbnQiKSwgZnVuY3Rpb24ociwgZSkgewogIGUucmVmZXJlbmNlUG9pbnQgPSB7CiAgICB4OiBJcihyKSwKICAgIHk6IElyKHIpCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIEZyKHIsIGUucmVmZXJlbmNlUG9pbnQueCksIEZyKHIsIGUucmVmZXJlbmNlUG9pbnQueSk7Cn0pOwpyMCgiTHIxNiIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSwgdCkgewogIGpBKHIsIEEsIHQpOwp9LCBmdW5jdGlvbihyLCBlKSB7Cn0pOwpyMCgiTHIzMiIsIGZ1bmN0aW9uKCkgewogIHJldHVybiAhMTsKfSwgZnVuY3Rpb24ociwgZSwgYSwgQSwgdCkgewogIGpBKHIsIEEsIHQpOwp9LCBmdW5jdGlvbihyLCBlKSB7Cn0pOwpyMCgiTE1zayIsIFgwKCJ1c2VyTWFzayIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS51c2VyTWFzayA9IHsKICAgIGNvbG9yU3BhY2U6IEswKHIpLAogICAgb3BhY2l0eTogUChyKSAvIDI1NQogIH07CiAgdmFyIGEgPSBPKHIpOwogIGlmIChhICE9PSAxMjgpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZmxhZyB2YWx1ZSIpOwogIEgociwgMSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUudXNlck1hc2s7CiAgcnIociwgYS5jb2xvclNwYWNlKSwgeChyLCBNQShhLm9wYWNpdHksIDAsIDEpICogMjU1KSwgVChyLCAxMjgpLCBaMChyLCAxKTsKfSk7CnIwKAogICJQYXR0IiwKICAvLyBUT0RPOiBoYW5kbGUgYWxzbyBQYXQyICYgUGF0MwogIGZ1bmN0aW9uKHIpIHsKICAgIHJldHVybiAhcjsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIGEoKSAmJiBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlKSB7CiAgfQopOwpmdW5jdGlvbiBEaShyKSB7CiAgdmFyIGUgPSBMKHIpLCBhID0gTChyKSwgQSA9IEwociksIHQgPSBMKHIpOwogIHJldHVybiB7IHRvcDogZSwgbGVmdDogYSwgYm90dG9tOiBBLCByaWdodDogdCB9Owp9CmZ1bmN0aW9uIHhpKHIsIGUpIHsKICB0MChyLCBlLnRvcCksIHQwKHIsIGUubGVmdCksIHQwKHIsIGUuYm90dG9tKSwgdDAociwgZS5yaWdodCk7Cn0KcjAoIkFubm8iLCBmdW5jdGlvbihyKSB7CiAgcmV0dXJuIHIuYW5ub3RhdGlvbnMgIT09IHZvaWQgMDsKfSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUChyKSwgdCA9IFAocik7CiAgaWYgKEEgIT09IDIgfHwgdCAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBBbm5vIHZlcnNpb24iKTsKICBmb3IgKHZhciBpID0gUyhyKSwgbiA9IFtdLCBmID0gMDsgZiA8IGk7IGYrKykgewogICAgUyhyKTsKICAgIHZhciB1ID0gUjAociksIG8gPSAhIU8ocik7CiAgICBPKHIpLCBQKHIpOwogICAgdmFyIGwgPSBEaShyKSwgcyA9IERpKHIpLCBjID0gSzAociksIGQgPSB4cihyLCAyKSwgdiA9IHhyKHIsIDIpLCBrID0geHIociwgMik7CiAgICBTKHIpLCBSMChyKTsKICAgIHZhciBFID0gUyhyKSwgZyA9IHZvaWQgMDsKICAgIGlmICh1ID09PSAidHh0QSIpCiAgICAgIEUgPj0gMiAmJiBQKHIpID09PSA2NTI3OSA/IGcgPSBVQShyLCAoRSAtIDIpIC8gMikgOiAoci5vZmZzZXQgLT0gMiwgZyA9IFNlKHIsIEUpKSwgZyA9IGcucmVwbGFjZSgvXHIvZywgYApgKTsKICAgIGVsc2UgaWYgKHUgPT09ICJzbmRBIikKICAgICAgZyA9IFkwKHIsIEUpOwogICAgZWxzZQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gYW5ub3RhdGlvbiB0eXBlIik7CiAgICBuLnB1c2goewogICAgICB0eXBlOiB1ID09PSAidHh0QSIgPyAidGV4dCIgOiAic291bmQiLAogICAgICBvcGVuOiBvLAogICAgICBpY29uTG9jYXRpb246IGwsCiAgICAgIHBvcHVwTG9jYXRpb246IHMsCiAgICAgIGNvbG9yOiBjLAogICAgICBhdXRob3I6IGQsCiAgICAgIG5hbWU6IHYsCiAgICAgIGRhdGU6IGssCiAgICAgIGRhdGE6IGcKICAgIH0pOwogIH0KICBlLmFubm90YXRpb25zID0gbiwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFubm90YXRpb25zOwogIHgociwgMiksIHgociwgMSksIFUociwgYS5sZW5ndGgpOwogIGZvciAodmFyIEEgPSAwLCB0ID0gYTsgQSA8IHQubGVuZ3RoOyBBKyspIHsKICAgIHZhciBpID0gdFtBXSwgbiA9IGkudHlwZSA9PT0gInNvdW5kIjsKICAgIGlmIChuICYmICEoaS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiU291bmQgYW5ub3RhdGlvbiBkYXRhIHNob3VsZCBiZSBVaW50OEFycmF5Iik7CiAgICBpZiAoIW4gJiYgdHlwZW9mIGkuZGF0YSAhPSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXh0IGFubm90YXRpb24gZGF0YSBzaG91bGQgYmUgc3RyaW5nIik7CiAgICB2YXIgZiA9IHIub2Zmc2V0OwogICAgVShyLCAwKSwgbjAociwgbiA/ICJzbmRBIiA6ICJ0eHRBIiksIFQociwgaS5vcGVuID8gMSA6IDApLCBUKHIsIDI4KSwgeChyLCAxKSwgeGkociwgaS5pY29uTG9jYXRpb24pLCB4aShyLCBpLnBvcHVwTG9jYXRpb24pLCBycihyLCBpLmNvbG9yKSwga2EociwgaS5hdXRob3IgfHwgIiIsIDIpLCBrYShyLCBpLm5hbWUgfHwgIiIsIDIpLCBrYShyLCBpLmRhdGUgfHwgIiIsIDIpOwogICAgdmFyIHUgPSByLm9mZnNldDsKICAgIFUociwgMCksIG4wKHIsIG4gPyAic25kTSIgOiAidHh0QyIpLCBVKHIsIDApOwogICAgdmFyIG8gPSByLm9mZnNldDsKICAgIGlmIChuKQogICAgICBOcihyLCBpLmRhdGEpOwogICAgZWxzZSB7CiAgICAgIHgociwgNjUyNzkpOwogICAgICBmb3IgKHZhciBsID0gaS5kYXRhLnJlcGxhY2UoL1xuL2csICJcciIpLCBzID0gMDsgcyA8IGwubGVuZ3RoOyBzKyspCiAgICAgICAgeChyLCBsLmNoYXJDb2RlQXQocykpOwogICAgfQogICAgci52aWV3LnNldFVpbnQzMihmLCByLm9mZnNldCAtIGYsICExKSwgci52aWV3LnNldFVpbnQzMih1LCByLm9mZnNldCAtIHUsICExKSwgci52aWV3LnNldFVpbnQzMihvIC0gNCwgci5vZmZzZXQgLSBvLCAhMSk7CiAgfQp9KTsKZnVuY3Rpb24gQWYocikgewogIHIwKHIsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBhID0gZTsKICAgIHJldHVybiAhKCFhLmxpbmtlZEZpbGVzIHx8ICFhLmxpbmtlZEZpbGVzLmxlbmd0aCB8fCByID09PSAibG5rRSIgJiYgIWEubGlua2VkRmlsZXMuc29tZShmdW5jdGlvbihBKSB7CiAgICAgIHJldHVybiBBLmxpbmtlZEZpbGU7CiAgICB9KSk7CiAgfSwgZnVuY3Rpb24oZSwgYSwgQSwgdCkgewogICAgdmFyIGkgPSBhOwogICAgZm9yIChpLmxpbmtlZEZpbGVzID0gaS5saW5rZWRGaWxlcyB8fCBbXTsgQSgpID4gODsgKSB7CiAgICAgIHZhciBuID0gb0EoZSksIGYgPSBlLm9mZnNldCwgdSA9IFIwKGUpLCBvID0gTChlKSwgbCA9IHhyKGUsIDEpLCBzID0gejAoZSksIGMgPSBSMChlKS50cmltKCksIGQgPSBSMChlKS50cmltKCksIHYgPSBvQShlKSwgayA9IE8oZSksIEUgPSBrID8gbTAoZSkgOiB2b2lkIDAsIGcgPSB1ID09PSAibGlGRSIgPyBtMChlKSA6IHZvaWQgMCwgdyA9IHsgaWQ6IGwsIG5hbWU6IHMgfTsKICAgICAgaWYgKGMgJiYgKHcudHlwZSA9IGMpLCBkICYmICh3LmNyZWF0b3IgPSBkKSwgRSAmJiAody5kZXNjcmlwdG9yID0gewogICAgICAgIGNvbXBJbmZvOiB7CiAgICAgICAgICBjb21wSUQ6IEUuY29tcEluZm8uY29tcElELAogICAgICAgICAgb3JpZ2luYWxDb21wSUQ6IEUuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICAgICAgICB9CiAgICAgIH0pLCB1ID09PSAibGlGRSIgJiYgbyA+IDMpIHsKICAgICAgICB2YXIgQiA9IEwoZSksIG0gPSBPKGUpLCBwID0gTyhlKSwgVyA9IE8oZSksIEMgPSBPKGUpLCBfID0gSXIoZSksIE4gPSBNYXRoLmZsb29yKF8pLCBEID0gKF8gLSBOKSAqIDFlMzsKICAgICAgICB3LnRpbWUgPSBuZXcgRGF0ZShEYXRlLlVUQyhCLCBtLCBwLCBXLCBDLCBOLCBEKSkudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICB2YXIgWSA9IHUgPT09ICJsaUZFIiA/IG9BKGUpIDogMDsKICAgICAgZm9yICh1ID09PSAibGlGQSIgJiYgSChlLCA4KSwgdSA9PT0gImxpRkQiICYmICh3LmRhdGEgPSBZMChlLCB2KSksIG8gPj0gNSAmJiAody5jaGlsZERvY3VtZW50SUQgPSB6MChlKSksIG8gPj0gNiAmJiAody5hc3NldE1vZFRpbWUgPSBJcihlKSksIG8gPj0gNyAmJiAody5hc3NldExvY2tlZFN0YXRlID0gTyhlKSksIHUgPT09ICJsaUZFIiAmJiBvID09PSAyICYmICh3LmRhdGEgPSBZMChlLCBZKSksIGUuc2tpcExpbmtlZEZpbGVzRGF0YSAmJiAody5kYXRhID0gdm9pZCAwKSwgciA9PT0gImxua0UiICYmICh3LmxpbmtlZEZpbGUgPSB7CiAgICAgICAgZmlsZVNpemU6IFksCiAgICAgICAgbmFtZTogKGcgPT0gbnVsbCA/IHZvaWQgMCA6IGdbIk5tICAiXSkgfHwgIiIsCiAgICAgICAgZnVsbFBhdGg6IChnID09IG51bGwgPyB2b2lkIDAgOiBnLmZ1bGxQYXRoKSB8fCAiIiwKICAgICAgICBvcmlnaW5hbFBhdGg6IChnID09IG51bGwgPyB2b2lkIDAgOiBnLm9yaWdpbmFsUGF0aCkgfHwgIiIsCiAgICAgICAgcmVsYXRpdmVQYXRoOiAoZyA9PSBudWxsID8gdm9pZCAwIDogZy5yZWxQYXRoKSB8fCAiIgogICAgICB9KSwgaS5saW5rZWRGaWxlcy5wdXNoKHcpOyBuICUgNDsgKQogICAgICAgIG4rKzsKICAgICAgZS5vZmZzZXQgPSBmICsgbjsKICAgIH0KICAgIEgoZSwgQSgpKTsKICB9LCBmdW5jdGlvbihlLCBhKSB7CiAgICBmb3IgKHZhciBBLCB0LCBpLCBuLCBmLCB1LCBvLCBsLCBzLCBjID0gYSwgZCA9IDAsIHYgPSBjLmxpbmtlZEZpbGVzOyBkIDwgdi5sZW5ndGg7IGQrKykgewogICAgICB2YXIgayA9IHZbZF07CiAgICAgIGlmIChyID09PSAibG5rRSIgPT0gISFrLmxpbmtlZEZpbGUpIHsKICAgICAgICB2YXIgRSA9IDI7CiAgICAgICAgay5hc3NldExvY2tlZFN0YXRlICE9IG51bGwgPyBFID0gNyA6IGsuYXNzZXRNb2RUaW1lICE9IG51bGwgPyBFID0gNiA6IGsuY2hpbGREb2N1bWVudElEICE9IG51bGwgPyBFID0gNSA6IHIgPT09ICJsbmtFIiAmJiAoRSA9IDMpLCB1QShlLCAwKTsKICAgICAgICB2YXIgZyA9IGUub2Zmc2V0OwogICAgICAgIGlmIChuMChlLCByID09PSAibG5rRSIgPyAibGlGRSIgOiBrLmRhdGEgPyAibGlGRCIgOiAibGlGQSIpLCB0MChlLCBFKSwgIWsuaWQgfHwgdHlwZW9mIGsuaWQgIT0gInN0cmluZyIgfHwgIS9eWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kLy50ZXN0KGsuaWQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJMaW5rZWQgZmlsZSBJRCBtdXN0IGJlIGluIGEgR1VJRCBmb3JtYXQgKGV4YW1wbGU6IDIwOTUzZGRiLTkzOTEtMTFlYy1iNGYxLWMxNTY3NGY1MGJjNCkiKTsKICAgICAgICBpZiAoa2EoZSwgay5pZCwgMSksIFdhKGUsIGsubmFtZSB8fCAiIiksIG4wKGUsIGsudHlwZSA/ICIiLmNvbmNhdChrLnR5cGUsICIgICAgIikuc3Vic3RyaW5nKDAsIDQpIDogIiAgICAiKSwgbjAoZSwgay5jcmVhdG9yID8gIiIuY29uY2F0KGsuY3JlYXRvciwgIiAgICAiKS5zdWJzdHJpbmcoMCwgNCkgOiAiXDBcMFwwXDAiKSwgdUEoZSwgay5kYXRhID8gay5kYXRhLmJ5dGVMZW5ndGggOiAwKSwgay5kZXNjcmlwdG9yICYmIGsuZGVzY3JpcHRvci5jb21wSW5mbykgewogICAgICAgICAgdmFyIHcgPSB7CiAgICAgICAgICAgIGNvbXBJbmZvOiB7CiAgICAgICAgICAgICAgY29tcElEOiBrLmRlc2NyaXB0b3IuY29tcEluZm8uY29tcElELAogICAgICAgICAgICAgIG9yaWdpbmFsQ29tcElEOiBrLmRlc2NyaXB0b3IuY29tcEluZm8ub3JpZ2luYWxDb21wSUQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFQoZSwgMSksIHAwKGUsICIiLCAibnVsbCIsIHcpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgVChlLCAwKTsKICAgICAgICBpZiAociA9PT0gImxua0UiKSB7CiAgICAgICAgICB2YXIgdyA9IHsKICAgICAgICAgICAgZGVzY1ZlcnNpb246IDIsCiAgICAgICAgICAgICJObSAgIjogKHQgPSAoQSA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5uYW1lKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogIiIsCiAgICAgICAgICAgIGZ1bGxQYXRoOiAobiA9IChpID0gay5saW5rZWRGaWxlKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpLmZ1bGxQYXRoKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogIiIsCiAgICAgICAgICAgIG9yaWdpbmFsUGF0aDogKHUgPSAoZiA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZi5vcmlnaW5hbFBhdGgpICE9PSBudWxsICYmIHUgIT09IHZvaWQgMCA/IHUgOiAiIiwKICAgICAgICAgICAgcmVsUGF0aDogKGwgPSAobyA9IGsubGlua2VkRmlsZSkgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogby5yZWxhdGl2ZVBhdGgpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiAiIgogICAgICAgICAgfTsKICAgICAgICAgIHAwKGUsICIiLCAiRXh0ZXJuYWxGaWxlTGluayIsIHcpOwogICAgICAgICAgdmFyIEIgPSBrLnRpbWUgPyBuZXcgRGF0ZShrLnRpbWUpIDogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICB0MChlLCBCLmdldFVUQ0Z1bGxZZWFyKCkpLCBUKGUsIEIuZ2V0VVRDTW9udGgoKSksIFQoZSwgQi5nZXRVVENEYXRlKCkpLCBUKGUsIEIuZ2V0VVRDSG91cnMoKSksIFQoZSwgQi5nZXRVVENNaW51dGVzKCkpLCBGcihlLCBCLmdldFVUQ1NlY29uZHMoKSArIEIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgLyAxZTMpOwogICAgICAgIH0KICAgICAgICBrLmRhdGEgPyBOcihlLCBrLmRhdGEpIDogdUEoZSwgKChzID0gay5saW5rZWRGaWxlKSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzLmZpbGVTaXplKSB8fCAwKSwgRSA+PSA1ICYmIFdhKGUsIGsuY2hpbGREb2N1bWVudElEIHx8ICIiKSwgRSA+PSA2ICYmIEZyKGUsIGsuYXNzZXRNb2RUaW1lIHx8IDApLCBFID49IDcgJiYgVChlLCBrLmFzc2V0TG9ja2VkU3RhdGUgfHwgMCk7CiAgICAgICAgdmFyIG0gPSBlLm9mZnNldCAtIGc7CiAgICAgICAgZm9yIChlLnZpZXcuc2V0VWludDMyKGcgLSA0LCBtLCAhMSk7IG0gJSA0OyApCiAgICAgICAgICBtKyssIFQoZSwgMCk7CiAgICAgIH0KICAgIH0KICB9KTsKfQpBZigibG5rMiIpOwpBZigibG5rRSIpOwplMigibG5rRCIsICJsbmsyIik7CmUyKCJsbmszIiwgImxuazIiKTsKcjAoInB0aHMiLCBYMCgicGF0aExpc3QiKSwgZnVuY3Rpb24ociwgZSkgewogIG0wKHIsICEwKSwgZS5wYXRoTGlzdCA9IFtdOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSB7CiAgICBwYXRoTGlzdDogW10KICAgIC8vIFRPRE86IHdyaXRlIHBhdGhzCiAgfTsKICBwMChyLCAiIiwgInBhdGhzRGF0YUNsYXNzIiwgYSk7Cn0pOwpyMCgibHl2ciIsIFgwKCJ2ZXJzaW9uIiksIGZ1bmN0aW9uKHIsIGUpIHsKICByZXR1cm4gZS52ZXJzaW9uID0gUyhyKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHJldHVybiBVKHIsIGUudmVyc2lvbik7Cn0pOwpyMCgKICAibGZ4cyIsCiAgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gITE7CiAgfSwKICAvLyBUT0RPOiBub3Qgc3VyZSB3aGVuIHdlIGFjdHVhbGx5IG5lZWQgdG8gd3JpdGUgdGhpcyBzZWN0aW9uCiAgLy8gTk9URTogdGhpcyBtaWdodCBiZSBpbnN1ZmZpY2llbnQKICAvLyB0YXJnZXQgPT4gdGFyZ2V0LmVmZmVjdHMgIT09IHVuZGVmaW5lZCAmJiAoCiAgLy8gCSEhdGFyZ2V0LmVmZmVjdHMuZHJvcFNoYWRvdz8uc29tZShlID0+IGUuY2hva2UpIHx8CiAgLy8gCSEhdGFyZ2V0LmVmZmVjdHMuaW5uZXJTaGFkb3c/LnNvbWUoZSA9PiBlLmNob2tlKSB8fAogIC8vIAkhIXRhcmdldC5lZmZlY3RzLm91dGVyR2xvdz8uY2hva2UgfHwKICAvLyAJISF0YXJnZXQuZWZmZWN0cy5pbm5lckdsb3c/LmNob2tlCiAgLy8gKSwKICBmdW5jdGlvbihyLCBlLCBhKSB7CiAgICB2YXIgQSA9IFMocik7CiAgICBpZiAoQSAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxmeHMgdmVyc2lvbiIpOwogICAgdmFyIHQgPSBtMChyKTsKICAgIGUuZWZmZWN0cyA9IFMyKHQsICEhci5sb2dNaXNzaW5nRmVhdHVyZXMpLCBIKHIsIGEoKSk7CiAgfSwKICBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgICB2YXIgdCA9IFYyKGUuZWZmZWN0cywgISFBLmxvZ01pc3NpbmdGZWF0dXJlcywgITApOwogICAgVShyLCAwKSwgcDAociwgIiIsICJudWxsIiwgdCk7CiAgfQopOwpmdW5jdGlvbiBpcihyKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKICAgIHJldHVybiAhIWUuYWRqdXN0bWVudCAmJiBlLmFkanVzdG1lbnQudHlwZSA9PT0gcjsKICB9Owp9CnIwKCJicml0IiwgaXIoImJyaWdodG5lc3MvY29udHJhc3QiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCB8fCAoZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogImJyaWdodG5lc3MvY29udHJhc3QiLAogICAgYnJpZ2h0bmVzczogZzAociksCiAgICBjb250cmFzdDogZzAociksCiAgICBtZWFuVmFsdWU6IGcwKHIpLAogICAgbGFiQ29sb3JPbmx5OiAhIU8ociksCiAgICB1c2VMZWdhY3k6ICEwCiAgfSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhLCBBID0gZS5hZGp1c3RtZW50OwogIEUwKHIsIEEuYnJpZ2h0bmVzcyB8fCAwKSwgRTAociwgQS5jb250cmFzdCB8fCAwKSwgRTAociwgKGEgPSBBLm1lYW5WYWx1ZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEyNyksIFQociwgQS5sYWJDb2xvck9ubHkgPyAxIDogMCksIFowKHIsIDEpOwp9KTsKZnVuY3Rpb24gdWUocikgewogIHZhciBlID0gZzAociksIGEgPSBnMChyKSwgQSA9IGcwKHIpLCB0ID0gZzAociksIGkgPSBnMChyKSAvIDEwMDsKICByZXR1cm4geyBzaGFkb3dJbnB1dDogZSwgaGlnaGxpZ2h0SW5wdXQ6IGEsIHNoYWRvd091dHB1dDogQSwgaGlnaGxpZ2h0T3V0cHV0OiB0LCBtaWR0b25lSW5wdXQ6IGkgfTsKfQpmdW5jdGlvbiB1MihyLCBlKSB7CiAgRTAociwgZS5zaGFkb3dJbnB1dCksIEUwKHIsIGUuaGlnaGxpZ2h0SW5wdXQpLCBFMChyLCBlLnNoYWRvd091dHB1dCksIEUwKHIsIGUuaGlnaGxpZ2h0T3V0cHV0KSwgRTAociwgTWF0aC5yb3VuZChlLm1pZHRvbmVJbnB1dCAqIDEwMCkpOwp9CnIwKCJsZXZsIiwgaXIoImxldmVscyIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFAocikgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGV2bCB2ZXJzaW9uIik7CiAgZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB7IHR5cGU6ICJsZXZlbHMiLCByZ2I6IHVlKHIpLCByZWQ6IHVlKHIpLCBncmVlbjogdWUociksIGJsdWU6IHVlKHIpIH0pLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudCwgQSA9IHsKICAgIHNoYWRvd0lucHV0OiAwLAogICAgaGlnaGxpZ2h0SW5wdXQ6IDI1NSwKICAgIHNoYWRvd091dHB1dDogMCwKICAgIGhpZ2hsaWdodE91dHB1dDogMjU1LAogICAgbWlkdG9uZUlucHV0OiAxCiAgfTsKICB4KHIsIDIpLCB1MihyLCBhLnJnYiB8fCBBKSwgdTIociwgYS5yZWQgfHwgQSksIHUyKHIsIGEuYmx1ZSB8fCBBKSwgdTIociwgYS5ncmVlbiB8fCBBKTsKICBmb3IgKHZhciB0ID0gMDsgdCA8IDU5OyB0KyspCiAgICB1MihyLCBBKTsKfSk7CmZ1bmN0aW9uIGxlKHIpIHsKICBmb3IgKHZhciBlID0gUChyKSwgYSA9IFtdLCBBID0gMDsgQSA8IGU7IEErKykgewogICAgdmFyIHQgPSBnMChyKSwgaSA9IGcwKHIpOwogICAgYS5wdXNoKHsgaW5wdXQ6IGksIG91dHB1dDogdCB9KTsKICB9CiAgcmV0dXJuIGE7Cn0KZnVuY3Rpb24gZmEociwgZSkgewogIHgociwgZS5sZW5ndGgpOwogIGZvciAodmFyIGEgPSAwLCBBID0gZTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgIHZhciB0ID0gQVthXTsKICAgIHgociwgdC5vdXRwdXQpLCB4KHIsIHQuaW5wdXQpOwogIH0KfQpyMCgiY3VydiIsIGlyKCJjdXJ2ZXMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChPKHIpLCBQKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGN1cnYgdmVyc2lvbiIpOwogIFAocik7CiAgdmFyIEEgPSBQKHIpLCB0ID0geyB0eXBlOiAiY3VydmVzIiB9OwogIEEgJiAxICYmICh0LnJnYiA9IGxlKHIpKSwgQSAmIDIgJiYgKHQucmVkID0gbGUocikpLCBBICYgNCAmJiAodC5ncmVlbiA9IGxlKHIpKSwgQSAmIDggJiYgKHQuYmx1ZSA9IGxlKHIpKSwgZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB0KSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQsIEEgPSBhLnJnYiwgdCA9IGEucmVkLCBpID0gYS5ncmVlbiwgbiA9IGEuYmx1ZSwgZiA9IDAsIHUgPSAwOwogIEEgJiYgQS5sZW5ndGggJiYgKGYgfD0gMSwgdSsrKSwgdCAmJiB0Lmxlbmd0aCAmJiAoZiB8PSAyLCB1KyspLCBpICYmIGkubGVuZ3RoICYmIChmIHw9IDQsIHUrKyksIG4gJiYgbi5sZW5ndGggJiYgKGYgfD0gOCwgdSsrKSwgVChyLCAwKSwgeChyLCAxKSwgeChyLCAwKSwgeChyLCBmKSwgQSAmJiBBLmxlbmd0aCAmJiBmYShyLCBBKSwgdCAmJiB0Lmxlbmd0aCAmJiBmYShyLCB0KSwgaSAmJiBpLmxlbmd0aCAmJiBmYShyLCBpKSwgbiAmJiBuLmxlbmd0aCAmJiBmYShyLCBuKSwgbjAociwgIkNydiAiKSwgeChyLCA0KSwgeChyLCAwKSwgeChyLCB1KSwgQSAmJiBBLmxlbmd0aCAmJiAoeChyLCAwKSwgZmEociwgQSkpLCB0ICYmIHQubGVuZ3RoICYmICh4KHIsIDEpLCBmYShyLCB0KSksIGkgJiYgaS5sZW5ndGggJiYgKHgociwgMiksIGZhKHIsIGkpKSwgbiAmJiBuLmxlbmd0aCAmJiAoeChyLCAzKSwgZmEociwgbikpOwp9KTsKcjAoImV4cEEiLCBpcigiZXhwb3N1cmUiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChQKHIpICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGV4cEEgdmVyc2lvbiIpOwogIGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiZXhwb3N1cmUiLCBleHBvc3VyZTogUnIociksIG9mZnNldDogUnIociksIGdhbW1hOiBScihyKSB9KSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQ7CiAgeChyLCAxKSwgVnIociwgYS5leHBvc3VyZSksIFZyKHIsIGEub2Zmc2V0KSwgVnIociwgYS5nYW1tYSksIFowKHIsIDIpOwp9KTsKcjAoInZpYkEiLCBpcigidmlicmFuY2UiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gbTAocik7CiAgZS5hZGp1c3RtZW50ID0geyB0eXBlOiAidmlicmFuY2UiIH0sIEEudmlicmFuY2UgIT09IHZvaWQgMCAmJiAoZS5hZGp1c3RtZW50LnZpYnJhbmNlID0gQS52aWJyYW5jZSksIEEuU3RydCAhPT0gdm9pZCAwICYmIChlLmFkanVzdG1lbnQuc2F0dXJhdGlvbiA9IEEuU3RydCksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50LCBBID0ge307CiAgYS52aWJyYW5jZSAhPT0gdm9pZCAwICYmIChBLnZpYnJhbmNlID0gYS52aWJyYW5jZSksIGEuc2F0dXJhdGlvbiAhPT0gdm9pZCAwICYmIChBLlN0cnQgPSBhLnNhdHVyYXRpb24pLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CmZ1bmN0aW9uIHBhKHIpIHsKICByZXR1cm4gewogICAgYTogZzAociksCiAgICBiOiBnMChyKSwKICAgIGM6IGcwKHIpLAogICAgZDogZzAociksCiAgICBodWU6IGcwKHIpLAogICAgc2F0dXJhdGlvbjogZzAociksCiAgICBsaWdodG5lc3M6IGcwKHIpCiAgfTsKfQpmdW5jdGlvbiB3YShyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEuYSB8fCAwKSwgRTAociwgYS5iIHx8IDApLCBFMChyLCBhLmMgfHwgMCksIEUwKHIsIGEuZCB8fCAwKSwgRTAociwgYS5odWUgfHwgMCksIEUwKHIsIGEuc2F0dXJhdGlvbiB8fCAwKSwgRTAociwgYS5saWdodG5lc3MgfHwgMCk7Cn0KcjAoImh1ZTIiLCBpcigiaHVlL3NhdHVyYXRpb24iKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGlmIChQKHIpICE9PSAyKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGh1ZTIgdmVyc2lvbiIpOwogIGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiaHVlL3NhdHVyYXRpb24iLCBtYXN0ZXI6IHBhKHIpLCByZWRzOiBwYShyKSwgeWVsbG93czogcGEociksIGdyZWVuczogcGEociksIGN5YW5zOiBwYShyKSwgYmx1ZXM6IHBhKHIpLCBtYWdlbnRhczogcGEocikgfSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMiksIHdhKHIsIGEubWFzdGVyKSwgd2EociwgYS5yZWRzKSwgd2EociwgYS55ZWxsb3dzKSwgd2EociwgYS5ncmVlbnMpLCB3YShyLCBhLmN5YW5zKSwgd2EociwgYS5ibHVlcyksIHdhKHIsIGEubWFnZW50YXMpOwp9KTsKZnVuY3Rpb24gY0EocikgewogIHJldHVybiB7CiAgICBjeWFuUmVkOiBnMChyKSwKICAgIG1hZ2VudGFHcmVlbjogZzAociksCiAgICB5ZWxsb3dCbHVlOiBnMChyKQogIH07Cn0KZnVuY3Rpb24gc0EociwgZSkgewogIEUwKHIsIGUuY3lhblJlZCB8fCAwKSwgRTAociwgZS5tYWdlbnRhR3JlZW4gfHwgMCksIEUwKHIsIGUueWVsbG93Qmx1ZSB8fCAwKTsKfQpyMCgiYmxuYyIsIGlyKCJjb2xvciBiYWxhbmNlIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBlLmFkanVzdG1lbnQgPSB7CiAgICB0eXBlOiAiY29sb3IgYmFsYW5jZSIsCiAgICBzaGFkb3dzOiBjQShyKSwKICAgIG1pZHRvbmVzOiBjQShyKSwKICAgIGhpZ2hsaWdodHM6IGNBKHIpLAogICAgcHJlc2VydmVMdW1pbm9zaXR5OiAhIU8ocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudDsKICBzQShyLCBhLnNoYWRvd3MgfHwge30pLCBzQShyLCBhLm1pZHRvbmVzIHx8IHt9KSwgc0EociwgYS5oaWdobGlnaHRzIHx8IHt9KSwgVChyLCBhLnByZXNlcnZlTHVtaW5vc2l0eSA/IDEgOiAwKSwgWjAociwgMSk7Cn0pOwpyMCgiYmx3aCIsIGlyKCJibGFjayAmIHdoaXRlIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJibGFjayAmIHdoaXRlIiwKICAgIHJlZHM6IEFbIlJkICAiXSwKICAgIHllbGxvd3M6IEEuWWxsdywKICAgIGdyZWVuczogQVsiR3JuICJdLAogICAgY3lhbnM6IEFbIkN5biAiXSwKICAgIGJsdWVzOiBBWyJCbCAgIl0sCiAgICBtYWdlbnRhczogQS5NZ250LAogICAgdXNlVGludDogISFBLnVzZVRpbnQsCiAgICBwcmVzZXRLaW5kOiBBLmJ3UHJlc2V0S2luZCwKICAgIHByZXNldEZpbGVOYW1lOiBBLmJsYWNrQW5kV2hpdGVQcmVzZXRGaWxlTmFtZQogIH0sIEEudGludENvbG9yICE9PSB2b2lkIDAgJiYgKGUuYWRqdXN0bWVudC50aW50Q29sb3IgPSBTcihBLnRpbnRDb2xvcikpLCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSA9IGUuYWRqdXN0bWVudCwgQSA9IHsKICAgICJSZCAgIjogYS5yZWRzIHx8IDAsCiAgICBZbGx3OiBhLnllbGxvd3MgfHwgMCwKICAgICJHcm4gIjogYS5ncmVlbnMgfHwgMCwKICAgICJDeW4gIjogYS5jeWFucyB8fCAwLAogICAgIkJsICAiOiBhLmJsdWVzIHx8IDAsCiAgICBNZ250OiBhLm1hZ2VudGFzIHx8IDAsCiAgICB1c2VUaW50OiAhIWEudXNlVGludCwKICAgIHRpbnRDb2xvcjogRHIoYS50aW50Q29sb3IpLAogICAgYndQcmVzZXRLaW5kOiBhLnByZXNldEtpbmQgfHwgMCwKICAgIGJsYWNrQW5kV2hpdGVQcmVzZXRGaWxlTmFtZTogYS5wcmVzZXRGaWxlTmFtZSB8fCAiIgogIH07CiAgcDAociwgIiIsICJudWxsIiwgQSk7Cn0pOwpyMCgicGhmbCIsIGlyKCJwaG90byBmaWx0ZXIiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIHZhciBBID0gUChyKTsKICBpZiAoQSAhPT0gMiAmJiBBICE9PSAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBoZmwgdmVyc2lvbiIpOwogIHZhciB0OwogIEEgPT09IDIgPyB0ID0gSzAocikgOiB0ID0gewogICAgbDogTChyKSAvIDEwMCwKICAgIGE6IEwocikgLyAxMDAsCiAgICBiOiBMKHIpIC8gMTAwCiAgfSwgZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogInBob3RvIGZpbHRlciIsCiAgICBjb2xvcjogdCwKICAgIGRlbnNpdHk6IFMocikgLyAxMDAsCiAgICBwcmVzZXJ2ZUx1bWlub3NpdHk6ICEhTyhyKQogIH0sIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMiksIHJyKHIsIGEuY29sb3IgfHwgeyBsOiAwLCBhOiAwLCBiOiAwIH0pLCBVKHIsIChhLmRlbnNpdHkgfHwgMCkgKiAxMDApLCBUKHIsIGEucHJlc2VydmVMdW1pbm9zaXR5ID8gMSA6IDApLCBaMChyLCAzKTsKfSk7CmZ1bmN0aW9uIGNlKHIpIHsKICB2YXIgZSA9IGcwKHIpLCBhID0gZzAociksIEEgPSBnMChyKTsKICBIKHIsIDIpOwogIHZhciB0ID0gZzAocik7CiAgcmV0dXJuIHsgcmVkOiBlLCBncmVlbjogYSwgYmx1ZTogQSwgY29uc3RhbnQ6IHQgfTsKfQpmdW5jdGlvbiBsMihyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEucmVkKSwgRTAociwgYS5ncmVlbiksIEUwKHIsIGEuYmx1ZSksIFowKHIsIDIpLCBFMChyLCBhLmNvbnN0YW50KTsKfQpyMCgibWl4ciIsIGlyKCJjaGFubmVsIG1peGVyIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICBpZiAoUChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtaXhyIHZlcnNpb24iKTsKICB2YXIgQSA9IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyB0eXBlOiAiY2hhbm5lbCBtaXhlciIsIG1vbm9jaHJvbWU6ICEhUChyKSB9KTsKICBBLm1vbm9jaHJvbWUgfHwgKEEucmVkID0gY2UociksIEEuZ3JlZW4gPSBjZShyKSwgQS5ibHVlID0gY2UocikpLCBBLmdyYXkgPSBjZShyKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmFkanVzdG1lbnQ7CiAgeChyLCAxKSwgeChyLCBhLm1vbm9jaHJvbWUgPyAxIDogMCksIGEubW9ub2Nocm9tZSA/IChsMihyLCBhLmdyYXkpLCBaMChyLCAzICogNSAqIDIpKSA6IChsMihyLCBhLnJlZCksIGwyKHIsIGEuZ3JlZW4pLCBsMihyLCBhLmJsdWUpLCBsMihyLCBhLmdyYXkpKTsKfSk7CnZhciBOaSA9IHUwKCJjb2xvckxvb2t1cFR5cGUiLCAiM0RMVVQiLCB7CiAgIjNkbHV0IjogIjNETFVUIiwKICBhYnN0cmFjdFByb2ZpbGU6ICJhYnN0cmFjdFByb2ZpbGUiLAogIGRldmljZUxpbmtQcm9maWxlOiAiZGV2aWNlTGlua1Byb2ZpbGUiCn0pLCBNaSA9IHUwKCJMVVRGb3JtYXRUeXBlIiwgImxvb2siLCB7CiAgbG9vazogIkxVVEZvcm1hdExPT0siLAogIGN1YmU6ICJMVVRGb3JtYXRDVUJFIiwKICAiM2RsIjogIkxVVEZvcm1hdDNETCIKfSksIHNlID0gdTAoImNvbG9yTG9va3VwT3JkZXIiLCAicmdiIiwgewogIHJnYjogInJnYk9yZGVyIiwKICBiZ3I6ICJiZ3JPcmRlciIKfSk7CnIwKCJjbHJMIiwgaXIoImNvbG9yIGxvb2t1cCIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgaWYgKFAocikgIT09IDEpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2xyTCB2ZXJzaW9uIik7CiAgdmFyIEEgPSBtMChyKTsKICBlLmFkanVzdG1lbnQgPSB7IHR5cGU6ICJjb2xvciBsb29rdXAiIH07CiAgdmFyIHQgPSBlLmFkanVzdG1lbnQ7CiAgQS5sb29rdXBUeXBlICE9PSB2b2lkIDAgJiYgKHQubG9va3VwVHlwZSA9IE5pLmRlY29kZShBLmxvb2t1cFR5cGUpKSwgQVsiTm0gICJdICE9PSB2b2lkIDAgJiYgKHQubmFtZSA9IEFbIk5tICAiXSksIEEuRHRociAhPT0gdm9pZCAwICYmICh0LmRpdGhlciA9IEEuRHRociksIEEucHJvZmlsZSAhPT0gdm9pZCAwICYmICh0LnByb2ZpbGUgPSBBLnByb2ZpbGUpLCBBLkxVVEZvcm1hdCAhPT0gdm9pZCAwICYmICh0Lmx1dEZvcm1hdCA9IE1pLmRlY29kZShBLkxVVEZvcm1hdCkpLCBBLmRhdGFPcmRlciAhPT0gdm9pZCAwICYmICh0LmRhdGFPcmRlciA9IHNlLmRlY29kZShBLmRhdGFPcmRlcikpLCBBLnRhYmxlT3JkZXIgIT09IHZvaWQgMCAmJiAodC50YWJsZU9yZGVyID0gc2UuZGVjb2RlKEEudGFibGVPcmRlcikpLCBBLkxVVDNERmlsZURhdGEgIT09IHZvaWQgMCAmJiAodC5sdXQzREZpbGVEYXRhID0gQS5MVVQzREZpbGVEYXRhKSwgQS5MVVQzREZpbGVOYW1lICE9PSB2b2lkIDAgJiYgKHQubHV0M0RGaWxlTmFtZSA9IEEuTFVUM0RGaWxlTmFtZSksIEgociwgYSgpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50LCBBID0ge307CiAgYS5sb29rdXBUeXBlICE9PSB2b2lkIDAgJiYgKEEubG9va3VwVHlwZSA9IE5pLmVuY29kZShhLmxvb2t1cFR5cGUpKSwgYS5uYW1lICE9PSB2b2lkIDAgJiYgKEFbIk5tICAiXSA9IGEubmFtZSksIGEuZGl0aGVyICE9PSB2b2lkIDAgJiYgKEEuRHRociA9IGEuZGl0aGVyKSwgYS5wcm9maWxlICE9PSB2b2lkIDAgJiYgKEEucHJvZmlsZSA9IGEucHJvZmlsZSksIGEubHV0Rm9ybWF0ICE9PSB2b2lkIDAgJiYgKEEuTFVURm9ybWF0ID0gTWkuZW5jb2RlKGEubHV0Rm9ybWF0KSksIGEuZGF0YU9yZGVyICE9PSB2b2lkIDAgJiYgKEEuZGF0YU9yZGVyID0gc2UuZW5jb2RlKGEuZGF0YU9yZGVyKSksIGEudGFibGVPcmRlciAhPT0gdm9pZCAwICYmIChBLnRhYmxlT3JkZXIgPSBzZS5lbmNvZGUoYS50YWJsZU9yZGVyKSksIGEubHV0M0RGaWxlRGF0YSAhPT0gdm9pZCAwICYmIChBLkxVVDNERmlsZURhdGEgPSBhLmx1dDNERmlsZURhdGEpLCBhLmx1dDNERmlsZU5hbWUgIT09IHZvaWQgMCAmJiAoQS5MVVQzREZpbGVOYW1lID0gYS5sdXQzREZpbGVOYW1lKSwgeChyLCAxKSwgcDAociwgIiIsICJudWxsIiwgQSk7Cn0pOwpyMCgibnZydCIsIGlyKCJpbnZlcnQiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCA9IHsgdHlwZTogImludmVydCIgfSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbigpIHsKfSk7CnIwKCJwb3N0IiwgaXIoInBvc3Rlcml6ZSIpLCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgZS5hZGp1c3RtZW50ID0gewogICAgdHlwZTogInBvc3Rlcml6ZSIsCiAgICBsZXZlbHM6IFAocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIChhID0gQS5sZXZlbHMpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiA0KSwgWjAociwgMik7Cn0pOwpyMCgidGhycyIsIGlyKCJ0aHJlc2hvbGQiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJ0aHJlc2hvbGQiLAogICAgbGV2ZWw6IFAocikKICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIChhID0gQS5sZXZlbCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEyOCksIFowKHIsIDIpOwp9KTsKdmFyIFRpID0gWyIiLCAiIiwgIiIsICJyZ2IiLCAiaHNiIiwgIiIsICJsYWIiXTsKcjAoImdyZG0iLCBpcigiZ3JhZGllbnQgbWFwIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFAocik7CiAgaWYgKEEgIT09IDEgJiYgQSAhPT0gMykKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmRtIHZlcnNpb24iKTsKICB2YXIgdCA9IHsKICAgIHR5cGU6ICJncmFkaWVudCBtYXAiLAogICAgZ3JhZGllbnRUeXBlOiAic29saWQiCiAgfTsKICB0LnJldmVyc2UgPSAhIU8ociksIHQuZGl0aGVyID0gISFPKHIpOwogIHZhciBpID0gISFPKHIpOwogIGlmIChyLm9mZnNldC0tLCBpKSB7CiAgICB2YXIgbiA9IFIwKHIpOwogICAgdC5tZXRob2QgPSBMYS5kZWNvZGUobik7CiAgfQogIHQubmFtZSA9IHowKHIpLCB0LmNvbG9yU3RvcHMgPSBbXSwgdC5vcGFjaXR5U3RvcHMgPSBbXTsKICBmb3IgKHZhciBmID0gUChyKSwgdSA9IDA7IHUgPCBmOyB1KyspCiAgICB0LmNvbG9yU3RvcHMucHVzaCh7CiAgICAgIGxvY2F0aW9uOiBTKHIpLAogICAgICBtaWRwb2ludDogUyhyKSAvIDEwMCwKICAgICAgY29sb3I6IEswKHIpCiAgICB9KSwgSChyLCAyKTsKICBmb3IgKHZhciBvID0gUChyKSwgdSA9IDA7IHUgPCBvOyB1KyspCiAgICB0Lm9wYWNpdHlTdG9wcy5wdXNoKHsKICAgICAgbG9jYXRpb246IFMociksCiAgICAgIG1pZHBvaW50OiBTKHIpIC8gMTAwLAogICAgICBvcGFjaXR5OiBQKHIpIC8gMjU1CiAgICB9KTsKICB2YXIgbCA9IFAocik7CiAgaWYgKGwgIT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JkbSBleHBhbnNpb24gY291bnQiKTsKICB2YXIgcyA9IFAocik7CiAgdC5zbW9vdGhuZXNzID0gcyAvIDQwOTY7CiAgdmFyIGMgPSBQKHIpOwogIGlmIChjICE9PSAzMikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmRtIGxlbmd0aCIpOwogIHQuZ3JhZGllbnRUeXBlID0gUChyKSA/ICJub2lzZSIgOiAic29saWQiLCB0LnJhbmRvbVNlZWQgPSBTKHIpLCB0LmFkZFRyYW5zcGFyZW5jeSA9ICEhUChyKSwgdC5yZXN0cmljdENvbG9ycyA9ICEhUChyKSwgdC5yb3VnaG5lc3MgPSBTKHIpIC8gNDA5NiwgdC5jb2xvck1vZGVsID0gVGlbUChyKV0gfHwgInJnYiIsIHQubWluID0gWwogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4LAogICAgUChyKSAvIDMyNzY4CiAgXSwgdC5tYXggPSBbCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgsCiAgICBQKHIpIC8gMzI3NjgKICBdLCBIKHIsIGEoKSk7CiAgZm9yICh2YXIgZCA9IDAsIHYgPSB0LmNvbG9yU3RvcHM7IGQgPCB2Lmxlbmd0aDsgZCsrKSB7CiAgICB2YXIgayA9IHZbZF07CiAgICBrLmxvY2F0aW9uIC89IHM7CiAgfQogIGZvciAodmFyIEUgPSAwLCBnID0gdC5vcGFjaXR5U3RvcHM7IEUgPCBnLmxlbmd0aDsgRSsrKSB7CiAgICB2YXIgayA9IGdbRV07CiAgICBrLmxvY2F0aW9uIC89IHM7CiAgfQogIGUuYWRqdXN0bWVudCA9IHQ7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCwgaSA9IGUuYWRqdXN0bWVudDsKICB4KHIsIGkubWV0aG9kICE9PSB2b2lkIDAgPyAzIDogMSksIFQociwgaS5yZXZlcnNlID8gMSA6IDApLCBUKHIsIGkuZGl0aGVyID8gMSA6IDApLCBpLm1ldGhvZCAhPT0gdm9pZCAwICYmIG4wKHIsIExhLmVuY29kZShpLm1ldGhvZCkpLCBXYShyLCBpLm5hbWUgfHwgIiIpLCB4KHIsIGkuY29sb3JTdG9wcyAmJiBpLmNvbG9yU3RvcHMubGVuZ3RoIHx8IDApOwogIGZvciAodmFyIG4gPSBNYXRoLnJvdW5kKCgoYSA9IGkuc21vb3RobmVzcykgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEpICogNDA5NiksIGYgPSAwLCB1ID0gaS5jb2xvclN0b3BzIHx8IFtdOyBmIDwgdS5sZW5ndGg7IGYrKykgewogICAgdmFyIG8gPSB1W2ZdOwogICAgVShyLCBNYXRoLnJvdW5kKG8ubG9jYXRpb24gKiBuKSksIFUociwgTWF0aC5yb3VuZChvLm1pZHBvaW50ICogMTAwKSksIHJyKHIsIG8uY29sb3IpLCBaMChyLCAyKTsKICB9CiAgeChyLCBpLm9wYWNpdHlTdG9wcyAmJiBpLm9wYWNpdHlTdG9wcy5sZW5ndGggfHwgMCk7CiAgZm9yICh2YXIgbCA9IDAsIHMgPSBpLm9wYWNpdHlTdG9wcyB8fCBbXTsgbCA8IHMubGVuZ3RoOyBsKyspIHsKICAgIHZhciBvID0gc1tsXTsKICAgIFUociwgTWF0aC5yb3VuZChvLmxvY2F0aW9uICogbikpLCBVKHIsIE1hdGgucm91bmQoby5taWRwb2ludCAqIDEwMCkpLCB4KHIsIE1hdGgucm91bmQoby5vcGFjaXR5ICogMjU1KSk7CiAgfQogIHgociwgMiksIHgociwgbiksIHgociwgMzIpLCB4KHIsIGkuZ3JhZGllbnRUeXBlID09PSAibm9pc2UiID8gMSA6IDApLCBVKHIsIGkucmFuZG9tU2VlZCB8fCAwKSwgeChyLCBpLmFkZFRyYW5zcGFyZW5jeSA/IDEgOiAwKSwgeChyLCBpLnJlc3RyaWN0Q29sb3JzID8gMSA6IDApLCBVKHIsIE1hdGgucm91bmQoKChBID0gaS5yb3VnaG5lc3MpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAxKSAqIDQwOTYpKTsKICB2YXIgYyA9IFRpLmluZGV4T2YoKHQgPSBpLmNvbG9yTW9kZWwpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiAicmdiIik7CiAgeChyLCBjID09PSAtMSA/IDMgOiBjKTsKICBmb3IgKHZhciBkID0gMDsgZCA8IDQ7IGQrKykKICAgIHgociwgTWF0aC5yb3VuZCgoaS5taW4gJiYgaS5taW5bZF0gfHwgMCkgKiAzMjc2OCkpOwogIGZvciAodmFyIGQgPSAwOyBkIDwgNDsgZCsrKQogICAgeChyLCBNYXRoLnJvdW5kKChpLm1heCAmJiBpLm1heFtkXSB8fCAwKSAqIDMyNzY4KSk7CiAgWjAociwgNCk7Cn0pOwpmdW5jdGlvbiBMcihyKSB7CiAgcmV0dXJuIHsKICAgIGM6IGcwKHIpLAogICAgbTogZzAociksCiAgICB5OiBnMChyKSwKICAgIGs6IGcwKHIpCiAgfTsKfQpmdW5jdGlvbiBLcihyLCBlKSB7CiAgdmFyIGEgPSBlIHx8IHt9OwogIEUwKHIsIGEuYyksIEUwKHIsIGEubSksIEUwKHIsIGEueSksIEUwKHIsIGEuayk7Cn0KcjAoInNlbGMiLCBpcigic2VsZWN0aXZlIGNvbG9yIiksIGZ1bmN0aW9uKHIsIGUpIHsKICBpZiAoUChyKSAhPT0gMSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZWxjIHZlcnNpb24iKTsKICB2YXIgYSA9IFAocikgPyAiYWJzb2x1dGUiIDogInJlbGF0aXZlIjsKICBIKHIsIDgpLCBlLmFkanVzdG1lbnQgPSB7CiAgICB0eXBlOiAic2VsZWN0aXZlIGNvbG9yIiwKICAgIG1vZGU6IGEsCiAgICByZWRzOiBMcihyKSwKICAgIHllbGxvd3M6IExyKHIpLAogICAgZ3JlZW5zOiBMcihyKSwKICAgIGN5YW5zOiBMcihyKSwKICAgIGJsdWVzOiBMcihyKSwKICAgIG1hZ2VudGFzOiBMcihyKSwKICAgIHdoaXRlczogTHIociksCiAgICBuZXV0cmFsczogTHIociksCiAgICBibGFja3M6IExyKHIpCiAgfTsKfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhID0gZS5hZGp1c3RtZW50OwogIHgociwgMSksIHgociwgYS5tb2RlID09PSAiYWJzb2x1dGUiID8gMSA6IDApLCBaMChyLCA4KSwgS3IociwgYS5yZWRzKSwgS3IociwgYS55ZWxsb3dzKSwgS3IociwgYS5ncmVlbnMpLCBLcihyLCBhLmN5YW5zKSwgS3IociwgYS5ibHVlcyksIEtyKHIsIGEubWFnZW50YXMpLCBLcihyLCBhLndoaXRlcyksIEtyKHIsIGEubmV1dHJhbHMpLCBLcihyLCBhLmJsYWNrcyk7Cn0pOwpyMCgiQ2dFZCIsIGZ1bmN0aW9uKHIpIHsKICB2YXIgZSA9IHIuYWRqdXN0bWVudDsKICByZXR1cm4gZSA/IGUudHlwZSA9PT0gImJyaWdodG5lc3MvY29udHJhc3QiICYmICFlLnVzZUxlZ2FjeSB8fCAoZS50eXBlID09PSAibGV2ZWxzIiB8fCBlLnR5cGUgPT09ICJjdXJ2ZXMiIHx8IGUudHlwZSA9PT0gImV4cG9zdXJlIiB8fCBlLnR5cGUgPT09ICJjaGFubmVsIG1peGVyIiB8fCBlLnR5cGUgPT09ICJodWUvc2F0dXJhdGlvbiIpICYmIGUucHJlc2V0RmlsZU5hbWUgIT09IHZvaWQgMCA6ICExOwp9LCBmdW5jdGlvbihyLCBlLCBhKSB7CiAgdmFyIEEgPSBtMChyKTsKICBpZiAoQS5WcnNuICE9PSAxKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENnRWQgdmVyc2lvbiIpOwogICJwcmVzZXRGaWxlTmFtZSIgaW4gQSA/IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyBwcmVzZXRLaW5kOiBBLnByZXNldEtpbmQsIHByZXNldEZpbGVOYW1lOiBBLnByZXNldEZpbGVOYW1lIH0pIDogImN1cnZlc1ByZXNldEZpbGVOYW1lIiBpbiBBID8gZS5hZGp1c3RtZW50ID0gaChoKHt9LCBlLmFkanVzdG1lbnQpLCB7IHByZXNldEtpbmQ6IEEuY3VydmVzUHJlc2V0S2luZCwgcHJlc2V0RmlsZU5hbWU6IEEuY3VydmVzUHJlc2V0RmlsZU5hbWUgfSkgOiAibWl4ZXJQcmVzZXRGaWxlTmFtZSIgaW4gQSA/IGUuYWRqdXN0bWVudCA9IGgoaCh7fSwgZS5hZGp1c3RtZW50KSwgeyBwcmVzZXRLaW5kOiBBLm1peGVyUHJlc2V0S2luZCwgcHJlc2V0RmlsZU5hbWU6IEEubWl4ZXJQcmVzZXRGaWxlTmFtZSB9KSA6IGUuYWRqdXN0bWVudCA9IHsKICAgIHR5cGU6ICJicmlnaHRuZXNzL2NvbnRyYXN0IiwKICAgIGJyaWdodG5lc3M6IEEuQnJnaCwKICAgIGNvbnRyYXN0OiBBLkNudHIsCiAgICBtZWFuVmFsdWU6IEEubWVhbnMsCiAgICB1c2VMZWdhY3k6ICEhQS51c2VMZWdhY3ksCiAgICBsYWJDb2xvck9ubHk6ICEhQVsiTGFiICJdLAogICAgYXV0bzogISFBLkF1dG8KICB9LCBIKHIsIGEoKSk7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYSwgQSwgdCwgaSwgbiA9IGUuYWRqdXN0bWVudDsKICBpZiAobi50eXBlID09PSAibGV2ZWxzIiB8fCBuLnR5cGUgPT09ICJleHBvc3VyZSIgfHwgbi50eXBlID09PSAiaHVlL3NhdHVyYXRpb24iKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgcHJlc2V0S2luZDogKGEgPSBuLnByZXNldEtpbmQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiAxLAogICAgICBwcmVzZXRGaWxlTmFtZTogbi5wcmVzZXRGaWxlTmFtZSB8fCAiIgogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIGYpOwogIH0gZWxzZSBpZiAobi50eXBlID09PSAiY3VydmVzIikgewogICAgdmFyIGYgPSB7CiAgICAgIFZyc246IDEsCiAgICAgIGN1cnZlc1ByZXNldEtpbmQ6IChBID0gbi5wcmVzZXRLaW5kKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogMSwKICAgICAgY3VydmVzUHJlc2V0RmlsZU5hbWU6IG4ucHJlc2V0RmlsZU5hbWUgfHwgIiIKICAgIH07CiAgICBwMChyLCAiIiwgIm51bGwiLCBmKTsKICB9IGVsc2UgaWYgKG4udHlwZSA9PT0gImNoYW5uZWwgbWl4ZXIiKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgbWl4ZXJQcmVzZXRLaW5kOiAodCA9IG4ucHJlc2V0S2luZCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IDEsCiAgICAgIG1peGVyUHJlc2V0RmlsZU5hbWU6IG4ucHJlc2V0RmlsZU5hbWUgfHwgIiIKICAgIH07CiAgICBwMChyLCAiIiwgIm51bGwiLCBmKTsKICB9IGVsc2UgaWYgKG4udHlwZSA9PT0gImJyaWdodG5lc3MvY29udHJhc3QiKSB7CiAgICB2YXIgZiA9IHsKICAgICAgVnJzbjogMSwKICAgICAgQnJnaDogbi5icmlnaHRuZXNzIHx8IDAsCiAgICAgIENudHI6IG4uY29udHJhc3QgfHwgMCwKICAgICAgbWVhbnM6IChpID0gbi5tZWFuVmFsdWUpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiAxMjcsCiAgICAgICJMYWIgIjogISFuLmxhYkNvbG9yT25seSwKICAgICAgdXNlTGVnYWN5OiAhIW4udXNlTGVnYWN5LAogICAgICBBdXRvOiAhIW4uYXV0bwogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIGYpOwogIH0gZWxzZQogICAgdGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgQ2dFZCBjYXNlIik7Cn0pOwpmdW5jdGlvbiBDNChyKSB7CiAgdmFyIGUgPSBbXTsKICBmdW5jdGlvbiBhKEEpIHsKICAgIHZhciB0OwogICAgaWYgKEEuY2hpbGRyZW4pCiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gQS5jaGlsZHJlbjsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZiA9IG5baV07CiAgICAgICAgKCh0ID0gZi50ZXh0KSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmluZGV4KSAhPT0gdm9pZCAwICYmIChlW2YudGV4dC5pbmRleF0gPSBmKSwgYShmKTsKICAgICAgfQogIH0KICByZXR1cm4gYShyKSwgZTsKfQpyMCgiVHh0MiIsIFgwKCJlbmdpbmVEYXRhIiksIGZ1bmN0aW9uKHIsIGUsIGEsIEEpIHsKICB2YXIgdCA9IFkwKHIsIGEoKSk7CiAgZS5lbmdpbmVEYXRhID0geG4odCk7CiAgdmFyIGkgPSBDNChBKSwgbiA9IGoxKHQpLCBmID0gcDQobiksIHUgPSBmLlJlc291cmNlRGljdC5UZXh0RnJhbWVTZXQ7CiAgaWYgKHUpCiAgICBmb3IgKHZhciBvID0gMDsgbyA8IHUubGVuZ3RoOyBvKyspIHsKICAgICAgdmFyIGwgPSBpW29dOwogICAgICB1W29dLnBhdGggJiYgKGwgIT0gbnVsbCAmJiBsLnRleHQpICYmIChsLnRleHQudGV4dFBhdGggPSB1W29dLnBhdGgpOwogICAgfQp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBEbihlLmVuZ2luZURhdGEpOwogIE5yKHIsIGEpOwp9KTsKcjAoIkZFaWQiLCBYMCgiZmlsdGVyRWZmZWN0c01hc2tzIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IEwocik7CiAgaWYgKEEgPCAxIHx8IEEgPiAzKQogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGZpbHRlckVmZmVjdHMgdmVyc2lvbiAiLmNvbmNhdChBKSk7CiAgZm9yIChlLmZpbHRlckVmZmVjdHNNYXNrcyA9IFtdOyBhKCkgPiA4OyApIHsKICAgIGlmIChTKHIpKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpbHRlckVmZmVjdHM6IDY0IGJpdCBsZW5ndGggaXMgbm90IHN1cHBvcnRlZCIpOwogICAgdmFyIHQgPSBTKHIpLCBpID0gci5vZmZzZXQgKyB0LCBuID0geHIociwgMSksIGYgPSBMKHIpOwogICAgaWYgKGYgIT09IDEpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmaWx0ZXJFZmZlY3QgdmVyc2lvbiAiLmNvbmNhdChmKSk7CiAgICBpZiAoUyhyKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaWx0ZXJFZmZlY3Q6IDY0IGJpdCBsZW5ndGggaXMgbm90IHN1cHBvcnRlZCIpOwogICAgUyhyKTsKICAgIGZvciAodmFyIHUgPSBMKHIpLCBvID0gTChyKSwgbCA9IEwociksIHMgPSBMKHIpLCBjID0gTChyKSwgZCA9IEwociksIHYgPSBbXSwgayA9IDA7IGsgPCBkICsgMjsgaysrKSB7CiAgICAgIHZhciBFID0gTChyKTsKICAgICAgaWYgKEUpIHsKICAgICAgICBpZiAoUyhyKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZmlsdGVyRWZmZWN0OiA2NCBiaXQgbGVuZ3RoIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICB2YXIgZyA9IFMocik7CiAgICAgICAgaWYgKCFnKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaWx0ZXJFZmZlY3Q6IEVtcHR5IGNoYW5uZWwiKTsKICAgICAgICB2YXIgdyA9IFAociksIEIgPSBZMChyLCBnIC0gMik7CiAgICAgICAgdi5wdXNoKHsgY29tcHJlc3Npb25Nb2RlOiB3LCBkYXRhOiBCIH0pOwogICAgICB9IGVsc2UKICAgICAgICB2LnB1c2godm9pZCAwKTsKICAgIH0KICAgIGlmIChlLmZpbHRlckVmZmVjdHNNYXNrcy5wdXNoKHsgaWQ6IG4sIHRvcDogdSwgbGVmdDogbywgYm90dG9tOiBsLCByaWdodDogcywgZGVwdGg6IGMsIGNoYW5uZWxzOiB2IH0pLCByLm9mZnNldCA8IGkgJiYgTyhyKSkgewogICAgICB2YXIgbSA9IEwociksIHAgPSBMKHIpLCBXID0gTChyKSwgQyA9IEwocik7CiAgICAgIGlmIChTKHIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiZmlsdGVyRWZmZWN0OiA2NCBiaXQgbGVuZ3RoIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgdmFyIF8gPSBTKHIpLCB3ID0gUChyKSwgQiA9IFkwKHIsIF8gLSAyKTsKICAgICAgZS5maWx0ZXJFZmZlY3RzTWFza3NbZS5maWx0ZXJFZmZlY3RzTWFza3MubGVuZ3RoIC0gMV0uZXh0cmEgPSB7IHRvcDogbSwgbGVmdDogcCwgYm90dG9tOiBXLCByaWdodDogQywgY29tcHJlc3Npb25Nb2RlOiB3LCBkYXRhOiBCIH07CiAgICB9CiAgICByLm9mZnNldCA9IGk7CiAgICBmb3IgKHZhciBOID0gdDsgTiAlIDQ7ICkKICAgICAgci5vZmZzZXQrKywgTisrOwogIH0KfSwgZnVuY3Rpb24ociwgZSkgewogIHZhciBhOwogIHQwKHIsIDMpOwogIGZvciAodmFyIEEgPSAwLCB0ID0gZS5maWx0ZXJFZmZlY3RzTWFza3M7IEEgPCB0Lmxlbmd0aDsgQSsrKSB7CiAgICB2YXIgaSA9IHRbQV07CiAgICBVKHIsIDApLCBVKHIsIDApOwogICAgdmFyIG4gPSByLm9mZnNldDsKICAgIGthKHIsIGkuaWQsIDEpLCB0MChyLCAxKSwgVShyLCAwKSwgVShyLCAwKTsKICAgIHZhciBmID0gci5vZmZzZXQ7CiAgICB0MChyLCBpLnRvcCksIHQwKHIsIGkubGVmdCksIHQwKHIsIGkuYm90dG9tKSwgdDAociwgaS5yaWdodCksIHQwKHIsIGkuZGVwdGgpOwogICAgdmFyIHUgPSBNYXRoLm1heCgwLCBpLmNoYW5uZWxzLmxlbmd0aCAtIDIpOwogICAgdDAociwgdSk7CiAgICBmb3IgKHZhciBvID0gMDsgbyA8IHUgKyAyOyBvKyspIHsKICAgICAgdmFyIGwgPSBpLmNoYW5uZWxzW29dOwogICAgICB0MChyLCBsID8gMSA6IDApLCBsICYmIChVKHIsIDApLCBVKHIsIGwuZGF0YS5sZW5ndGggKyAyKSwgeChyLCBsLmNvbXByZXNzaW9uTW9kZSksIE5yKHIsIGwuZGF0YSkpOwogICAgfQogICAgci52aWV3LnNldFVpbnQzMihmIC0gNCwgci5vZmZzZXQgLSBmLCAhMSk7CiAgICB2YXIgcyA9IChhID0gZS5maWx0ZXJFZmZlY3RzTWFza3NbZS5maWx0ZXJFZmZlY3RzTWFza3MubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuZXh0cmE7CiAgICBzICYmIChUKHIsIDEpLCB0MChyLCBzLnRvcCksIHQwKHIsIHMubGVmdCksIHQwKHIsIHMuYm90dG9tKSwgdDAociwgcy5yaWdodCksIFUociwgMCksIFUociwgcy5kYXRhLmJ5dGVMZW5ndGggKyAyKSwgeChyLCBzLmNvbXByZXNzaW9uTW9kZSksIE5yKHIsIHMuZGF0YSkpOwogICAgdmFyIGMgPSByLm9mZnNldCAtIG47CiAgICBmb3IgKHIudmlldy5zZXRVaW50MzIobiAtIDQsIGMsICExKTsgYyAlIDQ7ICkKICAgICAgWjAociwgMSksIGMrKzsKICB9Cn0pOwplMigiRlhpZCIsICJGRWlkIik7CnIwKCJGTXNrIiwgWDAoImZpbHRlck1hc2siKSwgZnVuY3Rpb24ociwgZSkgewogIGUuZmlsdGVyTWFzayA9IHsKICAgIGNvbG9yU3BhY2U6IEswKHIpLAogICAgb3BhY2l0eTogUChyKSAvIDI1NQogIH07Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICB2YXIgYTsKICBycihyLCBlLmZpbHRlck1hc2suY29sb3JTcGFjZSksIHgociwgTUEoKGEgPSBlLmZpbHRlck1hc2sub3BhY2l0eSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEsIDAsIDEpICogMjU1KTsKfSk7CnIwKAogICJhcnRkIiwKICAvLyBkb2N1bWVudC13aWRlIGFydGJvYXJkIGluZm8KICBmdW5jdGlvbihyKSB7CiAgICByZXR1cm4gci5hcnRib2FyZHMgIT09IHZvaWQgMDsKICB9LAogIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICAgIHZhciBBID0gbTAocik7CiAgICBlLmFydGJvYXJkcyA9IHsKICAgICAgY291bnQ6IEFbIkNudCAiXSwKICAgICAgYXV0b0V4cGFuZE9mZnNldDogeyBob3Jpem9udGFsOiBBLmF1dG9FeHBhbmRPZmZzZXQuSHJ6biwgdmVydGljYWw6IEEuYXV0b0V4cGFuZE9mZnNldC5WcnRjIH0sCiAgICAgIG9yaWdpbjogeyBob3Jpem9udGFsOiBBLm9yaWdpbi5IcnpuLCB2ZXJ0aWNhbDogQS5vcmlnaW4uVnJ0YyB9LAogICAgICBhdXRvRXhwYW5kRW5hYmxlZDogQS5hdXRvRXhwYW5kRW5hYmxlZCwKICAgICAgYXV0b05lc3RFbmFibGVkOiBBLmF1dG9OZXN0RW5hYmxlZCwKICAgICAgYXV0b1Bvc2l0aW9uRW5hYmxlZDogQS5hdXRvUG9zaXRpb25FbmFibGVkLAogICAgICBzaHJpbmt3cmFwT25TYXZlRW5hYmxlZDogISFBLnNocmlua3dyYXBPblNhdmVFbmFibGVkLAogICAgICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3I6IFNyKEEuZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZENvbG9yKSwKICAgICAgZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGU6IEEuZG9jRGVmYXVsdE5ld0FydGJvYXJkQmFja2dyb3VuZFR5cGUKICAgIH0sIEgociwgYSgpKTsKICB9LAogIGZ1bmN0aW9uKHIsIGUpIHsKICAgIHZhciBhLCBBLCB0LCBpLCBuLCBmID0gZS5hcnRib2FyZHMsIHUgPSB7CiAgICAgICJDbnQgIjogZi5jb3VudCwKICAgICAgYXV0b0V4cGFuZE9mZnNldDogZi5hdXRvRXhwYW5kT2Zmc2V0ID8geyBIcnpuOiBmLmF1dG9FeHBhbmRPZmZzZXQuaG9yaXpvbnRhbCwgVnJ0YzogZi5hdXRvRXhwYW5kT2Zmc2V0LnZlcnRpY2FsIH0gOiB7IEhyem46IDAsIFZydGM6IDAgfSwKICAgICAgb3JpZ2luOiBmLm9yaWdpbiA/IHsgSHJ6bjogZi5vcmlnaW4uaG9yaXpvbnRhbCwgVnJ0YzogZi5vcmlnaW4udmVydGljYWwgfSA6IHsgSHJ6bjogMCwgVnJ0YzogMCB9LAogICAgICBhdXRvRXhwYW5kRW5hYmxlZDogKGEgPSBmLmF1dG9FeHBhbmRFbmFibGVkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogITAsCiAgICAgIGF1dG9OZXN0RW5hYmxlZDogKEEgPSBmLmF1dG9OZXN0RW5hYmxlZCkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6ICEwLAogICAgICBhdXRvUG9zaXRpb25FbmFibGVkOiAodCA9IGYuYXV0b1Bvc2l0aW9uRW5hYmxlZCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6ICEwLAogICAgICBzaHJpbmt3cmFwT25TYXZlRW5hYmxlZDogKGkgPSBmLnNocmlua3dyYXBPblNhdmVFbmFibGVkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogITAsCiAgICAgIGRvY0RlZmF1bHROZXdBcnRib2FyZEJhY2tncm91bmRDb2xvcjogRHIoZi5kb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kQ29sb3IpLAogICAgICBkb2NEZWZhdWx0TmV3QXJ0Ym9hcmRCYWNrZ3JvdW5kVHlwZTogKG4gPSBmLmRvY0RlZmF1bHROZXdBcnRib2FyZEJhY2tncm91bmRUeXBlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogMQogICAgfTsKICAgIHAwKHIsICIiLCAibnVsbCIsIHUsICJhcnRkIik7CiAgfQopOwpmdW5jdGlvbiB0ZihyKSB7CiAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gcltlXTsKICB9KS5zb21lKGZ1bmN0aW9uKGUpIHsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KGUpICYmIGUubGVuZ3RoID4gMTsKICB9KTsKfQpyMCgibGZ4MiIsIGZ1bmN0aW9uKHIpIHsKICByZXR1cm4gci5lZmZlY3RzICE9PSB2b2lkIDAgJiYgIXRmKHIuZWZmZWN0cyk7Cn0sIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IFMocik7CiAgaWYgKEEgIT09IDApCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGZ4MiB2ZXJzaW9uIik7CiAgdmFyIHQgPSBtMChyKTsKICBlLmVmZmVjdHMgPSBTMih0LCAhIXIubG9nTWlzc2luZ0ZlYXR1cmVzKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBWMihlLmVmZmVjdHMsICEhQS5sb2dNaXNzaW5nRmVhdHVyZXMsICEwKTsKICBVKHIsIDApLCBwMChyLCAiIiwgIm51bGwiLCB0KTsKfSk7CnIwKCJjaW5mIiwgWDAoImNvbXBvc2l0b3JVc2VkIiksIGZ1bmN0aW9uKHIsIGUsIGEpIHsKICB2YXIgQSA9IG0wKHIpOwogIGZ1bmN0aW9uIHQoaSkgewogICAgcmV0dXJuIGkuc3BsaXQoIi4iKVsxXTsKICB9CiAgZS5jb21wb3NpdG9yVXNlZCA9IHsKICAgIGRlc2NyaXB0aW9uOiBBLmRlc2NyaXB0aW9uLAogICAgcmVhc29uOiBBLnJlYXNvbiwKICAgIGVuZ2luZTogdChBLkVuZ24pCiAgfSwgQS5WcnNuICYmIChlLmNvbXBvc2l0b3JVc2VkLnZlcnNpb24gPSBBLlZyc24pLCBBLnBzVmVyc2lvbiAmJiAoZS5jb21wb3NpdG9yVXNlZC5waG90b3Nob3BWZXJzaW9uID0gQS5wc1ZlcnNpb24pLCBBLmVuYWJsZUNvbXBDb3JlICYmIChlLmNvbXBvc2l0b3JVc2VkLmVuYWJsZUNvbXBDb3JlID0gdChBLmVuYWJsZUNvbXBDb3JlKSksIEEuZW5hYmxlQ29tcENvcmVHUFUgJiYgKGUuY29tcG9zaXRvclVzZWQuZW5hYmxlQ29tcENvcmVHUFUgPSB0KEEuZW5hYmxlQ29tcENvcmVHUFUpKSwgQS5lbmFibGVDb21wQ29yZVRocmVhZHMgJiYgKGUuY29tcG9zaXRvclVzZWQuZW5hYmxlQ29tcENvcmVUaHJlYWRzID0gdChBLmVuYWJsZUNvbXBDb3JlVGhyZWFkcykpLCBBLmNvbXBDb3JlU3VwcG9ydCAmJiAoZS5jb21wb3NpdG9yVXNlZC5jb21wQ29yZVN1cHBvcnQgPSB0KEEuY29tcENvcmVTdXBwb3J0KSksIEEuY29tcENvcmVHUFVTdXBwb3J0ICYmIChlLmNvbXBvc2l0b3JVc2VkLmNvbXBDb3JlR1BVU3VwcG9ydCA9IHQoQS5jb21wQ29yZUdQVVN1cHBvcnQpKSwgSChyLCBhKCkpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgdmFyIGEgPSBlLmNvbXBvc2l0b3JVc2VkLCBBID0gewogICAgVnJzbjogYS52ZXJzaW9uIHx8IHsgbWFqb3I6IDEsIG1pbm9yOiAwLCBmaXg6IDAgfQogIH07CiAgYS5waG90b3Nob3BWZXJzaW9uICYmIChBLnBzVmVyc2lvbiA9IGEucGhvdG9zaG9wVmVyc2lvbiksIEEuZGVzY3JpcHRpb24gPSBhLmRlc2NyaXB0aW9uLCBBLnJlYXNvbiA9IGEucmVhc29uLCBBLkVuZ24gPSAiRW5nbi4iLmNvbmNhdChhLmVuZ2luZSksIGEuZW5hYmxlQ29tcENvcmUgJiYgKEEuZW5hYmxlQ29tcENvcmUgPSAiZW5hYmxlLiIuY29uY2F0KGEuZW5hYmxlQ29tcENvcmUpKSwgYS5lbmFibGVDb21wQ29yZUdQVSAmJiAoQS5lbmFibGVDb21wQ29yZUdQVSA9ICJlbmFibGUuIi5jb25jYXQoYS5lbmFibGVDb21wQ29yZUdQVSkpLCBhLmVuYWJsZUNvbXBDb3JlVGhyZWFkcyAmJiAoQS5lbmFibGVDb21wQ29yZVRocmVhZHMgPSAiZW5hYmxlLiIuY29uY2F0KGEuZW5hYmxlQ29tcENvcmVUaHJlYWRzKSksIGEuY29tcENvcmVTdXBwb3J0ICYmIChBLmNvbXBDb3JlU3VwcG9ydCA9ICJyZWFzb24uIi5jb25jYXQoYS5jb21wQ29yZVN1cHBvcnQpKSwgYS5jb21wQ29yZUdQVVN1cHBvcnQgJiYgKEEuY29tcENvcmVHUFVTdXBwb3J0ID0gInJlYXNvbi4iLmNvbmNhdChhLmNvbXBDb3JlR1BVU3VwcG9ydCkpLCBwMChyLCAiIiwgIm51bGwiLCBBKTsKfSk7CnIwKCJleHRuIiwgZnVuY3Rpb24ocikgewogIHJldHVybiByLl9leHRuICE9PSB2b2lkIDA7Cn0sIGZ1bmN0aW9uKHIsIGUpIHsKICBtMChyKTsKfSwgZnVuY3Rpb24ociwgZSkgewp9KTsKcjAoImlPcGEiLCBYMCgiZmlsbE9wYWNpdHkiKSwgZnVuY3Rpb24ociwgZSkgewogIGUuZmlsbE9wYWNpdHkgPSBPKHIpIC8gMjU1LCBIKHIsIDMpOwp9LCBmdW5jdGlvbihyLCBlKSB7CiAgVChyLCBlLmZpbGxPcGFjaXR5ICogMjU1KSwgWjAociwgMyk7Cn0pOwpyMCgiYnJzdCIsIFgwKCJjaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMiKSwgZnVuY3Rpb24ociwgZSwgYSkgewogIGZvciAoZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMgPSBbXTsgYSgpID4gNDsgKQogICAgZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnMucHVzaChMKHIpKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIGZvciAodmFyIGEgPSAwLCBBID0gZS5jaGFubmVsQmxlbmRpbmdSZXN0cmljdGlvbnM7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICB0MChyLCB0KTsKICB9Cn0pOwpyMCgidHNseSIsIFgwKCJ0cmFuc3BhcmVuY3lTaGFwZXNMYXllciIpLCBmdW5jdGlvbihyLCBlKSB7CiAgZS50cmFuc3BhcmVuY3lTaGFwZXNMYXllciA9ICEhTyhyKSwgSChyLCAzKTsKfSwgZnVuY3Rpb24ociwgZSkgewogIFQociwgZS50cmFuc3BhcmVuY3lTaGFwZXNMYXllciA/IDEgOiAwKSwgWjAociwgMyk7Cn0pOwp2YXIgdmEgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gdmEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgdmEuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfTsKZnVuY3Rpb24gbmYocikgewogIHIgPT09IHZvaWQgMCAmJiAociA9IDQwOTYpOwogIHZhciBlID0gbmV3IEFycmF5QnVmZmVyKHIpLCBhID0gbmV3IERhdGFWaWV3KGUpLCBBID0gMDsKICByZXR1cm4geyBidWZmZXI6IGUsIHZpZXc6IGEsIG9mZnNldDogQSwgdGVtcEJ1ZmZlcjogdm9pZCAwIH07Cn0KZnVuY3Rpb24gVzQocikgewogIHJldHVybiByLmJ1ZmZlci5zbGljZSgwLCByLm9mZnNldCk7Cn0KZnVuY3Rpb24gXzQocikgewogIHJldHVybiBuZXcgVWludDhBcnJheShyLmJ1ZmZlciwgMCwgci5vZmZzZXQpOwp9CmZ1bmN0aW9uIFQociwgZSkgewogIHZhciBhID0gdGEociwgMSk7CiAgci52aWV3LnNldFVpbnQ4KGEsIGUpOwp9CmZ1bmN0aW9uIEUwKHIsIGUpIHsKICB2YXIgYSA9IHRhKHIsIDIpOwogIHIudmlldy5zZXRJbnQxNihhLCBlLCAhMSk7Cn0KZnVuY3Rpb24geChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCAyKTsKICByLnZpZXcuc2V0VWludDE2KGEsIGUsICExKTsKfQpmdW5jdGlvbiBHNChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCAyKTsKICByLnZpZXcuc2V0VWludDE2KGEsIGUsICEwKTsKfQpmdW5jdGlvbiB0MChyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0SW50MzIoYSwgZSwgITEpOwp9CmZ1bmN0aW9uIFBpKHIsIGUpIHsKICB2YXIgYSA9IHRhKHIsIDQpOwogIHIudmlldy5zZXRJbnQzMihhLCBlLCAhMCk7Cn0KZnVuY3Rpb24gVShyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0VWludDMyKGEsIGUsICExKTsKfQpmdW5jdGlvbiBWcihyLCBlKSB7CiAgdmFyIGEgPSB0YShyLCA0KTsKICByLnZpZXcuc2V0RmxvYXQzMihhLCBlLCAhMSk7Cn0KZnVuY3Rpb24gRnIociwgZSkgewogIHZhciBhID0gdGEociwgOCk7CiAgci52aWV3LnNldEZsb2F0NjQoYSwgZSwgITEpOwp9CmZ1bmN0aW9uIGdyKHIsIGUpIHsKICB0MChyLCBlICogNjU1MzYpOwp9CmZ1bmN0aW9uIFhyKHIsIGUpIHsKICB0MChyLCBlICogKDEgPDwgMjQpKTsKfQpmdW5jdGlvbiBOcihyLCBlKSB7CiAgaWYgKGUpIHsKICAgIHNmKHIsIHIub2Zmc2V0ICsgZS5sZW5ndGgpOwogICAgdmFyIGEgPSBuZXcgVWludDhBcnJheShyLmJ1ZmZlcik7CiAgICBhLnNldChlLCByLm9mZnNldCksIHIub2Zmc2V0ICs9IGUubGVuZ3RoOwogIH0KfQpmdW5jdGlvbiBaMChyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCBlOyBhKyspCiAgICBUKHIsIDApOwp9CmZ1bmN0aW9uIG4wKHIsIGUpIHsKICBpZiAoZS5sZW5ndGggIT09IDQpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2lnbmF0dXJlOiAnIi5jb25jYXQoZSwgIiciKSk7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCA0OyBhKyspCiAgICBUKHIsIGUuY2hhckNvZGVBdChhKSk7Cn0KZnVuY3Rpb24gWDQociwgZSkgewogIGZvciAodmFyIGEgPSAwOyBhIDwgZS5sZW5ndGg7IGErKykKICAgIFQociwgZS5jaGFyQ29kZUF0KGEpKTsKfQpmdW5jdGlvbiBrYShyLCBlLCBhKSB7CiAgdmFyIEEgPSBlLmxlbmd0aDsKICBpZiAoQSA+IDI1NSkKICAgIHRocm93IG5ldyBFcnJvcigiU3RyaW5nIHRvbyBsb25nIik7CiAgVChyLCBBKTsKICBmb3IgKHZhciB0ID0gMDsgdCA8IEE7IHQrKykgewogICAgdmFyIGkgPSBlLmNoYXJDb2RlQXQodCk7CiAgICBUKHIsIGkgPCAxMjggPyBpIDogNjMpOwogIH0KICBmb3IgKDsgKytBICUgYTsgKQogICAgVChyLCAwKTsKfQpmdW5jdGlvbiBSNChyLCBlKSB7CiAgZm9yICh2YXIgYSA9IDA7IGEgPCBlLmxlbmd0aDsgYSsrKQogICAgeChyLCBlLmNoYXJDb2RlQXQoYSkpOwp9CmZ1bmN0aW9uIFY0KHIsIGUpIHsKICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICBHNChyLCBlLmNoYXJDb2RlQXQoYSkpOwp9CmZ1bmN0aW9uIG1yKHIsIGUpIHsKICBVKHIsIGUubGVuZ3RoKSwgUjQociwgZSk7Cn0KZnVuY3Rpb24gV2EociwgZSkgewogIFUociwgZS5sZW5ndGggKyAxKTsKICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspCiAgICB4KHIsIGUuY2hhckNvZGVBdChhKSk7CiAgeChyLCAwKTsKfQpmdW5jdGlvbiBmZihyKSB7CiAgciA9PT0gdm9pZCAwICYmIChyID0gW10pOwogIGZvciAodmFyIGUgPSAwLCBhID0gMCwgQSA9IHI7IGEgPCBBLmxlbmd0aDsgYSsrKSB7CiAgICB2YXIgdCA9IEFbYV07CiAgICBpZiAodC5jYW52YXMgfHwgdC5pbWFnZURhdGEpIHsKICAgICAgdmFyIGkgPSBMQSh0KSwgbiA9IGkud2lkdGgsIGYgPSBpLmhlaWdodDsKICAgICAgZSA9IE1hdGgubWF4KGUsIDIgKiBmICsgMiAqIG4gKiBmKTsKICAgIH0KICAgIHQuY2hpbGRyZW4gJiYgKGUgPSBNYXRoLm1heChlLCBmZih0LmNoaWxkcmVuKSkpOwogIH0KICByZXR1cm4gZTsKfQpmdW5jdGlvbiBlcihyLCBlLCBhLCBBLCB0KSB7CiAgQSA9PT0gdm9pZCAwICYmIChBID0gITEpLCB0ID09PSB2b2lkIDAgJiYgKHQgPSAhMSksIHQgJiYgVShyLCAwKTsKICB2YXIgaSA9IHIub2Zmc2V0OwogIFUociwgMCksIGEoKTsKICBmb3IgKHZhciBuID0gci5vZmZzZXQgLSBpIC0gNCwgZiA9IG47IGYgJSBlOyApCiAgICBUKHIsIDApLCBmKys7CiAgQSAmJiAobiA9IGYpLCByLnZpZXcuc2V0VWludDMyKGksIG4sICExKTsKfQpmdW5jdGlvbiBvZihyKSB7CiAgdmFyIGU7CiAgKGUgPSByLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5mb3JFYWNoKG9mKTsKICB2YXIgYSA9IHIuaW1hZ2VEYXRhOwogIGlmIChhICYmIChhLmRhdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCBhLmRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkpCiAgICB0aHJvdyBuZXcgRXJyb3IoImltYWdlRGF0YSBoYXMgaW5jb3JyZWN0IGJpdERlcHRoIik7CiAgaWYgKCJtYXNrIiBpbiByICYmIHIubWFzaykgewogICAgdmFyIEEgPSByLm1hc2suaW1hZ2VEYXRhOwogICAgaWYgKEEgJiYgKEEuZGF0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IEEuZGF0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXNrIGltYWdlRGF0YSBoYXMgaW5jb3JyZWN0IGJpdERlcHRoIik7CiAgfQp9CmZ1bmN0aW9uIHVmKHIsIGUsIGEpIHsKICB2YXIgQTsKICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0ge30pLCAhKCtlLndpZHRoID4gMCAmJiArZS5oZWlnaHQgPiAwKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkb2N1bWVudCBzaXplIik7CiAgaWYgKChlLndpZHRoID4gM2U0IHx8IGUuaGVpZ2h0ID4gM2U0KSAmJiAhYS5wc2IpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IHNpemUgaXMgdG9vIGxhcmdlIChtYXggaXMgMzAwMDB4MzAwMDAsIHVzZSBQU0IgZm9ybWF0IGluc3RlYWQpIik7CiAgdmFyIHQgPSAoQSA9IGUuYml0c1BlckNoYW5uZWwpICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiA4OwogIGlmICh0ICE9PSA4KQogICAgdGhyb3cgbmV3IEVycm9yKCJiaXRzUGVyQ2hhbm5lbCBvdGhlciB0aGFuIDggYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHdyaXRpbmciKTsKICBvZihlKTsKICB2YXIgaSA9IHZhKHt9LCBlLmltYWdlUmVzb3VyY2VzKSwgbiA9IHZhKHZhKHt9LCBhKSwgeyBsYXllcklkczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbGF5ZXJUb0lkOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpIH0pOwogIG4uZ2VuZXJhdGVUaHVtYm5haWwgJiYgKGkudGh1bWJuYWlsID0gVDQoZSkpOwogIHZhciBmID0gZS5pbWFnZURhdGE7CiAgaWYgKCFmICYmIGUuY2FudmFzICYmIChmID0gZS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwgMCwgZS5jYW52YXMud2lkdGgsIGUuY2FudmFzLmhlaWdodCkpLCBmICYmIChlLndpZHRoICE9PSBmLndpZHRoIHx8IGUuaGVpZ2h0ICE9PSBmLmhlaWdodCkpCiAgICB0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IGNhbnZhcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBkb2N1bWVudCIpOwogIHZhciB1ID0gISFmICYmIFZuKGYpLCBvID0gTWF0aC5tYXgoZmYoZS5jaGlsZHJlbiksIDQgKiAyICogZS53aWR0aCAqIGUuaGVpZ2h0ICsgMiAqIGUuaGVpZ2h0KTsKICByLnRlbXBCdWZmZXIgPSBuZXcgVWludDhBcnJheShvKSwgbjAociwgIjhCUFMiKSwgeChyLCBhLnBzYiA/IDIgOiAxKSwgWjAociwgNiksIHgociwgdSA/IDQgOiAzKSwgVShyLCBlLmhlaWdodCksIFUociwgZS53aWR0aCksIHgociwgdCksIHgoCiAgICByLAogICAgMwogICAgLyogQ29sb3JNb2RlLlJHQiAqLwogICksIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgdmFyIHAsIFcsIEM7CiAgICBpZiAoZS5wYWxldHRlKSB7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKHAgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IHAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHAucikgfHwgMCk7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKFcgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IFcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFcuZykgfHwgMCk7CiAgICAgIGZvciAodmFyIF8gPSAwOyBfIDwgMjU2OyBfKyspCiAgICAgICAgVChyLCAoKEMgPSBlLnBhbGV0dGVbX10pID09PSBudWxsIHx8IEMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEMuYikgfHwgMCk7CiAgICB9CiAgfSk7CiAgdmFyIGwgPSBbXTsKICBjZihsLCBlLmNoaWxkcmVuKSwgbC5sZW5ndGggfHwgbC5wdXNoKHt9KSwgaS5sYXllcnNHcm91cCA9IGwubWFwKGZ1bmN0aW9uKHApIHsKICAgIHJldHVybiBwLmxpbmtHcm91cCB8fCAwOwogIH0pLCBpLmxheWVyR3JvdXBzRW5hYmxlZElkID0gbC5tYXAoZnVuY3Rpb24ocCkgewogICAgcmV0dXJuIHAubGlua0dyb3VwRW5hYmxlZCA9PSAhMSA/IDAgOiAxOwogIH0pLCBlcihyLCAxLCBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIHAgPSBmdW5jdGlvbihOKSB7CiAgICAgIGZvciAodmFyIEQgPSBOLmhhcyhpKSwgWSA9IEQgPT09ICExID8gMCA6IEQgPT09ICEwID8gMSA6IEQsIGYwID0gZnVuY3Rpb24oSikgewogICAgICAgIG4wKHIsICI4QklNIiksIHgociwgTi5rZXkpLCBrYShyLCAiIiwgMiksIGVyKHIsIDIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE4ud3JpdGUociwgaSwgSik7CiAgICAgICAgfSk7CiAgICAgIH0sIEcgPSAwOyBHIDwgWTsgRysrKQogICAgICAgIGYwKEcpOwogICAgfSwgVyA9IDAsIEMgPSBWMTsgVyA8IEMubGVuZ3RoOyBXKyspIHsKICAgICAgdmFyIF8gPSBDW1ddOwogICAgICBwKF8pOwogICAgfQogIH0pLCBlcihyLCAyLCBmdW5jdGlvbigpIHsKICAgIFM0KHIsIGwsIGUsIHUsIG4pLCBONChyLCBlLmdsb2JhbExheWVyTWFza0luZm8pLCBsZihyLCBlLCBlLCBuKTsKICB9LCB2b2lkIDAsICEhbi5wc2IpOwogIHZhciBzID0gdSA/IFswLCAxLCAyLCAzXSA6IFswLCAxLCAyXSwgYyA9IGYgPyBmLndpZHRoIDogZS53aWR0aCwgZCA9IGYgPyBmLmhlaWdodCA6IGUuaGVpZ2h0LCB2ID0geyBkYXRhOiBuZXcgVWludDhBcnJheShjICogZCAqIDQpLCB3aWR0aDogYywgaGVpZ2h0OiBkIH07CiAgeCgKICAgIHIsCiAgICAxCiAgICAvKiBDb21wcmVzc2lvbi5SbGVDb21wcmVzc2VkICovCiAgKTsKICB7CiAgICBpZiAoZiAmJiB2LmRhdGEuc2V0KG5ldyBVaW50OEFycmF5KGYuZGF0YS5idWZmZXIsIGYuZGF0YS5ieXRlT2Zmc2V0LCBmLmRhdGEuYnl0ZUxlbmd0aCkpLCB1KQogICAgICBmb3IgKHZhciBrID0gdi53aWR0aCAqIHYuaGVpZ2h0ICogNCwgRSA9IHYuZGF0YSwgZyA9IDA7IGcgPCBrOyBnICs9IDQpIHsKICAgICAgICB2YXIgdyA9IEVbZyArIDNdOwogICAgICAgIGlmICh3ICE9IDAgJiYgdyAhPSAyNTUpIHsKICAgICAgICAgIHZhciBCID0gdyAvIDI1NSwgbSA9IDI1NSAqICgxIC0gQik7CiAgICAgICAgICBFW2cgKyAwXSA9IEVbZyArIDBdICogQiArIG0sIEVbZyArIDFdID0gRVtnICsgMV0gKiBCICsgbSwgRVtnICsgMl0gPSBFW2cgKyAyXSAqIEIgKyBtOwogICAgICAgIH0KICAgICAgfQogICAgTnIociwgVEEoci50ZW1wQnVmZmVyLCB2LCBzLCAhIWEucHNiKSk7CiAgfQp9CmZ1bmN0aW9uIFM0KHIsIGUsIGEsIEEsIHQpIHsKICBlcihyLCA0LCBmdW5jdGlvbigpIHsKICAgIHZhciBpOwogICAgRTAociwgQSA/IC1lLmxlbmd0aCA6IGUubGVuZ3RoKTsKICAgIGZvciAodmFyIG4gPSBlLm1hcChmdW5jdGlvbihFLCBnKSB7CiAgICAgIHJldHVybiBQNChyLnRlbXBCdWZmZXIsIEUsIGcgPT09IDAsIHQpOwogICAgfSksIGYgPSBmdW5jdGlvbihFKSB7CiAgICAgIHZhciBnID0gRS5sYXllciwgdyA9IEUudG9wLCBCID0gRS5sZWZ0LCBtID0gRS5ib3R0b20sIHAgPSBFLnJpZ2h0LCBXID0gRS5jaGFubmVsczsKICAgICAgdDAociwgdyksIHQwKHIsIEIpLCB0MChyLCBtKSwgdDAociwgcCksIHgociwgVy5sZW5ndGgpOwogICAgICBmb3IgKHZhciBDID0gMCwgXyA9IFc7IEMgPCBfLmxlbmd0aDsgQysrKSB7CiAgICAgICAgdmFyIE4gPSBfW0NdOwogICAgICAgIEUwKHIsIE4uY2hhbm5lbElkKSwgdC5wc2IgJiYgVShyLCAwKSwgVShyLCBOLmxlbmd0aCk7CiAgICAgIH0KICAgICAgbjAociwgIjhCSU0iKSwgbjAociwgWGVbZy5ibGVuZE1vZGVdIHx8ICJub3JtIiksIFQociwgTWF0aC5yb3VuZChNQSgoaSA9IGcub3BhY2l0eSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IDEsIDAsIDEpICogMjU1KSksIFQociwgZy5jbGlwcGluZyA/IDEgOiAwKTsKICAgICAgdmFyIEQgPSA4OwogICAgICBnLnRyYW5zcGFyZW5jeVByb3RlY3RlZCAmJiAoRCB8PSAxKSwgZy5oaWRkZW4gJiYgKEQgfD0gMiksIChnLnZlY3Rvck1hc2sgfHwgZy5zZWN0aW9uRGl2aWRlciAmJiBnLnNlY3Rpb25EaXZpZGVyLnR5cGUgIT09IDAgfHwgZy5hZGp1c3RtZW50KSAmJiAoRCB8PSAxNiksIGcuZWZmZWN0c09wZW4gJiYgKEQgfD0gMzIpLCBUKHIsIEQpLCBUKHIsIDApLCBlcihyLCAxLCBmdW5jdGlvbigpIHsKICAgICAgICBENChyLCBnLCBFKSwgeDQociwgZyksIGthKHIsIChnLm5hbWUgfHwgIiIpLnN1YnN0cmluZygwLCAyNTUpLCA0KSwgbGYociwgZywgYSwgdCk7CiAgICAgIH0pOwogICAgfSwgdSA9IDAsIG8gPSBuOyB1IDwgby5sZW5ndGg7IHUrKykgewogICAgICB2YXIgbCA9IG9bdV07CiAgICAgIGYobCk7CiAgICB9CiAgICBmb3IgKHZhciBzID0gMCwgYyA9IG47IHMgPCBjLmxlbmd0aDsgcysrKQogICAgICBmb3IgKHZhciBsID0gY1tzXSwgZCA9IDAsIHYgPSBsLmNoYW5uZWxzOyBkIDwgdi5sZW5ndGg7IGQrKykgewogICAgICAgIHZhciBrID0gdltkXTsKICAgICAgICB4KHIsIGsuY29tcHJlc3Npb24pLCBrLmJ1ZmZlciAmJiBOcihyLCBrLmJ1ZmZlcik7CiAgICAgIH0KICB9LCAhMCwgdC5wc2IpOwp9CmZ1bmN0aW9uIEQ0KHIsIGUsIGEpIHsKICB2YXIgQSA9IGUubWFzaywgdCA9IGUucmVhbE1hc2s7CiAgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICBpZiAoISghQSAmJiAhdCkpIHsKICAgICAgdmFyIGkgPSAwLCBuID0gMCwgZiA9IDA7CiAgICAgIEEgJiYgKEEudXNlck1hc2tEZW5zaXR5ICE9PSB2b2lkIDAgJiYgKGkgfD0gMSksIEEudXNlck1hc2tGZWF0aGVyICE9PSB2b2lkIDAgJiYgKGkgfD0gMiksIEEudmVjdG9yTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiAoaSB8PSA0KSwgQS52ZWN0b3JNYXNrRmVhdGhlciAhPT0gdm9pZCAwICYmIChpIHw9IDgpLCBBLmRpc2FibGVkICYmIChuIHw9IDIpLCBBLnBvc2l0aW9uUmVsYXRpdmVUb0xheWVyICYmIChuIHw9IDEpLCBBLmZyb21WZWN0b3JEYXRhICYmIChuIHw9IDgpLCBpICYmIChuIHw9IDE2KSk7CiAgICAgIHZhciB1ID0gYS5tYXNrIHx8IHt9OwogICAgICBpZiAodDAociwgdS50b3AgfHwgMCksIHQwKHIsIHUubGVmdCB8fCAwKSwgdDAociwgdS5ib3R0b20gfHwgMCksIHQwKHIsIHUucmlnaHQgfHwgMCksIFQociwgQSAmJiBBLmRlZmF1bHRDb2xvciB8fCAwKSwgVChyLCBuKSwgdCkgewogICAgICAgIHQuZGlzYWJsZWQgJiYgKGYgfD0gMiksIHQucG9zaXRpb25SZWxhdGl2ZVRvTGF5ZXIgJiYgKGYgfD0gMSksIHQuZnJvbVZlY3RvckRhdGEgJiYgKGYgfD0gOCk7CiAgICAgICAgdmFyIG8gPSBhLnJlYWxNYXNrIHx8IHt9OwogICAgICAgIFQociwgZiksIFQociwgdC5kZWZhdWx0Q29sb3IgfHwgMCksIHQwKHIsIG8udG9wIHx8IDApLCB0MChyLCBvLmxlZnQgfHwgMCksIHQwKHIsIG8uYm90dG9tIHx8IDApLCB0MChyLCBvLnJpZ2h0IHx8IDApOwogICAgICB9CiAgICAgIGkgJiYgQSAmJiAoVChyLCBpKSwgQS51c2VyTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiBUKHIsIE1hdGgucm91bmQoQS51c2VyTWFza0RlbnNpdHkgKiAyNTUpKSwgQS51c2VyTWFza0ZlYXRoZXIgIT09IHZvaWQgMCAmJiBGcihyLCBBLnVzZXJNYXNrRmVhdGhlciksIEEudmVjdG9yTWFza0RlbnNpdHkgIT09IHZvaWQgMCAmJiBUKHIsIE1hdGgucm91bmQoQS52ZWN0b3JNYXNrRGVuc2l0eSAqIDI1NSkpLCBBLnZlY3Rvck1hc2tGZWF0aGVyICE9PSB2b2lkIDAgJiYgRnIociwgQS52ZWN0b3JNYXNrRmVhdGhlcikpLCBaMChyLCAyKTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBiZShyLCBlKSB7CiAgVChyLCBlWzBdKSwgVChyLCBlWzFdKSwgVChyLCBlWzJdKSwgVChyLCBlWzNdKTsKfQpmdW5jdGlvbiB4NChyLCBlKSB7CiAgZXIociwgMSwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYSA9IGUuYmxlbmRpbmdSYW5nZXM7CiAgICBpZiAoYSkgewogICAgICBiZShyLCBhLmNvbXBvc2l0ZUdyYXlCbGVuZFNvdXJjZSksIGJlKHIsIGEuY29tcG9zaXRlR3JhcGhCbGVuZERlc3RpbmF0aW9uUmFuZ2UpOwogICAgICBmb3IgKHZhciBBID0gMCwgdCA9IGEucmFuZ2VzOyBBIDwgdC5sZW5ndGg7IEErKykgewogICAgICAgIHZhciBpID0gdFtBXTsKICAgICAgICBiZShyLCBpLnNvdXJjZVJhbmdlKSwgYmUociwgaS5kZXN0UmFuZ2UpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gTjQociwgZSkgewogIGVyKHIsIDEsIGZ1bmN0aW9uKCkgewogICAgZSAmJiAoeChyLCBlLm92ZXJsYXlDb2xvclNwYWNlKSwgeChyLCBlLmNvbG9yU3BhY2UxKSwgeChyLCBlLmNvbG9yU3BhY2UyKSwgeChyLCBlLmNvbG9yU3BhY2UzKSwgeChyLCBlLmNvbG9yU3BhY2U0KSwgeChyLCBlLm9wYWNpdHkgKiAyNTUpLCBUKHIsIGUua2luZCksIFowKHIsIDMpKTsKICB9KTsKfQpmdW5jdGlvbiBsZihyLCBlLCBhLCBBKSB7CiAgZm9yICh2YXIgdCA9IGZ1bmN0aW9uKHUpIHsKICAgIHZhciBvID0gdS5rZXk7CiAgICBpZiAobyA9PT0gIlR4dDIiICYmIEEuaW52YWxpZGF0ZVRleHRMYXllcnMpCiAgICAgIHJldHVybiAiY29udGludWUiOwogICAgaWYgKG8gPT09ICJ2bXNrIiAmJiBBLnBzYiAmJiAobyA9ICJ2c21zIiksIHUuaGFzKGUpKSB7CiAgICAgIHZhciBsID0gQS5wc2IgJiYgWG4uaW5kZXhPZihvKSAhPT0gLTEsIHMgPSBvICE9PSAiVHh0MiIgJiYgbyAhPT0gImNpbmYiICYmIG8gIT09ICJleHRuIiAmJiBvICE9PSAiQ0FJICIgJiYgbyAhPT0gIk9DSU8iLCBjID0gbyA9PT0gIlR4dDIiIHx8IG8gPT09ICJsdW5pIiB8fCBvID09PSAidm1zayIgfHwgbyA9PT0gImFydGIiIHx8IG8gPT09ICJhcnRkIiB8fCBvID09PSAidm9nayIgfHwgbyA9PT0gIlNvTGQiIHx8IG8gPT09ICJsbmsyIiB8fCBvID09PSAidnNjZyIgfHwgbyA9PT0gInZzbXMiIHx8IG8gPT09ICJHZEZsIiB8fCBvID09PSAibG1meCIgfHwgbyA9PT0gImxyRlgiIHx8IG8gPT09ICJjaW5mIiB8fCBvID09PSAiUGxMZCIgfHwgbyA9PT0gIkFubm8iIHx8IG8gPT09ICJDQUkgIiB8fCBvID09PSAiT0NJTyIgfHwgbyA9PT0gIkdlbkkiIHx8IG8gPT09ICJGRWlkIiB8fCBvID09PSAiY3VydiIgfHwgbyA9PT0gIkNnRWQiIHx8IG8gPT09ICJ2aWJBIiB8fCBvID09PSAiYmx3aCIgfHwgbyA9PT0gImdyZG0iOwogICAgICBuMChyLCBsID8gIjhCNjQiIDogIjhCSU0iKSwgbjAociwgbyksIGVyKHIsIGMgPyA0IDogMiwgZnVuY3Rpb24oKSB7CiAgICAgICAgdS53cml0ZShyLCBlLCBhLCBBKTsKICAgICAgfSwgcywgbCk7CiAgICB9CiAgfSwgaSA9IDAsIG4gPSBxMTsgaSA8IG4ubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmID0gbltpXTsKICAgIHQoZik7CiAgfQp9CmZ1bmN0aW9uIGNmKHIsIGUpIHsKICBpZiAoZSkKICAgIGZvciAodmFyIGEgPSAwLCBBID0gZTsgYSA8IEEubGVuZ3RoOyBhKyspIHsKICAgICAgdmFyIHQgPSBBW2FdOwogICAgICBpZiAodC5jaGlsZHJlbiAmJiB0LmNhbnZhcykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGF5ZXIsIGNhbm5vdCBoYXZlIGJvdGggJ2NhbnZhcycgYW5kICdjaGlsZHJlbicgcHJvcGVydGllcyIpOwogICAgICBpZiAodC5jaGlsZHJlbiAmJiB0LmltYWdlRGF0YSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGF5ZXIsIGNhbm5vdCBoYXZlIGJvdGggJ2ltYWdlRGF0YScgYW5kICdjaGlsZHJlbicgcHJvcGVydGllcyIpOwogICAgICB0LmNoaWxkcmVuID8gKHIucHVzaCh7CiAgICAgICAgbmFtZTogIjwvTGF5ZXIgZ3JvdXA+IiwKICAgICAgICBzZWN0aW9uRGl2aWRlcjogewogICAgICAgICAgdHlwZTogMwogICAgICAgIH0KICAgICAgICAvLyBibGVuZGluZ1JhbmdlczogY2hpbGRyZW5bMF0uYmxlbmRpbmdSYW5nZXMsCiAgICAgICAgLy8gbmFtZVNvdXJjZTogJ2xzZXQnLAogICAgICAgIC8vIGlkOiBsYXllcklkcy5zaGlmdCgpLAogICAgICAgIC8vIHByb3RlY3RlZDogewogICAgICAgIC8vIAl0cmFuc3BhcmVuY3k6IGZhbHNlLAogICAgICAgIC8vIAljb21wb3NpdGU6IGZhbHNlLAogICAgICAgIC8vIAlwb3NpdGlvbjogZmFsc2UsCiAgICAgICAgLy8gfSwKICAgICAgICAvLyBsYXllckNvbG9yOiAncmVkJywKICAgICAgICAvLyB0aW1lc3RhbXA6IHRpbWVzdGFtcHMuc2hpZnQoKSwKICAgICAgICAvLyByZWZlcmVuY2VQb2ludDogeyB4OiAwLCB5OiAwIH0sCiAgICAgIH0pLCBjZihyLCB0LmNoaWxkcmVuKSwgci5wdXNoKHZhKHZhKHt9LCB0KSwgeyBibGVuZE1vZGU6IHQuYmxlbmRNb2RlID09PSAicGFzcyB0aHJvdWdoIiA/ICJub3JtYWwiIDogdC5ibGVuZE1vZGUsIHNlY3Rpb25EaXZpZGVyOiB7CiAgICAgICAgdHlwZTogdC5vcGVuZWQgPT09ICExID8gMiA6IDEsCiAgICAgICAga2V5OiBYZVt0LmJsZW5kTW9kZV0gfHwgInBhc3MiLAogICAgICAgIHN1YlR5cGU6IDAKICAgICAgfSB9KSkpIDogci5wdXNoKHZhKHt9LCB0KSk7CiAgICB9Cn0KZnVuY3Rpb24gTTQociwgZSkgewogIHZhciBhID0gci5idWZmZXIuYnl0ZUxlbmd0aDsKICBkbwogICAgYSAqPSAyOwogIHdoaWxlIChlID4gYSk7CiAgdmFyIEEgPSBuZXcgQXJyYXlCdWZmZXIoYSksIHQgPSBuZXcgVWludDhBcnJheShBKSwgaSA9IG5ldyBVaW50OEFycmF5KHIuYnVmZmVyKTsKICB0LnNldChpKSwgci5idWZmZXIgPSBBLCByLnZpZXcgPSBuZXcgRGF0YVZpZXcoci5idWZmZXIpOwp9CmZ1bmN0aW9uIHNmKHIsIGUpIHsKICBlID4gci5idWZmZXIuYnl0ZUxlbmd0aCAmJiBNNChyLCBlKTsKfQpmdW5jdGlvbiB0YShyLCBlKSB7CiAgdmFyIGEgPSByLm9mZnNldDsKICByZXR1cm4gc2Yociwgci5vZmZzZXQgKz0gZSksIGE7Cn0KZnVuY3Rpb24gVDQocikgewogIHZhciBlID0gYTIoMTAsIDEwKSwgYSA9IDE7CiAgci53aWR0aCA+IHIuaGVpZ2h0ID8gKGUud2lkdGggPSAxNjAsIGUuaGVpZ2h0ID0gTWF0aC5mbG9vcihyLmhlaWdodCAqIChlLndpZHRoIC8gci53aWR0aCkpLCBhID0gZS53aWR0aCAvIHIud2lkdGgpIDogKGUuaGVpZ2h0ID0gMTYwLCBlLndpZHRoID0gTWF0aC5mbG9vcihyLndpZHRoICogKGUuaGVpZ2h0IC8gci5oZWlnaHQpKSwgYSA9IGUuaGVpZ2h0IC8gci5oZWlnaHQpOwogIHZhciBBID0gZS5nZXRDb250ZXh0KCIyZCIpOwogIHJldHVybiBBLnNjYWxlKGEsIGEpLCByLmltYWdlRGF0YSA/IEEuZHJhd0ltYWdlKG1lKHIuaW1hZ2VEYXRhKSwgMCwgMCkgOiByLmNhbnZhcyAmJiBBLmRyYXdJbWFnZShyLmNhbnZhcywgMCwgMCksIGU7Cn0KZnVuY3Rpb24gWWkociwgZSwgYSwgQSwgdCwgaSkgewogIHZhciBuID0gQS50b3AgfCAwLCBmID0gQS5sZWZ0IHwgMCwgdSA9IEEucmlnaHQgfCAwLCBvID0gQS5ib3R0b20gfCAwLCBsID0gTEEoQSksIHMgPSBsLndpZHRoLCBjID0gbC5oZWlnaHQsIGQgPSBBLmltYWdlRGF0YTsKICBpZiAoIWQgJiYgQS5jYW52YXMgJiYgcyAmJiBjICYmIChkID0gQS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwgMCwgcywgYykpLCBkICYmIChkLndpZHRoICE9PSBzIHx8IGQuaGVpZ2h0ICE9PSBjKSkKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbWFnZURhdGEgZGltZW50aW9ucyIpOwogIHUgPSBmICsgcywgbyA9IG4gKyBjOwogIHZhciB2LCBrOwogIGQgPyB0LmNvbXByZXNzID8gKHYgPSBTbihkLCBbMF0pLCBrID0gMikgOiAodiA9IFRBKHIsIGQsIFswXSwgISF0LnBzYiksIGsgPSAxKSA6ICh2ID0gbmV3IFVpbnQ4QXJyYXkoMCksIGsgPSAxKSwgZS5jaGFubmVscy5wdXNoKHsgY2hhbm5lbElkOiBpID8gLTMgOiAtMiwgY29tcHJlc3Npb246IGssIGJ1ZmZlcjogdiwgbGVuZ3RoOiAyICsgdi5sZW5ndGggfSksIGVbaSA/ICJyZWFsTWFzayIgOiAibWFzayJdID0geyB0b3A6IG4sIGxlZnQ6IGYsIHJpZ2h0OiB1LCBib3R0b206IG8gfTsKfQpmdW5jdGlvbiBQNChyLCBlLCBhLCBBKSB7CiAgdmFyIHQgPSBPNChyLCBlLCBhLCBBKTsKICByZXR1cm4gZS5tYXNrICYmIFlpKHIsIHQsIGUsIGUubWFzaywgQSwgITEpLCBlLnJlYWxNYXNrICYmIFlpKHIsIHQsIGUsIGUucmVhbE1hc2ssIEEsICEwKSwgdDsKfQpmdW5jdGlvbiBMQShyKSB7CiAgdmFyIGUsIGEsIEEsIHQsIGkgPSByLmNhbnZhcywgbiA9IHIuaW1hZ2VEYXRhLCBmID0gKGEgPSAoZSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ud2lkdGgpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBpID09IG51bGwgPyB2b2lkIDAgOiBpLndpZHRoKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogMCwgdSA9ICh0ID0gKEEgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmhlaWdodCkgIT09IG51bGwgJiYgQSAhPT0gdm9pZCAwID8gQSA6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaGVpZ2h0KSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogMDsKICByZXR1cm4geyB3aWR0aDogZiwgaGVpZ2h0OiB1IH07Cn0KZnVuY3Rpb24gWTQociwgZSwgYSwgQSwgdCkgewogIGlmIChyLmRhdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCByLmRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkKICAgIHRocm93IG5ldyBFcnJvcigiaW1hZ2VEYXRhIGhhcyBpbmNvcnJlY3QgYml0IGRlcHRoIik7CiAgZm9yICh2YXIgaSA9IEhhKEEsIHQpLCBuID0gci5kYXRhLCBmID0gaS5kYXRhLCB1ID0gMDsgdSA8IHQ7IHUrKykKICAgIGZvciAodmFyIG8gPSAwOyBvIDwgQTsgbysrKSB7CiAgICAgIHZhciBsID0gKG8gKyBlICsgKHUgKyBhKSAqIHIud2lkdGgpICogNCwgcyA9IChvICsgdSAqIEEpICogNDsKICAgICAgZltzXSA9IG5bbF0sIGZbcyArIDFdID0gbltsICsgMV0sIGZbcyArIDJdID0gbltsICsgMl0sIGZbcyArIDNdID0gbltsICsgM107CiAgICB9CiAgcmV0dXJuIGk7Cn0KZnVuY3Rpb24gTzQociwgZSwgYSwgQSkgewogIHZhciB0ID0gZS50b3AgfCAwLCBpID0gZS5sZWZ0IHwgMCwgbiA9IGUucmlnaHQgfCAwLCBmID0gZS5ib3R0b20gfCAwLCB1ID0gWwogICAgeyBjaGFubmVsSWQ6IC0xLCBjb21wcmVzc2lvbjogMCwgYnVmZmVyOiB2b2lkIDAsIGxlbmd0aDogMiB9LAogICAgeyBjaGFubmVsSWQ6IDAsIGNvbXByZXNzaW9uOiAwLCBidWZmZXI6IHZvaWQgMCwgbGVuZ3RoOiAyIH0sCiAgICB7IGNoYW5uZWxJZDogMSwgY29tcHJlc3Npb246IDAsIGJ1ZmZlcjogdm9pZCAwLCBsZW5ndGg6IDIgfSwKICAgIHsgY2hhbm5lbElkOiAyLCBjb21wcmVzc2lvbjogMCwgYnVmZmVyOiB2b2lkIDAsIGxlbmd0aDogMiB9CiAgXSwgbyA9IExBKGUpLCBsID0gby53aWR0aCwgcyA9IG8uaGVpZ2h0OwogIGlmICghKGUuY2FudmFzIHx8IGUuaW1hZ2VEYXRhKSB8fCAhbCB8fCAhcykKICAgIHJldHVybiBuID0gaSwgZiA9IHQsIHsgbGF5ZXI6IGUsIHRvcDogdCwgbGVmdDogaSwgcmlnaHQ6IG4sIGJvdHRvbTogZiwgY2hhbm5lbHM6IHUgfTsKICBuID0gaSArIGwsIGYgPSB0ICsgczsKICB2YXIgYyA9IGUuaW1hZ2VEYXRhIHx8IGUuY2FudmFzLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsIDAsIGwsIHMpOwogIGlmIChBLnRyaW1JbWFnZURhdGEpIHsKICAgIHZhciBkID0gVTQoYyk7CiAgICBpZiAoZC5sZWZ0ICE9PSAwIHx8IGQudG9wICE9PSAwIHx8IGQucmlnaHQgIT09IGMud2lkdGggfHwgZC5ib3R0b20gIT09IGMuaGVpZ2h0KSB7CiAgICAgIGlmIChpICs9IGQubGVmdCwgdCArPSBkLnRvcCwgbiAtPSBjLndpZHRoIC0gZC5yaWdodCwgZiAtPSBjLmhlaWdodCAtIGQuYm90dG9tLCBsID0gbiAtIGksIHMgPSBmIC0gdCwgIWwgfHwgIXMpCiAgICAgICAgcmV0dXJuIHsgbGF5ZXI6IGUsIHRvcDogdCwgbGVmdDogaSwgcmlnaHQ6IG4sIGJvdHRvbTogZiwgY2hhbm5lbHM6IHUgfTsKICAgICAgYyA9IFk0KGMsIGQubGVmdCwgZC50b3AsIGwsIHMpOwogICAgfQogIH0KICB2YXIgdiA9IFsKICAgIDAsCiAgICAxLAogICAgMgogIF07CiAgcmV0dXJuICghYSB8fCBBLm5vQmFja2dyb3VuZCB8fCBlLm1hc2sgfHwgVm4oYykgfHwgZGwpICYmIHYudW5zaGlmdCgKICAgIC0xCiAgICAvKiBDaGFubmVsSUQuVHJhbnNwYXJlbmN5ICovCiAgKSwgdSA9IHYubWFwKGZ1bmN0aW9uKGspIHsKICAgIHZhciBFID0gUm4oaywgITEpLCBnLCB3OwogICAgcmV0dXJuIEEuY29tcHJlc3MgPyAoZyA9IFNuKGMsIFtFXSksIHcgPSAyKSA6IChnID0gVEEociwgYywgW0VdLCAhIUEucHNiKSwgdyA9IDEpLCB7IGNoYW5uZWxJZDogaywgY29tcHJlc3Npb246IHcsIGJ1ZmZlcjogZywgbGVuZ3RoOiAyICsgZy5sZW5ndGggfTsKICB9KSwgeyBsYXllcjogZSwgdG9wOiB0LCBsZWZ0OiBpLCByaWdodDogbiwgYm90dG9tOiBmLCBjaGFubmVsczogdSB9Owp9CmZ1bmN0aW9uIE9pKHIsIGUsIGEsIEEpIHsKICBmb3IgKHZhciB0ID0gci5kYXRhLCBpID0gci53aWR0aCwgbiA9IChlICogaSArIGEpICogNCArIDMgfCAwLCBmID0gbiArIChBIC0gYSkgKiA0IHwgMCwgdSA9IG47IHUgPCBmOyB1ID0gdSArIDQgfCAwKQogICAgaWYgKHRbdV0gIT09IDApCiAgICAgIHJldHVybiAhMTsKICByZXR1cm4gITA7Cn0KZnVuY3Rpb24gVWkociwgZSwgYSwgQSkgewogIGZvciAodmFyIHQgPSByLmRhdGEsIGkgPSByLndpZHRoLCBuID0gaSAqIDQgfCAwLCBmID0gYSAqIG4gKyBlICogNCArIDMgfCAwLCB1ID0gYSwgbyA9IGY7IHUgPCBBOyB1KyssIG8gPSBvICsgbiB8IDApCiAgICBpZiAodFtvXSAhPT0gMCkKICAgICAgcmV0dXJuICExOwogIHJldHVybiAhMDsKfQpmdW5jdGlvbiBVNChyKSB7CiAgZm9yICh2YXIgZSA9IDAsIGEgPSAwLCBBID0gci53aWR0aCwgdCA9IHIuaGVpZ2h0OyBlIDwgdCAmJiBPaShyLCBlLCBhLCBBKTsgKQogICAgZSsrOwogIGZvciAoOyB0ID4gZSAmJiBPaShyLCB0IC0gMSwgYSwgQSk7ICkKICAgIHQtLTsKICBmb3IgKDsgYSA8IEEgJiYgVWkociwgYSwgZSwgdCk7ICkKICAgIGErKzsKICBmb3IgKDsgQSA+IGEgJiYgVWkociwgQSAtIDEsIGUsIHQpOyApCiAgICBBLS07CiAgcmV0dXJuIHsgdG9wOiBlLCBsZWZ0OiBhLCByaWdodDogQSwgYm90dG9tOiB0IH07Cn0KZnVuY3Rpb24gcnIociwgZSkgewogIGUgPyAiciIgaW4gZSA/ICh4KAogICAgciwKICAgIDAKICAgIC8qIENvbG9yU3BhY2UuUkdCICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuciAqIDI1NykpLCB4KHIsIE1hdGgucm91bmQoZS5nICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmIgKiAyNTcpKSwgeChyLCAwKSkgOiAiZnIiIGluIGUgPyAoeCgKICAgIHIsCiAgICAwCiAgICAvKiBDb2xvclNwYWNlLlJHQiAqLwogICksIHgociwgTWF0aC5yb3VuZChlLmZyICogMjU1ICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmZnICogMjU1ICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLmZiICogMjU1ICogMjU3KSksIHgociwgMCkpIDogImwiIGluIGUgPyAoeCgKICAgIHIsCiAgICA3CiAgICAvKiBDb2xvclNwYWNlLkxhYiAqLwogICksIEUwKHIsIE1hdGgucm91bmQoZS5sICogMWU0KSksIEUwKHIsIE1hdGgucm91bmQoZS5hIDwgMCA/IGUuYSAqIDEyODAwIDogZS5hICogMTI3MDApKSwgRTAociwgTWF0aC5yb3VuZChlLmIgPCAwID8gZS5iICogMTI4MDAgOiBlLmIgKiAxMjcwMCkpLCB4KHIsIDApKSA6ICJoIiBpbiBlID8gKHgoCiAgICByLAogICAgMQogICAgLyogQ29sb3JTcGFjZS5IU0IgKi8KICApLCB4KHIsIE1hdGgucm91bmQoZS5oICogNjU1MzUpKSwgeChyLCBNYXRoLnJvdW5kKGUucyAqIDY1NTM1KSksIHgociwgTWF0aC5yb3VuZChlLmIgKiA2NTUzNSkpLCB4KHIsIDApKSA6ICJjIiBpbiBlID8gKHgoCiAgICByLAogICAgMgogICAgLyogQ29sb3JTcGFjZS5DTVlLICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuYyAqIDI1NykpLCB4KHIsIE1hdGgucm91bmQoZS5tICogMjU3KSksIHgociwgTWF0aC5yb3VuZChlLnkgKiAyNTcpKSwgeChyLCBNYXRoLnJvdW5kKGUuayAqIDI1NykpKSA6ICh4KAogICAgciwKICAgIDgKICAgIC8qIENvbG9yU3BhY2UuR3JheXNjYWxlICovCiAgKSwgeChyLCBNYXRoLnJvdW5kKGUuayAqIDFlNCAvIDI1NSkpLCBaMChyLCA2KSkgOiAoeCgKICAgIHIsCiAgICAwCiAgICAvKiBDb2xvclNwYWNlLlJHQiAqLwogICksIFowKHIsIDgpKTsKfQp2YXIgQmUgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gQmUgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHsKICAgIGZvciAodmFyIGUsIGEgPSAxLCBBID0gYXJndW1lbnRzLmxlbmd0aDsgYSA8IEE7IGErKykgewogICAgICBlID0gYXJndW1lbnRzW2FdOwogICAgICBmb3IgKHZhciB0IGluIGUpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KSAmJiAoclt0XSA9IGVbdF0pOwogICAgfQogICAgcmV0dXJuIHI7CiAgfSwgQmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfSwgajQgPSBbIm9mZiIsICJmYWRlIiwgInBlbiBwcmVzc3VyZSIsICJwZW4gdGlsdCIsICJzdHlsdXMgd2hlZWwiLCAiaW5pdGlhbCBkaXJlY3Rpb24iLCAiZGlyZWN0aW9uIiwgImluaXRpYWwgcm90YXRpb24iLCAicm90YXRpb24iXSwgamkgPSBbInJvdW5kIHBvaW50IiwgInJvdW5kIGJsdW50IiwgInJvdW5kIGN1cnZlIiwgInJvdW5kIGFuZ2xlIiwgInJvdW5kIGZhbiIsICJmbGF0IHBvaW50IiwgImZsYXQgYmx1bnQiLCAiZmxhdCBjdXJ2ZSIsICJmbGF0IGFuZ2xlIiwgImZsYXQgZmFuIl0sIFE0ID0gWyJlcm9kaWJsZSBwb2ludCIsICJlcm9kaWJsZSBmbGF0IiwgImVyb2RpYmxlIHJvdW5kIiwgImVyb2RpYmxlIHNxdWFyZSIsICJlcm9kaWJsZSB0cmlhbmdsZSIsICJjdXN0b20iXSwgSjQgPSB7CiAgXzogImJydXNoIiwKICBNaXhCOiAibWl4ZXIgYnJ1c2giLAogIFNtVGw6ICJzbXVkZ2UgYnJ1c2giCiAgLy8gUGJUbAogIC8vIEVyVGwKfTsKZnVuY3Rpb24gdHIocikgewogIHJldHVybiB7CiAgICBjb250cm9sOiBqNFtyLmJWVHldLAogICAgc3RlcHM6IHIuZlN0cCwKICAgIGppdHRlcjogQTAoci5qaXR0ZXIpLAogICAgbWluaW11bTogQTAoclsiTW5tICJdKQogIH07Cn0KZnVuY3Rpb24gUWkocikgewogIHN3aXRjaCAoci5fY2xhc3NJRCkgewogICAgY2FzZSAiY29tcHV0ZWRCcnVzaCI6CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogImNvbXB1dGVkIiwKICAgICAgICBzaXplOiByZShyLkRtdHIsICJQaXhlbHMiKSwKICAgICAgICBhbmdsZTogbGEoci5BbmdsKSwKICAgICAgICByb3VuZG5lc3M6IEEwKHIuUm5kbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgc3BhY2luZzogQTAoci5TcGNuKSwKICAgICAgICBmbGlwWDogci5mbGlwWCwKICAgICAgICBmbGlwWTogci5mbGlwWSwKICAgICAgICBoYXJkbmVzczogQTAoci5IcmRuKQogICAgICB9OwogICAgY2FzZSAic2FtcGxlZEJydXNoIjoKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiAic2FtcGxlZCIsCiAgICAgICAgc2l6ZTogcmUoci5EbXRyLCAiUGl4ZWxzIiksCiAgICAgICAgYW5nbGU6IGxhKHIuQW5nbCksCiAgICAgICAgcm91bmRuZXNzOiBBMChyLlJuZG4pLAogICAgICAgIHNwYWNpbmdPbjogci5JbnRyLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFksCiAgICAgICAgbmFtZTogclsiTm0gICJdLAogICAgICAgIHNhbXBsZWREYXRhOiByLnNhbXBsZWREYXRhCiAgICAgIH07CiAgICBjYXNlICJkQnJ1c2giOgogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJkeW5hbWljIiwKICAgICAgICBzaGFwZTogamlbclsiU2hwICJdXSwKICAgICAgICBhbmdsZTogbGEoci5BbmdsKSwKICAgICAgICBzaXplOiByZShyLkRtdHIsICJQaXhlbHMiKSwKICAgICAgICBkZW5zaXR5OiBBMChyLkRuc3QpLAogICAgICAgIGxlbmd0aDogQTAoci5Mbmd0KSwKICAgICAgICBjbHVtcGluZzogQTAoci5jbHVtcGluZyksCiAgICAgICAgdGhpY2tuZXNzOiBBMChyLnRoaWNrbmVzcyksCiAgICAgICAgc3RpZmZuZXNzOiBBMChyLnN0aWZmbmVzcyksCiAgICAgICAgcGh5c2ljczogci5waHlzaWNzLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFkKICAgICAgfTsKICAgIGNhc2UgImRUaXBzIjoKICAgICAgcmV0dXJuIEJlKEJlKHsKICAgICAgICB0eXBlOiAidGlwcyIsCiAgICAgICAgYW5nbGU6IGxhKHIuQW5nbCksCiAgICAgICAgc2l6ZTogcmUoci5EbXRyLCAiUGl4ZWxzIiksCiAgICAgICAgc2hhcGU6IGppW3JbIlNocCAiXV0sCiAgICAgICAgcGh5c2ljczogci5waHlzaWNzLAogICAgICAgIHNwYWNpbmc6IEEwKHIuU3BjbiksCiAgICAgICAgc3BhY2luZ09uOiByLkludHIsCiAgICAgICAgZmxpcFg6IHIuZmxpcFgsCiAgICAgICAgZmxpcFk6IHIuZmxpcFksCiAgICAgICAgLy8gdGlwczoKICAgICAgICB0aXBzVHlwZTogUTRbci5kdGlwc1R5cGVdLAogICAgICAgIHRpcHNMZW5ndGhSYXRpbzogQTAoci5kdGlwc0xlbmd0aFJhdGlvKSwKICAgICAgICB0aXBzSGFyZG5lc3M6IEEwKHIuZHRpcHNIYXJkbmVzcykKICAgICAgfSwgci5kdGlwc0dyaWRTaXplICYmIHIuZHRpcHNFcm9kaWJsZVRpcEhlaWdodE1hcCA/IHsKICAgICAgICB0aXBzR3JpZFNpemU6IHIuZHRpcHNHcmlkU2l6ZSwKICAgICAgICB0aXBzRXJvZGlibGVUaXBIZWlnaHRNYXA6IEg0KHIuZHRpcHNFcm9kaWJsZVRpcEhlaWdodE1hcCkKICAgICAgfSA6IHt9KSwgewogICAgICAgIC8vIGFpcmJydXNoCiAgICAgICAgdGlwc0FpcmJydXNoQ3V0b2ZmQW5nbGU6IHIuZHRpcHNBaXJicnVzaEN1dG9mZkFuZ2xlLAogICAgICAgIHRpcHNBaXJicnVzaEdyYW51bGFyaXR5OiBBMChyLmR0aXBzQWlyYnJ1c2hHcmFudWxhcml0eSksCiAgICAgICAgdGlwc0FpcmJydXNoU3RyZWFraW5lc3M6IEEwKHIuZHRpcHNBaXJicnVzaFN0cmVha2luZXNzKSwKICAgICAgICB0aXBzQWlyYnJ1c2hTcGxhdFNpemU6IEEwKHIuZHRpcHNBaXJicnVzaFNwbGF0U2l6ZSksCiAgICAgICAgdGlwc0FpcmJydXNoU3BsYXRDb3VudDogci5kdGlwc0FpcmJydXNoU3BsYXRDb3VudAogICAgICB9KTsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IGNvbnNvbGUubG9nKHJlcXVpcmUoInV0aWwiKS5pbnNwZWN0KHIsICExLCA5OSwgITApKSwgbmV3IEVycm9yKCJVbmtub3duIGJydXNoIGNsYXNzSWQ6ICIuY29uY2F0KHIuX2NsYXNzSUQpKTsKICB9Cn0KZnVuY3Rpb24gSDQocikgewogIGZvciAodmFyIGUgPSBbXSwgYSA9IDA7IGEgPCByLmJ5dGVMZW5ndGg7IGErKykKICAgIGUucHVzaChyW2FdKTsKICByZXR1cm4gZTsKfQpmdW5jdGlvbiB6NChyLCBlKSB7CiAgdmFyIGEsIEEsIHQsIGk7CiAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pOwogIHZhciBuID0gS2Eoci5idWZmZXIsIHIuYnl0ZU9mZnNldCwgci5ieXRlTGVuZ3RoKSwgZiA9IGcwKG4pLCB1ID0gW10sIG8gPSBbXSwgbCA9IFtdOwogIGlmIChmID09PSAxIHx8IGYgPT09IDIpCiAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEFCUiB2ZXJzaW9uICgiLmNvbmNhdChmLCAiKSIpKTsKICBpZiAoZiA9PT0gNiB8fCBmID09PSA3IHx8IGYgPT09IDkgfHwgZiA9PT0gMTApIHsKICAgIHZhciBzID0gZzAobik7CiAgICBpZiAocyAhPT0gMSAmJiBzICE9PSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEFCUiBtaW5vciB2ZXJzaW9uIik7CiAgICBmb3IgKDsgbi5vZmZzZXQgPCBuLnZpZXcuYnl0ZUxlbmd0aDsgKSB7CiAgICAgIEpyKG4sICI4QklNIik7CiAgICAgIHZhciBjID0gUjAobiksIGQgPSBTKG4pLCB2ID0gbi5vZmZzZXQgKyBkOwogICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICBjYXNlICJzYW1wIjogewogICAgICAgICAgZm9yICg7IG4ub2Zmc2V0IDwgdjsgKSB7CiAgICAgICAgICAgIGZvciAodmFyIGsgPSBTKG4pOyBrICYgMzsgKQogICAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgdmFyIEUgPSBuLm9mZnNldCArIGssIGcgPSB4cihuLCAxKTsKICAgICAgICAgICAgSChuLCBzID09PSAxID8gMTAgOiAyNjQpOwogICAgICAgICAgICB2YXIgdyA9IEwobiksIEIgPSBMKG4pLCBtID0gTChuKSAtIHcsIHAgPSBMKG4pIC0gQjsKICAgICAgICAgICAgaWYgKHAgPD0gMCB8fCBtIDw9IDApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJvdW5kcyIpOwogICAgICAgICAgICB2YXIgVyA9IGcwKG4pLCBDID0gTyhuKSwgXyA9IG5ldyBVaW50OEFycmF5KHAgKiBtKTsKICAgICAgICAgICAgaWYgKFcgPT09IDgpCiAgICAgICAgICAgICAgaWYgKEMgPT09IDApCiAgICAgICAgICAgICAgICBfLnNldChZMChuLCBfLmJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAgICBlbHNlIGlmIChDID09PSAxKQogICAgICAgICAgICAgICAgc2EobiwgeyB3aWR0aDogcCwgaGVpZ2h0OiBtLCBkYXRhOiBfIH0sIHAsIG0sIFcsIDEsIFswXSwgITEpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb21wcmVzc2lvbiIpOwogICAgICAgICAgICBlbHNlIGlmIChXID09PSAxNikKICAgICAgICAgICAgICBpZiAoQyA9PT0gMCkKICAgICAgICAgICAgICAgIGZvciAodmFyIE4gPSAwOyBOIDwgXy5ieXRlTGVuZ3RoOyBOKyspCiAgICAgICAgICAgICAgICAgIF9bTl0gPSBQKG4pID4+IDg7CiAgICAgICAgICAgICAgZWxzZSB0aHJvdyBDID09PSAxID8gbmV3IEVycm9yKCJub3QgaW1wbGVtZW50ZWQgKDE2Yml0IFJMRSkiKSA6IG5ldyBFcnJvcigiSW52YWxpZCBjb21wcmVzc2lvbiIpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcHRoIik7CiAgICAgICAgICAgIHUucHVzaCh7IGlkOiBnLCBib3VuZHM6IHsgeDogQiwgeTogdywgdzogcCwgaDogbSB9LCBhbHBoYTogXyB9KSwgbi5vZmZzZXQgPSBFOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImRlc2MiOiB7CiAgICAgICAgICBmb3IgKHZhciBEID0gbTAobiwgITApLCBZID0gMCwgZjAgPSBELkJyc2g7IFkgPCBmMC5sZW5ndGg7IFkrKykgewogICAgICAgICAgICB2YXIgRyA9IGYwW1ldLCBKID0gewogICAgICAgICAgICAgIG5hbWU6IEdbIk5tICAiXSwKICAgICAgICAgICAgICBzaGFwZTogUWkoRy5CcnNoKSwKICAgICAgICAgICAgICBzcGFjaW5nOiBBMChHLlNwY24pLAogICAgICAgICAgICAgIC8vIFRPRE86IGJydXNoR3JvdXAgPz8/CiAgICAgICAgICAgICAgd2V0RWRnZXM6IEcuV3RkZywKICAgICAgICAgICAgICBub2lzZTogRy5Ob3NlLAogICAgICAgICAgICAgIC8vIFRPRE86IFR4dEMgPz8/IHNtb290aGluZyAvIGJ1aWxkLXVwID8KICAgICAgICAgICAgICAvLyBUT0RPOiAnUnB0ICcgPz8/CiAgICAgICAgICAgICAgdXNlQnJ1c2hTaXplOiBHLnVzZUJydXNoU2l6ZQogICAgICAgICAgICAgIC8vID8/PwogICAgICAgICAgICB9OwogICAgICAgICAgICBHLmludGVycHJldGF0aW9uICE9IG51bGwgJiYgKEouaW50ZXJwcmV0YXRpb24gPSBHLmludGVycHJldGF0aW9uKSwgRy5wcm90ZWN0VGV4dHVyZSAhPSBudWxsICYmIChKLnByb3RlY3RUZXh0dXJlID0gRy5wcm90ZWN0VGV4dHVyZSksIEcudXNlVGlwRHluYW1pY3MgJiYgKEouc2hhcGVEeW5hbWljcyA9IHsKICAgICAgICAgICAgICB0aWx0U2NhbGU6IEEwKEcudGlsdFNjYWxlKSwKICAgICAgICAgICAgICBzaXplRHluYW1pY3M6IHRyKEcuc3pWciksCiAgICAgICAgICAgICAgYW5nbGVEeW5hbWljczogdHIoRy5hbmdsZUR5bmFtaWNzKSwKICAgICAgICAgICAgICByb3VuZG5lc3NEeW5hbWljczogdHIoRy5yb3VuZG5lc3NEeW5hbWljcyksCiAgICAgICAgICAgICAgZmxpcFg6IEcuZmxpcFgsCiAgICAgICAgICAgICAgZmxpcFk6IEcuZmxpcFksCiAgICAgICAgICAgICAgYnJ1c2hQcm9qZWN0aW9uOiBHLmJydXNoUHJvamVjdGlvbiwKICAgICAgICAgICAgICBtaW5pbXVtRGlhbWV0ZXI6IEEwKEcubWluaW11bURpYW1ldGVyKSwKICAgICAgICAgICAgICBtaW5pbXVtUm91bmRuZXNzOiBBMChHLm1pbmltdW1Sb3VuZG5lc3MpCiAgICAgICAgICAgIH0pLCBHLnVzZVNjYXR0ZXIgJiYgKEouc2NhdHRlciA9IHsKICAgICAgICAgICAgICBjb3VudDogR1siQ250ICJdLAogICAgICAgICAgICAgIGJvdGhBeGVzOiBHLmJvdGhBeGVzLAogICAgICAgICAgICAgIGNvdW50RHluYW1pY3M6IHRyKEcuY291bnREeW5hbWljcyksCiAgICAgICAgICAgICAgc2NhdHRlckR5bmFtaWNzOiB0cihHLnNjYXR0ZXJEeW5hbWljcykKICAgICAgICAgICAgfSksIEcudXNlVGV4dHVyZSAmJiBHLlR4dHIgJiYgKEoudGV4dHVyZSA9IHsKICAgICAgICAgICAgICBpZDogRy5UeHRyLklkbnQsCiAgICAgICAgICAgICAgbmFtZTogRy5UeHRyWyJObSAgIl0sCiAgICAgICAgICAgICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoRy50ZXh0dXJlQmxlbmRNb2RlKSwKICAgICAgICAgICAgICBkZXB0aDogQTAoRy50ZXh0dXJlRGVwdGgpLAogICAgICAgICAgICAgIGRlcHRoTWluaW11bTogQTAoRy5taW5pbXVtRGVwdGgpLAogICAgICAgICAgICAgIGRlcHRoRHluYW1pY3M6IHRyKEcudGV4dHVyZURlcHRoRHluYW1pY3MpLAogICAgICAgICAgICAgIHNjYWxlOiBBMChHLnRleHR1cmVTY2FsZSksCiAgICAgICAgICAgICAgaW52ZXJ0OiBHLkludlQsCiAgICAgICAgICAgICAgYnJpZ2h0bmVzczogRy50ZXh0dXJlQnJpZ2h0bmVzcywKICAgICAgICAgICAgICBjb250cmFzdDogRy50ZXh0dXJlQ29udHJhc3QsCiAgICAgICAgICAgICAgdGV4dHVyZUVhY2hUaXA6ICEhRy5UeHRDCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgSyA9IEcuZHVhbEJydXNoOwogICAgICAgICAgICBLICYmIEsudXNlRHVhbEJydXNoICYmIChKLmR1YWxCcnVzaCA9IHsKICAgICAgICAgICAgICBmbGlwOiBLLkZsaXAsCiAgICAgICAgICAgICAgc2hhcGU6IFFpKEsuQnJzaCksCiAgICAgICAgICAgICAgYmxlbmRNb2RlOiBvci5kZWNvZGUoSy5CbG5NKSwKICAgICAgICAgICAgICB1c2VTY2F0dGVyOiBLLnVzZVNjYXR0ZXIsCiAgICAgICAgICAgICAgc3BhY2luZzogQTAoSy5TcGNuKSwKICAgICAgICAgICAgICBjb3VudDogS1siQ250ICJdLAogICAgICAgICAgICAgIGJvdGhBeGVzOiBLLmJvdGhBeGVzLAogICAgICAgICAgICAgIGNvdW50RHluYW1pY3M6IHRyKEsuY291bnREeW5hbWljcyksCiAgICAgICAgICAgICAgc2NhdHRlckR5bmFtaWNzOiB0cihLLnNjYXR0ZXJEeW5hbWljcykKICAgICAgICAgICAgfSksIEcudXNlQ29sb3JEeW5hbWljcyAmJiAoSi5jb2xvckR5bmFtaWNzID0gewogICAgICAgICAgICAgIGZvcmVncm91bmRCYWNrZ3JvdW5kOiB0cihHLmNsVnIpLAogICAgICAgICAgICAgIGh1ZTogQTAoR1siSCAgICJdKSwKICAgICAgICAgICAgICBzYXR1cmF0aW9uOiBBMChHLlN0cnQpLAogICAgICAgICAgICAgIGJyaWdodG5lc3M6IEEwKEcuQnJnaCksCiAgICAgICAgICAgICAgcHVyaXR5OiBBMChHLnB1cml0eSksCiAgICAgICAgICAgICAgcGVyVGlwOiBHLmNvbG9yRHluYW1pY3NQZXJUaXAKICAgICAgICAgICAgfSksIEcudXNlUGFpbnREeW5hbWljcyAmJiAoSi50cmFuc2ZlciA9IHsKICAgICAgICAgICAgICBmbG93RHluYW1pY3M6IHRyKEcucHJWciksCiAgICAgICAgICAgICAgb3BhY2l0eUR5bmFtaWNzOiB0cihHLm9wVnIpLAogICAgICAgICAgICAgIHdldG5lc3NEeW5hbWljczogdHIoRy53dFZyKSwKICAgICAgICAgICAgICBtaXhEeW5hbWljczogdHIoRy5teFZyKQogICAgICAgICAgICB9KSwgRy51c2VCcnVzaFBvc2UgJiYgKEouYnJ1c2hQb3NlID0gewogICAgICAgICAgICAgIG92ZXJyaWRlQW5nbGU6IEcub3ZlcnJpZGVQb3NlQW5nbGUsCiAgICAgICAgICAgICAgb3ZlcnJpZGVUaWx0WDogRy5vdmVycmlkZVBvc2VUaWx0WCwKICAgICAgICAgICAgICBvdmVycmlkZVRpbHRZOiBHLm92ZXJyaWRlUG9zZVRpbHRZLAogICAgICAgICAgICAgIG92ZXJyaWRlUHJlc3N1cmU6IEcub3ZlcnJpZGVQb3NlUHJlc3N1cmUsCiAgICAgICAgICAgICAgcHJlc3N1cmU6IEEwKEcuYnJ1c2hQb3NlUHJlc3N1cmUpLAogICAgICAgICAgICAgIHRpbHRYOiBHLmJydXNoUG9zZVRpbHRYLAogICAgICAgICAgICAgIHRpbHRZOiBHLmJydXNoUG9zZVRpbHRZLAogICAgICAgICAgICAgIGFuZ2xlOiBHLmJydXNoUG9zZUFuZ2xlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgWCA9IEcudG9vbE9wdGlvbnM7CiAgICAgICAgICAgIFggJiYgKEoudG9vbE9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgdHlwZTogSjRbWC5fY2xhc3NJRF0gfHwgImJydXNoIiwKICAgICAgICAgICAgICBicnVzaFByZXNldDogWC5icnVzaFByZXNldCwKICAgICAgICAgICAgICBmbG93OiAoYSA9IFguZmxvdykgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEwMCwKICAgICAgICAgICAgICBzbW9vdGg6IChBID0gWC5TbW9vKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogMCwKICAgICAgICAgICAgICBtb2RlOiBvci5kZWNvZGUoWFsiTWQgICJdIHx8ICJCbG5NLk5ybWwiKSwKICAgICAgICAgICAgICBvcGFjaXR5OiAodCA9IFguT3BjdCkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IDEwMCwKICAgICAgICAgICAgICBzbW9vdGhpbmc6ICEhWC5zbW9vdGhpbmcsCiAgICAgICAgICAgICAgc21vb3RoaW5nVmFsdWU6IFguc21vb3RoaW5nVmFsdWUgfHwgMCwKICAgICAgICAgICAgICBzbW9vdGhpbmdSYWRpdXNNb2RlOiAhIVguc21vb3RoaW5nUmFkaXVzTW9kZSwKICAgICAgICAgICAgICBzbW9vdGhpbmdDYXRjaHVwOiAhIVguc21vb3RoaW5nQ2F0Y2h1cCwKICAgICAgICAgICAgICBzbW9vdGhpbmdDYXRjaHVwQXRFbmQ6ICEhWC5zbW9vdGhpbmdDYXRjaHVwQXRFbmQsCiAgICAgICAgICAgICAgc21vb3RoaW5nWm9vbUNvbXBlbnNhdGlvbjogISFYLnNtb290aGluZ1pvb21Db21wZW5zYXRpb24sCiAgICAgICAgICAgICAgcHJlc3N1cmVTbW9vdGhpbmc6ICEhWC5wcmVzc3VyZVNtb290aGluZywKICAgICAgICAgICAgICB1c2VQcmVzc3VyZU92ZXJyaWRlc1NpemU6ICEhWC51c2VQcmVzc3VyZU92ZXJyaWRlc1NpemUsCiAgICAgICAgICAgICAgdXNlUHJlc3N1cmVPdmVycmlkZXNPcGFjaXR5OiAhIVgudXNlUHJlc3N1cmVPdmVycmlkZXNPcGFjaXR5LAogICAgICAgICAgICAgIHVzZUxlZ2FjeTogISFYLnVzZUxlZ2FjeQogICAgICAgICAgICB9LCBYLnByVnIgJiYgKEoudG9vbE9wdGlvbnMuZmxvd0R5bmFtaWNzID0gdHIoWC5wclZyKSksIFgub3BWciAmJiAoSi50b29sT3B0aW9ucy5vcGFjaXR5RHluYW1pY3MgPSB0cihYLm9wVnIpKSwgWC5zelZyICYmIChKLnRvb2xPcHRpb25zLnNpemVEeW5hbWljcyA9IHRyKFguc3pWcikpLCAid2V0bmVzcyIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy53ZXRuZXNzID0gWC53ZXRuZXNzKSwgImRyeW5lc3MiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuZHJ5bmVzcyA9IFguZHJ5bmVzcyksICJtaXgiIGluIFggJiYgKEoudG9vbE9wdGlvbnMubWl4ID0gWC5taXgpLCAiYXV0b0ZpbGwiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuYXV0b0ZpbGwgPSBYLmF1dG9GaWxsKSwgImF1dG9DbGVhbiIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5hdXRvQ2xlYW4gPSBYLmF1dG9DbGVhbiksICJsb2FkU29saWRDb2xvck9ubHkiIGluIFggJiYgKEoudG9vbE9wdGlvbnMubG9hZFNvbGlkQ29sb3JPbmx5ID0gWC5sb2FkU29saWRDb2xvck9ubHkpLCAic2FtcGxlQWxsTGF5ZXJzIiBpbiBYICYmIChKLnRvb2xPcHRpb25zLnNhbXBsZUFsbExheWVycyA9IFguc2FtcGxlQWxsTGF5ZXJzKSwgIlNtZEYiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuc211ZGdlRmluZ2VyUGFpbnRpbmcgPSBYLlNtZEYpLCAiU21kUyIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5zbXVkZ2VTYW1wbGVBbGxMYXllcnMgPSBYLlNtZFMpLCAiUHJzICIgaW4gWCAmJiAoSi50b29sT3B0aW9ucy5zdHJlbmd0aCA9IFhbIlBycyAiXSksICJTbWRGIiBpbiBYICYmIChKLnRvb2xPcHRpb25zLnNtdWRnZUZpbmdlclBhaW50aW5nID0gWC5TbWRGKSwgIlNtZFMiIGluIFggJiYgKEoudG9vbE9wdGlvbnMuc211ZGdlU2FtcGxlQWxsTGF5ZXJzID0gWC5TbWRTKSksIG8ucHVzaChKKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJwYXR0IjogewogICAgICAgICAgZm9yICg7IG4ub2Zmc2V0IDwgdjsgKQogICAgICAgICAgICBsLnB1c2goaTQobikpOwogICAgICAgICAgbi5vZmZzZXQgPSB2OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInBocnkiOiB7CiAgICAgICAgICB2YXIgRCA9IG0wKG4pOwogICAgICAgICAgZS5sb2dNaXNzaW5nRmVhdHVyZXMgJiYgISgoaSA9IEQuaGllcmFyY2h5KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDApICYmIGkubGVuZ3RoOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnJ1c2ggdHlwZTogIi5jb25jYXQoYykpOwogICAgICB9CiAgICAgIGZvciAoOyBkICUgNDsgKQogICAgICAgIG4ub2Zmc2V0KyssIGQrKzsKICAgIH0KICB9IGVsc2UKICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQUJSIHZlcnNpb24gKCIuY29uY2F0KGYsICIpIikpOwogIHJldHVybiB7IHNhbXBsZXM6IHUsIHBhdHRlcm5zOiBsLCBicnVzaGVzOiBvIH07Cn0KdmFyIENBID0gZnVuY3Rpb24oKSB7CiAgcmV0dXJuIENBID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7CiAgICBmb3IgKHZhciBlLCBhID0gMSwgQSA9IGFyZ3VtZW50cy5sZW5ndGg7IGEgPCBBOyBhKyspIHsKICAgICAgZSA9IGFyZ3VtZW50c1thXTsKICAgICAgZm9yICh2YXIgdCBpbiBlKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdCkgJiYgKHJbdF0gPSBlW3RdKTsKICAgIH0KICAgIHJldHVybiByOwogIH0sIENBLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmZ1bmN0aW9uIEw0KHIpIHsKICB2YXIgZSA9IEthKHIuYnVmZmVyLCByLmJ5dGVPZmZzZXQsIHIuYnl0ZUxlbmd0aCksIGEgPSB7IHNoYXBlczogW10gfTsKICBpZiAoSnIoZSwgImN1c2giKSwgUyhlKSAhPT0gMikKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2ZXJzaW9uIik7CiAgZm9yICh2YXIgQSA9IFMoZSksIHQgPSAwOyB0IDwgQTsgdCsrKSB7CiAgICBmb3IgKHZhciBpID0gejAoZSk7IGUub2Zmc2V0ICUgNDsgKQogICAgICBlLm9mZnNldCsrOwogICAgaWYgKFMoZSkgIT09IDEpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaGFwZSB2ZXJzaW9uIik7CiAgICB2YXIgbiA9IFMoZSksIGYgPSBlLm9mZnNldCArIG4sIHUgPSB4cihlLCAxKSwgbyA9IFMoZSksIGwgPSBTKGUpLCBzID0gUyhlKSwgYyA9IFMoZSksIGQgPSBjIC0gbCwgdiA9IHMgLSBvLCBrID0geyBwYXRoczogW10gfTsKICAgIHJmKGUsIGssIGQsIHYsIGYgLSBlLm9mZnNldCksIGEuc2hhcGVzLnB1c2goQ0EoeyBuYW1lOiBpLCBpZDogdSwgd2lkdGg6IGQsIGhlaWdodDogdiB9LCBrKSksIGUub2Zmc2V0ID0gZjsKICB9CiAgcmV0dXJuIGE7Cn0KdmFyIFdBOwooZnVuY3Rpb24ocikgewogIHJbci5CaXRtYXAgPSAwXSA9ICJCaXRtYXAiLCByW3IuR3JheXNjYWxlID0gMV0gPSAiR3JheXNjYWxlIiwgcltyLkluZGV4ZWQgPSAyXSA9ICJJbmRleGVkIiwgcltyLlJHQiA9IDNdID0gIlJHQiIsIHJbci5DTVlLID0gNF0gPSAiQ01ZSyIsIHJbci5NdWx0aWNoYW5uZWwgPSA3XSA9ICJNdWx0aWNoYW5uZWwiLCByW3IuRHVvdG9uZSA9IDhdID0gIkR1b3RvbmUiLCByW3IuTGFiID0gOV0gPSAiTGFiIjsKfSkoV0EgfHwgKFdBID0ge30pKTsKdmFyIF9BOwooZnVuY3Rpb24ocikgewogIHJbci5PdGhlciA9IDBdID0gIk90aGVyIiwgcltyLk9wZW5Gb2xkZXIgPSAxXSA9ICJPcGVuRm9sZGVyIiwgcltyLkNsb3NlZEZvbGRlciA9IDJdID0gIkNsb3NlZEZvbGRlciIsIHJbci5Cb3VuZGluZ1NlY3Rpb25EaXZpZGVyID0gM10gPSAiQm91bmRpbmdTZWN0aW9uRGl2aWRlciI7Cn0pKF9BIHx8IChfQSA9IHt9KSk7CnZhciBHQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuTm9uZSA9IDBdID0gIk5vbmUiLCByW3IuVmlzaWJpbGl0eSA9IDFdID0gIlZpc2liaWxpdHkiLCByW3IuUG9zaXRpb24gPSAyXSA9ICJQb3NpdGlvbiIsIHJbci5BcHBlYXJhbmNlID0gNF0gPSAiQXBwZWFyYW5jZSI7Cn0pKEdBIHx8IChHQSA9IHt9KSk7CnZhciBYQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuQ29sb3IwID0gMF0gPSAiQ29sb3IwIiwgcltyLkNvbG9yMSA9IDFdID0gIkNvbG9yMSIsIHJbci5Db2xvcjIgPSAyXSA9ICJDb2xvcjIiLCByW3IuQ29sb3IzID0gM10gPSAiQ29sb3IzIiwgcltyLlRyYW5zcGFyZW5jeSA9IC0xXSA9ICJUcmFuc3BhcmVuY3kiLCByW3IuVXNlck1hc2sgPSAtMl0gPSAiVXNlck1hc2siLCByW3IuUmVhbFVzZXJNYXNrID0gLTNdID0gIlJlYWxVc2VyTWFzayI7Cn0pKFhBIHx8IChYQSA9IHt9KSk7CnZhciBSQTsKKGZ1bmN0aW9uKHIpIHsKICByW3IuUmF3RGF0YSA9IDBdID0gIlJhd0RhdGEiLCByW3IuUmxlQ29tcHJlc3NlZCA9IDFdID0gIlJsZUNvbXByZXNzZWQiLCByW3IuWmlwV2l0aG91dFByZWRpY3Rpb24gPSAyXSA9ICJaaXBXaXRob3V0UHJlZGljdGlvbiIsIHJbci5aaXBXaXRoUHJlZGljdGlvbiA9IDNdID0gIlppcFdpdGhQcmVkaWN0aW9uIjsKfSkoUkEgfHwgKFJBID0ge30pKTsKdmFyIEs0ID0geG47CmZ1bmN0aW9uIHE0KHIsIGUpIHsKICB2YXIgYSA9ICJidWZmZXIiIGluIHIgPyBLYShyLmJ1ZmZlciwgci5ieXRlT2Zmc2V0LCByLmJ5dGVMZW5ndGgpIDogS2Eocik7CiAgcmV0dXJuIEhsKGEsIGUpOwp9CmZ1bmN0aW9uICQ0KHIsIGUpIHsKICB2YXIgYSA9IG5mKCk7CiAgcmV0dXJuIHVmKGEsIHIsIGUpLCBXNChhKTsKfQpmdW5jdGlvbiBiZihyLCBlKSB7CiAgdmFyIGEgPSBuZigpOwogIHJldHVybiB1ZihhLCByLCBlKSwgXzQoYSk7Cn0KZnVuY3Rpb24gcmMociwgZSkgewogIGlmICh0eXBlb2YgQnVmZmVyID4gInUiKQogICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJmKHIsIGUpKTsKfQpmdW5jdGlvbiBhYyhyLCBlKSB7CiAgTjEociwgZSk7Cn0KdmFyIEppID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoewogIF9fcHJvdG9fXzogbnVsbCwKICBnZXQgQ2hhbm5lbElEKCkgewogICAgcmV0dXJuIFhBOwogIH0sCiAgZ2V0IENvbG9yTW9kZSgpIHsKICAgIHJldHVybiBXQTsKICB9LAogIGdldCBDb21wcmVzc2lvbigpIHsKICAgIHJldHVybiBSQTsKICB9LAogIGdldCBMYXllckNvbXBDYXB0dXJlZEluZm8oKSB7CiAgICByZXR1cm4gR0E7CiAgfSwKICBnZXQgU2VjdGlvbkRpdmlkZXJUeXBlKCkgewogICAgcmV0dXJuIF9BOwogIH0sCiAgYnl0ZUFycmF5VG9CYXNlNjQ6IEs0LAogIGRlY29kZUxheWVyUGl4ZWxzOiBhYywKICBpbml0aWFsaXplQ2FudmFzOiBtbCwKICByZWFkQWJyOiB6NCwKICByZWFkQ3NoOiBMNCwKICByZWFkUHNkOiBxNCwKICB3cml0ZVBzZDogJDQsCiAgd3JpdGVQc2RCdWZmZXI6IHJjLAogIHdyaXRlUHNkVWludDhBcnJheTogYmYKfSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWltYWdlRGVjb2Rlci53b3JrZXItRG93dTJCTHkuanMubWFwCg==\", HM = (I) => Uint8Array.from(atob(I), (M) => M.charCodeAt(0)), V = typeof self < \"u\" && self.Blob && new Blob([\"URL.revokeObjectURL(import.meta.url);\", HM(O)], { type: \"text/javascript;charset=utf-8\" });\nfunction mM(I) {\n  let M;\n  try {\n    if (M = V && (self.URL || self.webkitURL).createObjectURL(V), !M) throw \"\";\n    const K = new Worker(M, {\n      type: \"module\",\n      name: I == null ? void 0 : I.name\n    });\n    return K.addEventListener(\"error\", () => {\n      (self.URL || self.webkitURL).revokeObjectURL(M);\n    }), K;\n  } catch {\n    return new Worker(\n      \"data:text/javascript;base64,\" + O,\n      {\n        type: \"module\",\n        name: I == null ? void 0 : I.name\n      }\n    );\n  }\n}\nconst kM = /* @__PURE__ */ new Set([\n  \"image/heic\",\n  \"image/heif\",\n  \"image/x-canon-cr2\",\n  \"image/x-nikon-nef\",\n  \"image/x-sony-arw\",\n  \"image/x-adobe-dng\",\n  \"image/x-fuji-raf\",\n  \"image/x-olympus-orf\",\n  \"image/vnd.adobe.photoshop\"\n]);\nfunction jI(I) {\n  return kM.has(I);\n}\nasync function XI(I, M, K) {\n  return new Promise((P, w) => {\n    let g;\n    try {\n      g = new mM();\n    } catch (T) {\n      w(new Error(`无法创建 Worker: ${(T == null ? void 0 : T.message) || \"未知错误\"}`));\n      return;\n    }\n    const C = Math.random().toString(36).slice(2), y = (T) => {\n      const X = T.data;\n      if (X.id === C)\n        if (X.success) {\n          const S = new Blob([X.data], { type: X.mimeType });\n          s(), P(S);\n        } else\n          s(), w(new Error(X.error || \"解码失败\"));\n    }, l = (T) => {\n      s(), w(new Error(`Worker 崩溃: ${T.message || \"设备内存不足\"}`));\n    }, s = () => {\n      g.removeEventListener(\"message\", y), g.removeEventListener(\"error\", l), g.terminate();\n    };\n    g.addEventListener(\"message\", y), g.addEventListener(\"error\", l), g.postMessage(\n      { id: C, mimeType: I, buffer: M, options: K },\n      [M]\n    );\n  });\n}\nexport {\n  pM as EXTENSION_TO_MIME,\n  LM as SUPPORTED_FILE_TYPES,\n  _M as buildZipTree,\n  p as builtInMessages,\n  PI as configurePdfWorker,\n  KI as convertCsvToSpreadsheetData,\n  II as convertWorkbookToSpreadsheetData,\n  OM as createFetcher,\n  CI as createTranslator,\n  XI as decodeInWorker,\n  a as decodeText,\n  v as decodeUtf8,\n  SI as detectImageFormat,\n  uM as downloadFileWithFetcher,\n  nM as fetchAsBlobUrl,\n  RM as fetchTextUtf8,\n  tM as formatFileSize,\n  rM as formatSubtitleTime,\n  fM as formatTime,\n  u as getFileNameFromUrl,\n  UM as getFileType,\n  zM as getLanguageFromFileName,\n  lI as getLoader,\n  TI as getLoaderForMimeType,\n  JM as getMimeTypeFromExtension,\n  iM as getMimeTypeFromFileName,\n  wI as getPdfDocumentOptions,\n  NM as getVideoMimeType,\n  VM as guessCsvDelimiter,\n  sI as hasLoader,\n  J as inferMimeType,\n  dM as installUint8ArrayHexBase64Polyfill,\n  hM as isAdvancedImageFormat,\n  gI as isRawFormat,\n  qM as listZipEntries,\n  eM as loadZip,\n  r as normalizeFile,\n  QM as normalizeFiles,\n  aM as parseCsv,\n  vM as parseSubtitle,\n  MI as readZipEntryBlob,\n  $M as readZipEntryText,\n  yI as registerLoader,\n  EM as resolveShowClose,\n  jI as shouldUseWorker\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { createContext, useContext, useMemo } from 'react';\nimport {\n  createTranslator,\n  type Locale,\n  type Messages,\n  type Translator,\n} from '@eternalheart/file-preview-core';\n\nexport interface LocaleContextValue {\n  locale: Locale;\n  t: Translator;\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nexport interface LocaleProviderProps {\n  /** 当前语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义字典，浅合并到内置字典之上 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  children: React.ReactNode;\n}\n\nexport const LocaleProvider: React.FC<LocaleProviderProps> = ({\n  locale = 'zh-CN',\n  messages,\n  children,\n}) => {\n  const value = useMemo<LocaleContextValue>(() => {\n    const t = createTranslator({ locale, messages });\n    return { locale, t };\n  }, [locale, messages]);\n\n  return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\n/**\n * 兜底 translator（当组件被脱离 LocaleProvider 直接使用时）\n * 保持模块级单例，避免每次调用重建\n */\nlet fallbackTranslator: Translator | null = null;\nfunction getFallbackTranslator(): Translator {\n  if (!fallbackTranslator) {\n    fallbackTranslator = createTranslator({ locale: 'zh-CN' });\n  }\n  return fallbackTranslator;\n}\n\n/**\n * 获取翻译函数。任意位置调用都安全：\n * - 在 LocaleProvider 下 → 用 provider 提供的 translator\n * - 否则 → 回落到 zh-CN 兜底 translator\n */\nexport function useTranslator(): Translator {\n  const ctx = useContext(LocaleContext);\n  return ctx?.t ?? getFallbackTranslator();\n}\n\n/**\n * 获取当前 locale。在 Provider 之外返回 'zh-CN'。\n */\nexport function useLocale(): Locale {\n  const ctx = useContext(LocaleContext);\n  return ctx?.locale ?? 'zh-CN';\n}\n","import React, { createContext, useContext } from 'react';\n\n/** 已解析的主题（auto 在 FilePreviewContent 里被解析过） */\nexport type ResolvedTheme = 'dark' | 'light';\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport interface ThemeProviderProps {\n  theme: ResolvedTheme;\n  children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n  return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;\n};\n\n/**\n * 获取已解析的主题（'dark' | 'light'）。\n * Provider 之外默认 'dark'（保持组件历史默认行为）。\n *\n * renderer 需要切第三方库的 theme prop（如 react-syntax-highlighter 的 style、\n * shiki 的 theme 选项）时使用；不要用它做 className 分支 —— class 由 CSS 变量\n * 通过根容器 [data-theme] 自动切换。\n */\nexport function useResolvedTheme(): ResolvedTheme {\n  return useContext(ThemeContext) ?? 'dark';\n}\n","import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n  Fetcher,\n  PreviewFile,\n  RequestHandler,\n  RequestInitFactory,\n  ShouldFetchAsBlob,\n} from '@eternalheart/file-preview-core';\nimport { createFetcher, fetchAsBlobUrl } from '@eternalheart/file-preview-core';\n\nexport interface RequestContextValue {\n  fetcher: Fetcher;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n}\n\nconst defaultValue: RequestContextValue = {\n  fetcher: (url, init) => fetch(url, init),\n};\n\nconst RequestContext = createContext<RequestContextValue>(defaultValue);\n\nexport interface RequestProviderProps {\n  requestInit?: RequestInitFactory;\n  requestHandler?: RequestHandler;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  children: React.ReactNode;\n}\n\nexport const RequestProvider: React.FC<RequestProviderProps> = ({\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  children,\n}) => {\n  const value = useMemo<RequestContextValue>(\n    () => ({\n      fetcher: createFetcher({ requestInit, requestHandler }),\n      shouldFetchAsBlob,\n    }),\n    [requestInit, requestHandler, shouldFetchAsBlob],\n  );\n  return (\n    <RequestContext.Provider value={value}>{children}</RequestContext.Provider>\n  );\n};\n\nexport function useRequest(): RequestContextValue {\n  return useContext(RequestContext);\n}\n\nexport function useFetcher(): Fetcher {\n  return useContext(RequestContext).fetcher;\n}\n\n/**\n * 解析 file 的可消费 URL：\n * - 未配置 shouldFetchAsBlob 或返回 false：同步返回 file.url（不入 state，避免切换文件时残留旧值）\n * - 返回 true：用 fetcher 拉成 blob: URL，组件卸载或 file 变化时 revoke\n *\n * 期间返回空字符串（表示 \"还没准备好\"），调用方应避免空 URL 时挂载到 <img src> 等。\n */\nexport function useResolvedUrl(file: PreviewFile | undefined): string {\n  const { fetcher, shouldFetchAsBlob } = useContext(RequestContext);\n  const needBlob = !!(file && shouldFetchAsBlob?.(file));\n  // 仅在需要预取 blob 时才使用 state；其他场景下方法返回值由 file.url 派生，避免 state 跨文件切换时残留\n  const [blobUrl, setBlobUrl] = useState<string>('');\n  const createdRef = useRef<string | null>(null);\n\n  useEffect(() => {\n    if (!file || !needBlob) {\n      // 离开 blob 模式：清掉上次缓存的 blob URL\n      if (createdRef.current) {\n        URL.revokeObjectURL(createdRef.current);\n        createdRef.current = null;\n      }\n      setBlobUrl('');\n      return;\n    }\n    let cancelled = false;\n    setBlobUrl('');\n    fetchAsBlobUrl(file.url, fetcher)\n      .then((next) => {\n        if (cancelled) {\n          URL.revokeObjectURL(next);\n          return;\n        }\n        if (createdRef.current) {\n          URL.revokeObjectURL(createdRef.current);\n        }\n        createdRef.current = next;\n        setBlobUrl(next);\n      })\n      .catch((err) => {\n        if (!cancelled) {\n          console.error('[file-preview] resolve blob url failed:', err);\n          setBlobUrl(file.url);\n        }\n      });\n    return () => {\n      cancelled = true;\n    };\n  }, [file?.id, file?.url, needBlob, fetcher]);\n\n  // 卸载时 revoke 最后一次创建的 blob URL\n  useEffect(() => {\n    return () => {\n      if (createdRef.current) {\n        URL.revokeObjectURL(createdRef.current);\n        createdRef.current = null;\n      }\n    };\n  }, []);\n\n  if (!file) return '';\n  if (!needBlob) return file.url;\n  return blobUrl;\n}\n","import { FileQuestion, Download } from 'lucide-react';\nimport { useTranslator } from '../../i18n/LocaleContext';\n\ninterface UnsupportedRendererProps {\n  fileName: string;\n  fileType: string;\n  onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n  fileName,\n  fileType,\n  onDownload,\n}) => {\n  const t = useTranslator();\n  return (\n    <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-6 rfp-gap-4\">\n      <div className=\"rfp-w-20 rfp-h-20 rfp-rounded-full rfp-bg-surface-2 rfp-flex rfp-items-center rfp-justify-center\">\n        <FileQuestion className=\"rfp-w-10 rfp-h-10 rfp-text-fg-secondary\" />\n      </div>\n\n      <div className=\"rfp-text-fg-primary rfp-text-center\">\n        <p className=\"rfp-text-lg rfp-font-medium rfp-mb-2\">{fileName}</p>\n        <p className=\"rfp-text-fg-secondary\">{t('common.unsupported_preview', { type: fileType })}</p>\n      </div>\n\n      <button\n        onClick={onDownload}\n        className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-fg-primary rfp-font-medium rfp-transition-all\"\n      >\n        <Download className=\"rfp-w-5 rfp-h-5\" />\n        {t('common.download')}\n      </button>\n    </div>\n  );\n};\n","import { useEffect, useRef } from 'react';\n\nexport interface UseKeyboardNavigationParams {\n  mode: 'modal' | 'embed';\n  currentIndex: number;\n  totalFiles: number;\n  onNavigate?: (index: number) => void;\n  onClose?: () => void;\n  rootRef?: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * 键盘导航 hook\n * - modal 模式：监听 window 的 keydown 事件\n * - embed 模式：仅监听根容器的 keydown 事件（需要容器获得焦点）\n */\nexport function useKeyboardNavigation({\n  mode,\n  currentIndex,\n  totalFiles,\n  onNavigate,\n  onClose,\n  rootRef,\n}: UseKeyboardNavigationParams): void {\n  const handlersRef = useRef({ onNavigate, onClose });\n\n  useEffect(() => {\n    handlersRef.current = { onNavigate, onClose };\n  }, [onNavigate, onClose]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const { onNavigate, onClose } = handlersRef.current;\n\n      if (e.key === 'Escape' && mode === 'modal') {\n        onClose?.();\n      } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n        onNavigate?.(currentIndex - 1);\n      } else if (e.key === 'ArrowRight' && currentIndex < totalFiles - 1) {\n        onNavigate?.(currentIndex + 1);\n      }\n    };\n\n    if (mode === 'modal') {\n      window.addEventListener('keydown', handleKeyDown);\n      return () => window.removeEventListener('keydown', handleKeyDown);\n    } else {\n      const el = rootRef?.current;\n      if (!el) return;\n      el.addEventListener('keydown', handleKeyDown as EventListener);\n      return () => el.removeEventListener('keydown', handleKeyDown as EventListener);\n    }\n  }, [mode, currentIndex, totalFiles, rootRef]);\n}\n","import { useState, useEffect } from 'react';\nimport type { Theme } from '@eternalheart/file-preview-core';\n\n/**\n * 主题模式 hook\n * 处理 auto 主题时的系统偏好监听\n */\nexport function useThemeMode(theme: Theme): 'light' | 'dark' {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  return theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n}\n","import React from 'react';\n\nexport interface ToolbarButtonProps {\n  icon: React.ReactNode;\n  label: string;\n  onClick: () => void;\n  disabled?: boolean;\n  /** 激活状态：true 时按钮显示高亮样式 */\n  active?: boolean;\n  ariaKeyshortcuts?: string;\n}\n\n/**\n * 工具栏按钮组件\n * 支持 tooltip、disabled 状态、active 高亮和 aria 属性\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n  icon,\n  label,\n  onClick,\n  disabled,\n  active,\n  ariaKeyshortcuts,\n}) => {\n  let stateClass: string;\n  if (disabled) {\n    stateClass = 'rfp-text-fg-disabled rfp-cursor-not-allowed';\n  } else if (active) {\n    stateClass = 'rfp-text-fg-primary rfp-bg-surface-3 hover:rfp-bg-surface-3 active:rfp-bg-surface-3';\n  } else {\n    stateClass = 'rfp-text-fg-primary hover:rfp-bg-surface-2 active:rfp-bg-surface-3';\n  }\n\n  return (\n    <button\n      onClick={onClick}\n      disabled={disabled}\n      aria-label={label}\n      aria-pressed={active}\n      aria-keyshortcuts={ariaKeyshortcuts}\n      aria-disabled={disabled}\n      className={`rfp-relative rfp-group rfp-p-2 md:rfp-p-1.5 rfp-rounded-md rfp-transition-all rfp-select-none ${stateClass}`}\n    >\n      {icon}\n      <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 rfp-top-full rfp-mt-1.5 rfp-px-2 rfp-py-1 rfp-text-xs rfp-rounded rfp-whitespace-nowrap rfp-pointer-events-none rfp-opacity-0 rfp-invisible group-hover:rfp-opacity-100 group-hover:rfp-visible rfp-transition-opacity rfp-duration-200 rfp-z-50 rfp-bg-fg-primary rfp-text-fg-inverse max-[1023px]:!rfp-hidden\">\n        <span className=\"rfp-absolute rfp-left-1/2 -rfp-translate-x-1/2 -rfp-top-1 rfp-w-2 rfp-h-2 rfp-rotate-45 rfp-bg-fg-primary\" />\n        <span className=\"rfp-relative\">{label}</span>\n      </span>\n    </button>\n  );\n};\n","import React from 'react';\nimport type { ToolbarGroup } from '../renderers/toolbar.types';\nimport { ToolbarButton } from '../components/preview/ToolbarButton';\n\n/**\n * 渲染工具栏组项（按钮 + 文本 + 分隔线）\n * 提取到模块顶层，避免每次组件渲染时重新创建\n */\nexport function renderToolbarItems(\n  groups: ToolbarGroup[],\n  dividerClass: string\n): React.ReactNode {\n  return groups.map((group, gi, arr) => (\n    <React.Fragment key={gi}>\n      {group.items.map((item, ii) =>\n        item.type === 'button' ? (\n          <ToolbarButton\n            key={`${gi}-${ii}`}\n            icon={item.icon}\n            label={item.tooltip}\n            onClick={item.action}\n            disabled={item.disabled}\n            active={item.active}\n            ariaKeyshortcuts={item.ariaKeyshortcuts}\n          />\n        ) : (\n          <span\n            key={`${gi}-${ii}`}\n            className=\"rfp-text-xs rfp-text-center rfp-font-medium rfp-tabular-nums rfp-text-fg-tertiary\"\n            style={{ minWidth: item.minWidth || 'auto' }}\n          >\n            {item.content}\n          </span>\n        )\n      )}\n      {gi < arr.length - 1 && <div className={`rfp-w-px rfp-h-4 rfp-bg-divide ${dividerClass}`} />}\n    </React.Fragment>\n  ));\n}\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Download, X } from 'lucide-react';\nimport type { ToolbarGroup } from '../../renderers/toolbar.types';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport { renderToolbarItems } from '../../toolbar/renderItems';\n\nexport interface FilePreviewToolbarProps {\n  fileName: string;\n  currentIndex: number;\n  totalFiles: number;\n  toolGroups: ToolbarGroup[];\n  t: Translator;\n  onDownload: () => void;\n  onClose?: () => void;\n  showClose: boolean;\n  showDownload: boolean;\n}\n\n/**\n * 文件预览顶部工具栏组件\n * - 桌面端：单行显示所有按钮\n * - 移动端：第一行显示文件名 + 下载/关闭，第二行显示工具按钮\n */\nexport const FilePreviewToolbar: React.FC<FilePreviewToolbarProps> = ({\n  fileName,\n  currentIndex,\n  totalFiles,\n  toolGroups,\n  t,\n  onDownload,\n  onClose,\n  showClose,\n  showDownload,\n}) => {\n  const showCloseButton = showClose;\n\n  // 操作组：下载、关闭（通用，不属于任何 Renderer）\n  const actionGroups: ToolbarGroup[] = [\n    ...(showDownload\n      ? [\n          {\n            items: [\n              {\n                type: 'button' as const,\n                icon: <Download className=\"rfp-w-4 rfp-h-4\" />,\n                tooltip: t('accessibility.downloadFile'),\n                action: onDownload,\n              },\n            ],\n          },\n        ]\n      : []),\n    ...(showCloseButton\n      ? [\n          {\n            items: [\n              {\n                type: 'button' as const,\n                icon: <X className=\"rfp-w-4 rfp-h-4\" />,\n                tooltip: t('accessibility.closePreview'),\n                action: onClose!,\n                ariaKeyshortcuts: 'Escape',\n              },\n            ],\n          },\n        ]\n      : []),\n  ];\n\n  return (\n    <motion.div\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      className=\"rfp-flex-shrink-0 rfp-z-10 rfp-backdrop-blur-md rfp-border-b rfp-bg-surface-toolbar rfp-border-line\"\n      style={{ paddingTop: 'env(safe-area-inset-top, 0px)' }}\n    >\n      {/* 第一行：文件名 + 分页 + 关闭/下载（移动端右侧）/全部按钮（桌面端） */}\n      <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-3 md:rfp-px-5 rfp-py-1.5 md:rfp-py-2.5\">\n        {/* 左侧：文件名 + 分页 */}\n        <div className=\"rfp-flex rfp-items-center rfp-flex-1 rfp-min-w-0 rfp-mr-2 md:rfp-mr-3\">\n          <h2 className=\"rfp-font-medium rfp-text-xs md:rfp-text-sm rfp-truncate rfp-text-fg-primary\">\n            {fileName}\n          </h2>\n          <span\n            className=\"rfp-text-xs rfp-ml-2 rfp-flex-shrink-0 rfp-text-fg-muted\"\n            aria-live=\"polite\"\n            aria-atomic=\"true\"\n          >\n            {currentIndex + 1}/{totalFiles}\n          </span>\n        </div>\n\n        {/* 移动端：仅显示下载 + 关闭 */}\n        <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-hidden rfp-flex-shrink-0\">\n          {renderToolbarItems(actionGroups, 'rfp-mx-0.5')}\n        </div>\n\n        {/* 桌面端：所有工具按钮 */}\n        <div className=\"rfp-hidden md:rfp-flex rfp-items-center rfp-gap-1 rfp-flex-shrink-0\">\n          {renderToolbarItems(toolGroups, 'rfp-mx-1')}\n          {toolGroups.length > 0 && actionGroups.length > 0 && (\n            <div className=\"rfp-w-px rfp-h-4 rfp-mx-1 rfp-bg-divide\" />\n          )}\n          {renderToolbarItems(actionGroups, 'rfp-mx-1')}\n        </div>\n      </div>\n\n      {/* 第二行：移动端工具按钮 */}\n      {toolGroups.length > 0 && (\n        <div className=\"rfp-flex rfp-items-center rfp-gap-1 rfp-px-3 rfp-pb-1.5 rfp-overflow-x-auto scrollbar-hide md:rfp-hidden\">\n          {renderToolbarItems(toolGroups, 'rfp-mx-0.5')}\n        </div>\n      )}\n    </motion.div>\n  );\n};\n","import React from 'react';\nimport { AlertCircle, Download, RotateCw } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface RendererErrorProps {\n  error: Error;\n  fileName: string;\n  t: Translator;\n  onRetry: () => void;\n  onDownload: () => void;\n}\n\n/**\n * 渲染器错误 UI 组件\n * 显示错误信息、文件名、重试和下载按钮\n */\nexport const RendererError: React.FC<RendererErrorProps> = ({\n  error,\n  fileName,\n  t,\n  onRetry,\n  onDownload,\n}) => {\n  return (\n    <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-h-full rfp-px-4 rfp-text-fg-primary\">\n      <AlertCircle className=\"rfp-w-16 rfp-h-16 rfp-mb-4 rfp-text-error\" />\n      <h3 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2\">\n        {t('common.unknown_error')}\n      </h3>\n      <p className=\"rfp-text-sm rfp-text-fg-secondary rfp-mb-1 rfp-max-w-md rfp-text-center\">\n        {error.message}\n      </p>\n      <p className=\"rfp-text-xs rfp-text-fg-tertiary rfp-mb-6 rfp-max-w-md rfp-text-center\">\n        {fileName}\n      </p>\n      <div className=\"rfp-flex rfp-gap-3\">\n        <button\n          onClick={onRetry}\n          aria-label={t('common.retry')}\n          className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n        >\n          <RotateCw className=\"rfp-w-4 rfp-h-4\" />\n          {t('common.retry')}\n        </button>\n        <button\n          onClick={onDownload}\n          aria-label={t('accessibility.downloadFile')}\n          className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 rfp-bg-surface-2 hover:rfp-bg-surface-3 rfp-rounded-md rfp-text-sm rfp-font-medium rfp-transition-colors\"\n        >\n          <Download className=\"rfp-w-4 rfp-h-4\" />\n          {t('common.download')}\n        </button>\n      </div>\n    </div>\n  );\n};\n","import React from 'react';\n\nexport interface RendererErrorBoundaryProps {\n  children: React.ReactNode;\n  fallback: (error: Error, reset: () => void) => React.ReactNode;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface RendererErrorBoundaryState {\n  hasError: boolean;\n  error: Error | null;\n}\n\n/**\n * 渲染器错误边界类组件\n * 捕获渲染器加载失败和运行时错误\n */\nexport class RendererErrorBoundary extends React.Component<\n  RendererErrorBoundaryProps,\n  RendererErrorBoundaryState\n> {\n  constructor(props: RendererErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false, error: null };\n  }\n\n  static getDerivedStateFromError(error: Error): RendererErrorBoundaryState {\n    return { hasError: true, error };\n  }\n\n  componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n    console.error('[file-preview] Renderer error:', error, errorInfo);\n    this.props.onError?.(error, errorInfo);\n  }\n\n  reset = (): void => {\n    this.setState({ hasError: false, error: null });\n  };\n\n  render(): React.ReactNode {\n    if (this.state.hasError && this.state.error) {\n      return this.props.fallback(this.state.error, this.reset);\n    }\n\n    return this.props.children;\n  }\n}\n","import React from 'react';\nimport { useTranslator } from '../i18n/LocaleContext';\n\nexport const RendererLoading: React.FC = () => {\n  const t = useTranslator();\n  return (\n    <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-text-fg-muted\">\n      <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-3\">\n        <div className=\"rfp-w-8 rfp-h-8 rfp-rounded-full rfp-border-2 rfp-border-fg-muted rfp-border-t-transparent rfp-animate-spin\" />\n        <span className=\"rfp-text-sm\">{t('common.loading') ?? 'Loading...'}</span>\n      </div>\n    </div>\n  );\n};\n","import React, { Suspense } from 'react';\nimport type { Translator } from '@eternalheart/file-preview-core';\nimport type { PreviewFile, CustomRenderer, CustomRendererContext } from '../../types';\nimport { RendererErrorBoundary } from './RendererErrorBoundary';\nimport { RendererError } from './RendererError';\nimport { RendererLoading } from '../../renderers/RendererLoading';\n\nexport interface FilePreviewRendererProps {\n  currentFile: PreviewFile;\n  customRenderer?: CustomRenderer | null;\n  customRendererContext: CustomRendererContext;\n  t: Translator;\n  onDownload: () => void;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n  children: React.ReactNode;\n}\n\n/**\n * 渲染器容器组件\n * 负责 Suspense + 错误边界包装，不负责具体渲染器选择\n */\nexport const FilePreviewRenderer: React.FC<FilePreviewRendererProps> = ({\n  currentFile,\n  customRenderer,\n  customRendererContext,\n  t,\n  onDownload,\n  onError,\n  children,\n}) => {\n  // 自定义渲染器优先\n  if (customRenderer) {\n    return (\n      <RendererErrorBoundary\n        fallback={(error, reset) => (\n          <RendererError\n            error={error}\n            fileName={currentFile.name}\n            t={t}\n            onRetry={reset}\n            onDownload={onDownload}\n          />\n        )}\n        onError={onError}\n      >\n        {customRenderer.render(currentFile, customRendererContext)}\n      </RendererErrorBoundary>\n    );\n  }\n\n  // 内置渲染器（Suspense + 错误边界）\n  return (\n    <Suspense fallback={<RendererLoading />} key={currentFile.url}>\n      <RendererErrorBoundary\n        fallback={(error, reset) => (\n          <RendererError\n            error={error}\n            fileName={currentFile.name}\n            t={t}\n            onRetry={reset}\n            onDownload={onDownload}\n          />\n        )}\n        onError={onError}\n      >\n        {children}\n      </RendererErrorBoundary>\n    </Suspense>\n  );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { Translator } from '@eternalheart/file-preview-core';\n\nexport interface NavArrowsProps {\n  containerRef: React.RefObject<HTMLDivElement | null>;\n  hasPrev: boolean;\n  hasNext: boolean;\n  onPrev: () => void;\n  onNext: () => void;\n  resetKey: number;\n  t: Translator;\n}\n\nconst NAV_HIDE_DELAY = 2000;\n\n/**\n * 导航箭头组件\n * 自带 mousemove 监听 + 2s 自动隐藏定时器\n * state 隔离在本组件，避免父组件因 navVisible 变化而 re-render\n */\nexport const NavArrows: React.FC<NavArrowsProps> = ({\n  containerRef,\n  hasPrev,\n  hasNext,\n  onPrev,\n  onNext,\n  resetKey,\n  t,\n}) => {\n  const [visible, setVisible] = useState(true);\n  const timerRef = useRef<number | null>(null);\n\n  const scheduleHide = useCallback(() => {\n    if (timerRef.current) clearTimeout(timerRef.current);\n    timerRef.current = window.setTimeout(() => setVisible(false), NAV_HIDE_DELAY);\n  }, []);\n\n  const show = useCallback(() => {\n    setVisible((prev) => (prev ? prev : true));\n    scheduleHide();\n  }, [scheduleHide]);\n\n  // 监听容器的 mousemove，触发显示 + 重置隐藏定时器\n  useEffect(() => {\n    const el = containerRef.current;\n    if (!el) return;\n    const handler = () => show();\n    el.addEventListener('mousemove', handler);\n    return () => {\n      el.removeEventListener('mousemove', handler);\n    };\n  }, [containerRef, show]);\n\n  // currentIndex 切换时，显示一次并重置定时器\n  useEffect(() => {\n    setVisible(true);\n    scheduleHide();\n    return () => {\n      if (timerRef.current) clearTimeout(timerRef.current);\n    };\n  }, [resetKey, scheduleHide]);\n\n  return (\n    <>\n      {hasPrev && (\n        <motion.button\n          initial={{ opacity: 0 }}\n          animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : -20 }}\n          transition={{ duration: 0.2 }}\n          onClick={onPrev}\n          onMouseEnter={show}\n          style={{ pointerEvents: visible ? 'auto' : 'none' }}\n          aria-label={t('accessibility.previousFile') || '上一个文件'}\n          aria-keyshortcuts=\"ArrowLeft\"\n          className=\"rfp-absolute rfp-z-20 rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n        >\n          <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n        </motion.button>\n      )}\n      {hasNext && (\n        <motion.button\n          initial={{ opacity: 0 }}\n          animate={{ opacity: visible ? 1 : 0, x: visible ? 0 : 20 }}\n          transition={{ duration: 0.2 }}\n          onClick={onNext}\n          onMouseEnter={show}\n          style={{ pointerEvents: visible ? 'auto' : 'none' }}\n          aria-label={t('accessibility.nextFile') || '下一个文件'}\n          aria-keyshortcuts=\"ArrowRight\"\n          className=\"rfp-absolute rfp-z-20 rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-backdrop-blur-xl rfp-border rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors rfp-shadow-2xl rfp-bg-surface-nav rfp-border-line hover:rfp-bg-surface-nav-hover rfp-text-fg-primary\"\n        >\n          <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n        </motion.button>\n      )}\n    </>\n  );\n};\n","// 集中的 lazy 装饰：把每个 renderer 转为 React.lazy(import).then(default)，\n// 让 rollup 自动按 chunk 分割。\n// 显式声明 LazyExoticComponent 以避免 TS4023（要求把内部 Props 类型导入到当前文件作用域）。\nimport { lazy, type LazyExoticComponent, type ComponentType } from 'react';\nimport type { ImageRenderer as ImageRendererImpl } from './Image';\nimport type { PdfRenderer as PdfRendererImpl } from './Pdf';\nimport type { DocxRenderer as DocxRendererImpl } from './Docx';\nimport type { XlsxRenderer as XlsxRendererImpl } from './Xlsx';\nimport type { PptxRenderer as PptxRendererImpl } from './Pptx';\nimport type { MsgRenderer as MsgRendererImpl } from './Msg';\nimport type { EpubRenderer as EpubRendererImpl } from './Epub';\nimport type { MobiRenderer as MobiRendererImpl } from './Mobi';\nimport type { VideoRenderer as VideoRendererImpl } from './Video';\nimport type { AudioRenderer as AudioRendererImpl } from './Audio';\nimport type { MarkdownRenderer as MarkdownRendererImpl } from './Markdown';\nimport type { JsonRenderer as JsonRendererImpl } from './Json';\nimport type { CsvRenderer as CsvRendererImpl } from './Csv';\nimport type { XmlRenderer as XmlRendererImpl } from './Xml';\nimport type { SubtitleRenderer as SubtitleRendererImpl } from './Subtitle';\nimport type { ZipRenderer as ZipRendererImpl } from './Zip';\nimport type { TextRenderer as TextRendererImpl } from './Text';\nimport type { FontRenderer as FontRendererImpl } from './Font';\nimport type { CadRenderer as CadRendererImpl } from './Cad';\n\ntype Lazy<T> = LazyExoticComponent<T extends ComponentType<infer P> ? ComponentType<P> : never>;\n\nexport const ImageRenderer: Lazy<typeof ImageRendererImpl> = lazy(() =>\n  import('./Image').then((m) => ({ default: m.ImageRenderer })),\n);\n\nexport const PdfRenderer: Lazy<typeof PdfRendererImpl> = lazy(() =>\n  import('./Pdf').then((m) => ({ default: m.PdfRenderer })),\n);\n\nexport const DocxRenderer: Lazy<typeof DocxRendererImpl> = lazy(() =>\n  import('./Docx').then((m) => ({ default: m.DocxRenderer })),\n);\n\nexport const XlsxRenderer: Lazy<typeof XlsxRendererImpl> = lazy(() =>\n  import('./Xlsx').then((m) => ({ default: m.XlsxRenderer })),\n);\n\nexport const PptxRenderer: Lazy<typeof PptxRendererImpl> = lazy(() =>\n  import('./Pptx').then((m) => ({ default: m.PptxRenderer })),\n);\n\nexport const MsgRenderer: Lazy<typeof MsgRendererImpl> = lazy(() =>\n  import('./Msg').then((m) => ({ default: m.MsgRenderer })),\n);\n\nexport const EpubRenderer: Lazy<typeof EpubRendererImpl> = lazy(() =>\n  import('./Epub').then((m) => ({ default: m.EpubRenderer })),\n);\n\nexport const MobiRenderer: Lazy<typeof MobiRendererImpl> = lazy(() =>\n  import('./Mobi').then((m) => ({ default: m.MobiRenderer })),\n);\n\nexport const VideoRenderer: Lazy<typeof VideoRendererImpl> = lazy(() =>\n  import('./Video').then((m) => ({ default: m.VideoRenderer })),\n);\n\nexport const AudioRenderer: Lazy<typeof AudioRendererImpl> = lazy(() =>\n  import('./Audio').then((m) => ({ default: m.AudioRenderer })),\n);\n\nexport const MarkdownRenderer: Lazy<typeof MarkdownRendererImpl> = lazy(() =>\n  import('./Markdown').then((m) => ({ default: m.MarkdownRenderer })),\n);\n\nexport const JsonRenderer: Lazy<typeof JsonRendererImpl> = lazy(() =>\n  import('./Json').then((m) => ({ default: m.JsonRenderer })),\n);\n\nexport const CsvRenderer: Lazy<typeof CsvRendererImpl> = lazy(() =>\n  import('./Csv').then((m) => ({ default: m.CsvRenderer })),\n);\n\nexport const XmlRenderer: Lazy<typeof XmlRendererImpl> = lazy(() =>\n  import('./Xml').then((m) => ({ default: m.XmlRenderer })),\n);\n\nexport const SubtitleRenderer: Lazy<typeof SubtitleRendererImpl> = lazy(() =>\n  import('./Subtitle').then((m) => ({ default: m.SubtitleRenderer })),\n);\n\nexport const ZipRenderer: Lazy<typeof ZipRendererImpl> = lazy(() =>\n  import('./Zip').then((m) => ({ default: m.ZipRenderer })),\n);\n\nexport const TextRenderer: Lazy<typeof TextRendererImpl> = lazy(() =>\n  import('./Text').then((m) => ({ default: m.TextRenderer })),\n);\n\nexport const FontRenderer: Lazy<typeof FontRendererImpl> = lazy(() =>\n  import('./Font').then((m) => ({ default: m.FontRenderer })),\n);\n\nexport const CadRenderer: Lazy<typeof CadRendererImpl> = lazy(() =>\n  import('./Cad').then((m) => ({ default: m.CadRenderer })),\n);\n","import type { LazyExoticComponent, ComponentType } from 'react';\nimport type { FileType, PreviewFile } from '@eternalheart/file-preview-core';\nimport {\n  ImageRenderer,\n  PdfRenderer,\n  DocxRenderer,\n  XlsxRenderer,\n  PptxRenderer,\n  MsgRenderer,\n  EpubRenderer,\n  MobiRenderer,\n  VideoRenderer,\n  AudioRenderer,\n  MarkdownRenderer,\n  JsonRenderer,\n  CsvRenderer,\n  XmlRenderer,\n  SubtitleRenderer,\n  ZipRenderer,\n  TextRenderer,\n  FontRenderer,\n  CadRenderer,\n} from './lazy';\n\n/**\n * 渲染器上下文：主组件传递给 getProps 的环境信息\n */\nexport interface RendererContext {\n  /** 解析后的 URL（可能是 blob URL） */\n  resolvedUrl: string;\n  /** ZIP 嵌套深度 */\n  zipNestingDepth: number;\n  /** 当前文件对象 */\n  currentFile: PreviewFile;\n}\n\n/**\n * 内置渲染器配置\n */\nexport interface BuiltinRendererConfig {\n  /** 匹配的文件类型 */\n  fileType: FileType;\n  /** 渲染器组件（懒加载） */\n  component: LazyExoticComponent<ComponentType<any>>;\n  /** 计算传给组件的 props */\n  getProps: (ctx: RendererContext) => Record<string, any>;\n}\n\n/**\n * 内置渲染器注册表\n *\n * 新增渲染器：\n * 1. 在 src/renderers/<Type>/index.tsx 创建渲染器\n * 2. 在 src/renderers/lazy.tsx 添加懒加载导出\n * 3. 在此注册表添加配置\n *\n * 主组件 FilePreviewContent.tsx 无需修改\n */\nexport const BUILTIN_RENDERERS: BuiltinRendererConfig[] = [\n  {\n    fileType: 'image',\n    component: ImageRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileSize: ctx.currentFile.size,\n      file: ctx.currentFile,\n    }),\n  },\n  {\n    fileType: 'pdf',\n    component: PdfRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'docx',\n    component: DocxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'xlsx',\n    component: XlsxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'pptx',\n    component: PptxRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'msg',\n    component: MsgRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'epub',\n    component: EpubRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'mobi',\n    component: MobiRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'video',\n    component: VideoRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'audio',\n    component: AudioRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'markdown',\n    component: MarkdownRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'json',\n    component: JsonRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'csv',\n    component: CsvRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'xml',\n    component: XmlRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'subtitle',\n    component: SubtitleRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'zip',\n    component: ZipRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      nestingDepth: ctx.zipNestingDepth,\n    }),\n  },\n  {\n    fileType: 'text',\n    component: TextRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      fileName: ctx.currentFile.name,\n    }),\n  },\n  {\n    fileType: 'font',\n    component: FontRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n    }),\n  },\n  {\n    fileType: 'cad',\n    component: CadRenderer,\n    getProps: (ctx) => ({\n      url: ctx.resolvedUrl,\n      file: ctx.currentFile.file, // 传递原始 File 对象（如果有）\n      fileName: ctx.currentFile.name, // 传递原始文件名用于识别扩展名\n    }),\n  },\n];\n","import React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { getFileType, createTranslator, resolveShowClose, type Locale, type Messages, type Translator, type Theme, downloadFileWithFetcher } from '@eternalheart/file-preview-core';\nimport { LocaleProvider } from './i18n/LocaleContext';\nimport { ThemeProvider } from './ThemeContext';\nimport type { PreviewFileInput, CustomRenderer, CustomRendererContext } from './types';\nimport type { CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { RequestProvider, useResolvedUrl, useFetcher } from './RequestContext';\nimport type { RendererHandle } from './renderers/base.types';\nimport type { ToolbarGroup } from './renderers/toolbar.types';\nimport { UnsupportedRenderer } from './renderers/Unsupported';\nimport {\n  useKeyboardNavigation,\n  useThemeMode,\n} from './hooks';\nimport { FilePreviewToolbar, FilePreviewRenderer, NavArrows } from './components/preview';\nimport { BUILTIN_RENDERERS } from './renderers/registry';\n\nconst MAX_ZIP_NESTING_DEPTH = 3;\n\nexport interface FilePreviewContentProps {\n  files: PreviewFileInput[];\n  currentIndex: number;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  mode?: 'modal' | 'embed';\n  onClose?: () => void;\n  zipNestingDepth?: number;\n  locale?: Locale;\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  headless?: boolean;\n  theme?: Theme;\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  requestInit?: RequestInitFactory;\n  requestHandler?: RequestHandler;\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  onDownload?: (file: PreviewFile) => void;\n  onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n  /** 是否显示关闭按钮，默认根据 mode 决定（modal: true, embed: false��� */\n  showClose?: boolean;\n  showDownload?: boolean;\n}\n\nexport const FilePreviewContent: React.FC<FilePreviewContentProps> = (props) => {\n  const { requestInit, requestHandler, shouldFetchAsBlob } = props;\n  return (\n    <RequestProvider\n      requestInit={requestInit}\n      requestHandler={requestHandler}\n      shouldFetchAsBlob={shouldFetchAsBlob}\n    >\n      <FilePreviewContentInner {...props} />\n    </RequestProvider>\n  );\n};\n\nconst FilePreviewContentInner: React.FC<FilePreviewContentProps> = ({\n  files,\n  currentIndex,\n  onNavigate,\n  customRenderers = [],\n  mode = 'modal',\n  onClose,\n  zipNestingDepth = 0,\n  locale = 'zh-CN',\n  messages: userMessages,\n  headless = false,\n  theme = 'dark',\n  onCustomEvent,\n  onDownload,\n  onError,\n  showClose,\n  showDownload = true,\n  requestInit: _requestInit,\n  requestHandler: _requestHandler,\n  shouldFetchAsBlob: _shouldFetchAsBlob,\n}) => {\n  const t: Translator = useMemo(\n    () => createTranslator({ locale, messages: userMessages }),\n    [locale, userMessages],\n  );\n\n  const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n  const currentFile = normalizedFiles[currentIndex];\n  const resolvedUrl = useResolvedUrl(currentFile);\n  const fetcher = useFetcher();\n\n  const customRenderer = useMemo(() => {\n    if (!currentFile) return null;\n    return customRenderers.find(renderer => renderer.test(currentFile));\n  }, [currentFile, customRenderers]);\n\n  const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n  // 主题\n  const resolvedTheme = useThemeMode(theme);\n\n  // Refs\n  const contentRef = useRef<HTMLDivElement>(null);\n  const rootRef = useRef<HTMLDivElement>(null);\n\n  // 新架构：通用渲染器 ref，用于获取工具栏配置\n  const rendererInstanceRef = useRef<RendererHandle | null>(null);\n  const [rendererToolbarGroups, setRendererToolbarGroups] = useState<ToolbarGroup[]>([]);\n  const cleanupRef = useRef<(() => void) | null>(null);\n\n  // 设置渲染器并初始化工具栏（在渲染器挂载/更新时同步触发）\n  const setupRenderer = useCallback((renderer: RendererHandle | null) => {\n    // 清理旧的订阅\n    if (cleanupRef.current) {\n      cleanupRef.current();\n      cleanupRef.current = null;\n    }\n\n    rendererInstanceRef.current = renderer;\n\n    if (!renderer?.getToolbarGroups) {\n      setRendererToolbarGroups([]);\n      return;\n    }\n\n    // 立即获取一次初始状态\n    const initialGroups = renderer.getToolbarGroups();\n    setRendererToolbarGroups(initialGroups);\n\n    // 如果渲染器支持事件订阅，使用事件机制\n    if (renderer.onToolbarChange) {\n      const unsubscribe = renderer.onToolbarChange(() => {\n        const groups = renderer.getToolbarGroups();\n        setRendererToolbarGroups(groups);\n      });\n\n      cleanupRef.current = unsubscribe;\n      return;\n    }\n\n    // 回退机制：如果渲染器不支持事件，使用轮询\n    const interval = setInterval(() => {\n      const groups = renderer.getToolbarGroups();\n      setRendererToolbarGroups(groups);\n    }, 100);\n    cleanupRef.current = () => clearInterval(interval);\n  }, []);\n\n  // Callback ref：在渲染器挂载/卸载时立即触发\n  const rendererRef = useCallback((renderer: RendererHandle | null) => {\n    setupRenderer(renderer);\n  }, [setupRenderer]);\n\n  // 组件卸载时清理\n  useEffect(() => {\n    return () => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = null;\n      }\n    };\n  }, []);\n\n  // 键盘导航\n  useKeyboardNavigation({\n    mode,\n    currentIndex,\n    totalFiles: normalizedFiles.length,\n    onNavigate,\n    onClose,\n    rootRef,\n  });\n\n  // 图片自动适应窗口（已禁用，改为手动点击\"适应窗口\"按钮）\n  // useImageAutoFit({\n  //   enabled: fileType === 'image',\n  //   naturalWidth: state.image.naturalWidth,\n  //   naturalHeight: state.image.naturalHeight,\n  //   containerRef: contentRef,\n  //   onZoomChange: (zoom) => dispatch({ type: 'SET_ZOOM', payload: zoom }),\n  // });\n\n  // 自定义渲染器上下文\n  const emitCustom = useCallback(\n    (name: string, payload?: unknown) => {\n      if (!currentFile) return;\n      onCustomEvent?.({ name, payload, file: currentFile });\n    },\n    [currentFile, onCustomEvent],\n  );\n\n  const customCtx = useMemo<CustomRendererContext>(\n    () => ({ emit: emitCustom, t, theme: resolvedTheme, locale }),\n    [emitCustom, t, resolvedTheme, locale],\n  );\n\n  const handleDownload = useCallback(async () => {\n    if (!currentFile) return;\n    if (onDownload) {\n      await onDownload(currentFile);\n      return;\n    }\n    try {\n      await downloadFileWithFetcher(currentFile.url, currentFile.name, fetcher);\n    } catch (err) {\n      console.error('[file-preview] download failed:', err);\n    }\n  }, [currentFile, onDownload, fetcher]);\n\n  if (!currentFile) return null;\n\n  return (\n    <LocaleProvider locale={locale} messages={userMessages}>\n      <ThemeProvider theme={resolvedTheme}>\n        <div\n          ref={rootRef}\n          tabIndex={mode === 'embed' ? 0 : -1}\n          data-theme={resolvedTheme}\n          className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden rfp-outline-none\"\n        >\n          {!headless && (\n            <FilePreviewToolbar\n              fileName={currentFile.name}\n              currentIndex={currentIndex}\n              totalFiles={normalizedFiles.length}\n              toolGroups={rendererToolbarGroups}\n              t={t}\n              onDownload={handleDownload}\n              onClose={onClose}\n              showClose={resolveShowClose(mode, showClose)}\n              showDownload={showDownload}\n            />\n          )}\n\n          <div\n            ref={contentRef}\n            className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-overflow-auto\"\n          >\n            <FilePreviewRenderer\n              currentFile={currentFile}\n              customRenderer={customRenderer}\n              customRendererContext={customCtx}\n              t={t}\n              onDownload={handleDownload}\n              onError={onError}\n            >\n              {(() => {\n                // ZIP 嵌套深度超限：fallback 到 Unsupported\n                if (fileType === 'zip' && zipNestingDepth >= MAX_ZIP_NESTING_DEPTH) {\n                  return (\n                    <UnsupportedRenderer\n                      fileName={currentFile.name}\n                      fileType={currentFile.type}\n                      onDownload={handleDownload}\n                    />\n                  );\n                }\n\n                // 从注册表查找匹配的渲染器\n                const rendererConfig = BUILTIN_RENDERERS.find(\n                  (r) => r.fileType === fileType,\n                );\n\n                if (rendererConfig) {\n                  const RendererComponent = rendererConfig.component;\n                  const rendererProps = rendererConfig.getProps({\n                    resolvedUrl,\n                    zipNestingDepth,\n                    currentFile,\n                  });\n                  return <RendererComponent ref={rendererRef} {...rendererProps} />;\n                }\n\n                // 未匹配：fallback 到 UnsupportedRenderer\n                return (\n                  <UnsupportedRenderer\n                    fileName={currentFile.name}\n                    fileType={currentFile.type}\n                    onDownload={handleDownload}\n                  />\n                );\n              })()}\n            </FilePreviewRenderer>\n          </div>\n\n          {!headless && normalizedFiles.length > 1 && (\n            <NavArrows\n              containerRef={contentRef}\n              hasPrev={currentIndex > 0}\n              hasNext={currentIndex < normalizedFiles.length - 1}\n              onPrev={() => onNavigate?.(currentIndex - 1)}\n              onNext={() => onNavigate?.(currentIndex + 1)}\n              resetKey={currentIndex}\n              t={t}\n            />\n          )}\n        </div>\n      </ThemeProvider>\n    </LocaleProvider>\n  );\n};\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewModalProps {\n  files: PreviewFileInput[];\n  currentIndex: number;\n  isOpen: boolean;\n  onClose: () => void;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  /** 国际化语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义翻译字典 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  /** 无头模式：隐藏工具栏和导航箭头 */\n  headless?: boolean;\n  /** 主题模式，默认 'dark' */\n  theme?: Theme;\n  /** 自定义渲染器派发的事件出口 */\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  /** 自定义 RequestInit（或工厂函数）：注入 Authorization 等鉴权头 */\n  requestInit?: RequestInitFactory;\n  /** 自定义请求处理器：完全接管库内 fetch */\n  requestHandler?: RequestHandler;\n  /** 返回 true 时，对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  /** 自定义下载回调；不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n  onDownload?: (file: PreviewFile) => void | Promise<void>;\n  /** 是否显示关闭按钮，默认根据 mode 决定（modal: true） */\n  showClose?: boolean;\n  /** 是否显示下载按钮，默认 true */\n  showDownload?: boolean;\n}\n\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n  files,\n  currentIndex,\n  isOpen,\n  onClose,\n  onNavigate,\n  customRenderers = [],\n  locale,\n  messages,\n  headless,\n  theme = 'dark',\n  onCustomEvent,\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  onDownload,\n  showClose,\n  showDownload,\n}) => {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true,\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n  // 锁定 body 滚动\n  useEffect(() => {\n    if (isOpen) {\n      const originalOverflow = document.body.style.overflow;\n      const originalPaddingRight = document.body.style.paddingRight;\n\n      const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n      document.body.style.overflow = 'hidden';\n      if (scrollbarWidth > 0) {\n        document.body.style.paddingRight = `${scrollbarWidth}px`;\n      }\n\n      return () => {\n        document.body.style.overflow = originalOverflow;\n        document.body.style.paddingRight = originalPaddingRight;\n      };\n    }\n  }, [isOpen]);\n\n  if (!isOpen) return null;\n\n  const modalContent = (\n    <div className=\"rfp-root\" data-theme={resolvedTheme}>\n      <AnimatePresence>\n        {isOpen && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-backdrop-blur-md rfp-overflow-hidden rfp-bg-surface-overlay\"\n            onClick={onClose}\n            onWheel={(e) => e.stopPropagation()}\n          >\n            <div\n              className=\"rfp-relative rfp-w-full rfp-h-full\"\n              onClick={(e) => e.stopPropagation()}\n            >\n              <FilePreviewContent\n                mode=\"modal\"\n                files={files}\n                currentIndex={currentIndex}\n                onClose={onClose}\n                onNavigate={onNavigate}\n                customRenderers={customRenderers}\n                locale={locale}\n                messages={messages}\n                headless={headless}\n                theme={theme}\n                onCustomEvent={onCustomEvent}\n                requestInit={requestInit}\n                requestHandler={requestHandler}\n                shouldFetchAsBlob={shouldFetchAsBlob}\n                onDownload={onDownload}\n                showClose={showClose}\n                showDownload={showDownload}\n              />\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n\n  return createPortal(modalContent, document.body);\n};\n","import { useEffect, useState } from 'react';\nimport { PreviewFileInput, CustomRenderer } from './types';\nimport { FilePreviewContent } from './FilePreviewContent';\nimport type { Locale, Messages, Theme, CustomRendererEventPayload, PreviewFile, RequestHandler, RequestInitFactory, ShouldFetchAsBlob } from '@eternalheart/file-preview-core';\n\ninterface FilePreviewEmbedProps {\n  files: PreviewFileInput[];\n  currentIndex?: number;\n  onNavigate?: (index: number) => void;\n  customRenderers?: CustomRenderer[];\n  /** 宽度,默认 100% 填充父容器 */\n  width?: number | string;\n  /** 高度,默认 100% 填充父容器 */\n  height?: number | string;\n  className?: string;\n  style?: React.CSSProperties;\n  /** 国际化语言，默认 'zh-CN' */\n  locale?: Locale;\n  /** 用户自定义翻译字典 */\n  messages?: Partial<Record<Locale, Partial<Messages>>>;\n  /** 无头模式：隐藏工具栏和导航箭头 */\n  headless?: boolean;\n  /** 主题模式，默认 'dark' */\n  theme?: Theme;\n  /** 自定义渲染器派发的事件出口 */\n  onCustomEvent?: (event: CustomRendererEventPayload) => void;\n  /** 自定义 RequestInit（或工厂函数）：注入 Authorization 等鉴权头 */\n  requestInit?: RequestInitFactory;\n  /** 自定义请求处理器：完全接管库内 fetch */\n  requestHandler?: RequestHandler;\n  /** 返回 true 时，对应文件先 fetcher→blob URL 后喂给 image/video/audio/pdf 等 renderer */\n  shouldFetchAsBlob?: ShouldFetchAsBlob;\n  /** 自定义下载回调；不传时库内默认通过 fetcher 拉 Blob 触发下载 */\n  onDownload?: (file: PreviewFile) => void | Promise<void>;\n  /** 关闭回调 */\n  onClose?: () => void;\n  /** 是否显示关闭按钮，默认根据 mode 决定（embed: false） */\n  showClose?: boolean;\n  /** 是否显示下载按钮，默认 true */\n  showDownload?: boolean;\n}\n\nexport const FilePreviewEmbed: React.FC<FilePreviewEmbedProps> = ({\n  files,\n  currentIndex = 0,\n  onNavigate,\n  customRenderers = [],\n  width = '100%',\n  height = '100%',\n  className,\n  style,\n  locale,\n  messages,\n  headless,\n  theme = 'dark',\n  onCustomEvent,\n  requestInit,\n  requestHandler,\n  shouldFetchAsBlob,\n  onDownload,\n  onClose,\n  showClose,\n  showDownload,\n}) => {\n  const [systemDark, setSystemDark] = useState(() =>\n    typeof window !== 'undefined'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : true,\n  );\n\n  useEffect(() => {\n    if (theme !== 'auto') return;\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n    mql.addEventListener('change', handler);\n    return () => mql.removeEventListener('change', handler);\n  }, [theme]);\n\n  const resolvedTheme = theme === 'auto' ? (systemDark ? 'dark' : 'light') : theme;\n\n  return (\n    <div\n      className={`rfp-root ${className ?? ''}`}\n      style={{ width, height, ...style }}\n      data-theme={resolvedTheme}\n    >\n      <div className=\"rfp-relative rfp-w-full rfp-h-full rfp-overflow-hidden rfp-bg-surface-overlay\">\n        <FilePreviewContent\n          mode=\"embed\"\n          files={files}\n          currentIndex={currentIndex}\n          onNavigate={onNavigate}\n          customRenderers={customRenderers}\n          locale={locale}\n          messages={messages}\n          headless={headless}\n          theme={theme}\n          onCustomEvent={onCustomEvent}\n          requestInit={requestInit}\n          requestHandler={requestHandler}\n          shouldFetchAsBlob={shouldFetchAsBlob}\n          onDownload={onDownload}\n          onClose={onClose}\n          showClose={showClose}\n          showDownload={showDownload}\n        />\n      </div>\n    </div>\n  );\n};\n","/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/**\n * pdfjsVersion = 6.1.200\n * pdfjsBuild = 6353acefe\n */\n/******/ var __webpack_modules__ = ({\n\n/***/ 9306\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isCallable = __webpack_require__(4901);\nvar tryToString = __webpack_require__(6823);\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ },\n\n/***/ 3506\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isPossiblePrototype = __webpack_require__(3925);\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n\n\n/***/ },\n\n/***/ 7080\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar has = (__webpack_require__(4402).has);\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n\n\n/***/ },\n\n/***/ 3463\n(module) {\n\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'string') return argument;\n  throw new $TypeError('Argument is not a string');\n};\n\n\n/***/ },\n\n/***/ 4328\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar WeakMapHelpers = __webpack_require__(4995);\n\nvar weakmap = new WeakMapHelpers.WeakMap();\nvar set = WeakMapHelpers.set;\nvar remove = WeakMapHelpers.remove;\n\nmodule.exports = function (key) {\n  set(weakmap, key, 1);\n  remove(weakmap, key);\n  return key;\n};\n\n\n/***/ },\n\n/***/ 6557\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar has = (__webpack_require__(4995).has);\n\n// Perform ? RequireInternalSlot(M, [[WeakMapData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n\n\n/***/ },\n\n/***/ 6469\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar wellKnownSymbol = __webpack_require__(8227);\nvar create = __webpack_require__(2360);\nvar defineProperty = (__webpack_require__(4913).f);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n  defineProperty(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ },\n\n/***/ 679\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isPrototypeOf = __webpack_require__(1625);\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw new $TypeError('Incorrect invocation');\n};\n\n\n/***/ },\n\n/***/ 3972\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isObject = __webpack_require__(34);\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (argument === undefined || isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object or undefined');\n};\n\n\n/***/ },\n\n/***/ 8551\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isObject = __webpack_require__(34);\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n\n\n/***/ },\n\n/***/ 4154\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classof = __webpack_require__(6955);\n\nvar $TypeError = TypeError;\n\n// Perform ? RequireInternalSlot(argument, [[TypedArrayName]])\n// If argument.[[TypedArrayName]] is not \"Uint8Array\", throw a TypeError exception\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Uint8Array') return argument;\n  throw new $TypeError('Argument is not an Uint8Array');\n};\n\n\n/***/ },\n\n/***/ 7811\n(module) {\n\n\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n\n\n/***/ },\n\n/***/ 7394\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar uncurryThisAccessor = __webpack_require__(6706);\nvar classof = __webpack_require__(2195);\n\nvar ArrayBuffer = globalThis.ArrayBuffer;\nvar TypeError = globalThis.TypeError;\n\n// Includes\n// - Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).\n// - If IsSharedArrayBuffer(O) is true, throw a TypeError exception.\nmodule.exports = ArrayBuffer && uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {\n  if (classof(O) !== 'ArrayBuffer') throw new TypeError('ArrayBuffer expected');\n  return O.byteLength;\n};\n\n\n/***/ },\n\n/***/ 3238\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(7811);\nvar arrayBufferByteLength = __webpack_require__(7394);\n\nvar DataView = globalThis.DataView;\n\nmodule.exports = function (O) {\n  if (!NATIVE_ARRAY_BUFFER || arrayBufferByteLength(O) !== 0) return false;\n  try {\n    // eslint-disable-next-line no-new -- thrower\n    new DataView(O);\n    return false;\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ },\n\n/***/ 5169\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isDetached = __webpack_require__(3238);\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n  if (isDetached(it)) throw new $TypeError('ArrayBuffer is detached');\n  return it;\n};\n\n\n/***/ },\n\n/***/ 4644\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(7811);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar globalThis = __webpack_require__(4576);\nvar isCallable = __webpack_require__(4901);\nvar isObject = __webpack_require__(34);\nvar hasOwn = __webpack_require__(9297);\nvar classof = __webpack_require__(6955);\nvar tryToString = __webpack_require__(6823);\nvar createNonEnumerableProperty = __webpack_require__(6699);\nvar defineBuiltIn = __webpack_require__(6840);\nvar defineBuiltInAccessor = __webpack_require__(2106);\nvar isPrototypeOf = __webpack_require__(1625);\nvar getPrototypeOf = __webpack_require__(2787);\nvar setPrototypeOf = __webpack_require__(2967);\nvar wellKnownSymbol = __webpack_require__(8227);\nvar uid = __webpack_require__(3392);\nvar InternalStateModule = __webpack_require__(1181);\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = globalThis.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = globalThis.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = globalThis.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(globalThis.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n  var proto = getPrototypeOf(it);\n  if (!isObject(proto)) return;\n  var state = getInternalState(proto);\n  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw new TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw new TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {\n      // old WebKit bug - some methods are non-configurable\n      try {\n        TypedArrayConstructor.prototype[KEY] = property;\n      } catch (error2) { /* empty */ }\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = globalThis[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) { /* empty */ }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      defineBuiltIn(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n  else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw new TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQUIRED = true;\n  defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n    configurable: true,\n    get: function () {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\n  });\n  for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {\n    createNonEnumerableProperty(globalThis[NAME].prototype, TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  getTypedArrayConstructor: getTypedArrayConstructor,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n\n\n/***/ },\n\n/***/ 5370\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar lengthOfArrayLike = __webpack_require__(6198);\n\nmodule.exports = function (Constructor, list, $length) {\n  var index = 0;\n  var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\n\n/***/ },\n\n/***/ 9617\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toIndexedObject = __webpack_require__(5397);\nvar toAbsoluteIndex = __webpack_require__(5610);\nvar lengthOfArrayLike = __webpack_require__(6198);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el !== el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value !== value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n\n\n/***/ },\n\n/***/ 4527\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar isArray = __webpack_require__(4376);\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n  // makes no sense without proper strict mode support\n  if (this !== undefined) return true;\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).length = 1;\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n    throw new $TypeError('Cannot set read only .length');\n  } return O.length = length;\n} : function (O, length) {\n  return O.length = length;\n};\n\n\n/***/ },\n\n/***/ 7680\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\nmodule.exports = uncurryThis([].slice);\n\n\n/***/ },\n\n/***/ 2804\n(module) {\n\n\nvar commonAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nvar base64Alphabet = commonAlphabet + '+/';\nvar base64UrlAlphabet = commonAlphabet + '-_';\n\nvar inverse = function (characters) {\n  // TODO: use `Object.create(null)` in `core-js@4`\n  var result = {};\n  var index = 0;\n  for (; index < 64; index++) result[characters.charAt(index)] = index;\n  return result;\n};\n\nmodule.exports = {\n  i2c: base64Alphabet,\n  c2i: inverse(base64Alphabet),\n  i2cUrl: base64UrlAlphabet,\n  c2iUrl: inverse(base64UrlAlphabet)\n};\n\n\n/***/ },\n\n/***/ 6319\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar anObject = __webpack_require__(8551);\nvar iteratorClose = __webpack_require__(9539);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n\n\n/***/ },\n\n/***/ 2195\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ },\n\n/***/ 6955\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(2140);\nvar isCallable = __webpack_require__(4901);\nvar classofRaw = __webpack_require__(2195);\nvar wellKnownSymbol = __webpack_require__(8227);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ },\n\n/***/ 7740\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar hasOwn = __webpack_require__(9297);\nvar ownKeys = __webpack_require__(5031);\nvar getOwnPropertyDescriptorModule = __webpack_require__(7347);\nvar definePropertyModule = __webpack_require__(4913);\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n\n\n/***/ },\n\n/***/ 2211\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ },\n\n/***/ 2529\n(module) {\n\n\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n  return { value: value, done: done };\n};\n\n\n/***/ },\n\n/***/ 6699\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar definePropertyModule = __webpack_require__(4913);\nvar createPropertyDescriptor = __webpack_require__(6980);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ },\n\n/***/ 6980\n(module) {\n\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ },\n\n/***/ 4659\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar definePropertyModule = __webpack_require__(4913);\nvar createPropertyDescriptor = __webpack_require__(6980);\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n\n\n/***/ },\n\n/***/ 2106\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar makeBuiltIn = __webpack_require__(283);\nvar defineProperty = __webpack_require__(4913);\n\nmodule.exports = function (target, name, descriptor) {\n  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n  return defineProperty.f(target, name, descriptor);\n};\n\n\n/***/ },\n\n/***/ 6840\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isCallable = __webpack_require__(4901);\nvar definePropertyModule = __webpack_require__(4913);\nvar makeBuiltIn = __webpack_require__(283);\nvar defineGlobalProperty = __webpack_require__(9433);\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n\n\n/***/ },\n\n/***/ 6279\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar defineBuiltIn = __webpack_require__(6840);\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) defineBuiltIn(target, key, src[key], options);\n  return target;\n};\n\n\n/***/ },\n\n/***/ 9433\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n\n\n/***/ },\n\n/***/ 3724\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n\n\n/***/ },\n\n/***/ 4055\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar isObject = __webpack_require__(34);\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ },\n\n/***/ 6837\n(module) {\n\n\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw new $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n\n\n/***/ },\n\n/***/ 5002\n(module) {\n\n\nmodule.exports = {\n  IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },\n  DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },\n  HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },\n  WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },\n  InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },\n  NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },\n  NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },\n  NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },\n  NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },\n  InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },\n  InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },\n  SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },\n  InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },\n  NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },\n  InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },\n  ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },\n  TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },\n  SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },\n  NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },\n  AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },\n  URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },\n  QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },\n  TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },\n  InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },\n  DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }\n};\n\n\n/***/ },\n\n/***/ 8727\n(module) {\n\n\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n\n\n/***/ },\n\n/***/ 2839\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n\n\n/***/ },\n\n/***/ 9519\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar userAgent = __webpack_require__(2839);\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n\n\n/***/ },\n\n/***/ 6193\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable, sonarjs/slow-regex -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } return stack;\n};\n\n\n/***/ },\n\n/***/ 6518\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar getOwnPropertyDescriptor = (__webpack_require__(7347).f);\nvar createNonEnumerableProperty = __webpack_require__(6699);\nvar defineBuiltIn = __webpack_require__(6840);\nvar defineGlobalProperty = __webpack_require__(9433);\nvar copyConstructorProperties = __webpack_require__(7740);\nvar isForced = __webpack_require__(2796);\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = globalThis;\n  } else if (STATIC) {\n    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = globalThis[TARGET] && globalThis[TARGET].prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n\n\n/***/ },\n\n/***/ 9039\n(module) {\n\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ },\n\n/***/ 8745\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar NATIVE_BIND = __webpack_require__(616);\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n\n\n/***/ },\n\n/***/ 6080\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(7476);\nvar aCallable = __webpack_require__(9306);\nvar NATIVE_BIND = __webpack_require__(616);\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ },\n\n/***/ 616\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = function () { /* empty */ }.bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n\n\n/***/ },\n\n/***/ 9565\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar NATIVE_BIND = __webpack_require__(616);\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n\n\n/***/ },\n\n/***/ 350\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar hasOwn = __webpack_require__(9297);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && function something() { /* empty */ }.name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ },\n\n/***/ 6706\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar aCallable = __webpack_require__(9306);\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n\n\n/***/ },\n\n/***/ 7476\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classofRaw = __webpack_require__(2195);\nvar uncurryThis = __webpack_require__(9504);\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n\n\n/***/ },\n\n/***/ 9504\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar NATIVE_BIND = __webpack_require__(616);\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n\n\n/***/ },\n\n/***/ 944\n(module) {\n\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (options) {\n  var alphabet = options && options.alphabet;\n  if (alphabet === undefined || alphabet === 'base64' || alphabet === 'base64url') return alphabet || 'base64';\n  throw new $TypeError('Incorrect `alphabet` option');\n};\n\n\n/***/ },\n\n/***/ 7751\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar isCallable = __webpack_require__(4901);\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n\n\n/***/ },\n\n/***/ 1767\n(module) {\n\n\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/ecma262/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n\n\n/***/ },\n\n/***/ 8646\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar getIteratorMethod = __webpack_require__(851);\n\nmodule.exports = function (obj, stringHandling) {\n  if (!stringHandling || typeof obj !== 'string') anObject(obj);\n  var method = getIteratorMethod(obj);\n  return getIteratorDirect(anObject(method !== undefined ? call(method, obj) : obj));\n};\n\n\n/***/ },\n\n/***/ 851\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classof = __webpack_require__(6955);\nvar getMethod = __webpack_require__(5966);\nvar isNullOrUndefined = __webpack_require__(4117);\nvar Iterators = __webpack_require__(6269);\nvar wellKnownSymbol = __webpack_require__(8227);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n\n\n/***/ },\n\n/***/ 81\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar tryToString = __webpack_require__(6823);\nvar getIteratorMethod = __webpack_require__(851);\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n\n\n/***/ },\n\n/***/ 5966\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aCallable = __webpack_require__(9306);\nvar isNullOrUndefined = __webpack_require__(4117);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n\n\n/***/ },\n\n/***/ 3789\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar call = __webpack_require__(9565);\nvar toIntegerOrInfinity = __webpack_require__(1291);\nvar getIteratorDirect = __webpack_require__(1767);\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n\n\n/***/ },\n\n/***/ 4576\n(module) {\n\n\nvar check = function (it) {\n  return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n\n\n/***/ },\n\n/***/ 9297\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar toObject = __webpack_require__(8981);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ },\n\n/***/ 421\n(module) {\n\n\nmodule.exports = {};\n\n\n/***/ },\n\n/***/ 397\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar getBuiltIn = __webpack_require__(7751);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ },\n\n/***/ 5917\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar fails = __webpack_require__(9039);\nvar createElement = __webpack_require__(4055);\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n\n\n/***/ },\n\n/***/ 7055\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar fails = __webpack_require__(9039);\nvar classof = __webpack_require__(2195);\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n\n\n/***/ },\n\n/***/ 3167\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isCallable = __webpack_require__(4901);\nvar isObject = __webpack_require__(34);\nvar setPrototypeOf = __webpack_require__(2967);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n\n\n/***/ },\n\n/***/ 3706\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar isCallable = __webpack_require__(4901);\nvar store = __webpack_require__(7629);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ },\n\n/***/ 1181\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8622);\nvar globalThis = __webpack_require__(4576);\nvar isObject = __webpack_require__(34);\nvar createNonEnumerableProperty = __webpack_require__(6699);\nvar hasOwn = __webpack_require__(9297);\nvar shared = __webpack_require__(7629);\nvar sharedKey = __webpack_require__(6119);\nvar hiddenKeys = __webpack_require__(421);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n\n\n/***/ },\n\n/***/ 4209\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar wellKnownSymbol = __webpack_require__(8227);\nvar Iterators = __webpack_require__(6269);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ },\n\n/***/ 4376\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classof = __webpack_require__(2195);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) === 'Array';\n};\n\n\n/***/ },\n\n/***/ 1108\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classof = __webpack_require__(6955);\n\nmodule.exports = function (it) {\n  var klass = classof(it);\n  return klass === 'BigInt64Array' || klass === 'BigUint64Array';\n};\n\n\n/***/ },\n\n/***/ 4901\n(module) {\n\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n\n\n/***/ },\n\n/***/ 2796\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\nvar isCallable = __webpack_require__(4901);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value === POLYFILL ? true\n    : value === NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ },\n\n/***/ 4117\n(module) {\n\n\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n\n\n/***/ },\n\n/***/ 34\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isCallable = __webpack_require__(4901);\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ },\n\n/***/ 3925\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isObject = __webpack_require__(34);\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n\n\n/***/ },\n\n/***/ 6395\n(module) {\n\n\nmodule.exports = false;\n\n\n/***/ },\n\n/***/ 5810\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isObject = __webpack_require__(34);\nvar getInternalState = (__webpack_require__(1181).get);\n\nmodule.exports = function isRawJSON(O) {\n  if (!isObject(O)) return false;\n  var state = getInternalState(O);\n  return !!state && state.type === 'RawJSON';\n};\n\n\n/***/ },\n\n/***/ 757\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar getBuiltIn = __webpack_require__(7751);\nvar isCallable = __webpack_require__(4901);\nvar isPrototypeOf = __webpack_require__(1625);\nvar USE_SYMBOL_AS_UID = __webpack_require__(7040);\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n\n\n/***/ },\n\n/***/ 507\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n\n\n/***/ },\n\n/***/ 2652\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar bind = __webpack_require__(6080);\nvar call = __webpack_require__(9565);\nvar anObject = __webpack_require__(8551);\nvar tryToString = __webpack_require__(6823);\nvar isArrayIteratorMethod = __webpack_require__(4209);\nvar lengthOfArrayLike = __webpack_require__(6198);\nvar isPrototypeOf = __webpack_require__(1625);\nvar getIterator = __webpack_require__(81);\nvar getIteratorMethod = __webpack_require__(851);\nvar iteratorClose = __webpack_require__(9539);\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    var $iterator = iterator;\n    iterator = undefined;\n    if ($iterator) iteratorClose($iterator, 'normal');\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    // `IteratorValue` errors should propagate without closing the iterator\n    var value = step.value;\n    try {\n      result = callFn(value);\n    } catch (error) {\n      if (iterator) iteratorClose(iterator, 'throw', error);\n      else throw error;\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n\n\n/***/ },\n\n/***/ 1385\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar iteratorClose = __webpack_require__(9539);\n\nmodule.exports = function (iters, kind, value) {\n  for (var i = iters.length - 1; i >= 0; i--) {\n    if (iters[i] === undefined) continue;\n    try {\n      value = iteratorClose(iters[i].iterator, kind, value);\n    } catch (error) {\n      kind = 'throw';\n      value = error;\n    }\n  }\n  if (kind === 'throw') throw value;\n  return value;\n};\n\n\n/***/ },\n\n/***/ 9539\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar anObject = __webpack_require__(8551);\nvar getMethod = __webpack_require__(5966);\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n\n\n/***/ },\n\n/***/ 9462\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar create = __webpack_require__(2360);\nvar createNonEnumerableProperty = __webpack_require__(6699);\nvar defineBuiltIns = __webpack_require__(6279);\nvar wellKnownSymbol = __webpack_require__(8227);\nvar InternalStateModule = __webpack_require__(1181);\nvar getMethod = __webpack_require__(5966);\nvar IteratorPrototype = (__webpack_require__(7657).IteratorPrototype);\nvar createIterResultObject = __webpack_require__(2529);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorCloseAll = __webpack_require__(1385);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ITERATOR_HELPER = 'IteratorHelper';\nvar WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';\nvar NORMAL = 'normal';\nvar THROW = 'throw';\nvar setInternalState = InternalStateModule.set;\n\nvar createIteratorProxyPrototype = function (IS_ITERATOR) {\n  var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);\n\n  return defineBuiltIns(create(IteratorPrototype), {\n    next: function next() {\n      var state = getInternalState(this);\n      // for simplification:\n      //   for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`\n      //   for `%IteratorHelperPrototype%.next` - just a value\n      if (IS_ITERATOR) return state.nextHandler();\n      if (state.done) return createIterResultObject(undefined, true);\n      try {\n        var result = state.nextHandler();\n        return state.returnHandlerResult ? result : createIterResultObject(result, state.done);\n      } catch (error) {\n        state.done = true;\n        throw error;\n      }\n    },\n    'return': function () {\n      var state = getInternalState(this);\n      var iterator = state.iterator;\n      var done = state.done;\n      state.done = true;\n      if (IS_ITERATOR) {\n        var returnMethod = getMethod(iterator, 'return');\n        return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);\n      }\n      if (done) return createIterResultObject(undefined, true);\n      if (state.inner) try {\n        iteratorClose(state.inner.iterator, NORMAL);\n      } catch (error) {\n        return iteratorClose(iterator, THROW, error);\n      }\n      if (state.openIters) try {\n        iteratorCloseAll(state.openIters, NORMAL);\n      } catch (error) {\n        if (iterator) return iteratorClose(iterator, THROW, error);\n        throw error;\n      }\n      if (iterator) iteratorClose(iterator, NORMAL);\n      return createIterResultObject(undefined, true);\n    }\n  });\n};\n\nvar WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);\nvar IteratorHelperPrototype = createIteratorProxyPrototype(false);\n\ncreateNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');\n\nmodule.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {\n  var IteratorProxy = function Iterator(record, state) {\n    if (state) {\n      state.iterator = record.iterator;\n      state.next = record.next;\n    } else state = record;\n    state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;\n    state.returnHandlerResult = !!RETURN_HANDLER_RESULT;\n    state.nextHandler = nextHandler;\n    state.counter = 0;\n    state.done = false;\n    setInternalState(this, state);\n  };\n\n  IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;\n\n  return IteratorProxy;\n};\n\n\n/***/ },\n\n/***/ 684\n(module) {\n\n\n// Should throw an error on invalid iterator\n// https://issues.chromium.org/issues/336839115\nmodule.exports = function (methodName, argument) {\n  // eslint-disable-next-line es/no-iterator -- required for testing\n  var method = typeof Iterator == 'function' && Iterator.prototype[methodName];\n  if (method) try {\n    method.call({ next: null }, argument).next();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ },\n\n/***/ 4549\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\n\n// https://github.com/tc39/ecma262/pull/3467\nmodule.exports = function (METHOD_NAME, ExpectedError) {\n  var Iterator = globalThis.Iterator;\n  var IteratorPrototype = Iterator && Iterator.prototype;\n  var method = IteratorPrototype && IteratorPrototype[METHOD_NAME];\n\n  var CLOSED = false;\n\n  if (method) try {\n    method.call({\n      next: function () { return { done: true }; },\n      'return': function () { CLOSED = true; }\n    }, -1);\n  } catch (error) {\n    // https://bugs.webkit.org/show_bug.cgi?id=291195\n    if (!(error instanceof ExpectedError)) CLOSED = false;\n  }\n\n  if (!CLOSED) return method;\n};\n\n\n/***/ },\n\n/***/ 7657\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\nvar isCallable = __webpack_require__(4901);\nvar isObject = __webpack_require__(34);\nvar create = __webpack_require__(2360);\nvar getPrototypeOf = __webpack_require__(2787);\nvar defineBuiltIn = __webpack_require__(6840);\nvar wellKnownSymbol = __webpack_require__(8227);\nvar IS_PURE = __webpack_require__(6395);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ },\n\n/***/ 6269\n(module) {\n\n\nmodule.exports = {};\n\n\n/***/ },\n\n/***/ 6198\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toLength = __webpack_require__(8014);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n\n\n/***/ },\n\n/***/ 283\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar fails = __webpack_require__(9039);\nvar isCallable = __webpack_require__(4901);\nvar hasOwn = __webpack_require__(9297);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(350).CONFIGURABLE);\nvar inspectSource = __webpack_require__(3706);\nvar InternalStateModule = __webpack_require__(1181);\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n\n\n/***/ },\n\n/***/ 2248\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\n// eslint-disable-next-line es/no-map -- safe\nvar MapPrototype = Map.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-map -- safe\n  Map: Map,\n  set: uncurryThis(MapPrototype.set),\n  get: uncurryThis(MapPrototype.get),\n  has: uncurryThis(MapPrototype.has),\n  remove: uncurryThis(MapPrototype['delete']),\n  proto: MapPrototype\n};\n\n\n/***/ },\n\n/***/ 741\n(module) {\n\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n\n\n/***/ },\n\n/***/ 7819\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/* eslint-disable es/no-json -- safe */\nvar fails = __webpack_require__(9039);\n\nmodule.exports = !fails(function () {\n  var unsafeInt = '9007199254740993';\n  // eslint-disable-next-line es/no-json-rawjson -- feature detection\n  var raw = JSON.rawJSON(unsafeInt);\n  // eslint-disable-next-line es/no-json-israwjson -- feature detection\n  return !JSON.isRawJSON(raw) || JSON.stringify(raw) !== unsafeInt;\n});\n\n\n/***/ },\n\n/***/ 6043\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aCallable = __webpack_require__(9306);\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n/***/ },\n\n/***/ 2603\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toString = __webpack_require__(655);\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n\n/***/ },\n\n/***/ 4149\n(module) {\n\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (it === it) return it;\n  throw new $RangeError('NaN is not allowed');\n};\n\n\n/***/ },\n\n/***/ 2360\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = __webpack_require__(8551);\nvar definePropertiesModule = __webpack_require__(6801);\nvar enumBugKeys = __webpack_require__(8727);\nvar hiddenKeys = __webpack_require__(421);\nvar html = __webpack_require__(397);\nvar documentCreateElement = __webpack_require__(4055);\nvar sharedKey = __webpack_require__(6119);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n\n\n/***/ },\n\n/***/ 6801\n(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(8686);\nvar definePropertyModule = __webpack_require__(4913);\nvar anObject = __webpack_require__(8551);\nvar toIndexedObject = __webpack_require__(5397);\nvar objectKeys = __webpack_require__(1072);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n\n\n/***/ },\n\n/***/ 4913\n(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar IE8_DOM_DEFINE = __webpack_require__(5917);\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(8686);\nvar anObject = __webpack_require__(8551);\nvar toPropertyKey = __webpack_require__(6969);\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ },\n\n/***/ 7347\n(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar call = __webpack_require__(9565);\nvar propertyIsEnumerableModule = __webpack_require__(8773);\nvar createPropertyDescriptor = __webpack_require__(6980);\nvar toIndexedObject = __webpack_require__(5397);\nvar toPropertyKey = __webpack_require__(6969);\nvar hasOwn = __webpack_require__(9297);\nvar IE8_DOM_DEFINE = __webpack_require__(5917);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ },\n\n/***/ 8480\n(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar internalObjectKeys = __webpack_require__(1828);\nvar enumBugKeys = __webpack_require__(8727);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ },\n\n/***/ 3717\n(__unused_webpack_module, exports) {\n\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ },\n\n/***/ 2787\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar hasOwn = __webpack_require__(9297);\nvar isCallable = __webpack_require__(4901);\nvar toObject = __webpack_require__(8981);\nvar sharedKey = __webpack_require__(6119);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(2211);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n\n\n/***/ },\n\n/***/ 1625\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ },\n\n/***/ 1828\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar hasOwn = __webpack_require__(9297);\nvar toIndexedObject = __webpack_require__(5397);\nvar indexOf = (__webpack_require__(9617).indexOf);\nvar hiddenKeys = __webpack_require__(421);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n\n\n/***/ },\n\n/***/ 1072\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar internalObjectKeys = __webpack_require__(1828);\nvar enumBugKeys = __webpack_require__(8727);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ },\n\n/***/ 8773\n(__unused_webpack_module, exports) {\n\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ },\n\n/***/ 2967\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = __webpack_require__(6706);\nvar isObject = __webpack_require__(34);\nvar requireObjectCoercible = __webpack_require__(7750);\nvar aPossiblePrototype = __webpack_require__(3506);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n\n\n/***/ },\n\n/***/ 4270\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar isCallable = __webpack_require__(4901);\nvar isObject = __webpack_require__(34);\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ },\n\n/***/ 5031\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar getBuiltIn = __webpack_require__(7751);\nvar uncurryThis = __webpack_require__(9504);\nvar getOwnPropertyNamesModule = __webpack_require__(8480);\nvar getOwnPropertySymbolsModule = __webpack_require__(3717);\nvar anObject = __webpack_require__(8551);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ },\n\n/***/ 8235\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar hasOwn = __webpack_require__(9297);\n\nvar $SyntaxError = SyntaxError;\nvar $parseInt = parseInt;\nvar fromCharCode = String.fromCharCode;\nvar at = uncurryThis(''.charAt);\nvar slice = uncurryThis(''.slice);\nvar exec = uncurryThis(/./.exec);\n\nvar codePoints = {\n  '\\\\\"': '\"',\n  '\\\\\\\\': '\\\\',\n  '\\\\/': '/',\n  '\\\\b': '\\b',\n  '\\\\f': '\\f',\n  '\\\\n': '\\n',\n  '\\\\r': '\\r',\n  '\\\\t': '\\t'\n};\n\nvar IS_4_HEX_DIGITS = /^[\\da-f]{4}$/i;\n// eslint-disable-next-line regexp/no-control-character -- safe\nvar IS_C0_CONTROL_CODE = /^[\\u0000-\\u001F]$/;\n\nmodule.exports = function (source, i) {\n  var unterminated = true;\n  var value = '';\n  while (i < source.length) {\n    var chr = at(source, i);\n    if (chr === '\\\\') {\n      var twoChars = slice(source, i, i + 2);\n      if (hasOwn(codePoints, twoChars)) {\n        value += codePoints[twoChars];\n        i += 2;\n      } else if (twoChars === '\\\\u') {\n        i += 2;\n        var fourHexDigits = slice(source, i, i + 4);\n        if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) throw new $SyntaxError('Bad Unicode escape at: ' + i);\n        value += fromCharCode($parseInt(fourHexDigits, 16));\n        i += 4;\n      } else throw new $SyntaxError('Unknown escape sequence: \"' + twoChars + '\"');\n    } else if (chr === '\"') {\n      unterminated = false;\n      i++;\n      break;\n    } else {\n      if (exec(IS_C0_CONTROL_CODE, chr)) throw new $SyntaxError('Bad control character in string literal at: ' + i);\n      value += chr;\n      i++;\n    }\n  }\n  if (unterminated) throw new $SyntaxError('Unterminated string at: ' + i);\n  return { value: value, end: i };\n};\n\n\n/***/ },\n\n/***/ 1103\n(module) {\n\n\nmodule.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n\n\n/***/ },\n\n/***/ 7750\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar isNullOrUndefined = __webpack_require__(4117);\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n\n\n/***/ },\n\n/***/ 9286\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar SetHelpers = __webpack_require__(4402);\nvar iterate = __webpack_require__(8469);\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n\n\n/***/ },\n\n/***/ 3440\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar SetHelpers = __webpack_require__(4402);\nvar clone = __webpack_require__(9286);\nvar size = __webpack_require__(5170);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSet = __webpack_require__(8469);\nvar iterateSimple = __webpack_require__(507);\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(result) <= otherRec.size) iterateSet(result, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(result, e)) remove(result, e);\n  });\n  return result;\n};\n\n\n/***/ },\n\n/***/ 4402\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-set -- safe\n  Set: Set,\n  add: uncurryThis(SetPrototype.add),\n  has: uncurryThis(SetPrototype.has),\n  remove: uncurryThis(SetPrototype['delete']),\n  proto: SetPrototype\n};\n\n\n/***/ },\n\n/***/ 8750\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar SetHelpers = __webpack_require__(4402);\nvar size = __webpack_require__(5170);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSet = __webpack_require__(8469);\nvar iterateSimple = __webpack_require__(507);\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n\n\n/***/ },\n\n/***/ 4449\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar has = (__webpack_require__(4402).has);\nvar size = __webpack_require__(5170);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSet = __webpack_require__(8469);\nvar iterateSimple = __webpack_require__(507);\nvar iteratorClose = __webpack_require__(9539);\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator.iterator, 'normal', false);\n  }) !== false;\n};\n\n\n/***/ },\n\n/***/ 3838\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar size = __webpack_require__(5170);\nvar iterate = __webpack_require__(8469);\nvar getSetRecord = __webpack_require__(3789);\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n\n\n/***/ },\n\n/***/ 8527\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar has = (__webpack_require__(4402).has);\nvar size = __webpack_require__(5170);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSimple = __webpack_require__(507);\nvar iteratorClose = __webpack_require__(9539);\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator.iterator, 'normal', false);\n  }) !== false;\n};\n\n\n/***/ },\n\n/***/ 8469\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\nvar iterateSimple = __webpack_require__(507);\nvar SetHelpers = __webpack_require__(4402);\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n\n\n/***/ },\n\n/***/ 4916\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar getBuiltIn = __webpack_require__(7751);\n\nvar createSetLike = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return false;\n    },\n    keys: function () {\n      return {\n        next: function () {\n          return { done: true };\n        }\n      };\n    }\n  };\n};\n\nvar createSetLikeWithInfinitySize = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return true;\n    },\n    keys: function () {\n      throw new Error('e');\n    }\n  };\n};\n\nmodule.exports = function (name, callback) {\n  var Set = getBuiltIn('Set');\n  try {\n    new Set()[name](createSetLike(0));\n    try {\n      // late spec change, early WebKit ~ Safari 17 implementation does not pass it\n      // https://github.com/tc39/proposal-set-methods/pull/88\n      // also covered engines with\n      // https://bugs.webkit.org/show_bug.cgi?id=272679\n      new Set()[name](createSetLike(-1));\n      return false;\n    } catch (error2) {\n      if (!callback) return true;\n      // early V8 implementation bug\n      // https://issues.chromium.org/issues/351332634\n      try {\n        new Set()[name](createSetLikeWithInfinitySize(-Infinity));\n        return false;\n      } catch (error) {\n        var set = new Set([1, 2]);\n        return callback(set[name](createSetLikeWithInfinitySize(Infinity)));\n      }\n    }\n  } catch (error) {\n    return false;\n  }\n};\n\n\n/***/ },\n\n/***/ 9835\n(module) {\n\n\n// Should get iterator record of a set-like object before cloning this\n// https://bugs.webkit.org/show_bug.cgi?id=289430\nmodule.exports = function (METHOD_NAME) {\n  try {\n    // eslint-disable-next-line es/no-set -- needed for test\n    var baseSet = new Set();\n    var setLike = {\n      size: 0,\n      has: function () { return true; },\n      keys: function () {\n        // eslint-disable-next-line es/no-object-defineproperty -- needed for test\n        return Object.defineProperty({}, 'next', {\n          get: function () {\n            baseSet.clear();\n            baseSet.add(4);\n            return function () {\n              return { done: true };\n            };\n          }\n        });\n      }\n    };\n    var result = baseSet[METHOD_NAME](setLike);\n\n    return result.size === 1 && result.values().next().value === 4;\n  } catch (error) {\n    return false;\n  }\n};\n\n\n/***/ },\n\n/***/ 5170\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThisAccessor = __webpack_require__(6706);\nvar SetHelpers = __webpack_require__(4402);\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n  return set.size;\n};\n\n\n/***/ },\n\n/***/ 3650\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar SetHelpers = __webpack_require__(4402);\nvar clone = __webpack_require__(9286);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSimple = __webpack_require__(507);\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n\n\n/***/ },\n\n/***/ 4204\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar aSet = __webpack_require__(7080);\nvar add = (__webpack_require__(4402).add);\nvar clone = __webpack_require__(9286);\nvar getSetRecord = __webpack_require__(3789);\nvar iterateSimple = __webpack_require__(507);\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n\n\n/***/ },\n\n/***/ 6119\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar shared = __webpack_require__(5745);\nvar uid = __webpack_require__(3392);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ },\n\n/***/ 7629\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar IS_PURE = __webpack_require__(6395);\nvar globalThis = __webpack_require__(4576);\nvar defineGlobalProperty = __webpack_require__(9433);\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.49.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.',\n  license: 'https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n\n\n/***/ },\n\n/***/ 5745\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar store = __webpack_require__(7629);\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n\n\n/***/ },\n\n/***/ 4495\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(9519);\nvar fails = __webpack_require__(9039);\nvar globalThis = __webpack_require__(4576);\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ },\n\n/***/ 5610\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toIntegerOrInfinity = __webpack_require__(1291);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ },\n\n/***/ 5854\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toPrimitive = __webpack_require__(2777);\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n  var prim = toPrimitive(argument, 'number');\n  if (typeof prim == 'number') throw new $TypeError(\"Can't convert number to bigint\");\n  // eslint-disable-next-line es/no-bigint -- safe\n  return BigInt(prim);\n};\n\n\n/***/ },\n\n/***/ 5397\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(7055);\nvar requireObjectCoercible = __webpack_require__(7750);\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ },\n\n/***/ 1291\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar trunc = __webpack_require__(741);\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n\n\n/***/ },\n\n/***/ 8014\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toIntegerOrInfinity = __webpack_require__(1291);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ },\n\n/***/ 8981\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar requireObjectCoercible = __webpack_require__(7750);\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n\n\n/***/ },\n\n/***/ 9590\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toIntegerOrInfinity = __webpack_require__(1291);\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw new $RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n\n\n/***/ },\n\n/***/ 2777\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar call = __webpack_require__(9565);\nvar isObject = __webpack_require__(34);\nvar isSymbol = __webpack_require__(757);\nvar getMethod = __webpack_require__(5966);\nvar ordinaryToPrimitive = __webpack_require__(4270);\nvar wellKnownSymbol = __webpack_require__(8227);\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ },\n\n/***/ 6969\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar toPrimitive = __webpack_require__(2777);\nvar isSymbol = __webpack_require__(757);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ },\n\n/***/ 2140\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar wellKnownSymbol = __webpack_require__(8227);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n// eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ },\n\n/***/ 655\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar classof = __webpack_require__(6955);\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n\n\n/***/ },\n\n/***/ 6823\n(module) {\n\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n\n\n/***/ },\n\n/***/ 3392\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.1.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ },\n\n/***/ 9143\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar uncurryThis = __webpack_require__(9504);\nvar anObjectOrUndefined = __webpack_require__(3972);\nvar aString = __webpack_require__(3463);\nvar hasOwn = __webpack_require__(9297);\nvar base64Map = __webpack_require__(2804);\nvar getAlphabetOption = __webpack_require__(944);\nvar notDetached = __webpack_require__(5169);\n\nvar base64Alphabet = base64Map.c2i;\nvar base64UrlAlphabet = base64Map.c2iUrl;\n\nvar SyntaxError = globalThis.SyntaxError;\nvar TypeError = globalThis.TypeError;\nvar at = uncurryThis(''.charAt);\n\nvar skipAsciiWhitespace = function (string, index) {\n  var length = string.length;\n  for (;index < length; index++) {\n    var chr = at(string, index);\n    if (chr !== ' ' && chr !== '\\t' && chr !== '\\n' && chr !== '\\f' && chr !== '\\r') break;\n  } return index;\n};\n\nvar decodeBase64Chunk = function (chunk, alphabet, throwOnExtraBits) {\n  var chunkLength = chunk.length;\n\n  if (chunkLength < 4) {\n    chunk += chunkLength === 2 ? 'AA' : 'A';\n  }\n\n  var triplet = (alphabet[at(chunk, 0)] << 18)\n    + (alphabet[at(chunk, 1)] << 12)\n    + (alphabet[at(chunk, 2)] << 6)\n    + alphabet[at(chunk, 3)];\n\n  var chunkBytes = [\n    (triplet >> 16) & 255,\n    (triplet >> 8) & 255,\n    triplet & 255\n  ];\n\n  if (chunkLength === 2) {\n    if (throwOnExtraBits && chunkBytes[1] !== 0) {\n      throw new SyntaxError('Extra bits');\n    }\n    return [chunkBytes[0]];\n  }\n\n  if (chunkLength === 3) {\n    if (throwOnExtraBits && chunkBytes[2] !== 0) {\n      throw new SyntaxError('Extra bits');\n    }\n    return [chunkBytes[0], chunkBytes[1]];\n  }\n\n  return chunkBytes;\n};\n\nvar writeBytes = function (bytes, elements, written) {\n  var elementsLength = elements.length;\n  for (var index = 0; index < elementsLength; index++) {\n    bytes[written + index] = elements[index];\n  }\n  return written + elementsLength;\n};\n\n/* eslint-disable max-statements, max-depth -- TODO */\nmodule.exports = function (string, options, into, maxLength) {\n  aString(string);\n  anObjectOrUndefined(options);\n  var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;\n  var lastChunkHandling = options ? options.lastChunkHandling : undefined;\n\n  if (lastChunkHandling === undefined) lastChunkHandling = 'loose';\n\n  if (lastChunkHandling !== 'loose' && lastChunkHandling !== 'strict' && lastChunkHandling !== 'stop-before-partial') {\n    throw new TypeError('Incorrect `lastChunkHandling` option');\n  }\n\n  if (into) notDetached(into.buffer);\n\n  var stringLength = string.length;\n  var bytes = into || [];\n  var written = 0;\n  var read = 0;\n  var chunk = '';\n  var index = 0;\n\n  if (maxLength) while (true) {\n    index = skipAsciiWhitespace(string, index);\n    if (index === stringLength) {\n      if (chunk.length > 0) {\n        if (lastChunkHandling === 'stop-before-partial') {\n          break;\n        }\n        if (lastChunkHandling === 'loose') {\n          if (chunk.length === 1) {\n            throw new SyntaxError('Malformed padding: exactly one additional character');\n          }\n          written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);\n        } else {\n          throw new SyntaxError('Missing padding');\n        }\n      }\n      read = stringLength;\n      break;\n    }\n    var chr = at(string, index);\n    ++index;\n    if (chr === '=') {\n      if (chunk.length < 2) {\n        throw new SyntaxError('Padding is too early');\n      }\n      index = skipAsciiWhitespace(string, index);\n      if (chunk.length === 2) {\n        if (index === stringLength) {\n          if (lastChunkHandling === 'stop-before-partial') {\n            break;\n          }\n          throw new SyntaxError('Malformed padding: only one =');\n        }\n        if (at(string, index) === '=') {\n          ++index;\n          index = skipAsciiWhitespace(string, index);\n        }\n      }\n      if (index < stringLength) {\n        throw new SyntaxError('Unexpected character after padding');\n      }\n      written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, lastChunkHandling === 'strict'), written);\n      read = stringLength;\n      break;\n    }\n    if (!hasOwn(alphabet, chr)) {\n      throw new SyntaxError('Unexpected character');\n    }\n    var remainingBytes = maxLength - written;\n    if (remainingBytes === 1 && chunk.length === 2 || remainingBytes === 2 && chunk.length === 3) {\n      // special case: we can fit exactly the number of bytes currently represented by chunk, so we were just checking for `=`\n      break;\n    }\n\n    chunk += chr;\n    if (chunk.length === 4) {\n      written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);\n      chunk = '';\n      read = index;\n      if (written === maxLength) {\n        break;\n      }\n    }\n  }\n\n  return { bytes: bytes, read: read, written: written };\n};\n\n\n/***/ },\n\n/***/ 2303\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar uncurryThis = __webpack_require__(9504);\n\nvar Uint8Array = globalThis.Uint8Array;\nvar SyntaxError = globalThis.SyntaxError;\nvar min = Math.min;\nvar stringMatch = uncurryThis(''.match);\n\nmodule.exports = function (string, into) {\n  var stringLength = string.length;\n  if (stringLength % 2 !== 0) throw new SyntaxError('String should be an even number of characters');\n  var maxLength = into ? min(into.length, stringLength / 2) : stringLength / 2;\n  var bytes = into || new Uint8Array(maxLength);\n  var segments = stringMatch(string, /.{2}/g);\n  var written = 0;\n  for (; written < maxLength; written++) {\n    var result = +('0x' + segments[written] + '0');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (result !== result) {\n      throw new SyntaxError('String should only contain hex characters');\n    }\n    bytes[written] = result >> 4;\n  }\n  return { bytes: bytes, read: written << 1 };\n};\n\n\n/***/ },\n\n/***/ 7416\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar fails = __webpack_require__(9039);\nvar wellKnownSymbol = __webpack_require__(8227);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar IS_PURE = __webpack_require__(6395);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line unicorn/relative-url-style -- required for testing\n  var url = new URL('b?a=1&b=2&c=3', 'https://a');\n  var params = url.searchParams;\n  var params2 = new URLSearchParams('a=1&a=2&b=3');\n  var result = '';\n  url.pathname = 'c%20d';\n  params.forEach(function (value, key) {\n    params['delete']('b');\n    result += key + value;\n  });\n  params2['delete']('a', 2);\n  // `undefined` case is a Chromium 117 bug\n  // https://bugs.chromium.org/p/v8/issues/detail?id=14222\n  params2['delete']('b', undefined);\n  return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))\n    || (!params.size && (IS_PURE || !DESCRIPTORS))\n    || !params.sort\n    || url.href !== 'https://a/c%20d?a=1&c=3'\n    || params.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !params[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('https://тест').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('https://a#б').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('https://x', undefined).host !== 'x';\n});\n\n\n/***/ },\n\n/***/ 7040\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(4495);\n\nmodule.exports = NATIVE_SYMBOL &&\n  !Symbol.sham &&\n  typeof Symbol.iterator == 'symbol';\n\n\n/***/ },\n\n/***/ 8686\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar DESCRIPTORS = __webpack_require__(3724);\nvar fails = __webpack_require__(9039);\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n\n\n/***/ },\n\n/***/ 2812\n(module) {\n\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw new $TypeError('Not enough arguments');\n  return passed;\n};\n\n\n/***/ },\n\n/***/ 8622\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar isCallable = __webpack_require__(4901);\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n\n\n/***/ },\n\n/***/ 4995\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar uncurryThis = __webpack_require__(9504);\n\n// eslint-disable-next-line es/no-weak-map -- safe\nvar WeakMapPrototype = WeakMap.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-weak-map -- safe\n  WeakMap: WeakMap,\n  set: uncurryThis(WeakMapPrototype.set),\n  get: uncurryThis(WeakMapPrototype.get),\n  has: uncurryThis(WeakMapPrototype.has),\n  remove: uncurryThis(WeakMapPrototype['delete'])\n};\n\n\n/***/ },\n\n/***/ 8227\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar globalThis = __webpack_require__(4576);\nvar shared = __webpack_require__(5745);\nvar hasOwn = __webpack_require__(9297);\nvar uid = __webpack_require__(3392);\nvar NATIVE_SYMBOL = __webpack_require__(4495);\nvar USE_SYMBOL_AS_UID = __webpack_require__(7040);\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ },\n\n/***/ 4423\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar $includes = (__webpack_require__(9617).includes);\nvar fails = __webpack_require__(9039);\nvar addToUnscopables = __webpack_require__(6469);\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n  // eslint-disable-next-line es/no-array-prototype-includes -- detection\n  return !Array(1).includes();\n});\n\n// Safari 26.4- bug\nvar BROKEN_ON_SPARSE_WITH_FROM_INDEX = fails(function () {\n  // eslint-disable-next-line no-sparse-arrays, es/no-array-prototype-includes -- detection\n  return [, 1].includes(undefined, 1);\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE || BROKEN_ON_SPARSE_WITH_FROM_INDEX }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n\n/***/ },\n\n/***/ 4114\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar toObject = __webpack_require__(8981);\nvar lengthOfArrayLike = __webpack_require__(6198);\nvar setArrayLength = __webpack_require__(4527);\nvar doesNotExceedSafeInteger = __webpack_require__(6837);\nvar fails = __webpack_require__(9039);\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n  return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).push();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  push: function push(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    doesNotExceedSafeInteger(len + argCount);\n    for (var i = 0; i < argCount; i++) {\n      O[len] = arguments[i];\n      len++;\n    }\n    setArrayLength(O, len);\n    return len;\n  }\n});\n\n\n/***/ },\n\n/***/ 8111\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar anInstance = __webpack_require__(679);\nvar anObject = __webpack_require__(8551);\nvar isCallable = __webpack_require__(4901);\nvar getPrototypeOf = __webpack_require__(2787);\nvar defineBuiltInAccessor = __webpack_require__(2106);\nvar createProperty = __webpack_require__(4659);\nvar fails = __webpack_require__(9039);\nvar hasOwn = __webpack_require__(9297);\nvar wellKnownSymbol = __webpack_require__(8227);\nvar IteratorPrototype = (__webpack_require__(7657).IteratorPrototype);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar IS_PURE = __webpack_require__(6395);\n\nvar CONSTRUCTOR = 'constructor';\nvar ITERATOR = 'Iterator';\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nvar $TypeError = TypeError;\nvar NativeIterator = globalThis[ITERATOR];\n\n// FF56- have non-standard global helper `Iterator`\nvar FORCED = IS_PURE\n  || !isCallable(NativeIterator)\n  || NativeIterator.prototype !== IteratorPrototype\n  // FF44- non-standard `Iterator` passes previous tests\n  || !fails(function () { NativeIterator({}); });\n\nvar IteratorConstructor = function Iterator() {\n  anInstance(this, IteratorPrototype);\n  if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError('Abstract class Iterator not directly constructable');\n};\n\nvar defineIteratorPrototypeAccessor = function (key, value) {\n  if (DESCRIPTORS) {\n    defineBuiltInAccessor(IteratorPrototype, key, {\n      configurable: true,\n      get: function () {\n        return value;\n      },\n      set: function (replacement) {\n        anObject(this);\n        if (this === IteratorPrototype) throw new $TypeError(\"You can't redefine this property\");\n        if (hasOwn(this, key)) this[key] = replacement;\n        else createProperty(this, key, replacement);\n      }\n    });\n  } else IteratorPrototype[key] = value;\n};\n\nif (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);\n\nif (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {\n  defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);\n}\n\nIteratorConstructor.prototype = IteratorPrototype;\n\n// `Iterator` constructor\n// https://tc39.es/ecma262/#sec-iterator\n$({ global: true, constructor: true, forced: FORCED }, {\n  Iterator: IteratorConstructor\n});\n\n\n/***/ },\n\n/***/ 9314\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar notANaN = __webpack_require__(4149);\nvar toPositiveInteger = __webpack_require__(9590);\nvar iteratorClose = __webpack_require__(9539);\nvar createIteratorProxy = __webpack_require__(9462);\nvar iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\nvar IS_PURE = __webpack_require__(6395);\n\nvar DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('drop', 0);\nvar dropWithoutClosingOnEarlyError = !IS_PURE && !DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('drop', RangeError);\n\nvar FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var next = this.next;\n  var result, done;\n  while (this.remaining) {\n    this.remaining--;\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n  }\n  result = anObject(call(next, iterator));\n  done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.drop` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.drop\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  drop: function drop(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (dropWithoutClosingOnEarlyError) return call(dropWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n\n\n/***/ },\n\n/***/ 1148\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar iterate = __webpack_require__(2652);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\nvar everyWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('every', TypeError);\n\n// `Iterator.prototype.every` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.every\n$({ target: 'Iterator', proto: true, real: true, forced: everyWithoutClosingOnEarlyError }, {\n  every: function every(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (everyWithoutClosingOnEarlyError) return call(everyWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return !iterate(record, function (value, stop) {\n      if (!predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n\n\n/***/ },\n\n/***/ 2489\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar createIteratorProxy = __webpack_require__(9462);\nvar callWithSafeIterationClosing = __webpack_require__(6319);\nvar IS_PURE = __webpack_require__(6395);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\nvar FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('filter', function () { /* empty */ });\nvar filterWithoutClosingOnEarlyError = !IS_PURE && !FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('filter', TypeError);\n\nvar FORCED = IS_PURE || FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR || filterWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var predicate = this.predicate;\n  var next = this.next;\n  var result, done, value;\n  while (true) {\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n    value = result.value;\n    if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;\n  }\n});\n\n// `Iterator.prototype.filter` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.filter\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  filter: function filter(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (filterWithoutClosingOnEarlyError) return call(filterWithoutClosingOnEarlyError, this, predicate);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      predicate: predicate\n    });\n  }\n});\n\n\n/***/ },\n\n/***/ 116\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar iterate = __webpack_require__(2652);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\nvar findWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('find', TypeError);\n\n// `Iterator.prototype.find` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.find\n$({ target: 'Iterator', proto: true, real: true, forced: findWithoutClosingOnEarlyError }, {\n  find: function find(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (findWithoutClosingOnEarlyError) return call(findWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop(value);\n    }, { IS_RECORD: true, INTERRUPTED: true }).result;\n  }\n});\n\n\n/***/ },\n\n/***/ 531\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar getIteratorFlattenable = __webpack_require__(8646);\nvar createIteratorProxy = __webpack_require__(9462);\nvar iteratorClose = __webpack_require__(9539);\nvar IS_PURE = __webpack_require__(6395);\nvar iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\n// Should not throw an error for an iterator without `return` method. Fixed in Safari 26.2\n// https://bugs.webkit.org/show_bug.cgi?id=297532\nfunction throwsOnIteratorWithoutReturn() {\n  try {\n    // eslint-disable-next-line es/no-map, es/no-iterator, es/no-iterator-prototype-flatmap -- required for testing\n    var it = Iterator.prototype.flatMap.call(new Map([[4, 5]]).entries(), function (v) { return v; });\n    it.next();\n    it['return']();\n  } catch (error) {\n    return true;\n  }\n}\n\nvar FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE\n  && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });\nvar flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);\n\nvar FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError\n  || throwsOnIteratorWithoutReturn();\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var mapper = this.mapper;\n  var result, inner;\n\n  while (true) {\n    if (inner = this.inner) try {\n      result = anObject(call(inner.next, inner.iterator));\n      if (!result.done) return result.value;\n      this.inner = null;\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n\n    result = anObject(call(this.next, iterator));\n\n    if (this.done = !!result.done) return;\n\n    try {\n      this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false);\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n  }\n});\n\n// `Iterator.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.flatmap\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  flatMap: function flatMap(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (flatMapWithoutClosingOnEarlyError) return call(flatMapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper,\n      inner: null\n    });\n  }\n});\n\n\n/***/ },\n\n/***/ 7588\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar iterate = __webpack_require__(2652);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\nvar forEachWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('forEach', TypeError);\n\n// `Iterator.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.foreach\n$({ target: 'Iterator', proto: true, real: true, forced: forEachWithoutClosingOnEarlyError }, {\n  forEach: function forEach(fn) {\n    anObject(this);\n    try {\n      aCallable(fn);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (forEachWithoutClosingOnEarlyError) return call(forEachWithoutClosingOnEarlyError, this, fn);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    iterate(record, function (value) {\n      fn(value, counter++);\n    }, { IS_RECORD: true });\n  }\n});\n\n\n/***/ },\n\n/***/ 1701\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar createIteratorProxy = __webpack_require__(9462);\nvar callWithSafeIterationClosing = __webpack_require__(6319);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\nvar IS_PURE = __webpack_require__(6395);\n\nvar MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('map', function () { /* empty */ });\nvar mapWithoutClosingOnEarlyError = !IS_PURE && !MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('map', TypeError);\n\nvar FORCED = IS_PURE || MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || mapWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);\n});\n\n// `Iterator.prototype.map` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.map\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  map: function map(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (mapWithoutClosingOnEarlyError) return call(mapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper\n    });\n  }\n});\n\n\n/***/ },\n\n/***/ 3579\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar iterate = __webpack_require__(2652);\nvar aCallable = __webpack_require__(9306);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\n\nvar someWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('some', TypeError);\n\n// `Iterator.prototype.some` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.some\n$({ target: 'Iterator', proto: true, real: true, forced: someWithoutClosingOnEarlyError }, {\n  some: function some(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (someWithoutClosingOnEarlyError) return call(someWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n\n\n/***/ },\n\n/***/ 4972\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar call = __webpack_require__(9565);\nvar anObject = __webpack_require__(8551);\nvar getIteratorDirect = __webpack_require__(1767);\nvar notANaN = __webpack_require__(4149);\nvar toPositiveInteger = __webpack_require__(9590);\nvar createIteratorProxy = __webpack_require__(9462);\nvar iteratorClose = __webpack_require__(9539);\nvar iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);\nvar iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);\nvar IS_PURE = __webpack_require__(6395);\n\nvar TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('take', 1);\nvar takeWithoutClosingOnEarlyError = !IS_PURE && !TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('take', RangeError);\n\nvar FORCED = IS_PURE || TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR || takeWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  if (!this.remaining--) {\n    this.done = true;\n    return iteratorClose(iterator, 'normal', undefined);\n  }\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.take` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.take\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  take: function take(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (takeWithoutClosingOnEarlyError) return call(takeWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n\n\n/***/ },\n\n/***/ 9112\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar globalThis = __webpack_require__(4576);\nvar getBuiltIn = __webpack_require__(7751);\nvar uncurryThis = __webpack_require__(9504);\nvar call = __webpack_require__(9565);\nvar isCallable = __webpack_require__(4901);\nvar isObject = __webpack_require__(34);\nvar isArray = __webpack_require__(4376);\nvar hasOwn = __webpack_require__(9297);\nvar toString = __webpack_require__(655);\nvar lengthOfArrayLike = __webpack_require__(6198);\nvar createProperty = __webpack_require__(4659);\nvar fails = __webpack_require__(9039);\nvar parseJSONString = __webpack_require__(8235);\nvar NATIVE_SYMBOL = __webpack_require__(4495);\n\nvar JSON = globalThis.JSON;\nvar Number = globalThis.Number;\nvar SyntaxError = globalThis.SyntaxError;\nvar nativeParse = JSON && JSON.parse;\nvar enumerableOwnProperties = getBuiltIn('Object', 'keys');\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar at = uncurryThis(''.charAt);\nvar slice = uncurryThis(''.slice);\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis([].push);\n\nvar IS_DIGIT = /^\\d$/;\nvar IS_NON_ZERO_DIGIT = /^[1-9]$/;\nvar IS_NUMBER_START = /^[\\d-]$/;\nvar IS_WHITESPACE = /^[\\t\\n\\r ]$/;\n\nvar PRIMITIVE = 0;\nvar OBJECT = 1;\n\nvar $parse = function (source, reviver) {\n  source = toString(source);\n  var context = new Context(source, 0, '');\n  var root = context.parse();\n  var value = root.value;\n  var endIndex = context.skip(IS_WHITESPACE, root.end);\n  if (endIndex < source.length) {\n    throw new SyntaxError('Unexpected extra character: \"' + at(source, endIndex) + '\" after the parsed data at: ' + endIndex);\n  }\n  return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value;\n};\n\nvar internalize = function (holder, name, reviver, node) {\n  var val = holder[name];\n  var unmodified = node && val === node.value;\n  var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {};\n  var elementRecordsLen, keys, len, i, P;\n  if (isObject(val)) {\n    var nodeIsArray = isArray(val);\n    var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {};\n    if (nodeIsArray) {\n      elementRecordsLen = nodes.length;\n      len = lengthOfArrayLike(val);\n      for (i = 0; i < len; i++) {\n        internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined));\n      }\n    } else {\n      keys = enumerableOwnProperties(val);\n      len = lengthOfArrayLike(keys);\n      for (i = 0; i < len; i++) {\n        P = keys[i];\n        internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined));\n      }\n    }\n  }\n  return call(reviver, holder, name, val, context);\n};\n\nvar internalizeProperty = function (object, key, value) {\n  if (DESCRIPTORS) {\n    var descriptor = getOwnPropertyDescriptor(object, key);\n    if (descriptor && !descriptor.configurable) return;\n  }\n  if (value === undefined) delete object[key];\n  else createProperty(object, key, value);\n};\n\nvar Node = function (value, end, source, nodes) {\n  this.value = value;\n  this.end = end;\n  this.source = source;\n  this.nodes = nodes;\n};\n\nvar Context = function (source, index) {\n  this.source = source;\n  this.index = index;\n};\n\n// https://www.json.org/json-en.html\nContext.prototype = {\n  fork: function (nextIndex) {\n    return new Context(this.source, nextIndex);\n  },\n  parse: function () {\n    var source = this.source;\n    var i = this.skip(IS_WHITESPACE, this.index);\n    var fork = this.fork(i);\n    var chr = at(source, i);\n    if (exec(IS_NUMBER_START, chr)) return fork.number();\n    switch (chr) {\n      case '{':\n        return fork.object();\n      case '[':\n        return fork.array();\n      case '\"':\n        return fork.string();\n      case 't':\n        return fork.keyword(true);\n      case 'f':\n        return fork.keyword(false);\n      case 'n':\n        return fork.keyword(null);\n    } throw new SyntaxError('Unexpected character: \"' + chr + '\" at: ' + i);\n  },\n  node: function (type, value, start, end, nodes) {\n    return new Node(value, end, type ? null : slice(this.source, start, end), nodes);\n  },\n  object: function () {\n    var source = this.source;\n    var i = this.index + 1;\n    var expectKeypair = false;\n    var object = {};\n    var nodes = {};\n    var closed = false;\n    while (i < source.length) {\n      i = this.until(['\"', '}'], i);\n      if (at(source, i) === '}' && !expectKeypair) {\n        i++;\n        closed = true;\n        break;\n      }\n      // Parsing the key\n      var result = this.fork(i).string();\n      var key = result.value;\n      i = result.end;\n      i = this.until([':'], i) + 1;\n      // Parsing value\n      i = this.skip(IS_WHITESPACE, i);\n      result = this.fork(i).parse();\n      createProperty(nodes, key, result);\n      createProperty(object, key, result.value);\n      i = this.until([',', '}'], result.end);\n      var chr = at(source, i);\n      if (chr === ',') {\n        expectKeypair = true;\n        i++;\n      } else if (chr === '}') {\n        i++;\n        closed = true;\n        break;\n      }\n    }\n    if (!closed) throw new SyntaxError('Unterminated object at: ' + i);\n    return this.node(OBJECT, object, this.index, i, nodes);\n  },\n  array: function () {\n    var source = this.source;\n    var i = this.index + 1;\n    var expectElement = false;\n    var array = [];\n    var nodes = [];\n    var closed = false;\n    while (i < source.length) {\n      i = this.skip(IS_WHITESPACE, i);\n      if (at(source, i) === ']' && !expectElement) {\n        i++;\n        closed = true;\n        break;\n      }\n      var result = this.fork(i).parse();\n      push(nodes, result);\n      push(array, result.value);\n      i = this.until([',', ']'], result.end);\n      if (at(source, i) === ',') {\n        expectElement = true;\n        i++;\n      } else if (at(source, i) === ']') {\n        i++;\n        closed = true;\n        break;\n      }\n    }\n    if (!closed) throw new SyntaxError('Unterminated array at: ' + i);\n    return this.node(OBJECT, array, this.index, i, nodes);\n  },\n  string: function () {\n    var index = this.index;\n    var parsed = parseJSONString(this.source, this.index + 1);\n    return this.node(PRIMITIVE, parsed.value, index, parsed.end);\n  },\n  number: function () {\n    var source = this.source;\n    var startIndex = this.index;\n    var i = startIndex;\n    if (at(source, i) === '-') i++;\n    if (at(source, i) === '0') i++;\n    else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, i + 1);\n    else throw new SyntaxError('Failed to parse number at: ' + i);\n    if (at(source, i) === '.') {\n      var fractionStartIndex = i + 1;\n      i = this.skip(IS_DIGIT, fractionStartIndex);\n      if (fractionStartIndex === i) throw new SyntaxError(\"Failed to parse number's fraction at: \" + i);\n    }\n    if (at(source, i) === 'e' || at(source, i) === 'E') {\n      i++;\n      if (at(source, i) === '+' || at(source, i) === '-') i++;\n      var exponentStartIndex = i;\n      i = this.skip(IS_DIGIT, i);\n      if (exponentStartIndex === i) throw new SyntaxError(\"Failed to parse number's exponent value at: \" + i);\n    }\n    return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);\n  },\n  keyword: function (value) {\n    var keyword = '' + value;\n    var index = this.index;\n    var endIndex = index + keyword.length;\n    if (slice(this.source, index, endIndex) !== keyword) throw new SyntaxError('Failed to parse value at: ' + index);\n    return this.node(PRIMITIVE, value, index, endIndex);\n  },\n  skip: function (regex, i) {\n    var source = this.source;\n    for (; i < source.length; i++) if (!exec(regex, at(source, i))) break;\n    return i;\n  },\n  until: function (array, i) {\n    i = this.skip(IS_WHITESPACE, i);\n    var chr = at(this.source, i);\n    for (var j = 0; j < array.length; j++) if (array[j] === chr) return i;\n    throw new SyntaxError('Unexpected character: \"' + chr + '\" at: ' + i);\n  }\n};\n\nvar NO_SOURCE_SUPPORT = fails(function () {\n  var unsafeInt = '9007199254740993';\n  var source;\n  nativeParse(unsafeInt, function (key, value, context) {\n    source = context.source;\n  });\n  return source !== unsafeInt;\n});\n\nvar PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () {\n  // Safari 9 bug\n  return 1 / nativeParse('-0 \\t') !== -Infinity;\n});\n\n// `JSON.parse` method\n// https://tc39.es/ecma262/#sec-json.parse\n// https://github.com/tc39/proposal-json-parse-with-source\n$({ target: 'JSON', stat: true, forced: NO_SOURCE_SUPPORT }, {\n  parse: function parse(text, reviver) {\n    return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver);\n  }\n});\n\n\n/***/ },\n\n/***/ 3110\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar getBuiltIn = __webpack_require__(7751);\nvar apply = __webpack_require__(8745);\nvar call = __webpack_require__(9565);\nvar uncurryThis = __webpack_require__(9504);\nvar fails = __webpack_require__(9039);\nvar isArray = __webpack_require__(4376);\nvar isCallable = __webpack_require__(4901);\nvar isRawJSON = __webpack_require__(5810);\nvar isSymbol = __webpack_require__(757);\nvar classof = __webpack_require__(2195);\nvar toString = __webpack_require__(655);\nvar arraySlice = __webpack_require__(7680);\nvar parseJSONString = __webpack_require__(8235);\nvar uid = __webpack_require__(3392);\nvar NATIVE_SYMBOL = __webpack_require__(4495);\nvar NATIVE_RAW_JSON = __webpack_require__(7819);\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar slice = uncurryThis(''.slice);\nvar push = uncurryThis([].push);\nvar numberToString = uncurryThis(1.1.toString);\n\nvar surrogates = /[\\uD800-\\uDFFF]/g;\nvar leadingSurrogates = /^[\\uD800-\\uDBFF]$/;\nvar trailingSurrogates = /^[\\uDC00-\\uDFFF]$/;\n\nvar MARK = uid();\nvar MARK_LENGTH = MARK.length;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n  var symbol = getBuiltIn('Symbol')('stringify detection');\n  // MS Edge converts symbol values to JSON as {}\n  return $stringify([symbol]) !== '[null]'\n    // WebKit converts symbol values to JSON as null\n    || $stringify({ a: symbol }) !== '{}'\n    // V8 throws on boxed symbols\n    || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithProperSymbolsConversion = WRONG_SYMBOLS_CONVERSION ? function (it, replacer) {\n  var args = arraySlice(arguments);\n  var $replacer = getReplacerFunction(replacer);\n  if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n  args[1] = function (key, value) {\n    // some old implementations (like WebKit) could pass numbers as keys\n    if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n    if (!isSymbol(value)) return value;\n  };\n  return apply($stringify, null, args);\n} : $stringify;\n\nvar fixIllFormedJSON = function (match, offset, string) {\n  var prev = charAt(string, offset - 1);\n  var next = charAt(string, offset + 1);\n  if (\n    (exec(leadingSurrogates, match) && !exec(trailingSurrogates, next)) ||\n    (exec(trailingSurrogates, match) && !exec(leadingSurrogates, prev))\n  ) {\n    return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n  } return match;\n};\n\nvar getReplacerFunction = function (replacer) {\n  if (isCallable(replacer)) return replacer;\n  if (!isArray(replacer)) return;\n  var rawLength = replacer.length;\n  var keys = [];\n  for (var i = 0; i < rawLength; i++) {\n    var element = replacer[i];\n    if (typeof element == 'string') push(keys, element);\n    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n  }\n  var keysLength = keys.length;\n  var root = true;\n  return function (key, value) {\n    if (root) {\n      root = false;\n      return value;\n    }\n    if (isArray(this)) return value;\n    for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n  };\n};\n\n// `JSON.stringify` method\n// https://tc39.es/ecma262/#sec-json.stringify\n// https://github.com/tc39/proposal-json-parse-with-source\nif ($stringify) $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE || !NATIVE_RAW_JSON }, {\n  stringify: function stringify(text, replacer, space) {\n    var replacerFunction = getReplacerFunction(replacer);\n    var rawStrings = [];\n\n    var json = stringifyWithProperSymbolsConversion(text, function (key, value) {\n      // some old implementations (like WebKit) could pass numbers as keys\n      var v = isCallable(replacerFunction) ? call(replacerFunction, this, $String(key), value) : value;\n      return !NATIVE_RAW_JSON && isRawJSON(v) ? MARK + (push(rawStrings, v.rawJSON) - 1) : v;\n    }, space);\n\n    if (typeof json != 'string') return json;\n\n    if (ILL_FORMED_UNICODE) json = replace(json, surrogates, fixIllFormedJSON);\n\n    if (NATIVE_RAW_JSON) return json;\n\n    var result = '';\n    var length = json.length;\n\n    for (var i = 0; i < length; i++) {\n      var chr = charAt(json, i);\n      if (chr === '\"') {\n        var end = parseJSONString(json, ++i).end - 1;\n        var string = slice(json, i, end);\n        result += slice(string, 0, MARK_LENGTH) === MARK\n          ? rawStrings[slice(string, MARK_LENGTH)]\n          : '\"' + string + '\"';\n        i = end;\n      } else result += chr;\n    }\n\n    return result;\n  }\n});\n\n\n/***/ },\n\n/***/ 2731\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar aCallable = __webpack_require__(9306);\nvar MapHelpers = __webpack_require__(2248);\nvar IS_PURE = __webpack_require__(6395);\n\nvar get = MapHelpers.get;\nvar has = MapHelpers.has;\nvar set = MapHelpers.set;\n\n// `Map.prototype.getOrInsertComputed` method\n// https://tc39.es/ecma262/#sec-map.prototype.getorinsertcomputed\n$({ target: 'Map', proto: true, real: true, forced: IS_PURE }, {\n  getOrInsertComputed: function getOrInsertComputed(key, callbackfn) {\n    var hasKey = has(this, key);\n    aCallable(callbackfn);\n    if (hasKey) return get(this, key);\n    // CanonicalizeKeyedCollectionKey\n    if (key === 0 && 1 / key === -Infinity) key = 0;\n    var value = callbackfn(key);\n    set(this, key, value);\n    return value;\n  }\n});\n\n\n/***/ },\n\n/***/ 5367\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar MapHelpers = __webpack_require__(2248);\nvar IS_PURE = __webpack_require__(6395);\n\nvar get = MapHelpers.get;\nvar has = MapHelpers.has;\nvar set = MapHelpers.set;\n\n// `Map.prototype.getOrInsert` method\n// https://tc39.es/ecma262/#sec-map.prototype.getorinsert\n$({ target: 'Map', proto: true, real: true, forced: IS_PURE }, {\n  getOrInsert: function getOrInsert(key, value) {\n    if (has(this, key)) return get(this, key);\n    set(this, key, value);\n    return value;\n  }\n});\n\n\n/***/ },\n\n/***/ 3068\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\n// based on Shewchuk's algorithm for exactly floating point addition\n// adapted from https://github.com/tc39/proposal-math-sum/blob/3513d58323a1ae25560e8700aa5294500c6c9287/polyfill/polyfill.mjs\nvar $ = __webpack_require__(6518);\nvar uncurryThis = __webpack_require__(9504);\nvar iterate = __webpack_require__(2652);\n\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar $Infinity = Infinity;\nvar $NaN = NaN;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar push = uncurryThis([].push);\n\nvar POW_2_1023 = pow(2, 1023);\nvar MAX_SAFE_INTEGER = pow(2, 53) - 1; // 2 ** 53 - 1 === 9007199254740991\nvar MAX_DOUBLE = Number.MAX_VALUE; // 2 ** 1024 - 2 ** (1023 - 52) === 1.79769313486231570815e+308\nvar MAX_ULP = pow(2, 971); // 2 ** (1023 - 52) === 1.99584030953471981166e+292\n\nvar NOT_A_NUMBER = {};\nvar MINUS_INFINITY = {};\nvar PLUS_INFINITY = {};\nvar MINUS_ZERO = {};\nvar FINITE = {};\n\n// prerequisite: abs(x) >= abs(y)\nvar twosum = function (x, y) {\n  var hi = x + y;\n  var lo = y - (hi - x);\n  return { hi: hi, lo: lo };\n};\n\n// `Math.sumPrecise` method\n// https://tc39.es/ecma262/#sec-math.sumprecise\n$({ target: 'Math', stat: true }, {\n  // eslint-disable-next-line max-statements -- ok\n  sumPrecise: function sumPrecise(items) {\n    var numbers = [];\n    var count = 0;\n    var state = MINUS_ZERO;\n\n    iterate(items, function (n) {\n      if (++count > MAX_SAFE_INTEGER) throw new $RangeError('Maximum allowed index exceeded');\n      if (typeof n != 'number') throw new $TypeError('Value is not a number');\n      if (state !== NOT_A_NUMBER) {\n        // eslint-disable-next-line no-self-compare -- NaN check\n        if (n !== n) state = NOT_A_NUMBER;\n        else if (n === $Infinity) state = state === MINUS_INFINITY ? NOT_A_NUMBER : PLUS_INFINITY;\n        else if (n === -$Infinity) state = state === PLUS_INFINITY ? NOT_A_NUMBER : MINUS_INFINITY;\n        else if ((n !== 0 || (1 / n) === $Infinity) && (state === MINUS_ZERO || state === FINITE)) {\n          state = FINITE;\n          push(numbers, n);\n        }\n      }\n    });\n\n    switch (state) {\n      case NOT_A_NUMBER: return $NaN;\n      case MINUS_INFINITY: return -$Infinity;\n      case PLUS_INFINITY: return $Infinity;\n      case MINUS_ZERO: return -0;\n    }\n\n    var partials = [];\n    var overflow = 0; // conceptually 2 ** 1024 times this value; the final partial is biased by this amount\n    var x, y, sum, hi, lo, tmp;\n\n    for (var i = 0; i < numbers.length; i++) {\n      x = numbers[i];\n      var actuallyUsedPartials = 0;\n      for (var j = 0; j < partials.length; j++) {\n        y = partials[j];\n        if (abs(x) < abs(y)) {\n          tmp = x;\n          x = y;\n          y = tmp;\n        }\n        sum = twosum(x, y);\n        hi = sum.hi;\n        lo = sum.lo;\n        if (abs(hi) === $Infinity) {\n          var sign = hi === $Infinity ? 1 : -1;\n          overflow += sign;\n\n          x = (x - (sign * POW_2_1023)) - (sign * POW_2_1023);\n          if (abs(x) < abs(y)) {\n            tmp = x;\n            x = y;\n            y = tmp;\n          }\n          sum = twosum(x, y);\n          hi = sum.hi;\n          lo = sum.lo;\n        }\n        if (lo !== 0) partials[actuallyUsedPartials++] = lo;\n        x = hi;\n      }\n      partials.length = actuallyUsedPartials;\n      if (x !== 0) push(partials, x);\n    }\n\n    // compute the exact sum of partials, stopping once we lose precision\n    var n = partials.length - 1;\n    hi = 0;\n    lo = 0;\n\n    if (overflow !== 0) {\n      var next = n >= 0 ? partials[n] : 0;\n      n--;\n      if (abs(overflow) > 1 || (overflow > 0 && next > 0) || (overflow < 0 && next < 0)) {\n        return overflow > 0 ? $Infinity : -$Infinity;\n      }\n      // here we actually have to do the arithmetic\n      // drop a factor of 2 so we can do it without overflow\n      // assert(abs(overflow) === 1)\n      sum = twosum(overflow * POW_2_1023, next / 2);\n      hi = sum.hi;\n      lo = sum.lo;\n      lo *= 2;\n      if (abs(2 * hi) === $Infinity) {\n        // rounding to the maximum value\n        if (hi > 0) {\n          return (hi === POW_2_1023 && lo === -(MAX_ULP / 2) && n >= 0 && partials[n] < 0) ? MAX_DOUBLE : $Infinity;\n        } return (hi === -POW_2_1023 && lo === (MAX_ULP / 2) && n >= 0 && partials[n] > 0) ? -MAX_DOUBLE : -$Infinity;\n      }\n\n      if (lo !== 0) {\n        partials[++n] = lo;\n        lo = 0;\n      }\n\n      hi *= 2;\n    }\n\n    while (n >= 0) {\n      sum = twosum(hi, partials[n--]);\n      hi = sum.hi;\n      lo = sum.lo;\n      if (lo !== 0) break;\n    }\n\n    if (n >= 0 && ((lo < 0 && partials[n] < 0) || (lo > 0 && partials[n] > 0))) {\n      y = lo * 2;\n      x = hi + y;\n      if (y === x - hi) hi = x;\n    }\n\n    return hi;\n  }\n});\n\n\n/***/ },\n\n/***/ 1689\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar apply = __webpack_require__(8745);\nvar slice = __webpack_require__(7680);\nvar newPromiseCapabilityModule = __webpack_require__(6043);\nvar aCallable = __webpack_require__(9306);\nvar perform = __webpack_require__(1103);\n\nvar Promise = globalThis.Promise;\n\nvar ACCEPT_ARGUMENTS = false;\n// Avoiding the use of polyfills of the previous iteration of this proposal\n// that does not accept arguments of the callback\nvar FORCED = !Promise || !Promise['try'] || perform(function () {\n  Promise['try'](function (argument) {\n    ACCEPT_ARGUMENTS = argument === 8;\n  }, 8);\n}).error || !ACCEPT_ARGUMENTS;\n\n// `Promise.try` method\n// https://tc39.es/ecma262/#sec-promise.try\n$({ target: 'Promise', stat: true, forced: FORCED }, {\n  'try': function (callbackfn /* , ...args */) {\n    var args = arguments.length > 1 ? slice(arguments, 1) : [];\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    var result = perform(function () {\n      return apply(aCallable(callbackfn), undefined, args);\n    });\n    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n    return promiseCapability.promise;\n  }\n});\n\n\n/***/ },\n\n/***/ 4628\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar newPromiseCapabilityModule = __webpack_require__(6043);\n\n// `Promise.withResolvers` method\n// https://tc39.es/ecma262/#sec-promise.withResolvers\n$({ target: 'Promise', stat: true }, {\n  withResolvers: function withResolvers() {\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    return {\n      promise: promiseCapability.promise,\n      resolve: promiseCapability.resolve,\n      reject: promiseCapability.reject\n    };\n  }\n});\n\n\n/***/ },\n\n/***/ 7642\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar difference = __webpack_require__(3440);\nvar fails = __webpack_require__(9039);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {\n  return result.size === 0;\n});\n\nvar FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {\n  // https://bugs.webkit.org/show_bug.cgi?id=288595\n  var setLike = {\n    size: 1,\n    has: function () { return true; },\n    keys: function () {\n      var index = 0;\n      return {\n        next: function () {\n          var done = index++ > 1;\n          if (baseSet.has(1)) baseSet.clear();\n          return { done: done, value: 2 };\n        }\n      };\n    }\n  };\n  // eslint-disable-next-line es/no-set -- testing\n  var baseSet = new Set([1, 2, 3, 4]);\n  // eslint-disable-next-line es/no-set-prototype-difference -- testing\n  return baseSet.difference(setLike).size !== 3;\n});\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  difference: difference\n});\n\n\n/***/ },\n\n/***/ 8004\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar fails = __webpack_require__(9039);\nvar intersection = __webpack_require__(8750);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {\n  return result.size === 2 && result.has(1) && result.has(2);\n}) || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n\n\n/***/ },\n\n/***/ 3853\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar isDisjointFrom = __webpack_require__(4449);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isDisjointFrom: isDisjointFrom\n});\n\n\n/***/ },\n\n/***/ 5876\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar isSubsetOf = __webpack_require__(3838);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {\n  return result;\n});\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSubsetOf: isSubsetOf\n});\n\n\n/***/ },\n\n/***/ 2475\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar isSupersetOf = __webpack_require__(8527);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSupersetOf: isSupersetOf\n});\n\n\n/***/ },\n\n/***/ 5024\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar symmetricDifference = __webpack_require__(3650);\nvar setMethodGetKeysBeforeCloning = __webpack_require__(9835);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  symmetricDifference: symmetricDifference\n});\n\n\n/***/ },\n\n/***/ 1698\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar union = __webpack_require__(4204);\nvar setMethodGetKeysBeforeCloning = __webpack_require__(9835);\nvar setMethodAcceptSetLike = __webpack_require__(4916);\n\nvar FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  union: union\n});\n\n\n/***/ },\n\n/***/ 9577\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar ArrayBufferViewCore = __webpack_require__(4644);\nvar isBigIntArray = __webpack_require__(1108);\nvar lengthOfArrayLike = __webpack_require__(6198);\nvar toIntegerOrInfinity = __webpack_require__(1291);\nvar toBigInt = __webpack_require__(5854);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar $RangeError = RangeError;\n\nvar PROPER_ORDER = function () {\n  try {\n    // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\n  } catch (error) {\n    // some early implementations, like WebKit, does not follow the final semantic\n    // https://github.com/tc39/proposal-change-array-by-copy/pull/86\n    return error === 8;\n  }\n}();\n\n// Bug in WebKit. It should truncate a negative fractional index to zero, but instead throws an error\nvar THROW_ON_NEGATIVE_FRACTIONAL_INDEX = PROPER_ORDER && function () {\n  try {\n    // eslint-disable-next-line es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](-0.5, 1);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `%TypedArray%.prototype.with` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nexportTypedArrayMethod('with', { 'with': function (index, value) {\n  var O = aTypedArray(this);\n  var len = lengthOfArrayLike(O);\n  var relativeIndex = toIntegerOrInfinity(index);\n  var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n  var numericValue = isBigIntArray(O) ? toBigInt(value) : +value;\n  if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n  var A = new (getTypedArrayConstructor(O))(len);\n  var k = 0;\n  for (; k < len; k++) A[k] = k === actualIndex ? numericValue : O[k];\n  return A;\n} }['with'], !PROPER_ORDER || THROW_ON_NEGATIVE_FRACTIONAL_INDEX);\n\n\n/***/ },\n\n/***/ 5213\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar arrayFromConstructorAndList = __webpack_require__(5370);\nvar $fromBase64 = __webpack_require__(9143);\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.fromBase64 || !function () {\n  // Webkit not throw an error on odd length string\n  try {\n    Uint8Array.fromBase64('a');\n    return;\n  } catch (error) { /* empty */ }\n  try {\n    Uint8Array.fromBase64('', null);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `Uint8Array.fromBase64` method\n// https://tc39.es/ecma262/#sec-uint8array.frombase64\nif (Uint8Array) $({ target: 'Uint8Array', stat: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  fromBase64: function fromBase64(string /* , options */) {\n    var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, null, 0x1FFFFFFFFFFFFF);\n    return arrayFromConstructorAndList(Uint8Array, result.bytes);\n  }\n});\n\n\n/***/ },\n\n/***/ 6632\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar $fromBase64 = __webpack_require__(9143);\nvar anUint8Array = __webpack_require__(4154);\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.setFromBase64 || !function () {\n  var target = new Uint8Array([255, 255, 255, 255, 255]);\n  try {\n    target.setFromBase64('', null);\n    return;\n  } catch (error) { /* empty */ }\n  // Webkit not throw an error on odd length string\n  try {\n    target.setFromBase64('a');\n    return;\n  } catch (error) { /* empty */ }\n  try {\n    target.setFromBase64('MjYyZg===');\n  } catch (error) {\n    return target[0] === 50 && target[1] === 54 && target[2] === 50 && target[3] === 255 && target[4] === 255;\n  }\n}();\n\n// `Uint8Array.prototype.setFromBase64` method\n// https://tc39.es/ecma262/#sec-uint8array.prototype.setfrombase64\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  setFromBase64: function setFromBase64(string /* , options */) {\n    anUint8Array(this);\n\n    var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, this, this.length);\n\n    return { read: result.read, written: result.written };\n  }\n});\n\n\n/***/ },\n\n/***/ 4226\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar aString = __webpack_require__(3463);\nvar anUint8Array = __webpack_require__(4154);\nvar notDetached = __webpack_require__(5169);\nvar $fromHex = __webpack_require__(2303);\n\n// Should not throw an error on length-tracking views over ResizableArrayBuffer\n// https://issues.chromium.org/issues/454630441\nfunction throwsOnLengthTrackingView() {\n  try {\n    // eslint-disable-next-line es/no-resizable-and-growable-arraybuffers -- required for testing\n    var rab = new ArrayBuffer(16, { maxByteLength: 1024 });\n    // eslint-disable-next-line es/no-uint8array-prototype-setfromhex, es/no-typed-arrays -- required for testing\n    new Uint8Array(rab).setFromHex('cafed00d');\n  } catch (error) {\n    return true;\n  }\n}\n\n// `Uint8Array.prototype.setFromHex` method\n// https://tc39.es/ecma262/#sec-uint8array.prototype.setfromhex\nif (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true, forced: throwsOnLengthTrackingView() }, {\n  setFromHex: function setFromHex(string) {\n    anUint8Array(this);\n    aString(string);\n    notDetached(this.buffer);\n    var read = $fromHex(string, this).read;\n    return { read: read, written: read / 2 };\n  }\n});\n\n\n/***/ },\n\n/***/ 9486\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar uncurryThis = __webpack_require__(9504);\nvar anObjectOrUndefined = __webpack_require__(3972);\nvar anUint8Array = __webpack_require__(4154);\nvar notDetached = __webpack_require__(5169);\nvar base64Map = __webpack_require__(2804);\nvar getAlphabetOption = __webpack_require__(944);\n\nvar base64Alphabet = base64Map.i2c;\nvar base64UrlAlphabet = base64Map.i2cUrl;\n\nvar charAt = uncurryThis(''.charAt);\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.toBase64 || !function () {\n  try {\n    var target = new Uint8Array();\n    target.toBase64(null);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `Uint8Array.prototype.toBase64` method\n// https://tc39.es/ecma262/#sec-uint8array.prototype.tobase64\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  toBase64: function toBase64(/* options */) {\n    var array = anUint8Array(this);\n    var options = arguments.length ? anObjectOrUndefined(arguments[0]) : undefined;\n    var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;\n    var omitPadding = !!options && !!options.omitPadding;\n    notDetached(this.buffer);\n\n    var result = '';\n    var i = 0;\n    var length = array.length;\n    var triplet;\n\n    var at = function (shift) {\n      return charAt(alphabet, (triplet >> (6 * shift)) & 63);\n    };\n\n    for (; i + 2 < length; i += 3) {\n      triplet = (array[i] << 16) + (array[i + 1] << 8) + array[i + 2];\n      result += at(3) + at(2) + at(1) + at(0);\n    }\n    if (i + 2 === length) {\n      triplet = (array[i] << 16) + (array[i + 1] << 8);\n      result += at(3) + at(2) + at(1) + (omitPadding ? '' : '=');\n    } else if (i + 1 === length) {\n      triplet = array[i] << 16;\n      result += at(3) + at(2) + (omitPadding ? '' : '==');\n    }\n\n    return result;\n  }\n});\n\n\n/***/ },\n\n/***/ 456\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar uncurryThis = __webpack_require__(9504);\nvar anUint8Array = __webpack_require__(4154);\nvar notDetached = __webpack_require__(5169);\n\nvar numberToString = uncurryThis(1.1.toString);\nvar join = uncurryThis([].join);\nvar $Array = Array;\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.toHex || !(function () {\n  try {\n    var target = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255]);\n    return target.toHex() === 'ffffffffffffffff';\n  } catch (error) {\n    return false;\n  }\n})();\n\n// `Uint8Array.prototype.toHex` method\n// https://tc39.es/ecma262/#sec-uint8array.prototype.tohex\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  toHex: function toHex() {\n    anUint8Array(this);\n    notDetached(this.buffer);\n    var result = $Array(this.length);\n    for (var i = 0, length = this.length; i < length; i++) {\n      var hex = numberToString(this[i], 16);\n      result[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n    return join(result, '');\n  }\n});\n\n\n/***/ },\n\n/***/ 9452\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar aCallable = __webpack_require__(9306);\nvar aWeakMap = __webpack_require__(6557);\nvar aWeakKey = __webpack_require__(4328);\nvar WeakMapHelpers = __webpack_require__(4995);\nvar IS_PURE = __webpack_require__(6395);\n\nvar get = WeakMapHelpers.get;\nvar has = WeakMapHelpers.has;\nvar set = WeakMapHelpers.set;\n\nvar FORCED = IS_PURE || !function () {\n  try {\n    // eslint-disable-next-line es/no-weak-map, no-throw-literal -- testing\n    if (WeakMap.prototype.getOrInsertComputed) new WeakMap().getOrInsertComputed(1, function () { throw 1; });\n  } catch (error) {\n    // FF144 Nightly - Beta 3 bug\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1988369\n    return error instanceof TypeError;\n  }\n}();\n\n// `WeakMap.prototype.getOrInsertComputed` method\n// https://tc39.es/ecma262/#sec-weakmap.prototype.getorinsertcomputed\n$({ target: 'WeakMap', proto: true, real: true, forced: FORCED }, {\n  getOrInsertComputed: function getOrInsertComputed(key, callbackfn) {\n    if (!IS_PURE) aWeakMap(this);\n    aWeakKey(key);\n    aCallable(callbackfn);\n    if (has(this, key)) return get(this, key);\n    var value = callbackfn(key);\n    set(this, key, value);\n    return value;\n  }\n});\n\n\n/***/ },\n\n/***/ 8454\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar WeakMapHelpers = __webpack_require__(4995);\nvar IS_PURE = __webpack_require__(6395);\n\nvar get = WeakMapHelpers.get;\nvar has = WeakMapHelpers.has;\nvar set = WeakMapHelpers.set;\n\n// `WeakMap.prototype.getOrInsert` method\n// https://tc39.es/ecma262/#sec-weakmap.prototype.getorinsert\n$({ target: 'WeakMap', proto: true, real: true, forced: IS_PURE }, {\n  getOrInsert: function getOrInsert(key, value) {\n    if (has(this, key)) return get(this, key);\n    set(this, key, value);\n    return value;\n  }\n});\n\n\n/***/ },\n\n/***/ 4979\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar globalThis = __webpack_require__(4576);\nvar getBuiltIn = __webpack_require__(7751);\nvar createPropertyDescriptor = __webpack_require__(6980);\nvar defineProperty = (__webpack_require__(4913).f);\nvar hasOwn = __webpack_require__(9297);\nvar anInstance = __webpack_require__(679);\nvar inheritIfRequired = __webpack_require__(3167);\nvar normalizeStringArgument = __webpack_require__(2603);\nvar DOMExceptionConstants = __webpack_require__(5002);\nvar clearErrorStack = __webpack_require__(6193);\nvar DESCRIPTORS = __webpack_require__(3724);\nvar IS_PURE = __webpack_require__(6395);\n\nvar DOM_EXCEPTION = 'DOMException';\nvar Error = getBuiltIn('Error');\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION);\n\nvar $DOMException = function DOMException() {\n  anInstance(this, DOMExceptionPrototype);\n  var argumentsLength = arguments.length;\n  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\n  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\n  var that = new NativeDOMException(message, name);\n  var error = new Error(message);\n  error.name = DOM_EXCEPTION;\n  defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\n  inheritIfRequired(that, this, $DOMException);\n  return that;\n};\n\nvar DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;\n\nvar ERROR_HAS_STACK = 'stack' in new Error(DOM_EXCEPTION);\nvar DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(globalThis, DOM_EXCEPTION);\n\n// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it\n// https://github.com/Jarred-Sumner/bun/issues/399\nvar BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);\n\nvar FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;\n\n// `DOMException` constructor patch for `.stack` where it's required\n// https://webidl.spec.whatwg.org/#es-DOMException-specialness\n$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic\n  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\n});\n\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\n\nif (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {\n  if (!IS_PURE) {\n    defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));\n  }\n\n  for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\n    var constant = DOMExceptionConstants[key];\n    var constantName = constant.s;\n    if (!hasOwn(PolyfilledDOMException, constantName)) {\n      defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));\n    }\n  }\n}\n\n\n/***/ },\n\n/***/ 5781\n(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar $ = __webpack_require__(6518);\nvar getBuiltIn = __webpack_require__(7751);\nvar validateArgumentsLength = __webpack_require__(2812);\nvar toString = __webpack_require__(655);\nvar USE_NATIVE_URL = __webpack_require__(7416);\n\nvar URL = getBuiltIn('URL');\n\n// `URL.parse` method\n// https://url.spec.whatwg.org/#dom-url-parse\n$({ target: 'URL', stat: true, forced: !USE_NATIVE_URL }, {\n  parse: function parse(url) {\n    var length = validateArgumentsLength(arguments.length, 1);\n    var urlString = toString(url);\n    var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);\n    try {\n      return new URL(urlString, base);\n    } catch (error) {\n      return null;\n    }\n  }\n});\n\n\n/***/ }\n\n/******/ });\n/************************************************************************/\n/******/ // The module cache\n/******/ var __webpack_module_cache__ = {};\n/******/ \n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n/******/ \t// Check if module is in cache\n/******/ \tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \tif (cachedModule !== undefined) {\n/******/ \t\treturn cachedModule.exports;\n/******/ \t}\n/******/ \t// Create a new module (and put it into the cache)\n/******/ \tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t// no module.id needed\n/******/ \t\t// no module.loaded needed\n/******/ \t\texports: {}\n/******/ \t};\n/******/ \n/******/ \t// Execute the module function\n/******/ \t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \n/******/ \t// Return the exports of the module\n/******/ \treturn module.exports;\n/******/ }\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.includes.js\nvar es_array_includes = __webpack_require__(4423);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.constructor.js\nvar es_iterator_constructor = __webpack_require__(8111);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.filter.js\nvar es_iterator_filter = __webpack_require__(2489);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.map.get-or-insert.js\nvar es_map_get_or_insert = __webpack_require__(5367);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.map.get-or-insert-computed.js\nvar es_map_get_or_insert_computed = __webpack_require__(2731);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.uint8-array.set-from-base64.js\nvar es_uint8_array_set_from_base64 = __webpack_require__(6632);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.uint8-array.set-from-hex.js\nvar es_uint8_array_set_from_hex = __webpack_require__(4226);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.uint8-array.to-base64.js\nvar es_uint8_array_to_base64 = __webpack_require__(9486);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.uint8-array.to-hex.js\nvar es_uint8_array_to_hex = __webpack_require__(456);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.parse.js\nvar web_url_parse = __webpack_require__(5781);\n;// ./src/shared/util.js\n\n\n\n\n\n\n\n\n\n\n\n\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\nconst BBOX_INIT = [Infinity, Infinity, -Infinity, -Infinity];\nconst F32_BBOX_INIT = new Float32Array(BBOX_INIT);\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  IS_EDITING: 0x80,\n  OPLIST: 0x100\n};\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3\n};\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15,\n  POPUP: 16,\n  SIGNATURE: 101,\n  COMMENT: 102\n};\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  INK_COLOR_AND_OPACITY: 24,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_THICKNESS: 32,\n  HIGHLIGHT_FREE: 33,\n  HIGHLIGHT_SHOW_ALL: 34,\n  DRAW_STEP: 41\n};\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800\n};\nconst MeshFigureType = (/* unused pure expression or super */ null && ({\n  TRIANGLES: 1,\n  LATTICE: 2,\n  PATCH: 3\n}));\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4\n};\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\n};\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26,\n  RICHMEDIA: 27\n};\nconst AnnotationReplyType = (/* unused pure expression or super */ null && ({\n  GROUP: \"Group\",\n  REPLY: \"R\"\n}));\nconst AnnotationRenditionOperation = (/* unused pure expression or super */ null && ({\n  PLAY_OR_RESUME: 0,\n  STOP: 1,\n  PAUSE: 2,\n  RESUME: 3,\n  PLAY: 4\n}));\nconst AnnotationFlag = (/* unused pure expression or super */ null && ({\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200\n}));\nconst AnnotationFieldFlag = (/* unused pure expression or super */ null && ({\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000\n}));\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nconst AnnotationActionEventType = (/* unused pure expression or super */ null && ({\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\"\n}));\nconst DocumentActionEventType = (/* unused pure expression or super */ null && ({\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\"\n}));\nconst PageActionEventType = (/* unused pure expression or super */ null && ({\n  O: \"PageOpen\",\n  C: \"PageClose\"\n}));\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nconst OPS = {\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91,\n  setStrokeTransparent: 92,\n  setFillTransparent: 93,\n  rawFillPath: 94\n};\nconst DrawOPS = {\n  moveTo: 0,\n  lineTo: 1,\n  curveTo: 2,\n  quadraticCurveTo: 3,\n  closePath: 4\n};\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nlet verbosity = VerbosityLevel.WARNINGS;\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\nfunction getVerbosityLevel() {\n  return verbosity;\n}\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.info(`Info: ${msg}`);\n  }\n}\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.warn(`Warning: ${msg}`);\n  }\n}\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  if (options && typeof url === \"string\") {\n    if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n      const dots = url.match(/\\./g);\n      if (dots?.length >= 2) {\n        url = `http://${url}`;\n      }\n    }\n    if (options.tryConvertEncoding) {\n      try {\n        url = stringToUTF8String(url);\n      } catch {}\n    }\n  }\n  const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\nfunction updateUrlHash(url, hash, allowRel = false) {\n  const res = URL.parse(url);\n  if (res) {\n    res.hash = hash;\n    return res.href;\n  }\n  if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n    return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n  }\n  return \"\";\n}\nfunction stripPath(str) {\n  return str.substring(str.lastIndexOf(\"/\") + 1);\n}\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\nconst BaseException = function BaseExceptionClosure() {\n  function BaseException(message, name) {\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n  return BaseException;\n}();\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\nclass ResponseException extends BaseException {\n  constructor(msg, status, missing) {\n    super(msg, \"ResponseException\");\n    this.status = status;\n    this.missing = missing;\n  }\n}\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\nclass FeatureTest {\n  static get isLittleEndian() {\n    const buffer8 = new Uint8Array(4);\n    buffer8[0] = 1;\n    const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n    return shadow(this, \"isLittleEndian\", view32[0] === 1);\n  }\n  static get isOffscreenCanvasSupported() {\n    return shadow(this, \"isOffscreenCanvasSupported\", typeof OffscreenCanvas !== \"undefined\");\n  }\n  static get isImageDecoderSupported() {\n    return shadow(this, \"isImageDecoderSupported\", typeof ImageDecoder !== \"undefined\");\n  }\n  static get isFloat16ArraySupported() {\n    return shadow(this, \"isFloat16ArraySupported\", typeof Float16Array !== \"undefined\");\n  }\n  static get isSanitizerSupported() {\n    return shadow(this, \"isSanitizerSupported\", typeof Sanitizer !== \"undefined\");\n  }\n  static get platform() {\n    const {\n      platform,\n      userAgent\n    } = navigator;\n    return shadow(this, \"platform\", {\n      isAndroid: userAgent.includes(\"Android\"),\n      isLinux: platform.includes(\"Linux\"),\n      isMac: platform.includes(\"Mac\"),\n      isWindows: platform.includes(\"Win\"),\n      isFirefox: userAgent.includes(\"Firefox\")\n    });\n  }\n  static get isCanvasFilterSupported() {\n    let ctx;\n    if (this.isOffscreenCanvasSupported) {\n      ctx = new OffscreenCanvas(1, 1).getContext(\"2d\");\n    } else if (typeof document !== \"undefined\") {\n      ctx = document.createElement(\"canvas\").getContext(\"2d\");\n    }\n    return shadow(this, \"isCanvasFilterSupported\", ctx?.filter !== undefined);\n  }\n  static get isAlphaColorInputSupported() {\n    if (typeof document === \"undefined\") {\n      return shadow(this, \"isAlphaColorInputSupported\", false);\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"color\";\n    input.setAttribute(\"alpha\", \"\");\n    input.value = \"#ff000080\";\n    return shadow(this, \"isAlphaColorInputSupported\", input.value !== \"#ff0000\");\n  }\n  static get isBackdropFilterSupported() {\n    return shadow(this, \"isBackdropFilterSupported\", typeof CSS !== \"undefined\" && CSS.supports(\"backdrop-filter\", \"blur(1px)\"));\n  }\n}\nclass Util {\n  static get hexNums() {\n    return shadow(this, \"hexNums\", Array.from(Array(256).keys(), n => n.toString(16).padStart(2, \"0\")));\n  }\n  static makeHexColor(r, g, b) {\n    return `#${this.hexNums[r]}${this.hexNums[g]}${this.hexNums[b]}`;\n  }\n  static transform(m1, m2) {\n    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\n  }\n  static multiplyByDOMMatrix(m, md) {\n    return [m[0] * md.a + m[2] * md.b, m[1] * md.a + m[3] * md.b, m[0] * md.c + m[2] * md.d, m[1] * md.c + m[3] * md.d, m[0] * md.e + m[2] * md.f + m[4], m[1] * md.e + m[3] * md.f + m[5]];\n  }\n  static applyTransform(p, m, pos = 0) {\n    const p0 = p[pos];\n    const p1 = p[pos + 1];\n    p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n    p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n  }\n  static applyTransformToBezier(p, transform, pos = 0) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    for (let i = 0; i < 6; i += 2) {\n      const pI = p[pos + i];\n      const pI1 = p[pos + i + 1];\n      p[pos + i] = pI * m0 + pI1 * m2 + m4;\n      p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n    }\n  }\n  static applyInverseTransform(p, m) {\n    const p0 = p[0];\n    const p1 = p[1];\n    const d = m[0] * m[3] - m[1] * m[2];\n    p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n  }\n  static axialAlignedBoundingBox(rect, transform, output) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    const r0 = rect[0];\n    const r1 = rect[1];\n    const r2 = rect[2];\n    const r3 = rect[3];\n    let a0 = m0 * r0 + m4;\n    let a2 = a0;\n    let a1 = m0 * r2 + m4;\n    let a3 = a1;\n    let b0 = m3 * r1 + m5;\n    let b2 = b0;\n    let b1 = m3 * r3 + m5;\n    let b3 = b1;\n    if (m1 !== 0 || m2 !== 0) {\n      const m1r0 = m1 * r0;\n      const m1r2 = m1 * r2;\n      const m2r1 = m2 * r1;\n      const m2r3 = m2 * r3;\n      a0 += m2r1;\n      a3 += m2r1;\n      a1 += m2r3;\n      a2 += m2r3;\n      b0 += m1r0;\n      b3 += m1r0;\n      b1 += m1r2;\n      b2 += m1r2;\n    }\n    output[0] = Math.min(output[0], a0, a1, a2, a3);\n    output[1] = Math.min(output[1], b0, b1, b2, b3);\n    output[2] = Math.max(output[2], a0, a1, a2, a3);\n    output[3] = Math.max(output[3], b0, b1, b2, b3);\n  }\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n  }\n  static singularValueDecompose2dScale(matrix, output) {\n    const m0 = matrix[0];\n    const m1 = matrix[1];\n    const m2 = matrix[2];\n    const m3 = matrix[3];\n    const a = m0 ** 2 + m1 ** 2;\n    const b = m0 * m2 + m1 * m3;\n    const c = m2 ** 2 + m3 ** 2;\n    const first = (a + c) / 2;\n    const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n    output[0] = Math.sqrt(first + second || 1);\n    output[1] = Math.sqrt(first - second || 1);\n  }\n  static normalizeRect(rect) {\n    const r = rect.slice(0);\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));\n    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));\n    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));\n    if (yLow > yHigh) {\n      return null;\n    }\n    return [xLow, yLow, xHigh, yHigh];\n  }\n  static pointBoundingBox(x, y, minMax) {\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n  static rectBoundingBox(x0, y0, x1, y1, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x1);\n    minMax[1] = Math.min(minMax[1], y0, y1);\n    minMax[2] = Math.max(minMax[2], x0, x1);\n    minMax[3] = Math.max(minMax[3], y0, y1);\n  }\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);\n      }\n      return;\n    }\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);\n  }\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x3);\n    minMax[1] = Math.min(minMax[1], y0, y3);\n    minMax[2] = Math.max(minMax[2], x0, x3);\n    minMax[3] = Math.max(minMax[3], y0, y3);\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);\n  }\n}\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    NormalizeRegex = /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2));\n}\nfunction getUuid() {\n  if (typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  crypto.getRandomValues(buf);\n  return bytesToString(buf);\n}\nfunction _isValidExplicitDest(validRef, validName, dest) {\n  if (!Array.isArray(dest) || dest.length < 2) {\n    return false;\n  }\n  const [page, zoom, ...args] = dest;\n  if (!validRef(page) && !Number.isInteger(page)) {\n    return false;\n  }\n  if (!validName(zoom)) {\n    return false;\n  }\n  const argsLen = args.length;\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (argsLen < 2 || argsLen > 3) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return argsLen === 0;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (argsLen > 1) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (argsLen !== 4) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (const arg of args) {\n    if (typeof arg === \"number\" || allowNull && arg === null) {\n      continue;\n    }\n    return false;\n  }\n  return true;\n}\nconst makeArr = () => [];\nconst makeMap = () => new Map();\nconst makeObj = () => Object.create(null);\nif (typeof Blob.prototype.bytes !== \"function\") {\n  Blob.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\nif (typeof Response.prototype.bytes !== \"function\") {\n  Response.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.map.js\nvar es_iterator_map = __webpack_require__(1701);\n;// ./src/shared/math_clamp.js\nfunction MathClamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\n\n;// ./src/display/page_viewport.js\n\nclass PageViewport {\n  constructor({\n    viewBox,\n    userUnit,\n    scale,\n    rotation,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  }) {\n    this.viewBox = viewBox;\n    this.userUnit = userUnit;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n    scale *= userUnit;\n    const centerX = (viewBox[2] + viewBox[0]) / 2;\n    const centerY = (viewBox[3] + viewBox[1]) / 2;\n    let rotateA, rotateB, rotateC, rotateD;\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n    }\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = (viewBox[3] - viewBox[1]) * scale;\n      height = (viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = (viewBox[2] - viewBox[0]) * scale;\n      height = (viewBox[3] - viewBox[1]) * scale;\n    }\n    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\n    this.width = width;\n    this.height = height;\n  }\n  get rawDims() {\n    const dims = this.viewBox;\n    return shadow(this, \"rawDims\", {\n      pageWidth: dims[2] - dims[0],\n      pageHeight: dims[3] - dims[1],\n      pageX: dims[0],\n      pageY: dims[1]\n    });\n  }\n  clone({\n    scale = this.scale,\n    rotation = this.rotation,\n    offsetX = this.offsetX,\n    offsetY = this.offsetY,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.viewBox.slice(),\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  convertToViewportPoint(x, y) {\n    const p = [x, y];\n    Util.applyTransform(p, this.transform);\n    return p;\n  }\n  convertToPdfPoint(x, y) {\n    const p = [x, y];\n    Util.applyInverseTransform(p, this.transform);\n    return p;\n  }\n}\n\n;// ./src/display/xfa_text.js\n\nclass XfaText {\n  static textContent(xfa) {\n    const items = [];\n    const output = {\n      items,\n      styles: Object.create(null)\n    };\n    function walk(node) {\n      if (!node) {\n        return;\n      }\n      let str = null;\n      const name = node.name;\n      if (name === \"#text\") {\n        str = node.value;\n      } else if (!XfaText.shouldBuildText(name)) {\n        return;\n      } else if (node?.attributes?.textContent) {\n        str = node.attributes.textContent;\n      } else if (node.value) {\n        str = node.value;\n      }\n      if (str !== null) {\n        items.push({\n          str\n        });\n      }\n      if (!node.children) {\n        return;\n      }\n      for (const child of node.children) {\n        walk(child);\n      }\n    }\n    walk(xfa);\n    return output;\n  }\n  static shouldBuildText(name) {\n    return !(name === \"textarea\" || name === \"input\" || name === \"option\" || name === \"select\");\n  }\n}\n\n;// ./src/display/xfa_layer.js\n\n\n\nclass XfaLayer {\n  static setupStorage(html, id, element, storage, intent) {\n    const storedData = storage.getValue(id, {\n      value: null\n    });\n    switch (element.name) {\n      case \"textarea\":\n        if (storedData.value !== null) {\n          html.textContent = storedData.value;\n        }\n        if (intent === \"print\") {\n          break;\n        }\n        html.addEventListener(\"input\", event => {\n          storage.setValue(id, {\n            value: event.target.value\n          });\n        });\n        break;\n      case \"input\":\n        if (element.attributes.type === \"radio\" || element.attributes.type === \"checkbox\") {\n          if (storedData.value === element.attributes.xfaOn) {\n            html.setAttribute(\"checked\", true);\n          } else if (storedData.value === element.attributes.xfaOff) {\n            html.removeAttribute(\"checked\");\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"change\", event => {\n            storage.setValue(id, {\n              value: event.target.checked ? event.target.getAttribute(\"xfaOn\") : event.target.getAttribute(\"xfaOff\")\n            });\n          });\n        } else {\n          if (storedData.value !== null) {\n            html.setAttribute(\"value\", storedData.value);\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"input\", event => {\n            storage.setValue(id, {\n              value: event.target.value\n            });\n          });\n        }\n        break;\n      case \"select\":\n        if (storedData.value !== null) {\n          html.setAttribute(\"value\", storedData.value);\n          for (const option of element.children) {\n            if (option.attributes.value === storedData.value) {\n              option.attributes.selected = true;\n            } else if (Object.hasOwn(option.attributes, \"selected\")) {\n              delete option.attributes.selected;\n            }\n          }\n        }\n        html.addEventListener(\"input\", event => {\n          const options = event.target.options;\n          const value = options.selectedIndex === -1 ? \"\" : options[options.selectedIndex].value;\n          storage.setValue(id, {\n            value\n          });\n        });\n        break;\n    }\n  }\n  static setAttributes({\n    html,\n    element,\n    storage = null,\n    intent,\n    linkService\n  }) {\n    const {\n      attributes\n    } = element;\n    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n    if (attributes.type === \"radio\") {\n      attributes.name = `${attributes.name}-${intent}`;\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n      if (value === null || value === undefined) {\n        continue;\n      }\n      switch (key) {\n        case \"class\":\n          if (value.length) {\n            html.setAttribute(key, value.join(\" \"));\n          }\n          break;\n        case \"dataId\":\n          break;\n        case \"id\":\n          html.setAttribute(\"data-element-id\", value);\n          break;\n        case \"style\":\n          Object.assign(html.style, value);\n          break;\n        case \"textContent\":\n          html.textContent = value;\n          break;\n        default:\n          if (!isHTMLAnchorElement || key !== \"href\" && key !== \"newWindow\") {\n            html.setAttribute(key, value);\n          }\n      }\n    }\n    if (isHTMLAnchorElement) {\n      linkService.addLinkAttributes(html, attributes.href, attributes.newWindow);\n    }\n    if (storage && attributes.dataId) {\n      this.setupStorage(html, attributes.dataId, element, storage);\n    }\n  }\n  static render(parameters) {\n    const storage = parameters.annotationStorage;\n    const linkService = parameters.linkService;\n    const root = parameters.xfaHtml;\n    const intent = parameters.intent || \"display\";\n    const rootHtml = document.createElement(root.name);\n    if (root.attributes) {\n      this.setAttributes({\n        html: rootHtml,\n        element: root,\n        intent,\n        linkService\n      });\n    }\n    const isNotForRichText = intent !== \"richText\";\n    const rootDiv = parameters.div;\n    rootDiv.append(rootHtml);\n    if (parameters.viewport) {\n      const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n      rootDiv.style.transform = transform;\n    }\n    if (isNotForRichText) {\n      rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n    }\n    const textDivs = [];\n    if (root.children.length === 0) {\n      if (root.value) {\n        const node = document.createTextNode(root.value);\n        rootHtml.append(node);\n        if (isNotForRichText && XfaText.shouldBuildText(root.name)) {\n          textDivs.push(node);\n        }\n      }\n      return {\n        textDivs\n      };\n    }\n    const stack = [[root, -1, rootHtml]];\n    while (stack.length > 0) {\n      const [parent, i, html] = stack.at(-1);\n      if (i + 1 === parent.children.length) {\n        stack.pop();\n        continue;\n      }\n      const child = parent.children[++stack.at(-1)[1]];\n      if (child === null) {\n        continue;\n      }\n      const {\n        name\n      } = child;\n      if (name === \"#text\") {\n        const node = document.createTextNode(child.value);\n        textDivs.push(node);\n        html.append(node);\n        continue;\n      }\n      const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name);\n      html.append(childHtml);\n      if (child.attributes) {\n        this.setAttributes({\n          html: childHtml,\n          element: child,\n          storage,\n          intent,\n          linkService\n        });\n      }\n      if (child.children?.length > 0) {\n        stack.push([child, -1, childHtml]);\n      } else if (child.value) {\n        const node = document.createTextNode(child.value);\n        if (isNotForRichText && XfaText.shouldBuildText(name)) {\n          textDivs.push(node);\n        }\n        childHtml.append(node);\n      }\n    }\n    for (const el of rootDiv.querySelectorAll(\".xfaNonInteractive input, .xfaNonInteractive textarea\")) {\n      el.setAttribute(\"readOnly\", true);\n    }\n    return {\n      textDivs\n    };\n  }\n  static update(parameters) {\n    const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n    parameters.div.style.transform = transform;\n    parameters.div.hidden = false;\n  }\n  static getPageViewport(xfaPage, {\n    scale = 1,\n    rotation = 0\n  }) {\n    const {\n      width,\n      height\n    } = xfaPage.attributes.style;\n    return new PageViewport({\n      viewBox: [0, 0, parseInt(width, 10), parseInt(height, 10)],\n      userUnit: 1,\n      scale,\n      rotation\n    });\n  }\n}\n\n;// ./src/display/display_utils.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass PixelsPerInch {\n  static CSS = 96.0;\n  static PDF = 72.0;\n  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\nasync function fetchData(url, type = \"text\") {\n  if (isValidFetchUrl(url, document.baseURI)) {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    switch (type) {\n      case \"blob\":\n        return response.blob();\n      case \"bytes\":\n        return response.bytes();\n      case \"json\":\n        return response.json();\n    }\n    return response.text();\n  }\n  return new Promise((resolve, reject) => {\n    const request = new XMLHttpRequest();\n    request.open(\"GET\", url, true);\n    request.responseType = type === \"bytes\" ? \"arraybuffer\" : type;\n    request.onreadystatechange = () => {\n      if (request.readyState !== XMLHttpRequest.DONE) {\n        return;\n      }\n      if (request.status === 200 || request.status === 0) {\n        switch (type) {\n          case \"bytes\":\n            resolve(new Uint8Array(request.response));\n            return;\n          case \"blob\":\n          case \"json\":\n            resolve(request.response);\n            return;\n        }\n        resolve(request.responseText);\n        return;\n      }\n      reject(new Error(request.statusText));\n    };\n    request.send(null);\n  });\n}\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\nfunction isDataScheme(url) {\n  const ii = url.length;\n  let i = 0;\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\nfunction getFilenameFromUrl(url) {\n  [url] = url.split(/[#?]/, 1);\n  return stripPath(url);\n}\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n  if (isDataScheme(url)) {\n    warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n  const getURL = urlString => {\n    try {\n      return new URL(urlString);\n    } catch {}\n    try {\n      return new URL(decodeURIComponent(urlString));\n    } catch {}\n    try {\n      return new URL(urlString, \"https://foo.bar\");\n    } catch {}\n    try {\n      return new URL(decodeURIComponent(urlString), \"https://foo.bar\");\n    } catch {}\n    return null;\n  };\n  const newURL = getURL(url);\n  if (!newURL) {\n    return defaultFilename;\n  }\n  const decode = name => {\n    try {\n      let decoded = decodeURIComponent(name);\n      if (decoded.includes(\"/\")) {\n        decoded = stripPath(decoded);\n        if (decoded.length === 4 && pdfRegex.test(decoded)) {\n          return name;\n        }\n      }\n      return decoded;\n    } catch {\n      return name;\n    }\n  };\n  const pdfRegex = /\\.pdf$/i;\n  const filename = stripPath(newURL.pathname);\n  if (pdfRegex.test(filename)) {\n    return decode(filename);\n  }\n  if (newURL.searchParams.size > 0) {\n    const getLast = iterator => [...iterator].findLast(v => pdfRegex.test(v));\n    const name = getLast(newURL.searchParams.values()) ?? getLast(newURL.searchParams.keys());\n    if (name) {\n      return decode(name);\n    }\n  }\n  if (newURL.hash) {\n    const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n    const hashFilename = reFilename.exec(newURL.hash);\n    if (hashFilename) {\n      return decode(hashFilename[0]);\n    }\n  }\n  return defaultFilename;\n}\nclass StatTimer {\n  #started = new Map();\n  times = [];\n  time(name) {\n    if (this.#started.has(name)) {\n      warn(`Timer is already running for ${name}`);\n    }\n    this.#started.set(name, Date.now());\n  }\n  timeEnd(name) {\n    if (!this.#started.has(name)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.#started.get(name),\n      end: Date.now()\n    });\n    this.#started.delete(name);\n  }\n  toString() {\n    const longest = Math.max(...this.times.map(t => t.name.length));\n    return this.times.map(t => `${t.name.padEnd(longest)} ${t.end - t.start}ms\\n`).join(\"\");\n  }\n}\nfunction isValidFetchUrl(url, baseUrl) {\n  const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return /https?:/.test(res?.protocol ?? \"\");\n}\nfunction noContextMenu(e) {\n  e.preventDefault();\n}\nfunction stopEvent(e) {\n  e.preventDefault();\n  e.stopPropagation();\n}\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\nclass PDFDateString {\n  static #regex;\n  static toDateObject(input) {\n    if (input instanceof Date) {\n      return input;\n    }\n    if (!input || typeof input !== \"string\") {\n      return null;\n    }\n    this.#regex ||= new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+\\\\-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\n    const matches = this.#regex.exec(input);\n    if (!matches) {\n      return null;\n    }\n    const year = parseInt(matches[1], 10);\n    let month = parseInt(matches[2], 10);\n    month = month >= 1 && month <= 12 ? month - 1 : 0;\n    let day = parseInt(matches[3], 10);\n    day = day >= 1 && day <= 31 ? day : 1;\n    let hour = parseInt(matches[4], 10);\n    hour = hour >= 0 && hour <= 23 ? hour : 0;\n    let minute = parseInt(matches[5], 10);\n    minute = minute >= 0 && minute <= 59 ? minute : 0;\n    let second = parseInt(matches[6], 10);\n    second = second >= 0 && second <= 59 ? second : 0;\n    const universalTimeRelation = matches[7] || \"Z\";\n    let offsetHour = parseInt(matches[8], 10);\n    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n    let offsetMinute = parseInt(matches[9], 10) || 0;\n    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n    if (universalTimeRelation === \"-\") {\n      hour += offsetHour;\n      minute += offsetMinute;\n    } else if (universalTimeRelation === \"+\") {\n      hour -= offsetHour;\n      minute -= offsetMinute;\n    }\n    return new Date(Date.UTC(year, month, day, hour, minute, second));\n  }\n}\nfunction getRGBA(color) {\n  if (color.startsWith(\"#\")) {\n    const hex = color.slice(1);\n    return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16), hex.length >= 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1];\n  }\n  if (color.startsWith(\"rgb(\")) {\n    const [r, g, b] = color.slice(4, -1).split(\",\").map(x => parseInt(x, 10));\n    return [r, g, b, 1];\n  }\n  if (color.startsWith(\"rgba(\")) {\n    const parts = color.slice(5, -1).split(\",\");\n    return [parseInt(parts[0], 10), parseInt(parts[1], 10), parseInt(parts[2], 10), parseFloat(parts[3])];\n  }\n  const m = color.match(/^color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)(?:\\s*\\/\\s*([\\d.]+|none))?\\)$/);\n  if (m) {\n    return [Math.round(parseFloat(m[1]) * 255), Math.round(parseFloat(m[2]) * 255), Math.round(parseFloat(m[3]) * 255), m[4] !== undefined && m[4] !== \"none\" ? parseFloat(m[4]) : 1];\n  }\n  return null;\n}\nfunction getRGB(color) {\n  const rgba = getRGBA(color);\n  if (!rgba) {\n    warn(`Not a valid color format: \"${color}\"`);\n    return [0, 0, 0];\n  }\n  return rgba.slice(0, 3);\n}\nfunction getColorValues(colors) {\n  const span = document.createElement(\"span\");\n  span.style.visibility = \"hidden\";\n  span.style.colorScheme = \"only light\";\n  document.body.append(span);\n  for (const name of colors.keys()) {\n    span.style.color = name;\n    const computedColor = window.getComputedStyle(span).color;\n    colors.set(name, getRGB(computedColor));\n  }\n  span.remove();\n}\nfunction getCurrentTransform(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform();\n  return [a, b, c, d, e, f];\n}\nfunction getCurrentTransformInverse(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform().invertSelf();\n  return [a, b, c, d, e, f];\n}\nfunction setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) {\n  if (viewport instanceof PageViewport) {\n    const {\n      pageWidth,\n      pageHeight\n    } = viewport.rawDims;\n    const {\n      style\n    } = div;\n    const widthStr = `round(down, var(--total-scale-factor) * ${pageWidth}px, var(--scale-round-x))`,\n      heightStr = `round(down, var(--total-scale-factor) * ${pageHeight}px, var(--scale-round-y))`;\n    if (!mustFlip || viewport.rotation % 180 === 0) {\n      style.width = widthStr;\n      style.height = heightStr;\n    } else {\n      style.width = heightStr;\n      style.height = widthStr;\n    }\n  }\n  if (mustRotate) {\n    div.setAttribute(\"data-main-rotation\", viewport.rotation);\n  }\n}\nclass OutputScale {\n  constructor() {\n    const {\n      pixelRatio\n    } = OutputScale;\n    this.sx = pixelRatio;\n    this.sy = pixelRatio;\n  }\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n  get symmetric() {\n    return this.sx === this.sy;\n  }\n  limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {\n    let maxAreaScale = Infinity,\n      maxWidthScale = Infinity,\n      maxHeightScale = Infinity;\n    maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);\n    if (maxPixels > 0) {\n      maxAreaScale = Math.sqrt(maxPixels / (width * height));\n    }\n    if (maxDim !== -1) {\n      maxWidthScale = maxDim / width;\n      maxHeightScale = maxDim / height;\n    }\n    const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n    if (this.sx > maxScale || this.sy > maxScale) {\n      this.sx = maxScale;\n      this.sy = maxScale;\n      return true;\n    }\n    return false;\n  }\n  static get pixelRatio() {\n    return globalThis.devicePixelRatio || 1;\n  }\n  static capPixels(maxPixels, capAreaFactor) {\n    if (capAreaFactor >= 0) {\n      const winPixels = Math.ceil(window.screen.availWidth * window.screen.availHeight * this.pixelRatio ** 2 * (1 + capAreaFactor / 100));\n      return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;\n    }\n    return maxPixels;\n  }\n}\nconst SupportedImageMimeTypes = [\"image/apng\", \"image/avif\", \"image/bmp\", \"image/gif\", \"image/jpeg\", \"image/png\", \"image/svg+xml\", \"image/webp\", \"image/x-icon\"];\nclass ColorScheme {\n  static get isDarkMode() {\n    return shadow(this, \"isDarkMode\", !!window?.matchMedia?.(\"(prefers-color-scheme: dark)\").matches);\n  }\n}\nclass CSSConstants {\n  static get commentForegroundColor() {\n    const element = document.createElement(\"span\");\n    element.classList.add(\"comment\", \"sidebar\");\n    const {\n      style\n    } = element;\n    style.width = style.height = \"0\";\n    style.display = \"none\";\n    style.color = \"var(--comment-fg-color)\";\n    document.body.append(element);\n    const {\n      color\n    } = window.getComputedStyle(element);\n    element.remove();\n    return shadow(this, \"commentForegroundColor\", getRGB(color));\n  }\n}\nfunction applyOpacity(color, opacity) {\n  opacity = MathClamp(opacity ?? 1, 0, 1);\n  const white = 255 * (1 - opacity);\n  return color.map(c => Math.round(c * opacity + white));\n}\nfunction RGBToHSL(rgb, output) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  if (max === min) {\n    output[0] = output[1] = 0;\n  } else {\n    const d = max - min;\n    output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min);\n    switch (max) {\n      case r:\n        output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60;\n        break;\n      case g:\n        output[0] = ((b - r) / d + 2) * 60;\n        break;\n      case b:\n        output[0] = ((r - g) / d + 4) * 60;\n        break;\n    }\n  }\n  output[2] = l;\n}\nfunction HSLToRGB(hsl, output) {\n  const h = hsl[0];\n  const s = hsl[1];\n  const l = hsl[2];\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n  const m = l - c / 2;\n  switch (Math.floor(h / 60)) {\n    case 0:\n      output[0] = c + m;\n      output[1] = x + m;\n      output[2] = m;\n      break;\n    case 1:\n      output[0] = x + m;\n      output[1] = c + m;\n      output[2] = m;\n      break;\n    case 2:\n      output[0] = m;\n      output[1] = c + m;\n      output[2] = x + m;\n      break;\n    case 3:\n      output[0] = m;\n      output[1] = x + m;\n      output[2] = c + m;\n      break;\n    case 4:\n      output[0] = x + m;\n      output[1] = m;\n      output[2] = c + m;\n      break;\n    case 5:\n    case 6:\n      output[0] = c + m;\n      output[1] = m;\n      output[2] = x + m;\n      break;\n  }\n}\nfunction computeLuminance(x) {\n  return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n}\nfunction contrastRatio(hsl1, hsl2, output) {\n  HSLToRGB(hsl1, output);\n  output.map(computeLuminance);\n  const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  HSLToRGB(hsl2, output);\n  output.map(computeLuminance);\n  const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  return lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05);\n}\nconst contrastCache = new Map();\nfunction findContrastColor(baseColor, fixedColor) {\n  const key = baseColor[0] + baseColor[1] * 0x100 + baseColor[2] * 0x10000 + fixedColor[0] * 0x1000000 + fixedColor[1] * 0x100000000 + fixedColor[2] * 0x10000000000;\n  let cachedValue = contrastCache.get(key);\n  if (cachedValue) {\n    return cachedValue;\n  }\n  const array = new Float32Array(9);\n  const output = array.subarray(0, 3);\n  const baseHSL = array.subarray(3, 6);\n  RGBToHSL(baseColor, baseHSL);\n  const fixedHSL = array.subarray(6, 9);\n  RGBToHSL(fixedColor, fixedHSL);\n  const isFixedColorDark = fixedHSL[2] < 0.5;\n  const minContrast = isFixedColorDark ? 12 : 4.5;\n  baseHSL[2] = isFixedColorDark ? Math.sqrt(baseHSL[2]) : 1 - Math.sqrt(1 - baseHSL[2]);\n  if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n    let start, end;\n    if (isFixedColorDark) {\n      start = baseHSL[2];\n      end = 1;\n    } else {\n      start = 0;\n      end = baseHSL[2];\n    }\n    const PRECISION = 0.005;\n    while (end - start > PRECISION) {\n      const mid = baseHSL[2] = (start + end) / 2;\n      if (isFixedColorDark === contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n        start = mid;\n      } else {\n        end = mid;\n      }\n    }\n    baseHSL[2] = isFixedColorDark ? end : start;\n  }\n  HSLToRGB(baseHSL, output);\n  cachedValue = Util.makeHexColor(Math.round(output[0] * 255), Math.round(output[1] * 255), Math.round(output[2] * 255));\n  contrastCache.set(key, cachedValue);\n  return cachedValue;\n}\nfunction renderRichText({\n  html,\n  dir,\n  className\n}, container) {\n  const fragment = document.createDocumentFragment();\n  if (typeof html === \"string\") {\n    const p = document.createElement(\"p\");\n    p.dir = dir || \"auto\";\n    const lines = html.split(/\\r\\n?|\\n/);\n    for (let i = 0, ii = lines.length; i < ii; ++i) {\n      const line = lines[i];\n      p.append(document.createTextNode(line));\n      if (i < ii - 1) {\n        p.append(document.createElement(\"br\"));\n      }\n    }\n    fragment.append(p);\n  } else {\n    XfaLayer.render({\n      xfaHtml: html,\n      div: fragment,\n      intent: \"richText\"\n    });\n  }\n  fragment.firstElementChild.classList.add(\"richText\", className);\n  container.append(fragment);\n}\nfunction makePathFromDrawOPS(data) {\n  const path = new Path2D();\n  if (!data) {\n    return path;\n  }\n  for (let i = 0, ii = data.length; i < ii;) {\n    switch (data[i++]) {\n      case DrawOPS.moveTo:\n        path.moveTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.lineTo:\n        path.lineTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.curveTo:\n        path.bezierCurveTo(data[i++], data[i++], data[i++], data[i++], data[i++], data[i++]);\n        break;\n      case DrawOPS.quadraticCurveTo:\n        path.quadraticCurveTo(data[i++], data[i++], data[i++], data[i++]);\n        break;\n      case DrawOPS.closePath:\n        path.closePath();\n        break;\n      default:\n        warn(`Unrecognized drawing path operator: ${data[i - 1]}`);\n        break;\n    }\n  }\n  return path;\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.take.js\nvar es_iterator_take = __webpack_require__(4972);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.with-resolvers.js\nvar es_promise_with_resolvers = __webpack_require__(4628);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.difference.v2.js\nvar es_set_difference_v2 = __webpack_require__(7642);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.intersection.v2.js\nvar es_set_intersection_v2 = __webpack_require__(8004);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js\nvar es_set_is_disjoint_from_v2 = __webpack_require__(3853);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-subset-of.v2.js\nvar es_set_is_subset_of_v2 = __webpack_require__(5876);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-superset-of.v2.js\nvar es_set_is_superset_of_v2 = __webpack_require__(2475);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.symmetric-difference.v2.js\nvar es_set_symmetric_difference_v2 = __webpack_require__(5024);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.union.v2.js\nvar es_set_union_v2 = __webpack_require__(1698);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.weak-map.get-or-insert.js\nvar es_weak_map_get_or_insert = __webpack_require__(8454);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.weak-map.get-or-insert-computed.js\nvar es_weak_map_get_or_insert_computed = __webpack_require__(9452);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.some.js\nvar es_iterator_some = __webpack_require__(3579);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.json.stringify.js\nvar es_json_stringify = __webpack_require__(3110);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.drop.js\nvar es_iterator_drop = __webpack_require__(9314);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.every.js\nvar es_iterator_every = __webpack_require__(1148);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.find.js\nvar es_iterator_find = __webpack_require__(116);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.json.parse.js\nvar es_json_parse = __webpack_require__(9112);\n;// ./src/display/editor/toolbar.js\n\nclass EditorToolbar {\n  #toolbar = null;\n  #colorPicker = null;\n  #editor;\n  #buttons = null;\n  #altText = null;\n  #comment = null;\n  #commentButtonDivider = null;\n  #signatureDescriptionButton = null;\n  static #l10nRemove = null;\n  constructor(editor) {\n    this.#editor = editor;\n    EditorToolbar.#l10nRemove ||= Object.freeze({\n      freetext: \"pdfjs-editor-remove-freetext-button\",\n      highlight: \"pdfjs-editor-remove-highlight-button\",\n      ink: \"pdfjs-editor-remove-ink-button\",\n      stamp: \"pdfjs-editor-remove-stamp-button\",\n      signature: \"pdfjs-editor-remove-signature-button\"\n    });\n  }\n  render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.classList.add(\"editToolbar\", \"hidden\");\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    const signal = this.#editor._uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown, {\n        signal\n      });\n    }\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    const position = this.#editor.toolbarPosition;\n    if (position) {\n      const {\n        style\n      } = editToolbar;\n      const x = this.#editor._uiManager.direction === \"ltr\" ? 1 - position[0] : position[0];\n      style.insetInlineEnd = `${100 * x}%`;\n      style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`;\n    }\n    return editToolbar;\n  }\n  get div() {\n    return this.#toolbar;\n  }\n  static #pointerDown(e) {\n    e.stopPropagation();\n  }\n  #focusIn(e) {\n    this.#editor._focusEventsAllowed = false;\n    stopEvent(e);\n  }\n  #focusOut(e) {\n    this.#editor._focusEventsAllowed = true;\n    stopEvent(e);\n  }\n  #addListenersToElement(element) {\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return false;\n    }\n    element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n      capture: true,\n      signal\n    });\n    element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n      capture: true,\n      signal\n    });\n    element.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    return true;\n  }\n  hide() {\n    this.#toolbar.classList.add(\"hidden\");\n    this.#colorPicker?.hideDropdown();\n  }\n  show() {\n    this.#toolbar.classList.remove(\"hidden\");\n    this.#altText?.shown();\n    this.#comment?.shown();\n  }\n  addDeleteButton() {\n    const {\n      editorType,\n      _uiManager\n    } = this.#editor;\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", \"deleteButton\");\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", EditorToolbar.#l10nRemove[editorType]);\n    if (this.#addListenersToElement(button)) {\n      button.addEventListener(\"click\", e => {\n        _uiManager.delete();\n      }, {\n        signal: _uiManager._signal\n      });\n    }\n    this.#buttons.append(button);\n  }\n  get #divider() {\n    const divider = document.createElement(\"div\");\n    divider.className = \"divider\";\n    return divider;\n  }\n  async addAltText(altText) {\n    const button = await altText.render();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n    this.#altText = altText;\n  }\n  addComment(comment, beforeElement = null) {\n    if (this.#comment) {\n      return;\n    }\n    const button = comment.renderForToolbar();\n    if (!button) {\n      return;\n    }\n    this.#addListenersToElement(button);\n    const divider = this.#commentButtonDivider = this.#divider;\n    if (!beforeElement) {\n      this.#buttons.append(button, divider);\n    } else {\n      this.#buttons.insertBefore(button, beforeElement);\n      this.#buttons.insertBefore(divider, beforeElement);\n    }\n    this.#comment = comment;\n    comment.toolbar = this;\n  }\n  addColorPicker(colorPicker) {\n    if (this.#colorPicker) {\n      return;\n    }\n    this.#colorPicker = colorPicker;\n    const button = colorPicker.renderButton();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n  async addEditSignatureButton(signatureManager) {\n    const button = this.#signatureDescriptionButton = await signatureManager.renderEditButton(this.#editor);\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n  removeButton(name) {\n    switch (name) {\n      case \"comment\":\n        this.#comment?.removeToolbarCommentButton();\n        this.#comment = null;\n        this.#commentButtonDivider?.remove();\n        this.#commentButtonDivider = null;\n        break;\n    }\n  }\n  async addButton(name, tool) {\n    switch (name) {\n      case \"colorPicker\":\n        if (tool) {\n          this.addColorPicker(tool);\n        }\n        break;\n      case \"altText\":\n        if (tool) {\n          await this.addAltText(tool);\n        }\n        break;\n      case \"editSignature\":\n        if (tool) {\n          await this.addEditSignatureButton(tool);\n        }\n        break;\n      case \"delete\":\n        this.addDeleteButton();\n        break;\n      case \"comment\":\n        if (tool) {\n          this.addComment(tool);\n        }\n        break;\n    }\n  }\n  async addButtonBefore(name, tool, beforeSelector) {\n    if (!tool && name === \"comment\") {\n      return;\n    }\n    const beforeElement = this.#buttons.querySelector(beforeSelector);\n    if (!beforeElement) {\n      return;\n    }\n    if (name === \"comment\") {\n      this.addComment(tool, beforeElement);\n    }\n  }\n  updateEditSignatureButton(description) {\n    if (this.#signatureDescriptionButton) {\n      this.#signatureDescriptionButton.title = description;\n    }\n  }\n  remove() {\n    this.#toolbar.remove();\n    this.#colorPicker?.destroy();\n    this.#colorPicker = null;\n  }\n}\nclass FloatingToolbar {\n  #buttons = null;\n  #toolbar = null;\n  #uiManager;\n  constructor(uiManager) {\n    this.#uiManager = uiManager;\n  }\n  #render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n    }\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    if (this.#uiManager.hasCommentManager()) {\n      this.#makeButton(\"commentButton\", `pdfjs-comment-floating-button`, \"pdfjs-comment-floating-button-label\", () => {\n        this.#uiManager.commentSelection(\"floating_button\");\n      });\n    }\n    this.#makeButton(\"highlightButton\", `pdfjs-highlight-floating-button1`, \"pdfjs-highlight-floating-button-label\", () => {\n      this.#uiManager.highlightSelection(\"floating_button\");\n    });\n    return editToolbar;\n  }\n  #getLastPoint(boxes, isLTR) {\n    let lastY = 0;\n    let lastX = 0;\n    for (const box of boxes) {\n      const y = box.y + box.height;\n      if (y < lastY) {\n        continue;\n      }\n      const x = box.x + (isLTR ? box.width : 0);\n      if (y > lastY) {\n        lastX = x;\n        lastY = y;\n        continue;\n      }\n      if (isLTR) {\n        if (x > lastX) {\n          lastX = x;\n        }\n      } else if (x < lastX) {\n        lastX = x;\n      }\n    }\n    return [isLTR ? 1 - lastX : lastX, lastY];\n  }\n  show(parent, boxes, isLTR) {\n    const [x, y] = this.#getLastPoint(boxes, isLTR);\n    const {\n      style\n    } = this.#toolbar ||= this.#render();\n    parent.append(this.#toolbar);\n    style.insetInlineEnd = `${100 * x}%`;\n    style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n  }\n  hide() {\n    this.#toolbar.remove();\n  }\n  #makeButton(buttonClass, l10nId, labelL10nId, clickHandler) {\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", buttonClass);\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", l10nId);\n    const span = document.createElement(\"span\");\n    button.append(span);\n    span.className = \"visuallyHidden\";\n    span.setAttribute(\"data-l10n-id\", labelL10nId);\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      button.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      button.addEventListener(\"click\", clickHandler, {\n        signal\n      });\n    }\n    this.#buttons.append(button);\n  }\n}\n\n;// ./src/shared/internal_evt.js\nconst INTERNAL_EVT = \"068f09d6-5b37-4f77-a97a-f8ff4f253b68\";\nconst internalOpt = Object.freeze({\n  internal: INTERNAL_EVT\n});\n\n;// ./src/display/editor/tools.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction bindEvents(obj, element, names) {\n  for (const name of names) {\n    element.addEventListener(name, obj[name].bind(obj));\n  }\n}\nclass CurrentPointers {\n  static #pointerId = NaN;\n  static #pointerIds = null;\n  static #moveTimestamp = NaN;\n  static #pointerType = null;\n  static initializeAndAddPointerId(pointerId) {\n    (CurrentPointers.#pointerIds ||= new Set()).add(pointerId);\n  }\n  static setPointer(pointerType, pointerId) {\n    CurrentPointers.#pointerId ||= pointerId;\n    CurrentPointers.#pointerType ??= pointerType;\n  }\n  static setTimeStamp(timeStamp) {\n    CurrentPointers.#moveTimestamp = timeStamp;\n  }\n  static isSamePointerId(pointerId) {\n    return CurrentPointers.#pointerId === pointerId;\n  }\n  static isSamePointerIdOrRemove(pointerId) {\n    if (CurrentPointers.#pointerId === pointerId) {\n      return true;\n    }\n    CurrentPointers.#pointerIds?.delete(pointerId);\n    return false;\n  }\n  static isSamePointerType(pointerType) {\n    return CurrentPointers.#pointerType === pointerType;\n  }\n  static isInitializedAndDifferentPointerType(pointerType) {\n    return CurrentPointers.#pointerType !== null && !CurrentPointers.isSamePointerType(pointerType);\n  }\n  static isSameTimeStamp(timeStamp) {\n    return CurrentPointers.#moveTimestamp === timeStamp;\n  }\n  static isUsingMultiplePointers() {\n    return CurrentPointers.#pointerIds?.size >= 1;\n  }\n  static clearPointerType() {\n    CurrentPointers.#pointerType = null;\n  }\n  static clearPointerIds() {\n    CurrentPointers.#pointerId = NaN;\n    CurrentPointers.#pointerIds = null;\n  }\n  static clearTimeStamp() {\n    CurrentPointers.#moveTimestamp = NaN;\n  }\n}\nclass IdManager {\n  #id = 0;\n  get id() {\n    return `${AnnotationEditorPrefix}${this.#id++}`;\n  }\n}\nclass ImageManager {\n  #baseId = getUuid();\n  #id = 0;\n  #cache = null;\n  static get _isSVGFittingCanvas() {\n    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox=\"0 0 1 1\" width=\"1\" height=\"1\" xmlns=\"${SVG_NS}\"><rect width=\"1\" height=\"1\" style=\"fill:red;\"/></svg>`;\n    const canvas = new OffscreenCanvas(1, 3);\n    const ctx = canvas.getContext(\"2d\", {\n      willReadFrequently: true\n    });\n    const image = new Image();\n    image.src = svg;\n    const promise = image.decode().then(() => {\n      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n    });\n    return shadow(this, \"_isSVGFittingCanvas\", promise);\n  }\n  async #get(key, rawData) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(key);\n    if (data === null) {\n      return null;\n    }\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    try {\n      data ||= {\n        bitmap: null,\n        id: `image_${this.#baseId}_${this.#id++}`,\n        refCounter: 0,\n        isSvg: false\n      };\n      let image;\n      if (typeof rawData === \"string\") {\n        data.url = rawData;\n        image = await fetchData(rawData, \"blob\");\n      } else if (rawData instanceof File) {\n        image = data.file = rawData;\n      } else if (rawData instanceof Blob) {\n        image = rawData;\n      }\n      if (image.type === \"image/svg+xml\") {\n        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n        const fileReader = new FileReader();\n        const imageElement = new Image();\n        const imagePromise = new Promise((resolve, reject) => {\n          imageElement.onload = () => {\n            data.bitmap = imageElement;\n            data.isSvg = true;\n            resolve();\n          };\n          fileReader.onload = async () => {\n            const url = data.svgUrl = fileReader.result;\n            imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;\n          };\n          imageElement.onerror = fileReader.onerror = reject;\n        });\n        fileReader.readAsDataURL(image);\n        await imagePromise;\n      } else {\n        data.bitmap = await createImageBitmap(image);\n      }\n      data.refCounter = 1;\n    } catch (e) {\n      warn(e);\n      data = null;\n    }\n    this.#cache.set(key, data);\n    if (data) {\n      this.#cache.set(data.id, data);\n    }\n    return data;\n  }\n  async getFromFile(file) {\n    const {\n      lastModified,\n      name,\n      size,\n      type\n    } = file;\n    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n  }\n  async getFromUrl(url) {\n    return this.#get(url, url);\n  }\n  async getFromBlob(id, blobPromise) {\n    const blob = await blobPromise;\n    return this.#get(id, blob);\n  }\n  async getFromId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return null;\n    }\n    if (data.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    if (data.file) {\n      return this.getFromFile(data.file);\n    }\n    if (data.blobPromise) {\n      const {\n        blobPromise\n      } = data;\n      delete data.blobPromise;\n      return this.getFromBlob(data.id, blobPromise);\n    }\n    return this.getFromUrl(data.url);\n  }\n  getFromCanvas(id, canvas) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(id);\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n    const ctx = offscreen.getContext(\"2d\");\n    ctx.drawImage(canvas, 0, 0);\n    data = {\n      bitmap: offscreen.transferToImageBitmap(),\n      id: `image_${this.#baseId}_${this.#id++}`,\n      refCounter: 1,\n      isSvg: false\n    };\n    this.#cache.set(id, data);\n    this.#cache.set(data.id, data);\n    return data;\n  }\n  getSvgUrl(id) {\n    const data = this.#cache.get(id);\n    if (!data?.isSvg) {\n      return null;\n    }\n    return data.svgUrl;\n  }\n  deleteId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return;\n    }\n    data.refCounter -= 1;\n    if (data.refCounter !== 0) {\n      return;\n    }\n    const {\n      bitmap\n    } = data;\n    if (!data.url && !data.file) {\n      const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n      const ctx = canvas.getContext(\"bitmaprenderer\");\n      ctx.transferFromImageBitmap(bitmap);\n      data.blobPromise = canvas.convertToBlob();\n    }\n    bitmap.close?.();\n    data.bitmap = null;\n  }\n  isValidId(id) {\n    return id.startsWith(`image_${this.#baseId}_`);\n  }\n}\nclass CommandManager {\n  #commands = [];\n  #locked = false;\n  #maxSize;\n  #position = -1;\n  constructor(maxSize = 128) {\n    this.#maxSize = maxSize;\n  }\n  add({\n    cmd,\n    undo,\n    post,\n    mustExec,\n    type = NaN,\n    overwriteIfSameType = false,\n    keepUndo = false\n  }) {\n    if (mustExec) {\n      cmd();\n    }\n    if (this.#locked) {\n      return;\n    }\n    const save = {\n      cmd,\n      undo,\n      post,\n      type\n    };\n    if (this.#position === -1) {\n      if (this.#commands.length > 0) {\n        this.#commands.length = 0;\n      }\n      this.#position = 0;\n      this.#commands.push(save);\n      return;\n    }\n    if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n      if (keepUndo) {\n        save.undo = this.#commands[this.#position].undo;\n      }\n      this.#commands[this.#position] = save;\n      return;\n    }\n    const next = this.#position + 1;\n    if (next === this.#maxSize) {\n      this.#commands.splice(0, 1);\n    } else {\n      this.#position = next;\n      if (next < this.#commands.length) {\n        this.#commands.splice(next);\n      }\n    }\n    this.#commands.push(save);\n  }\n  undo() {\n    if (this.#position === -1) {\n      return;\n    }\n    this.#locked = true;\n    const {\n      undo,\n      post\n    } = this.#commands[this.#position];\n    undo();\n    post?.();\n    this.#locked = false;\n    this.#position -= 1;\n  }\n  redo() {\n    if (this.#position < this.#commands.length - 1) {\n      this.#position += 1;\n      this.#locked = true;\n      const {\n        cmd,\n        post\n      } = this.#commands[this.#position];\n      cmd();\n      post?.();\n      this.#locked = false;\n    }\n  }\n  hasSomethingToUndo() {\n    return this.#position !== -1;\n  }\n  hasSomethingToRedo() {\n    return this.#position < this.#commands.length - 1;\n  }\n  cleanType(type) {\n    if (this.#position === -1) {\n      return;\n    }\n    for (let i = this.#position; i >= 0; i--) {\n      if (this.#commands[i].type !== type) {\n        this.#commands.splice(i + 1, this.#position - i);\n        this.#position = i;\n        return;\n      }\n    }\n    this.#commands.length = 0;\n    this.#position = -1;\n  }\n  destroy() {\n    this.#commands = null;\n  }\n}\nclass KeyboardManager {\n  static ALT = 0x1;\n  static CTRL = 0x2;\n  static META = 0x4;\n  static SHIFT = 0x8;\n  constructor(callbacks) {\n    this.callbacks = new Map();\n    const {\n      isMac\n    } = FeatureTest.platform;\n    for (const [keys, callback, options = {}] of callbacks) {\n      const hasMacOverride = keys.some(k => k.startsWith(\"mac+\"));\n      for (const key of keys) {\n        let shortcut = key;\n        if (hasMacOverride) {\n          const isMacKey = key.startsWith(\"mac+\");\n          if (isMac !== isMacKey) {\n            continue;\n          }\n          if (isMacKey) {\n            shortcut = key.slice(4);\n          }\n        }\n        const [keyName, modifiers] = KeyboardManager.#parseShortcut(shortcut);\n        if (keyName === null) {\n          continue;\n        }\n        this.callbacks.getOrInsertComputed(keyName, makeArr).push({\n          callback,\n          options,\n          modifiers\n        });\n      }\n    }\n  }\n  static #parseShortcut(value) {\n    let keyPart = null;\n    let modifiers = 0;\n    for (let part of value.split(\"+\")) {\n      part = part.trim();\n      if (!part) {\n        continue;\n      }\n      const upper = part.toUpperCase();\n      const modifier = KeyboardManager[upper];\n      if (modifier) {\n        modifiers |= modifier;\n        continue;\n      }\n      if (keyPart !== null) {\n        warn(`KeyboardManager: multiple keys in shortcut \"${value}\"`);\n        break;\n      }\n      keyPart = upper === \"SPACE\" ? \" \" : part;\n    }\n    if (keyPart === null) {\n      warn(`KeyboardManager: no key found in shortcut \"${value}\"`);\n    }\n    return [keyPart, modifiers];\n  }\n  static #codeToKey(code) {\n    const match = /^(?:Key([A-Z])|(?:Digit|Numpad)(\\d))$/.exec(code);\n    if (!match) {\n      return null;\n    }\n    return match[1]?.toLowerCase() ?? match[2];\n  }\n  exec(self, event) {\n    let shortcuts = this.callbacks.get(event.key);\n    if (!shortcuts) {\n      if (/^[a-z]$/i.test(event.key)) {\n        return;\n      }\n      const fallback = KeyboardManager.#codeToKey(event.code);\n      if (fallback === null || fallback === event.key) {\n        return;\n      }\n      shortcuts = this.callbacks.get(fallback);\n      if (!shortcuts) {\n        return;\n      }\n    }\n    const eventModifiers = (event.altKey ? KeyboardManager.ALT : 0) | (event.ctrlKey ? KeyboardManager.CTRL : 0) | (event.metaKey ? KeyboardManager.META : 0) | (event.shiftKey ? KeyboardManager.SHIFT : 0);\n    const info = shortcuts.find(shortcut => shortcut.modifiers === eventModifiers);\n    if (!info) {\n      return;\n    }\n    const {\n      callback,\n      options: {\n        bubbles = false,\n        args = [],\n        checker = null\n      }\n    } = info;\n    if (checker && !checker(self, event)) {\n      return;\n    }\n    callback.bind(self, ...args, event)();\n    if (!bubbles) {\n      stopEvent(event);\n    }\n  }\n}\nclass ColorManager {\n  static _colorsMapping = new Map([[\"CanvasText\", [0, 0, 0]], [\"Canvas\", [255, 255, 255]]]);\n  get _colors() {\n    const colors = new Map([[\"CanvasText\", null], [\"Canvas\", null]]);\n    getColorValues(colors);\n    return shadow(this, \"_colors\", colors);\n  }\n  convert(color) {\n    const rgb = getRGB(color);\n    if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n      return rgb;\n    }\n    for (const [name, RGB] of this._colors) {\n      if (RGB.every((x, i) => x === rgb[i])) {\n        return ColorManager._colorsMapping.get(name);\n      }\n    }\n    return rgb;\n  }\n  getHexCode(name) {\n    const rgb = this._colors.get(name);\n    if (!rgb) {\n      return name;\n    }\n    return Util.makeHexColor(...rgb);\n  }\n}\nclass AnnotationEditorUIManager {\n  #abortController = new AbortController();\n  #activeEditor = null;\n  #allEditableAnnotations = null;\n  #allEditors = new Map();\n  #allLayers = new Map();\n  #savedAllLayers = null;\n  #altTextManager = null;\n  #annotationStorage = null;\n  #changedExistingAnnotations = null;\n  #commandManager = new CommandManager();\n  #commentManager = null;\n  #copyPasteAC = null;\n  #currentDrawingSession = null;\n  #currentPageIndex = 0;\n  #deletedAnnotationsElementIds = new Set();\n  #draggingEditors = null;\n  #editorTypes = null;\n  #editorsToRescale = new Set();\n  _editorUndoBar = null;\n  #enableHighlightFloatingButton = false;\n  #enableUpdatedAddImage = false;\n  #enableNewAltTextWhenAddingImage = false;\n  #filterFactory = null;\n  #focusMainContainerTimeoutId = null;\n  #focusManagerAC = null;\n  #highlightColors = null;\n  #highlightWhenShiftUp = false;\n  #floatingToolbar = null;\n  #idManager = new IdManager();\n  #isEnabled = false;\n  #isPointerDown = false;\n  #isWaiting = false;\n  #keyboardManagerAC = null;\n  #lastActiveElement = null;\n  #mainHighlightColorPicker = null;\n  #missingCanvases = null;\n  #mlManager = null;\n  #mode = AnnotationEditorType.NONE;\n  #selectedEditors = new Set();\n  #selectedTextNode = null;\n  #signatureManager = null;\n  #pageColors = null;\n  #showAllStates = null;\n  #pdfDocument = null;\n  #previousStates = {\n    isEditing: false,\n    isEmpty: true,\n    hasSomethingToUndo: false,\n    hasSomethingToRedo: false,\n    hasSelectedEditor: false,\n    hasSelectedText: false\n  };\n  #translation = [0, 0];\n  #translationTimeoutId = null;\n  #container = null;\n  #viewer = null;\n  #viewerAlert = null;\n  #updateModeCapability = null;\n  static TRANSLATE_SMALL = 1;\n  static TRANSLATE_BIG = 10;\n  static get _keyboardManager() {\n    const proto = AnnotationEditorUIManager.prototype;\n    const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== \"BUTTON\" && self.hasSomethingToControl();\n    const textInputChecker = (_self, {\n      target: el\n    }) => {\n      if (el instanceof HTMLInputElement) {\n        const {\n          type\n        } = el;\n        return type !== \"text\" && type !== \"number\";\n      }\n      return true;\n    };\n    const small = this.TRANSLATE_SMALL;\n    const big = this.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+a\", \"mac+meta+a\"], proto.selectAll, {\n      checker: textInputChecker\n    }], [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, {\n      checker: textInputChecker\n    }], [[\"ctrl+y\", \"ctrl+shift+z\", \"mac+meta+shift+z\", \"ctrl+shift+Z\", \"mac+meta+shift+Z\"], proto.redo, {\n      checker: textInputChecker\n    }], [[\"Backspace\", \"alt+Backspace\", \"ctrl+Backspace\", \"shift+Backspace\", \"mac+Backspace\", \"mac+alt+Backspace\", \"mac+ctrl+Backspace\", \"Delete\", \"ctrl+Delete\", \"shift+Delete\", \"mac+Delete\"], proto.delete, {\n      checker: textInputChecker\n    }], [[\"Enter\"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled\n    }], [[\"Space\"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(document.activeElement)\n    }], [[\"Escape\"], proto.unselectAll], [[\"ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\"], proto.translateSelectedEditors, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto.translateSelectedEditors, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  constructor(container, viewer, viewerAlert, altTextManager, commentManager, signatureManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager, editorUndoBar, supportsPinchToZoom) {\n    const signal = this._signal = this.#abortController.signal;\n    this.#container = container;\n    this.#viewer = viewer;\n    this.#viewerAlert = viewerAlert;\n    this.#altTextManager = altTextManager;\n    this.#commentManager = commentManager;\n    this.#signatureManager = signatureManager;\n    this.#pdfDocument = pdfDocument;\n    this._eventBus = eventBus;\n    const evtOpts = {\n      signal,\n      ...internalOpt\n    };\n    eventBus.on(\"editingaction\", this.onEditingAction.bind(this), evtOpts);\n    eventBus.on(\"pagechanging\", this.onPageChanging.bind(this), evtOpts);\n    eventBus.on(\"scalechanging\", this.onScaleChanging.bind(this), evtOpts);\n    eventBus.on(\"rotationchanging\", this.onRotationChanging.bind(this), evtOpts);\n    eventBus.on(\"setpreference\", this.onSetPreference.bind(this), evtOpts);\n    eventBus.on(\"switchannotationeditorparams\", evt => this.updateParams(evt.type, evt.value), evtOpts);\n    window.addEventListener(\"pointerdown\", () => {\n      this.#isPointerDown = true;\n    }, {\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"pointerup\", () => {\n      this.#isPointerDown = false;\n    }, {\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"beforeunload\", this.#beforeUnload.bind(this), {\n      capture: true,\n      signal\n    });\n    this.#addSelectionListener();\n    this.#addDragAndDropListeners();\n    this.#addKeyboardManager();\n    this.#annotationStorage = pdfDocument.annotationStorage;\n    this.#filterFactory = pdfDocument.filterFactory;\n    this.#pageColors = pageColors;\n    this.#highlightColors = highlightColors || null;\n    this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n    this.#enableUpdatedAddImage = enableUpdatedAddImage;\n    this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage;\n    this.#mlManager = mlManager || null;\n    this.viewParameters = {\n      realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: 0\n    };\n    this.isShiftKeyDown = false;\n    this._editorUndoBar = editorUndoBar || null;\n    this._supportsPinchToZoom = supportsPinchToZoom !== false;\n    commentManager?.setSidebarUiManager(this);\n  }\n  destroy() {\n    this.#updateModeCapability?.resolve();\n    this.#updateModeCapability = null;\n    this.#abortController?.abort();\n    this.#abortController = null;\n    this._signal = null;\n    for (const layer of this.#allLayers.values()) {\n      layer.destroy();\n    }\n    this.#allLayers.clear();\n    this.#allEditors.clear();\n    this.#editorsToRescale.clear();\n    this.#missingCanvases?.clear();\n    this.#activeEditor = null;\n    this.#selectedEditors.clear();\n    this.#commandManager.destroy();\n    this.#altTextManager?.destroy();\n    this.#commentManager?.destroy();\n    this.#signatureManager?.destroy();\n    this.#floatingToolbar?.hide();\n    this.#floatingToolbar = null;\n    this.#mainHighlightColorPicker?.destroy();\n    this.#mainHighlightColorPicker = null;\n    this.#allEditableAnnotations = null;\n    if (this.#focusMainContainerTimeoutId) {\n      clearTimeout(this.#focusMainContainerTimeoutId);\n      this.#focusMainContainerTimeoutId = null;\n    }\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n      this.#translationTimeoutId = null;\n    }\n    this._editorUndoBar?.destroy();\n    this.#pdfDocument = null;\n  }\n  combinedSignal(ac) {\n    return AbortSignal.any([this._signal, ac.signal]);\n  }\n  get mlManager() {\n    return this.#mlManager;\n  }\n  get useNewAltTextFlow() {\n    return this.#enableUpdatedAddImage;\n  }\n  get useNewAltTextWhenAddingImage() {\n    return this.#enableNewAltTextWhenAddingImage;\n  }\n  get hcmFilter() {\n    return shadow(this, \"hcmFilter\", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : \"none\");\n  }\n  get direction() {\n    return shadow(this, \"direction\", getComputedStyle(this.#container).direction);\n  }\n  get _highlightColors() {\n    return shadow(this, \"_highlightColors\", this.#highlightColors ? new Map(this.#highlightColors.split(\",\").map(pair => {\n      pair = pair.split(\"=\").map(x => x.trim());\n      pair[1] = pair[1].toUpperCase();\n      return pair;\n    })) : null);\n  }\n  get highlightColors() {\n    const {\n      _highlightColors\n    } = this;\n    if (!_highlightColors) {\n      return shadow(this, \"highlightColors\", null);\n    }\n    const map = new Map();\n    const hasHCM = !!this.#pageColors;\n    for (const [name, color] of _highlightColors) {\n      const isNameForHCM = name.endsWith(\"_HCM\");\n      if (hasHCM && isNameForHCM) {\n        map.set(name.replace(\"_HCM\", \"\"), color);\n        continue;\n      }\n      if (!hasHCM && !isNameForHCM) {\n        map.set(name, color);\n      }\n    }\n    return shadow(this, \"highlightColors\", map);\n  }\n  get highlightColorNames() {\n    return shadow(this, \"highlightColorNames\", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null);\n  }\n  getNonHCMColor(color) {\n    if (!this._highlightColors) {\n      return color;\n    }\n    const colorName = this.highlightColorNames.get(color);\n    return this._highlightColors.get(colorName) || color;\n  }\n  getNonHCMColorName(color) {\n    return this.highlightColorNames.get(color) || color;\n  }\n  setCurrentDrawingSession(layer) {\n    if (layer) {\n      this.unselectAll();\n      this.disableUserSelect(true);\n    } else {\n      this.disableUserSelect(false);\n    }\n    this.#currentDrawingSession = layer;\n  }\n  setMainHighlightColorPicker(colorPicker) {\n    this.#mainHighlightColorPicker = colorPicker;\n  }\n  editAltText(editor, firstTime = false) {\n    this.#altTextManager?.editAltText(this, editor, firstTime);\n  }\n  hasCommentManager() {\n    return !!this.#commentManager;\n  }\n  editComment(editor, posX, posY, options) {\n    this.#commentManager?.showDialog(this, editor, posX, posY, options);\n  }\n  selectComment(pageIndex, uid) {\n    const layer = this.#allLayers.get(pageIndex);\n    const editor = layer?.getEditorByUID(uid);\n    editor?.toggleComment(true, true);\n  }\n  updateComment(editor) {\n    this.#commentManager?.updateComment(editor.getData());\n  }\n  updatePopupColor(editor) {\n    this.#commentManager?.updatePopupColor(editor);\n  }\n  removeComment(editor) {\n    this.#commentManager?.removeComments([editor.uid]);\n  }\n  deleteComment(editor, savedData) {\n    const undo = () => {\n      editor.comment = savedData;\n    };\n    const cmd = () => {\n      this._editorUndoBar?.show(undo, \"comment\");\n      this.toggleComment(null);\n      editor.comment = null;\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  toggleComment(editor, isSelected, visibility = undefined) {\n    this.#commentManager?.toggleCommentPopup(editor, isSelected, visibility);\n  }\n  makeCommentColor(color, opacity) {\n    return color && this.#commentManager?.makeCommentColor(color, opacity) || null;\n  }\n  getCommentDialogElement() {\n    return this.#commentManager?.dialogElement || null;\n  }\n  async waitForEditorsRendered(pageNumber) {\n    if (this.#allLayers.has(pageNumber - 1)) {\n      return;\n    }\n    const {\n      resolve,\n      promise\n    } = Promise.withResolvers();\n    const onEditorsRendered = evt => {\n      if (evt.pageNumber === pageNumber) {\n        this._eventBus.off(\"editorsrendered\", onEditorsRendered);\n        resolve();\n      }\n    };\n    this._eventBus.on(\"editorsrendered\", onEditorsRendered, internalOpt);\n    await promise;\n  }\n  getSignature(editor) {\n    this.#signatureManager?.getSignature({\n      uiManager: this,\n      editor\n    });\n  }\n  get signatureManager() {\n    return this.#signatureManager;\n  }\n  switchToMode(mode, callback) {\n    this._eventBus.on(\"annotationeditormodechanged\", callback, {\n      once: true,\n      signal: this._signal,\n      ...internalOpt\n    });\n    this._eventBus.dispatch(\"showannotationeditorui\", {\n      source: this,\n      mode\n    });\n  }\n  setPreference(name, value) {\n    this._eventBus.dispatch(\"setpreference\", {\n      source: this,\n      name,\n      value\n    });\n  }\n  onSetPreference({\n    name,\n    value\n  }) {\n    switch (name) {\n      case \"enableNewAltTextWhenAddingImage\":\n        this.#enableNewAltTextWhenAddingImage = value;\n        break;\n    }\n  }\n  onPageChanging({\n    pageNumber\n  }) {\n    this.#currentPageIndex = pageNumber - 1;\n  }\n  deletePage(id) {\n    for (const editor of this.getEditors(id)) {\n      editor.remove();\n    }\n    this.#allLayers.delete(id);\n    if (this.#currentPageIndex === id) {\n      this.#currentPageIndex = 0;\n    }\n  }\n  focusMainContainer() {\n    this.#container.focus();\n  }\n  findParent(x, y) {\n    for (const layer of this.#allLayers.values()) {\n      const {\n        x: layerX,\n        y: layerY,\n        width,\n        height\n      } = layer.div.getBoundingClientRect();\n      if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) {\n        return layer;\n      }\n    }\n    return null;\n  }\n  disableUserSelect(value = false) {\n    this.#viewer.classList.toggle(\"noUserSelect\", value);\n  }\n  addShouldRescale(editor) {\n    this.#editorsToRescale.add(editor);\n  }\n  removeShouldRescale(editor) {\n    this.#editorsToRescale.delete(editor);\n  }\n  onScaleChanging({\n    scale\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    for (const editor of this.#editorsToRescale) {\n      editor.onScaleChanging();\n    }\n    this.#currentDrawingSession?.onScaleChanging();\n  }\n  onRotationChanging({\n    pagesRotation\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.rotation = pagesRotation;\n  }\n  #getAnchorElementForSelection({\n    anchorNode\n  }) {\n    return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode;\n  }\n  #getLayerForTextLayer(textLayer) {\n    const {\n      currentLayer\n    } = this;\n    if (currentLayer.hasTextLayer(textLayer)) {\n      return currentLayer;\n    }\n    for (const layer of this.#allLayers.values()) {\n      if (layer.hasTextLayer(textLayer)) {\n        return layer;\n      }\n    }\n    return null;\n  }\n  highlightSelection(methodOfCreation = \"\", comment = false) {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const {\n      anchorNode,\n      anchorOffset,\n      focusNode,\n      focusOffset\n    } = selection;\n    const text = selection.toString();\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    selection.empty();\n    const layer = this.#getLayerForTextLayer(textLayer);\n    const isNoneMode = this.#mode === AnnotationEditorType.NONE;\n    const callback = () => {\n      const editor = layer?.createAndAddNewEditor({\n        x: 0,\n        y: 0\n      }, false, {\n        methodOfCreation,\n        boxes,\n        anchorNode,\n        anchorOffset,\n        focusNode,\n        focusOffset,\n        text\n      });\n      if (isNoneMode) {\n        this.showAllEditors(\"highlight\", true, true);\n      }\n      if (comment) {\n        editor?.editComment();\n      }\n    };\n    if (isNoneMode) {\n      this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);\n      return;\n    }\n    callback();\n  }\n  commentSelection(methodOfCreation = \"\") {\n    this.highlightSelection(methodOfCreation, true);\n  }\n  #beforeUnload(e) {\n    this.commitOrRemove();\n    this.currentLayer?.endDrawingSession(false);\n  }\n  #displayFloatingToolbar() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    this.#floatingToolbar ||= new FloatingToolbar(this);\n    this.#floatingToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n  }\n  getAndRemoveDataFromAnnotationStorage(annotationId) {\n    if (!this.#annotationStorage) {\n      return null;\n    }\n    const key = `${AnnotationEditorPrefix}${annotationId}`;\n    const storedValue = this.#annotationStorage.getRawValue(key);\n    if (storedValue) {\n      this.#annotationStorage.remove(key);\n    }\n    return storedValue;\n  }\n  addToAnnotationStorage(editor) {\n    if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) {\n      this.#annotationStorage.setValue(editor.id, editor);\n    }\n  }\n  a11yAlert(messageId, args = null) {\n    const viewerAlert = this.#viewerAlert;\n    if (!viewerAlert) {\n      return;\n    }\n    viewerAlert.setAttribute(\"data-l10n-id\", messageId);\n    if (args) {\n      viewerAlert.setAttribute(\"data-l10n-args\", JSON.stringify(args));\n    } else {\n      viewerAlert.removeAttribute(\"data-l10n-args\");\n    }\n  }\n  #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    const {\n      anchorNode\n    } = selection;\n    if (anchorNode === this.#selectedTextNode) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    if (!textLayer) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    this.#floatingToolbar?.hide();\n    this.#selectedTextNode = anchorNode;\n    this.#dispatchUpdateStates({\n      hasSelectedText: true\n    });\n    if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.showAllEditors(\"highlight\", true, true);\n    }\n    this.#highlightWhenShiftUp = this.isShiftKeyDown;\n    if (!this.isShiftKeyDown) {\n      const activeLayer = this.#mode === AnnotationEditorType.HIGHLIGHT ? this.#getLayerForTextLayer(textLayer) : null;\n      activeLayer?.toggleDrawing();\n      if (this.#isPointerDown) {\n        const ac = new AbortController();\n        const signal = this.combinedSignal(ac);\n        const pointerup = e => {\n          if (e.type === \"pointerup\" && e.button !== 0) {\n            return;\n          }\n          ac.abort();\n          activeLayer?.toggleDrawing(true);\n          if (e.type === \"pointerup\") {\n            this.#onSelectEnd(\"main_toolbar\");\n          }\n        };\n        window.addEventListener(\"pointerup\", pointerup, {\n          signal\n        });\n        window.addEventListener(\"blur\", pointerup, {\n          signal\n        });\n      } else {\n        activeLayer?.toggleDrawing(true);\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n  #onSelectEnd(methodOfCreation = \"\") {\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.highlightSelection(methodOfCreation);\n    } else if (this.#enableHighlightFloatingButton) {\n      this.#displayFloatingToolbar();\n    }\n  }\n  #addSelectionListener() {\n    document.addEventListener(\"selectionchange\", this.#selectionChange.bind(this), {\n      signal: this._signal\n    });\n  }\n  #addFocusManager() {\n    if (this.#focusManagerAC) {\n      return;\n    }\n    this.#focusManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#focusManagerAC);\n    window.addEventListener(\"focus\", this.focus.bind(this), {\n      signal\n    });\n    window.addEventListener(\"blur\", this.blur.bind(this), {\n      signal\n    });\n  }\n  #removeFocusManager() {\n    this.#focusManagerAC?.abort();\n    this.#focusManagerAC = null;\n  }\n  blur() {\n    this.isShiftKeyDown = false;\n    if (this.#highlightWhenShiftUp) {\n      this.#highlightWhenShiftUp = false;\n      this.#onSelectEnd(\"main_toolbar\");\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    for (const editor of this.#selectedEditors) {\n      if (editor.div.contains(activeElement)) {\n        this.#lastActiveElement = [editor, activeElement];\n        editor._focusEventsAllowed = false;\n        break;\n      }\n    }\n  }\n  focus() {\n    if (!this.#lastActiveElement) {\n      return;\n    }\n    const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n    this.#lastActiveElement = null;\n    lastActiveElement.addEventListener(\"focusin\", () => {\n      lastEditor._focusEventsAllowed = true;\n    }, {\n      once: true,\n      signal: this._signal\n    });\n    lastActiveElement.focus();\n  }\n  #addKeyboardManager() {\n    if (this.#keyboardManagerAC) {\n      return;\n    }\n    this.#keyboardManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#keyboardManagerAC);\n    window.addEventListener(\"keydown\", this.keydown.bind(this), {\n      signal\n    });\n    window.addEventListener(\"keyup\", this.keyup.bind(this), {\n      signal\n    });\n  }\n  #removeKeyboardManager() {\n    this.#keyboardManagerAC?.abort();\n    this.#keyboardManagerAC = null;\n  }\n  #addCopyPasteListeners() {\n    if (this.#copyPasteAC) {\n      return;\n    }\n    this.#copyPasteAC = new AbortController();\n    const signal = this.combinedSignal(this.#copyPasteAC);\n    document.addEventListener(\"copy\", this.copy.bind(this), {\n      signal\n    });\n    document.addEventListener(\"cut\", this.cut.bind(this), {\n      signal\n    });\n    document.addEventListener(\"paste\", this.paste.bind(this), {\n      signal\n    });\n  }\n  #removeCopyPasteListeners() {\n    this.#copyPasteAC?.abort();\n    this.#copyPasteAC = null;\n  }\n  #addDragAndDropListeners() {\n    const signal = this._signal;\n    document.addEventListener(\"dragover\", this.dragOver.bind(this), {\n      signal\n    });\n    document.addEventListener(\"drop\", this.drop.bind(this), {\n      signal\n    });\n  }\n  addEditListeners() {\n    this.#addKeyboardManager();\n    this.setEditingState(true);\n  }\n  removeEditListeners() {\n    this.#removeKeyboardManager();\n    this.setEditingState(false);\n  }\n  dragOver(event) {\n    for (const {\n      type\n    } of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(type)) {\n          event.dataTransfer.dropEffect = \"copy\";\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n  drop(event) {\n    for (const item of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n  copy(event) {\n    event.preventDefault();\n    this.#activeEditor?.commitOrRemove();\n    if (!this.hasSelection) {\n      return;\n    }\n    const editors = [];\n    for (const editor of this.#selectedEditors) {\n      const serialized = editor.serialize(true);\n      if (serialized) {\n        editors.push(serialized);\n      }\n    }\n    if (editors.length === 0) {\n      return;\n    }\n    event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n  }\n  cut(event) {\n    this.copy(event);\n    this.delete();\n  }\n  async paste(event) {\n    event.preventDefault();\n    const {\n      clipboardData\n    } = event;\n    for (const item of clipboardData.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          return;\n        }\n      }\n    }\n    let data = clipboardData.getData(\"application/pdfjs\");\n    if (!data) {\n      return;\n    }\n    try {\n      data = JSON.parse(data);\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n      return;\n    }\n    if (!Array.isArray(data)) {\n      return;\n    }\n    this.unselectAll();\n    const layer = this.currentLayer;\n    try {\n      const newEditors = [];\n      for (const editor of data) {\n        const deserializedEditor = await layer.deserialize(editor);\n        if (!deserializedEditor) {\n          return;\n        }\n        newEditors.push(deserializedEditor);\n      }\n      const cmd = () => {\n        for (const editor of newEditors) {\n          this.#addEditorToLayer(editor);\n        }\n        this.#selectEditors(newEditors);\n      };\n      const undo = () => {\n        for (const editor of newEditors) {\n          editor.remove();\n        }\n      };\n      this.addCommands({\n        cmd,\n        undo,\n        mustExec: true\n      });\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n    }\n  }\n  keydown(event) {\n    if (!this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = true;\n    }\n    if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) {\n      AnnotationEditorUIManager._keyboardManager.exec(this, event);\n    }\n  }\n  keyup(event) {\n    if (this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = false;\n      if (this.#highlightWhenShiftUp) {\n        this.#highlightWhenShiftUp = false;\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n  onEditingAction({\n    name\n  }) {\n    switch (name) {\n      case \"undo\":\n      case \"redo\":\n      case \"delete\":\n      case \"selectAll\":\n        this[name]();\n        break;\n      case \"highlightSelection\":\n        this.highlightSelection(\"context_menu\");\n        break;\n      case \"commentSelection\":\n        this.commentSelection(\"context_menu\");\n        break;\n    }\n  }\n  updatePageIndex(oldPageIndex, newPageIndex) {\n    for (const editor of this.getEditors(oldPageIndex)) {\n      editor.pageIndex = newPageIndex;\n    }\n    const layer = this.#savedAllLayers.get(oldPageIndex);\n    if (layer) {\n      layer.pageIndex = newPageIndex;\n      this.#allLayers.set(newPageIndex, layer);\n      if (this.#isEnabled) {\n        layer.enable();\n      } else {\n        layer.disable();\n      }\n    }\n  }\n  startUpdatePages() {\n    this.#savedAllLayers = new Map(this.#allLayers);\n    this.#allLayers.clear();\n  }\n  endUpdatePages() {\n    this.#savedAllLayers = null;\n  }\n  clonePage(pageIndex, newPageIndex) {\n    for (const editor of this.getEditors(pageIndex)) {\n      const serialized = editor.serialize(editor.mode !== AnnotationEditorType.HIGHLIGHT);\n      if (!serialized) {\n        continue;\n      }\n      serialized.pageIndex = newPageIndex;\n      serialized.id = this.getId();\n      serialized.isClone = true;\n      delete serialized.popupRef;\n      this.#annotationStorage.setValue(serialized.id, serialized);\n    }\n  }\n  findClonesForPage(layer) {\n    const promises = [];\n    const {\n      pageIndex\n    } = layer;\n    for (const [id, editor] of this.#annotationStorage) {\n      if (editor.pageIndex === pageIndex && editor.isClone) {\n        this.#annotationStorage.remove(id);\n        promises.push(layer.deserialize(editor).then(deserializedEditor => {\n          if (deserializedEditor) {\n            deserializedEditor.isClone = true;\n            layer.addOrRebuild(deserializedEditor);\n          }\n        }));\n      }\n    }\n    return Promise.all(promises);\n  }\n  #dispatchUpdateStates(details) {\n    const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value);\n    if (hasChanged) {\n      this._eventBus.dispatch(\"editingstateschanged\", {\n        source: this,\n        details: Object.assign(this.#previousStates, details)\n      });\n      if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) {\n        this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]);\n      }\n    }\n  }\n  #dispatchUpdateUI(details) {\n    this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n      source: this,\n      details\n    });\n  }\n  setEditingState(isEditing) {\n    if (isEditing) {\n      this.#addFocusManager();\n      this.#addCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: this.#mode !== AnnotationEditorType.NONE,\n        isEmpty: this.#isEmpty(),\n        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n        hasSelectedEditor: false\n      });\n    } else {\n      this.#removeFocusManager();\n      this.#removeCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: false\n      });\n      this.disableUserSelect(false);\n    }\n  }\n  registerEditorTypes(types) {\n    if (this.#editorTypes) {\n      return;\n    }\n    this.#editorTypes = types;\n    for (const editorType of this.#editorTypes) {\n      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n    }\n  }\n  getId() {\n    return this.#idManager.id;\n  }\n  get currentLayer() {\n    return this.#allLayers.get(this.#currentPageIndex);\n  }\n  getLayer(pageIndex) {\n    return this.#allLayers.get(pageIndex);\n  }\n  get currentPageIndex() {\n    return this.#currentPageIndex;\n  }\n  addLayer(layer) {\n    this.#allLayers.set(layer.pageIndex, layer);\n    if (this.#isEnabled) {\n      layer.enable();\n    } else {\n      layer.disable();\n    }\n  }\n  removeLayer(layer) {\n    this.#allLayers.delete(layer.pageIndex);\n  }\n  async updateMode(mode, editId = null, isFromUser = false, isFromKeyboard = false, mustEnterInEditMode = false, editComment = false) {\n    if (this.#mode === mode) {\n      return;\n    }\n    if (this.#updateModeCapability) {\n      await this.#updateModeCapability.promise;\n      if (!this.#updateModeCapability) {\n        return;\n      }\n    }\n    this.#updateModeCapability = Promise.withResolvers();\n    this.#currentDrawingSession?.commitOrRemove();\n    if (this.#mode === AnnotationEditorType.POPUP) {\n      this.#commentManager?.hideSidebar();\n    }\n    this.#commentManager?.destroyPopup();\n    this.#mode = mode;\n    if (mode === AnnotationEditorType.NONE) {\n      this.setEditingState(false);\n      this.#disableAll();\n      for (const editor of this.#allEditors.values()) {\n        editor.hideStandaloneCommentButton();\n      }\n      this._editorUndoBar?.hide();\n      this.toggleComment(null);\n      this.#updateModeCapability.resolve();\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      editor.addStandaloneCommentButton();\n    }\n    if (mode === AnnotationEditorType.SIGNATURE) {\n      await this.#signatureManager?.loadSignatures();\n    }\n    if (isFromUser) {\n      CurrentPointers.clearPointerType();\n    }\n    this.setEditingState(true);\n    await this.#enableAll();\n    this.unselectAll();\n    for (const layer of this.#allLayers.values()) {\n      layer.updateMode(mode);\n    }\n    if (mode === AnnotationEditorType.POPUP) {\n      this.#allEditableAnnotations ||= await this.#pdfDocument.getAnnotationsByType(new Set(this.#editorTypes.map(editorClass => editorClass._editorType)));\n      const elementIds = new Set();\n      const allComments = [];\n      for (const editor of this.#allEditors.values()) {\n        const {\n          annotationElementId,\n          hasComment,\n          deleted\n        } = editor;\n        if (annotationElementId) {\n          elementIds.add(annotationElementId);\n        }\n        if (hasComment && !deleted) {\n          allComments.push(editor.getData());\n        }\n      }\n      for (const annotation of this.#allEditableAnnotations) {\n        const {\n          id,\n          popupRef,\n          contentsObj\n        } = annotation;\n        if (popupRef && contentsObj?.str && !elementIds.has(id) && !this.#deletedAnnotationsElementIds.has(id)) {\n          allComments.push(annotation);\n        }\n      }\n      this.#commentManager?.showSidebar(allComments);\n    }\n    if (!editId) {\n      if (isFromKeyboard) {\n        this.addNewEditorFromKeyboard();\n      }\n      this.#updateModeCapability.resolve();\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      if (editor.uid === editId) {\n        this.setSelected(editor);\n        if (editComment) {\n          editor.editComment();\n        } else if (mustEnterInEditMode) {\n          editor.enterInEditMode();\n        } else {\n          editor.focus();\n        }\n      } else {\n        editor.unselect();\n      }\n    }\n    this.#updateModeCapability.resolve();\n  }\n  addNewEditorFromKeyboard() {\n    if (this.currentLayer.canCreateNewEmptyEditor()) {\n      this.currentLayer.addNewEditor();\n    }\n  }\n  updateToolbar(options) {\n    if (options.mode === this.#mode) {\n      return;\n    }\n    this._eventBus.dispatch(\"switchannotationeditormode\", {\n      source: this,\n      ...options\n    });\n  }\n  updateParams(type, value) {\n    if (!this.#editorTypes) {\n      return;\n    }\n    switch (type) {\n      case AnnotationEditorParamsType.CREATE:\n        this.currentLayer.addNewEditor(value);\n        return;\n      case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n        this._eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"editing\",\n            data: {\n              type: \"highlight\",\n              action: \"toggle_visibility\"\n            }\n          }\n        });\n        (this.#showAllStates ||= new Map()).set(type, value);\n        this.showAllEditors(\"highlight\", value);\n        break;\n    }\n    if (this.hasSelection) {\n      for (const editor of this.#selectedEditors) {\n        editor.updateParams(type, value);\n      }\n    } else {\n      for (const editorType of this.#editorTypes) {\n        editorType.updateDefaultParams(type, value);\n      }\n    }\n  }\n  showAllEditors(type, visible, updateButton = false) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.editorType === type) {\n        editor.show(visible);\n      }\n    }\n    const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true;\n    if (state !== visible) {\n      this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]);\n    }\n  }\n  enableWaiting(mustWait = false) {\n    if (this.#isWaiting === mustWait) {\n      return;\n    }\n    this.#isWaiting = mustWait;\n    for (const layer of this.#allLayers.values()) {\n      if (mustWait) {\n        layer.disableClick();\n      } else {\n        layer.enableClick();\n      }\n      layer.div.classList.toggle(\"waiting\", mustWait);\n    }\n  }\n  async #enableAll() {\n    if (!this.#isEnabled) {\n      this.#isEnabled = true;\n      const promises = [];\n      for (const layer of this.#allLayers.values()) {\n        promises.push(layer.enable());\n      }\n      await Promise.all(promises);\n      for (const editor of this.#allEditors.values()) {\n        editor.enable();\n      }\n    }\n  }\n  #disableAll() {\n    this.unselectAll();\n    if (this.#isEnabled) {\n      this.#isEnabled = false;\n      for (const layer of this.#allLayers.values()) {\n        layer.disable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.disable();\n      }\n    }\n  }\n  *getEditors(pageIndex) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.pageIndex === pageIndex) {\n        yield editor;\n      }\n    }\n  }\n  getEditor(id) {\n    return this.#allEditors.get(id);\n  }\n  addEditor(editor) {\n    this.#allEditors.set(editor.id, editor);\n  }\n  removeEditor(editor) {\n    if (editor.div.contains(document.activeElement)) {\n      if (this.#focusMainContainerTimeoutId) {\n        clearTimeout(this.#focusMainContainerTimeoutId);\n      }\n      this.#focusMainContainerTimeoutId = setTimeout(() => {\n        this.focusMainContainer();\n        this.#focusMainContainerTimeoutId = null;\n      }, 0);\n    }\n    this.#allEditors.delete(editor.id);\n    if (editor.annotationElementId) {\n      this.#missingCanvases?.delete(editor.annotationElementId);\n    }\n    this.unselect(editor);\n    if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) {\n      this.#annotationStorage?.remove(editor.id);\n    }\n  }\n  addDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n    this.addChangedExistingAnnotation(editor);\n    editor.deleted = true;\n  }\n  isDeletedAnnotationElement(annotationElementId) {\n    return this.#deletedAnnotationsElementIds.has(annotationElementId);\n  }\n  removeDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n    this.removeChangedExistingAnnotation(editor);\n    editor.deleted = false;\n  }\n  #addEditorToLayer(editor) {\n    const layer = this.#allLayers.get(editor.pageIndex);\n    if (layer) {\n      layer.addOrRebuild(editor);\n    } else {\n      this.addEditor(editor);\n      this.addToAnnotationStorage(editor);\n    }\n  }\n  setActiveEditor(editor) {\n    if (this.#activeEditor === editor) {\n      return;\n    }\n    this.#activeEditor = editor;\n    if (editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  get #lastSelectedEditor() {\n    let ed = null;\n    for (ed of this.#selectedEditors) {}\n    return ed;\n  }\n  updateUI(editor) {\n    if (this.#lastSelectedEditor === editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  updateUIForDefaultProperties(editorType) {\n    this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n  }\n  toggleSelected(editor) {\n    if (this.#selectedEditors.has(editor)) {\n      this.#selectedEditors.delete(editor);\n      editor.unselect();\n      this.#dispatchUpdateStates({\n        hasSelectedEditor: this.hasSelection\n      });\n      return;\n    }\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  setSelected(editor) {\n    this.updateToolbar({\n      mode: editor.mode,\n      editId: editor.uid\n    });\n    this.#currentDrawingSession?.commitOrRemove();\n    for (const ed of this.#selectedEditors) {\n      if (ed !== editor) {\n        ed.unselect();\n      }\n    }\n    this.#commentManager?.destroyPopup();\n    this.#selectedEditors.clear();\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  get firstSelectedEditor() {\n    return this.#selectedEditors.values().next().value;\n  }\n  unselect(editor) {\n    editor.unselect();\n    this.#selectedEditors.delete(editor);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  get hasSelection() {\n    return this.#selectedEditors.size !== 0;\n  }\n  get isEnterHandled() {\n    return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled;\n  }\n  undo() {\n    this.#commandManager.undo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n      hasSomethingToRedo: true,\n      isEmpty: this.#isEmpty()\n    });\n    this._editorUndoBar?.hide();\n  }\n  redo() {\n    this.#commandManager.redo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n      isEmpty: this.#isEmpty()\n    });\n  }\n  addCommands(params) {\n    this.#commandManager.add(params);\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: false,\n      isEmpty: this.#isEmpty()\n    });\n  }\n  cleanUndoStack(type) {\n    this.#commandManager.cleanType(type);\n  }\n  #isEmpty() {\n    if (this.#allEditors.size === 0) {\n      return true;\n    }\n    if (this.#allEditors.size === 1) {\n      for (const editor of this.#allEditors.values()) {\n        return editor.isEmpty();\n      }\n    }\n    return false;\n  }\n  delete() {\n    this.commitOrRemove();\n    const drawingEditor = this.currentLayer?.endDrawingSession(true);\n    if (!this.hasSelection && !drawingEditor) {\n      return;\n    }\n    const editors = drawingEditor ? [drawingEditor] : [...this.#selectedEditors];\n    const cmd = () => {\n      this._editorUndoBar?.show(undo, editors.length === 1 ? editors[0].editorType : editors.length);\n      for (const editor of editors) {\n        editor.remove();\n      }\n    };\n    const undo = () => {\n      for (const editor of editors) {\n        this.#addEditorToLayer(editor);\n      }\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  commitOrRemove() {\n    this.#activeEditor?.commitOrRemove();\n  }\n  hasSomethingToControl() {\n    return this.#activeEditor || this.hasSelection;\n  }\n  #selectEditors(editors) {\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    for (const editor of editors) {\n      if (editor.isEmpty()) {\n        continue;\n      }\n      this.#selectedEditors.add(editor);\n      editor.select();\n    }\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  selectAll() {\n    for (const editor of this.#selectedEditors) {\n      editor.commit();\n    }\n    this.#selectEditors(this.#allEditors.values());\n  }\n  unselectAll() {\n    if (this.#activeEditor) {\n      this.#activeEditor.commitOrRemove();\n      if (this.#mode !== AnnotationEditorType.NONE) {\n        return;\n      }\n    }\n    if (this.#currentDrawingSession?.commitOrRemove()) {\n      return;\n    }\n    this.#commentManager?.destroyPopup();\n    if (!this.hasSelection) {\n      return;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: false\n    });\n  }\n  translateSelectedEditors(x, y, noCommit = false) {\n    if (!noCommit) {\n      this.commitOrRemove();\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    this.#translation[0] += x;\n    this.#translation[1] += y;\n    const [totalX, totalY] = this.#translation;\n    const editors = [...this.#selectedEditors];\n    const TIME_TO_WAIT = 1000;\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n    }\n    this.#translationTimeoutId = setTimeout(() => {\n      this.#translationTimeoutId = null;\n      this.#translation[0] = this.#translation[1] = 0;\n      this.addCommands({\n        cmd: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(totalX, totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        undo: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(-totalX, -totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        mustExec: false\n      });\n    }, TIME_TO_WAIT);\n    for (const editor of editors) {\n      editor.translateInPage(x, y);\n      editor.translationDone();\n    }\n  }\n  setUpDragSession() {\n    if (!this.hasSelection) {\n      return;\n    }\n    this.disableUserSelect(true);\n    this.#draggingEditors = new Map();\n    for (const editor of this.#selectedEditors) {\n      this.#draggingEditors.set(editor, {\n        savedX: editor.x,\n        savedY: editor.y,\n        savedPageIndex: editor.pageIndex,\n        newX: 0,\n        newY: 0,\n        newPageIndex: -1\n      });\n    }\n  }\n  endDragSession() {\n    if (!this.#draggingEditors) {\n      return false;\n    }\n    this.disableUserSelect(false);\n    const map = this.#draggingEditors;\n    this.#draggingEditors = null;\n    let mustBeAddedInUndoStack = false;\n    for (const [{\n      x,\n      y,\n      pageIndex\n    }, value] of map) {\n      value.newX = x;\n      value.newY = y;\n      value.newPageIndex = pageIndex;\n      mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;\n    }\n    if (!mustBeAddedInUndoStack) {\n      return false;\n    }\n    const move = (editor, x, y, pageIndex) => {\n      if (this.#allEditors.has(editor.id)) {\n        const parent = this.#allLayers.get(pageIndex);\n        if (parent) {\n          editor._setParentAndPosition(parent, x, y);\n        } else {\n          editor.pageIndex = pageIndex;\n          editor.x = x;\n          editor.y = y;\n        }\n      }\n    };\n    this.addCommands({\n      cmd: () => {\n        for (const [editor, {\n          newX,\n          newY,\n          newPageIndex\n        }] of map) {\n          move(editor, newX, newY, newPageIndex);\n        }\n      },\n      undo: () => {\n        for (const [editor, {\n          savedX,\n          savedY,\n          savedPageIndex\n        }] of map) {\n          move(editor, savedX, savedY, savedPageIndex);\n        }\n      },\n      mustExec: true\n    });\n    return true;\n  }\n  dragSelectedEditors(tx, ty) {\n    if (!this.#draggingEditors) {\n      return;\n    }\n    for (const editor of this.#draggingEditors.keys()) {\n      editor.drag(tx, ty);\n    }\n  }\n  rebuild(editor) {\n    if (editor.parent === null) {\n      const parent = this.getLayer(editor.pageIndex);\n      if (parent) {\n        parent.changeParent(editor);\n        parent.addOrRebuild(editor);\n      } else {\n        this.addEditor(editor);\n        this.addToAnnotationStorage(editor);\n        editor.rebuild();\n      }\n    } else {\n      editor.parent.addOrRebuild(editor);\n    }\n  }\n  get isEditorHandlingKeyboard() {\n    return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();\n  }\n  isActive(editor) {\n    return this.#activeEditor === editor;\n  }\n  getActive() {\n    return this.#activeEditor;\n  }\n  getMode() {\n    return this.#mode;\n  }\n  isEditingMode() {\n    return this.#mode !== AnnotationEditorType.NONE;\n  }\n  get imageManager() {\n    return shadow(this, \"imageManager\", new ImageManager());\n  }\n  getSelectionBoxes(textLayer) {\n    if (!textLayer) {\n      return null;\n    }\n    const selection = document.getSelection();\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) {\n        return null;\n      }\n    }\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    let rotator;\n    switch (textLayer.getAttribute(\"data-main-rotation\")) {\n      case \"90\":\n        rotator = (x, y, w, h) => ({\n          x: (y - layerY) / parentHeight,\n          y: 1 - (x + w - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      case \"180\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (x + w - layerX) / parentWidth,\n          y: 1 - (y + h - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n      case \"270\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (y + h - layerY) / parentHeight,\n          y: (x - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      default:\n        rotator = (x, y, w, h) => ({\n          x: (x - layerX) / parentWidth,\n          y: (y - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n    }\n    const boxes = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      for (const {\n        x,\n        y,\n        width,\n        height\n      } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        boxes.push(rotator(x, y, width, height));\n      }\n    }\n    return boxes.length === 0 ? null : boxes;\n  }\n  addChangedExistingAnnotation({\n    annotationElementId,\n    id\n  }) {\n    (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id);\n  }\n  removeChangedExistingAnnotation({\n    annotationElementId\n  }) {\n    this.#changedExistingAnnotations?.delete(annotationElementId);\n  }\n  renderAnnotationElement(annotation) {\n    const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n    if (!editorId) {\n      return;\n    }\n    const editor = this.#annotationStorage.getRawValue(editorId);\n    if (!editor) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n      return;\n    }\n    editor.renderAnnotationElement(annotation);\n  }\n  setMissingCanvas(annotationId, annotationElementId, canvas) {\n    const editor = this.#missingCanvases?.get(annotationId);\n    if (!editor) {\n      return;\n    }\n    editor.setCanvas(annotationElementId, canvas);\n    this.#missingCanvases.delete(annotationId);\n  }\n  addMissingCanvas(annotationId, editor) {\n    (this.#missingCanvases ||= new Map()).set(annotationId, editor);\n  }\n}\n\n;// ./src/display/editor/alt_text.js\n\nclass AltText {\n  #altText = null;\n  #altTextDecorative = false;\n  #altTextButton = null;\n  #altTextButtonLabel = null;\n  #altTextTooltip = null;\n  #altTextTooltipTimeout = null;\n  #altTextWasFromKeyBoard = false;\n  #badge = null;\n  #editor = null;\n  #guessedText = null;\n  #textWithDisclaimer = null;\n  #useNewAltTextFlow = false;\n  static #l10nNewButton = null;\n  static _l10n = null;\n  constructor(editor) {\n    this.#editor = editor;\n    this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow;\n    AltText.#l10nNewButton ||= Object.freeze({\n      added: \"pdfjs-editor-new-alt-text-added-button\",\n      \"added-label\": \"pdfjs-editor-new-alt-text-added-button-label\",\n      missing: \"pdfjs-editor-new-alt-text-missing-button\",\n      \"missing-label\": \"pdfjs-editor-new-alt-text-missing-button-label\",\n      review: \"pdfjs-editor-new-alt-text-to-review-button\",\n      \"review-label\": \"pdfjs-editor-new-alt-text-to-review-button-label\"\n    });\n  }\n  static initialize(l10n) {\n    AltText._l10n ??= l10n;\n  }\n  async render() {\n    const altText = this.#altTextButton = document.createElement(\"button\");\n    altText.className = \"altText\";\n    altText.tabIndex = \"0\";\n    const label = this.#altTextButtonLabel = document.createElement(\"span\");\n    altText.append(label);\n    if (this.#useNewAltTextFlow) {\n      altText.classList.add(\"new\");\n      altText.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton.missing);\n      label.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[\"missing-label\"]);\n    } else {\n      altText.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button\");\n      label.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button-label\");\n    }\n    const signal = this.#editor._uiManager._signal;\n    altText.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    altText.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal\n    });\n    const onClick = event => {\n      event.preventDefault();\n      this.#editor._uiManager.editAltText(this.#editor);\n      if (this.#useNewAltTextFlow) {\n        this.#editor._reportTelemetry({\n          action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n          data: {\n            label: this.#label\n          }\n        });\n      }\n    };\n    altText.addEventListener(\"click\", onClick, {\n      capture: true,\n      signal\n    });\n    altText.addEventListener(\"keydown\", event => {\n      if (event.target === altText && event.key === \"Enter\") {\n        this.#altTextWasFromKeyBoard = true;\n        onClick(event);\n      }\n    }, {\n      signal\n    });\n    await this.#setState();\n    return altText;\n  }\n  get #label() {\n    return this.#altText && \"added\" || this.#altText === null && this.guessedText && \"review\" || \"missing\";\n  }\n  finish() {\n    if (!this.#altTextButton) {\n      return;\n    }\n    this.#altTextButton.focus({\n      focusVisible: this.#altTextWasFromKeyBoard\n    });\n    this.#altTextWasFromKeyBoard = false;\n  }\n  isEmpty() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText === null;\n    }\n    return !this.#altText && !this.#altTextDecorative;\n  }\n  hasData() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText !== null || !!this.#guessedText;\n    }\n    return this.isEmpty();\n  }\n  get guessedText() {\n    return this.#guessedText;\n  }\n  async setGuessedText(guessedText) {\n    if (this.#altText !== null) {\n      return;\n    }\n    this.#guessedText = guessedText;\n    this.#textWithDisclaimer = await AltText._l10n.get(\"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\", {\n      generatedAltText: guessedText\n    });\n    this.#setState();\n  }\n  toggleAltTextBadge(visibility = false) {\n    if (!this.#useNewAltTextFlow || this.#altText) {\n      this.#badge?.remove();\n      this.#badge = null;\n      return;\n    }\n    if (!this.#badge) {\n      const badge = this.#badge = document.createElement(\"div\");\n      badge.className = \"noAltTextBadge\";\n      this.#editor.div.append(badge);\n    }\n    this.#badge.classList.toggle(\"hidden\", !visibility);\n  }\n  serialize(isForCopying) {\n    let altText = this.#altText;\n    if (!isForCopying && this.#guessedText === altText) {\n      altText = this.#textWithDisclaimer;\n    }\n    return {\n      altText,\n      decorative: this.#altTextDecorative,\n      guessedText: this.#guessedText,\n      textWithDisclaimer: this.#textWithDisclaimer\n    };\n  }\n  get data() {\n    return {\n      altText: this.#altText,\n      decorative: this.#altTextDecorative\n    };\n  }\n  set data({\n    altText,\n    decorative,\n    guessedText,\n    textWithDisclaimer,\n    cancel = false\n  }) {\n    if (guessedText) {\n      this.#guessedText = guessedText;\n      this.#textWithDisclaimer = textWithDisclaimer;\n    }\n    if (this.#altText === altText && this.#altTextDecorative === decorative) {\n      return;\n    }\n    if (!cancel) {\n      this.#altText = altText;\n      this.#altTextDecorative = decorative;\n    }\n    this.#setState();\n  }\n  toggle(enabled = false) {\n    if (!this.#altTextButton) {\n      return;\n    }\n    if (!enabled && this.#altTextTooltipTimeout) {\n      clearTimeout(this.#altTextTooltipTimeout);\n      this.#altTextTooltipTimeout = null;\n    }\n    this.#altTextButton.disabled = !enabled;\n  }\n  shown() {\n    this.#editor._reportTelemetry({\n      action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n      data: {\n        label: this.#label\n      }\n    });\n  }\n  destroy() {\n    this.#altTextButton?.remove();\n    this.#altTextButton = null;\n    this.#altTextButtonLabel = null;\n    this.#altTextTooltip = null;\n    this.#badge?.remove();\n    this.#badge = null;\n  }\n  async #setState() {\n    const button = this.#altTextButton;\n    if (!button) {\n      return;\n    }\n    if (this.#useNewAltTextFlow) {\n      button.classList.toggle(\"done\", !!this.#altText);\n      button.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[this.#label]);\n      this.#altTextButtonLabel?.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[`${this.#label}-label`]);\n      if (!this.#altText) {\n        this.#altTextTooltip?.remove();\n        return;\n      }\n    } else {\n      if (!this.#altText && !this.#altTextDecorative) {\n        button.classList.remove(\"done\");\n        this.#altTextTooltip?.remove();\n        return;\n      }\n      button.classList.add(\"done\");\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-edit-button\");\n    }\n    let tooltip = this.#altTextTooltip;\n    if (!tooltip) {\n      this.#altTextTooltip = tooltip = document.createElement(\"span\");\n      tooltip.className = \"tooltip\";\n      tooltip.setAttribute(\"role\", \"tooltip\");\n      tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n      const DELAY_TO_SHOW_TOOLTIP = 100;\n      const signal = this.#editor._uiManager._signal;\n      signal.addEventListener(\"abort\", () => {\n        clearTimeout(this.#altTextTooltipTimeout);\n        this.#altTextTooltipTimeout = null;\n      }, {\n        once: true\n      });\n      button.addEventListener(\"mouseenter\", () => {\n        this.#altTextTooltipTimeout = setTimeout(() => {\n          this.#altTextTooltipTimeout = null;\n          this.#altTextTooltip.classList.add(\"show\");\n          this.#editor._reportTelemetry({\n            action: \"alt_text_tooltip\"\n          });\n        }, DELAY_TO_SHOW_TOOLTIP);\n      }, {\n        signal\n      });\n      button.addEventListener(\"mouseleave\", () => {\n        if (this.#altTextTooltipTimeout) {\n          clearTimeout(this.#altTextTooltipTimeout);\n          this.#altTextTooltipTimeout = null;\n        }\n        this.#altTextTooltip?.classList.remove(\"show\");\n      }, {\n        signal\n      });\n    }\n    if (this.#altTextDecorative) {\n      tooltip.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-decorative-tooltip\");\n    } else {\n      tooltip.removeAttribute(\"data-l10n-id\");\n      tooltip.textContent = this.#altText;\n    }\n    if (!tooltip.parentNode) {\n      button.append(tooltip);\n    }\n    const element = this.#editor.getElementForAltText();\n    element?.setAttribute(\"aria-describedby\", tooltip.id);\n  }\n}\n\n;// ./src/display/editor/comment.js\n\nclass Comment {\n  #commentStandaloneButton = null;\n  #commentToolbarButton = null;\n  #commentWasFromKeyBoard = false;\n  #editor = null;\n  #initialText = null;\n  #richText = null;\n  #text = null;\n  #date = null;\n  #deleted = false;\n  #popupPosition = null;\n  constructor(editor) {\n    this.#editor = editor;\n  }\n  renderForToolbar() {\n    const button = this.#commentToolbarButton = document.createElement(\"button\");\n    button.className = \"comment\";\n    return this.#render(button, false);\n  }\n  renderForStandalone() {\n    const button = this.#commentStandaloneButton = document.createElement(\"button\");\n    button.className = \"annotationCommentButton\";\n    const position = this.#editor.commentButtonPosition;\n    if (position) {\n      const {\n        style\n      } = button;\n      style.insetInlineEnd = `calc(${100 * (this.#editor._uiManager.direction === \"ltr\" ? 1 - position[0] : position[0])}% - var(--comment-button-dim))`;\n      style.top = `calc(${100 * position[1]}% - var(--comment-button-dim))`;\n      const color = this.#editor.commentButtonColor;\n      if (color) {\n        style.backgroundColor = color;\n      }\n    }\n    return this.#render(button, true);\n  }\n  focusButton() {\n    setTimeout(() => {\n      (this.#commentStandaloneButton ?? this.#commentToolbarButton)?.focus();\n    }, 0);\n  }\n  onUpdatedColor() {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    const color = this.#editor.commentButtonColor;\n    if (color) {\n      this.#commentStandaloneButton.style.backgroundColor = color;\n    }\n    this.#editor._uiManager.updatePopupColor(this.#editor);\n  }\n  get commentButtonWidth() {\n    return (this.#commentStandaloneButton?.getBoundingClientRect().width ?? 0) / this.#editor.parent.boundingClientRect.width;\n  }\n  get commentPopupPositionInLayer() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    if (!this.#commentStandaloneButton) {\n      return null;\n    }\n    const {\n      x,\n      y,\n      height\n    } = this.#commentStandaloneButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = this.#editor.parent.boundingClientRect;\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n  set commentPopupPositionInLayer(pos) {\n    this.#popupPosition = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n  removeStandaloneCommentButton() {\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n  }\n  removeToolbarCommentButton() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n  }\n  setCommentButtonStates({\n    selected,\n    hasPopup\n  }) {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    this.#commentStandaloneButton.classList.toggle(\"selected\", selected);\n    this.#commentStandaloneButton.ariaExpanded = hasPopup;\n  }\n  #render(comment, isStandalone) {\n    if (!this.#editor._uiManager.hasCommentManager()) {\n      return null;\n    }\n    comment.tabIndex = \"0\";\n    comment.ariaHasPopup = \"dialog\";\n    if (isStandalone) {\n      comment.ariaControls = \"commentPopup\";\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n    } else {\n      comment.ariaControlsElements = [this.#editor._uiManager.getCommentDialogElement()];\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-editor-add-comment-button\");\n    }\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return comment;\n    }\n    comment.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    if (isStandalone) {\n      comment.addEventListener(\"focusin\", e => {\n        this.#editor._focusEventsAllowed = false;\n        stopEvent(e);\n      }, {\n        capture: true,\n        signal\n      });\n      comment.addEventListener(\"focusout\", e => {\n        this.#editor._focusEventsAllowed = true;\n        stopEvent(e);\n      }, {\n        capture: true,\n        signal\n      });\n    }\n    comment.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal\n    });\n    const onClick = event => {\n      event.preventDefault();\n      if (comment === this.#commentToolbarButton) {\n        this.edit();\n      } else {\n        this.#editor.toggleComment(true);\n      }\n    };\n    comment.addEventListener(\"click\", onClick, {\n      capture: true,\n      signal\n    });\n    comment.addEventListener(\"keydown\", event => {\n      if (event.target === comment && event.key === \"Enter\") {\n        this.#commentWasFromKeyBoard = true;\n        onClick(event);\n      }\n    }, {\n      signal\n    });\n    comment.addEventListener(\"pointerenter\", () => {\n      this.#editor.toggleComment(false, true);\n    }, {\n      signal\n    });\n    comment.addEventListener(\"pointerleave\", () => {\n      this.#editor.toggleComment(false, false);\n    }, {\n      signal\n    });\n    return comment;\n  }\n  edit(options) {\n    const position = this.commentPopupPositionInLayer;\n    let posX, posY;\n    if (position) {\n      [posX, posY] = position;\n    } else {\n      [posX, posY] = this.#editor.commentButtonPosition;\n      const {\n        width,\n        height,\n        x,\n        y\n      } = this.#editor;\n      posX = x + posX * width;\n      posY = y + posY * height;\n    }\n    const parentDimensions = this.#editor.parent.boundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = parentDimensions;\n    this.#editor._uiManager.editComment(this.#editor, parentX + posX * parentWidth, parentY + posY * parentHeight, {\n      ...options,\n      parentDimensions\n    });\n  }\n  finish() {\n    if (!this.#commentToolbarButton) {\n      return;\n    }\n    this.#commentToolbarButton.focus({\n      focusVisible: this.#commentWasFromKeyBoard\n    });\n    this.#commentWasFromKeyBoard = false;\n  }\n  isDeleted() {\n    return this.#deleted || this.#text === \"\";\n  }\n  isEmpty() {\n    return this.#text === null;\n  }\n  hasBeenEdited() {\n    return this.isDeleted() || this.#text !== this.#initialText;\n  }\n  serialize() {\n    return this.data;\n  }\n  get data() {\n    return {\n      text: this.#text,\n      richText: this.#richText,\n      date: this.#date,\n      deleted: this.isDeleted()\n    };\n  }\n  set data(text) {\n    if (text !== this.#text) {\n      this.#richText = null;\n    }\n    if (text === null) {\n      this.#text = \"\";\n      this.#deleted = true;\n      return;\n    }\n    this.#text = text;\n    this.#date = new Date();\n    this.#deleted = false;\n  }\n  restoreData({\n    text,\n    richText,\n    date\n  }) {\n    this.#text = text;\n    this.#richText = richText;\n    this.#date = date;\n    this.#deleted = false;\n  }\n  setInitialText(text, richText = null) {\n    this.#initialText = text;\n    this.data = text;\n    this.#date = null;\n    this.#richText = richText;\n  }\n  shown() {}\n  destroy() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n    this.#text = \"\";\n    this.#richText = null;\n    this.#date = null;\n    this.#editor = null;\n    this.#commentWasFromKeyBoard = false;\n    this.#deleted = false;\n  }\n}\n\n;// ./src/display/touch_manager.js\n\nclass TouchManager {\n  #container;\n  #isPinching = false;\n  #isPinchingStopped = null;\n  #isPinchingDisabled;\n  #onPinchStart;\n  #onPinching;\n  #onPinchEnd;\n  #pointerDownAC = null;\n  #signal;\n  #touchInfo = null;\n  #touchManagerAC;\n  #touchMoveAC = null;\n  constructor({\n    container,\n    isPinchingDisabled = null,\n    isPinchingStopped = null,\n    onPinchStart = null,\n    onPinching = null,\n    onPinchEnd = null,\n    signal\n  }) {\n    this.#container = container;\n    this.#isPinchingStopped = isPinchingStopped;\n    this.#isPinchingDisabled = isPinchingDisabled;\n    this.#onPinchStart = onPinchStart;\n    this.#onPinching = onPinching;\n    this.#onPinchEnd = onPinchEnd;\n    this.#touchManagerAC = new AbortController();\n    this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]);\n    container.addEventListener(\"touchstart\", this.#onTouchStart.bind(this), {\n      passive: false,\n      signal: this.#signal\n    });\n  }\n  get MIN_TOUCH_DISTANCE_TO_PINCH() {\n    return 35 / OutputScale.pixelRatio;\n  }\n  #onTouchStart(evt) {\n    if (this.#isPinchingDisabled?.()) {\n      return;\n    }\n    if (evt.touches.length === 1) {\n      if (this.#pointerDownAC) {\n        return;\n      }\n      const pointerDownAC = this.#pointerDownAC = new AbortController();\n      const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]);\n      const container = this.#container;\n      const opts = {\n        capture: true,\n        signal,\n        passive: false\n      };\n      const cancelPointerDown = e => {\n        if (e.pointerType === \"touch\") {\n          this.#pointerDownAC?.abort();\n          this.#pointerDownAC = null;\n        }\n      };\n      container.addEventListener(\"pointerdown\", e => {\n        if (e.pointerType === \"touch\") {\n          stopEvent(e);\n          cancelPointerDown(e);\n        }\n      }, opts);\n      container.addEventListener(\"pointerup\", cancelPointerDown, opts);\n      container.addEventListener(\"pointercancel\", cancelPointerDown, opts);\n      return;\n    }\n    if (!this.#touchMoveAC) {\n      this.#touchMoveAC = new AbortController();\n      const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]);\n      const container = this.#container;\n      const opt = {\n        signal,\n        capture: false,\n        passive: false\n      };\n      container.addEventListener(\"touchmove\", this.#onTouchMove.bind(this), opt);\n      const onTouchEnd = this.#onTouchEnd.bind(this);\n      container.addEventListener(\"touchend\", onTouchEnd, opt);\n      container.addEventListener(\"touchcancel\", onTouchEnd, opt);\n      opt.capture = true;\n      container.addEventListener(\"pointerdown\", stopEvent, opt);\n      container.addEventListener(\"pointermove\", stopEvent, opt);\n      container.addEventListener(\"pointercancel\", stopEvent, opt);\n      container.addEventListener(\"pointerup\", stopEvent, opt);\n      this.#onPinchStart?.();\n    }\n    stopEvent(evt);\n    if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) {\n      this.#touchInfo = null;\n      return;\n    }\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    this.#touchInfo = {\n      touch0X: touch0.screenX,\n      touch0Y: touch0.screenY,\n      touch1X: touch1.screenX,\n      touch1Y: touch1.screenY\n    };\n  }\n  #onTouchMove(evt) {\n    if (!this.#touchInfo || evt.touches.length !== 2) {\n      return;\n    }\n    stopEvent(evt);\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    const {\n      screenX: screen0X,\n      screenY: screen0Y\n    } = touch0;\n    const {\n      screenX: screen1X,\n      screenY: screen1Y\n    } = touch1;\n    const touchInfo = this.#touchInfo;\n    const {\n      touch0X: pTouch0X,\n      touch0Y: pTouch0Y,\n      touch1X: pTouch1X,\n      touch1Y: pTouch1Y\n    } = touchInfo;\n    const prevGapX = pTouch1X - pTouch0X;\n    const prevGapY = pTouch1Y - pTouch0Y;\n    const currGapX = screen1X - screen0X;\n    const currGapY = screen1Y - screen0Y;\n    const distance = Math.hypot(currGapX, currGapY) || 1;\n    const pDistance = Math.hypot(prevGapX, prevGapY) || 1;\n    if (!this.#isPinching && Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH) {\n      return;\n    }\n    touchInfo.touch0X = screen0X;\n    touchInfo.touch0Y = screen0Y;\n    touchInfo.touch1X = screen1X;\n    touchInfo.touch1Y = screen1Y;\n    if (!this.#isPinching) {\n      this.#isPinching = true;\n      return;\n    }\n    const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];\n    this.#onPinching?.(origin, pDistance, distance);\n  }\n  #onTouchEnd(evt) {\n    if (evt.touches.length >= 2) {\n      return;\n    }\n    if (this.#touchMoveAC) {\n      this.#touchMoveAC.abort();\n      this.#touchMoveAC = null;\n      this.#onPinchEnd?.();\n    }\n    if (!this.#touchInfo) {\n      return;\n    }\n    stopEvent(evt);\n    this.#touchInfo = null;\n    this.#isPinching = false;\n  }\n  destroy() {\n    this.#touchManagerAC?.abort();\n    this.#touchManagerAC = null;\n    this.#pointerDownAC?.abort();\n    this.#pointerDownAC = null;\n  }\n}\n\n;// ./src/display/editor/editor.js\n\n\n\n\n\n\n\n\n\n\nclass AnnotationEditor {\n  #accessibilityData = null;\n  #allResizerDivs = null;\n  #altText = null;\n  #comment = null;\n  #commentStandaloneButton = null;\n  #disabled = false;\n  #dragPointerId = null;\n  #dragPointerType = \"\";\n  #resizersDiv = null;\n  #lastPointerCoords = null;\n  #savedDimensions = null;\n  #fakeAnnotation = null;\n  #focusAC = null;\n  #focusedResizerName = \"\";\n  #hasBeenClicked = false;\n  #initialRect = null;\n  #isEditing = false;\n  #isInEditMode = false;\n  #isResizerEnabledForKeyboard = false;\n  #moveInDOMTimeout = null;\n  #prevDragX = 0;\n  #prevDragY = 0;\n  #telemetryTimeouts = null;\n  #touchManager = null;\n  isSelected = false;\n  _isCopy = false;\n  _editToolbar = null;\n  _initialOptions = Object.create(null);\n  _initialData = null;\n  _isVisible = true;\n  _uiManager = null;\n  _focusEventsAllowed = true;\n  static _l10n = null;\n  static _l10nAlert = null;\n  static _l10nResizer = null;\n  #isDraggable = false;\n  #zIndex = AnnotationEditor._zIndex++;\n  static _borderLineWidth = -1;\n  static _colorManager = new ColorManager();\n  static _zIndex = 1;\n  static _telemetryTimeout = 1000;\n  static get _resizerKeyboardManager() {\n    const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_resizerKeyboardManager\", new KeyboardManager([[[\"ArrowLeft\"], resize, {\n      args: [-small, 0]\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], resize, {\n      args: [-big, 0]\n    }], [[\"ArrowRight\"], resize, {\n      args: [small, 0]\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], resize, {\n      args: [big, 0]\n    }], [[\"ArrowUp\"], resize, {\n      args: [0, -small]\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, {\n      args: [0, -big]\n    }], [[\"ArrowDown\"], resize, {\n      args: [0, small]\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, {\n      args: [0, big]\n    }], [[\"Escape\"], AnnotationEditor.prototype._stopResizingWithKeyboard]]));\n  }\n  constructor(parameters) {\n    this.parent = parameters.parent;\n    this.id = parameters.id;\n    this.width = this.height = null;\n    this.pageIndex = parameters.parent.pageIndex;\n    this.name = parameters.name;\n    this.div = null;\n    this._uiManager = parameters.uiManager;\n    this.annotationElementId = null;\n    this._willKeepAspectRatio = false;\n    this._initialOptions.isCentered = parameters.isCentered;\n    this._structTreeParentId = null;\n    this.annotationElementId = parameters.annotationElementId || null;\n    this.creationDate = parameters.creationDate || new Date();\n    this.modificationDate = parameters.modificationDate || null;\n    this.canAddComment = true;\n    const {\n      rotation,\n      rawDims: {\n        pageWidth,\n        pageHeight,\n        pageX,\n        pageY\n      }\n    } = this.parent.viewport;\n    this.rotation = rotation;\n    this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n    this.pageDimensions = [pageWidth, pageHeight];\n    this.pageTranslation = [pageX, pageY];\n    const [width, height] = this.parentDimensions;\n    this.x = parameters.x / width;\n    this.y = parameters.y / height;\n    this.isAttachedToDOM = false;\n    this.deleted = false;\n  }\n  updatePageIndex(newPageIndex) {\n    this.pageIndex = newPageIndex;\n  }\n  get editorType() {\n    return Object.getPrototypeOf(this).constructor._type;\n  }\n  get mode() {\n    return Object.getPrototypeOf(this).constructor._editorType;\n  }\n  static get isDrawer() {\n    return false;\n  }\n  static get _defaultLineColor() {\n    return shadow(this, \"_defaultLineColor\", this._colorManager.getHexCode(\"CanvasText\"));\n  }\n  static deleteAnnotationElement(editor) {\n    const fakeEditor = new FakeEditor({\n      id: editor._uiManager.getId(),\n      parent: editor.parent,\n      uiManager: editor._uiManager\n    });\n    fakeEditor.annotationElementId = editor.annotationElementId;\n    fakeEditor.deleted = true;\n    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n  }\n  static initialize(l10n, _uiManager) {\n    AnnotationEditor._l10n ??= l10n;\n    AnnotationEditor._l10nAlert ??= Object.freeze({\n      highlight: \"pdfjs-editor-highlight-added-alert\",\n      freetext: \"pdfjs-editor-freetext-added-alert\",\n      ink: \"pdfjs-editor-ink-added-alert\",\n      stamp: \"pdfjs-editor-stamp-added-alert\",\n      signature: \"pdfjs-editor-signature-added-alert\"\n    });\n    AnnotationEditor._l10nResizer ??= Object.freeze({\n      topLeft: \"pdfjs-editor-resizer-top-left\",\n      topMiddle: \"pdfjs-editor-resizer-top-middle\",\n      topRight: \"pdfjs-editor-resizer-top-right\",\n      middleRight: \"pdfjs-editor-resizer-middle-right\",\n      bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n      bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n      bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n      middleLeft: \"pdfjs-editor-resizer-middle-left\"\n    });\n    if (AnnotationEditor._borderLineWidth !== -1) {\n      return;\n    }\n    const style = getComputedStyle(document.documentElement);\n    AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n  }\n  static updateDefaultParams(_type, _value) {}\n  static get defaultPropertiesToUpdate() {\n    return [];\n  }\n  static isHandlingMimeForPasting(mime) {\n    return false;\n  }\n  static paste(item, parent) {\n    unreachable(\"Not implemented\");\n  }\n  get propertiesToUpdate() {\n    return [];\n  }\n  get _isDraggable() {\n    return this.#isDraggable;\n  }\n  set _isDraggable(value) {\n    this.#isDraggable = value;\n    this.div?.classList.toggle(\"draggable\", value);\n  }\n  get uid() {\n    return this.annotationElementId || this.id;\n  }\n  get isEnterHandled() {\n    return true;\n  }\n  center() {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    switch (this.parentRotation) {\n      case 90:\n        this.x -= this.height * pageHeight / (pageWidth * 2);\n        this.y += this.width * pageWidth / (pageHeight * 2);\n        break;\n      case 180:\n        this.x += this.width / 2;\n        this.y += this.height / 2;\n        break;\n      case 270:\n        this.x += this.height * pageHeight / (pageWidth * 2);\n        this.y -= this.width * pageWidth / (pageHeight * 2);\n        break;\n      default:\n        this.x -= this.width / 2;\n        this.y -= this.height / 2;\n        break;\n    }\n    this.fixAndSetPosition();\n  }\n  addCommands(params) {\n    this._uiManager.addCommands(params);\n  }\n  get currentLayer() {\n    return this._uiManager.currentLayer;\n  }\n  setInBackground() {\n    this.div.style.zIndex = 0;\n  }\n  setInForeground() {\n    this.div.style.zIndex = this.#zIndex;\n  }\n  setParent(parent) {\n    if (parent !== null) {\n      this.pageIndex = parent.pageIndex;\n      this.pageDimensions = parent.pageDimensions;\n    } else {\n      this.#stopResizing();\n      this.#fakeAnnotation?.remove();\n      this.#fakeAnnotation = null;\n    }\n    this.parent = parent;\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.#hasBeenClicked) {\n      this.parent.setSelected(this);\n    } else {\n      this.#hasBeenClicked = false;\n    }\n  }\n  focusout(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      return;\n    }\n    const target = event.relatedTarget;\n    if (target?.closest(`#${this.id}`)) {\n      return;\n    }\n    event.preventDefault();\n    if (!this.parent?.isMultipleSelection) {\n      this.commitOrRemove();\n    }\n  }\n  commitOrRemove() {\n    if (this.isEmpty()) {\n      this.remove();\n    } else {\n      this.commit();\n    }\n  }\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    this.addToAnnotationStorage();\n  }\n  addToAnnotationStorage() {\n    this._uiManager.addToAnnotationStorage(this);\n  }\n  setAt(x, y, tx, ty) {\n    const [width, height] = this.parentDimensions;\n    [tx, ty] = this.screenToPageTranslation(tx, ty);\n    this.x = (x + tx) / width;\n    this.y = (y + ty) / height;\n    this.fixAndSetPosition();\n  }\n  _moveAfterPaste(baseX, baseY) {\n    if (this.isClone) {\n      delete this.isClone;\n      return;\n    }\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);\n    this._onTranslated();\n  }\n  #translate([width, height], x, y) {\n    [x, y] = this.screenToPageTranslation(x, y);\n    this.x += x / width;\n    this.y += y / height;\n    this._onTranslating(this.x, this.y);\n    this.fixAndSetPosition();\n  }\n  translate(x, y) {\n    this.#translate(this.parentDimensions, x, y);\n  }\n  translateInPage(x, y) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.#translate(this.pageDimensions, x, y);\n    this.div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  translationDone() {\n    this._onTranslated(this.x, this.y);\n  }\n  drag(tx, ty) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    const {\n      div,\n      parentDimensions: [parentWidth, parentHeight]\n    } = this;\n    this.x += tx / parentWidth;\n    this.y += ty / parentHeight;\n    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n      const {\n        x,\n        y\n      } = this.div.getBoundingClientRect();\n      if (this.parent.findNewParent(this, x, y)) {\n        this.x -= Math.floor(this.x);\n        this.y -= Math.floor(this.y);\n      }\n    }\n    let {\n      x,\n      y\n    } = this;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    const {\n      style\n    } = div;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n    this._onTranslating(x, y);\n    div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  _onTranslating(x, y) {}\n  _onTranslated(x, y) {}\n  get _hasBeenMoved() {\n    return !!this.#initialRect && (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y);\n  }\n  get _hasBeenResized() {\n    return !!this.#initialRect && (this.#initialRect[2] !== this.width || this.#initialRect[3] !== this.height);\n  }\n  getBaseTranslation() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const {\n      _borderLineWidth\n    } = AnnotationEditor;\n    const x = _borderLineWidth / parentWidth;\n    const y = _borderLineWidth / parentHeight;\n    switch (this.rotation) {\n      case 90:\n        return [-x, y];\n      case 180:\n        return [x, y];\n      case 270:\n        return [x, -y];\n      default:\n        return [-x, -y];\n    }\n  }\n  get _mustFixPosition() {\n    return true;\n  }\n  fixAndSetPosition(rotation = this.rotation) {\n    const {\n      div: {\n        style\n      },\n      pageDimensions: [pageWidth, pageHeight]\n    } = this;\n    let {\n      x,\n      y,\n      width,\n      height\n    } = this;\n    width *= pageWidth;\n    height *= pageHeight;\n    x *= pageWidth;\n    y *= pageHeight;\n    if (this._mustFixPosition) {\n      switch (rotation) {\n        case 0:\n          x = MathClamp(x, 0, pageWidth - width);\n          y = MathClamp(y, 0, pageHeight - height);\n          break;\n        case 90:\n          x = MathClamp(x, 0, pageWidth - height);\n          y = MathClamp(y, width, pageHeight);\n          break;\n        case 180:\n          x = MathClamp(x, width, pageWidth);\n          y = MathClamp(y, height, pageHeight);\n          break;\n        case 270:\n          x = MathClamp(x, height, pageWidth);\n          y = MathClamp(y, 0, pageHeight - width);\n          break;\n      }\n    }\n    this.x = x /= pageWidth;\n    this.y = y /= pageHeight;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n    this.moveInDOM();\n  }\n  static #rotatePoint(x, y, angle) {\n    switch (angle) {\n      case 90:\n        return [y, -x];\n      case 180:\n        return [-x, -y];\n      case 270:\n        return [-y, x];\n      default:\n        return [x, y];\n    }\n  }\n  screenToPageTranslation(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n  }\n  pageTranslationToScreen(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n  }\n  #getRotationMatrix(rotation) {\n    switch (rotation) {\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n        }\n      case 180:\n        return [-1, 0, 0, -1];\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n        }\n      default:\n        return [1, 0, 0, 1];\n    }\n  }\n  get parentScale() {\n    return this._uiManager.viewParameters.realScale;\n  }\n  get parentRotation() {\n    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n  }\n  get parentDimensions() {\n    const {\n      parentScale,\n      pageDimensions: [pageWidth, pageHeight]\n    } = this;\n    return [pageWidth * parentScale, pageHeight * parentScale];\n  }\n  setDims() {\n    const {\n      div: {\n        style\n      },\n      width,\n      height\n    } = this;\n    style.width = `${(100 * width).toFixed(2)}%`;\n    style.height = `${(100 * height).toFixed(2)}%`;\n  }\n  getInitialTranslation() {\n    return [0, 0];\n  }\n  #createResizers() {\n    if (this.#resizersDiv) {\n      return;\n    }\n    this.#resizersDiv = document.createElement(\"div\");\n    this.#resizersDiv.classList.add(\"resizers\");\n    const classes = this._willKeepAspectRatio ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"] : [\"topLeft\", \"topMiddle\", \"topRight\", \"middleRight\", \"bottomRight\", \"bottomMiddle\", \"bottomLeft\", \"middleLeft\"];\n    const signal = this._uiManager._signal;\n    for (const name of classes) {\n      const div = document.createElement(\"div\");\n      this.#resizersDiv.append(div);\n      div.classList.add(\"resizer\", name);\n      div.setAttribute(\"data-resizer-name\", name);\n      div.addEventListener(\"pointerdown\", this.#resizerPointerdown.bind(this, name), {\n        signal\n      });\n      div.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      div.tabIndex = -1;\n    }\n    this.div.prepend(this.#resizersDiv);\n  }\n  #resizerPointerdown(name, event) {\n    event.preventDefault();\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    this.#altText?.toggle(false);\n    const savedDraggable = this._isDraggable;\n    this._isDraggable = false;\n    this.#lastPointerCoords = [event.screenX, event.screenY];\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n    this.parent.togglePointerEvents(false);\n    window.addEventListener(\"pointermove\", this.#resizerPointermove.bind(this, name), {\n      passive: true,\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"touchmove\", stopEvent, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    const savedParentCursor = this.parent.div.style.cursor;\n    const savedCursor = this.div.style.cursor;\n    this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;\n    const pointerUpCallback = () => {\n      ac.abort();\n      this.parent.togglePointerEvents(true);\n      this.#altText?.toggle(true);\n      this._isDraggable = savedDraggable;\n      this.parent.div.style.cursor = savedParentCursor;\n      this.div.style.cursor = savedCursor;\n      this.#addResizeToUndoStack();\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n  }\n  #resize(x, y, width, height) {\n    this.width = width;\n    this.height = height;\n    this.x = x;\n    this.y = y;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResized();\n  }\n  _onResized() {}\n  #addResizeToUndoStack() {\n    if (!this.#savedDimensions) {\n      return;\n    }\n    const {\n      savedX,\n      savedY,\n      savedWidth,\n      savedHeight\n    } = this.#savedDimensions;\n    this.#savedDimensions = null;\n    const newX = this.x;\n    const newY = this.y;\n    const newWidth = this.width;\n    const newHeight = this.height;\n    if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n    this.addCommands({\n      cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight),\n      undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight),\n      mustExec: true\n    });\n  }\n  static _round(x) {\n    return Math.round(x * 10000) / 10000;\n  }\n  #resizerPointermove(name, event) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];\n    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n    const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];\n    let getPoint;\n    let getOpposite;\n    let isDiagonal = false;\n    let isHorizontal = false;\n    switch (name) {\n      case \"topLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, 0];\n        getOpposite = (w, h) => [w, h];\n        break;\n      case \"topMiddle\":\n        getPoint = (w, h) => [w / 2, 0];\n        getOpposite = (w, h) => [w / 2, h];\n        break;\n      case \"topRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, 0];\n        getOpposite = (w, h) => [0, h];\n        break;\n      case \"middleRight\":\n        isHorizontal = true;\n        getPoint = (w, h) => [w, h / 2];\n        getOpposite = (w, h) => [0, h / 2];\n        break;\n      case \"bottomRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, h];\n        getOpposite = (w, h) => [0, 0];\n        break;\n      case \"bottomMiddle\":\n        getPoint = (w, h) => [w / 2, h];\n        getOpposite = (w, h) => [w / 2, 0];\n        break;\n      case \"bottomLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, h];\n        getOpposite = (w, h) => [w, 0];\n        break;\n      case \"middleLeft\":\n        isHorizontal = true;\n        getPoint = (w, h) => [0, h / 2];\n        getOpposite = (w, h) => [w, h / 2];\n        break;\n    }\n    const point = getPoint(savedWidth, savedHeight);\n    const oppositePoint = getOpposite(savedWidth, savedHeight);\n    let transfOppositePoint = transf(...oppositePoint);\n    const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]);\n    const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]);\n    let ratioX = 1;\n    let ratioY = 1;\n    let deltaX, deltaY;\n    if (!event.fromKeyboard) {\n      const {\n        screenX,\n        screenY\n      } = event;\n      const [lastScreenX, lastScreenY] = this.#lastPointerCoords;\n      [deltaX, deltaY] = this.screenToPageTranslation(screenX - lastScreenX, screenY - lastScreenY);\n      this.#lastPointerCoords[0] = screenX;\n      this.#lastPointerCoords[1] = screenY;\n    } else {\n      ({\n        deltaX,\n        deltaY\n      } = event);\n    }\n    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n    if (isDiagonal) {\n      const oldDiag = Math.hypot(savedWidth, savedHeight);\n      ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);\n    } else if (isHorizontal) {\n      ratioX = MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) / savedWidth;\n    } else {\n      ratioY = MathClamp(Math.abs(oppositePoint[1] - point[1] - deltaY), minHeight, 1) / savedHeight;\n    }\n    const newWidth = AnnotationEditor._round(savedWidth * ratioX);\n    const newHeight = AnnotationEditor._round(savedHeight * ratioY);\n    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n    const newX = oppositeX - transfOppositePoint[0];\n    const newY = oppositeY - transfOppositePoint[1];\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.x = newX;\n    this.y = newY;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResizing();\n  }\n  _onResizing() {}\n  altTextFinish() {\n    this.#altText?.finish();\n  }\n  get toolbarButtons() {\n    return null;\n  }\n  async addEditToolbar() {\n    if (this._editToolbar || this.#isInEditMode) {\n      return this._editToolbar;\n    }\n    this._editToolbar = new EditorToolbar(this);\n    this.div.append(this._editToolbar.render());\n    const {\n      toolbarButtons\n    } = this;\n    if (toolbarButtons) {\n      for (const [name, tool] of toolbarButtons) {\n        await this._editToolbar.addButton(name, tool);\n      }\n    }\n    if (!this.hasComment) {\n      this._editToolbar.addButton(\"comment\", this.addCommentButton());\n    }\n    this._editToolbar.addButton(\"delete\");\n    return this._editToolbar;\n  }\n  addCommentButtonInToolbar() {\n    this._editToolbar?.addButtonBefore(\"comment\", this.addCommentButton(), \".deleteButton\");\n  }\n  removeCommentButtonFromToolbar() {\n    this._editToolbar?.removeButton(\"comment\");\n  }\n  removeEditToolbar() {\n    this._editToolbar?.remove();\n    this._editToolbar = null;\n    this.#altText?.destroy();\n  }\n  addContainer(container) {\n    const editToolbarDiv = this._editToolbar?.div;\n    if (editToolbarDiv) {\n      editToolbarDiv.before(container);\n    } else {\n      this.div.append(container);\n    }\n  }\n  getClientDimensions() {\n    return this.div.getBoundingClientRect();\n  }\n  createAltText() {\n    if (!this.#altText) {\n      AltText.initialize(AnnotationEditor._l10n);\n      this.#altText = new AltText(this);\n      if (this.#accessibilityData) {\n        this.#altText.data = this.#accessibilityData;\n        this.#accessibilityData = null;\n      }\n    }\n    return this.#altText;\n  }\n  get altTextData() {\n    return this.#altText?.data;\n  }\n  set altTextData(data) {\n    if (!this.#altText) {\n      return;\n    }\n    this.#altText.data = data;\n  }\n  get guessedAltText() {\n    return this.#altText?.guessedText;\n  }\n  async setGuessedAltText(text) {\n    await this.#altText?.setGuessedText(text);\n  }\n  serializeAltText(isForCopying) {\n    return this.#altText?.serialize(isForCopying);\n  }\n  hasAltText() {\n    return !!this.#altText && !this.#altText.isEmpty();\n  }\n  hasAltTextData() {\n    return this.#altText?.hasData() ?? false;\n  }\n  focusCommentButton() {\n    this.#comment?.focusButton();\n  }\n  addCommentButton() {\n    return this.canAddComment ? this.#comment ||= new Comment(this) : null;\n  }\n  addStandaloneCommentButton() {\n    if (!this._uiManager.hasCommentManager()) {\n      return;\n    }\n    if (this.#commentStandaloneButton) {\n      if (this._uiManager.isEditingMode()) {\n        this.#commentStandaloneButton.classList.remove(\"hidden\");\n      }\n      return;\n    }\n    if (!this.hasComment) {\n      return;\n    }\n    this.#commentStandaloneButton = this.#comment.renderForStandalone();\n    this.div.append(this.#commentStandaloneButton);\n  }\n  removeStandaloneCommentButton() {\n    this.#comment.removeStandaloneCommentButton();\n    this.#commentStandaloneButton = null;\n  }\n  hideStandaloneCommentButton() {\n    this.#commentStandaloneButton?.classList.add(\"hidden\");\n  }\n  get comment() {\n    if (!this.#comment) {\n      return null;\n    }\n    const {\n      data: {\n        richText,\n        text,\n        date,\n        deleted\n      }\n    } = this.#comment;\n    return {\n      text,\n      richText,\n      date,\n      deleted,\n      color: this.getNonHCMColor(),\n      opacity: this.opacity ?? 1\n    };\n  }\n  set comment(value) {\n    this.#comment ||= new Comment(this);\n    if (typeof value === \"object\" && value !== null) {\n      this.#comment.restoreData(value);\n    } else {\n      this.#comment.data = value;\n    }\n    if (this.hasComment) {\n      this.removeCommentButtonFromToolbar();\n      this.addStandaloneCommentButton();\n      this._uiManager.updateComment(this);\n    } else {\n      this.addCommentButtonInToolbar();\n      this.removeStandaloneCommentButton();\n      this._uiManager.removeComment(this);\n    }\n  }\n  setCommentData({\n    comment,\n    popupRef,\n    richText\n  }) {\n    if (!popupRef) {\n      return;\n    }\n    this.#comment ||= new Comment(this);\n    this.#comment.setInitialText(comment, richText);\n    if (!this.annotationElementId) {\n      return;\n    }\n    const storedData = this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId);\n    if (storedData) {\n      this.updateFromAnnotationLayer(storedData);\n    }\n  }\n  get hasEditedComment() {\n    return this.#comment?.hasBeenEdited();\n  }\n  get hasDeletedComment() {\n    return this.#comment?.isDeleted();\n  }\n  get hasComment() {\n    return !!this.#comment && !this.#comment.isEmpty() && !this.#comment.isDeleted();\n  }\n  async editComment(options) {\n    this.#comment ||= new Comment(this);\n    this.#comment.edit(options);\n  }\n  toggleComment(isSelected, visibility = undefined) {\n    if (this.hasComment) {\n      this._uiManager.toggleComment(this, isSelected, visibility);\n    }\n  }\n  setSelectedCommentButton(selected) {\n    this.#comment.setSelectedButton(selected);\n  }\n  addComment(serialized) {\n    if (this.hasEditedComment) {\n      const DEFAULT_POPUP_WIDTH = 180;\n      const DEFAULT_POPUP_HEIGHT = 100;\n      const [,,, trY] = serialized.rect;\n      const [pageWidth] = this.pageDimensions;\n      const [pageX] = this.pageTranslation;\n      const blX = pageX + pageWidth + 1;\n      const blY = trY - DEFAULT_POPUP_HEIGHT;\n      const trX = blX + DEFAULT_POPUP_WIDTH;\n      serialized.popup = {\n        contents: this.comment.text,\n        deleted: this.comment.deleted,\n        rect: [blX, blY, trX, trY]\n      };\n    }\n  }\n  updateFromAnnotationLayer({\n    popup: {\n      contents,\n      deleted\n    }\n  }) {\n    this.#comment.data = deleted ? null : contents;\n  }\n  get parentBoundingClientRect() {\n    return this.parent.boundingClientRect;\n  }\n  render() {\n    const div = this.div = document.createElement(\"div\");\n    div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n    div.className = this.name;\n    div.setAttribute(\"id\", this.id);\n    div.tabIndex = this.#disabled ? -1 : 0;\n    div.setAttribute(\"role\", \"application\");\n    if (this.defaultL10nId) {\n      div.setAttribute(\"data-l10n-id\", this.defaultL10nId);\n    }\n    if (!this._isVisible) {\n      div.classList.add(\"hidden\");\n    }\n    this.setInForeground();\n    this.#addFocusListeners();\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (this.parentRotation % 180 !== 0) {\n      div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;\n      div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;\n    }\n    const [tx, ty] = this.getInitialTranslation();\n    this.translate(tx, ty);\n    bindEvents(this, div, [\"keydown\", \"pointerdown\", \"dblclick\"]);\n    if (this.isResizable && this._uiManager._supportsPinchToZoom) {\n      this.#touchManager ||= new TouchManager({\n        container: div,\n        isPinchingDisabled: () => !this.isSelected,\n        onPinchStart: this.#touchPinchStartCallback.bind(this),\n        onPinching: this.#touchPinchCallback.bind(this),\n        onPinchEnd: this.#touchPinchEndCallback.bind(this),\n        signal: this._uiManager._signal\n      });\n    }\n    this.addStandaloneCommentButton();\n    this._uiManager._editorUndoBar?.hide();\n    return div;\n  }\n  #touchPinchStartCallback() {\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    this.#altText?.toggle(false);\n    this.parent.togglePointerEvents(false);\n  }\n  #touchPinchCallback(_origin, prevDistance, distance) {\n    const slowDownFactor = 0.7;\n    let factor = slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;\n    if (factor === 1) {\n      return;\n    }\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    factor = Math.max(Math.min(factor, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);\n    const newWidth = AnnotationEditor._round(savedWidth * factor);\n    const newHeight = AnnotationEditor._round(savedHeight * factor);\n    if (newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n    this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight];\n    const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);\n    const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]);\n    const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]);\n    const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);\n    this.x = centerX - newTransfCenterPoint[0];\n    this.y = centerY - newTransfCenterPoint[1];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResizing();\n  }\n  #touchPinchEndCallback() {\n    this.#altText?.toggle(true);\n    this.parent.togglePointerEvents(true);\n    this.#addResizeToUndoStack();\n  }\n  pointerdown(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      event.preventDefault();\n      return;\n    }\n    this.#hasBeenClicked = true;\n    if (this._isDraggable) {\n      this.#setUpDragSession(event);\n      return;\n    }\n    this.#selectOnPointerEvent(event);\n  }\n  #selectOnPointerEvent(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {\n      this.parent.toggleSelected(this);\n    } else {\n      this.parent.setSelected(this);\n    }\n  }\n  #setUpDragSession(event) {\n    const {\n      isSelected\n    } = this;\n    this._uiManager.setUpDragSession();\n    let hasDraggingStarted = false;\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n    const opts = {\n      capture: true,\n      passive: false,\n      signal\n    };\n    const cancelDrag = e => {\n      ac.abort();\n      this.#dragPointerId = null;\n      this.#hasBeenClicked = false;\n      if (!this._uiManager.endDragSession()) {\n        this.#selectOnPointerEvent(e);\n      }\n      if (hasDraggingStarted) {\n        this._onStopDragging();\n      }\n    };\n    if (isSelected) {\n      this.#prevDragX = event.clientX;\n      this.#prevDragY = event.clientY;\n      this.#dragPointerId = event.pointerId;\n      this.#dragPointerType = event.pointerType;\n      window.addEventListener(\"pointermove\", e => {\n        if (!hasDraggingStarted) {\n          hasDraggingStarted = true;\n          this._uiManager.toggleComment(this, true, false);\n          this._onStartDragging();\n        }\n        const {\n          clientX: x,\n          clientY: y,\n          pointerId\n        } = e;\n        if (pointerId !== this.#dragPointerId) {\n          stopEvent(e);\n          return;\n        }\n        const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY);\n        this.#prevDragX = x;\n        this.#prevDragY = y;\n        this._uiManager.dragSelectedEditors(tx, ty);\n      }, opts);\n      window.addEventListener(\"touchmove\", stopEvent, opts);\n      window.addEventListener(\"pointerdown\", e => {\n        if (e.pointerType === this.#dragPointerType) {\n          if (this.#touchManager || e.isPrimary) {\n            cancelDrag(e);\n          }\n        }\n        stopEvent(e);\n      }, opts);\n    }\n    const pointerUpCallback = e => {\n      if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) {\n        cancelDrag(e);\n        return;\n      }\n      stopEvent(e);\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n  }\n  _onStartDragging() {}\n  _onStopDragging() {}\n  moveInDOM() {\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n    }\n    this.#moveInDOMTimeout = setTimeout(() => {\n      this.#moveInDOMTimeout = null;\n      this.parent?.moveEditorInDOM(this);\n    }, 0);\n  }\n  _setParentAndPosition(parent, x, y) {\n    parent.changeParent(this);\n    this.x = x;\n    this.y = y;\n    this.fixAndSetPosition();\n    this._onTranslated();\n  }\n  getRect(tx, ty, rotation = this.rotation) {\n    const scale = this.parentScale;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const shiftX = tx / scale;\n    const shiftY = ty / scale;\n    const x = this.x * pageWidth;\n    const y = this.y * pageHeight;\n    const width = this.width * pageWidth;\n    const height = this.height * pageHeight;\n    switch (rotation) {\n      case 0:\n        return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];\n      case 90:\n        return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];\n      case 180:\n        return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];\n      case 270:\n        return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  getRectInCurrentCoords(rect, pageHeight) {\n    const [x1, y1, x2, y2] = rect;\n    const width = x2 - x1;\n    const height = y2 - y1;\n    switch (this.rotation) {\n      case 0:\n        return [x1, pageHeight - y2, width, height];\n      case 90:\n        return [x1, pageHeight - y1, height, width];\n      case 180:\n        return [x2, pageHeight - y1, width, height];\n      case 270:\n        return [x2, pageHeight - y2, height, width];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  getPDFRect() {\n    return this.getRect(0, 0);\n  }\n  getNonHCMColor() {\n    return this.color && AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color));\n  }\n  onUpdatedColor() {\n    this.#comment?.onUpdatedColor();\n  }\n  getData() {\n    const {\n      comment: {\n        text: str,\n        color,\n        date,\n        opacity,\n        deleted,\n        richText\n      },\n      uid: id,\n      pageIndex,\n      creationDate,\n      modificationDate\n    } = this;\n    return {\n      id,\n      pageIndex,\n      rect: this.getPDFRect(),\n      richText,\n      contentsObj: {\n        str\n      },\n      creationDate,\n      modificationDate: date || modificationDate,\n      popupRef: !deleted,\n      color,\n      opacity\n    };\n  }\n  onceAdded(focus) {}\n  isEmpty() {\n    return false;\n  }\n  enableEditMode() {\n    if (this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(false);\n    this.#isInEditMode = true;\n    return true;\n  }\n  disableEditMode() {\n    if (!this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(true);\n    this.#isInEditMode = false;\n    return true;\n  }\n  isInEditMode() {\n    return this.#isInEditMode;\n  }\n  shouldGetKeyboardEvents() {\n    return this.#isResizerEnabledForKeyboard;\n  }\n  needsToBeRebuilt() {\n    return this.div && !this.isAttachedToDOM;\n  }\n  get isOnScreen() {\n    const {\n      top,\n      left,\n      bottom,\n      right\n    } = this.getClientDimensions();\n    const {\n      innerHeight,\n      innerWidth\n    } = window;\n    return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;\n  }\n  #addFocusListeners() {\n    if (this.#focusAC || !this.div) {\n      return;\n    }\n    this.#focusAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#focusAC);\n    this.div.addEventListener(\"focusin\", this.focusin.bind(this), {\n      signal\n    });\n    this.div.addEventListener(\"focusout\", this.focusout.bind(this), {\n      signal\n    });\n  }\n  rebuild() {\n    this.#addFocusListeners();\n  }\n  rotate(_angle) {}\n  resize() {}\n  serializeDeleted() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex,\n      popupRef: this._initialData?.popupRef || \"\"\n    };\n  }\n  serialize(isForCopying = false, context = null) {\n    return {\n      annotationType: this.mode,\n      pageIndex: this.pageIndex,\n      rect: this.getPDFRect(),\n      rotation: this.rotation,\n      structTreeParentId: this._structTreeParentId,\n      popupRef: this._initialData?.popupRef || \"\"\n    };\n  }\n  static async deserialize(data, parent, uiManager) {\n    const editor = new this.prototype.constructor({\n      parent,\n      id: uiManager.getId(),\n      uiManager,\n      annotationElementId: data.annotationElementId,\n      creationDate: data.creationDate,\n      modificationDate: data.modificationDate\n    });\n    editor.rotation = data.rotation;\n    editor.#accessibilityData = data.accessibilityData;\n    editor._isCopy = data.isCopy || false;\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);\n    editor.x = x / pageWidth;\n    editor.y = y / pageHeight;\n    editor.width = width / pageWidth;\n    editor.height = height / pageHeight;\n    return editor;\n  }\n  get hasBeenModified() {\n    return !!this.annotationElementId && (this.deleted || this.serialize() !== null);\n  }\n  remove() {\n    this.#focusAC?.abort();\n    this.#focusAC = null;\n    if (!this.isEmpty()) {\n      this.commit();\n    }\n    if (this.parent) {\n      this.parent.remove(this);\n    } else {\n      this._uiManager.removeEditor(this);\n    }\n    this.hideCommentPopup();\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n      this.#moveInDOMTimeout = null;\n    }\n    this.#stopResizing();\n    this.removeEditToolbar();\n    if (this.#telemetryTimeouts) {\n      for (const timeout of this.#telemetryTimeouts.values()) {\n        clearTimeout(timeout);\n      }\n      this.#telemetryTimeouts = null;\n    }\n    this.parent = null;\n    this.#touchManager?.destroy();\n    this.#touchManager = null;\n    this.#fakeAnnotation?.remove();\n    this.#fakeAnnotation = null;\n  }\n  get isResizable() {\n    return false;\n  }\n  makeResizable() {\n    if (this.isResizable) {\n      this.#createResizers();\n      this.#resizersDiv.classList.remove(\"hidden\");\n    }\n  }\n  get toolbarPosition() {\n    return null;\n  }\n  get commentButtonPosition() {\n    return this._uiManager.direction === \"ltr\" ? [1, 0] : [0, 0];\n  }\n  get commentButtonPositionInPage() {\n    const {\n      commentButtonPosition: [posX, posY]\n    } = this;\n    const [blX, blY, trX, trY] = this.getPDFRect();\n    return [AnnotationEditor._round(blX + (trX - blX) * posX), AnnotationEditor._round(blY + (trY - blY) * (1 - posY))];\n  }\n  get commentButtonColor() {\n    return this._uiManager.makeCommentColor(this.getNonHCMColor(), this.opacity);\n  }\n  get commentPopupPosition() {\n    return this.#comment.commentPopupPositionInLayer;\n  }\n  set commentPopupPosition(pos) {\n    this.#comment.commentPopupPositionInLayer = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#comment.hasDefaultPopupPosition();\n  }\n  get commentButtonWidth() {\n    return this.#comment.commentButtonWidth;\n  }\n  get elementBeforePopup() {\n    return this.div;\n  }\n  setCommentButtonStates(options) {\n    this.#comment?.setCommentButtonStates(options);\n  }\n  keydown(event) {\n    if (!this.isResizable || event.target !== this.div || event.key !== \"Enter\") {\n      return;\n    }\n    this._uiManager.setSelected(this);\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    const children = this.#resizersDiv.children;\n    if (!this.#allResizerDivs) {\n      this.#allResizerDivs = Array.from(children);\n      const boundResizerKeydown = this.#resizerKeydown.bind(this);\n      const boundResizerBlur = this.#resizerBlur.bind(this);\n      const signal = this._uiManager._signal;\n      for (const div of this.#allResizerDivs) {\n        const name = div.getAttribute(\"data-resizer-name\");\n        div.setAttribute(\"role\", \"spinbutton\");\n        div.addEventListener(\"keydown\", boundResizerKeydown, {\n          signal\n        });\n        div.addEventListener(\"blur\", boundResizerBlur, {\n          signal\n        });\n        div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name), {\n          signal\n        });\n        div.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n    const first = this.#allResizerDivs[0];\n    let firstPosition = 0;\n    for (const div of children) {\n      if (div === first) {\n        break;\n      }\n      firstPosition++;\n    }\n    const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4);\n    if (nextFirstPosition !== firstPosition) {\n      if (nextFirstPosition < firstPosition) {\n        for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n          this.#resizersDiv.append(this.#resizersDiv.firstElementChild);\n        }\n      } else if (nextFirstPosition > firstPosition) {\n        for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n          this.#resizersDiv.firstElementChild.before(this.#resizersDiv.lastElementChild);\n        }\n      }\n      let i = 0;\n      for (const child of children) {\n        const div = this.#allResizerDivs[i++];\n        const name = div.getAttribute(\"data-resizer-name\");\n        child.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n    this.#setResizerTabIndex(0);\n    this.#isResizerEnabledForKeyboard = true;\n    this.#resizersDiv.firstElementChild.focus({\n      focusVisible: true\n    });\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n  #resizerKeydown(event) {\n    AnnotationEditor._resizerKeyboardManager.exec(this, event);\n  }\n  #resizerBlur(event) {\n    if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) {\n      this.#stopResizing();\n    }\n  }\n  #resizerFocus(name) {\n    this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n  }\n  #setResizerTabIndex(value) {\n    if (!this.#allResizerDivs) {\n      return;\n    }\n    for (const div of this.#allResizerDivs) {\n      div.tabIndex = value;\n    }\n  }\n  _resizeWithKeyboard(x, y) {\n    if (!this.#isResizerEnabledForKeyboard) {\n      return;\n    }\n    this.#resizerPointermove(this.#focusedResizerName, {\n      deltaX: x,\n      deltaY: y,\n      fromKeyboard: true\n    });\n  }\n  #stopResizing() {\n    this.#isResizerEnabledForKeyboard = false;\n    this.#setResizerTabIndex(-1);\n    this.#addResizeToUndoStack();\n  }\n  _stopResizingWithKeyboard() {\n    this.#stopResizing();\n    this.div.focus();\n  }\n  select() {\n    if (this.isSelected && this._editToolbar) {\n      this._editToolbar.show();\n      return;\n    }\n    this.isSelected = true;\n    this.makeResizable();\n    this.div?.classList.add(\"selectedEditor\");\n    if (!this._editToolbar) {\n      this.addEditToolbar().then(() => {\n        if (this.div?.classList.contains(\"selectedEditor\")) {\n          this._editToolbar?.show();\n        }\n      });\n      return;\n    }\n    this._editToolbar?.show();\n    this.#altText?.toggleAltTextBadge(false);\n  }\n  focus() {\n    if (this.div && !this.div.contains(document.activeElement)) {\n      setTimeout(() => this.div?.focus({\n        preventScroll: true\n      }), 0);\n    }\n  }\n  unselect() {\n    if (!this.isSelected) {\n      return;\n    }\n    this.isSelected = false;\n    this.#resizersDiv?.classList.add(\"hidden\");\n    this.div?.classList.remove(\"selectedEditor\");\n    if (this.div?.contains(document.activeElement)) {\n      this._uiManager.currentLayer.div.focus({\n        preventScroll: true\n      });\n    }\n    this._editToolbar?.hide();\n    this.#altText?.toggleAltTextBadge(true);\n    this.hideCommentPopup();\n  }\n  hideCommentPopup() {\n    if (this.hasComment) {\n      this._uiManager.toggleComment(null);\n    }\n  }\n  updateParams(type, value) {}\n  disableEditing() {}\n  enableEditing() {}\n  get canChangeContent() {\n    return false;\n  }\n  enterInEditMode() {\n    if (!this.canChangeContent) {\n      return;\n    }\n    this.enableEditMode();\n    this.div.focus();\n  }\n  dblclick(event) {\n    if (event.target.nodeName === \"BUTTON\") {\n      return;\n    }\n    this.enterInEditMode();\n    this.parent.updateToolbar({\n      mode: this.constructor._editorType,\n      editId: this.uid\n    });\n  }\n  getElementForAltText() {\n    return this.div;\n  }\n  get contentDiv() {\n    return this.div;\n  }\n  get isEditing() {\n    return this.#isEditing;\n  }\n  set isEditing(value) {\n    this.#isEditing = value;\n    if (!this.parent) {\n      return;\n    }\n    if (value) {\n      this.parent.setSelected(this);\n      this.parent.setActiveEditor(this);\n    } else {\n      this.parent.setActiveEditor(null);\n    }\n  }\n  static get MIN_SIZE() {\n    return 16;\n  }\n  static canCreateNewEmptyEditor() {\n    return true;\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\"\n    };\n  }\n  get telemetryFinalData() {\n    return null;\n  }\n  _reportTelemetry(data, mustWait = false) {\n    if (mustWait) {\n      this.#telemetryTimeouts ||= new Map();\n      const {\n        action\n      } = data;\n      let timeout = this.#telemetryTimeouts.get(action);\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      timeout = setTimeout(() => {\n        this._reportTelemetry(data);\n        this.#telemetryTimeouts.delete(action);\n        if (this.#telemetryTimeouts.size === 0) {\n          this.#telemetryTimeouts = null;\n        }\n      }, AnnotationEditor._telemetryTimeout);\n      this.#telemetryTimeouts.set(action, timeout);\n      return;\n    }\n    data.type ||= this.editorType;\n    this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n      source: this,\n      details: {\n        type: \"editing\",\n        data\n      }\n    });\n  }\n  show(visible = this._isVisible) {\n    this.div.classList.toggle(\"hidden\", !visible);\n    this._isVisible = visible;\n  }\n  enable() {\n    if (this.div) {\n      this.div.tabIndex = 0;\n    }\n    this.#disabled = false;\n  }\n  disable() {\n    if (this.div) {\n      this.div.tabIndex = -1;\n    }\n    this.#disabled = true;\n  }\n  updateFakeAnnotationElement(annotationLayer) {\n    if (!this.#fakeAnnotation && !this.deleted) {\n      this.#fakeAnnotation = annotationLayer.addFakeAnnotation(this);\n      return;\n    }\n    if (this.deleted) {\n      this.#fakeAnnotation.remove();\n      this.#fakeAnnotation = null;\n      return;\n    }\n    if (this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) {\n      this.#fakeAnnotation.updateEdited({\n        rect: this.getPDFRect(),\n        popup: this.comment\n      });\n    }\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    let content = annotation.container.querySelector(\".annotationContent\");\n    if (!content) {\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      annotation.container.prepend(content);\n    } else if (content.nodeName === \"CANVAS\") {\n      const canvas = content;\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      canvas.before(content);\n    }\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    const {\n      firstElementChild\n    } = annotation.container;\n    if (firstElementChild?.nodeName === \"DIV\" && firstElementChild.classList.contains(\"annotationContent\")) {\n      firstElementChild.remove();\n    }\n  }\n}\nclass FakeEditor extends AnnotationEditor {\n  constructor(params) {\n    super(params);\n    this.annotationElementId = params.annotationElementId;\n    this.deleted = true;\n  }\n  serialize() {\n    return this.serializeDeleted();\n  }\n}\n\n;// ./src/shared/murmurhash3.js\n\n\n\n\n\nconst SEED = 0xc3d2e1f0;\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        h1 ^= k1;\n        h1 = h1 << 13 | h1 >>> 19;\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;\n        k2 = k2 << 15 | k2 >>> 17;\n        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;\n        h2 ^= k2;\n        h2 = h2 << 13 | h2 >>> 19;\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n    k1 = 0;\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\n    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\n    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    return (h1 >>> 0).toString(16).padStart(8, \"0\") + (h2 >>> 0).toString(16).padStart(8, \"0\");\n  }\n}\n\n;// ./src/display/annotation_storage.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SerializableEmpty = Object.freeze({\n  map: null,\n  hash: \"\",\n  transfer: undefined\n});\nclass AnnotationStorage {\n  #modified = false;\n  #modifiedIds = null;\n  #editorsMap = null;\n  #storage = new Map();\n  onSetModified = null;\n  onResetModified = null;\n  onAnnotationEditor = null;\n  getValue(key, defaultValue) {\n    const value = this.#storage.get(key);\n    if (value === undefined) {\n      return defaultValue;\n    }\n    return Object.assign(defaultValue, value);\n  }\n  getRawValue(key) {\n    return this.#storage.get(key);\n  }\n  remove(key) {\n    const storedValue = this.#storage.get(key);\n    if (storedValue === undefined) {\n      return;\n    }\n    if (storedValue instanceof AnnotationEditor) {\n      this.#editorsMap.delete(storedValue.annotationElementId);\n    }\n    this.#storage.delete(key);\n    if (this.#storage.size === 0) {\n      this.resetModified();\n    }\n    if (this.#storage.values().some(v => v instanceof AnnotationEditor)) {\n      return;\n    }\n    this.onAnnotationEditor?.(null);\n  }\n  setValue(key, value) {\n    const obj = this.#storage.get(key);\n    let modified = false;\n    if (obj !== undefined) {\n      for (const [entry, val] of Object.entries(value)) {\n        if (obj[entry] !== val) {\n          modified = true;\n          obj[entry] = val;\n        }\n      }\n    } else {\n      modified = true;\n      this.#storage.set(key, value);\n    }\n    if (modified) {\n      this.#setModified();\n    }\n    if (value instanceof AnnotationEditor) {\n      (this.#editorsMap ||= new Map()).set(value.annotationElementId, value);\n      this.onAnnotationEditor?.(value.constructor._type);\n    }\n  }\n  has(key) {\n    return this.#storage.has(key);\n  }\n  get size() {\n    return this.#storage.size;\n  }\n  #setModified() {\n    if (!this.#modified) {\n      this.#modified = true;\n      this.onSetModified?.();\n    }\n  }\n  resetModified() {\n    if (this.#modified) {\n      this.#modified = false;\n      this.onResetModified?.();\n    }\n  }\n  get print() {\n    return new PrintAnnotationStorage(this);\n  }\n  get serializable() {\n    if (this.#storage.size === 0) {\n      return SerializableEmpty;\n    }\n    const map = new Map(),\n      hash = new MurmurHash3_64(),\n      transfer = [];\n    const context = Object.create(null);\n    let hasBitmap = false;\n    for (const [key, val] of this.#storage) {\n      const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val;\n      if (val.page) {\n        val.pageIndex = val.page._pageIndex;\n        delete val.page;\n      }\n      if (serialized) {\n        map.set(key, serialized);\n        hash.update(`${key}:${JSON.stringify(serialized)}`);\n        hasBitmap ||= !!serialized.bitmap;\n      }\n    }\n    if (hasBitmap) {\n      for (const value of map.values()) {\n        if (value.bitmap) {\n          transfer.push(value.bitmap);\n        }\n      }\n    }\n    return map.size > 0 ? {\n      map,\n      hash: hash.hexdigest(),\n      transfer\n    } : SerializableEmpty;\n  }\n  get editorStats() {\n    let stats = null;\n    const typeToEditor = new Map();\n    let numberOfEditedComments = 0;\n    let numberOfDeletedComments = 0;\n    for (const value of this.#storage.values()) {\n      if (!(value instanceof AnnotationEditor)) {\n        if (value.popup) {\n          if (value.popup.deleted) {\n            numberOfDeletedComments += 1;\n          } else {\n            numberOfEditedComments += 1;\n          }\n        }\n        continue;\n      }\n      if (value.isCommentDeleted) {\n        numberOfDeletedComments += 1;\n      } else if (value.hasEditedComment) {\n        numberOfEditedComments += 1;\n      }\n      const editorStats = value.telemetryFinalData;\n      if (!editorStats) {\n        continue;\n      }\n      const {\n        type\n      } = editorStats;\n      typeToEditor.getOrInsertComputed(type, () => Object.getPrototypeOf(value).constructor);\n      stats ||= Object.create(null);\n      const map = stats[type] ||= new Map();\n      for (const [key, val] of Object.entries(editorStats)) {\n        if (key === \"type\") {\n          continue;\n        }\n        const counters = map.getOrInsertComputed(key, makeMap);\n        counters.set(val, (counters.get(val) ?? 0) + 1);\n      }\n    }\n    if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) {\n      stats ||= Object.create(null);\n      stats.comments = {\n        deleted: numberOfDeletedComments,\n        edited: numberOfEditedComments\n      };\n    }\n    if (!stats) {\n      return null;\n    }\n    for (const [type, editor] of typeToEditor) {\n      stats[type] = editor.computeTelemetryFinalData(stats[type]);\n    }\n    return stats;\n  }\n  resetModifiedIds() {\n    this.#modifiedIds = null;\n  }\n  updateEditor(annotationId, data) {\n    const value = this.#editorsMap?.get(annotationId);\n    if (value) {\n      value.updateFromAnnotationLayer(data);\n      return true;\n    }\n    return false;\n  }\n  getEditor(annotationId) {\n    return this.#editorsMap?.get(annotationId) || null;\n  }\n  get modifiedIds() {\n    if (this.#modifiedIds) {\n      return this.#modifiedIds;\n    }\n    const ids = [];\n    if (this.#editorsMap) {\n      for (const value of this.#editorsMap.values()) {\n        if (!value.serialize()) {\n          continue;\n        }\n        ids.push(value.annotationElementId);\n      }\n    }\n    let hash = \"\";\n    if (ids.length) {\n      const h = new MurmurHash3_64();\n      h.update(ids.join(\",\"));\n      hash = h.hexdigest();\n    }\n    return this.#modifiedIds = {\n      ids: new Set(ids),\n      hash\n    };\n  }\n  [Symbol.iterator]() {\n    return this.#storage.entries();\n  }\n}\nclass PrintAnnotationStorage extends AnnotationStorage {\n  #serializable = SerializableEmpty;\n  constructor(parent) {\n    super();\n    const {\n      serializable\n    } = parent;\n    if (serializable === SerializableEmpty) {\n      return;\n    }\n    const {\n      map,\n      hash,\n      transfer\n    } = serializable;\n    const clone = structuredClone(map, transfer ? {\n      transfer\n    } : null);\n    this.#serializable = {\n      map: clone,\n      hash,\n      transfer: []\n    };\n  }\n  get print() {\n    unreachable(\"Should not call PrintAnnotationStorage.print\");\n  }\n  get serializable() {\n    return this.#serializable;\n  }\n  get modifiedIds() {\n    return shadow(this, \"modifiedIds\", {\n      ids: new Set(),\n      hash: \"\"\n    });\n  }\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.for-each.js\nvar es_iterator_for_each = __webpack_require__(7588);\n;// ./src/display/canvas_dependency_tracker.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst FORCED_DEPENDENCY_LABEL = \"__forcedDependency\";\nconst {\n  floor,\n  ceil\n} = Math;\nfunction expandBBox(array, index, minX, minY, maxX, maxY) {\n  array[index * 4 + 0] = Math.min(array[index * 4 + 0], minX);\n  array[index * 4 + 1] = Math.min(array[index * 4 + 1], minY);\n  array[index * 4 + 2] = Math.max(array[index * 4 + 2], maxX);\n  array[index * 4 + 3] = Math.max(array[index * 4 + 3], maxY);\n}\nfunction scaleCharBBox(scaleX, scaleY, x, y, bbox) {\n  let temp;\n  if (scaleX) {\n    if (scaleX < 0) {\n      temp = bbox[0];\n      bbox[0] = bbox[2];\n      bbox[2] = temp;\n    }\n    bbox[0] *= scaleX;\n    bbox[2] *= scaleX;\n    if (scaleY < 0) {\n      temp = bbox[1];\n      bbox[1] = bbox[3];\n      bbox[3] = temp;\n    }\n    bbox[1] *= scaleY;\n    bbox[3] *= scaleY;\n  } else {\n    bbox.fill(0);\n  }\n  bbox[0] += x;\n  bbox[1] += y;\n  bbox[2] += x;\n  bbox[3] += y;\n}\nconst EMPTY_BBOX = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0];\nclass BBoxReader {\n  #bboxes;\n  #coords;\n  constructor(bboxes, coords) {\n    this.#bboxes = bboxes;\n    this.#coords = coords;\n  }\n  get length() {\n    return this.#bboxes.length;\n  }\n  isEmpty(i) {\n    return this.#bboxes[i] === EMPTY_BBOX;\n  }\n  minX(i) {\n    return this.#coords[i * 4 + 0] / 256;\n  }\n  minY(i) {\n    return this.#coords[i * 4 + 1] / 256;\n  }\n  maxX(i) {\n    return (this.#coords[i * 4 + 2] + 1) / 256;\n  }\n  maxY(i) {\n    return (this.#coords[i * 4 + 3] + 1) / 256;\n  }\n}\nconst ensureDebugMetadata = (map, key) => map?.getOrInsertComputed(key, () => ({\n  dependencies: new Set(),\n  isRenderingOperation: false\n}));\nclass CanvasBBoxTracker {\n  #baseTransformStack = [[1, 0, 0, 1, 0, 0]];\n  #clipBox = [-Infinity, -Infinity, Infinity, Infinity];\n  #pendingBBox = new Float64Array(BBOX_INIT);\n  _pendingBBoxIdx = -1;\n  #canvasWidth;\n  #canvasHeight;\n  #bboxesCoords;\n  #bboxes;\n  _savesStack = [];\n  _markedContentStack = [];\n  constructor(canvas, operationsCount) {\n    this.#canvasWidth = canvas.width;\n    this.#canvasHeight = canvas.height;\n    this.#initializeBBoxes(operationsCount);\n  }\n  growOperationsCount(operationsCount) {\n    if (operationsCount >= this.#bboxes.length) {\n      this.#initializeBBoxes(operationsCount, this.#bboxes);\n    }\n  }\n  #initializeBBoxes(operationsCount, oldBBoxes) {\n    const buffer = new ArrayBuffer(operationsCount * 4);\n    this.#bboxesCoords = new Uint8ClampedArray(buffer);\n    this.#bboxes = new Uint32Array(buffer);\n    if (oldBBoxes && oldBBoxes.length > 0) {\n      this.#bboxes.set(oldBBoxes);\n      this.#bboxes.fill(EMPTY_BBOX, oldBBoxes.length);\n    } else {\n      this.#bboxes.fill(EMPTY_BBOX);\n    }\n  }\n  get clipBox() {\n    return this.#clipBox;\n  }\n  save(opIdx) {\n    this.#clipBox = {\n      __proto__: this.#clipBox\n    };\n    this._savesStack.push(opIdx);\n    return this;\n  }\n  restore(opIdx, onSavePopped) {\n    const previous = Object.getPrototypeOf(this.#clipBox);\n    if (previous === null) {\n      return this;\n    }\n    this.#clipBox = previous;\n    const lastSave = this._savesStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  recordOpenMarker(idx) {\n    this._savesStack.push(idx);\n    return this;\n  }\n  getOpenMarker() {\n    if (this._savesStack.length === 0) {\n      return null;\n    }\n    return this._savesStack.at(-1);\n  }\n  recordCloseMarker(opIdx, onSavePopped) {\n    const lastSave = this._savesStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    this._markedContentStack.push(opIdx);\n    return this;\n  }\n  endMarkedContent(opIdx, onSavePopped) {\n    const lastSave = this._markedContentStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#baseTransformStack.push(Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform()));\n    return this;\n  }\n  popBaseTransform() {\n    if (this.#baseTransformStack.length > 1) {\n      this.#baseTransformStack.pop();\n    }\n    return this;\n  }\n  resetBBox(idx) {\n    if (this._pendingBBoxIdx !== idx) {\n      this._pendingBBoxIdx = idx;\n      this.#pendingBBox.set(BBOX_INIT, 0);\n    }\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform());\n    const clipBox = BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, clipBox);\n    const intersection = Util.intersect(this.#clipBox, clipBox);\n    if (intersection) {\n      this.#clipBox[0] = intersection[0];\n      this.#clipBox[1] = intersection[1];\n      this.#clipBox[2] = intersection[2];\n      this.#clipBox[3] = intersection[3];\n    } else {\n      this.#clipBox[0] = this.#clipBox[1] = Infinity;\n      this.#clipBox[2] = this.#clipBox[3] = -Infinity;\n    }\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    const clipBox = this.#clipBox;\n    if (clipBox[0] === Infinity) {\n      return this;\n    }\n    const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform());\n    if (clipBox[0] === -Infinity) {\n      Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, this.#pendingBBox);\n      return this;\n    }\n    const bbox = BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, bbox);\n    this.#pendingBBox[0] = MathClamp(bbox[0], clipBox[0], this.#pendingBBox[0]);\n    this.#pendingBBox[1] = MathClamp(bbox[1], clipBox[1], this.#pendingBBox[1]);\n    this.#pendingBBox[2] = MathClamp(bbox[2], this.#pendingBBox[2], clipBox[2]);\n    this.#pendingBBox[3] = MathClamp(bbox[3], this.#pendingBBox[3], clipBox[3]);\n    return this;\n  }\n  recordFullPageBBox(idx) {\n    this.#pendingBBox[0] = Math.max(0, this.#clipBox[0]);\n    this.#pendingBBox[1] = Math.max(0, this.#clipBox[1]);\n    this.#pendingBBox[2] = Math.min(this.#canvasWidth, this.#clipBox[2]);\n    this.#pendingBBox[3] = Math.min(this.#canvasHeight, this.#clipBox[3]);\n    return this;\n  }\n  recordOperation(idx, preserve = false, dependencyLists) {\n    if (this._pendingBBoxIdx !== idx) {\n      return this;\n    }\n    const minX = floor(this.#pendingBBox[0] * 256 / this.#canvasWidth);\n    const minY = floor(this.#pendingBBox[1] * 256 / this.#canvasHeight);\n    const maxX = ceil(this.#pendingBBox[2] * 256 / this.#canvasWidth);\n    const maxY = ceil(this.#pendingBBox[3] * 256 / this.#canvasHeight);\n    expandBBox(this.#bboxesCoords, idx, minX, minY, maxX, maxY);\n    if (dependencyLists) {\n      for (const dependencies of dependencyLists) {\n        for (const depIdx of dependencies) {\n          if (depIdx !== idx) {\n            expandBBox(this.#bboxesCoords, depIdx, minX, minY, maxX, maxY);\n          }\n        }\n      }\n    }\n    if (!preserve) {\n      this._pendingBBoxIdx = -1;\n    }\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx) {\n    if (this._pendingBBoxIdx === idx) {\n      this._pendingBBoxIdx = -1;\n      this.#clipBox[0] = Math.max(this.#clipBox[0], this.#pendingBBox[0]);\n      this.#clipBox[1] = Math.max(this.#clipBox[1], this.#pendingBBox[1]);\n      this.#clipBox[2] = Math.min(this.#clipBox[2], this.#pendingBBox[2]);\n      this.#clipBox[3] = Math.min(this.#clipBox[3], this.#pendingBBox[3]);\n    }\n    return this;\n  }\n  take() {\n    return new BBoxReader(this.#bboxes, this.#bboxesCoords);\n  }\n  takeDebugMetadata() {\n    throw new Error(\"Unreachable\");\n  }\n  recordSimpleData(name, idx) {\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    return this;\n  }\n  recordNamedData(name, idx) {\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    return this;\n  }\n  recordFutureForcedDependency(name, idx) {\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return undefined;\n  }\n  recordDependencies(idx, dependencyNames) {\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    return this;\n  }\n  recordShowTextOperation(idx, preserve = false) {\n    return this;\n  }\n}\nclass CanvasDependencyTracker {\n  #simple = {\n    __proto__: null\n  };\n  #incremental = {\n    __proto__: null,\n    transform: [],\n    moveText: [],\n    sameLineText: [],\n    [FORCED_DEPENDENCY_LABEL]: []\n  };\n  #namedDependencies = new Map();\n  #pendingDependencies = new Set();\n  #fontBBoxTrustworthy = new Map();\n  #debugMetadata;\n  #recordDebugMetadataDepenencyAfterRestore;\n  #bboxTracker;\n  constructor(bboxTracker, recordDebugMetadata = false) {\n    this.#bboxTracker = bboxTracker;\n    if (recordDebugMetadata) {\n      this.#debugMetadata = new Map();\n      this.#recordDebugMetadataDepenencyAfterRestore = (lastSave, opIdx) => {\n        ensureDebugMetadata(this.#debugMetadata, opIdx).dependencies.add(lastSave);\n      };\n    }\n  }\n  get clipBox() {\n    return this.#bboxTracker.clipBox;\n  }\n  growOperationsCount(operationsCount) {\n    this.#bboxTracker.growOperationsCount(operationsCount);\n  }\n  save(opIdx) {\n    this.#simple = {\n      __proto__: this.#simple\n    };\n    this.#incremental = {\n      __proto__: this.#incremental,\n      transform: {\n        __proto__: this.#incremental.transform\n      },\n      moveText: {\n        __proto__: this.#incremental.moveText\n      },\n      sameLineText: {\n        __proto__: this.#incremental.sameLineText\n      },\n      [FORCED_DEPENDENCY_LABEL]: {\n        __proto__: this.#incremental[FORCED_DEPENDENCY_LABEL]\n      }\n    };\n    this.#bboxTracker.save(opIdx);\n    return this;\n  }\n  restore(opIdx) {\n    this.#bboxTracker.restore(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    const previous = Object.getPrototypeOf(this.#simple);\n    if (previous === null) {\n      return this;\n    }\n    this.#simple = previous;\n    this.#incremental = Object.getPrototypeOf(this.#incremental);\n    return this;\n  }\n  recordOpenMarker(opIdx) {\n    this.#bboxTracker.recordOpenMarker(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  getOpenMarker() {\n    return this.#bboxTracker.getOpenMarker();\n  }\n  recordCloseMarker(opIdx) {\n    this.#bboxTracker.recordCloseMarker(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    this.#bboxTracker.beginMarkedContent(opIdx);\n    return this;\n  }\n  endMarkedContent(opIdx) {\n    this.#bboxTracker.endMarkedContent(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#bboxTracker.pushBaseTransform(ctx);\n    return this;\n  }\n  popBaseTransform() {\n    this.#bboxTracker.popBaseTransform();\n    return this;\n  }\n  recordSimpleData(name, idx) {\n    this.#simple[name] = idx;\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    this.#incremental[name].push(idx);\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    this.#incremental[name].length = 0;\n    return this;\n  }\n  recordNamedData(name, idx) {\n    this.#namedDependencies.set(name, idx);\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#simple[name] = this.#namedDependencies.get(depName) ?? fallbackIdx;\n  }\n  recordFutureForcedDependency(name, idx) {\n    this.recordIncrementalData(FORCED_DEPENDENCY_LABEL, idx);\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    for (const name of names) {\n      if (name in this.#simple) {\n        this.recordFutureForcedDependency(name, this.#simple[name]);\n      }\n    }\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    for (const dep of this.#pendingDependencies) {\n      this.recordFutureForcedDependency(FORCED_DEPENDENCY_LABEL, dep);\n    }\n    return this;\n  }\n  resetBBox(idx) {\n    this.#bboxTracker.resetBBox(idx);\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    this.#bboxTracker.recordClipBox(idx, ctx, minX, maxX, minY, maxY);\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    this.#bboxTracker.recordBBox(idx, ctx, minX, maxX, minY, maxY);\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n    const fontBBox = font.bbox;\n    let isBBoxTrustworthy;\n    let computedBBox;\n    if (fontBBox) {\n      isBBoxTrustworthy = fontBBox[2] !== fontBBox[0] && fontBBox[3] !== fontBBox[1] && this.#fontBBoxTrustworthy.get(font);\n      if (isBBoxTrustworthy !== false) {\n        computedBBox = [0, 0, 0, 0];\n        Util.axialAlignedBoundingBox(fontBBox, font.fontMatrix, computedBBox);\n        if (scale !== 1 || x !== 0 || y !== 0) {\n          scaleCharBBox(scale, -scale, x, y, computedBBox);\n        }\n        if (isBBoxTrustworthy) {\n          return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]);\n        }\n      }\n    }\n    if (!getMeasure) {\n      return this.recordFullPageBBox(idx);\n    }\n    const measure = getMeasure();\n    if (fontBBox && computedBBox && isBBoxTrustworthy === undefined) {\n      isBBoxTrustworthy = computedBBox[0] <= x - measure.actualBoundingBoxLeft && computedBBox[2] >= x + measure.actualBoundingBoxRight && computedBBox[1] <= y - measure.actualBoundingBoxAscent && computedBBox[3] >= y + measure.actualBoundingBoxDescent;\n      this.#fontBBoxTrustworthy.set(font, isBBoxTrustworthy);\n      if (isBBoxTrustworthy) {\n        return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]);\n      }\n    }\n    return this.recordBBox(idx, ctx, x - measure.actualBoundingBoxLeft, x + measure.actualBoundingBoxRight, y - measure.actualBoundingBoxAscent, y + measure.actualBoundingBoxDescent);\n  }\n  recordFullPageBBox(idx) {\n    this.#bboxTracker.recordFullPageBBox(idx);\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return this.#simple[dependencyName];\n  }\n  recordDependencies(idx, dependencyNames) {\n    const pendingDependencies = this.#pendingDependencies;\n    const simple = this.#simple;\n    const incremental = this.#incremental;\n    for (const name of dependencyNames) {\n      if (name in this.#simple) {\n        pendingDependencies.add(simple[name]);\n      } else if (name in incremental) {\n        incremental[name].forEach(pendingDependencies.add, pendingDependencies);\n      }\n    }\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    if (this.#namedDependencies.has(name)) {\n      this.#pendingDependencies.add(this.#namedDependencies.get(name));\n    }\n    return this;\n  }\n  recordOperation(idx, preserve = false) {\n    this.recordDependencies(idx, [FORCED_DEPENDENCY_LABEL]);\n    if (this.#debugMetadata) {\n      const metadata = ensureDebugMetadata(this.#debugMetadata, idx);\n      const {\n        dependencies\n      } = metadata;\n      this.#pendingDependencies.forEach(dependencies.add, dependencies);\n      this.#bboxTracker._savesStack.forEach(dependencies.add, dependencies);\n      this.#bboxTracker._markedContentStack.forEach(dependencies.add, dependencies);\n      dependencies.delete(idx);\n      metadata.isRenderingOperation = true;\n    }\n    const needsCleanup = !preserve && idx === this.#bboxTracker._pendingBBoxIdx;\n    this.#bboxTracker.recordOperation(idx, preserve, [this.#pendingDependencies, this.#bboxTracker._savesStack, this.#bboxTracker._markedContentStack]);\n    if (needsCleanup) {\n      this.#pendingDependencies.clear();\n    }\n    return this;\n  }\n  recordShowTextOperation(idx, preserve = false) {\n    const deps = Array.from(this.#pendingDependencies);\n    this.recordOperation(idx, preserve);\n    this.recordIncrementalData(\"sameLineText\", idx);\n    for (const dep of deps) {\n      this.recordIncrementalData(\"sameLineText\", dep);\n    }\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx, preserve = false) {\n    const needsCleanup = !preserve && idx === this.#bboxTracker._pendingBBoxIdx;\n    this.#bboxTracker.bboxToClipBoxDropOperation(idx);\n    if (needsCleanup) {\n      this.#pendingDependencies.clear();\n    }\n    return this;\n  }\n  take() {\n    this.#fontBBoxTrustworthy.clear();\n    return this.#bboxTracker.take();\n  }\n  takeDebugMetadata() {\n    return this.#debugMetadata;\n  }\n}\nclass CanvasNestedDependencyTracker {\n  #dependencyTracker;\n  #opIdx;\n  #ignoreBBoxes;\n  #nestingLevel = 0;\n  #savesLevel = 0;\n  constructor(dependencyTracker, opIdx, ignoreBBoxes) {\n    if (dependencyTracker instanceof CanvasNestedDependencyTracker && dependencyTracker.#ignoreBBoxes === !!ignoreBBoxes) {\n      return dependencyTracker;\n    }\n    this.#dependencyTracker = dependencyTracker;\n    this.#opIdx = opIdx;\n    this.#ignoreBBoxes = !!ignoreBBoxes;\n  }\n  get clipBox() {\n    return this.#dependencyTracker.clipBox;\n  }\n  growOperationsCount() {\n    throw new Error(\"Unreachable\");\n  }\n  save(opIdx) {\n    this.#savesLevel++;\n    this.#dependencyTracker.save(this.#opIdx);\n    return this;\n  }\n  restore(opIdx) {\n    if (this.#savesLevel > 0) {\n      this.#dependencyTracker.restore(this.#opIdx);\n      this.#savesLevel--;\n    }\n    return this;\n  }\n  recordOpenMarker(idx) {\n    this.#nestingLevel++;\n    return this;\n  }\n  getOpenMarker() {\n    return this.#nestingLevel > 0 ? this.#opIdx : this.#dependencyTracker.getOpenMarker();\n  }\n  recordCloseMarker(idx) {\n    this.#nestingLevel--;\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    return this;\n  }\n  endMarkedContent(opIdx) {\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#dependencyTracker.pushBaseTransform(ctx);\n    return this;\n  }\n  popBaseTransform() {\n    this.#dependencyTracker.popBaseTransform();\n    return this;\n  }\n  recordSimpleData(name, idx) {\n    this.#dependencyTracker.recordSimpleData(name, this.#opIdx);\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    this.#dependencyTracker.recordIncrementalData(name, this.#opIdx);\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    this.#dependencyTracker.resetIncrementalData(name, this.#opIdx);\n    return this;\n  }\n  recordNamedData(name, idx) {\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#dependencyTracker.recordSimpleDataFromNamed(name, depName, this.#opIdx);\n    return this;\n  }\n  recordFutureForcedDependency(name, idx) {\n    this.#dependencyTracker.recordFutureForcedDependency(name, this.#opIdx);\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    this.#dependencyTracker.inheritSimpleDataAsFutureForcedDependencies(names);\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    this.#dependencyTracker.inheritPendingDependenciesAsFutureForcedDependencies();\n    return this;\n  }\n  resetBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.resetBBox(this.#opIdx);\n    }\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordClipBox(this.#opIdx, ctx, minX, maxX, minY, maxY);\n    }\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordBBox(this.#opIdx, ctx, minX, maxX, minY, maxY);\n    }\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale, x, y, getMeasure) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordCharacterBBox(this.#opIdx, ctx, font, scale, x, y, getMeasure);\n    }\n    return this;\n  }\n  recordFullPageBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordFullPageBBox(this.#opIdx);\n    }\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return this.#dependencyTracker.getSimpleIndex(dependencyName);\n  }\n  recordDependencies(idx, dependencyNames) {\n    this.#dependencyTracker.recordDependencies(this.#opIdx, dependencyNames);\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    this.#dependencyTracker.recordNamedDependency(this.#opIdx, name);\n    return this;\n  }\n  recordOperation(idx) {\n    this.#dependencyTracker.recordOperation(this.#opIdx, true);\n    return this;\n  }\n  recordShowTextOperation(idx) {\n    this.#dependencyTracker.recordShowTextOperation(this.#opIdx, true);\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.bboxToClipBoxDropOperation(this.#opIdx, true);\n    }\n    return this;\n  }\n  take() {\n    throw new Error(\"Unreachable\");\n  }\n  takeDebugMetadata() {\n    throw new Error(\"Unreachable\");\n  }\n}\nconst Dependencies = {\n  stroke: [\"path\", \"transform\", \"filter\", \"strokeColor\", \"strokeAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"dash\"],\n  fill: [\"path\", \"transform\", \"filter\", \"fillColor\", \"fillAlpha\", \"globalCompositeOperation\", \"SMask\"],\n  imageXObject: [\"transform\", \"SMask\", \"filter\", \"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\"],\n  rawFillPath: [\"filter\", \"fillColor\", \"fillAlpha\"],\n  showText: [\"transform\", \"leading\", \"charSpacing\", \"wordSpacing\", \"hScale\", \"textRise\", \"moveText\", \"textMatrix\", \"font\", \"fontObj\", \"filter\", \"fillColor\", \"textRenderingMode\", \"SMask\", \"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\", \"sameLineText\"],\n  transform: [\"transform\"],\n  transformAndFill: [\"transform\", \"fillColor\"]\n};\nclass CanvasImagesTracker {\n  #canvasWidth;\n  #canvasHeight;\n  #capacity = 4;\n  #count = 0;\n  #coords = new CanvasImagesTracker.#CoordsArray(this.#capacity * 6);\n  static #CoordsArray = FeatureTest.isFloat16ArraySupported ? Float16Array : Float32Array;\n  constructor(canvas) {\n    this.#canvasWidth = canvas.width;\n    this.#canvasHeight = canvas.height;\n  }\n  record(ctx, width, height, clipBox) {\n    if (this.#count === this.#capacity) {\n      this.#capacity *= 2;\n      const newCoords = new CanvasImagesTracker.#CoordsArray(this.#capacity * 6);\n      newCoords.set(this.#coords);\n      this.#coords = newCoords;\n    }\n    const transform = getCurrentTransform(ctx);\n    let coords;\n    if (clipBox[0] !== Infinity) {\n      const bbox = BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, -height, width, 0], transform, bbox);\n      const finalBBox = Util.intersect(clipBox, bbox);\n      if (!finalBBox) {\n        return;\n      }\n      const [minX, minY, maxX, maxY] = finalBBox;\n      if (minX !== bbox[0] || minY !== bbox[1] || maxX !== bbox[2] || maxY !== bbox[3]) {\n        const rotationAngle = Math.atan2(transform[1], transform[0]);\n        const sin = Math.abs(Math.sin(rotationAngle));\n        const cos = Math.abs(Math.cos(rotationAngle));\n        if (sin < 1e-6 || cos < 1e-6 || Math.abs(sin - cos) < 1e-6) {\n          coords = [minX, minY, minX, maxY, maxX, minY];\n        } else {\n          const finalBBoxWidth = maxX - minX;\n          const finalBBoxHeight = maxY - minY;\n          const sin2 = sin * sin;\n          const cos2 = cos * cos;\n          const cosSin = cos * sin;\n          const denom = cos2 - sin2;\n          const a = (finalBBoxHeight * cos2 - finalBBoxWidth * cosSin) / denom;\n          const b = (finalBBoxHeight * cosSin - finalBBoxWidth * sin2) / denom;\n          coords = [minX + b, minY, minX, minY + a, maxX, maxY - a];\n        }\n      }\n    }\n    if (!coords) {\n      coords = [0, -height, 0, 0, width, -height];\n      Util.applyTransform(coords, transform, 0);\n      Util.applyTransform(coords, transform, 2);\n      Util.applyTransform(coords, transform, 4);\n    }\n    coords[0] /= this.#canvasWidth;\n    coords[1] /= this.#canvasHeight;\n    coords[2] /= this.#canvasWidth;\n    coords[3] /= this.#canvasHeight;\n    coords[4] /= this.#canvasWidth;\n    coords[5] /= this.#canvasHeight;\n    this.#coords.set(coords, this.#count * 6);\n    this.#count++;\n  }\n  take() {\n    return this.#coords.subarray(0, this.#count * 6);\n  }\n}\n\n;// ./src/display/font_loader.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FontLoader {\n  #systemFonts = new Set();\n  #styleSheet = null;\n  constructor({\n    ownerDocument = globalThis.document,\n    styleElement = null\n  }) {\n    this._document = ownerDocument;\n    this.nativeFontFaces = new Set();\n    this.styleElement = null;\n    this.loadingRequests = [];\n    this.loadTestFontId = 0;\n  }\n  addNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.add(nativeFontFace);\n    this._document.fonts.add(nativeFontFace);\n  }\n  removeNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.delete(nativeFontFace);\n    this._document.fonts.delete(nativeFontFace);\n  }\n  insertRule(rule) {\n    const styleSheet = this.#getStyleSheet();\n    styleSheet.insertRule(rule, styleSheet.cssRules.length);\n  }\n  #getStyleSheet() {\n    if (this.#styleSheet) {\n      return this.#styleSheet;\n    }\n    const StyleSheet = this._document.defaultView?.CSSStyleSheet || globalThis.CSSStyleSheet;\n    if (!this.styleElement && StyleSheet) {\n      const {\n        adoptedStyleSheets\n      } = this._document;\n      if (adoptedStyleSheets) {\n        const styleSheet = new StyleSheet();\n        adoptedStyleSheets.push(styleSheet);\n        return this.#styleSheet = styleSheet;\n      }\n    }\n    if (!this.styleElement) {\n      this.styleElement = this._document.createElement(\"style\");\n      this._document.documentElement.getElementsByTagName(\"head\")[0].append(this.styleElement);\n    }\n    return this.#styleSheet = this.styleElement.sheet;\n  }\n  clear() {\n    for (const nativeFontFace of this.nativeFontFaces) {\n      this._document.fonts.delete(nativeFontFace);\n    }\n    this.nativeFontFaces.clear();\n    this.#systemFonts.clear();\n    if (this.#styleSheet) {\n      const {\n        adoptedStyleSheets\n      } = this._document;\n      if (adoptedStyleSheets?.includes(this.#styleSheet)) {\n        this._document.adoptedStyleSheets = adoptedStyleSheets.filter(styleSheet => styleSheet !== this.#styleSheet);\n      }\n      this.#styleSheet = null;\n    }\n    if (this.styleElement) {\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n  async loadSystemFont({\n    systemFontInfo: info,\n    disableFontFace,\n    _inspectFont\n  }) {\n    if (!info || this.#systemFonts.has(info.loadedName)) {\n      return;\n    }\n    assert(!disableFontFace, \"loadSystemFont shouldn't be called when `disableFontFace` is set.\");\n    if (this.isFontLoadingAPISupported) {\n      const {\n        loadedName,\n        src,\n        style\n      } = info;\n      const fontFace = new FontFace(loadedName, src, style);\n      this.addNativeFontFace(fontFace);\n      try {\n        await fontFace.load();\n        this.#systemFonts.add(loadedName);\n        _inspectFont?.(info);\n      } catch {\n        warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);\n        this.removeNativeFontFace(fontFace);\n      }\n      return;\n    }\n    unreachable(\"Not implemented: loadSystemFont without the Font Loading API.\");\n  }\n  async bind(font) {\n    if (font.attached || font.missingFile && !font.systemFontInfo) {\n      return;\n    }\n    font.attached = true;\n    if (font.systemFontInfo) {\n      await this.loadSystemFont(font);\n      return;\n    }\n    if (this.isFontLoadingAPISupported) {\n      const nativeFontFace = font.createNativeFontFace();\n      if (nativeFontFace) {\n        this.addNativeFontFace(nativeFontFace);\n        try {\n          await nativeFontFace.loaded;\n        } catch (ex) {\n          warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n          font.disableFontFace = true;\n          throw ex;\n        }\n      }\n      return;\n    }\n    const rule = font.createFontFaceRule();\n    if (rule) {\n      this.insertRule(rule);\n      if (this.isSyncFontLoadingSupported) {\n        return;\n      }\n      await new Promise(resolve => {\n        const request = this._queueLoadingCallback(resolve);\n        this._prepareFontLoadEvent(font, request);\n      });\n    }\n  }\n  get isFontLoadingAPISupported() {\n    const hasFonts = !!this._document?.fonts;\n    return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n  }\n  get isSyncFontLoadingSupported() {\n    return shadow(this, \"isSyncFontLoadingSupported\", isNodeJS || FeatureTest.platform.isFirefox);\n  }\n  _queueLoadingCallback(callback) {\n    function completeRequest() {\n      assert(!request.done, \"completeRequest() cannot be called twice.\");\n      request.done = true;\n      while (loadingRequests.length > 0 && loadingRequests[0].done) {\n        const otherRequest = loadingRequests.shift();\n        setTimeout(otherRequest.callback, 0);\n      }\n    }\n    const {\n      loadingRequests\n    } = this;\n    const request = {\n      done: false,\n      complete: completeRequest,\n      callback\n    };\n    loadingRequests.push(request);\n    return request;\n  }\n  get _loadTestFont() {\n    const testFont = atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" + \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" + \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" + \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" + \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" + \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" + \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" + \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" + \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" + \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" + \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" + \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" + \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" + \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" + \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" + \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" + \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\n    return shadow(this, \"_loadTestFont\", testFont);\n  }\n  _prepareFontLoadEvent(font, request) {\n    function int32(data, offset) {\n      return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\n    }\n    function string32(value) {\n      return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n    }\n    function spliceString(s, offset, remove, insert) {\n      const chunk1 = s.substring(0, offset);\n      const chunk2 = s.substring(offset + remove);\n      return chunk1 + insert + chunk2;\n    }\n    let i, ii;\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext(\"2d\");\n    let called = 0;\n    function isFontReady(name, callback) {\n      if (++called > 30) {\n        warn(\"Load test font never loaded.\");\n        callback();\n        return;\n      }\n      ctx.font = \"30px \" + name;\n      ctx.fillText(\".\", 0, 20);\n      const imageData = ctx.getImageData(0, 0, 1, 1);\n      if (imageData.data[3] > 0) {\n        callback();\n        return;\n      }\n      setTimeout(isFontReady.bind(null, name, callback));\n    }\n    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n    let data = this._loadTestFont;\n    const COMMENT_OFFSET = 976;\n    data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\n    const CFF_CHECKSUM_OFFSET = 16;\n    const XXXX_VALUE = 0x58585858;\n    let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\n    }\n    if (i < loadTestFontId.length) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\n    }\n    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n    const url = `url(data:font/opentype;base64,${btoa(data)});`;\n    const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n    this.insertRule(rule);\n    const div = this._document.createElement(\"div\");\n    div.style.visibility = \"hidden\";\n    div.style.width = div.style.height = \"10px\";\n    div.style.position = \"absolute\";\n    div.style.top = div.style.left = \"0px\";\n    for (const name of [font.loadedName, loadTestFontId]) {\n      const span = this._document.createElement(\"span\");\n      span.textContent = \"Hi\";\n      span.style.fontFamily = name;\n      div.append(span);\n    }\n    this._document.body.append(div);\n    isFontReady(loadTestFontId, () => {\n      div.remove();\n      request.complete();\n    });\n  }\n}\nclass FontFaceObject {\n  compiledGlyphs = Object.create(null);\n  #fontData;\n  constructor(translatedData, inspectFont = null, charProcOperatorList, extra) {\n    this.#fontData = translatedData;\n    this._inspectFont = inspectFont;\n    if (charProcOperatorList) {\n      this.charProcOperatorList = charProcOperatorList;\n    }\n    if (extra) {\n      Object.assign(this, extra);\n    }\n  }\n  createNativeFontFace() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    let nativeFontFace;\n    if (!this.cssFontInfo) {\n      nativeFontFace = new FontFace(this.loadedName, this.data, {});\n    } else {\n      const css = {\n        weight: this.cssFontInfo.fontWeight\n      };\n      if (this.cssFontInfo.italicAngle) {\n        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n      }\n      nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);\n    }\n    this._inspectFont?.(this);\n    return nativeFontFace;\n  }\n  createFontFaceRule() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    const url = `url(data:${this.mimetype};base64,${this.data.toBase64()});`;\n    let rule;\n    if (!this.cssFontInfo) {\n      rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n    } else {\n      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n      if (this.cssFontInfo.italicAngle) {\n        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n      }\n      rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n    }\n    this._inspectFont?.(this, url);\n    return rule;\n  }\n  getPathGenerator(objs, character) {\n    if (this.compiledGlyphs[character] !== undefined) {\n      return this.compiledGlyphs[character];\n    }\n    const objId = this.loadedName + \"_path_\" + character;\n    let cmds;\n    try {\n      cmds = objs.get(objId);\n    } catch (ex) {\n      warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n    }\n    const path = makePathFromDrawOPS(cmds?.path);\n    if (!this.fontExtraProperties) {\n      objs.delete(objId);\n    }\n    return this.compiledGlyphs[character] = path;\n  }\n  get black() {\n    return this.#fontData.black;\n  }\n  get bold() {\n    return this.#fontData.bold;\n  }\n  get disableFontFace() {\n    return this.#fontData.disableFontFace;\n  }\n  set disableFontFace(value) {\n    shadow(this, \"disableFontFace\", !!value);\n  }\n  get fontExtraProperties() {\n    return this.#fontData.fontExtraProperties;\n  }\n  get isInvalidPDFjsFont() {\n    return this.#fontData.isInvalidPDFjsFont;\n  }\n  get isType3Font() {\n    return this.#fontData.isType3Font;\n  }\n  get italic() {\n    return this.#fontData.italic;\n  }\n  get missingFile() {\n    return this.#fontData.missingFile;\n  }\n  get remeasure() {\n    return this.#fontData.remeasure;\n  }\n  get vertical() {\n    return this.#fontData.vertical;\n  }\n  get ascent() {\n    return this.#fontData.ascent;\n  }\n  get defaultWidth() {\n    return this.#fontData.defaultWidth;\n  }\n  get descent() {\n    return this.#fontData.descent;\n  }\n  get bbox() {\n    return this.#fontData.bbox;\n  }\n  get fontMatrix() {\n    return this.#fontData.fontMatrix;\n  }\n  get fallbackName() {\n    return this.#fontData.fallbackName;\n  }\n  get loadedName() {\n    return this.#fontData.loadedName;\n  }\n  get mimetype() {\n    return this.#fontData.mimetype;\n  }\n  get name() {\n    return this.#fontData.name;\n  }\n  get data() {\n    return this.#fontData.data;\n  }\n  clearData() {\n    this.#fontData.clearData();\n  }\n  get cssFontInfo() {\n    return this.#fontData.cssFontInfo;\n  }\n  get systemFontInfo() {\n    return this.#fontData.systemFontInfo;\n  }\n  get defaultVMetrics() {\n    return this.#fontData.defaultVMetrics;\n  }\n}\n\n;// ./src/shared/obj_bin_transform_utils.js\nclass CSS_FONT_INFO {\n  static strings = [\"fontFamily\", \"fontWeight\", \"italicAngle\"];\n}\nclass SYSTEM_FONT_INFO {\n  static strings = [\"css\", \"loadedName\", \"baseFontName\", \"src\"];\n}\nclass FONT_INFO {\n  static bools = [\"black\", \"bold\", \"disableFontFace\", \"fontExtraProperties\", \"isInvalidPDFjsFont\", \"isType3Font\", \"italic\", \"missingFile\", \"remeasure\", \"vertical\"];\n  static numbers = [\"ascent\", \"defaultWidth\", \"descent\"];\n  static strings = [\"fallbackName\", \"loadedName\", \"mimetype\", \"name\"];\n  static OFFSET_NUMBERS = Math.ceil(this.bools.length * 2 / 8);\n  static OFFSET_BBOX = this.OFFSET_NUMBERS + this.numbers.length * 8;\n  static OFFSET_FONT_MATRIX = this.OFFSET_BBOX + 1 + 2 * 4;\n  static OFFSET_DEFAULT_VMETRICS = this.OFFSET_FONT_MATRIX + 1 + 8 * 6;\n  static OFFSET_STRINGS = this.OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3;\n}\nclass PATTERN_INFO {\n  static KIND = 0;\n  static HAS_BBOX = 1;\n  static HAS_BACKGROUND = 2;\n  static SHADING_TYPE = 3;\n  static N_COORD = 4;\n  static N_COLOR = 8;\n  static N_STOP = 12;\n  static N_FIGURES = 16;\n}\n\n;// ./src/display/obj_bin_transform_display.js\n\n\n\n\n\n\n\n\nclass CssFontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n  }\n  #readString(index) {\n    assert(index < CSS_FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = 0;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get fontFamily() {\n    return this.#readString(0);\n  }\n  get fontWeight() {\n    return this.#readString(1);\n  }\n  get italicAngle() {\n    return this.#readString(2);\n  }\n}\nclass SystemFontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n  }\n  get guessFallback() {\n    return this.#view.getUint8(0) !== 0;\n  }\n  #readString(index) {\n    assert(index < SYSTEM_FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = 5;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get css() {\n    return this.#readString(0);\n  }\n  get loadedName() {\n    return this.#readString(1);\n  }\n  get baseFontName() {\n    return this.#readString(2);\n  }\n  get src() {\n    return this.#readString(3);\n  }\n  get style() {\n    let offset = 1;\n    offset += 4 + this.#view.getUint32(offset);\n    const styleLength = this.#view.getUint32(offset);\n    const style = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, styleLength));\n    offset += 4 + styleLength;\n    const weightLength = this.#view.getUint32(offset);\n    const weight = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, weightLength));\n    return {\n      style,\n      weight\n    };\n  }\n}\nclass FontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor({\n    buffer,\n    extra\n  }) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n    if (extra) {\n      Object.assign(this, extra);\n    }\n  }\n  #readBoolean(index) {\n    assert(index < FONT_INFO.bools.length, \"Invalid boolean index\");\n    const byteOffset = Math.floor(index / 4);\n    const bitOffset = index * 2 % 8;\n    const value = this.#view.getUint8(byteOffset) >> bitOffset & 0x03;\n    return value === 0x00 ? undefined : value === 0x02;\n  }\n  get black() {\n    return this.#readBoolean(0);\n  }\n  get bold() {\n    return this.#readBoolean(1);\n  }\n  get disableFontFace() {\n    return this.#readBoolean(2);\n  }\n  get fontExtraProperties() {\n    return this.#readBoolean(3);\n  }\n  get isInvalidPDFjsFont() {\n    return this.#readBoolean(4);\n  }\n  get isType3Font() {\n    return this.#readBoolean(5);\n  }\n  get italic() {\n    return this.#readBoolean(6);\n  }\n  get missingFile() {\n    return this.#readBoolean(7);\n  }\n  get remeasure() {\n    return this.#readBoolean(8);\n  }\n  get vertical() {\n    return this.#readBoolean(9);\n  }\n  #readNumber(index) {\n    assert(index < FONT_INFO.numbers.length, \"Invalid number index\");\n    return this.#view.getFloat64(FONT_INFO.OFFSET_NUMBERS + index * 8);\n  }\n  get ascent() {\n    return this.#readNumber(0);\n  }\n  get defaultWidth() {\n    return this.#readNumber(1);\n  }\n  get descent() {\n    return this.#readNumber(2);\n  }\n  #readArray(offset, arrLen, lookupName, increment) {\n    const len = this.#view.getUint8(offset);\n    if (len === 0) {\n      return undefined;\n    }\n    assert(len === arrLen, \"Invalid array length.\");\n    offset += 1;\n    const arr = new Array(len);\n    for (let i = 0; i < len; i++) {\n      arr[i] = this.#view[lookupName](offset, true);\n      offset += increment;\n    }\n    return arr;\n  }\n  get bbox() {\n    return this.#readArray(FONT_INFO.OFFSET_BBOX, 4, \"getInt16\", 2);\n  }\n  get fontMatrix() {\n    return this.#readArray(FONT_INFO.OFFSET_FONT_MATRIX, 6, \"getFloat64\", 8);\n  }\n  get defaultVMetrics() {\n    return this.#readArray(FONT_INFO.OFFSET_DEFAULT_VMETRICS, 3, \"getInt16\", 2);\n  }\n  #readString(index) {\n    assert(index < FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = FONT_INFO.OFFSET_STRINGS + 4;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get fallbackName() {\n    return this.#readString(0);\n  }\n  get loadedName() {\n    return this.#readString(1);\n  }\n  get mimetype() {\n    return this.#readString(2);\n  }\n  get name() {\n    return this.#readString(3);\n  }\n  #getDataOffsets() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + cssFontInfoLength;\n    const length = this.#view.getUint32(offset);\n    return {\n      offset,\n      length\n    };\n  }\n  get data() {\n    const {\n      offset,\n      length\n    } = this.#getDataOffsets();\n    return length === 0 ? undefined : new Uint8Array(this.#buffer, offset + 4, length);\n  }\n  clearData() {\n    const {\n      offset,\n      length\n    } = this.#getDataOffsets();\n    if (length === 0) {\n      return;\n    }\n    this.#view.setUint32(offset, 0);\n    this.#buffer = new Uint8Array(this.#buffer, 0, offset + 4).slice().buffer;\n    this.#view = new DataView(this.#buffer);\n  }\n  get cssFontInfo() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    if (cssFontInfoLength === 0) {\n      return null;\n    }\n    const cssFontInfoData = new Uint8Array(cssFontInfoLength);\n    cssFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, cssFontInfoLength));\n    return new CssFontInfo(cssFontInfoData.buffer);\n  }\n  get systemFontInfo() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    if (systemFontInfoLength === 0) {\n      return null;\n    }\n    const systemFontInfoData = new Uint8Array(systemFontInfoLength);\n    systemFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, systemFontInfoLength));\n    return new SystemFontInfo(systemFontInfoData.buffer);\n  }\n}\nclass PatternInfo {\n  constructor(buffer) {\n    this.buffer = buffer;\n    this.view = new DataView(buffer);\n    this.data = new Uint8Array(buffer);\n  }\n  getIR() {\n    const dataView = this.view;\n    const kind = this.data[PATTERN_INFO.KIND];\n    const hasBBox = !!this.data[PATTERN_INFO.HAS_BBOX];\n    const hasBackground = !!this.data[PATTERN_INFO.HAS_BACKGROUND];\n    const nCoord = dataView.getUint32(PATTERN_INFO.N_COORD, true);\n    const nColor = dataView.getUint32(PATTERN_INFO.N_COLOR, true);\n    const nStop = dataView.getUint32(PATTERN_INFO.N_STOP, true);\n    let offset = 20;\n    const coords = new Float32Array(this.buffer, offset, nCoord * 2);\n    offset += nCoord * 8;\n    const colors = new Uint8Array(this.buffer, offset, nColor * 4);\n    offset += nColor * 4;\n    const stops = [];\n    for (let i = 0; i < nStop; ++i) {\n      const p = dataView.getFloat32(offset, true);\n      offset += 4;\n      const rgb = dataView.getUint32(offset, true);\n      offset += 4;\n      stops.push([p, `#${rgb.toString(16).padStart(6, \"0\")}`]);\n    }\n    let bbox = null;\n    if (hasBBox) {\n      bbox = [];\n      for (let i = 0; i < 4; ++i) {\n        bbox.push(dataView.getFloat32(offset, true));\n        offset += 4;\n      }\n    }\n    let background = null;\n    if (hasBackground) {\n      background = new Uint8Array(this.buffer, offset, 3);\n      offset += 3;\n    }\n    if (kind === 1) {\n      return [\"RadialAxial\", \"axial\", bbox, stops, Array.from(coords.slice(0, 2)), Array.from(coords.slice(2, 4)), null, null];\n    }\n    if (kind === 2) {\n      return [\"RadialAxial\", \"radial\", bbox, stops, [coords[0], coords[1]], [coords[3], coords[4]], coords[2], coords[5]];\n    }\n    if (kind === 3) {\n      const shadingType = this.data[PATTERN_INFO.SHADING_TYPE];\n      let bounds = null;\n      if (coords.length > 0) {\n        bounds = BBOX_INIT.slice();\n        for (let i = 0, ii = coords.length; i < ii; i += 2) {\n          Util.pointBoundingBox(coords[i], coords[i + 1], bounds);\n        }\n      }\n      return [\"Mesh\", shadingType, coords, colors, nCoord, bounds, bbox, background];\n    }\n    throw new Error(`Unsupported pattern kind: ${kind}`);\n  }\n}\nclass FontPathInfo {\n  #buffer;\n  constructor(buffer) {\n    this.#buffer = buffer;\n  }\n  get path() {\n    if (FeatureTest.isFloat16ArraySupported) {\n      return new Float16Array(this.#buffer);\n    }\n    return new Float32Array(this.#buffer);\n  }\n}\n\n;// ./src/display/api_utils.js\n\n\n\n\n\n\n\n\n\n\nfunction getUrlProp(val) {\n  if (val instanceof URL) {\n    return val;\n  }\n  if (typeof val === \"string\") {\n    if (isNodeJS) {\n      if (/^[a-z][a-z0-9\\-+.]+:/i.test(val)) {\n        return new URL(val);\n      }\n      const url = process.getBuiltinModule(\"url\");\n      return new URL(url.pathToFileURL(val));\n    }\n    const url = URL.parse(val, window.location);\n    if (url) {\n      return url;\n    }\n  }\n  throw new Error(\"Invalid PDF url data: \" + \"either string or URL-object is expected in the url property.\");\n}\nfunction getDataProp(val) {\n  if (isNodeJS && typeof Buffer !== \"undefined\" && val instanceof Buffer) {\n    throw new Error(\"Please provide binary data as `Uint8Array`, rather than `Buffer`.\");\n  }\n  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n    return val;\n  }\n  if (typeof val === \"string\") {\n    return stringToBytes(val);\n  }\n  if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === \"object\" && !isNaN(val?.length)) {\n    return new Uint8Array(val);\n  }\n  throw new Error(\"Invalid PDF binary data: either TypedArray, \" + \"string, or array-like object is expected in the data property.\");\n}\nfunction getFactoryUrlProp(val) {\n  if (typeof val !== \"string\") {\n    return null;\n  }\n  if (val.endsWith(\"/\")) {\n    return val;\n  }\n  throw new Error(`Invalid factory url: \"${val}\" must include trailing slash.`);\n}\nconst isRefProxy = v => typeof v === \"object\" && Number.isInteger(v?.num) && v.num >= 0 && Number.isInteger(v?.gen) && v.gen >= 0;\nconst isNameProxy = v => typeof v === \"object\" && typeof v?.name === \"string\";\nconst isValidExplicitDest = _isValidExplicitDest.bind(null, isRefProxy, isNameProxy);\nclass LoopbackPort {\n  #listeners = new Map();\n  #deferred = Promise.resolve();\n  postMessage(obj, transfer) {\n    const event = {\n      data: structuredClone(obj, transfer ? {\n        transfer\n      } : null)\n    };\n    this.#deferred.then(() => {\n      for (const [listener] of this.#listeners) {\n        listener.call(this, event);\n      }\n    });\n  }\n  addEventListener(name, listener, options = null) {\n    let rmAbort = null;\n    if (options?.signal instanceof AbortSignal) {\n      const {\n        signal\n      } = options;\n      if (signal.aborted) {\n        warn(\"LoopbackPort - cannot use an `aborted` signal.\");\n        return;\n      }\n      const onAbort = () => this.removeEventListener(name, listener);\n      rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n      signal.addEventListener(\"abort\", onAbort);\n    }\n    this.#listeners.set(listener, rmAbort);\n  }\n  removeEventListener(name, listener) {\n    const rmAbort = this.#listeners.get(listener);\n    rmAbort?.();\n    this.#listeners.delete(listener);\n  }\n  terminate() {\n    for (const [, rmAbort] of this.#listeners) {\n      rmAbort?.();\n    }\n    this.#listeners.clear();\n  }\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.try.js\nvar es_promise_try = __webpack_require__(1689);\n;// ./src/shared/message_handler.js\n\n\n\nconst CallbackKind = {\n  DATA: 1,\n  ERROR: 2\n};\nconst StreamKind = {\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8\n};\nfunction onFn() {}\nfunction wrapReason(ex) {\n  if (ex instanceof AbortException || ex instanceof InvalidPDFException || ex instanceof PasswordException || ex instanceof ResponseException || ex instanceof UnknownErrorException) {\n    return ex;\n  }\n  if (!(ex instanceof Error || typeof ex === \"object\" && ex !== null)) {\n    unreachable('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.');\n  }\n  switch (ex.name) {\n    case \"AbortException\":\n      return new AbortException(ex.message);\n    case \"InvalidPDFException\":\n      return new InvalidPDFException(ex.message);\n    case \"PasswordException\":\n      return new PasswordException(ex.message, ex.code);\n    case \"ResponseException\":\n      return new ResponseException(ex.message, ex.status, ex.missing);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(ex.message, ex.details);\n  }\n  return new UnknownErrorException(ex.message, ex.toString());\n}\nclass MessageHandler {\n  #messageAC = new AbortController();\n  constructor(sourceName, targetName, comObj) {\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n    comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n      signal: this.#messageAC.signal\n    });\n  }\n  #onMessage({\n    data\n  }) {\n    if (data.targetName !== this.sourceName) {\n      return;\n    }\n    if (data.stream) {\n      this.#processStreamMessage(data);\n      return;\n    }\n    if (data.callback) {\n      const callbackId = data.callbackId;\n      const capability = this.callbackCapabilities[callbackId];\n      if (!capability) {\n        throw new Error(`Cannot resolve callback ${callbackId}`);\n      }\n      delete this.callbackCapabilities[callbackId];\n      if (data.callback === CallbackKind.DATA) {\n        capability.resolve(data.data);\n      } else if (data.callback === CallbackKind.ERROR) {\n        capability.reject(wrapReason(data.reason));\n      } else {\n        throw new Error(\"Unexpected callback case\");\n      }\n      return;\n    }\n    const action = this.actionHandler[data.action];\n    if (!action) {\n      throw new Error(`Unknown action from worker: ${data.action}`);\n    }\n    if (data.callbackId) {\n      const sourceName = this.sourceName,\n        targetName = data.sourceName,\n        comObj = this.comObj;\n      Promise.try(action, data.data).then(function (result) {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          callback: CallbackKind.DATA,\n          callbackId: data.callbackId,\n          data: result\n        });\n      }, function (reason) {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          callback: CallbackKind.ERROR,\n          callbackId: data.callbackId,\n          reason: wrapReason(reason)\n        });\n      });\n      return;\n    }\n    if (data.streamId) {\n      this.#createStreamSink(data);\n      return;\n    }\n    action(data.data);\n  }\n  on(actionName, handler) {\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n  send(actionName, data, transfers) {\n    this.comObj.postMessage({\n      sourceName: this.sourceName,\n      targetName: this.targetName,\n      action: actionName,\n      data\n    }, transfers);\n  }\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = Promise.withResolvers();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this.comObj.postMessage({\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        callbackId,\n        data\n      }, transfers);\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n  sendWithStream(actionName, data, queueingStrategy, transfers) {\n    const streamId = this.streamId++,\n      sourceName = this.sourceName,\n      targetName = this.targetName,\n      comObj = this.comObj;\n    return new ReadableStream({\n      start: controller => {\n        const startCapability = Promise.withResolvers();\n        this.streamControllers[streamId] = {\n          controller,\n          startCall: startCapability,\n          pullCall: null,\n          cancelCall: null,\n          isClosed: false\n        };\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          action: actionName,\n          streamId,\n          data,\n          desiredSize: controller.desiredSize\n        }, transfers);\n        return startCapability.promise;\n      },\n      pull: controller => {\n        const pullCapability = Promise.withResolvers();\n        this.streamControllers[streamId].pullCall = pullCapability;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.PULL,\n          streamId,\n          desiredSize: controller.desiredSize\n        });\n        return pullCapability.promise;\n      },\n      cancel: reason => {\n        assert(reason instanceof Error, \"cancel must have a valid reason\");\n        const cancelCapability = Promise.withResolvers();\n        this.streamControllers[streamId].cancelCall = cancelCapability;\n        this.streamControllers[streamId].isClosed = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CANCEL,\n          streamId,\n          reason: wrapReason(reason)\n        });\n        return cancelCapability.promise;\n      }\n    }, queueingStrategy);\n  }\n  #createStreamSink(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const self = this,\n      action = this.actionHandler[data.action];\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ENQUEUE,\n          streamId,\n          chunk\n        }, transfers);\n      },\n      close() {\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CLOSE,\n          streamId\n        });\n        delete self.streamSinks[streamId];\n      },\n      error(reason) {\n        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ERROR,\n          streamId,\n          reason: wrapReason(reason)\n        });\n      },\n      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null\n    };\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n    Promise.try(action, data.data, streamSink).then(function () {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        success: true\n      });\n    }, function (reason) {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        reason: wrapReason(reason)\n      });\n    });\n  }\n  #processStreamMessage(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const streamController = this.streamControllers[streamId],\n      streamSink = this.streamSinks[streamId];\n    switch (data.stream) {\n      case StreamKind.START_COMPLETE:\n        if (data.success) {\n          streamController.startCall.resolve();\n        } else {\n          streamController.startCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          streamController.pullCall.resolve();\n        } else {\n          streamController.pullCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL:\n        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n          break;\n        }\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        streamSink.desiredSize = data.desiredSize;\n        Promise.try(streamSink.onPull || onFn).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        break;\n      case StreamKind.ENQUEUE:\n        assert(streamController, \"enqueue should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(streamController, \"close should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.isClosed = true;\n        streamController.controller.close();\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(streamController, \"error should have stream controller\");\n        streamController.controller.error(wrapReason(data.reason));\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          streamController.cancelCall.resolve();\n        } else {\n          streamController.cancelCall.reject(wrapReason(data.reason));\n        }\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!streamSink) {\n          break;\n        }\n        const dataReason = wrapReason(data.reason);\n        Promise.try(streamSink.onCancel || onFn, dataReason).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        streamSink.sinkCapability.reject(dataReason);\n        streamSink.isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n  async #deleteStreamController(streamController, streamId) {\n    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);\n    delete this.streamControllers[streamId];\n  }\n  destroy() {\n    this.#messageAC?.abort();\n    this.#messageAC = null;\n  }\n}\n\n;// ./src/display/binary_data_factory.js\n\n\n\n\n\n\n\nclass BaseBinaryDataFactory {\n  #errorStr = Object.freeze({\n    cMapUrl: \"CMap\",\n    standardFontDataUrl: \"font\",\n    wasmUrl: \"wasm\"\n  });\n  constructor({\n    cMapUrl = null,\n    standardFontDataUrl = null,\n    wasmUrl = null\n  }) {\n    this.cMapUrl = cMapUrl;\n    this.standardFontDataUrl = standardFontDataUrl;\n    this.wasmUrl = wasmUrl;\n  }\n  async fetch({\n    kind,\n    filename\n  }) {\n    switch (kind) {\n      case \"cMapUrl\":\n      case \"standardFontDataUrl\":\n      case \"wasmUrl\":\n        break;\n      default:\n        unreachable(`Not implemented: ${kind}`);\n    }\n    const baseUrl = this[kind];\n    if (!baseUrl) {\n      throw new Error(`Ensure that the \\`${kind}\\` API parameter is provided.`);\n    }\n    const url = `${baseUrl}${filename}`;\n    return this._fetch(url, kind).catch(reason => {\n      throw new Error(`Unable to load ${this.#errorStr[kind]} data at: ${url}`);\n    });\n  }\n  async _fetch(url, kind) {\n    unreachable(\"Abstract method `_fetch` called.\");\n  }\n}\nclass DOMBinaryDataFactory extends BaseBinaryDataFactory {\n  async _fetch(url, kind) {\n    const type = kind === \"cMapUrl\" && !url.endsWith(\".bcmap\") ? \"text\" : \"bytes\";\n    const data = await fetchData(url, type);\n    return data instanceof Uint8Array ? data : stringToBytes(data);\n  }\n}\n\n;// ./src/display/canvas_factory.js\n\nclass BaseCanvasFactory {\n  #enableHWA = false;\n  constructor({\n    enableHWA = false\n  }) {\n    this.#enableHWA = enableHWA;\n  }\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._createCanvas(width, height);\n    return {\n      canvas,\n      context: canvas.getContext(\"2d\", {\n        willReadFrequently: !this.#enableHWA\n      })\n    };\n  }\n  reset({\n    canvas\n  }, width, height) {\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    canvas.width = width;\n    canvas.height = height;\n  }\n  destroy(canvasAndContext) {\n    const {\n      canvas\n    } = canvasAndContext;\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    canvas.width = canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({\n    ownerDocument = globalThis.document,\n    enableHWA = false\n  }) {\n    super({\n      enableHWA\n    });\n    this._document = ownerDocument;\n  }\n  _createCanvas(width, height) {\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n}\n\n;// ./src/display/filter_factory.js\n\n\n\n\n\n\nclass BaseFilterFactory {\n  addFilter(maps) {\n    return \"none\";\n  }\n  addHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n  addAlphaFilter(map) {\n    return \"none\";\n  }\n  addLuminosityFilter(map) {\n    return \"none\";\n  }\n  addKnockoutFilter(alpha = 0) {\n    return \"none\";\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    return \"none\";\n  }\n  addSelectionHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n  addSelectionFilter() {\n    return \"none\";\n  }\n  createSelectionStyle(pageColors = null) {\n    return null;\n  }\n  destroy(keepHCM = false) {}\n}\nclass DOMFilterFactory extends BaseFilterFactory {\n  #baseUrl;\n  #_cache;\n  #_defs;\n  #docId;\n  #document;\n  #_hcmCache;\n  #id = 0;\n  constructor({\n    docId,\n    ownerDocument = globalThis.document\n  }) {\n    super();\n    this.#docId = docId;\n    this.#document = ownerDocument;\n  }\n  get #cache() {\n    return this.#_cache ||= new Map();\n  }\n  get #hcmCache() {\n    return this.#_hcmCache ||= new Map();\n  }\n  get #defs() {\n    if (!this.#_defs) {\n      const div = this.#document.createElement(\"div\");\n      const {\n        style\n      } = div;\n      style.colorScheme = \"only light\";\n      style.visibility = \"hidden\";\n      style.contain = \"strict\";\n      style.width = style.height = 0;\n      style.position = \"absolute\";\n      style.top = style.left = 0;\n      style.zIndex = -1;\n      const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n      svg.setAttribute(\"width\", 0);\n      svg.setAttribute(\"height\", 0);\n      this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n      div.append(svg);\n      svg.append(this.#_defs);\n      this.#document.body.append(div);\n    }\n    return this.#_defs;\n  }\n  #createTables(maps) {\n    if (maps.length === 1) {\n      const mapR = maps[0];\n      const buffer = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        buffer[i] = mapR[i] / 255;\n      }\n      const table = buffer.join(\",\");\n      return [table, table, table];\n    }\n    const [mapR, mapG, mapB] = maps;\n    const bufferR = new Array(256);\n    const bufferG = new Array(256);\n    const bufferB = new Array(256);\n    for (let i = 0; i < 256; i++) {\n      bufferR[i] = mapR[i] / 255;\n      bufferG[i] = mapG[i] / 255;\n      bufferB[i] = mapB[i] / 255;\n    }\n    return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n  }\n  #createUrl(id) {\n    if (this.#baseUrl === undefined) {\n      this.#baseUrl = \"\";\n      const url = this.#document.URL;\n      if (url !== this.#document.baseURI) {\n        if (isDataScheme(url)) {\n          warn('#createUrl: ignore \"data:\"-URL for performance reasons.');\n        } else {\n          this.#baseUrl = updateUrlHash(url, \"\");\n        }\n      }\n    }\n    return `url(${this.#baseUrl}#${id})`;\n  }\n  addFilter(maps) {\n    if (!maps) {\n      return \"none\";\n    }\n    let value = this.#cache.get(maps);\n    if (value) {\n      return value;\n    }\n    const [tableR, tableG, tableB] = this.#createTables(maps);\n    const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(maps, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(maps, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n    return url;\n  }\n  addHCMFilter(fgColor, bgColor) {\n    const key = `${fgColor}-${bgColor}`;\n    const filterName = \"base\";\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const fgRGB = this.#getRGB(fgColor);\n    fgColor = Util.makeHexColor(...fgRGB);\n    const bgRGB = this.#getRGB(bgColor);\n    bgColor = Util.makeHexColor(...bgRGB);\n    this.#defs.style.color = \"\";\n    if (fgColor === \"#000000\" && bgColor === \"#ffffff\" || fgColor === bgColor) {\n      return info.url;\n    }\n    const map = new Array(256);\n    for (let i = 0; i <= 255; i++) {\n      const x = i / 255;\n      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n    }\n    const table = map.join(\",\");\n    const id = `g_${this.#docId}_hcm_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addTransferMapConversion(table, table, table, filter);\n    this.#addGrayConversion(filter);\n    const getSteps = (c, n) => {\n      const start = fgRGB[c] / 255;\n      const end = bgRGB[c] / 255;\n      const arr = new Array(n + 1);\n      for (let i = 0; i <= n; i++) {\n        arr[i] = start + i / n * (end - start);\n      }\n      return arr.join(\",\");\n    };\n    this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n  addSelectionHCMFilter(fgColor, bgColor) {\n    return this.addHighlightHCMFilter(\"selection\", fgColor, bgColor, \"HighlightText\", \"Highlight\");\n  }\n  addSelectionFilter() {\n    return this.addHighlightHCMFilter(\"selection_default\", \"black\", \"white\", \"HighlightText\", \"Highlight\");\n  }\n  createSelectionStyle(pageColors = null) {\n    const filter = pageColors ? this.addSelectionHCMFilter(pageColors.foreground, pageColors.background) : this.addSelectionFilter();\n    if (filter === \"none\" || !FeatureTest.platform.isFirefox) {\n      return null;\n    }\n    return {\n      \"backdrop-filter\": filter,\n      \"background-color\": \"transparent\"\n    };\n  }\n  addAlphaFilter(map) {\n    let value = this.#cache.get(map);\n    if (value) {\n      return value;\n    }\n    const [tableA] = this.#createTables([map]);\n    const key = `alpha_${tableA}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapAlphaConversion(tableA, filter);\n    return url;\n  }\n  addLuminosityFilter(map) {\n    let value = this.#cache.get(map || \"luminosity\");\n    if (value) {\n      return value;\n    }\n    let tableA, key;\n    if (map) {\n      [tableA] = this.#createTables([map]);\n      key = `luminosity_${tableA}`;\n    } else {\n      key = \"luminosity\";\n    }\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addLuminosityConversion(filter);\n    if (map) {\n      this.#addTransferMapAlphaConversion(tableA, filter);\n    }\n    return url;\n  }\n  addKnockoutFilter(alpha = 0) {\n    const slope = alpha > 0 ? Math.min(1 / alpha, 1e6) : 1e6;\n    const key = `knockout_${slope}`;\n    const value = this.#cache.get(key);\n    if (value) {\n      return value;\n    }\n    const id = `g_${this.#docId}_knockout_filter_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    const feFuncA = this.#document.createElementNS(SVG_NS, \"feFuncA\");\n    feFuncA.setAttribute(\"type\", \"linear\");\n    feFuncA.setAttribute(\"slope\", `${slope}`);\n    feFuncA.setAttribute(\"intercept\", \"0\");\n    feComponentTransfer.append(feFuncA);\n    return url;\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n    let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);\n    let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);\n    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getOpaqueTextColor.bind(this));\n    if (bgGray < fgGray) {\n      [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];\n    }\n    this.#defs.style.color = \"\";\n    const getSteps = (fg, bg, n) => {\n      const arr = new Array(256);\n      const step = (bgGray - fgGray) / n;\n      const newStart = fg / 255;\n      const newStep = (bg - fg) / (255 * n);\n      let prev = 0;\n      for (let i = 0; i <= n; i++) {\n        const k = Math.round(fgGray + i * step);\n        const value = newStart + i * newStep;\n        for (let j = prev; j <= k; j++) {\n          arr[j] = value;\n        }\n        prev = k + 1;\n      }\n      for (let i = prev; i < 256; i++) {\n        arr[i] = arr[prev - 1];\n      }\n      return arr.join(\",\");\n    };\n    const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addGrayConversion(filter);\n    this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n  destroy(keepHCM = false) {\n    if (keepHCM && this.#_hcmCache?.size) {\n      return;\n    }\n    this.#_defs?.parentNode.parentNode.remove();\n    this.#_defs = null;\n    this.#_cache?.clear();\n    this.#_cache = null;\n    this.#_hcmCache?.clear();\n    this.#_hcmCache = null;\n    this.#id = 0;\n  }\n  #addLuminosityConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\");\n    filter.append(feColorMatrix);\n  }\n  #addGrayConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\");\n    filter.append(feColorMatrix);\n  }\n  #createFilter(id) {\n    const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n    filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n    filter.setAttribute(\"id\", id);\n    this.#defs.append(filter);\n    return filter;\n  }\n  #appendFeFunc(feComponentTransfer, func, table) {\n    const feFunc = this.#document.createElementNS(SVG_NS, func);\n    feFunc.setAttribute(\"type\", \"discrete\");\n    feFunc.setAttribute(\"tableValues\", table);\n    feComponentTransfer.append(feFunc);\n  }\n  #addTransferMapConversion(rTable, gTable, bTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n  }\n  #addTransferMapAlphaConversion(aTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n  }\n  #getRGB(color) {\n    this.#defs.style.color = color;\n    return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n  }\n  #getRGBA(color) {\n    this.#defs.style.color = color;\n    return getRGBA(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n  }\n  #getOpaqueTextColor(color) {\n    const [r, g, b, alpha] = this.#getRGBA(color);\n    if (alpha === 1) {\n      return [r, g, b];\n    }\n    const [canvasR, canvasG, canvasB] = this.#getRGB(\"Canvas\");\n    return [blend(r, canvasR, alpha), blend(g, canvasG, alpha), blend(b, canvasB, alpha)];\n  }\n}\nfunction blend(fg, bg, alpha) {\n  return Math.round(alpha * fg + (1 - alpha) * bg);\n}\n\n;// ./src/display/node_utils.js\n\n\n\n\n\n\n\n\n\nif (isNodeJS) {\n  let canvas;\n  try {\n    const require = process.getBuiltinModule(\"module\").createRequire(import.meta.url);\n    try {\n      canvas = require(\"@napi-rs/canvas\");\n    } catch (ex) {\n      warn(`Cannot load \"@napi-rs/canvas\" package: \"${ex}\".`);\n    }\n  } catch (ex) {\n    warn(`Cannot access the \\`require\\` function: \"${ex}\".`);\n  }\n  if (!globalThis.DOMMatrix) {\n    if (canvas?.DOMMatrix) {\n      globalThis.DOMMatrix = canvas.DOMMatrix;\n    } else {\n      warn(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n    }\n  }\n  if (!globalThis.Path2D) {\n    if (canvas?.Path2D) {\n      globalThis.Path2D = canvas.Path2D;\n    } else {\n      warn(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n    }\n  }\n  if (!globalThis.navigator?.language) {\n    globalThis.navigator = {\n      language: \"en-US\",\n      platform: \"\",\n      userAgent: \"\"\n    };\n  }\n}\nasync function node_utils_fetchData(url) {\n  const fs = process.getBuiltinModule(\"fs/promises\");\n  const data = await fs.readFile(url);\n  return new Uint8Array(data);\n}\nclass NodeFilterFactory extends BaseFilterFactory {}\nclass NodeCanvasFactory extends BaseCanvasFactory {\n  _createCanvas(width, height) {\n    const require = process.getBuiltinModule(\"module\").createRequire(import.meta.url);\n    const canvas = require(\"@napi-rs/canvas\");\n    return canvas.createCanvas(width, height);\n  }\n}\nclass NodeBinaryDataFactory extends BaseBinaryDataFactory {\n  async _fetch(url, kind) {\n    return node_utils_fetchData(url);\n  }\n}\n\n;// ./src/shared/image_utils.js\n/* unused harmony import specifier */ var image_utils_ImageKind;\n/* unused harmony import specifier */ var image_utils_FeatureTest;\n\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case image_utils_ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case image_utils_ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n  return null;\n}\nfunction convertBlackAndWhiteToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  width,\n  height,\n  nonBlackColor = 0xffffffff,\n  inverseDecode = false\n}) {\n  const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];\n  const widthInSource = width >> 3;\n  const widthRemainder = width & 7;\n  const xorMask = zeroMapping ^ oneMapping;\n  const srcLength = src.length;\n  dest = new Uint32Array(dest.buffer);\n  let destPos = 0;\n  for (let i = 0; i < height; ++i) {\n    for (const max = srcPos + widthInSource; srcPos < max; ++srcPos, destPos += 8) {\n      const elem = src[srcPos];\n      dest[destPos] = zeroMapping ^ -(elem >> 7 & 1) & xorMask;\n      dest[destPos + 1] = zeroMapping ^ -(elem >> 6 & 1) & xorMask;\n      dest[destPos + 2] = zeroMapping ^ -(elem >> 5 & 1) & xorMask;\n      dest[destPos + 3] = zeroMapping ^ -(elem >> 4 & 1) & xorMask;\n      dest[destPos + 4] = zeroMapping ^ -(elem >> 3 & 1) & xorMask;\n      dest[destPos + 5] = zeroMapping ^ -(elem >> 2 & 1) & xorMask;\n      dest[destPos + 6] = zeroMapping ^ -(elem >> 1 & 1) & xorMask;\n      dest[destPos + 7] = zeroMapping ^ -(elem & 1) & xorMask;\n    }\n    if (widthRemainder === 0) {\n      continue;\n    }\n    const elem = srcPos < srcLength ? src[srcPos++] : 255;\n    for (let j = 0; j < widthRemainder; ++j, ++destPos) {\n      dest[destPos] = zeroMapping ^ -(elem >> 7 - j & 1) & xorMask;\n    }\n  }\n  return {\n    srcPos,\n    destPos\n  };\n}\nfunction convertRGBToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  destPos = 0,\n  width,\n  height\n}) {\n  let i = 0;\n  const len = width * height * 3;\n  const len32 = len >> 2;\n  const src32 = new Uint32Array(src.buffer, srcPos, len32);\n  const alphaMask = FeatureTest.isLittleEndian ? 0xff000000 : 0xff;\n  if (FeatureTest.isLittleEndian) {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i],\n        s2 = src32[i + 1],\n        s3 = src32[i + 2];\n      dest[destPos] = s1 | alphaMask;\n      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | alphaMask;\n      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | alphaMask;\n      dest[destPos + 3] = s3 >>> 8 | alphaMask;\n    }\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | alphaMask;\n    }\n  } else {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i],\n        s2 = src32[i + 1],\n        s3 = src32[i + 2];\n      dest[destPos] = s1 | alphaMask;\n      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | alphaMask;\n      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | alphaMask;\n      dest[destPos + 3] = s3 << 8 | alphaMask;\n    }\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | alphaMask;\n    }\n  }\n  return {\n    srcPos: srcPos + len,\n    destPos\n  };\n}\nfunction grayToRGBA(src, dest) {\n  if (image_utils_FeatureTest.isLittleEndian) {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x10101 | 0xff000000;\n    }\n  } else {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x1010100 | 0x000000ff;\n    }\n  }\n}\n\n;// ./src/display/webgpu.js\n\nconst MESH_WGSL = `\nstruct Uniforms {\n  offsetX      : f32,\n  offsetY      : f32,\n  scaleX       : f32,\n  scaleY       : f32,\n  paddedWidth  : f32,\n  paddedHeight : f32,\n  borderSize   : f32,\n  _pad         : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VertexInput {\n  @location(0) position : vec2<f32>,\n  @location(1) color    : vec4<f32>,\n};\n\nstruct VertexOutput {\n  @builtin(position) position : vec4<f32>,\n  @location(0)       color    : vec3<f32>,\n};\n\n@vertex\nfn vs_main(in : VertexInput) -> VertexOutput {\n  var out : VertexOutput;\n  let cx = (in.position.x + u.offsetX) * u.scaleX;\n  let cy = (in.position.y + u.offsetY) * u.scaleY;\n  out.position = vec4<f32>(\n    ((cx + u.borderSize) / u.paddedWidth) * 2.0 - 1.0,\n    1.0 - ((cy + u.borderSize) / u.paddedHeight) * 2.0,\n    0.0,\n    1.0\n  );\n  out.color = in.color.rgb;\n  return out;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n  return vec4<f32>(in.color, 1.0);\n}\n`;\nclass WebGPU {\n  #initPromise = null;\n  #device = null;\n  #meshPipeline = null;\n  #preferredFormat = null;\n  async #initGPU() {\n    if (!globalThis.navigator?.gpu) {\n      return false;\n    }\n    try {\n      const adapter = await navigator.gpu.requestAdapter();\n      if (!adapter) {\n        return false;\n      }\n      this.#preferredFormat = navigator.gpu.getPreferredCanvasFormat();\n      this.#device = await adapter.requestDevice();\n      return true;\n    } catch {\n      return false;\n    }\n  }\n  init() {\n    return this.#initPromise ||= this.#initGPU();\n  }\n  get isReady() {\n    return this.#device !== null;\n  }\n  loadMeshShader() {\n    if (!this.#device || this.#meshPipeline) {\n      return;\n    }\n    const shaderModule = this.#device.createShaderModule({\n      code: MESH_WGSL\n    });\n    this.#meshPipeline = this.#device.createRenderPipeline({\n      layout: \"auto\",\n      vertex: {\n        module: shaderModule,\n        entryPoint: \"vs_main\",\n        buffers: [{\n          arrayStride: 2 * 4,\n          attributes: [{\n            shaderLocation: 0,\n            offset: 0,\n            format: \"float32x2\"\n          }]\n        }, {\n          arrayStride: 4,\n          attributes: [{\n            shaderLocation: 1,\n            offset: 0,\n            format: \"unorm8x4\"\n          }]\n        }]\n      },\n      fragment: {\n        module: shaderModule,\n        entryPoint: \"fs_main\",\n        targets: [{\n          format: this.#preferredFormat\n        }]\n      },\n      primitive: {\n        topology: \"triangle-list\"\n      }\n    });\n  }\n  draw(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize) {\n    this.loadMeshShader();\n    const device = this.#device;\n    const {\n      offsetX,\n      offsetY,\n      scaleX,\n      scaleY\n    } = context;\n    const posBuffer = device.createBuffer({\n      size: Math.max(posData.byteLength, 4),\n      usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n    });\n    if (posData.byteLength > 0) {\n      device.queue.writeBuffer(posBuffer, 0, posData);\n    }\n    const colBuffer = device.createBuffer({\n      size: Math.max(colData.byteLength, 4),\n      usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n    });\n    if (colData.byteLength > 0) {\n      device.queue.writeBuffer(colBuffer, 0, colData);\n    }\n    const uniformBuffer = device.createBuffer({\n      size: 8 * 4,\n      usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n    });\n    device.queue.writeBuffer(uniformBuffer, 0, new Float32Array([offsetX, offsetY, scaleX, scaleY, paddedWidth, paddedHeight, borderSize, 0]));\n    const bindGroup = device.createBindGroup({\n      layout: this.#meshPipeline.getBindGroupLayout(0),\n      entries: [{\n        binding: 0,\n        resource: {\n          buffer: uniformBuffer\n        }\n      }]\n    });\n    const offscreen = new OffscreenCanvas(paddedWidth, paddedHeight);\n    const gpuCtx = offscreen.getContext(\"webgpu\");\n    gpuCtx.configure({\n      device,\n      format: this.#preferredFormat,\n      alphaMode: backgroundColor ? \"opaque\" : \"premultiplied\"\n    });\n    const clearValue = backgroundColor ? {\n      r: backgroundColor[0] / 255,\n      g: backgroundColor[1] / 255,\n      b: backgroundColor[2] / 255,\n      a: 1\n    } : {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 0\n    };\n    const commandEncoder = device.createCommandEncoder();\n    const renderPass = commandEncoder.beginRenderPass({\n      colorAttachments: [{\n        view: gpuCtx.getCurrentTexture().createView(),\n        clearValue,\n        loadOp: \"clear\",\n        storeOp: \"store\"\n      }]\n    });\n    if (vertexCount > 0) {\n      renderPass.setPipeline(this.#meshPipeline);\n      renderPass.setBindGroup(0, bindGroup);\n      renderPass.setVertexBuffer(0, posBuffer);\n      renderPass.setVertexBuffer(1, colBuffer);\n      renderPass.draw(vertexCount);\n    }\n    renderPass.end();\n    device.queue.submit([commandEncoder.finish()]);\n    posBuffer.destroy();\n    colBuffer.destroy();\n    uniformBuffer.destroy();\n    return offscreen.transferToImageBitmap();\n  }\n}\nconst _webGPU = new WebGPU();\nfunction initGPU() {\n  return _webGPU.init();\n}\nfunction isGPUReady() {\n  return _webGPU.isReady;\n}\nfunction loadMeshShader() {\n  _webGPU.loadMeshShader();\n}\nfunction drawMeshWithGPU(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize) {\n  return _webGPU.draw(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize);\n}\n\n;// ./src/display/pattern_helper.js\n\n\n\n\n\n\n\n\nconst PathType = {\n  FILL: \"Fill\",\n  STROKE: \"Stroke\",\n  SHADING: \"Shading\"\n};\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox) {\n    return;\n  }\n  const width = bbox[2] - bbox[0];\n  const height = bbox[3] - bbox[1];\n  const region = new Path2D();\n  region.rect(bbox[0], bbox[1], width, height);\n  ctx.clip(region);\n}\nclass BaseShadingPattern {\n  isModifyingCurrentTransform() {\n    return false;\n  }\n  getPattern() {\n    unreachable(\"Abstract method `getPattern` called.\");\n  }\n}\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._type = IR[1];\n    this._bbox = IR[2];\n    this._colorStops = IR[3];\n    this._p0 = IR[4];\n    this._p1 = IR[5];\n    this._r0 = IR[6];\n    this._r1 = IR[7];\n    this.matrix = null;\n  }\n  isOriginBased() {\n    return this._p0[0] === 0 && this._p0[1] === 0 && (!this.isRadial() || this._p1[0] === 0 && this._p1[1] === 0);\n  }\n  isRadial() {\n    return this._type === \"radial\";\n  }\n  areConic() {\n    if (!this.isRadial()) {\n      return false;\n    }\n    const dist = Math.hypot(this._p0[0] - this._p1[0], this._p0[1] - this._p1[1]);\n    return dist + this._r1 > this._r0 && dist + this._r0 > this._r1;\n  }\n  _createGradient(ctx, transform = null) {\n    let grad;\n    let firstPoint = this._p0;\n    let secondPoint = this._p1;\n    if (transform) {\n      firstPoint = firstPoint.slice();\n      secondPoint = secondPoint.slice();\n      Util.applyTransform(firstPoint, transform);\n      Util.applyTransform(secondPoint, transform);\n    }\n    if (this._type === \"axial\") {\n      grad = ctx.createLinearGradient(firstPoint[0], firstPoint[1], secondPoint[0], secondPoint[1]);\n    } else if (this._type === \"radial\") {\n      let r0 = this._r0;\n      let r1 = this._r1;\n      if (transform) {\n        const scale = new Float32Array(2);\n        Util.singularValueDecompose2dScale(transform, scale);\n        r0 *= scale[0];\n        r1 *= scale[0];\n      }\n      grad = ctx.createRadialGradient(firstPoint[0], firstPoint[1], r0, secondPoint[0], secondPoint[1], r1);\n    }\n    for (const colorStop of this._colorStops) {\n      grad.addColorStop(colorStop[0], colorStop[1]);\n    }\n    return grad;\n  }\n  _createReversedGradient(ctx, transform = null) {\n    let firstPoint = this._p1;\n    let secondPoint = this._p0;\n    if (transform) {\n      firstPoint = firstPoint.slice();\n      secondPoint = secondPoint.slice();\n      Util.applyTransform(firstPoint, transform);\n      Util.applyTransform(secondPoint, transform);\n    }\n    let r0 = this._r1;\n    let r1 = this._r0;\n    if (transform) {\n      const scale = new Float32Array(2);\n      Util.singularValueDecompose2dScale(transform, scale);\n      r0 *= scale[0];\n      r1 *= scale[0];\n    }\n    const grad = ctx.createRadialGradient(firstPoint[0], firstPoint[1], r0, secondPoint[0], secondPoint[1], r1);\n    const reversedStops = this._colorStops.map(([t, c]) => [1 - t, c]).reverse();\n    for (const [t, c] of reversedStops) {\n      grad.addColorStop(t, c);\n    }\n    return grad;\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    let pattern;\n    if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n      if (this.isOriginBased()) {\n        let transf = Util.transform(inverse, owner.baseTransform);\n        if (this.matrix) {\n          transf = Util.transform(transf, this.matrix);\n        }\n        const precision = 1e-3;\n        const n1 = Math.hypot(transf[0], transf[1]);\n        const n2 = Math.hypot(transf[2], transf[3]);\n        const ps = (transf[0] * transf[2] + transf[1] * transf[3]) / (n1 * n2);\n        if (Math.abs(ps) < precision) {\n          if (this.isRadial()) {\n            if (Math.abs(n1 - n2) < precision) {\n              return this._createGradient(ctx, transf);\n            }\n          } else {\n            return this._createGradient(ctx, transf);\n          }\n        }\n      }\n      const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0];\n      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n      const tmpCanvas = owner.canvasFactory.create(width, height);\n      const tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.beginPath();\n      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n      inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);\n      tmpCtx.transform(...owner.baseTransform);\n      if (this.matrix) {\n        tmpCtx.transform(...this.matrix);\n      }\n      applyBoundingBox(tmpCtx, this._bbox);\n      if (this.areConic()) {\n        tmpCtx.fillStyle = this._createReversedGradient(tmpCtx);\n        tmpCtx.fill();\n      }\n      tmpCtx.fillStyle = this._createGradient(tmpCtx);\n      tmpCtx.fill();\n      pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n      owner.canvasFactory.destroy(tmpCanvas);\n      const domMatrix = new DOMMatrix(inverse);\n      pattern.setTransform(domMatrix);\n    } else {\n      if (this.areConic()) {\n        ctx.save();\n        applyBoundingBox(ctx, this._bbox);\n        ctx.fillStyle = this._createReversedGradient(ctx);\n        ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n        ctx.restore();\n      }\n      applyBoundingBox(ctx, this._bbox);\n      pattern = this._createGradient(ctx);\n    }\n    return pattern;\n  }\n}\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n  const coords = context.coords,\n    colors = context.colors;\n  const bytes = data.data,\n    rowSize = data.width * 4;\n  let tmp;\n  if (coords[p1 * 2 + 1] > coords[p2 * 2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  if (coords[p2 * 2 + 1] > coords[p3 * 2 + 1]) {\n    tmp = p2;\n    p2 = p3;\n    p3 = tmp;\n    tmp = c2;\n    c2 = c3;\n    c3 = tmp;\n  }\n  if (coords[p1 * 2 + 1] > coords[p2 * 2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  const x1 = (coords[p1 * 2] + context.offsetX) * context.scaleX;\n  const y1 = (coords[p1 * 2 + 1] + context.offsetY) * context.scaleY;\n  const x2 = (coords[p2 * 2] + context.offsetX) * context.scaleX;\n  const y2 = (coords[p2 * 2 + 1] + context.offsetY) * context.scaleY;\n  const x3 = (coords[p3 * 2] + context.offsetX) * context.scaleX;\n  const y3 = (coords[p3 * 2 + 1] + context.offsetY) * context.scaleY;\n  if (y1 >= y3) {\n    return;\n  }\n  const c1r = colors[c1 * 4],\n    c1g = colors[c1 * 4 + 1],\n    c1b = colors[c1 * 4 + 2];\n  const c2r = colors[c2 * 4],\n    c2g = colors[c2 * 4 + 1],\n    c2b = colors[c2 * 4 + 2];\n  const c3r = colors[c3 * 4],\n    c3g = colors[c3 * 4 + 1],\n    c3b = colors[c3 * 4 + 2];\n  const minY = Math.round(y1),\n    maxY = Math.round(y3);\n  let xa, car, cag, cab;\n  let xb, cbr, cbg, cbb;\n  for (let y = minY; y <= maxY; y++) {\n    if (y < y2) {\n      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n      xa = x1 - (x1 - x2) * k;\n      car = c1r - (c1r - c2r) * k;\n      cag = c1g - (c1g - c2g) * k;\n      cab = c1b - (c1b - c2b) * k;\n    } else {\n      let k;\n      if (y > y3) {\n        k = 1;\n      } else if (y2 === y3) {\n        k = 0;\n      } else {\n        k = (y2 - y) / (y2 - y3);\n      }\n      xa = x2 - (x2 - x3) * k;\n      car = c2r - (c2r - c3r) * k;\n      cag = c2g - (c2g - c3g) * k;\n      cab = c2b - (c2b - c3b) * k;\n    }\n    let k;\n    if (y < y1) {\n      k = 0;\n    } else if (y > y3) {\n      k = 1;\n    } else {\n      k = (y1 - y) / (y1 - y3);\n    }\n    xb = x1 - (x1 - x3) * k;\n    cbr = c1r - (c1r - c3r) * k;\n    cbg = c1g - (c1g - c3g) * k;\n    cbb = c1b - (c1b - c3b) * k;\n    const x1_ = Math.round(Math.min(xa, xb));\n    const x2_ = Math.round(Math.max(xa, xb));\n    let j = rowSize * y + x1_ * 4;\n    for (let x = x1_; x <= x2_; x++) {\n      k = (xa - x) / (xa - xb);\n      if (k < 0) {\n        k = 0;\n      } else if (k > 1) {\n        k = 1;\n      }\n      bytes[j++] = car - (car - cbr) * k | 0;\n      bytes[j++] = cag - (cag - cbg) * k | 0;\n      bytes[j++] = cab - (cab - cbb) * k | 0;\n      bytes[j++] = 255;\n    }\n  }\n}\nclass MeshShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._posData = IR[2];\n    this._colData = IR[3];\n    this._vertexCount = IR[4];\n    this._bounds = IR[5];\n    this._bbox = IR[6];\n    this._background = IR[7];\n    this.matrix = null;\n    loadMeshShader();\n  }\n  _createMeshCanvas(combinedScale, backgroundColor, canvasFactory) {\n    const EXPECTED_SCALE = 1.1;\n    const MAX_PATTERN_SIZE = 3000;\n    const BORDER_SIZE = 2;\n    const offsetX = Math.floor(this._bounds[0]);\n    const offsetY = Math.floor(this._bounds[1]);\n    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE) || 1;\n    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE) || 1;\n    const scaleX = boundsWidth ? boundsWidth / width : 1;\n    const scaleY = boundsHeight ? boundsHeight / height : 1;\n    const context = {\n      coords: this._posData,\n      colors: this._colData,\n      offsetX: -offsetX,\n      offsetY: -offsetY,\n      scaleX: 1 / scaleX,\n      scaleY: 1 / scaleY\n    };\n    const paddedWidth = width + BORDER_SIZE * 2;\n    const paddedHeight = height + BORDER_SIZE * 2;\n    const tmpCanvas = canvasFactory.create(paddedWidth, paddedHeight);\n    if (isGPUReady() && this._vertexCount > 48) {\n      tmpCanvas.context.drawImage(drawMeshWithGPU(this._posData, this._colData, this._vertexCount, context, backgroundColor, paddedWidth, paddedHeight, BORDER_SIZE), 0, 0);\n    } else {\n      const data = tmpCanvas.context.createImageData(width, height);\n      if (backgroundColor) {\n        const bytes = data.data;\n        for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n          bytes[i] = backgroundColor[0];\n          bytes[i + 1] = backgroundColor[1];\n          bytes[i + 2] = backgroundColor[2];\n          bytes[i + 3] = 255;\n        }\n      }\n      for (let i = 0, ii = this._vertexCount; i < ii; i += 3) {\n        drawTriangle(data, context, i, i + 1, i + 2, i, i + 1, i + 2);\n      }\n      tmpCanvas.context.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n    }\n    return {\n      canvas: tmpCanvas.canvas,\n      offsetX: offsetX - BORDER_SIZE * scaleX,\n      offsetY: offsetY - BORDER_SIZE * scaleY,\n      scaleX,\n      scaleY\n    };\n  }\n  isModifyingCurrentTransform() {\n    return true;\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    applyBoundingBox(ctx, this._bbox);\n    const scale = new Float32Array(2);\n    if (pathType === PathType.SHADING) {\n      Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);\n    } else if (this.matrix) {\n      Util.singularValueDecompose2dScale(this.matrix, scale);\n      const [matrixScaleX, matrixScaleY] = scale;\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n      scale[0] *= matrixScaleX;\n      scale[1] *= matrixScaleY;\n    } else {\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n    }\n    const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.canvasFactory);\n    if (pathType !== PathType.SHADING) {\n      ctx.setTransform(...owner.baseTransform);\n      if (this.matrix) {\n        ctx.transform(...this.matrix);\n      }\n    }\n    ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n    owner.canvasFactory.destroy(temporaryPatternCanvas);\n    return pattern;\n  }\n}\nclass DummyShadingPattern extends BaseShadingPattern {\n  getPattern() {\n    return \"hotpink\";\n  }\n}\nfunction getShadingPattern(IR) {\n  switch (IR[0]) {\n    case \"RadialAxial\":\n      return new RadialAxialShadingPattern(IR);\n    case \"Mesh\":\n      return new MeshShadingPattern(IR);\n    case \"Dummy\":\n      return new DummyShadingPattern();\n  }\n  throw new Error(`Unknown IR type: ${IR[0]}`);\n}\nconst PaintType = {\n  COLORED: 1,\n  UNCOLORED: 2\n};\nclass TilingPattern {\n  static MAX_PATTERN_SIZE = 3000;\n  constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {\n    this.color = IR[1];\n    this.operatorList = IR[2];\n    this.matrix = IR[3];\n    this.bbox = IR[4];\n    this.xstep = IR[5];\n    this.ystep = IR[6];\n    this.paintType = IR[7];\n    this.tilingType = IR[8];\n    this.needsIsolation = IR[9] ?? true;\n    this.ctx = ctx;\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\n    this.baseTransform = baseTransform;\n    this.patternBaseMatrix = this.matrix ? Util.transform(baseTransform, this.matrix) : baseTransform;\n  }\n  canSkipPatternCanvas([width, height, offsetX, offsetY]) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const absXStep = Math.abs(this.xstep);\n    const absYStep = Math.abs(this.ystep);\n    if (width > absXStep + 1e-6 || height > absYStep + 1e-6) {\n      return null;\n    }\n    const nXFirst = Math.floor((offsetX - x1) / absXStep) + 1;\n    const nXLast = Math.ceil((offsetX + width - x0) / absXStep) - 1;\n    const nYFirst = Math.floor((offsetY - y1) / absYStep) + 1;\n    const nYLast = Math.ceil((offsetY + height - y0) / absYStep) - 1;\n    return nXLast <= nXFirst && nYLast <= nYFirst ? [nXFirst, nYFirst] : null;\n  }\n  updatePatternDims(clippedBBox, dims) {\n    const inv = Util.inverseTransform(this.patternBaseMatrix);\n    const c1 = [clippedBBox[0], clippedBBox[1]];\n    const c2 = [clippedBBox[2], clippedBBox[3]];\n    Util.applyTransform(c1, inv);\n    Util.applyTransform(c2, inv);\n    dims[0] = Math.abs(c2[0] - c1[0]);\n    dims[1] = Math.abs(c2[1] - c1[1]);\n    dims[2] = Math.min(c1[0], c2[0]);\n    dims[3] = Math.min(c1[1], c2[1]);\n  }\n  _renderTileCanvas(owner, opIdx, dimx, dimy) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const tmpCanvas = owner.canvasFactory.create(dimx.size, dimy.size);\n    const tmpCtx = tmpCanvas.context;\n    const graphics = this.canvasGraphicsFactory.createCanvasGraphics(tmpCtx, opIdx);\n    graphics.groupLevel = owner.groupLevel;\n    this.setFillAndStrokeStyleToContext(graphics, this.paintType, this.color);\n    tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);\n    graphics.transform(0, dimx.scale, 0, 0, dimy.scale, 0, 0);\n    tmpCtx.save();\n    graphics.dependencyTracker?.save();\n    this.clipBbox(graphics, x0, y0, x1, y1);\n    graphics.baseTransform = getCurrentTransform(graphics.ctx);\n    graphics.executeOperatorList(this.operatorList);\n    graphics.endDrawing();\n    graphics.dependencyTracker?.restore();\n    tmpCtx.restore();\n    return tmpCanvas;\n  }\n  _getCombinedScales() {\n    const scale = new Float32Array(2);\n    Util.singularValueDecompose2dScale(this.matrix, scale);\n    const [matrixScaleX, matrixScaleY] = scale;\n    Util.singularValueDecompose2dScale(this.baseTransform, scale);\n    return [matrixScaleX * scale[0], matrixScaleY * scale[1]];\n  }\n  drawPattern(owner, path, useEOFill = false, [n, m], opIdx) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const dependencyTracker = owner.dependencyTracker;\n    if (dependencyTracker) {\n      owner.dependencyTracker = new CanvasNestedDependencyTracker(dependencyTracker, opIdx);\n    }\n    owner.save();\n    if (useEOFill) {\n      owner.ctx.clip(path, \"evenodd\");\n    } else {\n      owner.ctx.clip(path);\n    }\n    owner.ctx.setTransform(...this.patternBaseMatrix);\n    owner.ctx.translate(n * this.xstep, m * this.ystep);\n    if (this.needsIsolation || owner.ctx.globalAlpha !== 1 || owner.ctx.globalCompositeOperation !== \"source-over\" || owner.inSMaskMode) {\n      const bboxWidth = x1 - x0;\n      const bboxHeight = y1 - y0;\n      const [combinedScaleX, combinedScaleY] = this._getCombinedScales();\n      const dimx = this.getSizeAndScale(bboxWidth, this.ctx.canvas.width, combinedScaleX);\n      const dimy = this.getSizeAndScale(bboxHeight, this.ctx.canvas.height, combinedScaleY);\n      const tmpCanvas = this._renderTileCanvas(owner, opIdx, dimx, dimy);\n      owner.ctx.drawImage(tmpCanvas.canvas, x0, y0, bboxWidth, bboxHeight);\n      owner.canvasFactory.destroy(tmpCanvas);\n    } else {\n      this.setFillAndStrokeStyleToContext(owner, this.paintType, this.color);\n      this.clipBbox(owner, x0, y0, x1, y1);\n      owner.baseTransformStack.push(owner.baseTransform);\n      owner.baseTransform = getCurrentTransform(owner.ctx);\n      owner.executeOperatorList(this.operatorList);\n      owner.baseTransform = owner.baseTransformStack.pop();\n    }\n    owner.restore();\n    if (dependencyTracker) {\n      owner.dependencyTracker = dependencyTracker;\n    }\n  }\n  createPatternCanvas(owner, opIdx) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const width = x1 - x0;\n    const height = y1 - y0;\n    let {\n      xstep,\n      ystep\n    } = this;\n    xstep = Math.abs(xstep);\n    ystep = Math.abs(ystep);\n    info(\"TilingType: \" + this.tilingType);\n    const [combinedScaleX, combinedScaleY] = this._getCombinedScales();\n    let canvasWidth = width,\n      canvasHeight = height,\n      redrawHorizontally = false,\n      redrawVertically = false;\n    if (Math.ceil(xstep * combinedScaleX) >= Math.ceil(width * combinedScaleX)) {\n      canvasWidth = xstep;\n    } else {\n      redrawHorizontally = true;\n    }\n    if (Math.ceil(ystep * combinedScaleY) >= Math.ceil(height * combinedScaleY)) {\n      canvasHeight = ystep;\n    } else {\n      redrawVertically = true;\n    }\n    const dimx = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);\n    const dimy = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);\n    const tmpCanvas = this._renderTileCanvas(owner, opIdx, dimx, dimy);\n    if (redrawHorizontally || redrawVertically) {\n      const image = tmpCanvas.canvas;\n      if (redrawHorizontally) {\n        canvasWidth = xstep;\n      }\n      if (redrawVertically) {\n        canvasHeight = ystep;\n      }\n      const dimx2 = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);\n      const dimy2 = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);\n      const xSize = dimx2.size;\n      const ySize = dimy2.size;\n      const tmpCanvas2 = owner.canvasFactory.create(xSize, ySize);\n      const tmpCtx2 = tmpCanvas2.context;\n      const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;\n      const jj = redrawVertically ? Math.floor(height / ystep) : 0;\n      for (let i = 0; i <= ii; i++) {\n        for (let j = 0; j <= jj; j++) {\n          tmpCtx2.drawImage(image, xSize * i, ySize * j, xSize, ySize, 0, 0, xSize, ySize);\n        }\n      }\n      owner.canvasFactory.destroy(tmpCanvas);\n      return {\n        canvas: tmpCanvas2.canvas,\n        canvasEntry: tmpCanvas2,\n        scaleX: dimx2.scale,\n        scaleY: dimy2.scale,\n        offsetX: x0,\n        offsetY: y0\n      };\n    }\n    return {\n      canvas: tmpCanvas.canvas,\n      canvasEntry: tmpCanvas,\n      scaleX: dimx.scale,\n      scaleY: dimy.scale,\n      offsetX: x0,\n      offsetY: y0\n    };\n  }\n  getSizeAndScale(step, realOutputSize, scale) {\n    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n    let size = Math.ceil(step * scale);\n    if (size >= maxSize) {\n      size = maxSize;\n    } else {\n      scale = size / step;\n    }\n    return {\n      scale,\n      size\n    };\n  }\n  clipBbox(graphics, x0, y0, x1, y1) {\n    const bboxWidth = x1 - x0;\n    const bboxHeight = y1 - y0;\n    const clip = new Path2D();\n    clip.rect(x0, y0, bboxWidth, bboxHeight);\n    Util.axialAlignedBoundingBox([x0, y0, x1, y1], getCurrentTransform(graphics.ctx), graphics.current.minMax);\n    graphics.ctx.clip(clip);\n    graphics.current.updateClipFromPath();\n  }\n  setFillAndStrokeStyleToContext(graphics, paintType, color) {\n    const context = graphics.ctx,\n      current = graphics.current;\n    current.patternFill = current.patternStroke = false;\n    switch (paintType) {\n      case PaintType.COLORED:\n        const {\n          fillStyle,\n          strokeStyle\n        } = this.ctx;\n        context.fillStyle = current.fillColor = fillStyle;\n        context.strokeStyle = current.strokeColor = strokeStyle;\n        break;\n      case PaintType.UNCOLORED:\n        context.fillStyle = context.strokeStyle = color;\n        current.fillColor = current.strokeColor = color;\n        break;\n      default:\n        throw new FormatError(`Unsupported paint type: ${paintType}`);\n    }\n  }\n  isModifyingCurrentTransform() {\n    return false;\n  }\n  getPattern(ctx, owner, inverse, pathType, opIdx) {\n    const matrix = pathType !== PathType.SHADING ? Util.transform(inverse, this.patternBaseMatrix) : inverse;\n    const temporaryPatternCanvas = this.createPatternCanvas(owner, opIdx);\n    let domMatrix = new DOMMatrix(matrix);\n    domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n    owner.canvasFactory.destroy(temporaryPatternCanvas.canvasEntry);\n    pattern.setTransform(domMatrix);\n    return pattern;\n  }\n}\n\n;// ./src/display/canvas.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MIN_FONT_SIZE = 16;\nconst MAX_FONT_SIZE = 100;\nconst EXECUTION_TIME = 15;\nconst EXECUTION_STEPS = 10;\nconst FULL_CHUNK_HEIGHT = 16;\nconst SCALE_MATRIX = new DOMMatrix();\nconst XY = new Float32Array(2);\nfunction mirrorContextOperations(ctx, destCtx) {\n  if (ctx._removeMirroring) {\n    throw new Error(\"Context is already forwarding operations.\");\n  }\n  const originalMethods = new Map();\n  for (const name of [\"save\", \"restore\", \"rotate\", \"scale\", \"translate\", \"transform\", \"setTransform\", \"resetTransform\", \"clip\", \"moveTo\", \"lineTo\", \"bezierCurveTo\", \"quadraticCurveTo\", \"arc\", \"arcTo\", \"ellipse\", \"rect\", \"roundRect\", \"closePath\", \"beginPath\"]) {\n    const original = ctx[name];\n    if (typeof original !== \"function\" || typeof destCtx[name] !== \"function\") {\n      continue;\n    }\n    originalMethods.set(name, original);\n    ctx[name] = function (...args) {\n      destCtx[name](...args);\n      return original.apply(this, args);\n    };\n  }\n  ctx._removeMirroring = () => {\n    for (const [name, original] of originalMethods) {\n      ctx[name] = original;\n    }\n    delete ctx._removeMirroring;\n  };\n}\nfunction drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {\n  const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n  if (b === 0 && c === 0) {\n    const tlX = destX * a + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destY * d + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destX + destW) * a + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destY + destH) * d + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rWidth, rHeight];\n  }\n  if (a === 0 && d === 0) {\n    const tlX = destY * c + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destX * b + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destY + destH) * c + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destX + destW) * b + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rHeight, rWidth];\n  }\n  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n  const scaleX = Math.hypot(a, b);\n  const scaleY = Math.hypot(c, d);\n  return [scaleX * destW, scaleY * destH];\n}\nclass CanvasExtraState {\n  alphaIsShape = false;\n  fontSize = 0;\n  fontSizeScale = 1;\n  textMatrix = null;\n  textMatrixScale = 1;\n  fontMatrix = FONT_IDENTITY_MATRIX;\n  leading = 0;\n  x = 0;\n  y = 0;\n  lineX = 0;\n  lineY = 0;\n  charSpacing = 0;\n  wordSpacing = 0;\n  textHScale = 1;\n  textRenderingMode = TextRenderingMode.FILL;\n  textRise = 0;\n  fillColor = \"#000000\";\n  strokeColor = \"#000000\";\n  tilingPatternDims = null;\n  patternFill = false;\n  patternStroke = false;\n  fillAlpha = 1;\n  strokeAlpha = 1;\n  lineWidth = 1;\n  activeSMask = null;\n  transferMaps = \"none\";\n  minMax = F32_BBOX_INIT.slice();\n  constructor(width, height) {\n    this.clipBox = new Float32Array([0, 0, width, height]);\n  }\n  clone() {\n    const clone = Object.create(this);\n    clone.clipBox = this.clipBox.slice();\n    clone.minMax = this.minMax.slice();\n    clone.tilingPatternDims = this.tilingPatternDims?.slice();\n    return clone;\n  }\n  getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    const box = this.minMax.slice();\n    if (pathType === PathType.STROKE) {\n      if (!transform) {\n        unreachable(\"Stroke bounding box must include transform.\");\n      }\n      Util.singularValueDecompose2dScale(transform, XY);\n      const xStrokePad = XY[0] * this.lineWidth / 2;\n      const yStrokePad = XY[1] * this.lineWidth / 2;\n      box[0] -= xStrokePad;\n      box[1] -= yStrokePad;\n      box[2] += xStrokePad;\n      box[3] += yStrokePad;\n    }\n    return box;\n  }\n  updateClipFromPath() {\n    const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n  }\n  isEmptyClip() {\n    return this.minMax[0] === Infinity;\n  }\n  startNewPathAndClipBox(box) {\n    this.clipBox.set(box, 0);\n    this.minMax.set(F32_BBOX_INIT, 0);\n  }\n  getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));\n  }\n}\nfunction putBinaryImageData(ctx, imgData) {\n  const {\n    width,\n    height,\n    kind\n  } = imgData;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  let i;\n  if (kind === ImageKind.GRAYSCALE_1BPP) {\n    for (i = 0; i < totalChunks; i++) {\n      ({\n        srcPos\n      } = convertBlackAndWhiteToRGBA({\n        src,\n        srcPos,\n        dest,\n        width,\n        height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight\n      }));\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else if (kind === ImageKind.RGBA_32BPP) {\n    let j = 0;\n    let elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n    for (i = 0; i < fullChunks; i++) {\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      srcPos += elemsInThisChunk;\n      ctx.putImageData(chunkImgData, 0, j);\n      j += FULL_CHUNK_HEIGHT;\n    }\n    if (i < totalChunks) {\n      elemsInThisChunk = width * partialChunkHeight * 4;\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      ctx.putImageData(chunkImgData, 0, j);\n    }\n  } else if (kind === ImageKind.RGB_24BPP) {\n    for (i = 0; i < totalChunks; i++) {\n      ({\n        srcPos\n      } = convertRGBToRGBA({\n        src,\n        srcPos,\n        dest: new Uint32Array(dest.buffer),\n        width,\n        height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight\n      }));\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else {\n    throw new Error(`bad image kind: ${kind}`);\n  }\n}\nfunction putBinaryImageMask(ctx, imgData) {\n  if (imgData.bitmap) {\n    ctx.drawImage(imgData.bitmap, 0, 0);\n    return;\n  }\n  const {\n    width,\n    height\n  } = imgData;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  for (let i = 0; i < totalChunks; i++) {\n    ({\n      srcPos\n    } = convertBlackAndWhiteToRGBA({\n      src,\n      srcPos,\n      dest,\n      width,\n      height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight,\n      nonBlackColor: 0\n    }));\n    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n  }\n}\nfunction copyCtxState(sourceCtx, destCtx) {\n  const properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\", \"filter\"];\n  for (const property of properties) {\n    if (sourceCtx[property] !== undefined) {\n      destCtx[property] = sourceCtx[property];\n    }\n  }\n  if (sourceCtx.setLineDash !== undefined) {\n    destCtx.setLineDash(sourceCtx.getLineDash());\n    destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n  }\n}\nfunction resetCtxToDefault(ctx) {\n  ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n  ctx.fillRule = \"nonzero\";\n  ctx.globalAlpha = 1;\n  ctx.lineWidth = 1;\n  ctx.lineCap = \"butt\";\n  ctx.lineJoin = \"miter\";\n  ctx.miterLimit = 10;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.font = \"10px sans-serif\";\n  if (ctx.setLineDash !== undefined) {\n    ctx.setLineDash([]);\n    ctx.lineDashOffset = 0;\n  }\n  const {\n    filter\n  } = ctx;\n  if (filter !== \"none\" && filter !== \"\") {\n    ctx.filter = \"none\";\n  }\n}\nfunction getImageSmoothingEnabled(transform, interpolate) {\n  if (interpolate) {\n    return true;\n  }\n  Util.singularValueDecompose2dScale(transform, XY);\n  const actualScale = Math.fround(OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS);\n  return XY[0] <= actualScale && XY[1] <= actualScale;\n}\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\nclass CanvasGraphics {\n  #knockoutGroupLevel = 0;\n  #knockoutElementDepth = 0;\n  #knockoutTempCanvasEntry = null;\n  #knockoutSavedCtx = null;\n  #knockoutSavedSMaskCtx = null;\n  #knockoutSavedGCO = null;\n  #knockoutElementAlpha = 1;\n  #knockoutFilterCache;\n  #knockoutElementGroupMeta = null;\n  #groupStackMeta = [];\n  constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {\n    optionalContentConfig,\n    markedContentStack = null\n  }, annotationCanvasMap, pageColors, dependencyTracker, imagesTracker) {\n    this.ctx = canvasCtx;\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.stateStack = [];\n    this.pendingClip = null;\n    this.pendingEOFill = false;\n    this.commonObjs = commonObjs;\n    this.objs = objs;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this.groupStack = [];\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.tempSMask = null;\n    this.smaskGroupCanvases = [];\n    this.smaskPreparedEntry = null;\n    this.smaskPreparedFor = null;\n    this.smaskPreparedOffsetX = 0;\n    this.smaskPreparedOffsetY = 0;\n    this.smaskPreparedOOBAlpha = null;\n    this.suspendedCtx = null;\n    this.contentVisible = true;\n    this.markedContentStack = markedContentStack || [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedPatterns = new Map();\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.viewportScale = 1;\n    this.outputScaleX = 1;\n    this.outputScaleY = 1;\n    this.pageColors = pageColors;\n    this._cachedScaleForStroking = [-1, 0];\n    this._cachedGetSinglePixelWidth = null;\n    this._cachedBitmapsMap = new Map();\n    this.dependencyTracker = dependencyTracker ?? null;\n    this.imagesTracker = imagesTracker ?? null;\n  }\n  getObject(opIdx, data, fallback = null) {\n    if (typeof data === \"string\") {\n      this.dependencyTracker?.recordNamedDependency(opIdx, data);\n      return data.startsWith(\"g_\") ? this.commonObjs.get(data) : this.objs.get(data);\n    }\n    return fallback;\n  }\n  beginDrawing({\n    transform,\n    viewport,\n    transparency = false,\n    background = null\n  }) {\n    const width = this.ctx.canvas.width;\n    const height = this.ctx.canvas.height;\n    const savedFillStyle = this.ctx.fillStyle;\n    this.ctx.fillStyle = background || \"#ffffff\";\n    this.ctx.fillRect(0, 0, width, height);\n    this.ctx.fillStyle = savedFillStyle;\n    if (transparency) {\n      const transparentCanvas = this.transparentCanvasEntry = this.canvasFactory.create(width, height);\n      this.compositeCtx = this.ctx;\n      ({\n        canvas: this.transparentCanvas,\n        context: this.ctx\n      } = transparentCanvas);\n      this.ctx.save();\n      this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n    }\n    this.ctx.save();\n    resetCtxToDefault(this.ctx);\n    if (transform) {\n      this.ctx.transform(...transform);\n      this.outputScaleX = transform[0];\n      this.outputScaleY = transform[3];\n    }\n    this.ctx.transform(...viewport.transform);\n    this.viewportScale = viewport.scale;\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n  executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper, operationsFilter) {\n    const argsArray = operatorList.argsArray;\n    const fnArray = operatorList.fnArray;\n    let i = executionStartIdx || 0;\n    const argsArrayLen = argsArray.length;\n    if (argsArrayLen === i) {\n      return i;\n    }\n    const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\n    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n    let steps = 0;\n    const commonObjs = this.commonObjs;\n    const objs = this.objs;\n    let fnId, fnArgs;\n    while (true) {\n      if (stepper !== undefined) {\n        if (i === stepper.nextBreakPoint) {\n          stepper.breakIt(i, continueCallback);\n          return i;\n        }\n        if (stepper.shouldSkip(i)) {\n          if (++i === argsArrayLen) {\n            return i;\n          }\n          continue;\n        }\n      }\n      if (!operationsFilter || operationsFilter(i)) {\n        fnId = fnArray[i];\n        fnArgs = argsArray[i] ?? null;\n        if (fnId !== OPS.dependency) {\n          if (fnArgs === null) {\n            this[fnId](i);\n          } else {\n            this[fnId](i, ...fnArgs);\n          }\n        } else {\n          for (const depObjId of fnArgs) {\n            this.dependencyTracker?.recordNamedData(depObjId, i);\n            const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n            if (!objsPool.has(depObjId)) {\n              objsPool.get(depObjId, continueCallback);\n              return i;\n            }\n          }\n        }\n      }\n      i++;\n      if (i === argsArrayLen) {\n        return i;\n      }\n      if (chunkOperations && ++steps > EXECUTION_STEPS) {\n        if (Date.now() > endTime) {\n          continueCallback();\n          return i;\n        }\n        steps = 0;\n      }\n    }\n  }\n  #restoreInitialState() {\n    while (this.stateStack.length || this.inSMaskMode) {\n      this.restore();\n    }\n    this.current.activeSMask = null;\n    this.ctx.restore();\n    if (this.transparentCanvas) {\n      this.ctx = this.compositeCtx;\n      this.ctx.save();\n      this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n      this.ctx.drawImage(this.transparentCanvas, 0, 0);\n      this.ctx.restore();\n      this.canvasFactory.destroy(this.transparentCanvasEntry);\n      this.transparentCanvas = null;\n      this.transparentCanvasEntry = null;\n    }\n  }\n  endDrawing() {\n    this.#restoreInitialState();\n    for (const canvas of this.smaskGroupCanvases) {\n      this.canvasFactory.destroy(canvas);\n    }\n    this.smaskGroupCanvases.length = 0;\n    this._clearPreparedSMask();\n    this.tempSMask = null;\n    this.smaskStack.length = 0;\n    for (const meta of this.#groupStackMeta) {\n      this.#destroyKnockoutPools(meta);\n    }\n    this.#groupStackMeta.length = 0;\n    this.#knockoutTempCanvasEntry = null;\n    this.#knockoutSavedCtx = null;\n    this.#knockoutSavedSMaskCtx = null;\n    this.#knockoutSavedGCO = null;\n    this.#knockoutElementAlpha = 1;\n    this.#knockoutElementGroupMeta = null;\n    this.#knockoutElementDepth = 0;\n    this.#knockoutGroupLevel = 0;\n    this.cachedPatterns.clear();\n    for (const cache of this._cachedBitmapsMap.values()) {\n      for (const canvas of cache.values()) {\n        if (typeof HTMLCanvasElement !== \"undefined\" && canvas instanceof HTMLCanvasElement) {\n          canvas.width = canvas.height = 0;\n        }\n      }\n      cache.clear();\n    }\n    this._cachedBitmapsMap.clear();\n    this.#drawFilter();\n  }\n  #drawFilter() {\n    if (this.pageColors) {\n      const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);\n      if (hcmFilterId !== \"none\") {\n        const savedFilter = this.ctx.filter;\n        this.ctx.filter = hcmFilterId;\n        this.ctx.drawImage(this.ctx.canvas, 0, 0);\n        this.ctx.filter = savedFilter;\n      }\n    }\n  }\n  _scaleImage(img, inverseTransform) {\n    const width = img.width ?? img.displayWidth;\n    const height = img.height ?? img.displayHeight;\n    const widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);\n    const heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);\n    const scaleSteps = [];\n    let ws = widthScale,\n      hs = heightScale,\n      pw = width,\n      ph = height;\n    while (ws > 2 && pw > 1 || hs > 2 && ph > 1) {\n      let nw = pw,\n        nh = ph;\n      if (ws > 2 && pw > 1) {\n        nw = Math.ceil(pw / 2);\n        ws /= pw / nw;\n      }\n      if (hs > 2 && ph > 1) {\n        nh = Math.ceil(ph / 2);\n        hs /= ph / nh;\n      }\n      scaleSteps.push({\n        newWidth: nw,\n        newHeight: nh\n      });\n      pw = nw;\n      ph = nh;\n    }\n    if (scaleSteps.length === 0) {\n      return {\n        img,\n        paintWidth: width,\n        paintHeight: height,\n        tmpCanvas: null\n      };\n    }\n    if (scaleSteps.length === 1) {\n      const {\n        newWidth,\n        newHeight\n      } = scaleSteps[0];\n      const tmpCanvas = this.canvasFactory.create(newWidth, newHeight);\n      tmpCanvas.context.drawImage(img, 0, 0, width, height, 0, 0, newWidth, newHeight);\n      return {\n        img: tmpCanvas.canvas,\n        paintWidth: newWidth,\n        paintHeight: newHeight,\n        tmpCanvas\n      };\n    }\n    let readEntry = this.canvasFactory.create(1, 1);\n    let writeEntry = this.canvasFactory.create(1, 1);\n    let paintWidth = width,\n      paintHeight = height;\n    let source = img;\n    for (const {\n      newWidth,\n      newHeight\n    } of scaleSteps) {\n      this.canvasFactory.reset(writeEntry, newWidth, newHeight);\n      writeEntry.context.drawImage(source, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\n      [readEntry, writeEntry] = [writeEntry, readEntry];\n      source = readEntry.canvas;\n      paintWidth = newWidth;\n      paintHeight = newHeight;\n    }\n    this.canvasFactory.destroy(writeEntry);\n    return {\n      img: readEntry.canvas,\n      paintWidth,\n      paintHeight,\n      tmpCanvas: readEntry\n    };\n  }\n  _createMaskCanvas(opIdx, img) {\n    const ctx = this.ctx;\n    const {\n      width,\n      height\n    } = img;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    const currentTransform = getCurrentTransform(ctx);\n    let cache, cacheKey, scaled, maskCanvas;\n    if ((img.bitmap || img.data) && img.count > 1) {\n      const mainKey = img.bitmap || img.data.buffer;\n      cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);\n      cache = this._cachedBitmapsMap.getOrInsertComputed(mainKey, makeMap);\n      const cachedImage = cache.get(cacheKey);\n      if (cachedImage && !isPatternFill) {\n        const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);\n        const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);\n        this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill);\n        return {\n          canvas: cachedImage,\n          offsetX,\n          offsetY\n        };\n      }\n      scaled = cachedImage;\n    }\n    if (!scaled) {\n      maskCanvas = this.canvasFactory.create(width, height);\n      putBinaryImageMask(maskCanvas.context, img);\n    }\n    let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);\n    maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n    const minMax = F32_BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);\n    const [minX, minY, maxX, maxY] = minMax;\n    const drawnWidth = Math.round(maxX - minX) || 1;\n    const drawnHeight = Math.round(maxY - minY) || 1;\n    const fillCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    const fillCtx = fillCanvas.context;\n    const offsetX = minX;\n    const offsetY = minY;\n    fillCtx.translate(-offsetX, -offsetY);\n    fillCtx.transform(...maskToCanvas);\n    let scaledEntry = null;\n    if (!scaled) {\n      const scaleResult = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx));\n      scaled = scaleResult.img;\n      scaledEntry = scaleResult.tmpCanvas;\n      if (scaled !== maskCanvas.canvas) {\n        this.canvasFactory.destroy(maskCanvas);\n        maskCanvas = null;\n      }\n      if (cache && isPatternFill) {\n        cache.set(cacheKey, scaled);\n        scaledEntry = null;\n        maskCanvas = null;\n      }\n    }\n    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate);\n    drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);\n    if (scaledEntry) {\n      this.canvasFactory.destroy(scaledEntry);\n    }\n    if (maskCanvas) {\n      this.canvasFactory.destroy(maskCanvas);\n    }\n    fillCtx.globalCompositeOperation = \"source-in\";\n    const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);\n    fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL, opIdx) : fillColor;\n    fillCtx.fillRect(0, 0, width, height);\n    if (cache && !isPatternFill) {\n      cache.set(cacheKey, fillCanvas.canvas);\n    }\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill);\n    return {\n      canvas: fillCanvas.canvas,\n      canvasEntry: cache && !isPatternFill ? null : fillCanvas,\n      offsetX: Math.round(offsetX),\n      offsetY: Math.round(offsetY)\n    };\n  }\n  setLineWidth(opIdx, width) {\n    this.dependencyTracker?.recordSimpleData(\"lineWidth\", opIdx);\n    if (width !== this.current.lineWidth) {\n      this._cachedScaleForStroking[0] = -1;\n    }\n    this.current.lineWidth = width;\n    this.ctx.lineWidth = width;\n  }\n  setLineCap(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineCap\", opIdx);\n    this.ctx.lineCap = LINE_CAP_STYLES[style];\n  }\n  setLineJoin(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineJoin\", opIdx);\n    this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n  }\n  setMiterLimit(opIdx, limit) {\n    this.dependencyTracker?.recordSimpleData(\"miterLimit\", opIdx);\n    this.ctx.miterLimit = limit;\n  }\n  setDash(opIdx, dashArray, dashPhase) {\n    this.dependencyTracker?.recordSimpleData(\"dash\", opIdx);\n    const ctx = this.ctx;\n    if (ctx.setLineDash !== undefined) {\n      ctx.setLineDash(dashArray);\n      ctx.lineDashOffset = dashPhase;\n    }\n  }\n  setRenderingIntent(opIdx, intent) {}\n  setFlatness(opIdx, flatness) {}\n  setGState(opIdx, states) {\n    for (const [key, value] of states) {\n      switch (key) {\n        case \"LW\":\n          this.setLineWidth(opIdx, value);\n          break;\n        case \"LC\":\n          this.setLineCap(opIdx, value);\n          break;\n        case \"LJ\":\n          this.setLineJoin(opIdx, value);\n          break;\n        case \"ML\":\n          this.setMiterLimit(opIdx, value);\n          break;\n        case \"D\":\n          this.setDash(opIdx, value[0], value[1]);\n          break;\n        case \"RI\":\n          this.setRenderingIntent(opIdx, value);\n          break;\n        case \"FL\":\n          this.setFlatness(opIdx, value);\n          break;\n        case \"Font\":\n          this.setFont(opIdx, value[0], value[1]);\n          break;\n        case \"CA\":\n          this.dependencyTracker?.recordSimpleData(\"strokeAlpha\", opIdx);\n          this.current.strokeAlpha = value;\n          break;\n        case \"ca\":\n          this.dependencyTracker?.recordSimpleData(\"fillAlpha\", opIdx);\n          this.ctx.globalAlpha = this.current.fillAlpha = value;\n          break;\n        case \"BM\":\n          this.dependencyTracker?.recordSimpleData(\"globalCompositeOperation\", opIdx);\n          this.ctx.globalCompositeOperation = value;\n          break;\n        case \"SMask\":\n          this.dependencyTracker?.recordSimpleData(\"SMask\", opIdx);\n          this.current.activeSMask = value ? this.tempSMask : null;\n          if (this.current.activeSMask) {\n            this.current.activeSMask.blendMode = this.ctx.globalCompositeOperation;\n          }\n          this.tempSMask = null;\n          this.checkSMaskState(opIdx);\n          break;\n        case \"TR\":\n          this.dependencyTracker?.recordSimpleData(\"filter\", opIdx);\n          this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);\n          break;\n      }\n    }\n  }\n  get inSMaskMode() {\n    return !!this.suspendedCtx;\n  }\n  _clearPreparedSMask() {\n    if (this.smaskPreparedEntry) {\n      this.canvasFactory.destroy(this.smaskPreparedEntry);\n      this.smaskPreparedEntry = null;\n    }\n    this.smaskPreparedFor = null;\n    this.smaskPreparedOffsetX = 0;\n    this.smaskPreparedOffsetY = 0;\n    this.smaskPreparedOOBAlpha = null;\n  }\n  _ensurePreparedSMask(smask) {\n    if (smask === this.smaskPreparedFor) {\n      return;\n    }\n    this._clearPreparedSMask();\n    this._prepareSMaskCanvas(smask);\n  }\n  checkSMaskState(opIdx) {\n    const inSMaskMode = this.inSMaskMode;\n    if (this.current.activeSMask && !inSMaskMode) {\n      this.beginSMaskMode(opIdx);\n    } else if (!this.current.activeSMask && inSMaskMode) {\n      this.endSMaskMode();\n    } else if (this.current.activeSMask && inSMaskMode) {\n      this._ensurePreparedSMask(this.current.activeSMask);\n    }\n  }\n  _prepareSMaskCanvas(smask) {\n    const {\n      canvas: maskCanvas,\n      subtype,\n      backdrop,\n      transferMap\n    } = smask;\n    const hasFilter = subtype === \"Luminosity\" || subtype === \"Alpha\" && transferMap;\n    if (!hasFilter && !(subtype === \"Luminosity\" && backdrop)) {\n      this.smaskPreparedFor = smask;\n      return;\n    }\n    let filteredOOBAlpha;\n    if (subtype === \"Luminosity\" && backdrop) {\n      const [r, g, b] = getRGBA(backdrop);\n      const inputAlpha = Math.round(0.3 * r + 0.59 * g + 0.11 * b);\n      filteredOOBAlpha = transferMap?.[inputAlpha] ?? inputAlpha;\n    } else {\n      filteredOOBAlpha = transferMap?.[0] ?? 0;\n    }\n    const SMASK_LAYER_TO_MASK_AREA_RATIO = 4;\n    const {\n      width: layerW,\n      height: layerH\n    } = this.ctx.canvas;\n    const maskArea = maskCanvas.width * maskCanvas.height;\n    const useLayerSize = layerW * layerH < SMASK_LAYER_TO_MASK_AREA_RATIO * maskArea;\n    const filterSpec = hasFilter ? {\n      url: subtype === \"Alpha\" ? this.filterFactory.addAlphaFilter(transferMap) : this.filterFactory.addLuminosityFilter(transferMap),\n      subtype,\n      transferMap\n    } : null;\n    const bakedBackdrop = subtype === \"Luminosity\" ? backdrop : null;\n    let preparedEntry, offsetX, offsetY;\n    if (useLayerSize) {\n      preparedEntry = this._bakeSMaskCanvas(maskCanvas, smask.offsetX, smask.offsetY, layerW, layerH, bakedBackdrop, filterSpec);\n      offsetX = 0;\n      offsetY = 0;\n    } else {\n      preparedEntry = this._bakeSMaskCanvas(maskCanvas, 0, 0, maskCanvas.width, maskCanvas.height, bakedBackdrop, filterSpec);\n      offsetX = smask.offsetX;\n      offsetY = smask.offsetY;\n    }\n    this.smaskPreparedEntry = preparedEntry;\n    this.smaskPreparedFor = smask;\n    this.smaskPreparedOffsetX = offsetX;\n    this.smaskPreparedOffsetY = offsetY;\n    this.smaskPreparedOOBAlpha = !useLayerSize && filteredOOBAlpha !== 0 ? filteredOOBAlpha : null;\n  }\n  _bakeSMaskCanvas(maskCanvas, drawX, drawY, w, h, backdrop, filterSpec) {\n    if (!backdrop && !filterSpec) {\n      unreachable(\"_bakeSMaskCanvas with neither backdrop nor filter\");\n    }\n    const srcEntry = this.canvasFactory.create(w, h);\n    const sCtx = srcEntry.context;\n    sCtx.drawImage(maskCanvas, drawX, drawY);\n    if (backdrop) {\n      sCtx.globalCompositeOperation = \"destination-atop\";\n      sCtx.fillStyle = backdrop;\n      sCtx.fillRect(0, 0, w, h);\n    }\n    if (!filterSpec) {\n      return srcEntry;\n    }\n    const preparedEntry = this.canvasFactory.create(w, h);\n    const pCtx = preparedEntry.context;\n    pCtx.filter = filterSpec.url;\n    const filterApplied = FeatureTest.isCanvasFilterSupported && pCtx.filter !== \"none\" && pCtx.filter !== \"\";\n    pCtx.drawImage(srcEntry.canvas, 0, 0);\n    if (FeatureTest.isCanvasFilterSupported) {\n      pCtx.filter = \"none\";\n    }\n    if (!filterApplied) {\n      const img = pCtx.getImageData(0, 0, w, h);\n      const {\n        data\n      } = img;\n      const {\n        transferMap\n      } = filterSpec;\n      if (filterSpec.subtype === \"Luminosity\") {\n        for (let i = 0, ii = data.length; i < ii; i += 4) {\n          const a = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2] + 0.5 | 0;\n          data[i] = data[i + 1] = data[i + 2] = 0;\n          data[i + 3] = transferMap?.[a] ?? a;\n        }\n      } else {\n        for (let i = 3, ii = data.length; i < ii; i += 4) {\n          data[i] = transferMap[data[i]];\n        }\n      }\n      pCtx.putImageData(img, 0, 0);\n    }\n    this.canvasFactory.destroy(srcEntry);\n    return preparedEntry;\n  }\n  beginSMaskMode(opIdx) {\n    if (this.inSMaskMode) {\n      throw new Error(\"beginSMaskMode called while already in smask mode\");\n    }\n    const {\n      width: drawnWidth,\n      height: drawnHeight\n    } = this.ctx.canvas;\n    const scratchCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    this.smaskScratchCanvas = scratchCanvas;\n    this.suspendedCtx = this.ctx;\n    const ctx = this.ctx = scratchCanvas.context;\n    ctx.setTransform(this.suspendedCtx.getTransform());\n    copyCtxState(this.suspendedCtx, ctx);\n    mirrorContextOperations(ctx, this.suspendedCtx);\n    this._ensurePreparedSMask(this.current.activeSMask);\n    this.setGState(opIdx, [[\"BM\", \"source-over\"]]);\n  }\n  endSMaskMode() {\n    if (!this.inSMaskMode) {\n      throw new Error(\"endSMaskMode called while not in smask mode\");\n    }\n    this.ctx._removeMirroring();\n    copyCtxState(this.ctx, this.suspendedCtx);\n    this.ctx = this.suspendedCtx;\n    this.suspendedCtx = null;\n    this.canvasFactory.destroy(this.smaskScratchCanvas);\n    this.smaskScratchCanvas = null;\n    this._clearPreparedSMask();\n  }\n  #createKnockoutMaskCanvas(sourceCanvas, reuseEntry = null, alpha = 1) {\n    const {\n      width,\n      height\n    } = sourceCanvas;\n    const maskEntry = reuseEntry ?? this.canvasFactory.create(width, height);\n    const maskCtx = maskEntry.context;\n    alpha = Math.round(alpha * 255) / 255;\n    const needsAlphaScaling = alpha < 1;\n    if (needsAlphaScaling && this.#knockoutFilterCache === undefined) {\n      this.#knockoutFilterCache = FeatureTest.isCanvasFilterSupported ? new Map() : \"none\";\n    }\n    let knockoutFilter = \"none\";\n    if (needsAlphaScaling && this.#knockoutFilterCache instanceof Map) {\n      knockoutFilter = this.#knockoutFilterCache.getOrInsertComputed(alpha, () => this.filterFactory.addKnockoutFilter(alpha));\n    }\n    if (!needsAlphaScaling || knockoutFilter !== \"none\") {\n      if (reuseEntry) {\n        maskCtx.save();\n        maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n        maskCtx.clearRect(0, 0, width, height);\n        maskCtx.restore();\n      }\n      maskCtx.filter = knockoutFilter;\n      maskCtx.drawImage(sourceCanvas, 0, 0);\n      maskCtx.filter = \"none\";\n      return maskEntry;\n    }\n    const sourceData = sourceCanvas.getContext(\"2d\", {\n      willReadFrequently: true\n    }).getImageData(0, 0, width, height);\n    const maskData = maskCtx.createImageData(width, height);\n    const sourcePixels = sourceData.data,\n      maskPixels = maskData.data;\n    const alphaScale = alpha > 0 ? 1 / alpha : 1e6;\n    for (let i = 3, ii = sourcePixels.length; i < ii; i += 4) {\n      maskPixels[i] = Math.min(Math.round(sourcePixels[i] * alphaScale), 255);\n    }\n    maskCtx.putImageData(maskData, 0, 0);\n    return maskEntry;\n  }\n  #getOrCreatePooledEntry(meta, key, width, height) {\n    let entry = meta?.[key] ?? null;\n    if (entry && (entry.canvas.width !== width || entry.canvas.height !== height)) {\n      this.canvasFactory.destroy(entry);\n      entry = null;\n    }\n    if (!entry) {\n      entry = this.canvasFactory.create(width, height);\n      if (meta) {\n        meta[key] = entry;\n      }\n      return entry;\n    }\n    const ctx = entry.context;\n    ctx.save();\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.clearRect(0, 0, width, height);\n    ctx.restore();\n    return entry;\n  }\n  #compositeKnockoutSurface(destCtx, surfaceCanvas, options = {}) {\n    const {\n      backdropCanvas = null,\n      destTransform = [1, 0, 0, 1, 0, 0],\n      backdropOffset = [0, 0],\n      reuseMaskEntry = null,\n      poolMeta = null,\n      sourceAlpha = 1,\n      sourceFilter = \"none\",\n      knockoutAlpha = 1\n    } = options;\n    const {\n      width,\n      height\n    } = surfaceCanvas;\n    const knockoutMaskEntry = this.#createKnockoutMaskCanvas(surfaceCanvas, reuseMaskEntry, knockoutAlpha);\n    const sourceCompositeOperation = destCtx.globalCompositeOperation;\n    destCtx.save();\n    destCtx.setTransform(...destTransform);\n    destCtx.globalAlpha = 1;\n    if (FeatureTest.isCanvasFilterSupported) {\n      destCtx.filter = \"none\";\n    }\n    destCtx.globalCompositeOperation = \"destination-out\";\n    destCtx.drawImage(knockoutMaskEntry.canvas, 0, 0);\n    if (backdropCanvas) {\n      const [bx, by] = backdropOffset;\n      const backdropEntry = this.#getOrCreatePooledEntry(poolMeta, \"knockoutBackdropEntry\", width, height);\n      const backdropCtx = backdropEntry.context;\n      backdropCtx.drawImage(backdropCanvas, bx, by, width, height, 0, 0, width, height);\n      backdropCtx.globalCompositeOperation = \"destination-in\";\n      backdropCtx.drawImage(knockoutMaskEntry.canvas, 0, 0);\n      backdropCtx.globalCompositeOperation = \"source-over\";\n      destCtx.globalCompositeOperation = \"destination-over\";\n      destCtx.drawImage(backdropEntry.canvas, 0, 0);\n      if (!poolMeta) {\n        this.canvasFactory.destroy(backdropEntry);\n      }\n    }\n    destCtx.globalCompositeOperation = sourceCompositeOperation;\n    destCtx.globalAlpha = sourceAlpha;\n    if (FeatureTest.isCanvasFilterSupported) {\n      destCtx.filter = sourceFilter ?? \"none\";\n    }\n    destCtx.drawImage(surfaceCanvas, 0, 0);\n    destCtx.restore();\n    if (!reuseMaskEntry) {\n      this.canvasFactory.destroy(knockoutMaskEntry);\n    }\n  }\n  #beginKnockoutElement(alpha = 1) {\n    if (this.#knockoutGroupLevel === 0 || this.#knockoutElementDepth > 0 || !this.contentVisible) {\n      return false;\n    }\n    this.#knockoutElementDepth++;\n    this.#knockoutElementAlpha = alpha;\n    const groupMeta = this.#groupStackMeta.at(-1);\n    const {\n      canvas\n    } = this.ctx;\n    const tempEntry = this.#getOrCreatePooledEntry(groupMeta, \"knockoutTempEntry\", canvas.width, canvas.height);\n    this.#knockoutTempCanvasEntry = tempEntry;\n    const tempCtx = tempEntry.context;\n    tempCtx.save();\n    tempCtx.setTransform(this.ctx.getTransform());\n    copyCtxState(this.ctx, tempCtx);\n    this.#knockoutSavedGCO = tempCtx.globalCompositeOperation;\n    tempCtx.globalCompositeOperation = \"source-over\";\n    mirrorContextOperations(tempCtx, this.ctx);\n    this.#knockoutElementGroupMeta = groupMeta;\n    this.#knockoutSavedCtx = this.ctx;\n    this.#knockoutSavedSMaskCtx = this.suspendedCtx;\n    this.ctx = tempCtx;\n    if (this.inSMaskMode) {\n      this.suspendedCtx = tempCtx;\n    }\n    return true;\n  }\n  #endKnockoutElement(started) {\n    if (!started) {\n      return;\n    }\n    const tempEntry = this.#knockoutTempCanvasEntry;\n    const savedCtx = this.#knockoutSavedCtx;\n    const savedSMaskCtx = this.#knockoutSavedSMaskCtx;\n    const tempCtx = tempEntry.context;\n    this.#knockoutTempCanvasEntry = null;\n    this.#knockoutSavedCtx = null;\n    this.#knockoutSavedSMaskCtx = null;\n    if (this.inSMaskMode && this.suspendedCtx === tempCtx && this.ctx !== tempCtx) {\n      this.endSMaskMode();\n    }\n    if (this.inSMaskMode) {\n      this.suspendedCtx = savedSMaskCtx;\n    }\n    this.ctx._removeMirroring();\n    this.ctx.globalCompositeOperation = this.#knockoutSavedGCO;\n    this.#knockoutSavedGCO = null;\n    copyCtxState(this.ctx, savedCtx);\n    this.ctx = savedCtx;\n    const groupMeta = this.#knockoutElementGroupMeta;\n    this.#knockoutElementGroupMeta = null;\n    const knockoutAlpha = this.#knockoutElementAlpha;\n    this.#knockoutElementAlpha = 1;\n    try {\n      this.#compositeKnockoutSurface(savedSMaskCtx ?? savedCtx, tempEntry.canvas, {\n        backdropCanvas: groupMeta?.backdropCtx?.canvas ?? null,\n        backdropOffset: groupMeta?.backdropCtx ? [groupMeta.offsetX, groupMeta.offsetY] : [0, 0],\n        reuseMaskEntry: groupMeta?.knockoutMaskEntry ?? null,\n        poolMeta: groupMeta,\n        knockoutAlpha\n      });\n    } finally {\n      tempCtx.restore();\n      this.#knockoutElementDepth--;\n      if (!groupMeta) {\n        this.canvasFactory.destroy(tempEntry);\n      }\n    }\n  }\n  compose(dirtyBox) {\n    if (!this.current.activeSMask) {\n      return;\n    }\n    dirtyBox = dirtyBox ? [Math.floor(dirtyBox[0]), Math.floor(dirtyBox[1]), Math.ceil(dirtyBox[2]), Math.ceil(dirtyBox[3])] : [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n    const smask = this.current.activeSMask;\n    const suspendedCtx = this.suspendedCtx;\n    const applySMaskInPlace = this.#knockoutElementDepth > 0 && suspendedCtx === this.ctx;\n    this.composeSMask(applySMaskInPlace ? null : suspendedCtx, smask, this.ctx, dirtyBox);\n    if (applySMaskInPlace) {\n      return;\n    }\n    this.ctx.save();\n    this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.ctx.restore();\n  }\n  composeSMask(ctx, smask, layerCtx, layerBox) {\n    const layerOffsetX = layerBox[0];\n    const layerOffsetY = layerBox[1];\n    const layerWidth = layerBox[2] - layerOffsetX;\n    const layerHeight = layerBox[3] - layerOffsetY;\n    if (layerWidth === 0 || layerHeight === 0) {\n      return;\n    }\n    const preparedEntry = this.smaskPreparedEntry;\n    if (preparedEntry) {\n      let clipX = layerOffsetX;\n      let clipY = layerOffsetY;\n      let clipW = layerWidth;\n      let clipH = layerHeight;\n      const oobAlpha = this.smaskPreparedOOBAlpha;\n      const hasOOBAlpha = oobAlpha !== null;\n      if (hasOOBAlpha) {\n        clipX = Math.max(layerOffsetX, smask.offsetX);\n        clipY = Math.max(layerOffsetY, smask.offsetY);\n        const x1 = Math.min(layerOffsetX + layerWidth, smask.offsetX + smask.canvas.width);\n        const y1 = Math.min(layerOffsetY + layerHeight, smask.offsetY + smask.canvas.height);\n        clipW = x1 - clipX;\n        clipH = y1 - clipY;\n      }\n      if (clipW > 0 && clipH > 0) {\n        const srcX = clipX - this.smaskPreparedOffsetX;\n        const srcY = clipY - this.smaskPreparedOffsetY;\n        layerCtx.save();\n        layerCtx.globalAlpha = 1;\n        layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n        const clip = new Path2D();\n        clip.rect(clipX, clipY, clipW, clipH);\n        layerCtx.clip(clip);\n        layerCtx.globalCompositeOperation = \"destination-in\";\n        layerCtx.drawImage(preparedEntry.canvas, srcX, srcY, clipW, clipH, clipX, clipY, clipW, clipH);\n        layerCtx.restore();\n      }\n      if (hasOOBAlpha && oobAlpha < 255) {\n        this._applySMaskOOBAlpha(layerCtx, layerOffsetX, layerOffsetY, layerWidth, layerHeight, clipX, clipY, clipX + clipW, clipY + clipH, oobAlpha);\n      }\n    } else {\n      this.genericComposeSMask(smask, layerCtx, layerWidth, layerHeight, layerOffsetX, layerOffsetY);\n    }\n    if (!ctx) {\n      return;\n    }\n    ctx.save();\n    ctx.globalAlpha = 1;\n    ctx.globalCompositeOperation = smask.blendMode || \"source-over\";\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(layerCtx.canvas, layerOffsetX, layerOffsetY, layerWidth, layerHeight, layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    ctx.restore();\n  }\n  _applySMaskOOBAlpha(layerCtx, layerOffsetX, layerOffsetY, layerWidth, layerHeight, maskX0, maskY0, maskX1, maskY1, alpha) {\n    const hasInnerCutout = maskX0 < maskX1 && maskY0 < maskY1;\n    if (hasInnerCutout && maskX0 === layerOffsetX && maskY0 === layerOffsetY && maskX1 === layerOffsetX + layerWidth && maskY1 === layerOffsetY + layerHeight) {\n      return;\n    }\n    const path = new Path2D();\n    path.rect(layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    if (hasInnerCutout) {\n      path.rect(maskX0, maskY0, maskX1 - maskX0, maskY1 - maskY0);\n    }\n    layerCtx.save();\n    layerCtx.globalAlpha = alpha / 255;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n    layerCtx.clip(path, \"evenodd\");\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.fillStyle = \"#000000\";\n    layerCtx.fillRect(layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    layerCtx.restore();\n  }\n  genericComposeSMask(smask, layerCtx, width, height, layerOffsetX, layerOffsetY) {\n    const {\n      context: maskCtx,\n      offsetX: maskOffsetX,\n      offsetY: maskOffsetY\n    } = smask;\n    layerCtx.save();\n    layerCtx.globalAlpha = 1;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n    const clip = new Path2D();\n    clip.rect(layerOffsetX, layerOffsetY, width, height);\n    layerCtx.clip(clip);\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.drawImage(maskCtx.canvas, layerOffsetX - maskOffsetX, layerOffsetY - maskOffsetY, width, height, layerOffsetX, layerOffsetY, width, height);\n    layerCtx.restore();\n  }\n  save(opIdx) {\n    if (this.inSMaskMode) {\n      copyCtxState(this.ctx, this.suspendedCtx);\n    }\n    this.ctx.save();\n    const old = this.current;\n    this.stateStack.push(old);\n    this.current = old.clone();\n    this.dependencyTracker?.save(opIdx);\n  }\n  restore(opIdx) {\n    this.dependencyTracker?.restore(opIdx);\n    if (this.stateStack.length === 0) {\n      if (this.inSMaskMode) {\n        this.endSMaskMode();\n      }\n      return;\n    }\n    this.current = this.stateStack.pop();\n    this.ctx.restore();\n    if (this.inSMaskMode) {\n      copyCtxState(this.suspendedCtx, this.ctx);\n      this.ctx.setTransform(this.suspendedCtx.getTransform());\n    }\n    this.checkSMaskState(opIdx);\n    this.pendingClip = null;\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n  transform(opIdx, a, b, c, d, e, f) {\n    this.dependencyTracker?.recordIncrementalData(\"transform\", opIdx);\n    this.ctx.transform(a, b, c, d, e, f);\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n  constructPath(opIdx, op, data, minMax) {\n    let [path] = data;\n    if (!minMax) {\n      path ||= data[0] = new Path2D();\n      if (op !== OPS.stroke && op !== OPS.closeStroke) {\n        this.current.tilingPatternDims = null;\n      }\n      this[op](opIdx, path);\n      return;\n    }\n    if (this.dependencyTracker !== null) {\n      const outerExtraSize = op === OPS.stroke ? this.current.lineWidth / 2 : 0;\n      this.dependencyTracker.resetBBox(opIdx).recordBBox(opIdx, this.ctx, minMax[0] - outerExtraSize, minMax[2] + outerExtraSize, minMax[1] - outerExtraSize, minMax[3] + outerExtraSize).recordDependencies(opIdx, [\"transform\"]);\n    }\n    if (!(path instanceof Path2D)) {\n      path = data[0] = makePathFromDrawOPS(path);\n    }\n    Util.axialAlignedBoundingBox(minMax, getCurrentTransform(this.ctx), this.current.minMax);\n    const tilingDims = this.current.tilingPatternDims;\n    if (tilingDims && op !== OPS.stroke && op !== OPS.closeStroke && this.current.fillColor instanceof TilingPattern) {\n      const clippedBBox = Util.intersect(this.current.clipBox, this.current.minMax);\n      if (!clippedBBox) {\n        this.current.tilingPatternDims = null;\n      } else {\n        this.current.fillColor.updatePatternDims(clippedBBox, tilingDims);\n      }\n    }\n    this[op](opIdx, path);\n    this._pathStartIdx = opIdx;\n  }\n  closePath(opIdx) {\n    this.ctx.closePath();\n  }\n  stroke(opIdx, path, consumePath = true) {\n    const started = consumePath && this.#beginKnockoutElement(this.current.strokeAlpha);\n    const ctx = this.ctx;\n    const strokeColor = this.current.strokeColor;\n    ctx.globalAlpha = this.current.strokeAlpha;\n    if (this.contentVisible) {\n      if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n        const baseTransform = strokeColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;\n        ctx.save();\n        ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx);\n        if (baseTransform) {\n          const newPath = new Path2D();\n          newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));\n          path = newPath;\n        }\n        this.rescaleAndStroke(path, false);\n        ctx.restore();\n      } else {\n        this.rescaleAndStroke(path, true);\n      }\n    }\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.stroke);\n    if (consumePath) {\n      this.consumePath(opIdx, path, this.current.getClippedPathBoundingBox(PathType.STROKE, getCurrentTransform(this.ctx)));\n    }\n    ctx.globalAlpha = this.current.fillAlpha;\n    this.#endKnockoutElement(started);\n  }\n  closeStroke(opIdx, path) {\n    this.stroke(opIdx, path);\n  }\n  fill(opIdx, path, consumePath = true) {\n    const started = consumePath && this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    let needRestore = false;\n    const intersect = this.current.getClippedPathBoundingBox();\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.fill);\n    if (isPatternFill) {\n      const dims = this.current.tilingPatternDims;\n      const tileIdx = dims && fillColor.canSkipPatternCanvas(dims);\n      if (tileIdx) {\n        fillColor.drawPattern(this, path, this.pendingEOFill, tileIdx, opIdx);\n        this.pendingEOFill = false;\n        if (consumePath) {\n          this.consumePath(opIdx, path, intersect);\n        }\n        this.current.tilingPatternDims = null;\n        this.#endKnockoutElement(started);\n        return;\n      }\n      const baseTransform = fillColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;\n      this.dependencyTracker?.save(opIdx);\n      ctx.save();\n      ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx);\n      if (baseTransform) {\n        const newPath = new Path2D();\n        newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));\n        path = newPath;\n      }\n      needRestore = true;\n    }\n    if (this.contentVisible && intersect !== null) {\n      if (this.pendingEOFill) {\n        ctx.fill(path, \"evenodd\");\n        this.pendingEOFill = false;\n      } else {\n        ctx.fill(path);\n      }\n    }\n    if (needRestore) {\n      ctx.restore();\n      this.dependencyTracker?.restore(opIdx);\n    }\n    if (consumePath) {\n      this.consumePath(opIdx, path, intersect);\n    }\n    this.#endKnockoutElement(started);\n  }\n  eoFill(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fill(opIdx, path);\n  }\n  fillStroke(opIdx, path) {\n    const started = this.#beginKnockoutElement(Math.min(this.current.fillAlpha, this.current.strokeAlpha));\n    this.fill(opIdx, path, false);\n    this.stroke(opIdx, path, false);\n    this.consumePath(opIdx, path);\n    this.#endKnockoutElement(started);\n  }\n  eoFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n  closeFillStroke(opIdx, path) {\n    this.fillStroke(opIdx, path);\n  }\n  closeEOFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n  endPath(opIdx, path) {\n    this.consumePath(opIdx, path);\n  }\n  rawFillPath(opIdx, path) {\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    this.ctx.fill(path);\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.rawFillPath).recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  clip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = NORMAL_CLIP;\n  }\n  eoClip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = EO_CLIP;\n  }\n  beginText(opIdx) {\n    this.current.textMatrix = null;\n    this.current.textMatrixScale = 1;\n    this.current.x = this.current.lineX = 0;\n    this.current.y = this.current.lineY = 0;\n    this.dependencyTracker?.recordOpenMarker(opIdx).resetIncrementalData(\"sameLineText\").resetIncrementalData(\"moveText\", opIdx);\n  }\n  endText(opIdx) {\n    const paths = this.pendingTextPaths;\n    const ctx = this.ctx;\n    if (this.dependencyTracker) {\n      const {\n        dependencyTracker\n      } = this;\n      if (paths !== undefined) {\n        dependencyTracker.recordFutureForcedDependency(\"textClip\", dependencyTracker.getOpenMarker()).recordFutureForcedDependency(\"textClip\", opIdx);\n      }\n      dependencyTracker.recordCloseMarker(opIdx);\n    }\n    if (paths !== undefined) {\n      const newPath = new Path2D();\n      const invTransf = ctx.getTransform().invertSelf();\n      for (const {\n        transform,\n        x,\n        y,\n        fontSize,\n        path\n      } of paths) {\n        if (!path) {\n          continue;\n        }\n        newPath.addPath(path, new DOMMatrix(transform).preMultiplySelf(invTransf).translate(x, y).scale(fontSize, -fontSize));\n      }\n      ctx.clip(newPath);\n    }\n    delete this.pendingTextPaths;\n  }\n  setCharSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"charSpacing\", opIdx);\n    this.current.charSpacing = spacing;\n  }\n  setWordSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"wordSpacing\", opIdx);\n    this.current.wordSpacing = spacing;\n  }\n  setHScale(opIdx, scale) {\n    this.dependencyTracker?.recordSimpleData(\"hScale\", opIdx);\n    this.current.textHScale = scale / 100;\n  }\n  setLeading(opIdx, leading) {\n    this.dependencyTracker?.recordSimpleData(\"leading\", opIdx);\n    this.current.leading = -leading;\n  }\n  setFont(opIdx, fontRefName, size) {\n    this.dependencyTracker?.recordSimpleData(\"font\", opIdx).recordSimpleDataFromNamed(\"fontObj\", fontRefName, opIdx);\n    const fontObj = this.commonObjs.get(fontRefName);\n    const current = this.current;\n    if (!fontObj) {\n      throw new Error(`Can't find font for ${fontRefName}`);\n    }\n    current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n      warn(\"Invalid font matrix for font \" + fontRefName);\n    }\n    if (size < 0) {\n      size = -size;\n      current.fontDirection = -1;\n    } else {\n      current.fontDirection = 1;\n    }\n    this.current.font = fontObj;\n    this.current.fontSize = size;\n    if (fontObj.isType3Font) {\n      return;\n    }\n    const name = fontObj.loadedName || \"sans-serif\";\n    const typeface = fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n    let bold = \"normal\";\n    if (fontObj.black) {\n      bold = \"900\";\n    } else if (fontObj.bold) {\n      bold = \"bold\";\n    }\n    const italic = fontObj.italic ? \"italic\" : \"normal\";\n    const browserFontSize = MathClamp(size, MIN_FONT_SIZE, MAX_FONT_SIZE);\n    this.current.fontSizeScale = size / browserFontSize;\n    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n  }\n  setTextRenderingMode(opIdx, mode) {\n    this.dependencyTracker?.recordSimpleData(\"textRenderingMode\", opIdx);\n    this.current.textRenderingMode = mode;\n  }\n  setTextRise(opIdx, rise) {\n    this.dependencyTracker?.recordSimpleData(\"textRise\", opIdx);\n    this.current.textRise = rise;\n  }\n  moveText(opIdx, x, y) {\n    this.dependencyTracker?.resetIncrementalData(\"sameLineText\").recordIncrementalData(\"moveText\", opIdx);\n    this.current.x = this.current.lineX += x;\n    this.current.y = this.current.lineY += y;\n  }\n  setLeadingMoveText(opIdx, x, y) {\n    this.setLeading(opIdx, -y);\n    this.moveText(opIdx, x, y);\n  }\n  setTextMatrix(opIdx, matrix) {\n    this.dependencyTracker?.resetIncrementalData(\"sameLineText\").recordSimpleData(\"textMatrix\", opIdx);\n    const {\n      current\n    } = this;\n    current.textMatrix = matrix;\n    current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);\n    current.x = current.lineX = 0;\n    current.y = current.lineY = 0;\n  }\n  nextLine(opIdx) {\n    this.moveText(opIdx, 0, this.current.leading);\n    this.dependencyTracker?.recordIncrementalData(\"moveText\", this.dependencyTracker.getSimpleIndex(\"leading\") ?? opIdx);\n  }\n  #getScaledPath(path, currentTransform, transform) {\n    const newPath = new Path2D();\n    newPath.addPath(path, new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform));\n    return newPath;\n  }\n  paintChar(opIdx, character, x, y, patternFillTransform, patternStrokeTransform) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const textRenderingMode = current.textRenderingMode;\n    const fontSize = current.fontSize / current.fontSizeScale;\n    const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG);\n    const patternFill = current.patternFill && !font.missingFile;\n    const patternStroke = current.patternStroke && !font.missingFile;\n    let path;\n    if ((font.disableFontFace || isAddToPathSet || patternFill || patternStroke) && !font.missingFile) {\n      path = font.getPathGenerator(this.commonObjs, character);\n    }\n    if (path && (font.disableFontFace || patternFill || patternStroke)) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.scale(fontSize, -fontSize);\n      this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font);\n      let currentTransform;\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (patternFillTransform) {\n          currentTransform = ctx.getTransform();\n          ctx.setTransform(...patternFillTransform);\n          const scaledPath = this.#getScaledPath(path, currentTransform, patternFillTransform);\n          ctx.fill(scaledPath);\n        } else {\n          ctx.fill(path);\n        }\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (patternStrokeTransform) {\n          currentTransform ||= ctx.getTransform();\n          ctx.setTransform(...patternStrokeTransform);\n          const {\n            a,\n            b,\n            c,\n            d\n          } = currentTransform;\n          const invPatternTransform = Util.inverseTransform(patternStrokeTransform);\n          const transf = Util.transform([a, b, c, d, 0, 0], invPatternTransform);\n          Util.singularValueDecompose2dScale(transf, XY);\n          ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;\n          ctx.stroke(this.#getScaledPath(path, currentTransform, patternStrokeTransform));\n        } else {\n          ctx.lineWidth /= fontSize;\n          ctx.stroke(path);\n        }\n      }\n      ctx.restore();\n    } else {\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.fillText(character, x, y);\n        this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character));\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (this.dependencyTracker) {\n          this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character)).recordDependencies(opIdx, Dependencies.stroke);\n        }\n        ctx.strokeText(character, x, y);\n      }\n    }\n    if (isAddToPathSet) {\n      const paths = this.pendingTextPaths ||= [];\n      paths.push({\n        transform: getCurrentTransform(ctx),\n        x,\n        y,\n        fontSize,\n        path\n      });\n      this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y);\n    }\n  }\n  get isFontSubpixelAAEnabled() {\n    const tmpCanvas = this.canvasFactory.create(10, 10);\n    const ctx = tmpCanvas.context;\n    ctx.scale(1.5, 1);\n    ctx.fillText(\"I\", 0, 10);\n    const data = ctx.getImageData(0, 0, 10, 10).data;\n    this.canvasFactory.destroy(tmpCanvas);\n    let enabled = false;\n    for (let i = 3; i < data.length; i += 4) {\n      if (data[i] > 0 && data[i] < 255) {\n        enabled = true;\n        break;\n      }\n    }\n    return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n  }\n  showText(opIdx, glyphs) {\n    if (this.dependencyTracker) {\n      this.dependencyTracker.recordDependencies(opIdx, Dependencies.showText).resetBBox(opIdx);\n      if (this.current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) {\n        this.dependencyTracker.recordFutureForcedDependency(\"textClip\", opIdx).inheritPendingDependenciesAsFutureForcedDependencies();\n      }\n    }\n    const current = this.current;\n    const font = current.font;\n    if (font.isType3Font) {\n      const started = this.#beginKnockoutElement(current.fillAlpha);\n      this.showType3Text(opIdx, glyphs);\n      this.dependencyTracker?.recordShowTextOperation(opIdx);\n      this.#endKnockoutElement(started);\n      return;\n    }\n    const fontSize = current.fontSize;\n    if (fontSize === 0) {\n      this.dependencyTracker?.recordOperation(opIdx);\n      return;\n    }\n    const started = this.#beginKnockoutElement(current.fillAlpha);\n    const ctx = this.ctx;\n    const fontSizeScale = current.fontSizeScale;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const fontDirection = current.fontDirection;\n    const textHScale = current.textHScale * fontDirection;\n    const glyphsLength = glyphs.length;\n    const vertical = font.vertical;\n    const spacingDir = vertical ? 1 : -1;\n    const defaultVMetrics = font.defaultVMetrics;\n    const widthAdvanceScale = fontSize * current.fontMatrix[0];\n    const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n    if (fontDirection > 0) {\n      ctx.scale(textHScale, -1);\n    } else {\n      ctx.scale(textHScale, 1);\n    }\n    let patternFillTransform, patternStrokeTransform;\n    const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const needsFill = fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE;\n    const needsStroke = fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE;\n    let lineWidth = current.lineWidth;\n    const scale = current.textMatrixScale;\n    if (scale === 0 || lineWidth === 0) {\n      if (needsStroke) {\n        lineWidth = this.getSinglePixelWidth();\n      }\n    } else {\n      lineWidth /= scale;\n    }\n    if (fontSizeScale !== 1.0) {\n      ctx.scale(fontSizeScale, fontSizeScale);\n      lineWidth /= fontSizeScale;\n    }\n    ctx.lineWidth = lineWidth;\n    if (needsFill && current.patternFill) {\n      ctx.save();\n      const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx);\n      patternFillTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.fillStyle = pattern;\n    }\n    if (needsStroke && current.patternStroke) {\n      ctx.save();\n      const pattern = current.strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx);\n      patternStrokeTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.strokeStyle = pattern;\n    }\n    if (font.isInvalidPDFjsFont) {\n      const chars = [];\n      let width = 0;\n      for (const glyph of glyphs) {\n        chars.push(glyph.unicode);\n        width += glyph.width;\n      }\n      const joinedChars = chars.join(\"\");\n      ctx.fillText(joinedChars, 0, 0);\n      if (this.dependencyTracker !== null) {\n        const measure = ctx.measureText(joinedChars);\n        this.dependencyTracker.recordBBox(opIdx, this.ctx, -measure.actualBoundingBoxLeft, measure.actualBoundingBoxRight, -measure.actualBoundingBoxAscent, measure.actualBoundingBoxDescent).recordShowTextOperation(opIdx);\n      }\n      current.x += width * widthAdvanceScale * textHScale;\n      ctx.restore();\n      this.compose();\n      this.#endKnockoutElement(started);\n      return;\n    }\n    let x = 0,\n      i;\n    for (i = 0; i < glyphsLength; ++i) {\n      const glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        x += spacingDir * glyph * fontSize / 1000;\n        continue;\n      }\n      let restoreNeeded = false;\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const character = glyph.fontChar;\n      const accent = glyph.accent;\n      let scaledX, scaledY;\n      let width = glyph.width;\n      if (vertical) {\n        const vmetric = glyph.vmetric || defaultVMetrics;\n        const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n        const vy = vmetric[2] * widthAdvanceScale;\n        width = vmetric ? -vmetric[0] : width;\n        scaledX = vx / fontSizeScale;\n        scaledY = (x + vy) / fontSizeScale;\n      } else {\n        scaledX = x / fontSizeScale;\n        scaledY = 0;\n      }\n      let measure;\n      if (font.remeasure && width > 0) {\n        measure = ctx.measureText(character);\n        const measuredWidth = measure.width * 1000 / fontSize * fontSizeScale;\n        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n          const characterScaleX = width / measuredWidth;\n          restoreNeeded = true;\n          ctx.save();\n          ctx.scale(characterScaleX, 1);\n          scaledX /= characterScaleX;\n        } else if (width !== measuredWidth) {\n          scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\n        }\n      }\n      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n        if (simpleFillText && !accent) {\n          ctx.fillText(character, scaledX, scaledY);\n          this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, measure ? {\n            bbox: null\n          } : font, fontSize / fontSizeScale, scaledX, scaledY, () => measure ?? ctx.measureText(character));\n        } else {\n          this.paintChar(opIdx, character, scaledX, scaledY, patternFillTransform, patternStrokeTransform);\n          if (accent) {\n            const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;\n            const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;\n            this.paintChar(opIdx, accent.fontChar, scaledAccentX, scaledAccentY, patternFillTransform, patternStrokeTransform);\n          }\n        }\n      }\n      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;\n      x += charWidth;\n      if (restoreNeeded) {\n        ctx.restore();\n      }\n    }\n    if (vertical) {\n      current.y -= x;\n    } else {\n      current.x += x * textHScale;\n    }\n    ctx.restore();\n    this.compose();\n    this.dependencyTracker?.recordShowTextOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  showType3Text(opIdx, glyphs) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const fontSize = current.fontSize;\n    const fontDirection = current.fontDirection;\n    const spacingDir = font.vertical ? 1 : -1;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const textHScale = current.textHScale * fontDirection;\n    const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n    const glyphsLength = glyphs.length;\n    const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE;\n    let i, glyph, width, spacingLength;\n    if (isTextInvisible || fontSize === 0) {\n      return;\n    }\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n    ctx.scale(textHScale, fontDirection);\n    const dependencyTracker = this.dependencyTracker;\n    this.dependencyTracker = dependencyTracker ? new CanvasNestedDependencyTracker(dependencyTracker, opIdx) : null;\n    for (i = 0; i < glyphsLength; ++i) {\n      glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        spacingLength = spacingDir * glyph * fontSize / 1000;\n        this.ctx.translate(spacingLength, 0);\n        current.x += spacingLength * textHScale;\n        continue;\n      }\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const operatorList = font.charProcOperatorList[glyph.operatorListId];\n      if (!operatorList) {\n        warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n      } else if (this.contentVisible) {\n        this.save();\n        if (operatorList.fnArray[0] === OPS.setCharWidth) {\n          current.fillAlpha = current.strokeAlpha = 1;\n          ctx.globalAlpha = 1;\n        }\n        ctx.scale(fontSize, fontSize);\n        ctx.transform(...fontMatrix);\n        this.executeOperatorList(operatorList);\n        this.restore();\n      }\n      const p = [glyph.width, 0];\n      Util.applyTransform(p, fontMatrix);\n      width = p[0] * fontSize + spacing;\n      ctx.translate(width, 0);\n      current.x += width * textHScale;\n    }\n    ctx.restore();\n    if (dependencyTracker) {\n      this.dependencyTracker = dependencyTracker;\n    }\n  }\n  setCharWidth(opIdx, xWidth, yWidth) {}\n  setCharWidthAndBounds(opIdx, xWidth, yWidth, llx, lly, urx, ury) {\n    const clip = new Path2D();\n    clip.rect(llx, lly, urx - llx, ury - lly);\n    this.ctx.clip(clip);\n    this.dependencyTracker?.recordBBox(opIdx, this.ctx, llx, urx, lly, ury).recordClipBox(opIdx, this.ctx, llx, urx, lly, ury);\n    this.endPath(opIdx);\n  }\n  getColorN_Pattern(opIdx, IR) {\n    let pattern;\n    if (IR[0] === \"TilingPattern\") {\n      const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n      const canvasGraphicsFactory = {\n        createCanvasGraphics: (ctx, renderingOpIdx) => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n          optionalContentConfig: this.optionalContentConfig,\n          markedContentStack: this.markedContentStack\n        }, undefined, undefined, this.dependencyTracker ? new CanvasNestedDependencyTracker(this.dependencyTracker, renderingOpIdx, true) : null)\n      };\n      pattern = new TilingPattern(IR, this.ctx, canvasGraphicsFactory, baseTransform);\n    } else {\n      pattern = this._getPattern(opIdx, IR[1], IR[2]);\n    }\n    return pattern;\n  }\n  setStrokeColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.current.strokeColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternStroke = true;\n  }\n  setFillColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    const pattern = this.current.fillColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternFill = true;\n    this.current.tilingPatternDims = pattern instanceof TilingPattern ? [0, 0, 0, 0] : null;\n  }\n  setStrokeRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = color;\n    this.current.patternStroke = false;\n  }\n  setStrokeTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n    this.current.patternStroke = false;\n  }\n  setFillRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = color;\n    this.current.patternFill = false;\n    this.current.tilingPatternDims = null;\n  }\n  setFillTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = \"transparent\";\n    this.current.patternFill = false;\n    this.current.tilingPatternDims = null;\n  }\n  _getPattern(opIdx, objId, matrix = null) {\n    let pattern;\n    if (this.cachedPatterns.has(objId)) {\n      pattern = this.cachedPatterns.get(objId);\n    } else {\n      pattern = getShadingPattern(this.getObject(opIdx, objId));\n      this.cachedPatterns.set(objId, pattern);\n    }\n    if (matrix) {\n      pattern.matrix = matrix;\n    }\n    return pattern;\n  }\n  shadingFill(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    this.save(opIdx);\n    const pattern = this._getPattern(opIdx, objId);\n    ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING, opIdx);\n    const inv = getCurrentTransformInverse(ctx);\n    if (inv) {\n      const {\n        width,\n        height\n      } = ctx.canvas;\n      const minMax = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);\n      const [x0, y0, x1, y1] = minMax;\n      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n    } else {\n      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n    }\n    this.dependencyTracker?.resetBBox(opIdx).recordFullPageBBox(opIdx).recordDependencies(opIdx, Dependencies.transform).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx);\n    this.compose(this.current.getClippedPathBoundingBox());\n    this.restore(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  beginInlineImage() {\n    unreachable(\"Should not call beginInlineImage\");\n  }\n  beginImageData() {\n    unreachable(\"Should not call beginImageData\");\n  }\n  paintFormXObjectBegin(opIdx, matrix, bbox) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save(opIdx);\n    this.baseTransformStack.push(this.baseTransform);\n    if (matrix) {\n      this.transform(opIdx, ...matrix);\n    }\n    this.baseTransform = getCurrentTransform(this.ctx);\n    if (bbox) {\n      Util.axialAlignedBoundingBox(bbox, this.baseTransform, this.current.minMax);\n      const [x0, y0, x1, y1] = bbox;\n      const clip = new Path2D();\n      clip.rect(x0, y0, x1 - x0, y1 - y0);\n      this.ctx.clip(clip);\n      this.dependencyTracker?.recordClipBox(opIdx, this.ctx, x0, x1, y0, y1);\n      this.endPath(opIdx);\n    }\n  }\n  paintFormXObjectEnd(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.restore(opIdx);\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n  beginGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save(opIdx);\n    const {\n      inSMaskMode\n    } = this;\n    if (inSMaskMode) {\n      this.endSMaskMode();\n      this.current.activeSMask = null;\n    }\n    const currentCtx = this.ctx;\n    if ((!group.needsIsolation || !group.isolated && !group.hasSoftMask) && !group.knockout && !group.isGray && this.#knockoutGroupLevel === 0 && currentCtx.globalAlpha === 1 && currentCtx.globalCompositeOperation === \"source-over\" && !inSMaskMode) {\n      if (group.bbox) {\n        let clip = new Path2D();\n        const [x0, y0, x1, y1] = group.bbox;\n        clip.rect(x0, y0, x1 - x0, y1 - y0);\n        if (group.matrix) {\n          const path = new Path2D();\n          path.addPath(clip, new DOMMatrix(group.matrix));\n          clip = path;\n        }\n        currentCtx.clip(clip);\n      }\n      this.groupStack.push(null);\n      this.#groupStackMeta.push(null);\n      this.groupLevel++;\n      return;\n    }\n    if (!group.isolated && !group.knockout && this.#knockoutGroupLevel === 0) {\n      info(\"TODO: Fully support non-isolated non-knockout groups.\");\n    }\n    const currentTransform = getCurrentTransform(currentCtx);\n    if (group.matrix) {\n      currentCtx.transform(...group.matrix);\n    }\n    const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\n    let bounds;\n    if (group.bbox) {\n      bounds = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx), bounds);\n      bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n    } else {\n      bounds = canvasBounds;\n    }\n    const offsetX = Math.floor(bounds[0]);\n    const offsetY = Math.floor(bounds[1]);\n    const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n    const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n    const scratchCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    if (group.smask) {\n      this.smaskGroupCanvases.push(scratchCanvas);\n    }\n    const groupCtx = scratchCanvas.context;\n    const backdropCtx = group.knockout && !group.isolated ? currentCtx : null;\n    const hasInnerBackdrop = !group.isolated && !group.knockout && !group.smask && group.needsIsolation && this.#knockoutGroupLevel > 0;\n    const knockoutMaskEntry = group.knockout ? this.canvasFactory.create(drawnWidth, drawnHeight) : null;\n    const savedKnockoutLevel = this.#knockoutGroupLevel;\n    if (group.knockout) {\n      this.#knockoutGroupLevel++;\n    } else {\n      this.#knockoutGroupLevel = 0;\n    }\n    groupCtx.translate(-offsetX, -offsetY);\n    groupCtx.transform(...currentTransform);\n    if (!group.isolated && !group.smask && inSMaskMode && group.needsIsolation) {\n      groupCtx.save();\n      groupCtx.setTransform(1, 0, 0, 1, 0, 0);\n      groupCtx.drawImage(currentCtx.canvas, -offsetX, -offsetY);\n      groupCtx.restore();\n    }\n    if (group.bbox) {\n      let clip = new Path2D();\n      const [x0, y0, x1, y1] = group.bbox;\n      clip.rect(x0, y0, x1 - x0, y1 - y0);\n      if (group.matrix) {\n        const path = new Path2D();\n        path.addPath(clip, new DOMMatrix(group.matrix));\n        clip = path;\n      }\n      groupCtx.clip(clip);\n    }\n    if (group.smask) {\n      this.smaskStack.push({\n        canvas: scratchCanvas.canvas,\n        context: groupCtx,\n        offsetX,\n        offsetY,\n        subtype: group.smask.subtype,\n        backdrop: group.smask.backdrop,\n        transferMap: group.smask.transferMap || null\n      });\n    }\n    if (!group.smask || this.dependencyTracker) {\n      currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n      currentCtx.translate(offsetX, offsetY);\n      currentCtx.save();\n    }\n    copyCtxState(currentCtx, groupCtx);\n    this.ctx = groupCtx;\n    this.dependencyTracker?.inheritSimpleDataAsFutureForcedDependencies([\"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\"]).pushBaseTransform(currentCtx);\n    this.setGState(opIdx, [[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1], [\"TR\", null]]);\n    this.groupStack.push(currentCtx);\n    this.#groupStackMeta.push({\n      backdropCtx,\n      savedKnockoutLevel,\n      offsetX,\n      offsetY,\n      hasInnerBackdrop,\n      knockoutMaskEntry,\n      knockoutTempEntry: null,\n      knockoutBackdropEntry: null\n    });\n    this.groupLevel++;\n  }\n  endGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.groupLevel--;\n    const groupCtx = this.ctx;\n    const ctx = this.groupStack.pop();\n    const groupMeta = this.#groupStackMeta.pop();\n    if (groupMeta) {\n      this.#knockoutGroupLevel = groupMeta.savedKnockoutLevel;\n    }\n    if (ctx === null) {\n      this.restore(opIdx);\n      return;\n    }\n    if (group.isGray) {\n      this.#convertGroupToGray(groupCtx);\n    }\n    this.ctx = ctx;\n    this.ctx.imageSmoothingEnabled = false;\n    this.dependencyTracker?.popBaseTransform();\n    if (group.smask) {\n      this.tempSMask = this.smaskStack.pop();\n      this.restore(opIdx);\n      if (this.dependencyTracker) {\n        this.ctx.restore();\n        if (this.inSMaskMode) {\n          this.ctx.setTransform(this.suspendedCtx.getTransform());\n        }\n      }\n      this.#destroyKnockoutPools(groupMeta);\n    } else {\n      this.ctx.restore();\n      const currentMtx = getCurrentTransform(this.ctx);\n      this.restore(opIdx);\n      this.ctx.save();\n      this.ctx.setTransform(...currentMtx);\n      const dirtyBox = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx, dirtyBox);\n      const parentGroupMeta = this.#groupStackMeta.at(-1);\n      if (this.#knockoutGroupLevel > 0) {\n        if (groupMeta.hasInnerBackdrop) {\n          const {\n            width,\n            height\n          } = groupCtx.canvas;\n          const colorEntry = this.canvasFactory.create(width, height);\n          const colorCtx = colorEntry.context;\n          colorCtx.drawImage(ctx.canvas, groupMeta.offsetX, groupMeta.offsetY, width, height, 0, 0, width, height);\n          colorCtx.globalCompositeOperation = \"source-over\";\n          colorCtx.drawImage(groupCtx.canvas, 0, 0);\n          const shapeMaskEntry = this.#createKnockoutMaskCanvas(groupCtx.canvas);\n          colorCtx.globalCompositeOperation = \"destination-in\";\n          colorCtx.drawImage(shapeMaskEntry.canvas, 0, 0);\n          const sourceCompositeOperation = this.ctx.globalCompositeOperation;\n          const sourceAlpha = this.ctx.globalAlpha;\n          const sourceFilter = this.ctx.filter;\n          this.ctx.save();\n          this.ctx.setTransform(...currentMtx);\n          this.ctx.globalAlpha = 1;\n          if (FeatureTest.isCanvasFilterSupported) {\n            this.ctx.filter = \"none\";\n          }\n          this.ctx.globalCompositeOperation = \"destination-out\";\n          this.ctx.drawImage(shapeMaskEntry.canvas, 0, 0);\n          this.ctx.globalCompositeOperation = sourceCompositeOperation;\n          this.ctx.globalAlpha = sourceAlpha;\n          if (FeatureTest.isCanvasFilterSupported) {\n            this.ctx.filter = sourceFilter ?? \"none\";\n          }\n          this.ctx.drawImage(colorEntry.canvas, 0, 0);\n          this.ctx.restore();\n          this.canvasFactory.destroy(shapeMaskEntry);\n          this.canvasFactory.destroy(colorEntry);\n        } else {\n          const backdropCtx = parentGroupMeta?.backdropCtx ?? null;\n          this.#compositeKnockoutSurface(this.ctx, groupCtx.canvas, {\n            backdropCanvas: backdropCtx?.canvas ?? null,\n            destTransform: currentMtx,\n            backdropOffset: backdropCtx ? [parentGroupMeta.offsetX + groupMeta.offsetX, parentGroupMeta.offsetY + groupMeta.offsetY] : [0, 0],\n            sourceAlpha: this.ctx.globalAlpha,\n            sourceFilter: this.ctx.filter\n          });\n        }\n      } else {\n        this.ctx.drawImage(groupCtx.canvas, 0, 0);\n      }\n      this.ctx.restore();\n      this.canvasFactory.destroy({\n        canvas: groupCtx.canvas,\n        context: groupCtx\n      });\n      this.#destroyKnockoutPools(groupMeta);\n      this.compose(dirtyBox);\n    }\n  }\n  #convertGroupToGray(groupCtx) {\n    const {\n      canvas\n    } = groupCtx;\n    const {\n      width,\n      height\n    } = canvas;\n    if (FeatureTest.isCanvasFilterSupported) {\n      groupCtx.save();\n      groupCtx.setTransform(1, 0, 0, 1, 0, 0);\n      groupCtx.filter = \"grayscale(1)\";\n      groupCtx.globalAlpha = 1;\n      groupCtx.globalCompositeOperation = \"copy\";\n      groupCtx.drawImage(canvas, 0, 0);\n      groupCtx.restore();\n      return;\n    }\n    const imageData = groupCtx.getImageData(0, 0, width, height);\n    const {\n      data\n    } = imageData;\n    for (let i = 0, ii = data.length; i < ii; i += 4) {\n      const gray = data[i] * 0.2126 + data[i + 1] * 0.7152 + data[i + 2] * 0.0722 + 0.5 | 0;\n      data[i] = data[i + 1] = data[i + 2] = gray;\n    }\n    groupCtx.putImageData(imageData, 0, 0);\n  }\n  #destroyKnockoutPools(groupMeta) {\n    if (!groupMeta) {\n      return;\n    }\n    if (groupMeta.knockoutMaskEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutMaskEntry);\n      groupMeta.knockoutMaskEntry = null;\n    }\n    if (groupMeta.knockoutTempEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutTempEntry);\n      groupMeta.knockoutTempEntry = null;\n    }\n    if (groupMeta.knockoutBackdropEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutBackdropEntry);\n      groupMeta.knockoutBackdropEntry = null;\n    }\n  }\n  beginAnnotation(opIdx, id, rect, transform, matrix, hasOwnCanvas, canvasName) {\n    this.#restoreInitialState();\n    resetCtxToDefault(this.ctx);\n    this.ctx.save();\n    this.save(opIdx);\n    if (this.baseTransform) {\n      this.ctx.setTransform(...this.baseTransform);\n    }\n    if (rect) {\n      const width = rect[2] - rect[0];\n      const height = rect[3] - rect[1];\n      if (hasOwnCanvas && this.annotationCanvasMap) {\n        transform = transform.slice();\n        transform[4] -= rect[0];\n        transform[5] -= rect[1];\n        rect = rect.slice();\n        rect[0] = rect[1] = 0;\n        rect[2] = width;\n        rect[3] = height;\n        Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);\n        const {\n          viewportScale\n        } = this;\n        const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);\n        const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);\n        this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);\n        const {\n          canvas,\n          context\n        } = this.annotationCanvas;\n        if (canvasName) {\n          const canvases = this.annotationCanvasMap.getOrInsertComputed(id, makeArr);\n          canvas.setAttribute(\"data-canvas-name\", canvasName);\n          const index = canvases.findIndex(c => c.getAttribute(\"data-canvas-name\") === canvasName);\n          if (index === -1) {\n            canvases.push(canvas);\n          } else {\n            canvases[index] = canvas;\n          }\n        } else {\n          this.annotationCanvasMap.set(id, canvas);\n        }\n        this.annotationCanvas.savedCtx = this.ctx;\n        this.ctx = context;\n        this.ctx.save();\n        this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);\n        resetCtxToDefault(this.ctx);\n      } else {\n        resetCtxToDefault(this.ctx);\n        this.endPath(opIdx);\n        const clip = new Path2D();\n        clip.rect(rect[0], rect[1], width, height);\n        this.ctx.clip(clip);\n      }\n    }\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.baseTransformStack.push(this.baseTransform);\n    this.transform(opIdx, ...transform);\n    this.transform(opIdx, ...matrix);\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n  endAnnotation(opIdx) {\n    if (this.annotationCanvas) {\n      this.ctx.restore();\n      this.#drawFilter();\n      this.ctx = this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas;\n    }\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n  paintImageMaskXObject(opIdx, img) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const count = img.count;\n    img = this.getObject(opIdx, img.data, img);\n    img.count = count;\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const mask = this._createMaskCanvas(opIdx, img);\n    const maskCanvas = mask.canvas;\n    ctx.save();\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n    this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, mask.offsetX, mask.offsetX + maskCanvas.width, mask.offsetY, mask.offsetY + maskCanvas.height).recordOperation(opIdx);\n    ctx.restore();\n    if (mask.canvasEntry) {\n      this.canvasFactory.destroy(mask.canvasEntry);\n    }\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  paintImageMaskXObjectRepeat(opIdx, img, scaleX, skewX = 0, skewY = 0, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    img = this.getObject(opIdx, img.data, img);\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    ctx.save();\n    const currentTransform = getCurrentTransform(ctx);\n    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n    const mask = this._createMaskCanvas(opIdx, img);\n    ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);\n    this.dependencyTracker?.resetBBox(opIdx);\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);\n      ctx.drawImage(mask.canvas, trans[4], trans[5]);\n      this.dependencyTracker?.recordBBox(opIdx, this.ctx, trans[4], trans[4] + mask.canvas.width, trans[5], trans[5] + mask.canvas.height);\n    }\n    ctx.restore();\n    if (mask.canvasEntry) {\n      this.canvasFactory.destroy(mask.canvasEntry);\n    }\n    this.compose();\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintImageMaskXObjectGroup(opIdx, images) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    this.dependencyTracker?.resetBBox(opIdx).recordDependencies(opIdx, Dependencies.transformAndFill);\n    for (const image of images) {\n      const {\n        data,\n        width,\n        height,\n        transform\n      } = image;\n      const maskCanvas = this.canvasFactory.create(width, height);\n      const maskCtx = maskCanvas.context;\n      maskCtx.save();\n      const img = this.getObject(opIdx, data, image);\n      putBinaryImageMask(maskCtx, img);\n      maskCtx.globalCompositeOperation = \"source-in\";\n      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx) : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n      maskCtx.restore();\n      ctx.save();\n      ctx.transform(...transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n      this.canvasFactory.destroy(maskCanvas);\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, width, 0, height);\n      ctx.restore();\n    }\n    this.compose();\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintImageXObject(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    this.paintInlineImageXObject(opIdx, imgData);\n  }\n  paintImageXObjectRepeat(opIdx, objId, scaleX, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const map = [];\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      map.push({\n        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n        x: 0,\n        y: 0,\n        w: width,\n        h: height\n      });\n    }\n    this.paintInlineImageXObjectGroup(opIdx, imgData, map);\n  }\n  applyTransferMapsToCanvas(ctx) {\n    if (this.current.transferMaps !== \"none\") {\n      ctx.filter = this.current.transferMaps;\n      ctx.drawImage(ctx.canvas, 0, 0);\n      ctx.filter = \"none\";\n    }\n    return ctx.canvas;\n  }\n  applyTransferMapsToBitmap(imgData) {\n    if (this.current.transferMaps === \"none\") {\n      return {\n        img: imgData.bitmap,\n        canvasEntry: null\n      };\n    }\n    const {\n      bitmap,\n      width,\n      height\n    } = imgData;\n    const tmpCanvas = this.canvasFactory.create(width, height);\n    const tmpCtx = tmpCanvas.context;\n    tmpCtx.filter = this.current.transferMaps;\n    tmpCtx.drawImage(bitmap, 0, 0);\n    tmpCtx.filter = \"none\";\n    return {\n      img: tmpCanvas.canvas,\n      canvasEntry: tmpCanvas\n    };\n  }\n  paintInlineImageXObject(opIdx, imgData) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    this.save(opIdx);\n    const {\n      filter\n    } = ctx;\n    if (filter !== \"none\" && filter !== \"\") {\n      ctx.filter = \"none\";\n    }\n    ctx.scale(1 / width, -1 / height);\n    let imgToPaint;\n    let inlineImgCanvas = null;\n    if (imgData.bitmap) {\n      const result = this.applyTransferMapsToBitmap(imgData);\n      imgToPaint = result.img;\n      inlineImgCanvas = result.canvasEntry;\n    } else {\n      const tmpCanvas = this.canvasFactory.create(width, height);\n      putBinaryImageData(tmpCanvas.context, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCanvas.context);\n      inlineImgCanvas = tmpCanvas;\n    }\n    const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx));\n    ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate);\n    if (this.dependencyTracker) {\n      this.dependencyTracker.resetBBox(opIdx).recordBBox(opIdx, ctx, 0, width, -height, 0).recordDependencies(opIdx, Dependencies.imageXObject).recordOperation(opIdx);\n      this.imagesTracker?.record(ctx, width, height, this.dependencyTracker.clipBox);\n    }\n    drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);\n    if (scaled.tmpCanvas) {\n      this.canvasFactory.destroy(scaled.tmpCanvas);\n    }\n    if (inlineImgCanvas) {\n      this.canvasFactory.destroy(inlineImgCanvas);\n    }\n    this.compose();\n    this.restore(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintInlineImageXObjectGroup(opIdx, imgData, map) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    let imgToPaint;\n    let inlineImgCanvas = null;\n    if (imgData.bitmap) {\n      imgToPaint = imgData.bitmap;\n    } else {\n      const w = imgData.width;\n      const h = imgData.height;\n      const tmpCanvas = this.canvasFactory.create(w, h);\n      putBinaryImageData(tmpCanvas.context, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCanvas.context);\n      inlineImgCanvas = tmpCanvas;\n    }\n    this.dependencyTracker?.resetBBox(opIdx);\n    for (const entry of map) {\n      ctx.save();\n      ctx.transform(...entry.transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, 1, -1, 0);\n      ctx.restore();\n    }\n    if (inlineImgCanvas) {\n      this.canvasFactory.destroy(inlineImgCanvas);\n    }\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  paintSolidColorImageMask(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, 0, 1, 0, 1).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx);\n    this.ctx.fillRect(0, 0, 1, 1);\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  markPoint(opIdx, tag) {}\n  markPointProps(opIdx, tag, properties) {}\n  beginMarkedContent(opIdx, tag) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    this.markedContentStack.push({\n      visible: true\n    });\n  }\n  beginMarkedContentProps(opIdx, tag, properties) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    if (tag === \"OC\") {\n      this.markedContentStack.push({\n        visible: this.optionalContentConfig.isVisible(properties)\n      });\n    } else {\n      this.markedContentStack.push({\n        visible: true\n      });\n    }\n    this.contentVisible = this.isContentVisible();\n  }\n  endMarkedContent(opIdx) {\n    this.dependencyTracker?.endMarkedContent(opIdx);\n    this.markedContentStack.pop();\n    this.contentVisible = this.isContentVisible();\n  }\n  beginCompat(opIdx) {}\n  endCompat(opIdx) {}\n  consumePath(opIdx, path, clipBox) {\n    const isEmpty = this.current.isEmptyClip();\n    if (this.pendingClip) {\n      this.current.updateClipFromPath();\n    }\n    if (!this.pendingClip) {\n      this.compose(clipBox);\n    }\n    const ctx = this.ctx;\n    if (this.pendingClip) {\n      if (!isEmpty) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(path, \"evenodd\");\n        } else {\n          ctx.clip(path);\n        }\n      }\n      this.pendingClip = null;\n      this.dependencyTracker?.bboxToClipBoxDropOperation(opIdx).recordFutureForcedDependency(\"clipPath\", opIdx);\n    } else {\n      this.dependencyTracker?.recordOperation(opIdx);\n    }\n    this.current.startNewPathAndClipBox(this.current.clipBox);\n  }\n  getSinglePixelWidth() {\n    if (!this._cachedGetSinglePixelWidth) {\n      const m = getCurrentTransform(this.ctx);\n      if (m[1] === 0 && m[2] === 0) {\n        this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n      } else {\n        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n        const normX = Math.hypot(m[0], m[2]);\n        const normY = Math.hypot(m[1], m[3]);\n        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n      }\n    }\n    return this._cachedGetSinglePixelWidth;\n  }\n  getScaleForStroking() {\n    if (this._cachedScaleForStroking[0] === -1) {\n      const {\n        lineWidth\n      } = this.current;\n      const {\n        a,\n        b,\n        c,\n        d\n      } = this.ctx.getTransform();\n      let scaleX, scaleY;\n      if (b === 0 && c === 0) {\n        const normX = Math.abs(a);\n        const normY = Math.abs(d);\n        if (normX === normY) {\n          if (lineWidth === 0) {\n            scaleX = scaleY = 1 / normX;\n          } else {\n            const scaledLineWidth = normX * lineWidth;\n            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n          }\n        } else if (lineWidth === 0) {\n          scaleX = 1 / normX;\n          scaleY = 1 / normY;\n        } else {\n          const scaledXLineWidth = normX * lineWidth;\n          const scaledYLineWidth = normY * lineWidth;\n          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n        }\n      } else {\n        const absDet = Math.abs(a * d - b * c);\n        const normX = Math.hypot(a, b);\n        const normY = Math.hypot(c, d);\n        if (lineWidth === 0) {\n          scaleX = normY / absDet;\n          scaleY = normX / absDet;\n        } else {\n          const baseArea = lineWidth * absDet;\n          scaleX = normY > baseArea ? normY / baseArea : 1;\n          scaleY = normX > baseArea ? normX / baseArea : 1;\n        }\n      }\n      this._cachedScaleForStroking[0] = scaleX;\n      this._cachedScaleForStroking[1] = scaleY;\n    }\n    return this._cachedScaleForStroking;\n  }\n  rescaleAndStroke(path, saveRestore) {\n    const {\n      ctx,\n      current: {\n        lineWidth\n      }\n    } = this;\n    const [scaleX, scaleY] = this.getScaleForStroking();\n    if (scaleX === scaleY) {\n      ctx.lineWidth = (lineWidth || 1) * scaleX;\n      ctx.stroke(path);\n      return;\n    }\n    const dashes = ctx.getLineDash();\n    if (saveRestore) {\n      ctx.save();\n    }\n    ctx.scale(scaleX, scaleY);\n    SCALE_MATRIX.a = 1 / scaleX;\n    SCALE_MATRIX.d = 1 / scaleY;\n    const newPath = new Path2D();\n    newPath.addPath(path, SCALE_MATRIX);\n    if (dashes.length > 0) {\n      const scale = Math.max(scaleX, scaleY);\n      ctx.setLineDash(dashes.map(x => x / scale));\n      ctx.lineDashOffset /= scale;\n    }\n    ctx.lineWidth = lineWidth || 1;\n    ctx.stroke(newPath);\n    if (saveRestore) {\n      ctx.restore();\n    }\n  }\n  isContentVisible() {\n    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n      if (!this.markedContentStack[i].visible) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\nfor (const op in OPS) {\n  if (CanvasGraphics.prototype[op] !== undefined) {\n    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n  }\n}\n\n;// ./src/shared/base_pdf_stream.js\n\n\n\n\n\n\n\n\n\nclass BasePDFStream {\n  #PDFStreamReader = null;\n  #PDFStreamRangeReader = null;\n  _fullReader = null;\n  _rangeReaders = new Set();\n  _source = null;\n  constructor(source, PDFStreamReader, PDFStreamRangeReader) {\n    this._source = source;\n    this.#PDFStreamReader = PDFStreamReader;\n    this.#PDFStreamRangeReader = PDFStreamRangeReader;\n  }\n  get _progressiveDataLength() {\n    return this._fullReader?._loaded ?? 0;\n  }\n  getFullReader() {\n    assert(!this._fullReader, \"BasePDFStream.getFullReader can only be called once.\");\n    return this._fullReader = new this.#PDFStreamReader(this);\n  }\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new this.#PDFStreamRangeReader(this, begin, end);\n    this._rangeReaders.add(reader);\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    this._fullReader?.cancel(reason);\n    for (const reader of new Set(this._rangeReaders)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass BasePDFStreamReader {\n  onProgress = null;\n  _contentLength = 0;\n  _filename = null;\n  _headersCapability = Promise.withResolvers();\n  _isRangeSupported = false;\n  _isStreamingSupported = false;\n  _loaded = 0;\n  _stream = null;\n  constructor(stream) {\n    this._stream = stream;\n  }\n  _callOnProgress() {\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength\n    });\n  }\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n  get filename() {\n    return this._filename;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\nclass BasePDFStreamRangeReader {\n  _stream = null;\n  constructor(stream, begin, end) {\n    this._stream = stream;\n  }\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\n\n;// ./src/display/content_disposition.js\n\n\n\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  let needsEncodingFixup = true;\n  let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = unescape(filename);\n    filename = rfc5987decode(filename);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  tmp = rfc2231getparam(contentDisposition);\n  if (tmp) {\n    const filename = rfc2047decode(tmp);\n    return fixupEncoding(filename);\n  }\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\n  }\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n      try {\n        const decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        const buffer = stringToBytes(value);\n        value = decoder.decode(buffer);\n        needsEncodingFixup = false;\n      } catch {}\n    }\n    return value;\n  }\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      value = textdecode(\"utf-8\", value);\n      if (needsEncodingFixup) {\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n    return value;\n  }\n  function rfc2231getparam(contentDispositionStr) {\n    const matches = [];\n    let match;\n    const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      let [, n, quot, part] = match;\n      n = parseInt(n, 10);\n      if (n in matches) {\n        if (n === 0) {\n          break;\n        }\n        continue;\n      }\n      matches[n] = [quot, part];\n    }\n    const parts = [];\n    for (let n = 0; n < matches.length; ++n) {\n      if (!(n in matches)) {\n        break;\n      }\n      let [quot, part] = matches[n];\n      part = rfc2616unquote(part);\n      if (quot) {\n        part = unescape(part);\n        if (n === 0) {\n          part = rfc5987decode(part);\n        }\n      }\n      parts.push(part);\n    }\n    return parts.join(\"\");\n  }\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      const parts = value.slice(1).split('\\\\\"');\n      for (let i = 0; i < parts.length; ++i) {\n        const quotindex = parts[i].indexOf('\"');\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1;\n        }\n        parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n      }\n      value = parts.join('\"');\n    }\n    return value;\n  }\n  function rfc5987decode(extvalue) {\n    const encodingend = extvalue.indexOf(\"'\");\n    if (encodingend === -1) {\n      return extvalue;\n    }\n    const encoding = extvalue.slice(0, encodingend);\n    const langvalue = extvalue.slice(encodingend + 1);\n    const value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n  function rfc2047decode(value) {\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n    return value.replaceAll(/=\\?([\\w-]*)\\?([QB])\\?((?:[^?]|\\?(?!=))*)\\?=/gi, function (matches, charset, encoding, text) {\n      if (encoding === \"q\" || encoding === \"Q\") {\n        text = text.replaceAll(\"_\", \" \");\n        text = text.replaceAll(/=([0-9a-f]{2})/gi, function (match, hex) {\n          return String.fromCharCode(parseInt(hex, 16));\n        });\n        return textdecode(charset, text);\n      }\n      try {\n        text = atob(text);\n      } catch {}\n      return textdecode(charset, text);\n    });\n  }\n  return \"\";\n}\n\n;// ./src/display/network_utils.js\n\n\n\n\n\nfunction createHeaders(isHttp, httpHeaders) {\n  const headers = new Headers();\n  if (!isHttp || !httpHeaders || typeof httpHeaders !== \"object\") {\n    return headers;\n  }\n  for (const key in httpHeaders) {\n    const val = httpHeaders[key];\n    if (val !== undefined) {\n      headers.append(key, val);\n    }\n  }\n  return headers;\n}\nfunction getResponseOrigin(url) {\n  return URL.parse(url)?.origin ?? null;\n}\nfunction validateRangeRequestCapabilities({\n  responseHeaders,\n  isHttp,\n  rangeChunkSize,\n  disableRange\n}) {\n  const rv = {\n    contentLength: 0,\n    isRangeSupported: false\n  };\n  const length = parseInt(responseHeaders.get(\"Content-Length\"), 10);\n  if (!Number.isInteger(length)) {\n    return rv;\n  }\n  rv.contentLength = length;\n  if (length <= 2 * rangeChunkSize) {\n    return rv;\n  }\n  if (disableRange || !isHttp) {\n    return rv;\n  }\n  if (responseHeaders.get(\"Accept-Ranges\") !== \"bytes\") {\n    return rv;\n  }\n  const contentEncoding = responseHeaders.get(\"Content-Encoding\") || \"identity\";\n  if (contentEncoding === \"identity\") {\n    rv.isRangeSupported = true;\n  }\n  return rv;\n}\nfunction extractFilenameFromHeader(responseHeaders) {\n  const contentDisposition = responseHeaders.get(\"Content-Disposition\");\n  if (contentDisposition) {\n    let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch {}\n    }\n    if (isPdfFile(filename)) {\n      return filename;\n    }\n  }\n  return null;\n}\nfunction createResponseError(status, url) {\n  return new ResponseException(`Unexpected server response (${status}) while retrieving PDF \"${url.href}\".`, status, status === 404 || status === 0 && url.protocol === \"file:\");\n}\nfunction ensureResponseOrigin(rangeOrigin, origin) {\n  if (rangeOrigin !== origin) {\n    throw new Error(`Expected range response-origin \"${rangeOrigin}\" to match \"${origin}\".`);\n  }\n}\n\n;// ./src/display/fetch_stream.js\n\n\n\n\n\n\n\n\n\nfunction fetchUrl(url, headers, withCredentials, abortController) {\n  return fetch(url, {\n    method: \"GET\",\n    headers,\n    signal: abortController.signal,\n    mode: \"cors\",\n    credentials: withCredentials ? \"include\" : \"same-origin\",\n    redirect: \"follow\"\n  });\n}\nfunction ensureResponseStatus(status, url) {\n  if (status !== 200 && status !== 206) {\n    throw createResponseError(status, url);\n  }\n}\nfunction getArrayBuffer(val) {\n  if (val instanceof Uint8Array) {\n    return val.buffer;\n  }\n  if (val instanceof ArrayBuffer) {\n    return val;\n  }\n  throw new Error(`getArrayBuffer - unexpected data: ${val}`);\n}\nclass PDFFetchStream extends BasePDFStream {\n  _responseOrigin = null;\n  constructor(source) {\n    super(source, PDFFetchStreamReader, PDFFetchStreamRangeReader);\n    const {\n      httpHeaders,\n      url\n    } = source;\n    assert(/https?:/.test(url.protocol), \"PDFFetchStream only supports http(s):// URLs.\");\n    this.headers = createHeaders(true, httpHeaders);\n  }\n}\nclass PDFFetchStreamReader extends BasePDFStreamReader {\n  _abortController = new AbortController();\n  _reader = null;\n  constructor(stream) {\n    super(stream);\n    const {\n      disableRange,\n      disableStream,\n      rangeChunkSize,\n      url,\n      withCredentials\n    } = stream._source;\n    this._isStreamingSupported = !disableStream;\n    const headers = new Headers(stream.headers);\n    fetchUrl(url, headers, withCredentials, this._abortController).then(response => {\n      stream._responseOrigin = getResponseOrigin(response.url);\n      ensureResponseStatus(response.status, url);\n      this._reader = response.body.getReader();\n      const responseHeaders = response.headers;\n      const {\n        contentLength,\n        isRangeSupported\n      } = validateRangeRequestCapabilities({\n        responseHeaders,\n        isHttp: true,\n        rangeChunkSize,\n        disableRange\n      });\n      this._contentLength = contentLength;\n      this._isRangeSupported = isRangeSupported;\n      this._filename = extractFilenameFromHeader(responseHeaders);\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this.cancel(new AbortException(\"Streaming is disabled.\"));\n      }\n      this._headersCapability.resolve();\n    }).catch(this._headersCapability.reject);\n  }\n  async read() {\n    await this._headersCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this._callOnProgress();\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\nclass PDFFetchStreamRangeReader extends BasePDFStreamRangeReader {\n  _abortController = new AbortController();\n  _readCapability = Promise.withResolvers();\n  _reader = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    const {\n      url,\n      withCredentials\n    } = stream._source;\n    const headers = new Headers(stream.headers);\n    headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n    fetchUrl(url, headers, withCredentials, this._abortController).then(response => {\n      const responseOrigin = getResponseOrigin(response.url);\n      ensureResponseOrigin(responseOrigin, stream._responseOrigin);\n      ensureResponseStatus(response.status, url);\n      this._reader = response.body.getReader();\n      this._readCapability.resolve();\n    }).catch(this._readCapability.reject);\n  }\n  async read() {\n    await this._readCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\n\n;// ./src/display/transport_stream.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction transport_stream_getArrayBuffer(val) {\n  return val instanceof Uint8Array && val.byteLength === val.buffer.byteLength ? val.buffer : new Uint8Array(val).buffer;\n}\nfunction endRequests() {\n  for (const capability of this._requests) {\n    capability.resolve({\n      value: undefined,\n      done: true\n    });\n  }\n  this._requests.length = 0;\n}\nclass PDFDataTransportStream extends BasePDFStream {\n  _progressiveDone = false;\n  _queuedChunks = [];\n  constructor(source) {\n    super(source, PDFDataTransportStreamReader, PDFDataTransportStreamRangeReader);\n    const {\n      pdfDataRangeTransport\n    } = source;\n    const {\n      initialData,\n      progressiveDone\n    } = pdfDataRangeTransport;\n    if (initialData?.length > 0) {\n      const buffer = transport_stream_getArrayBuffer(initialData);\n      this._queuedChunks.push(buffer);\n    }\n    this._progressiveDone = progressiveDone;\n    const listener = args => {\n      switch (args.type) {\n        case \"range\":\n        case \"progressiveRead\":\n          this.#onReceiveData(args.begin, args.chunk);\n          break;\n        case \"progressiveDone\":\n          this._fullReader?.progressiveDone();\n          this._progressiveDone = true;\n          break;\n      }\n    };\n    pdfDataRangeTransport.transportReady(listener);\n  }\n  #onReceiveData(begin, chunk) {\n    const buffer = transport_stream_getArrayBuffer(chunk);\n    if (begin === undefined) {\n      if (this._fullReader) {\n        this._fullReader._enqueue(buffer);\n      } else {\n        this._queuedChunks.push(buffer);\n      }\n    } else {\n      const rangeReader = this._rangeReaders.keys().find(r => r._begin === begin);\n      assert(rangeReader, \"#onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n      rangeReader._enqueue(buffer);\n    }\n  }\n  getFullReader() {\n    const reader = super.getFullReader();\n    this._queuedChunks = null;\n    return reader;\n  }\n  getRangeReader(begin, end) {\n    const reader = super.getRangeReader(begin, end);\n    if (reader) {\n      reader.onDone = () => this._rangeReaders.delete(reader);\n      this._source.pdfDataRangeTransport.requestDataRange(begin, end);\n    }\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    super.cancelAllRequests(reason);\n    this._source.pdfDataRangeTransport.abort();\n  }\n}\nclass PDFDataTransportStreamReader extends BasePDFStreamReader {\n  #endRequests = endRequests.bind(this);\n  _done = false;\n  _queuedChunks = null;\n  _requests = [];\n  constructor(stream) {\n    super(stream);\n    const {\n      pdfDataRangeTransport,\n      disableRange,\n      disableStream\n    } = stream._source;\n    const {\n      length,\n      contentDispositionFilename\n    } = pdfDataRangeTransport;\n    this._queuedChunks = stream._queuedChunks || [];\n    for (const chunk of this._queuedChunks) {\n      this._loaded += chunk.byteLength;\n    }\n    this._done = stream._progressiveDone;\n    this._contentLength = length;\n    this._isStreamingSupported = !disableStream;\n    this._isRangeSupported = !disableRange;\n    if (isPdfFile(contentDispositionFilename)) {\n      this._filename = contentDispositionFilename;\n    }\n    this._headersCapability.resolve();\n    const loaded = this._loaded;\n    Promise.resolve().then(() => {\n      if (loaded > 0 && this._loaded === loaded) {\n        this._callOnProgress();\n      }\n    });\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunks.push(chunk);\n    }\n    this._loaded += chunk.byteLength;\n    this._callOnProgress();\n  }\n  async read() {\n    if (this._queuedChunks.length > 0) {\n      const chunk = this._queuedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n  }\n  progressiveDone() {\n    this._done ||= true;\n    if (this._queuedChunks.length === 0) {\n      this.#endRequests();\n    }\n  }\n}\nclass PDFDataTransportStreamRangeReader extends BasePDFStreamRangeReader {\n  #endRequests = endRequests.bind(this);\n  onDone = null;\n  _begin = -1;\n  _done = false;\n  _queuedChunk = null;\n  _requests = [];\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    this._begin = begin;\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length === 0) {\n      this._queuedChunk = chunk;\n    } else {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n      this.#endRequests();\n    }\n    this._done = true;\n    this.onDone?.();\n  }\n  async read() {\n    if (this._queuedChunk) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n    this.onDone?.();\n  }\n}\n\n;// ./src/display/network.js\n\n\n\n\n\n\n\n\n\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\nfunction network_getArrayBuffer(val) {\n  return typeof val !== \"string\" ? val : stringToBytes(val).buffer;\n}\nclass PDFNetworkStream extends BasePDFStream {\n  #pendingRequests = new WeakMap();\n  _responseOrigin = null;\n  constructor(source) {\n    super(source, PDFNetworkStreamReader, PDFNetworkStreamRangeReader);\n    const {\n      httpHeaders,\n      url\n    } = source;\n    this.url = url;\n    this.isHttp = /https?:/.test(url.protocol);\n    this.headers = createHeaders(this.isHttp, httpHeaders);\n  }\n  _request(args) {\n    const xhr = new XMLHttpRequest();\n    const pendingRequest = {\n      validateStatus: null,\n      onHeadersReceived: args.onHeadersReceived,\n      onDone: args.onDone,\n      onError: args.onError,\n      onProgress: args.onProgress\n    };\n    this.#pendingRequests.set(xhr, pendingRequest);\n    xhr.open(\"GET\", this.url);\n    xhr.withCredentials = this._source.withCredentials;\n    for (const [key, val] of this.headers) {\n      xhr.setRequestHeader(key, val);\n    }\n    if (this.isHttp && \"begin\" in args && \"end\" in args) {\n      xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n      pendingRequest.validateStatus = status => status === PARTIAL_CONTENT_RESPONSE || status === OK_RESPONSE;\n    } else {\n      pendingRequest.validateStatus = status => status === OK_RESPONSE;\n    }\n    xhr.responseType = \"arraybuffer\";\n    assert(args.onError, \"Expected `onError` callback to be provided.\");\n    xhr.onerror = () => args.onError(xhr.status);\n    xhr.onreadystatechange = this.#onStateChange.bind(this, xhr);\n    xhr.onprogress = this.#onProgress.bind(this, xhr);\n    xhr.send(null);\n    return xhr;\n  }\n  #onProgress(xhr, evt) {\n    const pendingRequest = this.#pendingRequests.get(xhr);\n    pendingRequest?.onProgress?.(evt);\n  }\n  #onStateChange(xhr, evt) {\n    const pendingRequest = this.#pendingRequests.get(xhr);\n    if (!pendingRequest) {\n      return;\n    }\n    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n      pendingRequest.onHeadersReceived();\n      delete pendingRequest.onHeadersReceived;\n    }\n    if (xhr.readyState !== 4) {\n      return;\n    }\n    if (!this.#pendingRequests.has(xhr)) {\n      return;\n    }\n    this.#pendingRequests.delete(xhr);\n    if (xhr.status === 0 && this.isHttp) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n    const xhrStatus = xhr.status || OK_RESPONSE;\n    if (!pendingRequest.validateStatus(xhrStatus)) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n    const chunk = network_getArrayBuffer(xhr.response);\n    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n      const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n      if (/bytes \\d+-\\d+\\/\\d+/.test(rangeHeader)) {\n        pendingRequest.onDone(chunk);\n      } else {\n        warn(`Missing or invalid \"Content-Range\" header.`);\n        pendingRequest.onError(0);\n      }\n    } else if (chunk) {\n      pendingRequest.onDone(chunk);\n    } else {\n      pendingRequest.onError(xhr.status);\n    }\n  }\n  _abortRequest(xhr) {\n    if (this.#pendingRequests.has(xhr)) {\n      this.#pendingRequests.delete(xhr);\n      xhr.abort();\n    }\n  }\n  getRangeReader(begin, end) {\n    const reader = super.getRangeReader(begin, end);\n    if (reader) {\n      reader.onClosed = () => this._rangeReaders.delete(reader);\n    }\n    return reader;\n  }\n}\nclass PDFNetworkStreamReader extends BasePDFStreamReader {\n  #endRequests = endRequests.bind(this);\n  _cachedChunks = [];\n  _done = false;\n  _requests = [];\n  _storedError = null;\n  constructor(stream) {\n    super(stream);\n    this._fullRequestXhr = stream._request({\n      onHeadersReceived: this.#onHeadersReceived.bind(this),\n      onDone: this.#onDone.bind(this),\n      onError: this.#onError.bind(this),\n      onProgress: this.#onProgress.bind(this)\n    });\n  }\n  #onHeadersReceived() {\n    const stream = this._stream;\n    const {\n      disableRange,\n      rangeChunkSize\n    } = stream._source;\n    const fullRequestXhr = this._fullRequestXhr;\n    stream._responseOrigin = getResponseOrigin(fullRequestXhr.responseURL);\n    const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();\n    const responseHeaders = new Headers(rawResponseHeaders ? rawResponseHeaders.trimStart().replace(/[^\\S ]+$/, \"\").split(/[\\r\\n]+/).map(x => {\n      const [key, ...val] = x.split(\": \");\n      return [key, val.join(\": \")];\n    }) : []);\n    const {\n      contentLength,\n      isRangeSupported\n    } = validateRangeRequestCapabilities({\n      responseHeaders,\n      isHttp: stream.isHttp,\n      rangeChunkSize,\n      disableRange\n    });\n    this._contentLength = contentLength;\n    this._isRangeSupported = isRangeSupported;\n    this._filename = extractFilenameFromHeader(responseHeaders);\n    if (this._isRangeSupported) {\n      stream._abortRequest(fullRequestXhr);\n    }\n    this._headersCapability.resolve();\n  }\n  #onDone(chunk) {\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._cachedChunks.push(chunk);\n    }\n    this._done = true;\n    if (this._cachedChunks.length === 0) {\n      this.#endRequests();\n    }\n  }\n  #onError(status) {\n    this._storedError = createResponseError(status, this._stream.url);\n    this._headersCapability.reject(this._storedError);\n    for (const capability of this._requests) {\n      capability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._cachedChunks.length = 0;\n  }\n  #onProgress(evt) {\n    this.onProgress?.({\n      loaded: evt.loaded,\n      total: evt.lengthComputable ? evt.total : this._contentLength\n    });\n  }\n  async read() {\n    await this._headersCapability.promise;\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._cachedChunks.length > 0) {\n      const chunk = this._cachedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this._headersCapability.reject(reason);\n    this.#endRequests();\n    this._stream._abortRequest(this._fullRequestXhr);\n    this._fullRequestXhr = null;\n  }\n}\nclass PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {\n  #endRequests = endRequests.bind(this);\n  onClosed = null;\n  _done = false;\n  _queuedChunk = null;\n  _requests = [];\n  _storedError = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    this._requestXhr = stream._request({\n      begin,\n      end,\n      onHeadersReceived: this.#onHeadersReceived.bind(this),\n      onDone: this.#onDone.bind(this),\n      onError: this.#onError.bind(this),\n      onProgress: null\n    });\n  }\n  #onHeadersReceived() {\n    const responseOrigin = getResponseOrigin(this._requestXhr?.responseURL);\n    try {\n      ensureResponseOrigin(responseOrigin, this._stream._responseOrigin);\n    } catch (ex) {\n      this._storedError = ex;\n      this.#onError(0);\n    }\n  }\n  #onDone(chunk) {\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunk = chunk;\n    }\n    this._done = true;\n    this.#endRequests();\n    this.onClosed?.();\n  }\n  #onError(status) {\n    this._storedError ??= createResponseError(status, this._stream.url);\n    for (const capability of this._requests) {\n      capability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._queuedChunk = null;\n  }\n  async read() {\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._queuedChunk !== null) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n    this._stream._abortRequest(this._requestXhr);\n    this.onClosed?.();\n  }\n}\n\n;// ./src/display/node_stream.js\n\n\n\n\n\nfunction getReadableStream(url, opts = null) {\n  const fs = process.getBuiltinModule(\"fs\");\n  const {\n    Readable\n  } = process.getBuiltinModule(\"stream\");\n  const readStream = fs.createReadStream(url, opts);\n  return Readable.toWeb(readStream);\n}\nclass PDFNodeStream extends BasePDFStream {\n  constructor(source) {\n    super(source, PDFNodeStreamReader, PDFNodeStreamRangeReader);\n    const {\n      url\n    } = source;\n    assert(url.protocol === \"file:\", \"PDFNodeStream only supports file:// URLs.\");\n  }\n}\nclass PDFNodeStreamReader extends BasePDFStreamReader {\n  _reader = null;\n  constructor(stream) {\n    super(stream);\n    const {\n      disableRange,\n      disableStream,\n      rangeChunkSize,\n      url\n    } = stream._source;\n    this._isStreamingSupported = !disableStream;\n    const fs = process.getBuiltinModule(\"fs/promises\");\n    fs.lstat(url).then(stat => {\n      const readableStream = getReadableStream(url);\n      this._reader = readableStream.getReader();\n      const {\n        size\n      } = stat;\n      this._contentLength = size;\n      this._isRangeSupported = !disableRange && size > 2 * rangeChunkSize;\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this.cancel(new AbortException(\"Streaming is disabled.\"));\n      }\n      this._headersCapability.resolve();\n    }).catch(error => {\n      if (error.code === \"ENOENT\") {\n        error = createResponseError(0, url);\n      }\n      this._headersCapability.reject(error);\n    });\n  }\n  async read() {\n    await this._headersCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this._callOnProgress();\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n  }\n}\nclass PDFNodeStreamRangeReader extends BasePDFStreamRangeReader {\n  _readCapability = Promise.withResolvers();\n  _reader = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    const {\n      url\n    } = stream._source;\n    try {\n      const readableStream = getReadableStream(url, {\n        start: begin,\n        end: end - 1\n      });\n      this._reader = readableStream.getReader();\n      this._readCapability.resolve();\n    } catch (error) {\n      this._readCapability.reject(error);\n    }\n  }\n  async read() {\n    await this._readCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n  }\n}\n\n;// ./src/display/network_stream.js\n\n\n\n\n\nfunction getNetworkStream(url) {\n  return isValidFetchUrl(url) ? PDFFetchStream : isNodeJS ? PDFNodeStream : PDFNetworkStream;\n}\n\n;// ./src/display/worker_options.js\nclass GlobalWorkerOptions {\n  static #port = null;\n  static #src = \"\";\n  static get workerPort() {\n    return this.#port;\n  }\n  static set workerPort(val) {\n    if (!(typeof Worker !== \"undefined\" && val instanceof Worker) && val !== null) {\n      throw new Error(\"Invalid `workerPort` type.\");\n    }\n    this.#port = val;\n  }\n  static get workerSrc() {\n    return this.#src;\n  }\n  static set workerSrc(val) {\n    if (typeof val !== \"string\") {\n      throw new Error(\"Invalid `workerSrc` type.\");\n    }\n    this.#src = val;\n  }\n}\n\n;// ./src/display/metadata.js\nclass Metadata {\n  #map;\n  #data;\n  constructor({\n    parsedData,\n    rawData\n  }) {\n    this.#map = parsedData;\n    this.#data = rawData;\n  }\n  getRaw() {\n    return this.#data;\n  }\n  get(name) {\n    return this.#map.get(name) ?? null;\n  }\n  [Symbol.iterator]() {\n    return this.#map.entries();\n  }\n}\n\n;// ./src/display/optional_content_config.js\n\n\n\n\nconst INTERNAL = Symbol(\"INTERNAL\");\nclass OptionalContentGroup {\n  #isDisplay = false;\n  #isPrint = false;\n  #userSet = false;\n  #visible = true;\n  constructor(renderingIntent, {\n    name,\n    intent,\n    usage,\n    rbGroups\n  }) {\n    this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n    this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    this.name = name;\n    this.intent = intent;\n    this.usage = usage;\n    this.rbGroups = rbGroups;\n  }\n  get visible() {\n    if (this.#userSet) {\n      return this.#visible;\n    }\n    if (!this.#visible) {\n      return false;\n    }\n    const {\n      print,\n      view\n    } = this.usage;\n    if (this.#isDisplay) {\n      return view?.viewState !== \"OFF\";\n    } else if (this.#isPrint) {\n      return print?.printState !== \"OFF\";\n    }\n    return true;\n  }\n  _setVisible(internal, visible, userSet = false) {\n    if (internal !== INTERNAL) {\n      unreachable(\"Internal method `_setVisible` called.\");\n    }\n    this.#userSet = userSet;\n    this.#visible = visible;\n  }\n  get serializable() {\n    return {\n      userSet: this.#userSet,\n      visible: this.#visible\n    };\n  }\n}\nclass OptionalContentConfig {\n  #cachedGetHash = null;\n  #groups = new Map();\n  #initialHash = null;\n  #order = null;\n  #rawData;\n  creator = null;\n  name = null;\n  constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY, groupState = null) {\n    this.#rawData = data;\n    this.renderingIntent = renderingIntent;\n    if (data === null) {\n      return;\n    }\n    this.name = data.name;\n    this.creator = data.creator;\n    this.#order = data.order;\n    for (const group of data.groups) {\n      this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group));\n    }\n    if (groupState) {\n      if (groupState.size !== this.#groups.size) {\n        unreachable(\"Incorrect serialized groupState.\");\n      }\n      for (const [id, group] of groupState) {\n        this.#groups.get(id)._setVisible(INTERNAL, group.visible, group.userSet);\n      }\n    } else {\n      if (data.baseState === \"OFF\") {\n        for (const group of this.#groups.values()) {\n          group._setVisible(INTERNAL, false);\n        }\n      }\n      for (const on of data.on) {\n        this.#groups.get(on)._setVisible(INTERNAL, true);\n      }\n      for (const off of data.off) {\n        this.#groups.get(off)._setVisible(INTERNAL, false);\n      }\n    }\n    this.#initialHash = this.getHash();\n  }\n  #evaluateVisibilityExpression(array) {\n    const length = array.length;\n    if (length < 2) {\n      return true;\n    }\n    const operator = array[0];\n    for (let i = 1; i < length; i++) {\n      const element = array[i];\n      let state;\n      if (Array.isArray(element)) {\n        state = this.#evaluateVisibilityExpression(element);\n      } else if (this.#groups.has(element)) {\n        state = this.#groups.get(element).visible;\n      } else {\n        warn(`Optional content group not found: ${element}`);\n        return true;\n      }\n      switch (operator) {\n        case \"And\":\n          if (!state) {\n            return false;\n          }\n          break;\n        case \"Or\":\n          if (state) {\n            return true;\n          }\n          break;\n        case \"Not\":\n          return !state;\n        default:\n          return true;\n      }\n    }\n    return operator === \"And\";\n  }\n  isVisible(group) {\n    if (this.#groups.size === 0) {\n      return true;\n    }\n    if (!group) {\n      info(\"Optional content group not defined.\");\n      return true;\n    }\n    if (group.type === \"OCG\") {\n      if (!this.#groups.has(group.id)) {\n        warn(`Optional content group not found: ${group.id}`);\n        return true;\n      }\n      return this.#groups.get(group.id).visible;\n    } else if (group.type === \"OCMD\") {\n      if (group.expression) {\n        return this.#evaluateVisibilityExpression(group.expression);\n      }\n      if (!group.policy || group.policy === \"AnyOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      } else if (group.policy === \"AnyOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      }\n      warn(`Unknown optional content policy ${group.policy}.`);\n      return true;\n    }\n    warn(`Unknown group type ${group.type}.`);\n    return true;\n  }\n  setVisibility(id, visible = true, preserveRB = true) {\n    const group = this.#groups.get(id);\n    if (!group) {\n      warn(`Optional content group not found: ${id}`);\n      return;\n    }\n    if (preserveRB && visible && group.rbGroups.length) {\n      for (const rbGroup of group.rbGroups) {\n        for (const otherId of rbGroup) {\n          if (otherId !== id) {\n            this.#groups.get(otherId)?._setVisible(INTERNAL, false, true);\n          }\n        }\n      }\n    }\n    group._setVisible(INTERNAL, !!visible, true);\n    this.#cachedGetHash = null;\n  }\n  setOCGState({\n    state,\n    preserveRB\n  }) {\n    let operator;\n    for (const elem of state) {\n      switch (elem) {\n        case \"ON\":\n        case \"OFF\":\n        case \"Toggle\":\n          operator = elem;\n          continue;\n      }\n      const group = this.#groups.get(elem);\n      if (!group) {\n        continue;\n      }\n      switch (operator) {\n        case \"ON\":\n          this.setVisibility(elem, true, preserveRB);\n          break;\n        case \"OFF\":\n          this.setVisibility(elem, false, preserveRB);\n          break;\n        case \"Toggle\":\n          this.setVisibility(elem, !group.visible, preserveRB);\n          break;\n      }\n    }\n    this.#cachedGetHash = null;\n  }\n  get hasInitialVisibility() {\n    return this.#initialHash === null || this.getHash() === this.#initialHash;\n  }\n  getOrder() {\n    if (!this.#groups.size) {\n      return null;\n    }\n    if (this.#order) {\n      return this.#order.slice();\n    }\n    return [...this.#groups.keys()];\n  }\n  getGroup(id) {\n    return this.#groups.get(id) || null;\n  }\n  getHash() {\n    if (this.#cachedGetHash !== null) {\n      return this.#cachedGetHash;\n    }\n    const hash = new MurmurHash3_64();\n    for (const [id, group] of this.#groups) {\n      hash.update(`${id}:${group.visible}`);\n    }\n    return this.#cachedGetHash = hash.hexdigest();\n  }\n  [Symbol.iterator]() {\n    return this.#groups.entries();\n  }\n  get serializable() {\n    const groupState = new Map();\n    for (const [id, group] of this.#groups) {\n      groupState.set(id, group.serializable);\n    }\n    return {\n      data: this.#rawData,\n      renderingIntent: this.renderingIntent,\n      groupState\n    };\n  }\n  static fromSerializable({\n    data,\n    renderingIntent,\n    groupState\n  }) {\n    return new OptionalContentConfig(data, renderingIntent, groupState);\n  }\n}\n\n;// ./src/display/pages_mapper.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass PagesMapper {\n  #pageNumberToId = null;\n  #prevPageNumbers = null;\n  #pagesNumber = 0;\n  #clipboard = null;\n  #savedData = null;\n  get pagesNumber() {\n    return this.#pagesNumber;\n  }\n  set pagesNumber(n) {\n    if (this.#pagesNumber === n) {\n      return;\n    }\n    this.#pagesNumber = n;\n    this.#pageNumberToId = null;\n    this.#prevPageNumbers = null;\n  }\n  #ensureInit() {\n    if (this.#pageNumberToId) {\n      return;\n    }\n    const n = this.#pagesNumber;\n    const pageNumberToId = this.#pageNumberToId = new Uint32Array(n);\n    for (let i = 0; i < n; i++) {\n      pageNumberToId[i] = i + 1;\n    }\n    this.#prevPageNumbers = new Int32Array(pageNumberToId);\n  }\n  #buildIdToPageNumber() {\n    const idToPageNumber = new Map();\n    const pageNumberToId = this.#pageNumberToId;\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      const id = pageNumberToId[i];\n      const pageNumbers = idToPageNumber.get(id);\n      if (pageNumbers) {\n        pageNumbers.push(i + 1);\n      } else {\n        idToPageNumber.set(id, [i + 1]);\n      }\n    }\n    return idToPageNumber;\n  }\n  movePages(selectedPages, pagesToMove, index) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    const movedCount = pagesToMove.length;\n    const mappedPagesToMove = new Uint32Array(movedCount);\n    let removedBeforeTarget = 0;\n    for (let i = 0; i < movedCount; i++) {\n      const pageIndex = pagesToMove[i] - 1;\n      mappedPagesToMove[i] = pageNumberToId[pageIndex];\n      if (pageIndex < index) {\n        removedBeforeTarget++;\n      }\n    }\n    const pagesNumber = this.#pagesNumber;\n    const remainingLen = pagesNumber - movedCount;\n    const adjustedTarget = MathClamp(index - removedBeforeTarget, 0, remainingLen);\n    for (let i = 0, r = 0; i < pagesNumber; i++) {\n      if (!selectedPages.has(i + 1)) {\n        pageNumberToId[r++] = pageNumberToId[i];\n      }\n    }\n    pageNumberToId.copyWithin(adjustedTarget + movedCount, adjustedTarget, remainingLen);\n    pageNumberToId.set(mappedPagesToMove, adjustedTarget);\n    this.#updatePrevPageNumbers(prevIdToPageNumber);\n    if (pageNumberToId.every((id, i) => id === i + 1)) {\n      this.#pageNumberToId = null;\n    }\n  }\n  deletePages(pagesToDelete) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    this.#savedData = {\n      pageNumberToId: pageNumberToId.slice(),\n      pagesNumber: this.#pagesNumber,\n      prevPageNumbers: this.#prevPageNumbers.slice()\n    };\n    const newN = this.#pagesNumber - pagesToDelete.length;\n    this.#pagesNumber = newN;\n    const newPageNumberToId = this.#pageNumberToId = new Uint32Array(newN);\n    this.#prevPageNumbers = new Int32Array(newN);\n    let sourceIndex = 0;\n    let destIndex = 0;\n    for (const pageNumber of pagesToDelete) {\n      const pageIndex = pageNumber - 1;\n      if (pageIndex !== sourceIndex) {\n        newPageNumberToId.set(pageNumberToId.subarray(sourceIndex, pageIndex), destIndex);\n        destIndex += pageIndex - sourceIndex;\n      }\n      sourceIndex = pageIndex + 1;\n    }\n    if (sourceIndex < pageNumberToId.length) {\n      newPageNumberToId.set(pageNumberToId.subarray(sourceIndex), destIndex);\n    }\n    this.#updatePrevPageNumbers(prevIdToPageNumber, new Set(pagesToDelete));\n  }\n  cancelDelete() {\n    if (this.#savedData) {\n      this.#pageNumberToId = this.#savedData.pageNumberToId;\n      this.#pagesNumber = this.#savedData.pagesNumber;\n      this.#prevPageNumbers = this.#savedData.prevPageNumbers;\n      this.#savedData = null;\n    }\n  }\n  cleanSavedData() {\n    this.#savedData = null;\n  }\n  copyPages(pagesToCopy) {\n    this.#ensureInit();\n    this.#clipboard = {\n      pageNumbers: pagesToCopy,\n      pageIds: pagesToCopy.map(n => this.#pageNumberToId[n - 1])\n    };\n  }\n  cancelCopy() {\n    this.#clipboard = null;\n  }\n  pastePages(index) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    const {\n      pageNumbers: copiedPageNumbers,\n      pageIds: copiedPageIds\n    } = this.#clipboard;\n    const newN = this.#pagesNumber + copiedPageNumbers.length;\n    this.#pagesNumber = newN;\n    const newPageNumberToId = this.#pageNumberToId = new Uint32Array(newN);\n    this.#prevPageNumbers = new Int32Array(newN);\n    newPageNumberToId.set(pageNumberToId.subarray(0, index), 0);\n    newPageNumberToId.set(copiedPageIds, index);\n    newPageNumberToId.set(pageNumberToId.subarray(index), index + copiedPageNumbers.length);\n    this.#updatePrevPageNumbers(prevIdToPageNumber, null, index, copiedPageNumbers);\n    this.#clipboard = null;\n  }\n  #updatePrevPageNumbers(prevIdToPageNumber, deletedPageNumbers = null, pasteIndex = -1, copiedPageNumbers = null) {\n    const prevPageNumbers = this.#prevPageNumbers;\n    const newPageNumberToId = this.#pageNumberToId;\n    const pasteEnd = pasteIndex + (copiedPageNumbers?.length ?? 0);\n    const idsIndices = new Map();\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      if (i >= pasteIndex && i < pasteEnd) {\n        prevPageNumbers[i] = -copiedPageNumbers[i - pasteIndex];\n        continue;\n      }\n      const id = newPageNumberToId[i];\n      const oldPositions = prevIdToPageNumber.get(id);\n      let j = idsIndices.get(id) || 0;\n      if (deletedPageNumbers && oldPositions) {\n        while (j < oldPositions.length && deletedPageNumbers.has(oldPositions[j])) {\n          j++;\n        }\n      }\n      prevPageNumbers[i] = oldPositions?.[j];\n      idsIndices.set(id, j + 1);\n    }\n  }\n  hasBeenAltered() {\n    return this.#pageNumberToId !== null;\n  }\n  getPageMappingForSaving(idToPageNumber = null) {\n    idToPageNumber ??= this.#buildIdToPageNumber();\n    let nCopy = 0;\n    for (const pageNumbers of idToPageNumber.values()) {\n      nCopy = Math.max(nCopy, pageNumbers.length);\n    }\n    const extractParams = new Array(nCopy);\n    for (let i = 0; i < nCopy; i++) {\n      extractParams[i] = {\n        document: null,\n        pageIndices: [],\n        includePages: []\n      };\n    }\n    for (const [id, pageNumbers] of idToPageNumber) {\n      for (let i = 0, ii = pageNumbers.length; i < ii; i++) {\n        extractParams[i].includePages.push([id - 1, pageNumbers[i] - 1]);\n      }\n    }\n    for (const {\n      includePages,\n      pageIndices\n    } of extractParams) {\n      includePages.sort((a, b) => a[0] - b[0]);\n      for (let i = 0, ii = includePages.length; i < ii; i++) {\n        pageIndices.push(includePages[i][1]);\n        includePages[i] = includePages[i][0];\n      }\n    }\n    return extractParams;\n  }\n  extractPages(extractedPageNumbers) {\n    extractedPageNumbers = Array.from(extractedPageNumbers).sort((a, b) => a - b);\n    const usedIds = new Map();\n    for (let i = 0, ii = extractedPageNumbers.length; i < ii; i++) {\n      const id = this.getPageId(extractedPageNumbers[i]);\n      const usedPageNumbers = usedIds.getOrInsertComputed(id, makeArr);\n      usedPageNumbers.push(i + 1);\n    }\n    return this.getPageMappingForSaving(usedIds);\n  }\n  getPrevPageNumber(pageNumber) {\n    return this.#prevPageNumbers?.[pageNumber - 1] ?? 0;\n  }\n  getPageNumber(id) {\n    if (!this.#pageNumberToId) {\n      return id;\n    }\n    const pageNumberToId = this.#pageNumberToId;\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      if (pageNumberToId[i] === id) {\n        return i + 1;\n      }\n    }\n    return 0;\n  }\n  getPageId(pageNumber) {\n    return this.#pageNumberToId?.[pageNumber - 1] ?? pageNumber;\n  }\n  getMapping() {\n    return this.#pageNumberToId?.subarray(0, this.pagesNumber);\n  }\n}\n\n;// ./src/display/pdf_objects.js\n\n\n\nconst INITIAL_DATA = Symbol(\"INITIAL_DATA\");\nconst dataObj = () => ({\n  ...Promise.withResolvers(),\n  data: INITIAL_DATA\n});\nclass PDFObjects {\n  #objs = new Map();\n  get(objId, callback = null) {\n    if (callback) {\n      const obj = this.#objs.getOrInsertComputed(objId, dataObj);\n      obj.promise.then(() => callback(obj.data));\n      return null;\n    }\n    const obj = this.#objs.get(objId);\n    if (!obj || obj.data === INITIAL_DATA) {\n      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n    }\n    return obj.data;\n  }\n  has(objId) {\n    const obj = this.#objs.get(objId);\n    return !!obj && obj.data !== INITIAL_DATA;\n  }\n  delete(objId) {\n    const obj = this.#objs.get(objId);\n    if (!obj || obj.data === INITIAL_DATA) {\n      return false;\n    }\n    this.#objs.delete(objId);\n    return true;\n  }\n  resolve(objId, data = null) {\n    const obj = this.#objs.getOrInsertComputed(objId, dataObj);\n    if (obj.data !== INITIAL_DATA) {\n      throw new Error(`Object already resolved ${objId}.`);\n    }\n    obj.data = data;\n    obj.resolve();\n  }\n  clear() {\n    for (const {\n      data\n    } of this.#objs.values()) {\n      data?.bitmap?.close();\n    }\n    this.#objs.clear();\n  }\n  *[Symbol.iterator]() {\n    for (const [objId, {\n      data\n    }] of this.#objs) {\n      if (data !== INITIAL_DATA) {\n        yield [objId, data];\n      }\n    }\n  }\n}\n\n;// ./src/display/text_layer.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\nclass TextLayer {\n  #capability = Promise.withResolvers();\n  #container = null;\n  #disableProcessItems = false;\n  #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n  #imagesHandler = null;\n  #lang = null;\n  #layoutTextParams = null;\n  #pageHeight = 0;\n  #pageWidth = 0;\n  #reader = null;\n  #rootContainer = null;\n  #rotation = 0;\n  #scale = 0;\n  #styleCache = Object.create(null);\n  #textContentItemsStr = [];\n  #textContentSource = null;\n  #textDivs = [];\n  #textDivProperties = new WeakMap();\n  #transform = null;\n  static #ascentCache = new Map();\n  static #canvasContexts = new Map();\n  static #canvasCtxFonts = new WeakMap();\n  static #minFontSize = null;\n  static #pendingTextLayers = new Set();\n  constructor({\n    textContentSource,\n    images,\n    container,\n    viewport\n  }) {\n    if (textContentSource instanceof ReadableStream) {\n      this.#textContentSource = textContentSource;\n    } else if (typeof textContentSource === \"object\") {\n      this.#textContentSource = new ReadableStream({\n        start(controller) {\n          controller.enqueue(textContentSource);\n          controller.close();\n        }\n      });\n    } else {\n      throw new Error('No \"textContentSource\" parameter specified.');\n    }\n    this.#container = this.#rootContainer = container;\n    this.#imagesHandler = images;\n    this.#scale = viewport.scale * OutputScale.pixelRatio;\n    this.#rotation = viewport.rotation;\n    this.#layoutTextParams = {\n      div: null,\n      properties: null,\n      ctx: null\n    };\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n    this.#pageWidth = pageWidth;\n    this.#pageHeight = pageHeight;\n    TextLayer.#ensureMinFontSizeComputed();\n    container.style.setProperty(\"--min-font-size\", TextLayer.#minFontSize);\n    setLayerDimensions(container, viewport);\n    this.#capability.promise.finally(() => {\n      TextLayer.#pendingTextLayers.delete(this);\n      this.#layoutTextParams = null;\n      this.#styleCache = null;\n    }).catch(() => {});\n  }\n  static get fontFamilyMap() {\n    const {\n      isWindows,\n      isFirefox\n    } = FeatureTest.platform;\n    return shadow(this, \"fontFamilyMap\", new Map([[\"sans-serif\", `${isWindows && isFirefox ? \"Calibri, \" : \"\"}sans-serif`], [\"monospace\", `${isWindows && isFirefox ? \"Lucida Console, \" : \"\"}monospace`]]));\n  }\n  render() {\n    if (this.#imagesHandler) {\n      this.#container.append(this.#imagesHandler.render());\n    }\n    const pump = () => {\n      this.#reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          this.#capability.resolve();\n          return;\n        }\n        this.#lang ??= value.lang;\n        Object.assign(this.#styleCache, value.styles);\n        this.#processItems(value.items);\n        pump();\n      }, this.#capability.reject);\n    };\n    this.#reader = this.#textContentSource.getReader();\n    TextLayer.#pendingTextLayers.add(this);\n    pump();\n    return this.#capability.promise;\n  }\n  update({\n    viewport,\n    onBefore = null\n  }) {\n    const scale = viewport.scale * OutputScale.pixelRatio;\n    const rotation = viewport.rotation;\n    if (rotation !== this.#rotation) {\n      onBefore?.();\n      this.#rotation = rotation;\n      setLayerDimensions(this.#rootContainer, {\n        rotation\n      });\n    }\n    if (scale !== this.#scale) {\n      onBefore?.();\n      this.#scale = scale;\n      const params = {\n        div: null,\n        properties: null,\n        ctx: TextLayer.#getCtx(this.#lang)\n      };\n      for (const div of this.#textDivs) {\n        params.properties = this.#textDivProperties.get(div);\n        params.div = div;\n        this.#layout(params);\n      }\n    }\n  }\n  cancel() {\n    const abortEx = new AbortException(\"TextLayer task cancelled.\");\n    this.#reader?.cancel(abortEx).catch(() => {});\n    this.#reader = null;\n    this.#capability.reject(abortEx);\n  }\n  get textDivs() {\n    return this.#textDivs;\n  }\n  get textContentItemsStr() {\n    return this.#textContentItemsStr;\n  }\n  #processItems(items) {\n    if (this.#disableProcessItems) {\n      return;\n    }\n    this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang);\n    const textDivs = this.#textDivs,\n      textContentItemsStr = this.#textContentItemsStr;\n    for (const item of items) {\n      if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n        warn(\"Ignoring additional textDivs for performance reasons.\");\n        this.#disableProcessItems = true;\n        return;\n      }\n      if (item.str === undefined) {\n        if (item.type === \"beginMarkedContentProps\" || item.type === \"beginMarkedContent\") {\n          const parent = this.#container;\n          this.#container = document.createElement(\"span\");\n          this.#container.classList.add(\"markedContent\");\n          if (item.id) {\n            this.#container.setAttribute(\"id\", `${item.id}`);\n          }\n          if (item.tag === \"Artifact\") {\n            this.#container.ariaHidden = true;\n          }\n          parent.append(this.#container);\n        } else if (item.type === \"endMarkedContent\") {\n          this.#container = this.#container.parentNode;\n        }\n        continue;\n      }\n      textContentItemsStr.push(item.str);\n      this.#appendText(item);\n    }\n  }\n  #appendText(geom) {\n    const textDiv = document.createElement(\"span\");\n    const textDivProperties = {\n      angle: 0,\n      canvasWidth: 0,\n      hasText: geom.str !== \"\",\n      hasEOL: geom.hasEOL,\n      fontSize: 0\n    };\n    this.#textDivs.push(textDiv);\n    const tx = Util.transform(this.#transform, geom.transform);\n    let angle = Math.atan2(tx[1], tx[0]);\n    const style = this.#styleCache[geom.fontName];\n    if (style.vertical) {\n      angle += Math.PI / 2;\n    }\n    let fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily;\n    fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;\n    const fontHeight = Math.hypot(tx[2], tx[3]);\n    const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang);\n    let left, top;\n    if (angle === 0) {\n      left = tx[4];\n      top = tx[5] - fontAscent;\n    } else {\n      left = tx[4] + fontAscent * Math.sin(angle);\n      top = tx[5] - fontAscent * Math.cos(angle);\n    }\n    const divStyle = textDiv.style;\n    divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`;\n    divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`;\n    divStyle.setProperty(\"--font-height\", `${fontHeight.toFixed(2)}px`);\n    divStyle.fontFamily = fontFamily;\n    textDivProperties.fontSize = fontHeight;\n    textDiv.setAttribute(\"role\", \"presentation\");\n    textDiv.textContent = geom.str;\n    textDiv.dir = geom.dir;\n    if (this.#fontInspectorEnabled) {\n      textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName;\n    }\n    if (angle !== 0) {\n      textDivProperties.angle = angle * (180 / Math.PI);\n    }\n    let shouldScaleText = false;\n    if (geom.str.length > 1) {\n      shouldScaleText = true;\n    } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n      const absScaleX = Math.abs(geom.transform[0]),\n        absScaleY = Math.abs(geom.transform[3]);\n      if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\n        shouldScaleText = true;\n      }\n    }\n    if (shouldScaleText) {\n      textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n    }\n    this.#textDivProperties.set(textDiv, textDivProperties);\n    this.#layoutTextParams.div = textDiv;\n    this.#layoutTextParams.properties = textDivProperties;\n    this.#layout(this.#layoutTextParams);\n    if (textDivProperties.hasText) {\n      this.#container.append(textDiv);\n    }\n    if (textDivProperties.hasEOL) {\n      const br = document.createElement(\"br\");\n      br.setAttribute(\"role\", \"presentation\");\n      this.#container.append(br);\n    }\n  }\n  #layout(params) {\n    const {\n      div,\n      properties,\n      ctx\n    } = params;\n    const {\n      style\n    } = div;\n    if (properties.canvasWidth !== 0 && properties.hasText) {\n      const {\n        fontFamily\n      } = style;\n      const {\n        canvasWidth,\n        fontSize\n      } = properties;\n      TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily);\n      const {\n        width\n      } = ctx.measureText(div.textContent);\n      if (width > 0) {\n        style.setProperty(\"--scale-x\", canvasWidth * this.#scale / width);\n      }\n    }\n    if (properties.angle !== 0) {\n      style.setProperty(\"--rotate\", `${properties.angle}deg`);\n    }\n  }\n  static cleanup() {\n    if (this.#pendingTextLayers.size > 0) {\n      return;\n    }\n    this.#ascentCache.clear();\n    for (const {\n      canvas\n    } of this.#canvasContexts.values()) {\n      canvas.remove();\n    }\n    this.#canvasContexts.clear();\n  }\n  static #getCtx(lang = null) {\n    let ctx = this.#canvasContexts.get(lang ||= \"\");\n    if (!ctx) {\n      const canvas = document.createElement(\"canvas\");\n      canvas.style.cssText = \"position:absolute;top:0;left:0;width:0;height:0;display:none;\" + \"letter-spacing:normal;word-spacing:normal\";\n      canvas.lang = lang;\n      document.body.append(canvas);\n      ctx = canvas.getContext(\"2d\", {\n        alpha: false,\n        willReadFrequently: true\n      });\n      this.#canvasContexts.set(lang, ctx);\n      this.#canvasCtxFonts.set(ctx, {\n        size: 0,\n        family: \"\"\n      });\n    }\n    return ctx;\n  }\n  static #ensureCtxFont(ctx, size, family) {\n    const cached = this.#canvasCtxFonts.get(ctx);\n    if (size === cached.size && family === cached.family) {\n      return;\n    }\n    ctx.font = `${size}px ${family}`;\n    cached.size = size;\n    cached.family = family;\n  }\n  static #ensureMinFontSizeComputed() {\n    if (this.#minFontSize !== null) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    div.style.opacity = 0;\n    div.style.lineHeight = 1;\n    div.style.fontSize = \"1px\";\n    div.style.position = \"absolute\";\n    div.textContent = \"X\";\n    document.body.append(div);\n    this.#minFontSize = div.getBoundingClientRect().height;\n    div.remove();\n  }\n  static #getAscent(fontFamily, style, lang) {\n    const cachedAscent = this.#ascentCache.get(fontFamily);\n    if (cachedAscent) {\n      return cachedAscent;\n    }\n    const ctx = this.#getCtx(lang);\n    ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n    this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily);\n    const metrics = ctx.measureText(\"\");\n    const ascent = metrics.fontBoundingBoxAscent;\n    const descent = Math.abs(metrics.fontBoundingBoxDescent);\n    ctx.canvas.width = ctx.canvas.height = 0;\n    let ratio = 0.8;\n    if (ascent) {\n      ratio = ascent / (ascent + descent);\n    } else {\n      if (FeatureTest.platform.isFirefox) {\n        warn(\"Enable the `dom.textMetrics.fontBoundingBox.enabled` preference \" + \"in `about:config` to improve TextLayer rendering.\");\n      }\n      if (style.ascent) {\n        ratio = style.ascent;\n      } else if (style.descent) {\n        ratio = 1 + style.descent;\n      }\n    }\n    this.#ascentCache.set(fontFamily, ratio);\n    return ratio;\n  }\n}\n\n;// ./src/display/api.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RENDERING_CANCELLED_TIMEOUT = 100;\nfunction getDocument(src = {}) {\n  const task = new PDFDocumentLoadingTask();\n  const {\n    docId\n  } = task;\n  const url = src.url ? getUrlProp(src.url) : null;\n  const data = src.data ? getDataProp(src.data) : null;\n  const httpHeaders = src.httpHeaders || null;\n  const withCredentials = src.withCredentials === true;\n  const password = src.password ?? null;\n  const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;\n  const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : 2 ** 16;\n  let worker = src.worker instanceof PDFWorker ? src.worker : null;\n  const verbosity = src.verbosity;\n  const docBaseUrl = typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null;\n  const cMapUrl = getFactoryUrlProp(src.cMapUrl);\n  const cMapPacked = src.cMapPacked !== false;\n  const iccUrl = getFactoryUrlProp(src.iccUrl);\n  const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl);\n  const wasmUrl = getFactoryUrlProp(src.wasmUrl);\n  const ignoreErrors = src.stopAtErrors !== true;\n  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;\n  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === \"boolean\" ? src.isOffscreenCanvasSupported : !isNodeJS;\n  const isImageDecoderSupported = typeof src.isImageDecoderSupported === \"boolean\" ? src.isImageDecoderSupported : !isNodeJS;\n  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;\n  const disableFontFace = typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n  const fontExtraProperties = src.fontExtraProperties === true;\n  const enableXfa = src.enableXfa === true;\n  const ownerDocument = src.ownerDocument || globalThis.document;\n  const disableRange = src.disableRange === true;\n  const disableStream = src.disableStream === true;\n  const disableAutoFetch = src.disableAutoFetch === true;\n  const pdfBug = src.pdfBug === true;\n  const CanvasFactory = src.CanvasFactory || (isNodeJS ? NodeCanvasFactory : DOMCanvasFactory);\n  const FilterFactory = src.FilterFactory || (isNodeJS ? NodeFilterFactory : DOMFilterFactory);\n  const BinaryDataFactory = src.BinaryDataFactory || (isNodeJS ? NodeBinaryDataFactory : DOMBinaryDataFactory);\n  const enableHWA = src.enableHWA === true;\n  const enableWebGPU = src.enableWebGPU === true;\n  const gpuPromise = enableWebGPU ? initGPU() : Promise.resolve(false);\n  const useWasm = src.useWasm !== false;\n  const pagesMapper = src.pagesMapper || new PagesMapper();\n  const useSystemFonts = typeof src.useSystemFonts === \"boolean\" ? src.useSystemFonts : !isNodeJS && !disableFontFace;\n  const useWorkerFetch = typeof src.useWorkerFetch === \"boolean\" ? src.useWorkerFetch : !!(BinaryDataFactory === DOMBinaryDataFactory && cMapUrl && cMapPacked && standardFontDataUrl && wasmUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI) && isValidFetchUrl(wasmUrl, document.baseURI));\n  const styleElement = null;\n  setVerbosityLevel(verbosity);\n  const transportFactory = {\n    canvasFactory: new CanvasFactory({\n      ownerDocument,\n      enableHWA\n    }),\n    filterFactory: new FilterFactory({\n      docId,\n      ownerDocument\n    }),\n    binaryDataFactory: useWorkerFetch ? null : new BinaryDataFactory({\n      cMapUrl,\n      standardFontDataUrl,\n      wasmUrl\n    })\n  };\n  if (!worker) {\n    worker = PDFWorker.create({\n      verbosity,\n      port: GlobalWorkerOptions.workerPort\n    });\n    task._worker = worker;\n  }\n  const docParams = {\n    docId,\n    apiVersion: \"6.1.200\",\n    data,\n    password,\n    disableAutoFetch,\n    rangeChunkSize,\n    docBaseUrl,\n    enableXfa,\n    evaluatorOptions: {\n      maxImageSize,\n      disableFontFace,\n      ignoreErrors,\n      isOffscreenCanvasSupported,\n      isImageDecoderSupported,\n      canvasMaxAreaInBytes,\n      fontExtraProperties,\n      useSystemFonts,\n      useWasm,\n      useWorkerFetch,\n      cMapUrl,\n      cMapPacked,\n      iccUrl,\n      standardFontDataUrl,\n      wasmUrl,\n      hasGPU: false\n    }\n  };\n  const transportParams = {\n    ownerDocument,\n    pdfBug,\n    styleElement,\n    enableHWA,\n    loadingParams: {\n      disableAutoFetch,\n      enableXfa\n    }\n  };\n  Promise.all([worker.promise, gpuPromise]).then(function ([, hasGPU]) {\n    if (worker.destroyed) {\n      throw new Error(\"Worker was destroyed\");\n    }\n    docParams.evaluatorOptions.hasGPU = hasGPU;\n    const workerIdPromise = worker.messageHandler.sendWithPromise(\"GetDocRequest\", docParams, data ? [data.buffer] : null);\n    let networkStream;\n    if (data) {} else if (rangeTransport) {\n      networkStream = new PDFDataTransportStream({\n        pdfDataRangeTransport: rangeTransport,\n        disableRange,\n        disableStream\n      });\n    } else if (url) {\n      const NetworkStream = getNetworkStream(url);\n      networkStream = new NetworkStream({\n        url,\n        httpHeaders,\n        withCredentials,\n        rangeChunkSize,\n        disableRange,\n        disableStream\n      });\n    } else {\n      throw new Error(\"getDocument - expected either `data`, `range`, or `url` parameter.\");\n    }\n    return workerIdPromise.then(workerId => {\n      if (worker.destroyed) {\n        throw new Error(\"Worker was destroyed\");\n      }\n      const messageHandler = new MessageHandler(docId, workerId, worker.port);\n      const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory, pagesMapper);\n      task._transport = transport;\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n      messageHandler.send(\"Ready\", null);\n    });\n  }).catch(task._capability.reject).finally(task._setupCapability.resolve);\n  return task;\n}\nclass PDFDocumentLoadingTask {\n  static #docId = 0;\n  _capability = Promise.withResolvers();\n  _setupCapability = Promise.withResolvers();\n  _transport = null;\n  _worker = null;\n  docId = `d${PDFDocumentLoadingTask.#docId++}`;\n  destroyed = false;\n  onPassword = null;\n  onProgress = null;\n  get promise() {\n    return this._capability.promise;\n  }\n  async destroy() {\n    this.destroyed = true;\n    this._capability.promise.catch(() => {});\n    try {\n      if (this._worker?.port) {\n        this._worker._pendingDestroy = true;\n      }\n      await this._setupCapability.promise;\n      await this._transport?.destroy();\n    } catch (ex) {\n      if (this._worker?.port) {\n        delete this._worker._pendingDestroy;\n      }\n      throw ex;\n    }\n    this._transport = null;\n    this._worker?.destroy();\n    this._worker = null;\n  }\n  async getData() {\n    return this._transport.getData();\n  }\n}\nclass PDFDataRangeTransport {\n  #capability = Promise.withResolvers();\n  #listener = null;\n  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n    this.contentDispositionFilename = contentDispositionFilename;\n  }\n  onDataRange(begin, chunk) {\n    this.#listener({\n      type: \"range\",\n      begin,\n      chunk\n    });\n  }\n  onDataProgressiveRead(chunk) {\n    this.#capability.promise.then(() => {\n      this.#listener({\n        type: \"progressiveRead\",\n        chunk\n      });\n    });\n  }\n  onDataProgressiveDone() {\n    this.#capability.promise.then(() => {\n      this.#listener({\n        type: \"progressiveDone\"\n      });\n    });\n  }\n  transportReady(listener) {\n    this.#listener = listener;\n    this.#capability.resolve();\n  }\n  requestDataRange(begin, end) {\n    unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n  }\n  abort() {}\n}\nclass PDFDocumentProxy {\n  constructor(pdfInfo, transport) {\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n  }\n  get pagesMapper() {\n    return this._transport.pagesMapper;\n  }\n  get annotationStorage() {\n    return this._transport.annotationStorage;\n  }\n  get canvasFactory() {\n    return this._transport.canvasFactory;\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get numPages() {\n    return this._pdfInfo.numPages;\n  }\n  get fingerprints() {\n    return this._pdfInfo.fingerprints;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  get allXfaHtml() {\n    return this._transport._htmlForXfa;\n  }\n  getPage(pageNumber) {\n    return this._transport.getPage(pageNumber);\n  }\n  getPageIndex(ref) {\n    return this._transport.getPageIndex(ref);\n  }\n  getDestinations() {\n    return this._transport.getDestinations();\n  }\n  getDestination(id) {\n    return this._transport.getDestination(id);\n  }\n  getPageLabels() {\n    return this._transport.getPageLabels();\n  }\n  getPageLayout() {\n    return this._transport.getPageLayout();\n  }\n  getPageMode() {\n    return this._transport.getPageMode();\n  }\n  getViewerPreferences() {\n    return this._transport.getViewerPreferences();\n  }\n  getOpenAction() {\n    return this._transport.getOpenAction();\n  }\n  getAttachments() {\n    return this._transport.getAttachments();\n  }\n  getAttachmentContent(id) {\n    return this._transport.getAttachmentContent(id);\n  }\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this._transport.getAnnotationsByType(types, pageIndexesToSkip);\n  }\n  getJSActions() {\n    return this._transport.getDocJSActions();\n  }\n  getOutline() {\n    return this._transport.getOutline();\n  }\n  getOptionalContentConfig({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getOptionalContentConfig(renderingIntent);\n  }\n  getPermissions() {\n    return this._transport.getPermissions();\n  }\n  getMetadata() {\n    return this._transport.getMetadata();\n  }\n  getMarkInfo() {\n    return this._transport.getMarkInfo();\n  }\n  getData() {\n    return this._transport.getData();\n  }\n  saveDocument() {\n    return this._transport.saveDocument();\n  }\n  extractPages(pageInfos) {\n    return this._transport.extractPages(pageInfos);\n  }\n  getDownloadInfo() {\n    return this._transport.downloadInfoCapability.promise;\n  }\n  getRawData(data) {\n    return this._transport.getRawData(data);\n  }\n  cleanup(keepLoadedFonts = false) {\n    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n  }\n  cachedPageNumber(ref) {\n    return this._transport.cachedPageNumber(ref);\n  }\n  get loadingParams() {\n    return this._transport.loadingParams;\n  }\n  get loadingTask() {\n    return this._transport.loadingTask;\n  }\n  getFieldObjects() {\n    return this._transport.getFieldObjects();\n  }\n  hasJSActions() {\n    return this._transport.hasJSActions();\n  }\n  getCalculationOrderIds() {\n    return this._transport.getCalculationOrderIds();\n  }\n}\nclass PDFPageProxy {\n  #pendingCleanup = false;\n  #pagesMapper = null;\n  constructor(pageIndex, pageInfo, transport, pagesMapper, pdfBug = false) {\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._transport = transport;\n    this._stats = pdfBug ? new StatTimer() : null;\n    this._pdfBug = pdfBug;\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n    this._intentStates = new Map();\n    this.destroyed = false;\n    this.recordedBBoxes = null;\n    this.#pagesMapper = pagesMapper;\n    this.imageCoordinates = null;\n  }\n  clone(id) {\n    const clone = new PDFPageProxy(id, this._pageInfo, this._transport, this.#pagesMapper, this._pdfBug);\n    clone.clonedFromIndex = this.clonedFromIndex ?? this._pageIndex;\n    this._transport.updatePage(clone);\n    return clone;\n  }\n  get pageNumber() {\n    return this._pageIndex + 1;\n  }\n  set pageNumber(value) {\n    this._pageIndex = value - 1;\n    this._transport.updatePage(this);\n  }\n  get rotate() {\n    return this._pageInfo.rotate;\n  }\n  get ref() {\n    return this._pageInfo.ref;\n  }\n  get userUnit() {\n    return this._pageInfo.userUnit;\n  }\n  get view() {\n    return this._pageInfo.view;\n  }\n  getViewport({\n    scale,\n    rotation = this.rotate,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.view,\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  getAnnotations({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n  }\n  getJSActions() {\n    return this._transport.getPageJSActions(this._pageIndex);\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  async getXfa() {\n    return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n  }\n  render({\n    canvasContext,\n    canvas = canvasContext.canvas,\n    viewport,\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    transform = null,\n    background = null,\n    optionalContentConfigPromise = null,\n    annotationCanvasMap = null,\n    pageColors = null,\n    printAnnotationStorage = null,\n    isEditing = false,\n    recordImages = false,\n    recordOperations = false,\n    operationsFilter = null\n  }) {\n    this._stats?.time(\"Overall\");\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing);\n    const {\n      renderingIntent,\n      cacheKey\n    } = intentArgs;\n    this.#pendingCleanup = false;\n    optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent);\n    const intentState = this._intentStates.getOrInsertComputed(cacheKey, makeObj);\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    if (!intentState.displayReadyCapability) {\n      intentState.displayReadyCapability = Promise.withResolvers();\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    const recordForDebugger = !!(this._pdfBug && globalThis.StepperManager?.enabled);\n    const shouldRecordOperations = !!canvas && !this.recordedBBoxes && (recordOperations || recordForDebugger);\n    const shouldRecordImages = !!canvas && !this.imageCoordinates && recordImages;\n    const complete = error => {\n      intentState.renderTasks.delete(internalRenderTask);\n      if (shouldRecordOperations) {\n        const recordedBBoxes = internalRenderTask.gfx?.dependencyTracker.take();\n        if (recordedBBoxes) {\n          internalRenderTask.stepper?.setOperatorBBoxes(recordedBBoxes, internalRenderTask.gfx.dependencyTracker.takeDebugMetadata());\n          if (recordOperations) {\n            this.recordedBBoxes = recordedBBoxes;\n          }\n        }\n      }\n      if (shouldRecordImages && !error) {\n        this.imageCoordinates = internalRenderTask.gfx?.imagesTracker.take();\n      }\n      if (intentPrint) {\n        this.#pendingCleanup = true;\n      }\n      this.#tryCleanup();\n      if (error) {\n        internalRenderTask.capability.reject(error);\n        this._abortOperatorList({\n          intentState,\n          reason: error instanceof Error ? error : new Error(error)\n        });\n      } else {\n        internalRenderTask.capability.resolve();\n      }\n      if (this._stats) {\n        this._stats.timeEnd(\"Rendering\");\n        this._stats.timeEnd(\"Overall\");\n        if (globalThis.Stats?.enabled) {\n          globalThis.Stats.add(this.pageNumber, this._stats);\n        }\n      }\n    };\n    let dependencyTracker = null;\n    let bboxTracker = null;\n    if (shouldRecordOperations || shouldRecordImages) {\n      bboxTracker = new CanvasBBoxTracker(canvas, intentState.operatorList.length);\n    }\n    if (shouldRecordOperations) {\n      dependencyTracker = new CanvasDependencyTracker(bboxTracker, recordForDebugger);\n    }\n    const internalRenderTask = new InternalRenderTask({\n      callback: complete,\n      params: {\n        canvas,\n        canvasContext,\n        dependencyTracker: dependencyTracker ?? bboxTracker,\n        imagesTracker: shouldRecordImages ? new CanvasImagesTracker(canvas) : null,\n        viewport,\n        transform,\n        background\n      },\n      objs: this.objs,\n      commonObjs: this.commonObjs,\n      annotationCanvasMap,\n      operatorList: intentState.operatorList,\n      pageIndex: this._pageIndex,\n      canvasFactory: this._transport.canvasFactory,\n      filterFactory: this._transport.filterFactory,\n      useRequestAnimationFrame: !intentPrint,\n      pdfBug: this._pdfBug,\n      pageColors,\n      enableHWA: this._transport.enableHWA,\n      operationsFilter\n    });\n    (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n    const renderTask = internalRenderTask.task;\n    Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {\n      if (this.destroyed) {\n        complete();\n        return;\n      }\n      this._stats?.time(\"Rendering\");\n      if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n        throw new Error(\"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" + \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\");\n      }\n      internalRenderTask.initializeGraphics({\n        transparency,\n        optionalContentConfig\n      });\n      internalRenderTask.operatorListChanged();\n    }).catch(complete);\n    return renderTask;\n  }\n  getOperatorList({\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    printAnnotationStorage = null,\n    isEditing = false\n  } = {}) {\n    function operatorListChanged() {\n      if (intentState.operatorList.lastChunk) {\n        intentState.opListReadCapability.resolve(intentState.operatorList);\n        intentState.renderTasks.delete(opListTask);\n      }\n    }\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true);\n    const intentState = this._intentStates.getOrInsertComputed(intentArgs.cacheKey, makeObj);\n    let opListTask;\n    if (!intentState.opListReadCapability) {\n      opListTask = Object.create(null);\n      opListTask.operatorListChanged = operatorListChanged;\n      intentState.opListReadCapability = Promise.withResolvers();\n      (intentState.renderTasks ||= new Set()).add(opListTask);\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    return intentState.opListReadCapability.promise;\n  }\n  streamTextContent({\n    includeMarkedContent = false,\n    disableNormalization = false\n  } = {}) {\n    const TEXT_CONTENT_CHUNK_SIZE = 100;\n    return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n      pageId: this.#pagesMapper.getPageId(this._pageIndex + 1) - 1,\n      pageIndex: this._pageIndex,\n      includeMarkedContent: includeMarkedContent === true,\n      disableNormalization: disableNormalization === true\n    }, {\n      highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n      size(textContent) {\n        return textContent.items.length;\n      }\n    });\n  }\n  async getTextContent(params = {}) {\n    if (this._transport._htmlForXfa) {\n      return this.getXfa().then(xfa => XfaText.textContent(xfa));\n    }\n    const readableStream = this.streamTextContent(params);\n    const textContent = {\n      items: [],\n      styles: Object.create(null),\n      lang: null\n    };\n    for await (const value of readableStream) {\n      textContent.lang ??= value.lang;\n      Object.assign(textContent.styles, value.styles);\n      textContent.items.push(...value.items);\n    }\n    return textContent;\n  }\n  getStructTree() {\n    return this._transport.getStructTree(this._pageIndex);\n  }\n  _destroy() {\n    this.destroyed = true;\n    const waitOn = [];\n    for (const intentState of this._intentStates.values()) {\n      this._abortOperatorList({\n        intentState,\n        reason: new Error(\"Page was destroyed.\"),\n        force: true\n      });\n      if (intentState.opListReadCapability) {\n        continue;\n      }\n      for (const internalRenderTask of intentState.renderTasks) {\n        waitOn.push(internalRenderTask.completed);\n        internalRenderTask.cancel();\n      }\n    }\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return Promise.all(waitOn);\n  }\n  cleanup(resetStats = false) {\n    this.#pendingCleanup = true;\n    const success = this.#tryCleanup();\n    if (resetStats && success) {\n      this._stats &&= new StatTimer();\n    }\n    return success;\n  }\n  #tryCleanup() {\n    if (!this.#pendingCleanup || this.destroyed) {\n      return false;\n    }\n    for (const {\n      renderTasks,\n      operatorList\n    } of this._intentStates.values()) {\n      if (renderTasks.size > 0 || !operatorList.lastChunk) {\n        return false;\n      }\n    }\n    this._intentStates.clear();\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return true;\n  }\n  _startRenderPage(transparency, cacheKey) {\n    const intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      return;\n    }\n    this._stats?.timeEnd(\"Page Request\");\n    intentState.displayReadyCapability?.resolve(transparency);\n  }\n  _renderPageChunk(operatorListChunk, intentState) {\n    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n    }\n    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n    for (const internalRenderTask of intentState.renderTasks) {\n      internalRenderTask.operatorListChanged();\n    }\n    if (operatorListChunk.lastChunk) {\n      this.#tryCleanup();\n    }\n  }\n  _pumpOperatorList({\n    renderingIntent,\n    cacheKey,\n    annotationStorageSerializable,\n    modifiedIds\n  }) {\n    const {\n      map,\n      transfer\n    } = annotationStorageSerializable;\n    const readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", {\n      pageId: this.#pagesMapper.getPageId(this._pageIndex + 1) - 1,\n      pageIndex: this._pageIndex,\n      intent: renderingIntent,\n      cacheKey,\n      annotationStorage: map,\n      modifiedIds\n    }, undefined, transfer);\n    const reader = readableStream.getReader();\n    const intentState = this._intentStates.get(cacheKey);\n    intentState.streamReader = reader;\n    const pump = () => {\n      reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          intentState.streamReader = null;\n          return;\n        }\n        if (this._transport.destroyed) {\n          return;\n        }\n        this._renderPageChunk(value, intentState);\n        pump();\n      }, reason => {\n        intentState.streamReader = null;\n        if (this._transport.destroyed) {\n          return;\n        }\n        if (intentState.operatorList) {\n          intentState.operatorList.lastChunk = true;\n          for (const internalRenderTask of intentState.renderTasks) {\n            internalRenderTask.operatorListChanged();\n          }\n          this.#tryCleanup();\n        }\n        if (intentState.displayReadyCapability) {\n          intentState.displayReadyCapability.reject(reason);\n        } else if (intentState.opListReadCapability) {\n          intentState.opListReadCapability.reject(reason);\n        } else {\n          throw reason;\n        }\n      });\n    };\n    pump();\n  }\n  _abortOperatorList({\n    intentState,\n    reason,\n    force = false\n  }) {\n    if (!intentState.streamReader) {\n      return;\n    }\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    if (!force) {\n      if (intentState.renderTasks.size > 0) {\n        return;\n      }\n      if (reason instanceof RenderingCancelledException) {\n        let delay = RENDERING_CANCELLED_TIMEOUT;\n        if (reason.extraDelay > 0 && reason.extraDelay < 1000) {\n          delay += reason.extraDelay;\n        }\n        intentState.streamReaderCancelTimeout = setTimeout(() => {\n          intentState.streamReaderCancelTimeout = null;\n          this._abortOperatorList({\n            intentState,\n            reason,\n            force: true\n          });\n        }, delay);\n        return;\n      }\n    }\n    intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {});\n    intentState.streamReader = null;\n    if (this._transport.destroyed) {\n      return;\n    }\n    for (const [curCacheKey, curIntentState] of this._intentStates) {\n      if (curIntentState === intentState) {\n        this._intentStates.delete(curCacheKey);\n        break;\n      }\n    }\n    this.cleanup();\n  }\n  get stats() {\n    return this._stats;\n  }\n}\nclass PDFWorker {\n  #capability = Promise.withResolvers();\n  #messageHandler = null;\n  #port = null;\n  #webWorker = null;\n  static #fakeWorkerId = 0;\n  static #isWorkerDisabled = false;\n  static #workerPorts = new WeakMap();\n  static {\n    if (isNodeJS) {\n      this.#isWorkerDisabled = true;\n      GlobalWorkerOptions.workerSrc ||= \"./pdf.worker.mjs\";\n    }\n    this._isSameOrigin = (baseUrl, otherUrl) => {\n      const base = URL.parse(baseUrl);\n      if (!base?.origin || base.origin === \"null\") {\n        return false;\n      }\n      const other = new URL(otherUrl, base);\n      return base.origin === other.origin;\n    };\n    this._createCDNWrapper = url => {\n      const wrapper = `await import(\"${url}\");`;\n      return URL.createObjectURL(new Blob([wrapper], {\n        type: \"text/javascript\"\n      }));\n    };\n  }\n  constructor({\n    name = null,\n    port = null,\n    verbosity = getVerbosityLevel()\n  } = {}) {\n    this.name = name;\n    this.destroyed = false;\n    this.verbosity = verbosity;\n    if (port) {\n      if (PDFWorker.#workerPorts.has(port)) {\n        throw new Error(\"Cannot use more than one PDFWorker per port.\");\n      }\n      PDFWorker.#workerPorts.set(port, this);\n      this.#initializeFromPort(port);\n    } else {\n      this.#initialize();\n    }\n  }\n  get promise() {\n    return this.#capability.promise;\n  }\n  #resolve() {\n    this.#capability.resolve();\n    this.#messageHandler.send(\"configure\", {\n      verbosity: this.verbosity\n    });\n  }\n  get port() {\n    return this.#port;\n  }\n  get messageHandler() {\n    return this.#messageHandler;\n  }\n  #initializeFromPort(port) {\n    this.#port = port;\n    this.#messageHandler = new MessageHandler(\"main\", \"worker\", port);\n    this.#messageHandler.on(\"ready\", () => {});\n    this.#resolve();\n  }\n  #initialize() {\n    if (PDFWorker.#isWorkerDisabled || PDFWorker.#mainThreadWorkerMessageHandler) {\n      this.#setupFakeWorker();\n      return;\n    }\n    let {\n      workerSrc\n    } = PDFWorker;\n    try {\n      if (!PDFWorker._isSameOrigin(window.location, workerSrc)) {\n        workerSrc = PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href);\n      }\n      const worker = new Worker(workerSrc, {\n        type: \"module\"\n      });\n      const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n      const terminateEarly = () => {\n        ac.abort();\n        messageHandler.destroy();\n        worker.terminate();\n        if (this.destroyed) {\n          this.#capability.reject(new Error(\"Worker was destroyed\"));\n        } else {\n          this.#setupFakeWorker();\n        }\n      };\n      const ac = new AbortController();\n      worker.addEventListener(\"error\", () => {\n        if (!this.#webWorker) {\n          terminateEarly();\n        }\n      }, {\n        signal: ac.signal\n      });\n      messageHandler.on(\"test\", data => {\n        ac.abort();\n        if (this.destroyed || !data) {\n          terminateEarly();\n          return;\n        }\n        this.#messageHandler = messageHandler;\n        this.#port = worker;\n        this.#webWorker = worker;\n        this.#resolve();\n      });\n      messageHandler.on(\"ready\", data => {\n        ac.abort();\n        if (this.destroyed) {\n          terminateEarly();\n          return;\n        }\n        try {\n          sendTest();\n        } catch {\n          this.#setupFakeWorker();\n        }\n      });\n      const sendTest = () => {\n        const testObj = new Uint8Array();\n        messageHandler.send(\"test\", testObj, [testObj.buffer]);\n      };\n      sendTest();\n      return;\n    } catch {\n      info(\"The worker has been disabled.\");\n    }\n    this.#setupFakeWorker();\n  }\n  #setupFakeWorker() {\n    if (!PDFWorker.#isWorkerDisabled) {\n      warn(\"Setting up fake worker.\");\n      PDFWorker.#isWorkerDisabled = true;\n    }\n    PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {\n      if (this.destroyed) {\n        this.#capability.reject(new Error(\"Worker was destroyed\"));\n        return;\n      }\n      const port = new LoopbackPort();\n      this.#port = port;\n      const id = `fake${PDFWorker.#fakeWorkerId++}`;\n      const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n      WorkerMessageHandler.setup(workerHandler, port);\n      this.#messageHandler = new MessageHandler(id, id + \"_worker\", port);\n      this.#resolve();\n    }).catch(reason => {\n      this.#capability.reject(new Error(`Setting up fake worker failed: \"${reason.message}\".`));\n    });\n  }\n  destroy() {\n    this.destroyed = true;\n    this.#webWorker?.terminate();\n    this.#webWorker = null;\n    PDFWorker.#workerPorts.delete(this.#port);\n    this.#port = null;\n    this.#messageHandler?.destroy();\n    this.#messageHandler = null;\n  }\n  static create(params) {\n    const cachedPort = this.#workerPorts.get(params?.port);\n    if (cachedPort) {\n      if (cachedPort._pendingDestroy) {\n        throw new Error(\"PDFWorker.create - the worker is being destroyed.\\n\" + \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\");\n      }\n      return cachedPort;\n    }\n    return new PDFWorker(params);\n  }\n  static get workerSrc() {\n    if (GlobalWorkerOptions.workerSrc) {\n      return GlobalWorkerOptions.workerSrc;\n    }\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n  }\n  static get #mainThreadWorkerMessageHandler() {\n    try {\n      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n    } catch {\n      return null;\n    }\n  }\n  static get _setupFakeWorkerGlobal() {\n    const loader = async () => {\n      if (this.#mainThreadWorkerMessageHandler) {\n        return this.#mainThreadWorkerMessageHandler;\n      }\n      const worker = await import(\n      /*webpackIgnore: true*/\n      /*@vite-ignore*/\n      this.workerSrc);\n      return worker.WorkerMessageHandler;\n    };\n    return shadow(this, \"_setupFakeWorkerGlobal\", loader());\n  }\n}\nclass WorkerTransport {\n  downloadInfoCapability = Promise.withResolvers();\n  #fullReader = null;\n  #methodPromises = new Map();\n  #networkStream = null;\n  #pageCache = new Map();\n  #pagePromises = new Map();\n  #pageRefCache = new Map();\n  #passwordCapability = null;\n  constructor(messageHandler, loadingTask, networkStream, params, factory, pagesMapper) {\n    this.messageHandler = messageHandler;\n    this.loadingTask = loadingTask;\n    this.#networkStream = networkStream;\n    this.commonObjs = new PDFObjects();\n    this.fontLoader = new FontLoader({\n      ownerDocument: params.ownerDocument,\n      styleElement: params.styleElement\n    });\n    this.enableHWA = params.enableHWA;\n    this.loadingParams = params.loadingParams;\n    this._params = params;\n    this.canvasFactory = factory.canvasFactory;\n    this.filterFactory = factory.filterFactory;\n    this.binaryDataFactory = factory.binaryDataFactory;\n    this.pagesMapper = pagesMapper;\n    this.destroyed = false;\n    this.destroyCapability = null;\n    this.setupMessageHandler();\n  }\n  updatePage(page) {\n    const {\n      _pageIndex\n    } = page;\n    this.#pageCache.set(_pageIndex, page);\n    this.#pagePromises.set(_pageIndex, Promise.resolve(page));\n  }\n  #cacheSimpleMethod(name, data = null) {\n    return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, data));\n  }\n  #onProgress({\n    loaded,\n    total\n  }) {\n    this.loadingTask.onProgress?.({\n      loaded,\n      total,\n      percent: total ? MathClamp(Math.round(loaded / total * 100), 0, 100) : NaN\n    });\n  }\n  get annotationStorage() {\n    return shadow(this, \"annotationStorage\", new AnnotationStorage());\n  }\n  getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) {\n    let renderingIntent = RenderingIntentFlag.DISPLAY;\n    let annotationStorageSerializable = SerializableEmpty;\n    switch (intent) {\n      case \"any\":\n        renderingIntent = RenderingIntentFlag.ANY;\n        break;\n      case \"display\":\n        break;\n      case \"print\":\n        renderingIntent = RenderingIntentFlag.PRINT;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid intent: ${intent}`);\n    }\n    const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;\n    switch (annotationMode) {\n      case AnnotationMode.DISABLE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE;\n        break;\n      case AnnotationMode.ENABLE:\n        break;\n      case AnnotationMode.ENABLE_FORMS:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS;\n        break;\n      case AnnotationMode.ENABLE_STORAGE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE;\n        annotationStorageSerializable = annotationStorage.serializable;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);\n    }\n    if (isEditing) {\n      renderingIntent += RenderingIntentFlag.IS_EDITING;\n    }\n    if (isOpList) {\n      renderingIntent += RenderingIntentFlag.OPLIST;\n    }\n    const {\n      ids: modifiedIds,\n      hash: modifiedIdsHash\n    } = annotationStorage.modifiedIds;\n    const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash];\n    return {\n      renderingIntent,\n      cacheKey: cacheKeyBuf.join(\"_\"),\n      annotationStorageSerializable,\n      modifiedIds\n    };\n  }\n  destroy() {\n    if (this.destroyCapability) {\n      return this.destroyCapability.promise;\n    }\n    this.destroyed = true;\n    this.destroyCapability = Promise.withResolvers();\n    this.#passwordCapability?.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n    const waitOn = [];\n    for (const page of this.#pageCache.values()) {\n      waitOn.push(page._destroy());\n    }\n    this.#pageCache.clear();\n    this.#pagePromises.clear();\n    this.#pageRefCache.clear();\n    if (Object.hasOwn(this, \"annotationStorage\")) {\n      this.annotationStorage.resetModified();\n    }\n    const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n    waitOn.push(terminated);\n    Promise.all(waitOn).then(() => {\n      this.commonObjs.clear();\n      this.fontLoader.clear();\n      this.#methodPromises.clear();\n      this.filterFactory.destroy();\n      TextLayer.cleanup();\n      this.#networkStream?.cancelAllRequests(new AbortException(\"Worker was terminated.\"));\n      this.messageHandler?.destroy();\n      this.messageHandler = null;\n      this.destroyCapability.resolve();\n    }, this.destroyCapability.reject);\n    return this.destroyCapability.promise;\n  }\n  setupMessageHandler() {\n    const {\n      messageHandler,\n      loadingTask\n    } = this;\n    messageHandler.on(\"GetReader\", (data, sink) => {\n      assert(this.#networkStream, \"GetReader - no `BasePDFStream` instance available.\");\n      this.#fullReader = this.#networkStream.getFullReader();\n      this.#fullReader.onProgress = evt => this.#onProgress(evt);\n      sink.onPull = () => {\n        this.#fullReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        this.#fullReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"ReaderHeadersReady\", async data => {\n      await this.#fullReader.headersReady;\n      const {\n        isStreamingSupported,\n        isRangeSupported,\n        contentLength\n      } = this.#fullReader;\n      if (isStreamingSupported && isRangeSupported) {\n        this.#fullReader.onProgress = null;\n      }\n      return {\n        isStreamingSupported,\n        isRangeSupported,\n        contentLength\n      };\n    });\n    messageHandler.on(\"GetRangeReader\", (data, sink) => {\n      assert(this.#networkStream, \"GetRangeReader - no `BasePDFStream` instance available.\");\n      const rangeReader = this.#networkStream.getRangeReader(data.begin, data.end);\n      if (!rangeReader) {\n        sink.close();\n        return;\n      }\n      sink.onPull = () => {\n        rangeReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetRangeReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        rangeReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"GetDoc\", ({\n      pdfInfo\n    }) => {\n      this.pagesMapper.pagesNumber = pdfInfo.numPages;\n      this._numPages = pdfInfo.numPages;\n      this._htmlForXfa = pdfInfo.htmlForXfa;\n      delete pdfInfo.htmlForXfa;\n      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n    });\n    messageHandler.on(\"DocException\", ex => {\n      loadingTask._capability.reject(wrapReason(ex));\n    });\n    messageHandler.on(\"PasswordRequest\", ex => {\n      this.#passwordCapability = Promise.withResolvers();\n      try {\n        if (!loadingTask.onPassword) {\n          throw wrapReason(ex);\n        }\n        const updatePassword = password => {\n          if (password instanceof Error) {\n            this.#passwordCapability.reject(password);\n          } else {\n            this.#passwordCapability.resolve({\n              password\n            });\n          }\n        };\n        loadingTask.onPassword(updatePassword, ex.code);\n      } catch (err) {\n        this.#passwordCapability.reject(err);\n      }\n      return this.#passwordCapability.promise;\n    });\n    messageHandler.on(\"DataLoaded\", data => {\n      this.#onProgress({\n        loaded: data.length,\n        total: data.length\n      });\n      this.downloadInfoCapability.resolve(data);\n    });\n    messageHandler.on(\"StartRenderPage\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      const page = this.#pageCache.get(data.pageIndex);\n      page._startRenderPage(data.transparency, data.cacheKey);\n    });\n    messageHandler.on(\"commonobj\", ([id, type, exportedData]) => {\n      if (this.destroyed) {\n        return null;\n      }\n      if (this.commonObjs.has(id)) {\n        return null;\n      }\n      switch (type) {\n        case \"Font\":\n          if (\"error\" in exportedData) {\n            const exportedError = exportedData.error;\n            warn(`Error during font loading: ${exportedError}`);\n            this.commonObjs.resolve(id, exportedError);\n            break;\n          }\n          const fontData = new FontInfo(exportedData);\n          const inspectFont = this._params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;\n          const font = new FontFaceObject(fontData, inspectFont, exportedData.charProcOperatorList, exportedData.extra);\n          this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise(\"FontFallback\", {\n            id\n          })).finally(() => {\n            if (!font.fontExtraProperties) {\n              font.clearData();\n            }\n            this.commonObjs.resolve(id, font);\n          });\n          break;\n        case \"CopyLocalImage\":\n          const {\n            imageRef\n          } = exportedData;\n          assert(imageRef, \"The imageRef must be defined.\");\n          for (const pageProxy of this.#pageCache.values()) {\n            for (const [, data] of pageProxy.objs) {\n              if (data?.ref !== imageRef) {\n                continue;\n              }\n              if (!data.dataLen) {\n                return null;\n              }\n              const copy = structuredClone(data);\n              this.commonObjs.resolve(id, copy);\n              return data.dataLen;\n            }\n          }\n          break;\n        case \"FontPath\":\n          this.commonObjs.resolve(id, new FontPathInfo(exportedData));\n          break;\n        case \"Image\":\n          this.commonObjs.resolve(id, exportedData);\n          break;\n        case \"Pattern\":\n          const pattern = new PatternInfo(exportedData);\n          this.commonObjs.resolve(id, pattern.getIR());\n          break;\n        default:\n          throw new Error(`Got unknown common object type ${type}`);\n      }\n      return null;\n    });\n    messageHandler.on(\"obj\", ([id, pageIndex, type, imageData]) => {\n      if (this.destroyed) {\n        return;\n      }\n      const pageProxy = this.#pageCache.get(pageIndex);\n      if (pageProxy.objs.has(id)) {\n        return;\n      }\n      if (pageProxy._intentStates.size === 0) {\n        imageData?.bitmap?.close();\n        return;\n      }\n      switch (type) {\n        case \"Image\":\n        case \"Pattern\":\n          pageProxy.objs.resolve(id, imageData);\n          break;\n        default:\n          throw new Error(`Got unknown object type ${type}`);\n      }\n    });\n    messageHandler.on(\"DocProgress\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      this.#onProgress(data);\n    });\n    messageHandler.on(\"FetchBinaryData\", async data => {\n      if (this.destroyed) {\n        throw new Error(\"Worker was destroyed.\");\n      }\n      if (!this.binaryDataFactory) {\n        throw new Error(\"`BinaryDataFactory` not initialized, see the `useWorkerFetch` parameter.\");\n      }\n      return this.binaryDataFactory.fetch(data);\n    });\n  }\n  getData() {\n    return this.messageHandler.sendWithPromise(\"GetData\", null);\n  }\n  saveDocument() {\n    if (this.annotationStorage.size <= 0) {\n      warn(\"saveDocument called while `annotationStorage` is empty, \" + \"please use the getData-method instead.\");\n    }\n    const {\n      map,\n      transfer\n    } = this.annotationStorage.serializable;\n    return this.messageHandler.sendWithPromise(\"SaveDocument\", {\n      isPureXfa: !!this._htmlForXfa,\n      numPages: this._numPages,\n      annotationStorage: map,\n      filename: this.#fullReader?.filename ?? null\n    }, transfer).finally(() => {\n      this.annotationStorage.resetModified();\n    });\n  }\n  extractPages(pageInfos) {\n    const params = {\n      pageInfos\n    };\n    let transfer;\n    const ImageBitmapCtor = globalThis.ImageBitmap;\n    if (typeof ImageBitmapCtor === \"function\") {\n      const infos = Array.isArray(pageInfos) ? pageInfos : [pageInfos];\n      for (const pageInfo of infos) {\n        if (pageInfo?.image instanceof ImageBitmapCtor) {\n          (transfer ||= []).push(pageInfo.image);\n        }\n      }\n    }\n    if (this.annotationStorage.size > 0) {\n      const serialized = this.annotationStorage.serializable;\n      let {\n        map\n      } = serialized;\n      if (serialized.transfer?.length) {\n        if (transfer) {\n          transfer.push(...serialized.transfer);\n        } else {\n          transfer = serialized.transfer;\n        }\n      }\n      const mapping = this.pagesMapper.getMapping();\n      if (mapping) {\n        const remapped = new Map();\n        for (const [k, v] of map) {\n          if (v?.pageIndex !== undefined && v.pageIndex >= 0 && v.pageIndex < mapping.length) {\n            const sourceIdx = mapping[v.pageIndex] - 1;\n            if (sourceIdx !== v.pageIndex) {\n              remapped.set(k, {\n                ...v,\n                pageIndex: sourceIdx\n              });\n              continue;\n            }\n          }\n          remapped.set(k, v);\n        }\n        map = remapped;\n      }\n      params.annotationStorage = map;\n    }\n    return this.messageHandler.sendWithPromise(\"ExtractPages\", params, transfer).finally(() => {\n      this.annotationStorage.resetModified();\n    });\n  }\n  getPage(pageNumber) {\n    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.pagesMapper.pagesNumber) {\n      return Promise.reject(new Error(\"Invalid page request.\"));\n    }\n    const pageIndex = pageNumber - 1;\n    const newPageIndex = this.pagesMapper.getPageId(pageNumber) - 1;\n    const cachedPromise = this.#pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(\"GetPage\", {\n      pageIndex: newPageIndex\n    }).then(pageInfo => {\n      if (this.destroyed) {\n        throw new Error(\"Transport destroyed\");\n      }\n      if (pageInfo.refStr) {\n        this.#pageRefCache.set(pageInfo.refStr, newPageIndex);\n      }\n      const page = new PDFPageProxy(pageIndex, pageInfo, this, this.pagesMapper, this._params.pdfBug);\n      this.#pageCache.set(pageIndex, page);\n      return page;\n    });\n    this.#pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n  async getPageIndex(ref) {\n    if (!isRefProxy(ref)) {\n      throw new Error(\"Invalid pageIndex request.\");\n    }\n    const index = await this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n      num: ref.num,\n      gen: ref.gen\n    });\n    const pageNumber = this.pagesMapper.getPageNumber(index + 1);\n    if (pageNumber === 0) {\n      throw new Error(\"GetPageIndex: page has been removed.\");\n    }\n    return pageNumber - 1;\n  }\n  getAnnotations(pageIndex, intent) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1,\n      intent\n    });\n  }\n  getFieldObjects() {\n    return this.#cacheSimpleMethod(\"GetFieldObjects\");\n  }\n  hasJSActions() {\n    return this.#cacheSimpleMethod(\"HasJSActions\");\n  }\n  getCalculationOrderIds() {\n    return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n  }\n  getDestinations() {\n    return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n  }\n  getDestination(id) {\n    if (typeof id !== \"string\") {\n      return Promise.reject(new Error(\"Invalid destination request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetDestination\", {\n      id\n    });\n  }\n  getPageLabels() {\n    return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n  }\n  getPageLayout() {\n    return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n  }\n  getPageMode() {\n    return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n  }\n  getViewerPreferences() {\n    return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n  }\n  getOpenAction() {\n    return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n  }\n  getAttachments() {\n    return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n  }\n  getAttachmentContent(id) {\n    return this.messageHandler.sendWithPromise(\"GetAttachmentContent\", id);\n  }\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotationsByType\", {\n      types,\n      pageIndexesToSkip\n    });\n  }\n  getDocJSActions() {\n    return this.#cacheSimpleMethod(\"GetDocJSActions\");\n  }\n  getPageJSActions(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1\n    });\n  }\n  getStructTree(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1\n    });\n  }\n  getOutline() {\n    return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n  }\n  getOptionalContentConfig(renderingIntent) {\n    return this.#cacheSimpleMethod(\"GetOptionalContentConfig\").then(data => new OptionalContentConfig(data, renderingIntent));\n  }\n  getPermissions() {\n    return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n  }\n  getMetadata() {\n    const name = \"GetMetadata\";\n    return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, null).then(results => ({\n      info: results[0],\n      metadata: results[1] ? new Metadata(results[1]) : null,\n      contentDispositionFilename: this.#fullReader?.filename ?? null,\n      contentLength: this.#fullReader?.contentLength ?? null,\n      hasStructTree: results[2]\n    })));\n  }\n  getMarkInfo() {\n    return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n  }\n  getRawData(data) {\n    return this.messageHandler.sendWithPromise(\"GetRawData\", data);\n  }\n  async startCleanup(keepLoadedFonts = false) {\n    if (this.destroyed) {\n      return;\n    }\n    await this.messageHandler.sendWithPromise(\"Cleanup\", null);\n    for (const page of this.#pageCache.values()) {\n      const cleanupSuccessful = page.cleanup();\n      if (!cleanupSuccessful) {\n        throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);\n      }\n    }\n    this.commonObjs.clear();\n    if (!keepLoadedFonts) {\n      this.fontLoader.clear();\n    }\n    this.#methodPromises.clear();\n    this.filterFactory.destroy(true);\n    TextLayer.cleanup();\n  }\n  cachedPageNumber(ref) {\n    if (!isRefProxy(ref)) {\n      return null;\n    }\n    const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;\n    const pageIndex = this.#pageRefCache.get(refStr);\n    if (pageIndex >= 0) {\n      const pageNumber = this.pagesMapper.getPageNumber(pageIndex + 1);\n      if (pageNumber !== 0) {\n        return pageNumber;\n      }\n    }\n    return null;\n  }\n}\nclass RenderTask {\n  _internalRenderTask = null;\n  onContinue = null;\n  onError = null;\n  constructor(internalRenderTask) {\n    this._internalRenderTask = internalRenderTask;\n  }\n  get promise() {\n    return this._internalRenderTask.capability.promise;\n  }\n  cancel(extraDelay = 0) {\n    this._internalRenderTask.cancel(null, extraDelay);\n  }\n  get separateAnnots() {\n    const {\n      separateAnnots\n    } = this._internalRenderTask.operatorList;\n    if (!separateAnnots) {\n      return false;\n    }\n    const {\n      annotationCanvasMap\n    } = this._internalRenderTask;\n    return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;\n  }\n  get imageCoordinates() {\n    return this._internalRenderTask.imageCoordinates || null;\n  }\n}\nclass InternalRenderTask {\n  #rAF = null;\n  static #canvasInUse = new WeakSet();\n  constructor({\n    callback,\n    params,\n    objs,\n    commonObjs,\n    annotationCanvasMap,\n    operatorList,\n    pageIndex,\n    canvasFactory,\n    filterFactory,\n    useRequestAnimationFrame = false,\n    pdfBug = false,\n    pageColors = null,\n    enableHWA = false,\n    operationsFilter = null\n  }) {\n    this.callback = callback;\n    this.params = params;\n    this.objs = objs;\n    this.commonObjs = commonObjs;\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.operatorListIdx = null;\n    this.operatorList = operatorList;\n    this._pageIndex = pageIndex;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this._pdfBug = pdfBug;\n    this.pageColors = pageColors;\n    this.running = false;\n    this.graphicsReadyCallback = null;\n    this.graphicsReady = false;\n    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\n    this.cancelled = false;\n    this.capability = Promise.withResolvers();\n    this.task = new RenderTask(this);\n    this._cancelBound = this.cancel.bind(this);\n    this._continueBound = this._continue.bind(this);\n    this._scheduleNextBound = this._scheduleNext.bind(this);\n    this._nextBound = this._next.bind(this);\n    this._canvas = params.canvas;\n    this._canvasContext = params.canvas ? null : params.canvasContext;\n    this._enableHWA = enableHWA;\n    this._dependencyTracker = params.dependencyTracker;\n    this._imagesTracker = params.imagesTracker;\n    this._operationsFilter = operationsFilter;\n  }\n  get completed() {\n    return this.capability.promise.catch(function () {});\n  }\n  initializeGraphics({\n    transparency = false,\n    optionalContentConfig\n  }) {\n    if (this.cancelled) {\n      return;\n    }\n    if (this._canvas) {\n      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {\n        throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\n      }\n      InternalRenderTask.#canvasInUse.add(this._canvas);\n    }\n    if (this._pdfBug && globalThis.StepperManager?.enabled) {\n      this.stepper = globalThis.StepperManager.create(this._pageIndex);\n      this.stepper.init(this.operatorList);\n      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n    }\n    const {\n      viewport,\n      transform,\n      background,\n      dependencyTracker,\n      imagesTracker\n    } = this.params;\n    const canvasContext = this._canvasContext || this._canvas.getContext(\"2d\", {\n      alpha: false,\n      willReadFrequently: !this._enableHWA\n    });\n    this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n      optionalContentConfig\n    }, this.annotationCanvasMap, this.pageColors, dependencyTracker, imagesTracker);\n    this.gfx.beginDrawing({\n      transform,\n      viewport,\n      transparency,\n      background\n    });\n    this.operatorListIdx = 0;\n    this.graphicsReady = true;\n    this.graphicsReadyCallback?.();\n  }\n  cancel(error = null, extraDelay = 0) {\n    this.running = false;\n    this.cancelled = true;\n    this.gfx?.endDrawing();\n    if (this.#rAF) {\n      window.cancelAnimationFrame(this.#rAF);\n      this.#rAF = null;\n    }\n    InternalRenderTask.#canvasInUse.delete(this._canvas);\n    error ||= new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay);\n    this.callback(error);\n    this.task.onError?.(error);\n  }\n  operatorListChanged() {\n    if (!this.graphicsReady) {\n      this.graphicsReadyCallback ||= this._continueBound;\n      return;\n    }\n    this.gfx.dependencyTracker?.growOperationsCount(this.operatorList.fnArray.length);\n    this.stepper?.updateOperatorList(this.operatorList);\n    if (this.running) {\n      return;\n    }\n    this._continue();\n  }\n  _continue() {\n    this.running = true;\n    if (this.cancelled) {\n      return;\n    }\n    if (this.task.onContinue) {\n      this.task.onContinue(this._scheduleNextBound);\n    } else {\n      this._scheduleNext();\n    }\n  }\n  _scheduleNext() {\n    if (this._useRequestAnimationFrame) {\n      this.#rAF = window.requestAnimationFrame(() => {\n        this.#rAF = null;\n        this._nextBound().catch(this._cancelBound);\n      });\n    } else {\n      Promise.resolve().then(this._nextBound).catch(this._cancelBound);\n    }\n  }\n  async _next() {\n    if (this.cancelled) {\n      return;\n    }\n    this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper, this._operationsFilter);\n    if (this.operatorListIdx === this.operatorList.argsArray.length) {\n      this.running = false;\n      if (this.operatorList.lastChunk) {\n        this.gfx.endDrawing();\n        InternalRenderTask.#canvasInUse.delete(this._canvas);\n        this.callback();\n      }\n    }\n  }\n}\nconst version = \"6.1.200\";\nconst build = \"6353acefe\";\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.math.sum-precise.js\nvar es_math_sum_precise = __webpack_require__(3068);\n;// ./src/display/editor/color_picker.js\n\n\n\nclass ColorPicker {\n  #button = null;\n  #buttonSwatch = null;\n  #defaultColor;\n  #dropdown = null;\n  #dropdownWasFromKeyboard = false;\n  #isMainColorPicker = false;\n  #editor = null;\n  #eventBus;\n  #openDropdownAC = null;\n  #uiManager = null;\n  static #l10nColor = null;\n  static get _keyboardManager() {\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"Escape\"], ColorPicker.prototype._hideDropdownFromKeyboard], [[\"Space\"], ColorPicker.prototype._colorSelectFromKeyboard], [[\"ArrowDown\", \"ArrowRight\"], ColorPicker.prototype._moveToNext], [[\"ArrowUp\", \"ArrowLeft\"], ColorPicker.prototype._moveToPrevious], [[\"Home\"], ColorPicker.prototype._moveToBeginning], [[\"End\"], ColorPicker.prototype._moveToEnd]]));\n  }\n  constructor({\n    editor = null,\n    uiManager = null\n  }) {\n    if (editor) {\n      this.#isMainColorPicker = false;\n      this.#editor = editor;\n    } else {\n      this.#isMainColorPicker = true;\n    }\n    this.#uiManager = editor?._uiManager || uiManager;\n    this.#eventBus = this.#uiManager._eventBus;\n    this.#defaultColor = editor?.color?.toUpperCase() || this.#uiManager?.highlightColors.values().next().value || \"#FFFF98\";\n    ColorPicker.#l10nColor ||= Object.freeze({\n      blue: \"pdfjs-editor-colorpicker-blue\",\n      green: \"pdfjs-editor-colorpicker-green\",\n      pink: \"pdfjs-editor-colorpicker-pink\",\n      red: \"pdfjs-editor-colorpicker-red\",\n      yellow: \"pdfjs-editor-colorpicker-yellow\"\n    });\n  }\n  renderButton() {\n    const button = this.#button = document.createElement(\"button\");\n    button.className = \"colorPicker\";\n    button.tabIndex = \"0\";\n    button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-button\");\n    button.ariaHasPopup = \"true\";\n    if (this.#editor) {\n      button.ariaControls = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    const signal = this.#uiManager._signal;\n    button.addEventListener(\"click\", this.#openDropdown.bind(this), {\n      signal\n    });\n    button.addEventListener(\"keydown\", this.#keyDown.bind(this), {\n      signal\n    });\n    const swatch = this.#buttonSwatch = document.createElement(\"span\");\n    swatch.className = \"swatch\";\n    swatch.ariaHidden = \"true\";\n    swatch.style.backgroundColor = this.#defaultColor;\n    button.append(swatch);\n    return button;\n  }\n  renderMainDropdown() {\n    const dropdown = this.#dropdown = this.#getDropdownRoot();\n    dropdown.ariaOrientation = \"horizontal\";\n    dropdown.ariaLabelledBy = \"highlightColorPickerLabel\";\n    return dropdown;\n  }\n  #getDropdownRoot() {\n    const div = document.createElement(\"div\");\n    const signal = this.#uiManager._signal;\n    div.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    div.className = \"dropdown\";\n    div.role = \"listbox\";\n    div.ariaMultiSelectable = \"false\";\n    div.ariaOrientation = \"vertical\";\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-dropdown\");\n    if (this.#editor) {\n      div.id = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    for (const [name, color] of this.#uiManager.highlightColors) {\n      const button = document.createElement(\"button\");\n      button.tabIndex = \"0\";\n      button.role = \"option\";\n      button.setAttribute(\"data-color\", color);\n      button.title = name;\n      button.setAttribute(\"data-l10n-id\", ColorPicker.#l10nColor[name]);\n      const swatch = document.createElement(\"span\");\n      button.append(swatch);\n      swatch.className = \"swatch\";\n      swatch.style.backgroundColor = color;\n      button.ariaSelected = color === this.#defaultColor;\n      button.addEventListener(\"click\", this.#colorSelect.bind(this, color), {\n        signal\n      });\n      div.append(button);\n    }\n    div.addEventListener(\"keydown\", this.#keyDown.bind(this), {\n      signal\n    });\n    return div;\n  }\n  #colorSelect(color, event) {\n    event.stopPropagation();\n    this.#eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      value: color\n    });\n    this.updateColor(color);\n  }\n  _colorSelectFromKeyboard(event) {\n    if (event.target === this.#button) {\n      this.#openDropdown(event);\n      return;\n    }\n    const color = event.target.getAttribute(\"data-color\");\n    if (!color) {\n      return;\n    }\n    this.#colorSelect(color, event);\n  }\n  _moveToNext(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    if (event.target === this.#button) {\n      this.#dropdown.firstElementChild?.focus();\n      return;\n    }\n    event.target.nextSibling?.focus();\n  }\n  _moveToPrevious(event) {\n    if (event.target === this.#dropdown?.firstElementChild || event.target === this.#button) {\n      if (this.#isDropdownVisible) {\n        this._hideDropdownFromKeyboard();\n      }\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n    }\n    event.target.previousSibling?.focus();\n  }\n  _moveToBeginning(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.firstElementChild?.focus();\n  }\n  _moveToEnd(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.lastElementChild?.focus();\n  }\n  #keyDown(event) {\n    ColorPicker._keyboardManager.exec(this, event);\n  }\n  #openDropdown(event) {\n    if (this.#isDropdownVisible) {\n      this.hideDropdown();\n      return;\n    }\n    this.#dropdownWasFromKeyboard = event.detail === 0;\n    if (!this.#openDropdownAC) {\n      this.#openDropdownAC = new AbortController();\n      window.addEventListener(\"pointerdown\", this.#pointerDown.bind(this), {\n        signal: this.#uiManager.combinedSignal(this.#openDropdownAC)\n      });\n    }\n    this.#button.ariaExpanded = \"true\";\n    if (this.#dropdown) {\n      this.#dropdown.classList.remove(\"hidden\");\n      return;\n    }\n    const root = this.#dropdown = this.#getDropdownRoot();\n    this.#button.append(root);\n  }\n  #pointerDown(event) {\n    if (this.#dropdown?.contains(event.target)) {\n      return;\n    }\n    this.hideDropdown();\n  }\n  hideDropdown() {\n    this.#dropdown?.classList.add(\"hidden\");\n    this.#button.ariaExpanded = \"false\";\n    this.#openDropdownAC?.abort();\n    this.#openDropdownAC = null;\n  }\n  get #isDropdownVisible() {\n    return this.#dropdown && !this.#dropdown.classList.contains(\"hidden\");\n  }\n  _hideDropdownFromKeyboard() {\n    if (this.#isMainColorPicker) {\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#editor?.unselect();\n      return;\n    }\n    this.hideDropdown();\n    this.#button.focus({\n      preventScroll: true,\n      focusVisible: this.#dropdownWasFromKeyboard\n    });\n  }\n  updateColor(color) {\n    if (this.#buttonSwatch) {\n      this.#buttonSwatch.style.backgroundColor = color;\n    }\n    if (!this.#dropdown) {\n      return;\n    }\n    const i = this.#uiManager.highlightColors.values();\n    for (const child of this.#dropdown.children) {\n      child.ariaSelected = i.next().value === color.toUpperCase();\n    }\n  }\n  destroy() {\n    this.#button?.remove();\n    this.#button = null;\n    this.#buttonSwatch = null;\n    this.#dropdown?.remove();\n    this.#dropdown = null;\n  }\n}\nclass BasicColorPicker {\n  #input = null;\n  #hasAlpha = false;\n  #editor = null;\n  #uiManager = null;\n  static #l10nColor = null;\n  constructor(editor) {\n    this.#editor = editor;\n    this.#uiManager = editor._uiManager;\n    BasicColorPicker.#l10nColor ||= Object.freeze({\n      freetext: \"pdfjs-editor-color-picker-free-text-input\",\n      ink: \"pdfjs-editor-color-picker-ink-input\"\n    });\n  }\n  renderButton() {\n    if (this.#input) {\n      return this.#input;\n    }\n    const {\n      editorType,\n      colorType,\n      colorAndOpacityType,\n      opacityType,\n      color,\n      opacity\n    } = this.#editor;\n    const hasAlpha = this.#hasAlpha = FeatureTest.isAlphaColorInputSupported && opacityType !== undefined;\n    const input = this.#input = document.createElement(\"input\");\n    input.type = \"color\";\n    if (hasAlpha) {\n      input.setAttribute(\"alpha\", \"\");\n      const alphaHex = Util.hexNums[Math.round((opacity ?? 1) * 255)];\n      input.value = (color || \"#000000\") + alphaHex;\n    } else {\n      input.value = color || \"#000000\";\n    }\n    input.className = \"basicColorPicker\";\n    input.tabIndex = 0;\n    input.setAttribute(\"data-l10n-id\", BasicColorPicker.#l10nColor[editorType]);\n    input.addEventListener(\"input\", () => {\n      if (hasAlpha) {\n        const rgba = getRGBA(input.value);\n        if (!rgba) {\n          return;\n        }\n        const [r, g, b, op] = rgba;\n        const hex = Util.makeHexColor(r, g, b);\n        if (colorAndOpacityType !== undefined) {\n          this.#uiManager.updateParams(colorAndOpacityType, {\n            color: hex,\n            opacity: op\n          });\n        } else {\n          this.#uiManager.updateParams(colorType, hex);\n          this.#uiManager.updateParams(opacityType, op);\n        }\n      } else {\n        this.#uiManager.updateParams(colorType, input.value);\n      }\n    }, {\n      signal: this.#uiManager._signal\n    });\n    return input;\n  }\n  update(value) {\n    if (!this.#input) {\n      return;\n    }\n    if (this.#hasAlpha) {\n      const alphaHex = Util.hexNums[Math.round(this.#editor.opacity * 255)];\n      this.#input.value = value + alphaHex;\n    } else {\n      this.#input.value = value;\n    }\n  }\n  updateOpacity(value) {\n    if (!this.#input || !this.#hasAlpha) {\n      return;\n    }\n    const alphaHex = Util.hexNums[Math.round(value * 255)];\n    this.#input.value = this.#editor.color + alphaHex;\n  }\n  destroy() {\n    this.#input?.remove();\n    this.#input = null;\n  }\n  hideDropdown() {}\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.flat-map.js\nvar es_iterator_flat_map = __webpack_require__(531);\n;// ./src/shared/scripting_utils.js\n\n\n\nfunction makeColorComp(n) {\n  return Math.floor(MathClamp(n, 0, 1) * 255).toString(16).padStart(2, \"0\");\n}\nfunction scaleAndClamp(x) {\n  return MathClamp(x, 0, 1) * 255;\n}\nclass ColorConverters {\n  static CMYK_G([c, y, m, k]) {\n    return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n  }\n  static G_CMYK([g]) {\n    return [\"CMYK\", 0, 0, 0, 1 - g];\n  }\n  static G_RGB([g]) {\n    return [\"RGB\", g, g, g];\n  }\n  static G_rgb([g]) {\n    g = scaleAndClamp(g);\n    return [g, g, g];\n  }\n  static G_HTML([g]) {\n    const G = makeColorComp(g);\n    return `#${G}${G}${G}`;\n  }\n  static RGB_G([r, g, b]) {\n    return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n  }\n  static RGB_rgb(color) {\n    return color.map(scaleAndClamp);\n  }\n  static RGB_HTML(color) {\n    return `#${color.map(makeColorComp).join(\"\")}`;\n  }\n  static T_HTML() {\n    return \"#00000000\";\n  }\n  static T_rgb() {\n    return [null];\n  }\n  static CMYK_RGB([c, y, m, k]) {\n    return [\"RGB\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\n  }\n  static CMYK_rgb([c, y, m, k]) {\n    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];\n  }\n  static CMYK_HTML(components) {\n    const rgb = this.CMYK_RGB(components).slice(1);\n    return this.RGB_HTML(rgb);\n  }\n  static RGB_CMYK([r, g, b]) {\n    const c = 1 - r;\n    const m = 1 - g;\n    const y = 1 - b;\n    const k = Math.min(c, m, y);\n    return [\"CMYK\", c, m, y, k];\n  }\n}\nconst DateFormats = (/* unused pure expression or super */ null && ([\"m/d\", \"m/d/yy\", \"mm/dd/yy\", \"mm/yy\", \"d-mmm\", \"d-mmm-yy\", \"dd-mmm-yy\", \"yy-mm-dd\", \"mmm-yy\", \"mmmm-yy\", \"mmm d, yyyy\", \"mmmm d, yyyy\", \"m/d/yy h:MM tt\", \"m/d/yy HH:MM\"]));\nconst TimeFormats = (/* unused pure expression or super */ null && ([\"HH:MM\", \"h:MM tt\", \"HH:MM:ss\", \"h:MM:ss tt\"]));\n\n;// ./src/display/svg_factory.js\n\nclass BaseSVGFactory {\n  create(width, height, skipDimensions = false) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid SVG dimensions\");\n    }\n    const svg = this._createSVG(\"svg:svg\");\n    svg.setAttribute(\"version\", \"1.1\");\n    if (!skipDimensions) {\n      svg.setAttribute(\"width\", `${width}px`);\n      svg.setAttribute(\"height\", `${height}px`);\n    }\n    svg.setAttribute(\"preserveAspectRatio\", \"none\");\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n    return svg;\n  }\n  createElement(type) {\n    if (typeof type !== \"string\") {\n      throw new Error(\"Invalid SVG element type\");\n    }\n    return this._createSVG(type);\n  }\n  _createSVG(type) {\n    unreachable(\"Abstract method `_createSVG` called.\");\n  }\n}\nclass DOMSVGFactory extends BaseSVGFactory {\n  _createSVG(type) {\n    return document.createElementNS(SVG_NS, type);\n  }\n}\n\n;// ./src/display/annotation_layer.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst annotation_layer_DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\nconst TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000;\nclass AnnotationElementFactory {\n  static create(parameters) {\n    const subtype = parameters.data.annotationType;\n    switch (subtype) {\n      case AnnotationType.LINK:\n        return new LinkAnnotationElement(parameters);\n      case AnnotationType.TEXT:\n        return new TextAnnotationElement(parameters);\n      case AnnotationType.WIDGET:\n        const fieldType = parameters.data.fieldType;\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotationElement(parameters);\n          case \"Btn\":\n            if (parameters.data.radioButton) {\n              return new RadioButtonWidgetAnnotationElement(parameters);\n            } else if (parameters.data.checkBox) {\n              return new CheckboxWidgetAnnotationElement(parameters);\n            }\n            return new PushButtonWidgetAnnotationElement(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotationElement(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotationElement(parameters);\n        }\n        return new WidgetAnnotationElement(parameters);\n      case AnnotationType.POPUP:\n        return new PopupAnnotationElement(parameters);\n      case AnnotationType.FREETEXT:\n        return new FreeTextAnnotationElement(parameters);\n      case AnnotationType.LINE:\n        return new LineAnnotationElement(parameters);\n      case AnnotationType.SQUARE:\n        return new SquareAnnotationElement(parameters);\n      case AnnotationType.CIRCLE:\n        return new CircleAnnotationElement(parameters);\n      case AnnotationType.POLYLINE:\n        return new PolylineAnnotationElement(parameters);\n      case AnnotationType.CARET:\n        return new CaretAnnotationElement(parameters);\n      case AnnotationType.INK:\n        return new InkAnnotationElement(parameters);\n      case AnnotationType.POLYGON:\n        return new PolygonAnnotationElement(parameters);\n      case AnnotationType.HIGHLIGHT:\n        return new HighlightAnnotationElement(parameters);\n      case AnnotationType.UNDERLINE:\n        return new UnderlineAnnotationElement(parameters);\n      case AnnotationType.SQUIGGLY:\n        return new SquigglyAnnotationElement(parameters);\n      case AnnotationType.STRIKEOUT:\n        return new StrikeOutAnnotationElement(parameters);\n      case AnnotationType.STAMP:\n        return new StampAnnotationElement(parameters);\n      case AnnotationType.FILEATTACHMENT:\n        return new FileAttachmentAnnotationElement(parameters);\n      case AnnotationType.RICHMEDIA:\n      case AnnotationType.SCREEN:\n        return new MediaAnnotationElement(parameters);\n      default:\n        return new AnnotationElement(parameters);\n    }\n  }\n}\nclass AnnotationElement {\n  #updates = null;\n  #hasBorder = false;\n  #popupElement = null;\n  constructor(parameters, {\n    isRenderable = false,\n    ignoreBorder = false,\n    createQuadrilaterals = false\n  } = {}) {\n    this.isRenderable = isRenderable;\n    this.data = parameters.data;\n    this.layer = parameters.layer;\n    this.linkService = parameters.linkService;\n    this.downloadManager = parameters.downloadManager;\n    this.imageResourcesPath = parameters.imageResourcesPath;\n    this.renderForms = parameters.renderForms;\n    this.svgFactory = parameters.svgFactory;\n    this.annotationStorage = parameters.annotationStorage;\n    this.enableComment = parameters.enableComment;\n    this.enableScripting = parameters.enableScripting;\n    this.hasJSActions = parameters.hasJSActions;\n    this._fieldObjects = parameters.fieldObjects;\n    this.parent = parameters.parent;\n    this.hasOwnCommentButton = false;\n    if (isRenderable) {\n      this.contentElement = this.container = this._createContainer(ignoreBorder);\n    }\n    if (createQuadrilaterals) {\n      this._createQuadrilaterals();\n    }\n  }\n  static _hasPopupData({\n    contentsObj,\n    richText\n  }) {\n    return !!(contentsObj?.str || richText?.str);\n  }\n  get _isEditable() {\n    return this.data.isEditable;\n  }\n  get hasPopupData() {\n    return AnnotationElement._hasPopupData(this.data) || this.enableComment && !!this.commentText;\n  }\n  get commentData() {\n    const {\n      data\n    } = this;\n    const editor = this.annotationStorage?.getEditor(data.id);\n    if (editor) {\n      return editor.getData();\n    }\n    return data;\n  }\n  get hasCommentButton() {\n    return this.enableComment && this.hasPopupElement;\n  }\n  get commentButtonPosition() {\n    const editor = this.annotationStorage?.getEditor(this.data.id);\n    if (editor) {\n      return editor.commentButtonPositionInPage;\n    }\n    const {\n      quadPoints,\n      inkLists,\n      rect\n    } = this.data;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    if (quadPoints?.length >= 8) {\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        if (quadPoints[i + 1] > maxY) {\n          maxY = quadPoints[i + 1];\n          maxX = quadPoints[i + 2];\n        } else if (quadPoints[i + 1] === maxY) {\n          maxX = Math.max(maxX, quadPoints[i + 2]);\n        }\n      }\n      return [maxX, maxY];\n    }\n    if (inkLists?.length >= 1) {\n      for (const inkList of inkLists) {\n        for (let i = 0, ii = inkList.length; i < ii; i += 2) {\n          if (inkList[i + 1] > maxY) {\n            maxY = inkList[i + 1];\n            maxX = inkList[i];\n          } else if (inkList[i + 1] === maxY) {\n            maxX = Math.max(maxX, inkList[i]);\n          }\n        }\n      }\n      if (maxX !== Infinity) {\n        return [maxX, maxY];\n      }\n    }\n    if (rect) {\n      return [rect[2], rect[3]];\n    }\n    return null;\n  }\n  _normalizePoint(point) {\n    const {\n      page: {\n        view\n      },\n      viewport: {\n        rawDims: {\n          pageWidth,\n          pageHeight,\n          pageX,\n          pageY\n        }\n      }\n    } = this.parent;\n    point[1] = view[3] - point[1] + view[1];\n    point[0] = 100 * (point[0] - pageX) / pageWidth;\n    point[1] = 100 * (point[1] - pageY) / pageHeight;\n    return point;\n  }\n  get commentText() {\n    const {\n      data\n    } = this;\n    return this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)?.popup?.contents || data.contentsObj?.str || \"\";\n  }\n  set commentText(text) {\n    const {\n      data\n    } = this;\n    const popup = {\n      deleted: !text,\n      contents: text || \"\"\n    };\n    if (!this.annotationStorage.updateEditor(data.id, {\n      popup\n    })) {\n      this.annotationStorage.setValue(`${AnnotationEditorPrefix}${data.id}`, {\n        id: data.id,\n        annotationType: data.annotationType,\n        page: this.parent.page,\n        popup,\n        popupRef: data.popupRef,\n        modificationDate: new Date()\n      });\n    }\n    if (!text) {\n      this.removePopup();\n    }\n  }\n  removePopup() {\n    (this.#popupElement?.popup || this.popup)?.remove();\n    this.#popupElement = this.popup = null;\n  }\n  updateEdited(params) {\n    if (!this.container) {\n      return;\n    }\n    if (params.rect) {\n      this.#updates ||= {\n        rect: this.data.rect.slice(0)\n      };\n    }\n    const {\n      rect,\n      popup: newPopup\n    } = params;\n    if (rect) {\n      this.#setRectEdited(rect);\n    }\n    let popup = this.#popupElement?.popup || this.popup;\n    if (!popup && newPopup?.text) {\n      this._createPopup(newPopup);\n      popup = this.#popupElement.popup;\n    }\n    if (!popup) {\n      return;\n    }\n    popup.updateEdited(params);\n    if (newPopup?.deleted) {\n      popup.remove();\n      this.#popupElement = null;\n      this.popup = null;\n    }\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    this.#setRectEdited(this.#updates.rect);\n    this.#popupElement?.popup.resetEdited();\n    this.#updates = null;\n  }\n  #setRectEdited(rect) {\n    const {\n      container: {\n        style\n      },\n      data: {\n        rect: currentRect,\n        rotation\n      },\n      parent: {\n        viewport: {\n          rawDims: {\n            pageWidth,\n            pageHeight,\n            pageX,\n            pageY\n          }\n        }\n      }\n    } = this;\n    currentRect?.splice(0, 4, ...rect);\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`;\n    if (rotation === 0) {\n      style.width = `${100 * (rect[2] - rect[0]) / pageWidth}%`;\n      style.height = `${100 * (rect[3] - rect[1]) / pageHeight}%`;\n    } else {\n      this.setRotation(rotation);\n    }\n  }\n  _createContainer(ignoreBorder) {\n    const {\n      data,\n      parent: {\n        page,\n        viewport\n      }\n    } = this;\n    const container = document.createElement(\"section\");\n    container.setAttribute(\"data-annotation-id\", data.id);\n    if (!(this instanceof WidgetAnnotationElement) && !(this instanceof LinkAnnotationElement) && !(this instanceof MediaAnnotationElement)) {\n      container.tabIndex = 0;\n    }\n    const {\n      style\n    } = container;\n    style.zIndex = this.parent.zIndex;\n    this.parent.zIndex += 2;\n    if (data.alternativeText) {\n      container.title = data.alternativeText;\n    }\n    if (data.noRotate) {\n      container.classList.add(\"norotate\");\n    }\n    if (!data.rect || this instanceof PopupAnnotationElement) {\n      const {\n        rotation\n      } = data;\n      if (!data.hasOwnCanvas && rotation !== 0) {\n        this.setRotation(rotation, container);\n      }\n      return container;\n    }\n    const {\n      width,\n      height\n    } = this;\n    if (!ignoreBorder && data.borderStyle.width > 0) {\n      style.borderWidth = `${data.borderStyle.width}px`;\n      const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n      const verticalRadius = data.borderStyle.verticalCornerRadius;\n      if (horizontalRadius > 0 || verticalRadius > 0) {\n        const radius = `calc(${horizontalRadius}px * var(--total-scale-factor)) / calc(${verticalRadius}px * var(--total-scale-factor))`;\n        style.borderRadius = radius;\n      }\n      switch (data.borderStyle.style) {\n        case AnnotationBorderStyleType.SOLID:\n          style.borderStyle = \"solid\";\n          break;\n        case AnnotationBorderStyleType.DASHED:\n          style.borderStyle = \"dashed\";\n          break;\n        case AnnotationBorderStyleType.BEVELED:\n          warn(\"Unimplemented border style: beveled\");\n          break;\n        case AnnotationBorderStyleType.INSET:\n          warn(\"Unimplemented border style: inset\");\n          break;\n        case AnnotationBorderStyleType.UNDERLINE:\n          style.borderBottomStyle = \"solid\";\n          break;\n        default:\n          break;\n      }\n      const borderColor = data.borderColor || null;\n      if (borderColor) {\n        this.#hasBorder = true;\n        style.borderColor = Util.makeHexColor(...borderColor);\n      } else {\n        style.borderWidth = 0;\n      }\n    }\n    const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;\n    const {\n      rotation\n    } = data;\n    if (data.hasOwnCanvas || rotation === 0) {\n      style.width = `${100 * width / pageWidth}%`;\n      style.height = `${100 * height / pageHeight}%`;\n    } else {\n      this.setRotation(rotation, container);\n    }\n    return container;\n  }\n  setRotation(angle, container = this.container) {\n    if (!this.data.rect) {\n      return;\n    }\n    const {\n      pageWidth,\n      pageHeight\n    } = this.parent.viewport.rawDims;\n    let {\n      width,\n      height\n    } = this;\n    if (angle % 180 !== 0) {\n      [width, height] = [height, width];\n    }\n    container.style.width = `${100 * width / pageWidth}%`;\n    container.style.height = `${100 * height / pageHeight}%`;\n    container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n  }\n  get _commonActions() {\n    const setColor = (jsName, styleName, event) => {\n      const color = event.detail[jsName];\n      const colorType = color[0];\n      const colorArray = color.slice(1);\n      event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray);\n      this.annotationStorage.setValue(this.data.id, {\n        [styleName]: ColorConverters[`${colorType}_rgb`](colorArray)\n      });\n    };\n    return shadow(this, \"_commonActions\", {\n      display: event => {\n        const {\n          display\n        } = event.detail;\n        const hidden = display % 2 === 1;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noView: hidden,\n          noPrint: display === 1 || display === 2\n        });\n      },\n      print: event => {\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: !event.detail.print\n        });\n      },\n      hidden: event => {\n        const {\n          hidden\n        } = event.detail;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: hidden,\n          noView: hidden\n        });\n      },\n      focus: event => {\n        setTimeout(() => event.target.focus({\n          preventScroll: false\n        }), 0);\n      },\n      userName: event => {\n        event.target.title = event.detail.userName;\n      },\n      readonly: event => {\n        event.target.disabled = event.detail.readonly;\n      },\n      required: event => {\n        this._setRequired(event.target, event.detail.required);\n      },\n      bgColor: event => {\n        setColor(\"bgColor\", \"backgroundColor\", event);\n      },\n      fillColor: event => {\n        setColor(\"fillColor\", \"backgroundColor\", event);\n      },\n      fgColor: event => {\n        setColor(\"fgColor\", \"color\", event);\n      },\n      textColor: event => {\n        setColor(\"textColor\", \"color\", event);\n      },\n      borderColor: event => {\n        setColor(\"borderColor\", \"borderColor\", event);\n      },\n      strokeColor: event => {\n        setColor(\"strokeColor\", \"borderColor\", event);\n      },\n      rotation: event => {\n        const angle = event.detail.rotation;\n        this.setRotation(angle);\n        this.annotationStorage.setValue(this.data.id, {\n          rotation: angle\n        });\n      }\n    });\n  }\n  _dispatchEventFromSandbox(actions, jsEvent) {\n    const commonActions = this._commonActions;\n    for (const name of Object.keys(jsEvent.detail)) {\n      const action = actions[name] || commonActions[name];\n      action?.(jsEvent);\n    }\n  }\n  _setDefaultPropertiesFromJS(element) {\n    if (!this.enableScripting) {\n      return;\n    }\n    const storedData = this.annotationStorage.getRawValue(this.data.id);\n    if (!storedData) {\n      return;\n    }\n    const commonActions = this._commonActions;\n    for (const [actionName, detail] of Object.entries(storedData)) {\n      const action = commonActions[actionName];\n      if (action) {\n        const eventProxy = {\n          detail: {\n            [actionName]: detail\n          },\n          target: element\n        };\n        action(eventProxy);\n        delete storedData[actionName];\n      }\n    }\n  }\n  _createQuadrilaterals() {\n    if (!this.container) {\n      return;\n    }\n    const {\n      quadPoints\n    } = this.data;\n    if (!quadPoints) {\n      return;\n    }\n    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map(x => Math.fround(x));\n    if (quadPoints.length === 8) {\n      const [trX, trY, blX, blY] = quadPoints.subarray(2, 6);\n      if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {\n        return;\n      }\n    }\n    const {\n      style\n    } = this.container;\n    let svgBuffer;\n    if (this.#hasBorder) {\n      const {\n        borderColor,\n        borderWidth\n      } = style;\n      style.borderWidth = 0;\n      svgBuffer = [\"url('data:image/svg+xml;utf8,\", `<svg xmlns=\"${SVG_NS}\" preserveAspectRatio=\"none\" viewBox=\"0 0 1 1\">`, `<g fill=\"transparent\" stroke=\"${borderColor}\" stroke-width=\"${borderWidth}\">`];\n      this.container.classList.add(\"hasBorder\");\n    }\n    const width = rectTrX - rectBlX;\n    const height = rectTrY - rectBlY;\n    const {\n      svgFactory\n    } = this;\n    const svg = svgFactory.createElement(\"svg\");\n    svg.classList.add(\"quadrilateralsContainer\");\n    svg.setAttribute(\"width\", 0);\n    svg.setAttribute(\"height\", 0);\n    svg.role = \"none\";\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const clipPath = svgFactory.createElement(\"clipPath\");\n    const id = `clippath_${this.data.id}`;\n    clipPath.setAttribute(\"id\", id);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    defs.append(clipPath);\n    for (let i = 2, ii = quadPoints.length; i < ii; i += 8) {\n      const trX = quadPoints[i];\n      const trY = quadPoints[i + 1];\n      const blX = quadPoints[i + 2];\n      const blY = quadPoints[i + 3];\n      const rect = svgFactory.createElement(\"rect\");\n      const x = (blX - rectBlX) / width;\n      const y = (rectTrY - trY) / height;\n      const rectWidth = (trX - blX) / width;\n      const rectHeight = (trY - blY) / height;\n      rect.setAttribute(\"x\", x);\n      rect.setAttribute(\"y\", y);\n      rect.setAttribute(\"width\", rectWidth);\n      rect.setAttribute(\"height\", rectHeight);\n      clipPath.append(rect);\n      svgBuffer?.push(`<rect vector-effect=\"non-scaling-stroke\" x=\"${x}\" y=\"${y}\" width=\"${rectWidth}\" height=\"${rectHeight}\"/>`);\n    }\n    if (this.#hasBorder) {\n      svgBuffer.push(`</g></svg>')`);\n      style.backgroundImage = svgBuffer.join(\"\");\n    }\n    this.container.append(svg);\n    this.container.style.clipPath = `url(#${id})`;\n  }\n  _createPopup(popupData = null) {\n    const {\n      data\n    } = this;\n    let contentsObj, modificationDate;\n    if (popupData) {\n      contentsObj = {\n        str: popupData.text\n      };\n      modificationDate = popupData.date;\n    } else {\n      contentsObj = data.contentsObj;\n      modificationDate = data.modificationDate;\n    }\n    this.#popupElement = new PopupAnnotationElement({\n      data: {\n        color: data.color,\n        titleObj: data.titleObj,\n        modificationDate,\n        contentsObj,\n        richText: data.richText,\n        parentRect: data.rect,\n        borderStyle: 0,\n        id: `popup_${data.id}`,\n        rotation: data.rotation,\n        noRotate: true\n      },\n      linkService: this.linkService,\n      parent: this.parent,\n      elements: [this]\n    });\n  }\n  get hasPopupElement() {\n    return !!(this.#popupElement || this.popup || this.data.popupRef);\n  }\n  get extraPopupElement() {\n    return this.#popupElement;\n  }\n  render() {\n    unreachable(\"Abstract method `AnnotationElement.render` called\");\n  }\n  _getElementsByName(name, skipId = null) {\n    const fields = [];\n    if (this._fieldObjects) {\n      const fieldObj = this._fieldObjects[name];\n      if (fieldObj) {\n        for (const {\n          page,\n          id,\n          exportValues\n        } of fieldObj) {\n          if (page === -1) {\n            continue;\n          }\n          if (id === skipId) {\n            continue;\n          }\n          const exportValue = typeof exportValues === \"string\" ? exportValues : null;\n          const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n          if (domElement && !GetElementsByNameSet.has(domElement)) {\n            warn(`_getElementsByName - element not allowed: ${id}`);\n            continue;\n          }\n          fields.push({\n            id,\n            exportValue,\n            domElement\n          });\n        }\n      }\n      return fields;\n    }\n    for (const domElement of document.getElementsByName(name)) {\n      const {\n        exportValue\n      } = domElement;\n      const id = domElement.getAttribute(\"data-element-id\");\n      if (id === skipId) {\n        continue;\n      }\n      if (!GetElementsByNameSet.has(domElement)) {\n        continue;\n      }\n      fields.push({\n        id,\n        exportValue,\n        domElement\n      });\n    }\n    return fields;\n  }\n  show() {\n    if (this.container) {\n      this.container.hidden = false;\n    }\n    this.popup?.maybeShow();\n  }\n  hide() {\n    if (this.container) {\n      this.container.hidden = true;\n    }\n    this.popup?.forceHide();\n  }\n  getElementsToTriggerPopup() {\n    return this.container;\n  }\n  addHighlightArea() {\n    const triggers = this.getElementsToTriggerPopup();\n    if (Array.isArray(triggers)) {\n      for (const element of triggers) {\n        element.classList.add(\"highlightArea\");\n      }\n    } else {\n      triggers.classList.add(\"highlightArea\");\n    }\n  }\n  _editOnDoubleClick() {\n    if (!this._isEditable) {\n      return;\n    }\n    const {\n      annotationEditorType: mode,\n      data: {\n        id: editId\n      }\n    } = this;\n    this.container.addEventListener(\"dblclick\", () => {\n      this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n        source: this,\n        mode,\n        editId,\n        mustEnterInEditMode: true\n      });\n    });\n  }\n  updateOC(optionalContentConfig) {\n    if (!this.data.oc || !optionalContentConfig) {\n      return;\n    }\n    const isVisible = optionalContentConfig.isVisible(this.data.oc);\n    if (isVisible) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n  get width() {\n    return this.data.rect[2] - this.data.rect[0];\n  }\n  get height() {\n    return this.data.rect[3] - this.data.rect[1];\n  }\n  _setBackgroundColor(element) {\n    const color = this.data.backgroundColor || null;\n    element.style.backgroundColor = color === null ? \"transparent\" : Util.makeHexColor(...color);\n  }\n}\nclass EditorAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.editor = parameters.editor;\n  }\n  render() {\n    this.container.className = \"editorAnnotation\";\n    return this.container;\n  }\n  createOrUpdatePopup() {\n    const {\n      editor\n    } = this;\n    if (!editor.hasComment) {\n      return;\n    }\n    this._createPopup(editor.comment);\n  }\n  get hasCommentButton() {\n    return this.enableComment && this.editor.hasComment;\n  }\n  get commentButtonPosition() {\n    return this.editor.commentButtonPositionInPage;\n  }\n  get commentText() {\n    return this.editor.comment.text;\n  }\n  set commentText(text) {\n    this.editor.comment = text;\n    if (!text) {\n      this.removePopup();\n    }\n  }\n  get commentData() {\n    return this.editor.getData();\n  }\n  remove() {\n    this.parent.removeAnnotation(this.data.id);\n    this.container.remove();\n    this.container = null;\n    this.removePopup();\n  }\n}\nclass LinkAnnotationElement extends AnnotationElement {\n  constructor(parameters, options = null) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: !!options?.ignoreBorder,\n      createQuadrilaterals: true\n    });\n    this.isTooltipOnly = parameters.data.isTooltipOnly;\n  }\n  render() {\n    const {\n      data,\n      linkService\n    } = this;\n    const link = document.createElement(\"a\");\n    link.setAttribute(\"data-element-id\", data.id);\n    let isBound = false;\n    if (data.url) {\n      linkService.addLinkAttributes(link, data.url, data.newWindow);\n      isBound = true;\n    } else if (data.action) {\n      this._bindNamedAction(link, data.action, data.overlaidText);\n      isBound = true;\n    } else if (data.attachment) {\n      this.#bindAttachment(link, data.attachmentId, data.attachment, data.overlaidText, data.attachmentDest);\n      isBound = true;\n    } else if (data.setOCGState) {\n      this.#bindSetOCGState(link, data.setOCGState, data.overlaidText);\n      isBound = true;\n    } else if (data.dest) {\n      this._bindLink(link, data.dest, data.overlaidText);\n      isBound = true;\n    } else {\n      if (data.actions && (data.actions.Action || data.actions[\"Mouse Up\"] || data.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions) {\n        this._bindJSAction(link, data);\n        isBound = true;\n      }\n      if (data.resetForm) {\n        this._bindResetFormAction(link, data.resetForm);\n        isBound = true;\n      } else if (this.isTooltipOnly && !isBound) {\n        this._bindLink(link, \"\");\n        isBound = true;\n      }\n    }\n    this.container.classList.add(\"linkAnnotation\");\n    if (isBound) {\n      this.contentElement = link;\n      this.container.append(link);\n    }\n    return this.container;\n  }\n  #setInternalLink() {\n    this.container.setAttribute(\"data-internal-link\", \"\");\n  }\n  _bindLink(link, destination, overlaidText = \"\") {\n    link.href = this.linkService.getDestinationHash(destination);\n    link.onclick = () => {\n      if (destination) {\n        this.linkService.goToDestination(destination);\n      }\n      return false;\n    };\n    if (destination || destination === \"\") {\n      this.#setInternalLink();\n    }\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n  }\n  _bindNamedAction(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeNamedAction(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n  #bindAttachment(link, attachmentId, attachment, overlaidText = \"\", dest = null) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    if (attachment.description) {\n      link.title = attachment.description;\n    } else if (overlaidText) {\n      link.title = overlaidText;\n    }\n    const openAttachment = async () => {\n      const content = await this.linkService.getAttachmentContent(attachmentId);\n      if (content) {\n        this.downloadManager?.openOrDownloadData(content, attachment.filename, dest);\n      }\n    };\n    link.onclick = () => {\n      openAttachment();\n      return false;\n    };\n    this.#setInternalLink();\n  }\n  #bindSetOCGState(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeSetOCGState(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n  _bindJSAction(link, data) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    const map = new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\n    for (const name of Object.keys(data.actions)) {\n      const jsName = map.get(name);\n      if (!jsName) {\n        continue;\n      }\n      link[jsName] = () => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: data.id,\n            name\n          }\n        });\n        return false;\n      };\n    }\n    if (data.overlaidText) {\n      link.title = data.overlaidText;\n    }\n    if (!link.onclick) {\n      link.onclick = () => false;\n    }\n    this.#setInternalLink();\n  }\n  _bindResetFormAction(link, resetForm) {\n    const otherClickAction = link.onclick;\n    if (!otherClickAction) {\n      link.href = this.linkService.getAnchorUrl(\"\");\n    }\n    this.#setInternalLink();\n    if (!this._fieldObjects) {\n      warn(`_bindResetFormAction - \"resetForm\" action not supported, ` + \"ensure that the `fieldObjects` parameter is provided.\");\n      if (!otherClickAction) {\n        link.onclick = () => false;\n      }\n      return;\n    }\n    link.onclick = () => {\n      otherClickAction?.();\n      const {\n        fields: resetFormFields,\n        refs: resetFormRefs,\n        include\n      } = resetForm;\n      const allFields = [];\n      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n        const fieldIds = new Set(resetFormRefs);\n        for (const fieldName of resetFormFields) {\n          const fields = this._fieldObjects[fieldName] || [];\n          for (const {\n            id\n          } of fields) {\n            fieldIds.add(id);\n          }\n        }\n        for (const fields of Object.values(this._fieldObjects)) {\n          for (const field of fields) {\n            if (fieldIds.has(field.id) === include) {\n              allFields.push(field);\n            }\n          }\n        }\n      } else {\n        for (const fields of Object.values(this._fieldObjects)) {\n          allFields.push(...fields);\n        }\n      }\n      const storage = this.annotationStorage;\n      const allIds = [];\n      for (const field of allFields) {\n        const {\n          id\n        } = field;\n        allIds.push(id);\n        switch (field.type) {\n          case \"text\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"checkbox\":\n          case \"radiobutton\":\n            {\n              const value = field.defaultValue === field.exportValues;\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"combobox\":\n          case \"listbox\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          default:\n            continue;\n        }\n        const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n        if (!domElement) {\n          continue;\n        } else if (!GetElementsByNameSet.has(domElement)) {\n          warn(`_bindResetFormAction - element not allowed: ${id}`);\n          continue;\n        }\n        domElement.dispatchEvent(new Event(\"resetform\"));\n      }\n      if (this.enableScripting) {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: \"app\",\n            ids: allIds,\n            name: \"ResetForm\"\n          }\n        });\n      }\n      return false;\n    };\n  }\n}\nclass TextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"textAnnotation\");\n    const image = document.createElement(\"img\");\n    image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\n    image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n    image.setAttribute(\"data-l10n-args\", JSON.stringify({\n      type: this.data.name\n    }));\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.append(image);\n    return this.container;\n  }\n}\nclass WidgetAnnotationElement extends AnnotationElement {\n  render() {\n    return this.container;\n  }\n  _getKeyModifier(event) {\n    return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n  }\n  _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n    if (baseName.includes(\"mouse\")) {\n      element.addEventListener(baseName, event => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event),\n            shift: event.shiftKey,\n            modifier: this._getKeyModifier(event)\n          }\n        });\n      });\n    } else {\n      element.addEventListener(baseName, event => {\n        if (baseName === \"blur\") {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          elementData.focused = false;\n        } else if (baseName === \"focus\") {\n          if (elementData.focused) {\n            return;\n          }\n          elementData.focused = true;\n        }\n        if (!valueGetter) {\n          return;\n        }\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event)\n          }\n        });\n      });\n    }\n  }\n  _setEventListeners(element, elementData, names, getter) {\n    for (const [baseName, eventName] of names) {\n      if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n        if (eventName === \"Focus\" || eventName === \"Blur\") {\n          elementData ||= {\n            focused: false\n          };\n        }\n        this._setEventListener(element, elementData, baseName, eventName, getter);\n        if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n          this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n        } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n          this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n        }\n      }\n    }\n  }\n  _setTextStyle(element) {\n    const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n    const {\n      fontColor\n    } = this.data.defaultAppearanceData;\n    const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE;\n    const style = element.style;\n    let computedFontSize;\n    const BORDER_SIZE = 2;\n    const roundToOneDecimal = x => Math.round(10 * x) / 10;\n    if (this.data.multiLine) {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;\n      const lineHeight = height / numberOfLines;\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR));\n    } else {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR));\n    }\n    style.fontSize = `calc(${computedFontSize}px * var(--total-scale-factor))`;\n    style.color = Util.makeHexColor(...fontColor);\n    if (this.data.textAlignment !== null && !this.data.comb) {\n      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n    }\n  }\n  _setRequired(element, isRequired) {\n    if (isRequired) {\n      element.setAttribute(\"required\", true);\n    } else {\n      element.removeAttribute(\"required\");\n    }\n    element.setAttribute(\"aria-required\", isRequired);\n  }\n}\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\n    super(parameters, {\n      isRenderable\n    });\n  }\n  setPropertyOnSiblings(base, key, value, keyInStorage) {\n    const storage = this.annotationStorage;\n    for (const element of this._getElementsByName(base.name, base.id)) {\n      if (element.domElement) {\n        element.domElement[key] = value;\n      }\n      storage.setValue(element.id, {\n        [keyInStorage]: value\n      });\n    }\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    this.container.classList.add(\"textWidgetAnnotation\");\n    let element = null;\n    if (this.renderForms) {\n      const storedData = storage.getValue(id, {\n        value: this.data.fieldValue\n      });\n      let textContent = storedData.value || \"\";\n      const maxLen = storage.getValue(id, {\n        charLimit: this.data.maxLen\n      }).charLimit;\n      if (maxLen && textContent.length > maxLen) {\n        textContent = textContent.slice(0, maxLen);\n      }\n      let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n      if (fieldFormattedValues && this.data.comb) {\n        fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n      }\n      const elementData = {\n        userValue: textContent,\n        formattedValue: fieldFormattedValues,\n        lastCommittedValue: null,\n        commitKey: 1,\n        focused: false\n      };\n      if (this.data.multiLine) {\n        element = document.createElement(\"textarea\");\n        element.textContent = fieldFormattedValues ?? textContent;\n        if (this.data.doNotScroll) {\n          element.style.overflowY = \"hidden\";\n        }\n      } else {\n        element = document.createElement(\"input\");\n        element.type = this.data.password ? \"password\" : \"text\";\n        element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n        if (this.data.doNotScroll) {\n          element.style.overflowX = \"hidden\";\n        }\n      }\n      if (this.data.hasOwnCanvas) {\n        this.container.classList.add(\"hasOwnCanvas\");\n        if (storage.has(id)) {\n          this.container.classList.add(\"sandboxModified\");\n        }\n      }\n      GetElementsByNameSet.add(element);\n      this.contentElement = element;\n      element.setAttribute(\"data-element-id\", id);\n      element.disabled = this.data.readOnly;\n      element.name = this.data.fieldName;\n      element.tabIndex = 0;\n      const {\n        datetimeFormat,\n        datetimeType,\n        timeStep\n      } = this.data;\n      const hasDateOrTime = !!datetimeType && this.enableScripting;\n      if (datetimeFormat) {\n        element.title = datetimeFormat;\n      }\n      this._setRequired(element, this.data.required);\n      if (maxLen) {\n        element.maxLength = maxLen;\n      }\n      element.addEventListener(\"input\", event => {\n        storage.setValue(id, {\n          value: event.target.value\n        });\n        this.setPropertyOnSiblings(element, \"value\", event.target.value, \"value\");\n        elementData.formattedValue = null;\n      });\n      element.addEventListener(\"resetform\", event => {\n        const defaultValue = this.data.defaultFieldValue ?? \"\";\n        element.value = elementData.userValue = defaultValue;\n        elementData.formattedValue = null;\n      });\n      let blurListener = event => {\n        const {\n          formattedValue\n        } = elementData;\n        if (formattedValue !== null && formattedValue !== undefined) {\n          event.target.value = formattedValue;\n        }\n        event.target.scrollLeft = 0;\n      };\n      if (this.enableScripting && this.hasJSActions) {\n        element.addEventListener(\"focus\", event => {\n          if (elementData.focused) {\n            return;\n          }\n          const {\n            target\n          } = event;\n          if (hasDateOrTime) {\n            target.type = datetimeType;\n            if (timeStep) {\n              target.step = timeStep;\n            }\n          }\n          if (elementData.userValue) {\n            const value = elementData.userValue;\n            if (hasDateOrTime) {\n              if (datetimeType === \"time\") {\n                const date = new Date(value);\n                const parts = [date.getHours(), date.getMinutes(), date.getSeconds()];\n                target.value = parts.map(v => v.toString().padStart(2, \"0\")).join(\":\");\n              } else {\n                target.value = new Date(value - TIMEZONE_OFFSET).toISOString().split(datetimeType === \"date\" ? \"T\" : \".\", 1)[0];\n              }\n            } else {\n              target.value = value;\n            }\n          }\n          elementData.lastCommittedValue = target.value;\n          elementData.commitKey = 1;\n          if (!this.data.actions?.Focus) {\n            elementData.focused = true;\n          }\n        });\n        element.addEventListener(\"updatefromsandbox\", jsEvent => {\n          this.container.classList.add(\"sandboxModified\");\n          const actions = {\n            value(event) {\n              elementData.userValue = event.detail.value ?? \"\";\n              if (!hasDateOrTime) {\n                storage.setValue(id, {\n                  value: elementData.userValue.toString()\n                });\n              }\n              event.target.value = elementData.userValue;\n            },\n            formattedValue(event) {\n              const {\n                formattedValue\n              } = event.detail;\n              elementData.formattedValue = formattedValue;\n              if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {\n                event.target.value = formattedValue;\n              }\n              const data = {\n                formattedValue\n              };\n              if (hasDateOrTime) {\n                data.value = formattedValue;\n              }\n              storage.setValue(id, data);\n            },\n            selRange(event) {\n              event.target.setSelectionRange(...event.detail.selRange);\n            },\n            charLimit: event => {\n              const {\n                charLimit\n              } = event.detail;\n              const {\n                target\n              } = event;\n              if (charLimit === 0) {\n                target.removeAttribute(\"maxLength\");\n                return;\n              }\n              target.setAttribute(\"maxLength\", charLimit);\n              let value = elementData.userValue;\n              if (!value || value.length <= charLimit) {\n                return;\n              }\n              value = value.slice(0, charLimit);\n              target.value = elementData.userValue = value;\n              storage.setValue(id, {\n                value\n              });\n              this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n                source: this,\n                detail: {\n                  id,\n                  name: \"Keystroke\",\n                  value,\n                  willCommit: true,\n                  commitKey: 1,\n                  selStart: target.selectionStart,\n                  selEnd: target.selectionEnd\n                }\n              });\n            }\n          };\n          this._dispatchEventFromSandbox(actions, jsEvent);\n        });\n        element.addEventListener(\"keydown\", event => {\n          elementData.commitKey = 1;\n          let commitKey = -1;\n          if (event.key === \"Escape\") {\n            commitKey = 0;\n          } else if (event.key === \"Enter\" && !this.data.multiLine) {\n            commitKey = 2;\n          } else if (event.key === \"Tab\") {\n            elementData.commitKey = 3;\n          }\n          if (commitKey === -1) {\n            return;\n          }\n          const {\n            value\n          } = event.target;\n          if (elementData.lastCommittedValue === value) {\n            return;\n          }\n          elementData.lastCommittedValue = value;\n          elementData.userValue = value;\n          this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n            source: this,\n            detail: {\n              id,\n              name: \"Keystroke\",\n              value,\n              willCommit: true,\n              commitKey,\n              selStart: event.target.selectionStart,\n              selEnd: event.target.selectionEnd\n            }\n          });\n        });\n        const _blurListener = blurListener;\n        blurListener = null;\n        element.addEventListener(\"blur\", event => {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          if (!this.data.actions?.Blur) {\n            elementData.focused = false;\n          }\n          const {\n            target\n          } = event;\n          let {\n            value\n          } = target;\n          if (hasDateOrTime) {\n            if (value && datetimeType === \"time\") {\n              const parts = value.split(\":\").map(v => parseInt(v, 10));\n              value = new Date(2000, 0, 1, parts[0], parts[1], parts[2] || 0).valueOf();\n              target.step = \"\";\n            } else {\n              if (!value.includes(\"T\")) {\n                value = `${value}T00:00`;\n              }\n              value = new Date(value).valueOf();\n            }\n            target.type = \"text\";\n          }\n          elementData.userValue = value;\n          if (elementData.lastCommittedValue !== value) {\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                willCommit: true,\n                commitKey: elementData.commitKey,\n                selStart: event.target.selectionStart,\n                selEnd: event.target.selectionEnd\n              }\n            });\n          }\n          _blurListener(event);\n        });\n        if (this.data.actions?.Keystroke) {\n          element.addEventListener(\"beforeinput\", event => {\n            elementData.lastCommittedValue = null;\n            const {\n              data,\n              target\n            } = event;\n            const {\n              value,\n              selectionStart,\n              selectionEnd\n            } = target;\n            let selStart = selectionStart,\n              selEnd = selectionEnd;\n            switch (event.inputType) {\n              case \"deleteWordBackward\":\n                {\n                  const match = value.substring(0, selectionStart).match(/\\w*\\W*$/);\n                  if (match) {\n                    selStart -= match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteWordForward\":\n                {\n                  const match = value.substring(selectionStart).match(/^\\W*\\w*/);\n                  if (match) {\n                    selEnd += match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteContentBackward\":\n                if (selectionStart === selectionEnd) {\n                  selStart -= 1;\n                }\n                break;\n              case \"deleteContentForward\":\n                if (selectionStart === selectionEnd) {\n                  selEnd += 1;\n                }\n                break;\n            }\n            event.preventDefault();\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                change: data || \"\",\n                willCommit: false,\n                selStart,\n                selEnd\n              }\n            });\n          });\n        }\n        this._setEventListeners(element, elementData, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.value);\n      }\n      if (blurListener) {\n        element.addEventListener(\"blur\", blurListener);\n      }\n      if (this.data.comb) {\n        const fieldWidth = this.data.rect[2] - this.data.rect[0];\n        const combWidth = fieldWidth / maxLen;\n        element.classList.add(\"comb\");\n        element.style.setProperty(\"--comb-width\", `calc(${combWidth}px * var(--total-scale-factor))`);\n        const alignment = this.data.textAlignment;\n        if (alignment === 1 || alignment === 2) {\n          const setCombOffset = () => {\n            const free = maxLen - element.value.length;\n            element.style.setProperty(\"--comb-offset\", `${alignment === 1 ? free >> 1 : free}`);\n          };\n          setCombOffset();\n          for (const evt of [\"input\", \"blur\", \"resetform\", \"updatefromsandbox\"]) {\n            element.addEventListener(evt, setCombOffset);\n          }\n        }\n      }\n    } else {\n      element = document.createElement(\"div\");\n      element.textContent = this.data.fieldValue;\n      element.style.verticalAlign = \"middle\";\n      element.style.display = \"table-cell\";\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n    }\n    this._setTextStyle(element);\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: !!parameters.data.hasOwnCanvas\n    });\n  }\n}\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.exportValue === data.fieldValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== \"Off\";\n      storage.setValue(id, {\n        value\n      });\n    }\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"checkbox\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.setAttribute(\"exportValue\", data.exportValue);\n    element.tabIndex = 0;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const checkbox of this._getElementsByName(name, id)) {\n        const curChecked = checked && checkbox.exportValue === data.exportValue;\n        if (checkbox.domElement) {\n          checkbox.domElement.checked = curChecked;\n        }\n        storage.setValue(checkbox.id, {\n          value: curChecked\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue || \"Off\";\n      event.target.checked = defaultValue === data.exportValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            event.target.checked = event.detail.value !== \"Off\";\n            storage.setValue(id, {\n              value: event.target.checked\n            });\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.buttonValue !== null && data.fieldValue === data.buttonValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== data.buttonValue;\n      storage.setValue(id, {\n        value\n      });\n    }\n    if (value) {\n      for (const radio of this._getElementsByName(data.fieldName, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n    }\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"radio\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.tabIndex = 0;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const radio of this._getElementsByName(name, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue;\n      event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      const pdfButtonValue = data.buttonValue;\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value: event => {\n            const checked = pdfButtonValue === event.detail.value;\n            for (const radio of this._getElementsByName(event.target.name)) {\n              const curChecked = checked && radio.id === id;\n              if (radio.domElement) {\n                radio.domElement.checked = curChecked;\n              }\n              storage.setValue(radio.id, {\n                value: curChecked\n              });\n            }\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      ignoreBorder: parameters.data.hasAppearance\n    });\n  }\n  render() {\n    const container = super.render();\n    container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n    const linkElement = container.lastChild;\n    if (this.enableScripting && this.hasJSActions && linkElement) {\n      this._setDefaultPropertiesFromJS(linkElement);\n      linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        this._dispatchEventFromSandbox({}, jsEvent);\n      });\n    }\n    return container;\n  }\n}\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"choiceWidgetAnnotation\");\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    const storedData = storage.getValue(id, {\n      value: this.data.fieldValue\n    });\n    const selectElement = document.createElement(\"select\");\n    GetElementsByNameSet.add(selectElement);\n    selectElement.setAttribute(\"data-element-id\", id);\n    selectElement.disabled = this.data.readOnly;\n    this._setRequired(selectElement, this.data.required);\n    selectElement.name = this.data.fieldName;\n    selectElement.tabIndex = 0;\n    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n    if (!this.data.combo) {\n      selectElement.size = this.data.options.length;\n      if (this.data.multiSelect) {\n        selectElement.multiple = true;\n      }\n    }\n    selectElement.addEventListener(\"resetform\", event => {\n      const defaultValue = this.data.defaultFieldValue;\n      for (const option of selectElement.options) {\n        option.selected = option.value === defaultValue;\n      }\n    });\n    const fixDisplayValue = (option, value) => {\n      const newValue = value.replaceAll(\" \", \"\\u00A0\");\n      option.textContent = newValue;\n      if (newValue !== value) {\n        option.setAttribute(\"display-value\", value);\n      }\n    };\n    for (const option of this.data.options) {\n      const optionElement = document.createElement(\"option\");\n      fixDisplayValue(optionElement, option.displayValue);\n      optionElement.value = option.exportValue;\n      if (storedData.value.includes(option.exportValue)) {\n        optionElement.setAttribute(\"selected\", true);\n        addAnEmptyEntry = false;\n      }\n      selectElement.append(optionElement);\n    }\n    let removeEmptyEntry = null;\n    if (addAnEmptyEntry) {\n      const noneOptionElement = document.createElement(\"option\");\n      noneOptionElement.value = \" \";\n      noneOptionElement.setAttribute(\"hidden\", true);\n      noneOptionElement.setAttribute(\"selected\", true);\n      selectElement.prepend(noneOptionElement);\n      removeEmptyEntry = () => {\n        noneOptionElement.remove();\n        selectElement.removeEventListener(\"input\", removeEmptyEntry);\n        removeEmptyEntry = null;\n      };\n      selectElement.addEventListener(\"input\", removeEmptyEntry);\n    }\n    const getValue = isExport => {\n      const name = isExport ? \"value\" : \"textContent\";\n      const {\n        options,\n        multiple\n      } = selectElement;\n      if (!multiple) {\n        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];\n      }\n      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);\n    };\n    let selectedValues = getValue(false);\n    const getItems = event => {\n      const options = event.target.options;\n      return Array.prototype.map.call(options, option => ({\n        displayValue: option.getAttribute(\"display-value\") || option.textContent,\n        exportValue: option.value\n      }));\n    };\n    if (this.enableScripting && this.hasJSActions) {\n      selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            removeEmptyEntry?.();\n            const value = event.detail.value;\n            const values = new Set(Array.isArray(value) ? value : [value]);\n            for (const option of selectElement.options) {\n              option.selected = values.has(option.value);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          multipleSelection(event) {\n            selectElement.multiple = true;\n          },\n          remove(event) {\n            const options = selectElement.options;\n            const index = event.detail.remove;\n            options[index].selected = false;\n            selectElement.remove(index);\n            if (options.length > 0) {\n              const i = Array.prototype.findIndex.call(options, option => option.selected);\n              if (i === -1) {\n                options[0].selected = true;\n              }\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          clear(event) {\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            storage.setValue(id, {\n              value: null,\n              items: []\n            });\n            selectedValues = getValue(false);\n          },\n          insert(event) {\n            const {\n              index,\n              displayValue,\n              exportValue\n            } = event.detail.insert;\n            const selectChild = selectElement.children[index];\n            const optionElement = document.createElement(\"option\");\n            fixDisplayValue(optionElement, displayValue);\n            optionElement.value = exportValue;\n            if (selectChild) {\n              selectChild.before(optionElement);\n            } else {\n              selectElement.append(optionElement);\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          items(event) {\n            const {\n              items\n            } = event.detail;\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            for (const item of items) {\n              const {\n                displayValue,\n                exportValue\n              } = item;\n              const optionElement = document.createElement(\"option\");\n              fixDisplayValue(optionElement, displayValue);\n              optionElement.value = exportValue;\n              selectElement.append(optionElement);\n            }\n            if (selectElement.options.length > 0) {\n              selectElement.options[0].selected = true;\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          indices(event) {\n            const indices = new Set(event.detail.indices);\n            for (const option of event.target.options) {\n              option.selected = indices.has(option.index);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          editable(event) {\n            event.target.disabled = !event.detail.editable;\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      selectElement.addEventListener(\"input\", event => {\n        const exportValue = getValue(true);\n        const change = getValue(false);\n        storage.setValue(id, {\n          value: exportValue\n        });\n        event.preventDefault();\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id,\n            name: \"Keystroke\",\n            value: selectedValues,\n            change,\n            changeEx: exportValue,\n            willCommit: false,\n            commitKey: 1,\n            keyDown: false\n          }\n        });\n      });\n      this._setEventListeners(selectElement, null, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"], [\"input\", \"Validate\"]], event => event.target.value);\n    } else {\n      selectElement.addEventListener(\"input\", function (event) {\n        storage.setValue(id, {\n          value: getValue(true)\n        });\n      });\n    }\n    if (this.data.combo) {\n      this._setTextStyle(selectElement);\n    } else {}\n    this._setBackgroundColor(selectElement);\n    this._setDefaultPropertiesFromJS(selectElement);\n    this.container.append(selectElement);\n    return this.container;\n  }\n}\nclass PopupAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const {\n      data,\n      elements,\n      parent\n    } = parameters;\n    const hasCommentManager = !!parent._commentManager;\n    super(parameters, {\n      isRenderable: !hasCommentManager && AnnotationElement._hasPopupData(data)\n    });\n    this.elements = elements;\n    if (hasCommentManager && AnnotationElement._hasPopupData(data)) {\n      const popup = this.popup = this.#createPopup();\n      for (const element of elements) {\n        element.popup = popup;\n      }\n    } else {\n      this.popup = null;\n    }\n  }\n  #createPopup() {\n    return new PopupElement({\n      container: this.container,\n      color: this.data.color,\n      titleObj: this.data.titleObj,\n      modificationDate: this.data.modificationDate || this.data.creationDate,\n      contentsObj: this.data.contentsObj,\n      richText: this.data.richText,\n      rect: this.data.rect,\n      parentRect: this.data.parentRect || null,\n      parent: this.parent,\n      elements: this.elements,\n      open: this.data.open,\n      commentManager: this.parent._commentManager\n    });\n  }\n  render() {\n    const {\n      container\n    } = this;\n    container.classList.add(\"popupAnnotation\");\n    container.role = \"comment\";\n    const popup = this.popup = this.#createPopup();\n    const elementIds = [];\n    for (const element of this.elements) {\n      element.popup = popup;\n      element.container.ariaHasPopup = \"dialog\";\n      elementIds.push(element.data.id);\n      element.addHighlightArea();\n    }\n    this.container.setAttribute(\"aria-controls\", elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\"));\n    return this.container;\n  }\n}\nclass PopupElement {\n  #commentManager = null;\n  #boundKeyDown = this.#keyDown.bind(this);\n  #boundHide = this.#hide.bind(this);\n  #boundShow = this.#show.bind(this);\n  #boundToggle = this.#toggle.bind(this);\n  #color = null;\n  #container = null;\n  #contentsObj = null;\n  #dateObj = null;\n  #elements = null;\n  #parent = null;\n  #parentRect = null;\n  #pinned = false;\n  #popup = null;\n  #popupAbortController = null;\n  #position = null;\n  #commentButton = null;\n  #commentButtonPosition = null;\n  #popupPosition = null;\n  #rect = null;\n  #richText = null;\n  #titleObj = null;\n  #updates = null;\n  #wasVisible = false;\n  #firstElement = null;\n  #commentText = null;\n  constructor({\n    container,\n    color,\n    elements,\n    titleObj,\n    modificationDate,\n    contentsObj,\n    richText,\n    parent,\n    rect,\n    parentRect,\n    open,\n    commentManager = null\n  }) {\n    this.#container = container;\n    this.#titleObj = titleObj;\n    this.#contentsObj = contentsObj;\n    this.#richText = richText;\n    this.#parent = parent;\n    this.#color = color;\n    this.#rect = rect;\n    this.#parentRect = parentRect;\n    this.#elements = elements;\n    this.#commentManager = commentManager;\n    this.#firstElement = elements[0];\n    this.#dateObj = PDFDateString.toDateObject(modificationDate);\n    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n    if (!commentManager) {\n      this.#addEventListeners();\n      this.#container.hidden = true;\n      if (open) {\n        this.#toggle();\n      }\n    }\n  }\n  #addEventListeners() {\n    if (this.#popupAbortController) {\n      return;\n    }\n    this.#popupAbortController = new AbortController();\n    const {\n      signal\n    } = this.#popupAbortController;\n    for (const element of this.trigger) {\n      element.addEventListener(\"click\", this.#boundToggle, {\n        signal\n      });\n      element.addEventListener(\"pointerenter\", this.#boundShow, {\n        signal\n      });\n      element.addEventListener(\"pointerleave\", this.#boundHide, {\n        signal\n      });\n      element.classList.add(\"popupTriggerArea\");\n    }\n    for (const element of this.#elements) {\n      element.container?.addEventListener(\"keydown\", this.#boundKeyDown, {\n        signal\n      });\n    }\n  }\n  #setCommentButtonPosition() {\n    const element = this.#elements.find(e => e.hasCommentButton);\n    if (!element) {\n      return;\n    }\n    this.#commentButtonPosition = element._normalizePoint(element.commentButtonPosition);\n  }\n  renderCommentButton() {\n    if (this.#commentButton) {\n      if (!this.#commentButton.parentNode) {\n        this.#firstElement.container.after(this.#commentButton);\n      }\n      return;\n    }\n    if (!this.#commentButtonPosition) {\n      this.#setCommentButtonPosition();\n    }\n    if (!this.#commentButtonPosition) {\n      return;\n    }\n    const {\n      signal\n    } = this.#popupAbortController = new AbortController();\n    const hasOwnButton = this.#firstElement.hasOwnCommentButton;\n    const togglePopup = () => {\n      this.#commentManager.toggleCommentPopup(this, true, undefined, !hasOwnButton);\n    };\n    const showPopup = () => {\n      this.#commentManager.toggleCommentPopup(this, false, true, !hasOwnButton);\n    };\n    const hidePopup = () => {\n      this.#commentManager.toggleCommentPopup(this, false, false);\n    };\n    if (!hasOwnButton) {\n      const button = this.#commentButton = document.createElement(\"button\");\n      button.className = \"annotationCommentButton\";\n      const parentContainer = this.#firstElement.container;\n      button.style.zIndex = parseInt(parentContainer.style.zIndex, 10) + 1;\n      button.tabIndex = 0;\n      button.ariaHasPopup = \"dialog\";\n      button.ariaControls = \"commentPopup\";\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n      this.#updateColor();\n      this.#updateCommentButtonPosition();\n      button.addEventListener(\"keydown\", this.#boundKeyDown, {\n        signal\n      });\n      button.addEventListener(\"click\", togglePopup, {\n        signal\n      });\n      button.addEventListener(\"pointerenter\", showPopup, {\n        signal\n      });\n      button.addEventListener(\"pointerleave\", hidePopup, {\n        signal\n      });\n      parentContainer.after(button);\n    } else {\n      this.#commentButton = this.#firstElement.container;\n      for (const element of this.trigger) {\n        element.ariaHasPopup = \"dialog\";\n        element.ariaControls = \"commentPopup\";\n        element.addEventListener(\"keydown\", this.#boundKeyDown, {\n          signal\n        });\n        element.addEventListener(\"click\", togglePopup, {\n          signal\n        });\n        element.addEventListener(\"pointerenter\", showPopup, {\n          signal\n        });\n        element.addEventListener(\"pointerleave\", hidePopup, {\n          signal\n        });\n        element.classList.add(\"popupTriggerArea\");\n      }\n    }\n  }\n  #updateCommentButtonPosition() {\n    if (this.#firstElement.extraPopupElement && !this.#firstElement.editor) {\n      return;\n    }\n    if (!this.#commentButton) {\n      this.renderCommentButton();\n    }\n    const [x, y] = this.#commentButtonPosition;\n    const {\n      style\n    } = this.#commentButton;\n    style.left = `calc(${x}%)`;\n    style.top = `calc(${y}% - var(--comment-button-dim))`;\n  }\n  #updateColor() {\n    if (this.#firstElement.extraPopupElement) {\n      return;\n    }\n    if (!this.#commentButton) {\n      this.renderCommentButton();\n    }\n    this.#commentButton.style.backgroundColor = this.commentButtonColor || \"\";\n  }\n  get commentButtonColor() {\n    const {\n      color,\n      opacity\n    } = this.#firstElement.commentData;\n    if (!color) {\n      return null;\n    }\n    return this.#parent._commentManager.makeCommentColor(color, opacity);\n  }\n  focusCommentButton() {\n    setTimeout(() => {\n      this.#commentButton?.focus();\n    }, 0);\n  }\n  getData() {\n    const {\n      richText,\n      color,\n      opacity,\n      creationDate,\n      modificationDate\n    } = this.#firstElement.commentData;\n    return {\n      contentsObj: {\n        str: this.comment\n      },\n      richText,\n      color,\n      opacity,\n      creationDate,\n      modificationDate\n    };\n  }\n  get elementBeforePopup() {\n    return this.#commentButton;\n  }\n  get comment() {\n    this.#commentText ||= this.#firstElement.commentText;\n    return this.#commentText;\n  }\n  set comment(text) {\n    if (text === this.comment) {\n      return;\n    }\n    this.#firstElement.commentText = this.#commentText = text;\n  }\n  focus() {\n    this.#firstElement.container?.focus();\n  }\n  get parentBoundingClientRect() {\n    return this.#firstElement.layer.getBoundingClientRect();\n  }\n  setCommentButtonStates({\n    selected,\n    hasPopup\n  }) {\n    if (!this.#commentButton) {\n      return;\n    }\n    this.#commentButton.classList.toggle(\"selected\", selected);\n    this.#commentButton.ariaExpanded = hasPopup;\n  }\n  setSelectedCommentButton(selected) {\n    this.#commentButton.classList.toggle(\"selected\", selected);\n  }\n  get commentPopupPosition() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    const {\n      x,\n      y,\n      height\n    } = this.#commentButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = this.#firstElement.layer.getBoundingClientRect();\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n  set commentPopupPosition(pos) {\n    this.#popupPosition = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n  get commentButtonPosition() {\n    return this.#commentButtonPosition;\n  }\n  get commentButtonWidth() {\n    return this.#commentButton.getBoundingClientRect().width / this.parentBoundingClientRect.width;\n  }\n  editComment(options) {\n    const [posX, posY] = this.#popupPosition || this.commentButtonPosition.map(x => x / 100);\n    const parentDimensions = this.parentBoundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = parentDimensions;\n    this.#commentManager.showDialog(null, this, parentX + posX * parentWidth, parentY + posY * parentHeight, {\n      ...options,\n      parentDimensions\n    });\n  }\n  render() {\n    if (this.#popup) {\n      return;\n    }\n    const popup = this.#popup = document.createElement(\"div\");\n    popup.className = \"popup\";\n    if (this.#color) {\n      const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color);\n      popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n    }\n    const header = document.createElement(\"span\");\n    header.className = \"header\";\n    if (this.#titleObj?.str) {\n      const title = document.createElement(\"span\");\n      title.className = \"title\";\n      header.append(title);\n      ({\n        dir: title.dir,\n        str: title.textContent\n      } = this.#titleObj);\n    }\n    popup.append(header);\n    if (this.#dateObj) {\n      const modificationDate = document.createElement(\"time\");\n      modificationDate.className = \"popupDate\";\n      modificationDate.setAttribute(\"data-l10n-id\", \"pdfjs-annotation-date-time-string\");\n      modificationDate.setAttribute(\"data-l10n-args\", JSON.stringify({\n        dateObj: this.#dateObj.valueOf()\n      }));\n      modificationDate.dateTime = this.#dateObj.toISOString();\n      header.append(modificationDate);\n    }\n    renderRichText({\n      html: this.#html || this.#contentsObj.str,\n      dir: this.#contentsObj?.dir,\n      className: \"popupContent\"\n    }, popup);\n    this.#container.append(popup);\n  }\n  get #html() {\n    const richText = this.#richText;\n    const contentsObj = this.#contentsObj;\n    if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {\n      return this.#richText.html || null;\n    }\n    return null;\n  }\n  get #fontSize() {\n    return this.#html?.attributes?.style?.fontSize || 0;\n  }\n  get #fontColor() {\n    return this.#html?.attributes?.style?.color || null;\n  }\n  #makePopupContent(text) {\n    const popupLines = [];\n    const popupContent = {\n      str: text,\n      html: {\n        name: \"div\",\n        attributes: {\n          dir: \"auto\"\n        },\n        children: [{\n          name: \"p\",\n          children: popupLines\n        }]\n      }\n    };\n    const lineAttributes = {\n      style: {\n        color: this.#fontColor,\n        fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : \"\"\n      }\n    };\n    for (const line of text.split(\"\\n\")) {\n      popupLines.push({\n        name: \"span\",\n        value: line,\n        attributes: lineAttributes\n      });\n    }\n    return popupContent;\n  }\n  #keyDown(event) {\n    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n    if (event.key === \"Enter\" || event.key === \"Escape\" && this.#pinned) {\n      this.#toggle();\n    }\n  }\n  updateEdited({\n    rect,\n    popup,\n    deleted\n  }) {\n    if (this.#commentManager) {\n      if (deleted) {\n        this.remove();\n        this.#commentText = null;\n      } else if (popup) {\n        if (popup.deleted) {\n          this.remove();\n        } else {\n          this.#updateColor();\n          this.#commentText = popup.text;\n        }\n      }\n      if (rect) {\n        this.#commentButtonPosition = null;\n        this.#setCommentButtonPosition();\n        this.#updateCommentButtonPosition();\n      }\n      return;\n    }\n    if (deleted || popup?.deleted) {\n      this.remove();\n      return;\n    }\n    this.#addEventListeners();\n    this.#updates ||= {\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    };\n    if (rect) {\n      this.#position = null;\n    }\n    if (popup && popup.text) {\n      this.#richText = this.#makePopupContent(popup.text);\n      this.#dateObj = PDFDateString.toDateObject(popup.date);\n      this.#contentsObj = null;\n    }\n    this.#popup?.remove();\n    this.#popup = null;\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    ({\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    } = this.#updates);\n    this.#updates = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#position = null;\n  }\n  remove() {\n    this.#popupAbortController?.abort();\n    this.#popupAbortController = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#wasVisible = false;\n    this.#pinned = false;\n    this.#commentButton?.remove();\n    this.#commentButton = null;\n    if (this.trigger) {\n      for (const element of this.trigger) {\n        element.classList.remove(\"popupTriggerArea\");\n      }\n    }\n  }\n  #setPosition() {\n    if (this.#position !== null) {\n      return;\n    }\n    const {\n      page: {\n        view\n      },\n      viewport: {\n        rawDims: {\n          pageWidth,\n          pageHeight,\n          pageX,\n          pageY\n        }\n      }\n    } = this.#parent;\n    let useParentRect = !!this.#parentRect;\n    let rect = useParentRect ? this.#parentRect : this.#rect;\n    for (const element of this.#elements) {\n      if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n        rect = element.data.rect;\n        useParentRect = true;\n        break;\n      }\n    }\n    const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]);\n    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n    const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;\n    const popupLeft = normalizedRect[0] + parentWidth;\n    const popupTop = normalizedRect[1];\n    this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight];\n    const {\n      style\n    } = this.#container;\n    style.left = `${this.#position[0]}%`;\n    style.top = `${this.#position[1]}%`;\n  }\n  #toggle() {\n    if (this.#commentManager) {\n      this.#commentManager.toggleCommentPopup(this, false);\n      return;\n    }\n    this.#pinned = !this.#pinned;\n    if (this.#pinned) {\n      this.#show();\n      this.#container.addEventListener(\"click\", this.#boundToggle);\n      this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n    } else {\n      this.#hide();\n      this.#container.removeEventListener(\"click\", this.#boundToggle);\n      this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n    }\n  }\n  #show() {\n    if (!this.#popup) {\n      this.render();\n    }\n    if (!this.isVisible) {\n      this.#setPosition();\n      this.#container.hidden = false;\n      this.#container.style.zIndex = parseInt(this.#container.style.zIndex, 10) + 1000;\n    } else if (this.#pinned) {\n      this.#container.classList.add(\"focused\");\n    }\n  }\n  #hide() {\n    this.#container.classList.remove(\"focused\");\n    if (this.#pinned || !this.isVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n    this.#container.style.zIndex = parseInt(this.#container.style.zIndex, 10) - 1000;\n  }\n  forceHide() {\n    this.#wasVisible = this.isVisible;\n    if (!this.#wasVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n  }\n  maybeShow() {\n    if (this.#commentManager) {\n      return;\n    }\n    this.#addEventListeners();\n    if (!this.#wasVisible) {\n      return;\n    }\n    if (!this.#popup) {\n      this.#show();\n    }\n    this.#wasVisible = false;\n    this.#container.hidden = false;\n  }\n  get isVisible() {\n    if (this.#commentManager) {\n      return false;\n    }\n    return this.#container.hidden === false;\n  }\n}\nclass FreeTextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.textContent = parameters.data.textContent;\n    this.textPosition = parameters.data.textPosition;\n    this.annotationEditorType = AnnotationEditorType.FREETEXT;\n  }\n  render() {\n    this.container.classList.add(\"freeTextAnnotation\");\n    if (this.textContent) {\n      const content = this.contentElement = document.createElement(\"div\");\n      content.classList.add(\"annotationTextContent\");\n      content.setAttribute(\"role\", \"comment\");\n      for (const line of this.textContent) {\n        const lineSpan = document.createElement(\"span\");\n        lineSpan.textContent = line;\n        content.append(lineSpan);\n      }\n      this.container.append(content);\n    }\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n    return this.container;\n  }\n}\nclass LineAnnotationElement extends AnnotationElement {\n  #line = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"lineAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const line = this.#line = this.svgFactory.createElement(\"svg:line\");\n    line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n    line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n    line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n    line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n    line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    line.setAttribute(\"stroke\", \"transparent\");\n    line.setAttribute(\"fill\", \"transparent\");\n    svg.append(line);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#line;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass SquareAnnotationElement extends AnnotationElement {\n  #square = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"squareAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const square = this.#square = this.svgFactory.createElement(\"svg:rect\");\n    square.setAttribute(\"x\", borderWidth / 2);\n    square.setAttribute(\"y\", borderWidth / 2);\n    square.setAttribute(\"width\", width - borderWidth);\n    square.setAttribute(\"height\", height - borderWidth);\n    square.setAttribute(\"stroke-width\", borderWidth || 1);\n    square.setAttribute(\"stroke\", \"transparent\");\n    square.setAttribute(\"fill\", \"transparent\");\n    svg.append(square);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#square;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass CircleAnnotationElement extends AnnotationElement {\n  #circle = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"circleAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const circle = this.#circle = this.svgFactory.createElement(\"svg:ellipse\");\n    circle.setAttribute(\"cx\", width / 2);\n    circle.setAttribute(\"cy\", height / 2);\n    circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n    circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n    circle.setAttribute(\"stroke-width\", borderWidth || 1);\n    circle.setAttribute(\"stroke\", \"transparent\");\n    circle.setAttribute(\"fill\", \"transparent\");\n    svg.append(circle);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#circle;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolylineAnnotationElement extends AnnotationElement {\n  #polyline = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"polylineAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const {\n      data: {\n        rect,\n        vertices,\n        borderStyle,\n        popupRef\n      },\n      width,\n      height\n    } = this;\n    if (!vertices) {\n      return this.container;\n    }\n    const svg = this.svgFactory.create(width, height, true);\n    let points = [];\n    for (let i = 0, ii = vertices.length; i < ii; i += 2) {\n      const x = vertices[i] - rect[0];\n      const y = rect[3] - vertices[i + 1];\n      points.push(`${x},${y}`);\n    }\n    points = points.join(\" \");\n    const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName);\n    polyline.setAttribute(\"points\", points);\n    polyline.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    polyline.setAttribute(\"stroke\", \"transparent\");\n    polyline.setAttribute(\"fill\", \"transparent\");\n    svg.append(polyline);\n    this.container.append(svg);\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#polyline;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n  constructor(parameters) {\n    super(parameters);\n    this.containerClassName = \"polygonAnnotation\";\n    this.svgElementName = \"svg:polygon\";\n  }\n}\nclass CaretAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"caretAnnotation\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n}\nclass InkAnnotationElement extends AnnotationElement {\n  #polylinesGroupElement = null;\n  #polylines = [];\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"inkAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n    this.annotationEditorType = this.data.it === \"InkHighlight\" ? AnnotationEditorType.HIGHLIGHT : AnnotationEditorType.INK;\n  }\n  #getTransform(rotation, rect) {\n    switch (rotation) {\n      case 90:\n        return {\n          transform: `rotate(90) translate(${-rect[0]},${rect[1]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0]\n        };\n      case 180:\n        return {\n          transform: `rotate(180) translate(${-rect[2]},${rect[1]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1]\n        };\n      case 270:\n        return {\n          transform: `rotate(270) translate(${-rect[2]},${rect[3]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0]\n        };\n      default:\n        return {\n          transform: `translate(${-rect[0]},${rect[3]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1]\n        };\n    }\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const {\n      data: {\n        rect,\n        rotation,\n        inkLists,\n        borderStyle,\n        popupRef\n      }\n    } = this;\n    const {\n      transform,\n      width,\n      height\n    } = this.#getTransform(rotation, rect);\n    const svg = this.svgFactory.create(width, height, true);\n    const g = this.#polylinesGroupElement = this.svgFactory.createElement(\"svg:g\");\n    svg.append(g);\n    g.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    g.setAttribute(\"stroke-linecap\", \"round\");\n    g.setAttribute(\"stroke-linejoin\", \"round\");\n    g.setAttribute(\"stroke-miterlimit\", 10);\n    g.setAttribute(\"stroke\", \"transparent\");\n    g.setAttribute(\"fill\", \"transparent\");\n    g.setAttribute(\"transform\", transform);\n    for (let i = 0, ii = inkLists.length; i < ii; i++) {\n      const polyline = this.svgFactory.createElement(this.svgElementName);\n      this.#polylines.push(polyline);\n      polyline.setAttribute(\"points\", inkLists[i].join(\",\"));\n      g.append(polyline);\n    }\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.append(svg);\n    this._editOnDoubleClick();\n    return this.container;\n  }\n  updateEdited(params) {\n    super.updateEdited(params);\n    const {\n      thickness,\n      points,\n      rect\n    } = params;\n    const g = this.#polylinesGroupElement;\n    if (thickness >= 0) {\n      g.setAttribute(\"stroke-width\", thickness || 1);\n    }\n    if (points) {\n      for (let i = 0, ii = this.#polylines.length; i < ii; i++) {\n        this.#polylines[i].setAttribute(\"points\", points[i].join(\",\"));\n      }\n    }\n    if (rect) {\n      const {\n        transform,\n        width,\n        height\n      } = this.#getTransform(this.data.rotation, rect);\n      const root = g.parentElement;\n      root.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n      g.setAttribute(\"transform\", transform);\n    }\n  }\n  getElementsToTriggerPopup() {\n    return this.#polylines;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass HighlightAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n    this.annotationEditorType = AnnotationEditorType.HIGHLIGHT;\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"highlightAnnotation\");\n    this._editOnDoubleClick();\n    if (overlaidText) {\n      const mark = document.createElement(\"mark\");\n      mark.classList.add(\"overlaidText\");\n      mark.textContent = overlaidText;\n      this.container.append(mark);\n    }\n    return this.container;\n  }\n}\nclass UnderlineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"underlineAnnotation\");\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n    return this.container;\n  }\n}\nclass SquigglyAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"squigglyAnnotation\");\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n    return this.container;\n  }\n}\nclass StrikeOutAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"strikeoutAnnotation\");\n    if (overlaidText) {\n      const strikeout = document.createElement(\"s\");\n      strikeout.classList.add(\"overlaidText\");\n      strikeout.textContent = overlaidText;\n      this.container.append(strikeout);\n    }\n    return this.container;\n  }\n}\nclass StampAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.annotationEditorType = AnnotationEditorType.STAMP;\n  }\n  render() {\n    this.container.classList.add(\"stampAnnotation\");\n    this.container.setAttribute(\"role\", \"img\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n    return this.container;\n  }\n}\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n  #trigger = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n    const {\n      fileId,\n      file\n    } = this.data;\n    this.filename = file.filename;\n    this.content = file.content;\n    this.fileId = fileId;\n    this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n      source: this,\n      attachmentId: this.fileId,\n      ...file\n    });\n  }\n  render() {\n    this.container.classList.add(\"fileAttachmentAnnotation\");\n    const {\n      container,\n      data\n    } = this;\n    let trigger;\n    if (data.hasAppearance || data.fillAlpha === 0) {\n      trigger = document.createElement(\"div\");\n    } else {\n      trigger = document.createElement(\"img\");\n      trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"}.svg`;\n      if (data.fillAlpha && data.fillAlpha < 1) {\n        trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;\n      }\n    }\n    trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n    this.#trigger = trigger;\n    const {\n      isMac\n    } = FeatureTest.platform;\n    container.addEventListener(\"keydown\", evt => {\n      if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n        this.#download();\n      }\n    });\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    } else {\n      trigger.classList.add(\"popupTriggerArea\");\n    }\n    container.append(trigger);\n    return container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#trigger;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n  async #download() {\n    const {\n      fileId,\n      filename,\n      content: fallbackContent\n    } = this;\n    const content = (await this.linkService.getAttachmentContent(fileId)) || fallbackContent;\n    if (content) {\n      this.downloadManager?.openOrDownloadData(content, filename);\n    }\n  }\n}\nclass MediaAnnotationElement extends AnnotationElement {\n  #abortController = new AbortController();\n  #contentUrl = null;\n  #media = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: !!parameters.data.richMedia\n    });\n  }\n  render() {\n    this.container.classList.add(\"mediaAnnotation\");\n    const {\n      filename\n    } = this.data.richMedia;\n    const button = document.createElement(\"button\");\n    button.className = \"mediaPlayButton\";\n    button.type = \"button\";\n    button.title = button.ariaLabel = filename;\n    button.addEventListener(\"click\", () => this.#load(button), {\n      signal: this.#abortController.signal\n    });\n    this.container.append(button);\n    return this.container;\n  }\n  async #load(button) {\n    const {\n      fileId,\n      filename,\n      contentType\n    } = this.data.richMedia;\n    button.disabled = true;\n    let content;\n    try {\n      content = await this.linkService.getAttachmentContent(fileId);\n    } catch {\n      return;\n    } finally {\n      button.disabled = false;\n    }\n    if (!content || !button.isConnected) {\n      return;\n    }\n    const {\n      signal\n    } = this.#abortController;\n    const url = URL.createObjectURL(new Blob([content], {\n      type: contentType\n    }));\n    this.#contentUrl = url;\n    const isAudio = contentType.startsWith(\"audio/\");\n    const media = document.createElement(isAudio ? \"audio\" : \"video\");\n    this.#media = media;\n    media.className = \"mediaContent\";\n    this._setBackgroundColor(media);\n    media.src = url;\n    media.title = filename;\n    media.controls = true;\n    media.autoplay = true;\n    media.tabIndex = 0;\n    if (isAudio) {\n      let hovered = false;\n      let focused = false;\n      const updateControls = () => {\n        media.controls = hovered || focused;\n      };\n      this.container.addEventListener(\"pointerenter\", () => {\n        hovered = true;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"pointerleave\", () => {\n        hovered = false;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"focusin\", () => {\n        focused = true;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"focusout\", () => {\n        focused = false;\n        updateControls();\n      }, {\n        signal\n      });\n    }\n    media.addEventListener(\"emptied\", () => this.#revokeContentUrl(url), {\n      once: true,\n      signal\n    });\n    button.replaceWith(media);\n    media.play().catch(() => {});\n  }\n  #revokeContentUrl(url = this.#contentUrl) {\n    if (url && url === this.#contentUrl) {\n      URL.revokeObjectURL(url);\n      this.#contentUrl = null;\n    }\n  }\n  destroy() {\n    this.#abortController.abort();\n    if (this.#media) {\n      this.#media.pause();\n      this.#media.removeAttribute(\"src\");\n      this.#media.load();\n      this.#media = null;\n    }\n    this.#revokeContentUrl();\n  }\n}\nclass AnnotationLayer {\n  #accessibilityManager = null;\n  #annotationCanvasMap = null;\n  #annotationStorage = null;\n  #editableAnnotations = new Map();\n  #structTreeLayer = null;\n  #linkService = null;\n  #elements = [];\n  #hasAriaAttributesFromStructTree = false;\n  zIndex = 0;\n  constructor({\n    div,\n    accessibilityManager,\n    annotationCanvasMap,\n    annotationEditorUIManager,\n    page,\n    viewport,\n    structTreeLayer,\n    commentManager,\n    linkService,\n    annotationStorage\n  }) {\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationCanvasMap = annotationCanvasMap;\n    this.#structTreeLayer = structTreeLayer || null;\n    this.#linkService = linkService || null;\n    this.#annotationStorage = annotationStorage || new AnnotationStorage();\n    this.page = page;\n    this.viewport = viewport;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n    this._commentManager = commentManager || null;\n  }\n  hasEditableAnnotations() {\n    return this.#editableAnnotations.size > 0;\n  }\n  async render(params) {\n    const {\n      annotations,\n      optionalContentConfig\n    } = params;\n    const layer = this.div;\n    setLayerDimensions(layer, this.viewport);\n    const popupToElements = new Map();\n    const popupAnnotations = [];\n    const elementParams = {\n      data: null,\n      layer,\n      linkService: this.#linkService,\n      downloadManager: params.downloadManager,\n      imageResourcesPath: params.imageResourcesPath || \"\",\n      renderForms: params.renderForms !== false,\n      svgFactory: new DOMSVGFactory(),\n      annotationStorage: this.#annotationStorage,\n      enableComment: params.enableComment === true,\n      enableScripting: params.enableScripting === true,\n      hasJSActions: params.hasJSActions,\n      fieldObjects: params.fieldObjects,\n      parent: this,\n      elements: null\n    };\n    for (const data of annotations) {\n      if (data.noHTML) {\n        continue;\n      }\n      const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n      if (!isPopupAnnotation) {\n        if (data.rect[2] === data.rect[0] || data.rect[3] === data.rect[1]) {\n          continue;\n        }\n      } else {\n        const elements = popupToElements.get(data.id);\n        if (!elements) {\n          continue;\n        }\n        if (!this._commentManager) {\n          popupAnnotations.push(data);\n          continue;\n        }\n        elementParams.elements = elements;\n      }\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      if (!isPopupAnnotation) {\n        this.#elements.push(element);\n        if (data.popupRef) {\n          popupToElements.getOrInsertComputed(data.popupRef, makeArr).push(element);\n        }\n      }\n      const rendered = element.render();\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      element.updateOC(optionalContentConfig);\n      if (element._isEditable) {\n        this.#editableAnnotations.set(element.data.id, element);\n        this._annotationEditorUIManager?.renderAnnotationElement(element);\n      }\n    }\n    await this.#addElementsToDOM();\n    for (const data of popupAnnotations) {\n      const elements = elementParams.elements = popupToElements.get(data.id);\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      const rendered = element.render();\n      element.contentElement.id = `${AnnotationPrefix}${data.id}`;\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      elements.at(-1).container.after(rendered);\n    }\n    this.#setAnnotationCanvasMap();\n  }\n  async #addElementsToDOM() {\n    if (this.#elements.length === 0) {\n      return;\n    }\n    this.div.replaceChildren();\n    const promises = [];\n    if (!this.#hasAriaAttributesFromStructTree) {\n      this.#hasAriaAttributesFromStructTree = true;\n      for (const {\n        contentElement,\n        data: {\n          id\n        }\n      } of this.#elements) {\n        const annotationId = contentElement.id = `${AnnotationPrefix}${id}`;\n        promises.push(this.#structTreeLayer?.getAriaAttributes(annotationId).then(ariaAttributes => {\n          if (ariaAttributes) {\n            for (const [key, value] of ariaAttributes) {\n              contentElement.setAttribute(key, value);\n            }\n          }\n        }));\n      }\n    }\n    this.#elements.sort(({\n      data: {\n        rect: [a0, a1, a2, a3]\n      }\n    }, {\n      data: {\n        rect: [b0, b1, b2, b3]\n      }\n    }) => {\n      if (a0 === a2 && a1 === a3) {\n        return +1;\n      }\n      if (b0 === b2 && b1 === b3) {\n        return -1;\n      }\n      const top1 = a3;\n      const bot1 = a1;\n      const mid1 = (a1 + a3) / 2;\n      const top2 = b3;\n      const bot2 = b1;\n      const mid2 = (b1 + b3) / 2;\n      if (mid1 >= top2 && mid2 <= bot1) {\n        return -1;\n      }\n      if (mid2 >= top1 && mid1 <= bot2) {\n        return +1;\n      }\n      const centerX1 = (a0 + a2) / 2;\n      const centerX2 = (b0 + b2) / 2;\n      return centerX1 - centerX2;\n    });\n    const fragment = document.createDocumentFragment();\n    for (const element of this.#elements) {\n      fragment.append(element.container);\n      if (this._commentManager) {\n        (element.extraPopupElement?.popup || element.popup)?.renderCommentButton();\n      } else if (element.extraPopupElement) {\n        fragment.append(element.extraPopupElement.render());\n      }\n    }\n    this.div.append(fragment);\n    await Promise.all(promises);\n    if (this.#accessibilityManager) {\n      for (const element of this.#elements) {\n        this.#accessibilityManager.addPointerInTextLayer(element.contentElement, false);\n      }\n    }\n  }\n  async addLinkAnnotations(annotations) {\n    const elementParams = {\n      data: null,\n      layer: this.div,\n      linkService: this.#linkService,\n      svgFactory: new DOMSVGFactory(),\n      parent: this\n    };\n    for (const data of annotations) {\n      data.borderStyle ||= AnnotationLayer._defaultBorderStyle;\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      element.render();\n      element.contentElement.id = `${AnnotationPrefix}${data.id}`;\n      this.#elements.push(element);\n    }\n    await this.#addElementsToDOM();\n  }\n  update({\n    viewport,\n    optionalContentConfig\n  }) {\n    const layer = this.div;\n    this.viewport = viewport;\n    setLayerDimensions(layer, {\n      rotation: viewport.rotation\n    });\n    for (const element of this.#elements) {\n      element.updateOC(optionalContentConfig);\n    }\n    this.#setAnnotationCanvasMap();\n    layer.hidden = false;\n  }\n  destroy() {\n    for (const element of this.#elements) {\n      element.destroy?.();\n      this.#accessibilityManager?.removePointerInTextLayer(element.contentElement);\n    }\n    this.#elements.length = 0;\n    this.#editableAnnotations.clear();\n    this.div.replaceChildren();\n  }\n  #setAnnotationCanvasMap() {\n    if (!this.#annotationCanvasMap) {\n      return;\n    }\n    const layer = this.div;\n    for (const [id, canvas] of this.#annotationCanvasMap) {\n      const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n      if (!element) {\n        continue;\n      }\n      if (Array.isArray(canvas)) {\n        for (const cvs of canvas) {\n          cvs.className = \"annotationContent\";\n          cvs.ariaHidden = true;\n        }\n      } else {\n        canvas.className = \"annotationContent\";\n        canvas.ariaHidden = true;\n      }\n      const toRemove = [];\n      for (const child of element.children) {\n        if (child.nodeName === \"CANVAS\") {\n          toRemove.push(child);\n        }\n      }\n      for (const child of toRemove) {\n        child.remove();\n      }\n      const firstCanvas = Array.isArray(canvas) ? canvas[0] : canvas;\n      const {\n        firstChild\n      } = element;\n      if (!firstChild) {\n        element.append(firstCanvas);\n      } else if (!firstChild.classList.contains(\"annotationContent\")) {\n        firstChild.before(firstCanvas);\n      } else {\n        firstChild.after(firstCanvas);\n      }\n      if (Array.isArray(canvas)) {\n        let lastCanvas = firstCanvas;\n        for (let i = 1, ii = canvas.length; i < ii; i++) {\n          lastCanvas.after(canvas[i]);\n          lastCanvas = canvas[i];\n        }\n      }\n      this.#annotationCanvasMap.delete(id);\n      const editableAnnotation = this.#editableAnnotations.get(id);\n      if (!editableAnnotation) {\n        continue;\n      }\n      if (editableAnnotation._hasNoCanvas) {\n        this._annotationEditorUIManager?.setMissingCanvas(id, element.id, canvas);\n        editableAnnotation._hasNoCanvas = false;\n      } else {\n        editableAnnotation.canvas = canvas;\n      }\n    }\n  }\n  refreshCanvases() {\n    this.#setAnnotationCanvasMap();\n  }\n  getEditableAnnotations() {\n    return this.#editableAnnotations.values();\n  }\n  getEditableAnnotation(id) {\n    return this.#editableAnnotations.get(id);\n  }\n  addFakeAnnotation(editor) {\n    const {\n      div\n    } = this;\n    const {\n      id,\n      rotation\n    } = editor;\n    const element = new EditorAnnotationElement({\n      data: {\n        id,\n        rect: editor.getPDFRect(),\n        rotation\n      },\n      editor,\n      layer: div,\n      parent: this,\n      enableComment: !!this._commentManager,\n      linkService: this.#linkService,\n      annotationStorage: this.#annotationStorage\n    });\n    element.render();\n    element.contentElement.id = `${AnnotationPrefix}${id}`;\n    element.createOrUpdatePopup();\n    this.#elements.push(element);\n    return element;\n  }\n  removeAnnotation(id) {\n    const index = this.#elements.findIndex(el => el.data.id === id);\n    if (index < 0) {\n      return;\n    }\n    const [element] = this.#elements.splice(index, 1);\n    this.#accessibilityManager?.removePointerInTextLayer(element.contentElement);\n  }\n  updateFakeAnnotations(editors) {\n    if (editors.length === 0) {\n      return;\n    }\n    for (const editor of editors) {\n      editor.updateFakeAnnotationElement(this);\n    }\n    this.#addElementsToDOM();\n  }\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n  static get _defaultBorderStyle() {\n    return shadow(this, \"_defaultBorderStyle\", Object.freeze({\n      width: 1,\n      rawWidth: 1,\n      style: AnnotationBorderStyleType.SOLID,\n      dashArray: [3],\n      horizontalCornerRadius: 0,\n      verticalCornerRadius: 0\n    }));\n  }\n}\n\n;// ./src/display/editor/freetext.js\n\n\n\n\n\n\n\n\n\n\nconst EOL_PATTERN = /\\r\\n?|\\n/g;\nclass FreeTextEditor extends AnnotationEditor {\n  #content = \"\";\n  #editorDivId = `${this.id}-editor`;\n  #editModeAC = null;\n  #fontSize;\n  _colorPicker = null;\n  static _freeTextDefaultContent = \"\";\n  static _internalPadding = 0;\n  static _defaultColor = null;\n  static _defaultFontSize = 10;\n  static get _keyboardManager() {\n    const proto = FreeTextEditor.prototype;\n    const arrowChecker = self => self.isEmpty();\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+s\", \"mac+meta+s\", \"ctrl+p\", \"mac+meta+p\"], proto.commitOrRemove, {\n      bubbles: true\n    }], [[\"ctrl+Enter\", \"mac+meta+Enter\"], proto.commitOrRemove], [[\"Escape\"], proto.commitOrRemove], [[\"ArrowLeft\"], proto._translateEmpty, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto._translateEmpty, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\"], proto._translateEmpty, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto._translateEmpty, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\"], proto._translateEmpty, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto._translateEmpty, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\"], proto._translateEmpty, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto._translateEmpty, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  static _type = \"freetext\";\n  static _editorType = AnnotationEditorType.FREETEXT;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"freeTextEditor\"\n    });\n    this.color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor;\n    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.freetext);\n    }\n    this.canAddComment = false;\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    const style = getComputedStyle(document.documentElement);\n    this._internalPadding = parseFloat(style.getPropertyValue(\"--freetext-padding\"));\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        FreeTextEditor._defaultFontSize = value;\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        FreeTextEditor._defaultColor = value;\n        break;\n    }\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        this.#updateFontSize(value);\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        this.#updateColor(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.color]];\n  }\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n  get colorType() {\n    return AnnotationEditorParamsType.FREETEXT_COLOR;\n  }\n  #updateFontSize(fontSize) {\n    const setFontsize = size => {\n      this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`;\n      this.translate(0, -(size - this.#fontSize) * this.parentScale);\n      this.#fontSize = size;\n      this.#setEditorDimensions();\n    };\n    const savedFontsize = this.#fontSize;\n    this.addCommands({\n      cmd: setFontsize.bind(this, fontSize),\n      undo: setFontsize.bind(this, savedFontsize),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_SIZE,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  onUpdatedColor() {\n    this.editorDiv.style.color = this.color;\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n  #updateColor(color) {\n    const setColor = col => {\n      this.color = col;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _translateEmpty(x, y) {\n    this._uiManager.translateSelectedEditors(x, y, true);\n  }\n  getInitialTranslation() {\n    const scale = this.parentScale;\n    return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale];\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  enableEditMode() {\n    if (!super.enableEditMode()) {\n      return false;\n    }\n    this.overlayDiv.classList.remove(\"enabled\");\n    this.editorDiv.contentEditable = true;\n    this._isDraggable = false;\n    this.div.removeAttribute(\"aria-activedescendant\");\n    this.#editModeAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#editModeAC);\n    this.editorDiv.addEventListener(\"keydown\", this.editorDivKeydown.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"focus\", this.editorDivFocus.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"blur\", this.editorDivBlur.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"input\", this.editorDivInput.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"paste\", this.editorDivPaste.bind(this), {\n      signal\n    });\n    return true;\n  }\n  disableEditMode() {\n    if (!super.disableEditMode()) {\n      return false;\n    }\n    this.overlayDiv.classList.add(\"enabled\");\n    this.editorDiv.contentEditable = false;\n    this.div.setAttribute(\"aria-activedescendant\", this.#editorDivId);\n    this._isDraggable = true;\n    this.#editModeAC?.abort();\n    this.#editModeAC = null;\n    this.div.focus({\n      preventScroll: true\n    });\n    this.isEditing = false;\n    this.parent.div.classList.add(\"freetextEditing\");\n    return true;\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    super.focusin(event);\n    if (event.target !== this.editorDiv) {\n      this.editorDiv.focus();\n    }\n  }\n  onceAdded(focus) {\n    if (this.width) {\n      return;\n    }\n    this.enableEditMode();\n    if (focus) {\n      this.editorDiv.focus();\n    }\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    }\n    this._initialOptions = null;\n  }\n  isEmpty() {\n    return !this.editorDiv || this.editorDiv.innerText.trim() === \"\";\n  }\n  remove() {\n    this.isEditing = false;\n    if (this.parent) {\n      this.parent.setEditingState(true);\n      this.parent.div.classList.add(\"freetextEditing\");\n    }\n    super.remove();\n  }\n  #extractText() {\n    const buffer = [];\n    this.editorDiv.normalize();\n    let prevChild = null;\n    for (const child of this.editorDiv.childNodes) {\n      if (prevChild?.nodeType === Node.TEXT_NODE && child.nodeName === \"BR\") {\n        continue;\n      }\n      buffer.push(FreeTextEditor.#getNodeContent(child));\n      prevChild = child;\n    }\n    return buffer.join(\"\\n\");\n  }\n  #setEditorDimensions() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    let rect;\n    if (this.isAttachedToDOM) {\n      rect = this.div.getBoundingClientRect();\n    } else {\n      const {\n        currentLayer,\n        div\n      } = this;\n      const savedDisplay = div.style.display;\n      const savedVisibility = div.classList.contains(\"hidden\");\n      div.classList.remove(\"hidden\");\n      div.style.display = \"hidden\";\n      currentLayer.div.append(this.div);\n      rect = div.getBoundingClientRect();\n      div.remove();\n      div.style.display = savedDisplay;\n      div.classList.toggle(\"hidden\", savedVisibility);\n    }\n    if (this.rotation % 180 === this.parentRotation % 180) {\n      this.width = rect.width / parentWidth;\n      this.height = rect.height / parentHeight;\n    } else {\n      this.width = rect.height / parentWidth;\n      this.height = rect.width / parentHeight;\n    }\n    this.fixAndSetPosition();\n  }\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    super.commit();\n    this.disableEditMode();\n    const savedText = this.#content;\n    const newText = this.#content = this.#extractText().trimEnd();\n    if (savedText === newText) {\n      return;\n    }\n    const setText = text => {\n      this.#content = text;\n      if (!text) {\n        this.remove();\n        return;\n      }\n      this.#setContent();\n      this._uiManager.rebuild(this);\n      this.#setEditorDimensions();\n    };\n    this.addCommands({\n      cmd: () => {\n        setText(newText);\n      },\n      undo: () => {\n        setText(savedText);\n      },\n      mustExec: false\n    });\n    this.#setEditorDimensions();\n  }\n  shouldGetKeyboardEvents() {\n    return this.isInEditMode();\n  }\n  enterInEditMode() {\n    this.enableEditMode();\n    this.editorDiv.focus();\n  }\n  keydown(event) {\n    if (event.target === this.div && event.key === \"Enter\") {\n      this.enterInEditMode();\n      event.preventDefault();\n    }\n  }\n  editorDivKeydown(event) {\n    FreeTextEditor._keyboardManager.exec(this, event);\n  }\n  editorDivFocus(event) {\n    this.isEditing = true;\n  }\n  editorDivBlur(event) {\n    this.isEditing = false;\n  }\n  editorDivInput(event) {\n    this.parent.div.classList.toggle(\"freetextEditing\", this.isEmpty());\n  }\n  disableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"comment\");\n    this.editorDiv.removeAttribute(\"aria-multiline\");\n  }\n  enableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"textbox\");\n    this.editorDiv.setAttribute(\"aria-multiline\", true);\n  }\n  get canChangeContent() {\n    return true;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy || this.annotationElementId) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.editorDiv = document.createElement(\"div\");\n    this.editorDiv.className = \"internal\";\n    this.editorDiv.setAttribute(\"id\", this.#editorDivId);\n    this.editorDiv.setAttribute(\"data-l10n-id\", \"pdfjs-free-text2\");\n    this.editorDiv.setAttribute(\"data-l10n-attrs\", \"default-content\");\n    this.enableEditing();\n    this.editorDiv.contentEditable = true;\n    const {\n      style\n    } = this.editorDiv;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n    this.div.append(this.editorDiv);\n    this.overlayDiv = document.createElement(\"div\");\n    this.overlayDiv.classList.add(\"overlay\", \"enabled\");\n    this.div.append(this.overlayDiv);\n    if (this._isCopy || this.annotationElementId) {\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      if (this.annotationElementId) {\n        const {\n          position\n        } = this._initialData;\n        let [tx, ty] = this.getInitialTranslation();\n        [tx, ty] = this.pageTranslationToScreen(tx, ty);\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        const [pageX, pageY] = this.pageTranslation;\n        let posX, posY;\n        switch (this.rotation) {\n          case 0:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY + this.height - (position[1] - pageY) / pageHeight;\n            break;\n          case 90:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [ty, -tx];\n            break;\n          case 180:\n            posX = baseX - this.width + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [-tx, -ty];\n            break;\n          case 270:\n            posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;\n            posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;\n            [tx, ty] = [-ty, tx];\n            break;\n        }\n        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);\n      } else {\n        this._moveAfterPaste(baseX, baseY);\n      }\n      this.#setContent();\n      this._isDraggable = true;\n      this.editorDiv.contentEditable = false;\n    } else {\n      this._isDraggable = false;\n      this.editorDiv.contentEditable = true;\n    }\n    return this.div;\n  }\n  static #getNodeContent(node) {\n    return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, \"\");\n  }\n  editorDivPaste(event) {\n    const clipboardData = event.clipboardData || window.clipboardData;\n    const {\n      types\n    } = clipboardData;\n    if (types.length === 1 && types[0] === \"text/plain\") {\n      return;\n    }\n    event.preventDefault();\n    const paste = FreeTextEditor.#deserializeContent(clipboardData.getData(\"text\") || \"\").replaceAll(EOL_PATTERN, \"\\n\");\n    if (!paste) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (!selection.rangeCount) {\n      return;\n    }\n    this.editorDiv.normalize();\n    selection.deleteFromDocument();\n    const range = selection.getRangeAt(0);\n    if (!paste.includes(\"\\n\")) {\n      range.insertNode(document.createTextNode(paste));\n      this.editorDiv.normalize();\n      selection.collapseToStart();\n      return;\n    }\n    const {\n      startContainer,\n      startOffset\n    } = range;\n    const bufferBefore = [];\n    const bufferAfter = [];\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      const parent = startContainer.parentElement;\n      bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, \"\"));\n      if (parent !== this.editorDiv) {\n        let buffer = bufferBefore;\n        for (const child of this.editorDiv.childNodes) {\n          if (child === parent) {\n            buffer = bufferAfter;\n            continue;\n          }\n          buffer.push(FreeTextEditor.#getNodeContent(child));\n        }\n      }\n      bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, \"\"));\n    } else if (startContainer === this.editorDiv) {\n      let buffer = bufferBefore;\n      let i = 0;\n      for (const child of this.editorDiv.childNodes) {\n        if (i++ === startOffset) {\n          buffer = bufferAfter;\n        }\n        buffer.push(FreeTextEditor.#getNodeContent(child));\n      }\n    }\n    this.#content = `${bufferBefore.join(\"\\n\")}${paste}${bufferAfter.join(\"\\n\")}`;\n    this.#setContent();\n    const newRange = new Range();\n    let beforeLength = Math.sumPrecise(bufferBefore.map(line => line.length));\n    for (const {\n      firstChild\n    } of this.editorDiv.childNodes) {\n      if (firstChild.nodeType === Node.TEXT_NODE) {\n        const length = firstChild.nodeValue.length;\n        if (beforeLength <= length) {\n          newRange.setStart(firstChild, beforeLength);\n          newRange.setEnd(firstChild, beforeLength);\n          break;\n        }\n        beforeLength -= length;\n      }\n    }\n    selection.removeAllRanges();\n    selection.addRange(newRange);\n  }\n  #setContent() {\n    this.editorDiv.replaceChildren();\n    if (!this.#content) {\n      return;\n    }\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      this.editorDiv.append(div);\n    }\n  }\n  #serializeContent() {\n    return this.#content.replaceAll(\"\\xa0\", \" \");\n  }\n  static #deserializeContent(content) {\n    return content.replaceAll(\" \", \"\\xa0\");\n  }\n  get contentDiv() {\n    return this.editorDiv;\n  }\n  getPDFRect() {\n    const padding = FreeTextEditor._internalPadding * this.parentScale;\n    return this.getRect(padding, padding);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof FreeTextAnnotationElement) {\n      const {\n        data: {\n          defaultAppearanceData: {\n            fontSize,\n            fontColor\n          },\n          rect,\n          rotation,\n          id,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        textContent,\n        textPosition,\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      if (!textContent?.length) {\n        return null;\n      }\n      initialData = data = {\n        annotationType: AnnotationEditorType.FREETEXT,\n        color: Array.from(fontColor),\n        fontSize,\n        value: textContent.join(\"\\n\"),\n        position: textPosition,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        comment: contentsObj?.str || null,\n        richText,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#fontSize = data.fontSize;\n    editor.color = Util.makeHexColor(...data.color);\n    editor.#content = FreeTextEditor.#deserializeContent(data.value);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.color);\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color,\n      fontSize: this.#fontSize,\n      value: this.#serializeContent()\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.isCopy = true;\n      return serialized;\n    }\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      value,\n      fontSize,\n      color,\n      pageIndex\n    } = this._initialData;\n    return this.hasEditedComment || this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;\n  }\n  renderAnnotationElement(annotation) {\n    const content = super.renderAnnotationElement(annotation);\n    if (!content) {\n      return null;\n    }\n    const {\n      style\n    } = content;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n    content.replaceChildren();\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      content.append(div);\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this._uiManager.hasCommentManager() || this.hasEditedComment ? this.comment : {\n        text: this.#content\n      }\n    });\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    super.resetAnnotationElement(annotation);\n    annotation.resetEdited();\n  }\n}\n\n;// ./src/display/editor/drawers/outline.js\n\n\nclass Outline {\n  static PRECISION = 1e-4;\n  toSVGPath() {\n    unreachable(\"Abstract method `toSVGPath` must be implemented.\");\n  }\n  get box() {\n    unreachable(\"Abstract getter `box` must be implemented.\");\n  }\n  serialize(_bbox, _rotation) {\n    unreachable(\"Abstract method `serialize` must be implemented.\");\n  }\n  static _rescale(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i] * sx;\n      dest[i + 1] = ty + src[i + 1] * sy;\n    }\n    return dest;\n  }\n  static _rescaleAndSwap(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i + 1] * sx;\n      dest[i + 1] = ty + src[i] * sy;\n    }\n    return dest;\n  }\n  static _translate(src, tx, ty, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i];\n      dest[i + 1] = ty + src[i + 1];\n    }\n    return dest;\n  }\n  static svgRound(x) {\n    return Math.round(x * 10000);\n  }\n  static _normalizePoint(x, y, parentWidth, parentHeight, rotation) {\n    switch (rotation) {\n      case 90:\n        return [1 - y / parentWidth, x / parentHeight];\n      case 180:\n        return [1 - x / parentWidth, 1 - y / parentHeight];\n      case 270:\n        return [y / parentWidth, 1 - x / parentHeight];\n      default:\n        return [x / parentWidth, y / parentHeight];\n    }\n  }\n  static createBezierPoints(x1, y1, x2, y2, x3, y3) {\n    return [(x1 + 5 * x2) / 6, (y1 + 5 * y2) / 6, (5 * x2 + x3) / 6, (5 * y2 + y3) / 6, (x2 + x3) / 2, (y2 + y3) / 2];\n  }\n}\n\n;// ./src/display/editor/drawers/freedraw.js\n\n\n\n\nclass FreeDrawOutliner {\n  #box;\n  #bottom = [];\n  #innerMargin;\n  #isLTR;\n  #top = [];\n  #last = new Float32Array(18);\n  #lastX;\n  #lastY;\n  #min;\n  #min_dist;\n  #scaleFactor;\n  #thickness;\n  #points = [];\n  static #MIN_DIST = 8;\n  static #MIN_DIFF = 2;\n  static #MIN = FreeDrawOutliner.#MIN_DIST + FreeDrawOutliner.#MIN_DIFF;\n  constructor({\n    x,\n    y\n  }, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    this.#box = box;\n    this.#thickness = thickness * scaleFactor;\n    this.#isLTR = isLTR;\n    this.#last.set([NaN, NaN, NaN, NaN, x, y], 6);\n    this.#innerMargin = innerMargin;\n    this.#min_dist = FreeDrawOutliner.#MIN_DIST * scaleFactor;\n    this.#min = FreeDrawOutliner.#MIN * scaleFactor;\n    this.#scaleFactor = scaleFactor;\n    this.#points.push(x, y);\n  }\n  isEmpty() {\n    return isNaN(this.#last[8]);\n  }\n  #getLastCoords() {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [x, y, width, height] = this.#box;\n    return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height];\n  }\n  add({\n    x,\n    y\n  }) {\n    this.#lastX = x;\n    this.#lastY = y;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    let [x1, y1, x2, y2] = this.#last.subarray(8, 12);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(diffX, diffY);\n    if (d < this.#min) {\n      return false;\n    }\n    const diffD = d - this.#min_dist;\n    const K = diffD / d;\n    const shiftX = K * diffX;\n    const shiftY = K * diffY;\n    let x0 = x1;\n    let y0 = y1;\n    x1 = x2;\n    y1 = y2;\n    x2 += shiftX;\n    y2 += shiftY;\n    this.#points?.push(x, y);\n    const nX = -shiftY / diffD;\n    const nY = shiftX / diffD;\n    const thX = nX * this.#thickness;\n    const thY = nY * this.#thickness;\n    this.#last.set(this.#last.subarray(2, 8), 0);\n    this.#last.set([x2 + thX, y2 + thY], 4);\n    this.#last.set(this.#last.subarray(14, 18), 12);\n    this.#last.set([x2 - thX, y2 - thY], 16);\n    if (isNaN(this.#last[6])) {\n      if (this.#top.length === 0) {\n        this.#last.set([x1 + thX, y1 + thY], 2);\n        this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight);\n        this.#last.set([x1 - thX, y1 - thY], 14);\n        this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight);\n      }\n      this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n      return !this.isEmpty();\n    }\n    this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n    const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX));\n    if (angle < Math.PI / 2) {\n      [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n      this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n      [x1, y1, x0, y0] = this.#last.subarray(14, 18);\n      this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight);\n      return true;\n    }\n    [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6);\n    this.#top.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18);\n    this.#bottom.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    return true;\n  }\n  toSVGPath() {\n    if (this.isEmpty()) {\n      return \"\";\n    }\n    const top = this.#top;\n    const bottom = this.#bottom;\n    if (isNaN(this.#last[6]) && !this.isEmpty()) {\n      return this.#toSVGPathTwoPoints();\n    }\n    const buffer = [];\n    buffer.push(`M${top[4]} ${top[5]}`);\n    for (let i = 6; i < top.length; i += 6) {\n      if (isNaN(top[i])) {\n        buffer.push(`L${top[i + 4]} ${top[i + 5]}`);\n      } else {\n        buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`);\n      }\n    }\n    this.#toSVGPathEnd(buffer);\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      if (isNaN(bottom[i])) {\n        buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`);\n      } else {\n        buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`);\n      }\n    }\n    this.#toSVGPathStart(buffer);\n    return buffer.join(\" \");\n  }\n  #toSVGPathTwoPoints() {\n    const [x, y, width, height] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`;\n  }\n  #toSVGPathStart(buffer) {\n    const bottom = this.#bottom;\n    buffer.push(`L${bottom[4]} ${bottom[5]} Z`);\n  }\n  #toSVGPathEnd(buffer) {\n    const [x, y, width, height] = this.#box;\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`);\n  }\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR);\n  }\n  getOutlines() {\n    const top = this.#top;\n    const bottom = this.#bottom;\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const points = new Float32Array((this.#points?.length ?? 0) + 2);\n    for (let i = 0, ii = points.length - 2; i < ii; i += 2) {\n      points[i] = (this.#points[i] - layerX) / layerWidth;\n      points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;\n    }\n    points[points.length - 2] = (this.#lastX - layerX) / layerWidth;\n    points[points.length - 1] = (this.#lastY - layerY) / layerHeight;\n    if (isNaN(last[6]) && !this.isEmpty()) {\n      return this.#getOutlineTwoPoints(points);\n    }\n    const outline = new Float32Array(this.#top.length + 24 + this.#bottom.length);\n    let N = top.length;\n    for (let i = 0; i < N; i += 2) {\n      if (isNaN(top[i])) {\n        outline[i] = outline[i + 1] = NaN;\n        continue;\n      }\n      outline[i] = top[i];\n      outline[i + 1] = top[i + 1];\n    }\n    N = this.#getOutlineEnd(outline, N);\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      for (let j = 0; j < 6; j += 2) {\n        if (isNaN(bottom[i + j])) {\n          outline[N] = outline[N + 1] = NaN;\n          N += 2;\n          continue;\n        }\n        outline[N] = bottom[i + j];\n        outline[N + 1] = bottom[i + j + 1];\n        N += 2;\n      }\n    }\n    this.#getOutlineStart(outline, N);\n    return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n  }\n  #getOutlineTwoPoints(points) {\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    const outline = new Float32Array(36);\n    outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0);\n    return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n  }\n  #getOutlineStart(outline, pos) {\n    const bottom = this.#bottom;\n    outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos);\n    return pos += 6;\n  }\n  #getOutlineEnd(outline, pos) {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], pos);\n    return pos += 24;\n  }\n}\nclass FreeDrawOutline extends Outline {\n  #box;\n  #bbox = new Float32Array(4);\n  #innerMargin;\n  #isLTR;\n  #points;\n  #scaleFactor;\n  #outline;\n  constructor(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    super();\n    this.#outline = outline;\n    this.#points = points;\n    this.#box = box;\n    this.#scaleFactor = scaleFactor;\n    this.#innerMargin = innerMargin;\n    this.#isLTR = isLTR;\n    this.firstPoint = [NaN, NaN];\n    this.lastPoint = [NaN, NaN];\n    this.#computeMinMax(isLTR);\n    const [x, y, width, height] = this.#bbox;\n    for (let i = 0, ii = outline.length; i < ii; i += 2) {\n      outline[i] = (outline[i] - x) / width;\n      outline[i + 1] = (outline[i + 1] - y) / height;\n    }\n    for (let i = 0, ii = points.length; i < ii; i += 2) {\n      points[i] = (points[i] - x) / width;\n      points[i + 1] = (points[i + 1] - y) / height;\n    }\n  }\n  toSVGPath() {\n    const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`];\n    for (let i = 6, ii = this.#outline.length; i < ii; i += 6) {\n      if (isNaN(this.#outline[i])) {\n        buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n        continue;\n      }\n      buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n    }\n    buffer.push(\"Z\");\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], rotation) {\n    const width = trX - blX;\n    const height = trY - blY;\n    let outline;\n    let points;\n    switch (rotation) {\n      case 0:\n        outline = Outline._rescale(this.#outline, blX, trY, width, -height);\n        points = Outline._rescale(this.#points, blX, trY, width, -height);\n        break;\n      case 90:\n        outline = Outline._rescaleAndSwap(this.#outline, blX, blY, width, height);\n        points = Outline._rescaleAndSwap(this.#points, blX, blY, width, height);\n        break;\n      case 180:\n        outline = Outline._rescale(this.#outline, trX, blY, -width, height);\n        points = Outline._rescale(this.#points, trX, blY, -width, height);\n        break;\n      case 270:\n        outline = Outline._rescaleAndSwap(this.#outline, trX, trY, -width, -height);\n        points = Outline._rescaleAndSwap(this.#points, trX, trY, -width, -height);\n        break;\n    }\n    return {\n      outline: Array.from(outline),\n      points: [Array.from(points)]\n    };\n  }\n  #computeMinMax(isLTR) {\n    const outline = this.#outline;\n    let lastX = outline[4];\n    let lastY = outline[5];\n    const minMax = [lastX, lastY, lastX, lastY];\n    let firstPointX = lastX;\n    let firstPointY = lastY;\n    let lastPointX = lastX;\n    let lastPointY = lastY;\n    const ltrCallback = isLTR ? Math.max : Math.min;\n    const bezierBbox = new Float32Array(4);\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      const x = outline[i + 4],\n        y = outline[i + 5];\n      if (isNaN(outline[i])) {\n        Util.pointBoundingBox(x, y, minMax);\n        if (firstPointY > y) {\n          firstPointX = x;\n          firstPointY = y;\n        } else if (firstPointY === y) {\n          firstPointX = ltrCallback(firstPointX, x);\n        }\n        if (lastPointY < y) {\n          lastPointX = x;\n          lastPointY = y;\n        } else if (lastPointY === y) {\n          lastPointX = ltrCallback(lastPointX, x);\n        }\n      } else {\n        bezierBbox.set(BBOX_INIT, 0);\n        Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6), bezierBbox);\n        Util.rectBoundingBox(...bezierBbox, minMax);\n        if (firstPointY > bezierBbox[1]) {\n          firstPointX = bezierBbox[0];\n          firstPointY = bezierBbox[1];\n        } else if (firstPointY === bezierBbox[1]) {\n          firstPointX = ltrCallback(firstPointX, bezierBbox[0]);\n        }\n        if (lastPointY < bezierBbox[3]) {\n          lastPointX = bezierBbox[2];\n          lastPointY = bezierBbox[3];\n        } else if (lastPointY === bezierBbox[3]) {\n          lastPointX = ltrCallback(lastPointX, bezierBbox[2]);\n        }\n      }\n      lastX = x;\n      lastY = y;\n    }\n    const bbox = this.#bbox;\n    bbox[0] = minMax[0] - this.#innerMargin;\n    bbox[1] = minMax[1] - this.#innerMargin;\n    bbox[2] = minMax[2] - minMax[0] + 2 * this.#innerMargin;\n    bbox[3] = minMax[3] - minMax[1] + 2 * this.#innerMargin;\n    this.firstPoint = [firstPointX, firstPointY];\n    this.lastPoint = [lastPointX, lastPointY];\n  }\n  get box() {\n    return this.#bbox;\n  }\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeDrawOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);\n  }\n  getNewOutline(thickness, innerMargin) {\n    const [x, y, width, height] = this.#bbox;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const sx = width * layerWidth;\n    const sy = height * layerHeight;\n    const tx = x * layerWidth + layerX;\n    const ty = y * layerHeight + layerY;\n    const outliner = this.newOutliner({\n      x: this.#points[0] * sx + tx,\n      y: this.#points[1] * sy + ty\n    }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin);\n    for (let i = 2; i < this.#points.length; i += 2) {\n      outliner.add({\n        x: this.#points[i] * sx + tx,\n        y: this.#points[i + 1] * sy + ty\n      });\n    }\n    return outliner.getOutlines();\n  }\n}\n\n;// ./src/display/editor/drawers/highlight.js\n\n\n\n\n\n\n\n\n\n\n\n\nclass HighlightOutliner {\n  #box;\n  #firstPoint;\n  #lastPoint;\n  #verticalEdges = [];\n  #intervals = [];\n  constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) {\n    const minMax = BBOX_INIT.slice();\n    const NUMBER_OF_DIGITS = 4;\n    const EPSILON = 10 ** -NUMBER_OF_DIGITS;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON;\n      const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON;\n      const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON;\n      const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON;\n      const left = [x1, y1, y2, true];\n      const right = [x2, y1, y2, false];\n      this.#verticalEdges.push(left, right);\n      Util.rectBoundingBox(x1, y1, x2, y2, minMax);\n    }\n    const bboxWidth = minMax[2] - minMax[0] + 2 * innerMargin;\n    const bboxHeight = minMax[3] - minMax[1] + 2 * innerMargin;\n    const shiftedMinX = minMax[0] - innerMargin;\n    const shiftedMinY = minMax[1] - innerMargin;\n    let firstPointX = isLTR ? -Infinity : Infinity;\n    let firstPointY = Infinity;\n    const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2);\n    const lastPoint = [lastEdge[0], lastEdge[2]];\n    for (const edge of this.#verticalEdges) {\n      const [x, y1, y2, left] = edge;\n      if (!left && isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.max(firstPointX, x);\n        }\n      } else if (left && !isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.min(firstPointX, x);\n        }\n      }\n      edge[0] = (x - shiftedMinX) / bboxWidth;\n      edge[1] = (y1 - shiftedMinY) / bboxHeight;\n      edge[2] = (y2 - shiftedMinY) / bboxHeight;\n    }\n    this.#box = new Float32Array([shiftedMinX, shiftedMinY, bboxWidth, bboxHeight]);\n    this.#firstPoint = [firstPointX, firstPointY];\n    this.#lastPoint = lastPoint;\n  }\n  getOutlines() {\n    this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);\n    const outlineVerticalEdges = [];\n    for (const edge of this.#verticalEdges) {\n      if (edge[3]) {\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n        this.#insert(edge);\n      } else {\n        this.#remove(edge);\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n      }\n    }\n    return this.#getOutlines(outlineVerticalEdges);\n  }\n  #getOutlines(outlineVerticalEdges) {\n    const edges = [];\n    const allEdges = new Set();\n    for (const edge of outlineVerticalEdges) {\n      const [x, y1, y2] = edge;\n      edges.push([x, y1, edge], [x, y2, edge]);\n    }\n    edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n    for (let i = 0, ii = edges.length; i < ii; i += 2) {\n      const edge1 = edges[i][2];\n      const edge2 = edges[i + 1][2];\n      edge1.push(edge2);\n      edge2.push(edge1);\n      allEdges.add(edge1);\n      allEdges.add(edge2);\n    }\n    const outlines = [];\n    let outline;\n    while (allEdges.size > 0) {\n      const edge = allEdges.values().next().value;\n      let [x, y1, y2, edge1, edge2] = edge;\n      allEdges.delete(edge);\n      let lastPointX = x;\n      let lastPointY = y1;\n      outline = [x, y2];\n      outlines.push(outline);\n      while (true) {\n        let e;\n        if (allEdges.has(edge1)) {\n          e = edge1;\n        } else if (allEdges.has(edge2)) {\n          e = edge2;\n        } else {\n          break;\n        }\n        allEdges.delete(e);\n        [x, y1, y2, edge1, edge2] = e;\n        if (lastPointX !== x) {\n          outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2);\n          lastPointX = x;\n        }\n        lastPointY = lastPointY === y1 ? y2 : y1;\n      }\n      outline.push(lastPointX, lastPointY);\n    }\n    return new HighlightOutline(outlines, this.#box, this.#firstPoint, this.#lastPoint);\n  }\n  #binarySearch(y) {\n    const array = this.#intervals;\n    let start = 0;\n    let end = array.length - 1;\n    while (start <= end) {\n      const middle = start + end >> 1;\n      const y1 = array[middle][0];\n      if (y1 === y) {\n        return middle;\n      }\n      if (y1 < y) {\n        start = middle + 1;\n      } else {\n        end = middle - 1;\n      }\n    }\n    return end + 1;\n  }\n  #insert([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    this.#intervals.splice(index, 0, [y1, y2]);\n  }\n  #remove([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    for (let i = index; i < this.#intervals.length; i++) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n    for (let i = index - 1; i >= 0; i--) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n  }\n  #breakEdge(edge) {\n    const [x, y1, y2] = edge;\n    const results = [[x, y1, y2]];\n    const index = this.#binarySearch(y2);\n    for (let i = 0; i < index; i++) {\n      const [start, end] = this.#intervals[i];\n      for (let j = 0, jj = results.length; j < jj; j++) {\n        const [, y3, y4] = results[j];\n        if (end <= y3 || y4 <= start) {\n          continue;\n        }\n        if (y3 >= start) {\n          if (y4 > end) {\n            results[j][1] = end;\n          } else {\n            if (jj === 1) {\n              return [];\n            }\n            results.splice(j, 1);\n            j--;\n            jj--;\n          }\n          continue;\n        }\n        results[j][2] = start;\n        if (y4 > end) {\n          results.push([x, end, y4]);\n        }\n      }\n    }\n    return results;\n  }\n}\nclass HighlightOutline extends Outline {\n  #box;\n  #outlines;\n  constructor(outlines, box, firstPoint, lastPoint) {\n    super();\n    this.#outlines = outlines;\n    this.#box = box;\n    this.firstPoint = firstPoint;\n    this.lastPoint = lastPoint;\n  }\n  toSVGPath() {\n    const buffer = [];\n    for (const polygon of this.#outlines) {\n      let [prevX, prevY] = polygon;\n      buffer.push(`M${prevX} ${prevY}`);\n      for (let i = 2; i < polygon.length; i += 2) {\n        const x = polygon[i];\n        const y = polygon[i + 1];\n        if (x === prevX) {\n          buffer.push(`V${y}`);\n          prevY = y;\n        } else if (y === prevY) {\n          buffer.push(`H${x}`);\n          prevX = x;\n        }\n      }\n      buffer.push(\"Z\");\n    }\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], _rotation) {\n    const outlines = [];\n    const width = trX - blX;\n    const height = trY - blY;\n    for (const outline of this.#outlines) {\n      const points = new Array(outline.length);\n      for (let i = 0; i < outline.length; i += 2) {\n        points[i] = blX + outline[i] * width;\n        points[i + 1] = trY - outline[i + 1] * height;\n      }\n      outlines.push(points);\n    }\n    return outlines;\n  }\n  get box() {\n    return this.#box;\n  }\n}\nclass FreeHighlightOutliner extends FreeDrawOutliner {\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeHighlightOutline(outline, points, box, scaleFactor, innerMargin, isLTR);\n  }\n}\nclass FreeHighlightOutline extends FreeDrawOutline {\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeHighlightOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);\n  }\n}\n\n;// ./src/display/editor/highlight.js\n\n\n\n\n\n\n\n\n\n\n\nclass HighlightEditor extends AnnotationEditor {\n  #anchorNode = null;\n  #anchorOffset = 0;\n  #boxes;\n  #clipPathId = null;\n  #colorPicker = null;\n  #focusOutlines = null;\n  #focusNode = null;\n  #focusOffset = 0;\n  #highlightDiv = null;\n  #highlightOutlines = null;\n  #id = null;\n  #isFreeHighlight = false;\n  #firstPoint = null;\n  #lastPoint = null;\n  #outlineId = null;\n  #text = \"\";\n  #thickness;\n  #methodOfCreation = \"\";\n  static _defaultColor = null;\n  static _defaultOpacity = 1;\n  static _defaultThickness = 12;\n  static _type = \"highlight\";\n  static _editorType = AnnotationEditorType.HIGHLIGHT;\n  static _freeHighlightId = -1;\n  static _freeHighlight = null;\n  static _freeHighlightClipId = \"\";\n  static get _keyboardManager() {\n    const proto = HighlightEditor.prototype;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ArrowLeft\"], proto._moveCaret, {\n      args: [0]\n    }], [[\"ArrowRight\"], proto._moveCaret, {\n      args: [1]\n    }], [[\"ArrowUp\"], proto._moveCaret, {\n      args: [2]\n    }], [[\"ArrowDown\"], proto._moveCaret, {\n      args: [3]\n    }]]));\n  }\n  constructor(params) {\n    super({\n      ...params,\n      name: \"highlightEditor\"\n    });\n    this.color = params.color || HighlightEditor._defaultColor;\n    this.#thickness = params.thickness || HighlightEditor._defaultThickness;\n    this.opacity = params.opacity || HighlightEditor._defaultOpacity;\n    this.#boxes = params.boxes || null;\n    this.#methodOfCreation = params.methodOfCreation || \"\";\n    this.#text = params.text || \"\";\n    this._isDraggable = false;\n    this.defaultL10nId = \"pdfjs-editor-highlight-editor\";\n    if (params.highlightId > -1) {\n      this.#isFreeHighlight = true;\n      this.#createFreeOutlines(params);\n      this.#addToDrawLayer();\n    } else if (this.#boxes) {\n      this.#anchorNode = params.anchorNode;\n      this.#anchorOffset = params.anchorOffset;\n      this.#focusNode = params.focusNode;\n      this.#focusOffset = params.focusOffset;\n      this.#createOutlines();\n      this.#addToDrawLayer();\n      this.rotate(this.rotation);\n    }\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.highlight);\n    }\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\",\n      type: this.#isFreeHighlight ? \"free_highlight\" : \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color),\n      thickness: this.#thickness,\n      methodOfCreation: this.#methodOfCreation\n    };\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color)\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    return {\n      numberOfColors: data.get(\"color\").size\n    };\n  }\n  #createOutlines() {\n    const outliner = new HighlightOutliner(this.#boxes, 0.001);\n    this.#highlightOutlines = outliner.getOutlines();\n    [this.x, this.y, this.width, this.height] = this.#highlightOutlines.box;\n    const outlinerForOutline = new HighlightOutliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === \"ltr\");\n    this.#focusOutlines = outlinerForOutline.getOutlines();\n    const {\n      firstPoint\n    } = this.#highlightOutlines;\n    this.#firstPoint = [(firstPoint[0] - this.x) / this.width, (firstPoint[1] - this.y) / this.height];\n    const {\n      lastPoint\n    } = this.#focusOutlines;\n    this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height];\n  }\n  #createFreeOutlines({\n    highlightOutlines,\n    highlightId,\n    clipPathId\n  }) {\n    this.#highlightOutlines = highlightOutlines;\n    const extraThickness = 1.5;\n    this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025);\n    if (highlightId >= 0) {\n      this.#id = highlightId;\n      this.#clipPathId = clipPathId;\n      this.parent.drawLayer.finalizeDraw(highlightId, {\n        bbox: highlightOutlines.box,\n        path: {\n          d: highlightOutlines.toSVGPath()\n        }\n      });\n      this.#outlineId = this.parent.drawLayer.drawOutline({\n        rootClass: {\n          highlightOutline: true,\n          free: true\n        },\n        bbox: this.#focusOutlines.box,\n        path: {\n          d: this.#focusOutlines.toSVGPath()\n        }\n      }, true);\n    } else if (this.parent) {\n      const angle = this.parent.viewport.rotation;\n      this.parent.drawLayer.updateProperties(this.#id, {\n        bbox: HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360),\n        path: {\n          d: highlightOutlines.toSVGPath()\n        }\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n        path: {\n          d: this.#focusOutlines.toSVGPath()\n        }\n      });\n    }\n    const [x, y, width, height] = highlightOutlines.box;\n    switch (this.rotation) {\n      case 0:\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = y;\n          this.y = 1 - x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n      case 180:\n        this.x = 1 - x;\n        this.y = 1 - y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = 1 - y;\n          this.y = x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n    }\n    const {\n      firstPoint\n    } = highlightOutlines;\n    this.#firstPoint = [(firstPoint[0] - x) / width, (firstPoint[1] - y) / height];\n    const {\n      lastPoint\n    } = this.#focusOutlines;\n    this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height];\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || \"#fff066\";\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        HighlightEditor._defaultColor = value;\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        HighlightEditor._defaultThickness = value;\n        break;\n    }\n  }\n  translateInPage(x, y) {}\n  get toolbarPosition() {\n    return this.#lastPoint;\n  }\n  get commentButtonPosition() {\n    return this.#firstPoint;\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        this.#updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        this.#updateThickness(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]];\n  }\n  onUpdatedColor() {\n    this.parent?.drawLayer.updateProperties(this.#id, {\n      root: {\n        fill: this.color,\n        \"fill-opacity\": this.opacity\n      }\n    });\n    this.#colorPicker?.updateColor(this.color);\n    super.onUpdatedColor();\n  }\n  #updateColor(color) {\n    const setColorAndOpacity = (col, opa) => {\n      this.color = col;\n      this.opacity = opa;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    const savedOpacity = this.opacity;\n    this.addCommands({\n      cmd: setColorAndOpacity.bind(this, color, HighlightEditor._defaultOpacity),\n      undo: setColorAndOpacity.bind(this, savedColor, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"color_changed\",\n      color: this._uiManager.getNonHCMColorName(color)\n    }, true);\n  }\n  #updateThickness(thickness) {\n    const savedThickness = this.#thickness;\n    const setThickness = th => {\n      this.#thickness = th;\n      this.#changeThickness(th);\n    };\n    this.addCommands({\n      cmd: setThickness.bind(this, thickness),\n      undo: setThickness.bind(this, savedThickness),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_THICKNESS,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"thickness_changed\",\n      thickness\n    }, true);\n  }\n  get toolbarButtons() {\n    if (this._uiManager.highlightColors) {\n      const colorPicker = this.#colorPicker = new ColorPicker({\n        editor: this\n      });\n      return [[\"colorPicker\", colorPicker]];\n    }\n    return super.toolbarButtons;\n  }\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n  fixAndSetPosition() {\n    return super.fixAndSetPosition(this.#getRotation());\n  }\n  getBaseTranslation() {\n    return [0, 0];\n  }\n  getRect(tx, ty) {\n    return super.getRect(tx, ty, this.#getRotation());\n  }\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    if (focus) {\n      this.div.focus();\n    }\n  }\n  remove() {\n    this.#cleanDrawLayer();\n    this._reportTelemetry({\n      action: \"deleted\"\n    });\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    this.#addToDrawLayer();\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this.#addToDrawLayer(parent);\n      mustBeSelected = !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    this.show(this._isVisible);\n    if (mustBeSelected) {\n      this.select();\n    }\n  }\n  #changeThickness(thickness) {\n    if (!this.#isFreeHighlight) {\n      return;\n    }\n    this.#createFreeOutlines({\n      highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2)\n    });\n    this.fixAndSetPosition();\n    this.setDims();\n  }\n  #cleanDrawLayer() {\n    if (this.#id === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this.#id);\n    this.#id = null;\n    this.parent.drawLayer.remove(this.#outlineId);\n    this.#outlineId = null;\n  }\n  #addToDrawLayer(parent = this.parent) {\n    if (this.#id !== null) {\n      return;\n    }\n    ({\n      id: this.#id,\n      clipPathId: this.#clipPathId\n    } = parent.drawLayer.draw({\n      bbox: this.#highlightOutlines.box,\n      root: {\n        viewBox: \"0 0 1 1\",\n        fill: this.color,\n        \"fill-opacity\": this.opacity\n      },\n      rootClass: {\n        highlight: true,\n        free: this.#isFreeHighlight\n      },\n      path: {\n        d: this.#highlightOutlines.toSVGPath()\n      }\n    }, false, true));\n    this.#outlineId = parent.drawLayer.drawOutline({\n      rootClass: {\n        highlightOutline: true,\n        free: this.#isFreeHighlight\n      },\n      bbox: this.#focusOutlines.box,\n      path: {\n        d: this.#focusOutlines.toSVGPath()\n      }\n    }, this.#isFreeHighlight);\n    if (this.#highlightDiv) {\n      this.#highlightDiv.style.clipPath = this.#clipPathId;\n    }\n  }\n  static #rotateBbox([x, y, width, height], angle) {\n    switch (angle) {\n      case 90:\n        return [1 - y - height, x, height, width];\n      case 180:\n        return [1 - x - width, 1 - y - height, width, height];\n      case 270:\n        return [y, 1 - x - width, height, width];\n    }\n    return [x, y, width, height];\n  }\n  rotate(angle) {\n    const {\n      drawLayer\n    } = this.parent;\n    let box;\n    if (this.#isFreeHighlight) {\n      angle = (angle - this.rotation + 360) % 360;\n      box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle);\n    } else {\n      box = HighlightEditor.#rotateBbox([this.x, this.y, this.width, this.height], angle);\n    }\n    drawLayer.updateProperties(this.#id, {\n      bbox: box,\n      root: {\n        \"data-main-rotation\": angle\n      }\n    });\n    drawLayer.updateProperties(this.#outlineId, {\n      bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n      root: {\n        \"data-main-rotation\": angle\n      }\n    });\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    const div = super.render();\n    if (this.#text) {\n      div.setAttribute(\"aria-label\", this.#text);\n      div.setAttribute(\"role\", \"mark\");\n    }\n    if (this.#isFreeHighlight) {\n      div.classList.add(\"free\");\n    } else {\n      this.div.addEventListener(\"keydown\", this.#keydown.bind(this), {\n        signal: this._uiManager._signal\n      });\n    }\n    const highlightDiv = this.#highlightDiv = document.createElement(\"div\");\n    div.append(highlightDiv);\n    highlightDiv.setAttribute(\"aria-hidden\", \"true\");\n    highlightDiv.className = \"internal\";\n    highlightDiv.style.clipPath = this.#clipPathId;\n    this.setDims();\n    bindEvents(this, this.#highlightDiv, [\"pointerover\", \"pointerleave\"]);\n    this.enableEditing();\n    return div;\n  }\n  pointerover() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: true\n        }\n      });\n    }\n  }\n  pointerleave() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: false\n        }\n      });\n    }\n  }\n  #keydown(event) {\n    HighlightEditor._keyboardManager.exec(this, event);\n  }\n  _moveCaret(direction) {\n    this.parent.unselect(this);\n    switch (direction) {\n      case 0:\n      case 2:\n        this.#setCaret(true);\n        break;\n      case 1:\n      case 3:\n        this.#setCaret(false);\n        break;\n    }\n  }\n  #setCaret(start) {\n    if (!this.#anchorNode) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (start) {\n      selection.setPosition(this.#anchorNode, this.#anchorOffset);\n    } else {\n      selection.setPosition(this.#focusNode, this.#focusOffset);\n    }\n  }\n  select() {\n    super.select();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        hovered: false,\n        selected: true\n      }\n    });\n  }\n  unselect() {\n    super.unselect();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        selected: false\n      }\n    });\n    if (!this.#isFreeHighlight) {\n      this.#setCaret(false);\n    }\n  }\n  get _mustFixPosition() {\n    return !this.#isFreeHighlight;\n  }\n  show(visible = this._isVisible) {\n    super.show(visible);\n    if (this.parent) {\n      this.parent.drawLayer.updateProperties(this.#id, {\n        rootClass: {\n          hidden: !visible\n        }\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hidden: !visible\n        }\n      });\n    }\n  }\n  #getRotation() {\n    return this.#isFreeHighlight ? this.rotation : 0;\n  }\n  #serializeBoxes() {\n    if (this.#isFreeHighlight) {\n      return null;\n    }\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const boxes = this.#boxes;\n    const quadPoints = new Float32Array(boxes.length * 8);\n    let i = 0;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const sx = x * pageWidth + pageX;\n      const sy = (1 - y) * pageHeight + pageY;\n      quadPoints[i] = quadPoints[i + 4] = sx;\n      quadPoints[i + 1] = quadPoints[i + 3] = sy;\n      quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth;\n      quadPoints[i + 5] = quadPoints[i + 7] = sy - height * pageHeight;\n      i += 8;\n    }\n    return quadPoints;\n  }\n  #serializeOutlines(rect) {\n    return this.#highlightOutlines.serialize(rect, this.#getRotation());\n  }\n  static startHighlighting(parent, isLTR, {\n    target: textLayer,\n    x,\n    y\n  }) {\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    const ac = new AbortController();\n    const signal = parent.combinedSignal(ac);\n    const pointerUpCallback = e => {\n      ac.abort();\n      this.#endHighlight(parent, e);\n    };\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"pointerdown\", stopEvent, {\n      capture: true,\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    textLayer.addEventListener(\"pointermove\", this.#highlightMove.bind(this, parent), {\n      signal\n    });\n    this._freeHighlight = new FreeHighlightOutliner({\n      x,\n      y\n    }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001);\n    ({\n      id: this._freeHighlightId,\n      clipPathId: this._freeHighlightClipId\n    } = parent.drawLayer.draw({\n      bbox: [0, 0, 1, 1],\n      root: {\n        viewBox: \"0 0 1 1\",\n        fill: this._defaultColor,\n        \"fill-opacity\": this._defaultOpacity\n      },\n      rootClass: {\n        highlight: true,\n        free: true\n      },\n      path: {\n        d: this._freeHighlight.toSVGPath()\n      }\n    }, true, true));\n  }\n  static #highlightMove(parent, event) {\n    if (this._freeHighlight.add(event)) {\n      parent.drawLayer.updateProperties(this._freeHighlightId, {\n        path: {\n          d: this._freeHighlight.toSVGPath()\n        }\n      });\n    }\n  }\n  static #endHighlight(parent, event) {\n    if (!this._freeHighlight.isEmpty()) {\n      parent.createAndAddNewEditor(event, false, {\n        highlightId: this._freeHighlightId,\n        highlightOutlines: this._freeHighlight.getOutlines(),\n        clipPathId: this._freeHighlightClipId,\n        methodOfCreation: \"main_toolbar\"\n      });\n    } else {\n      parent.drawLayer.remove(this._freeHighlightId);\n    }\n    this._freeHighlightId = -1;\n    this._freeHighlight = null;\n    this._freeHighlightClipId = \"\";\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof HighlightAnnotationElement) {\n      const {\n        data: {\n          quadPoints,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        opacity,\n        quadPoints,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    } else if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          borderStyle: {\n            rawWidth: thickness\n          },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        thickness,\n        inkLists,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const {\n      color,\n      quadPoints,\n      inkLists,\n      outlines,\n      opacity\n    } = data;\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.color = Util.makeHexColor(...color);\n    editor.opacity = opacity || 1;\n    if (inkLists) {\n      editor.#thickness = data.thickness;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [pageX, pageY] = editor.pageTranslation;\n    if (quadPoints) {\n      const boxes = editor.#boxes = [];\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        boxes.push({\n          x: (quadPoints[i] - pageX) / pageWidth,\n          y: 1 - (quadPoints[i + 1] - pageY) / pageHeight,\n          width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,\n          height: (quadPoints[i + 1] - quadPoints[i + 5]) / pageHeight\n        });\n      }\n      editor.#createOutlines();\n      editor.#addToDrawLayer();\n      editor.rotate(editor.rotation);\n    } else if (inkLists || outlines) {\n      editor.#isFreeHighlight = true;\n      const points = (inkLists || outlines.points)[0];\n      const point = {\n        x: points[0] - pageX,\n        y: pageHeight - (points[1] - pageY)\n      };\n      const outliner = new FreeHighlightOutliner(point, [0, 0, pageWidth, pageHeight], 1, editor.#thickness / 2, true, 0.001);\n      for (let i = 0, ii = points.length; i < ii; i += 2) {\n        point.x = points[i] - pageX;\n        point.y = pageHeight - (points[i + 1] - pageY);\n        outliner.add(point);\n      }\n      const {\n        id,\n        clipPathId\n      } = parent.drawLayer.draw({\n        bbox: [0, 0, 1, 1],\n        root: {\n          viewBox: \"0 0 1 1\",\n          fill: editor.color,\n          \"fill-opacity\": editor._defaultOpacity\n        },\n        rootClass: {\n          highlight: true,\n          free: true\n        },\n        path: {\n          d: outliner.toSVGPath()\n        }\n      }, true, true);\n      editor.#createFreeOutlines({\n        highlightOutlines: outliner.getOutlines(),\n        highlightId: id,\n        clipPathId\n      });\n      editor.#addToDrawLayer();\n      editor.rotate(editor.parentRotation);\n    }\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty() || isForCopying) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const color = AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color));\n    const serialized = super.serialize(isForCopying);\n    Object.assign(serialized, {\n      color,\n      opacity: this.opacity,\n      thickness: this.#thickness,\n      quadPoints: this.#serializeBoxes(),\n      outlines: this.#serializeOutlines(serialized.rect)\n    });\n    this.addComment(serialized);\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      color\n    } = this._initialData;\n    return this.hasEditedComment || serialized.color.some((c, i) => c !== color[i]);\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment\n    });\n    return null;\n  }\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\n;// ./src/display/editor/draw.js\n\n\n\n\n\n\n\n\n\n\n\n\nclass DrawingOptions {\n  #svgProperties = Object.create(null);\n  updateProperty(name, value) {\n    this[name] = value;\n    this.updateSVGProperty(name, value);\n  }\n  updateProperties(properties) {\n    if (!properties) {\n      return;\n    }\n    for (const [name, value] of Object.entries(properties)) {\n      if (!name.startsWith(\"_\")) {\n        this.updateProperty(name, value);\n      }\n    }\n  }\n  updateSVGProperty(name, value) {\n    this.#svgProperties[name] = value;\n  }\n  toSVGProperties() {\n    const root = this.#svgProperties;\n    this.#svgProperties = Object.create(null);\n    return {\n      root\n    };\n  }\n  reset() {\n    this.#svgProperties = Object.create(null);\n  }\n  updateAll(options = this) {\n    this.updateProperties(options);\n  }\n  clone() {\n    unreachable(\"Not implemented\");\n  }\n}\nclass DrawingEditor extends AnnotationEditor {\n  #drawOutlines = null;\n  #mustBeCommitted;\n  _colorPicker = null;\n  _drawId = null;\n  static _currentDrawId = -1;\n  static _currentParent = null;\n  static #currentDraw = null;\n  static #currentDrawingAC = null;\n  static #currentDrawingOptions = null;\n  static _INNER_MARGIN = 3;\n  constructor(params) {\n    super(params);\n    this.#mustBeCommitted = params.mustBeCommitted || false;\n    this._addOutlines(params);\n  }\n  onUpdatedColor() {\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n  onUpdatedOpacity() {\n    this._colorPicker?.updateOpacity?.(this.opacity);\n  }\n  _addOutlines(params) {\n    if (params.drawOutlines) {\n      this.#createDrawOutlines(params);\n      this.#addToDrawLayer();\n    }\n  }\n  #createDrawOutlines({\n    drawOutlines,\n    drawId,\n    drawingOptions\n  }) {\n    this.#drawOutlines = drawOutlines;\n    this._drawingOptions ||= drawingOptions;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert[this.editorType]);\n    }\n    if (drawId >= 0) {\n      this._drawId = drawId;\n      this.parent.drawLayer.finalizeDraw(drawId, drawOutlines.defaultProperties);\n    } else {\n      this._drawId = this.#createDrawing(drawOutlines, this.parent);\n    }\n    this.#updateBbox(drawOutlines.box);\n  }\n  #createDrawing(drawOutlines, parent) {\n    const {\n      id\n    } = parent.drawLayer.draw(DrawingEditor._mergeSVGProperties(this._drawingOptions.toSVGProperties(), drawOutlines.defaultSVGProperties), false, false);\n    return id;\n  }\n  static _mergeSVGProperties(p1, p2) {\n    const p1Keys = new Set(Object.keys(p1));\n    for (const [key, value] of Object.entries(p2)) {\n      if (p1Keys.has(key)) {\n        Object.assign(p1[key], value);\n      } else {\n        p1[key] = value;\n      }\n    }\n    return p1;\n  }\n  static getDefaultDrawingOptions(_options) {\n    unreachable(\"Not implemented\");\n  }\n  static get typesMap() {\n    unreachable(\"Not implemented\");\n  }\n  static get isDrawer() {\n    return true;\n  }\n  static get supportMultipleDrawings() {\n    return false;\n  }\n  static updateDefaultParams(type, value) {\n    const propertyName = this.typesMap.get(type);\n    if (propertyName) {\n      this._defaultDrawingOptions.updateProperty(propertyName, value);\n    }\n    if (this._currentParent) {\n      DrawingEditor.#currentDraw.updateProperty(propertyName, value);\n      this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());\n    }\n  }\n  updateParams(type, value) {\n    const propertyName = this.constructor.typesMap.get(type);\n    if (propertyName) {\n      this._updateProperty(type, propertyName, value);\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    const properties = [];\n    const options = this._defaultDrawingOptions;\n    for (const [type, name] of this.typesMap) {\n      properties.push([type, options[name]]);\n    }\n    return properties;\n  }\n  get propertiesToUpdate() {\n    const properties = [];\n    const {\n      _drawingOptions\n    } = this;\n    for (const [type, name] of this.constructor.typesMap) {\n      properties.push([type, _drawingOptions[name]]);\n    }\n    return properties;\n  }\n  _updateProperty(type, name, value) {\n    const options = this._drawingOptions;\n    const savedValue = options[name];\n    const setter = val => {\n      options.updateProperty(name, val);\n      const bbox = this.#drawOutlines.updateProperty(name, val);\n      if (bbox) {\n        this.#updateBbox(bbox);\n      }\n      this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties());\n      if (type === this.colorType) {\n        this.onUpdatedColor();\n      } else if (type === this.opacityType) {\n        this.onUpdatedOpacity();\n      }\n    };\n    this.addCommands({\n      cmd: setter.bind(this, value),\n      undo: setter.bind(this, savedValue),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _updateColorAndOpacity(color, opacity) {\n    const colorName = this.constructor.typesMap.get(this.colorType);\n    const opacityName = this.constructor.typesMap.get(this.opacityType);\n    const options = this._drawingOptions;\n    const savedColor = options[colorName];\n    const savedOpacity = options[opacityName];\n    const setter = (c, op) => {\n      options.updateProperty(colorName, c);\n      options.updateProperty(opacityName, op);\n      this.#drawOutlines.updateProperty(colorName, c);\n      this.#drawOutlines.updateProperty(opacityName, op);\n      this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties());\n      this.onUpdatedColor();\n      this.onUpdatedOpacity();\n    };\n    this.addCommands({\n      cmd: setter.bind(this, color, opacity),\n      undo: setter.bind(this, savedColor, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_COLOR_AND_OPACITY,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _onResizing() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizingSVGProperties(this.#convertToDrawSpace()), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onResized() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizedSVGProperties(this.#convertToDrawSpace()), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onTranslating(_x, _y) {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      bbox: this.#rotateBox()\n    });\n  }\n  _onTranslated() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathTranslatedSVGProperties(this.#convertToDrawSpace(), this.parentDimensions), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onStartDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: true\n      }\n    });\n  }\n  _onStopDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: false\n      }\n    });\n  }\n  commit() {\n    super.commit();\n    this.disableEditMode();\n    this.disableEditing();\n  }\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n  getBaseTranslation() {\n    return [0, 0];\n  }\n  get isResizable() {\n    return true;\n  }\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    this._isDraggable = true;\n    if (this.#mustBeCommitted) {\n      this.#mustBeCommitted = false;\n      this.commit();\n      this.parent.setSelected(this);\n      if (focus && this.isOnScreen) {\n        this.div.focus();\n      }\n    }\n  }\n  remove() {\n    this.#cleanDrawLayer();\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    this.#addToDrawLayer();\n    this.#updateBbox(this.#drawOutlines.box);\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this._uiManager.removeShouldRescale(this);\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this._uiManager.addShouldRescale(this);\n      this.#addToDrawLayer(parent);\n      mustBeSelected = !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    if (mustBeSelected) {\n      this.select();\n    }\n  }\n  #cleanDrawLayer() {\n    if (this._drawId === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this._drawId);\n    this._drawId = null;\n    this._drawingOptions.reset();\n  }\n  #addToDrawLayer(parent = this.parent) {\n    if (this._drawId !== null && this.parent === parent) {\n      return;\n    }\n    if (this._drawId !== null) {\n      this.parent.drawLayer.updateParent(this._drawId, parent.drawLayer);\n      return;\n    }\n    this._drawingOptions.updateAll();\n    this._drawId = this.#createDrawing(this.#drawOutlines, parent);\n  }\n  #convertToParentSpace([x, y, width, height]) {\n    const {\n      parentDimensions: [pW, pH],\n      rotation\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [y, 1 - x, width * (pH / pW), height * (pW / pH)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [1 - y, x, width * (pH / pW), height * (pW / pH)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  #convertToDrawSpace() {\n    const {\n      x,\n      y,\n      width,\n      height,\n      parentDimensions: [pW, pH],\n      rotation\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  #updateBbox(bbox) {\n    [this.x, this.y, this.width, this.height] = this.#convertToParentSpace(bbox);\n    if (this.div) {\n      this.fixAndSetPosition();\n      this.setDims();\n    }\n    this._onResized();\n  }\n  #rotateBox() {\n    const {\n      x,\n      y,\n      width,\n      height,\n      rotation,\n      parentRotation,\n      parentDimensions: [pW, pH]\n    } = this;\n    switch ((rotation * 4 + parentRotation) / 90) {\n      case 1:\n        return [1 - y - height, x, height, width];\n      case 2:\n        return [1 - x - width, 1 - y - height, width, height];\n      case 3:\n        return [y, 1 - x - width, height, width];\n      case 4:\n        return [x, y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];\n      case 5:\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 6:\n        return [1 - x - height * (pH / pW), 1 - y, height * (pH / pW), width * (pW / pH)];\n      case 7:\n        return [y - width * (pW / pH), 1 - x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];\n      case 8:\n        return [x - width, y - height, width, height];\n      case 9:\n        return [1 - y, x - width, height, width];\n      case 10:\n        return [1 - x, 1 - y, width, height];\n      case 11:\n        return [y - height, 1 - x, height, width];\n      case 12:\n        return [x - height * (pH / pW), y, height * (pH / pW), width * (pW / pH)];\n      case 13:\n        return [1 - y - width * (pW / pH), x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];\n      case 14:\n        return [1 - x, 1 - y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];\n      case 15:\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  rotate() {\n    if (!this.parent) {\n      return;\n    }\n    this.parent.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties({\n      bbox: this.#rotateBox()\n    }, this.#drawOutlines.updateRotation((this.parentRotation - this.rotation + 360) % 360)));\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    this.#updateBbox(this.#drawOutlines.updateParentDimensions(this.parentDimensions, this.parent.scale));\n  }\n  static onScaleChangingWhenDrawing() {}\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    const div = super.render();\n    div.classList.add(\"draw\");\n    const drawDiv = document.createElement(\"div\");\n    div.append(drawDiv);\n    drawDiv.setAttribute(\"aria-hidden\", \"true\");\n    drawDiv.className = \"internal\";\n    this.setDims();\n    this._uiManager.addShouldRescale(this);\n    this.disableEditing();\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n    return div;\n  }\n  static createDrawerInstance(_x, _y, _parentWidth, _parentHeight, _rotation) {\n    unreachable(\"Not implemented\");\n  }\n  static startDrawing(parent, uiManager, _isLTR, event) {\n    const {\n      target,\n      offsetX: x,\n      offsetY: y,\n      pointerId,\n      pointerType\n    } = event;\n    if (CurrentPointers.isInitializedAndDifferentPointerType(pointerType)) {\n      return;\n    }\n    const {\n      viewport: {\n        rotation\n      }\n    } = parent;\n    const {\n      width: parentWidth,\n      height: parentHeight\n    } = target.getBoundingClientRect();\n    const ac = DrawingEditor.#currentDrawingAC = new AbortController();\n    const signal = parent.combinedSignal(ac);\n    CurrentPointers.setPointer(pointerType, pointerId);\n    window.addEventListener(\"pointerup\", e => {\n      if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) {\n        this._endDraw(e);\n      }\n    }, {\n      signal\n    });\n    window.addEventListener(\"pointercancel\", e => {\n      if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) {\n        this._currentParent.endDrawingSession();\n      }\n    }, {\n      signal\n    });\n    window.addEventListener(\"pointerdown\", e => {\n      if (!CurrentPointers.isSamePointerType(e.pointerType)) {\n        return;\n      }\n      CurrentPointers.initializeAndAddPointerId(e.pointerId);\n      if (DrawingEditor.#currentDraw.isCancellable()) {\n        DrawingEditor.#currentDraw.removeLastElement();\n        if (DrawingEditor.#currentDraw.isEmpty()) {\n          this._currentParent.endDrawingSession(true);\n        } else {\n          this._endDraw(null);\n        }\n      }\n    }, {\n      capture: true,\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    target.addEventListener(\"pointermove\", this._drawMove.bind(this), {\n      signal\n    });\n    target.addEventListener(\"touchmove\", e => {\n      if (CurrentPointers.isSameTimeStamp(e.timeStamp)) {\n        stopEvent(e);\n      }\n    }, {\n      signal\n    });\n    parent.toggleDrawing();\n    uiManager._editorUndoBar?.hide();\n    if (DrawingEditor.#currentDraw) {\n      parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.startNew(x, y, parentWidth, parentHeight, rotation));\n      return;\n    }\n    uiManager.updateUIForDefaultProperties(this);\n    DrawingEditor.#currentDraw = this.createDrawerInstance(x, y, parentWidth, parentHeight, rotation);\n    DrawingEditor.#currentDrawingOptions = this.getDefaultDrawingOptions();\n    this._currentParent = parent;\n    ({\n      id: this._currentDrawId\n    } = parent.drawLayer.draw(this._mergeSVGProperties(DrawingEditor.#currentDrawingOptions.toSVGProperties(), DrawingEditor.#currentDraw.defaultSVGProperties), true, false));\n  }\n  static _drawMove(event) {\n    CurrentPointers.isSameTimeStamp(event.timeStamp);\n    if (!DrawingEditor.#currentDraw) {\n      return;\n    }\n    const {\n      offsetX,\n      offsetY,\n      pointerId\n    } = event;\n    if (!CurrentPointers.isSamePointerId(pointerId)) {\n      return;\n    }\n    if (CurrentPointers.isUsingMultiplePointers()) {\n      this._endDraw(event);\n      return;\n    }\n    this._currentParent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.add(offsetX, offsetY));\n    CurrentPointers.setTimeStamp(event.timeStamp);\n    stopEvent(event);\n  }\n  static _cleanup(all) {\n    if (all) {\n      this._currentDrawId = -1;\n      this._currentParent = null;\n      DrawingEditor.#currentDraw = null;\n      DrawingEditor.#currentDrawingOptions = null;\n      CurrentPointers.clearTimeStamp();\n    }\n    if (DrawingEditor.#currentDrawingAC) {\n      DrawingEditor.#currentDrawingAC.abort();\n      DrawingEditor.#currentDrawingAC = null;\n      CurrentPointers.clearPointerIds();\n    }\n  }\n  static _endDraw(event) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n    parent.toggleDrawing(true);\n    this._cleanup(false);\n    if (event?.target === parent.div) {\n      parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.end(event.offsetX, event.offsetY));\n    }\n    if (this.supportMultipleDrawings) {\n      const draw = DrawingEditor.#currentDraw;\n      const drawId = this._currentDrawId;\n      const lastElement = draw.getLastElement();\n      parent.addCommands({\n        cmd: () => {\n          parent.drawLayer.updateProperties(drawId, draw.setLastElement(lastElement));\n        },\n        undo: () => {\n          parent.drawLayer.updateProperties(drawId, draw.removeLastElement());\n        },\n        mustExec: false,\n        type: AnnotationEditorParamsType.DRAW_STEP\n      });\n      return;\n    }\n    this.endDrawing(false);\n  }\n  static endDrawing(isAborted) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return null;\n    }\n    parent.toggleDrawing(true);\n    parent.cleanUndoStack(AnnotationEditorParamsType.DRAW_STEP);\n    if (!DrawingEditor.#currentDraw.isEmpty()) {\n      const {\n        pageDimensions: [pageWidth, pageHeight],\n        scale\n      } = parent;\n      const editor = parent.createAndAddNewEditor({\n        offsetX: 0,\n        offsetY: 0\n      }, false, {\n        drawId: this._currentDrawId,\n        drawOutlines: DrawingEditor.#currentDraw.getOutlines(pageWidth * scale, pageHeight * scale, scale, this._INNER_MARGIN),\n        drawingOptions: DrawingEditor.#currentDrawingOptions,\n        mustBeCommitted: !isAborted\n      });\n      this._cleanup(true);\n      return editor;\n    }\n    parent.drawLayer.remove(this._currentDrawId);\n    this._cleanup(true);\n    return null;\n  }\n  createDrawingOptions(_data) {}\n  static deserializeDraw(_pageX, _pageY, _pageWidth, _pageHeight, _innerWidth, _data) {\n    unreachable(\"Not implemented\");\n  }\n  static async deserialize(data, parent, uiManager) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight,\n        pageX,\n        pageY\n      }\n    } = parent.viewport;\n    const drawOutlines = this.deserializeDraw(pageX, pageY, pageWidth, pageHeight, this._INNER_MARGIN, data);\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.createDrawingOptions(data);\n    editor.#createDrawOutlines({\n      drawOutlines\n    });\n    editor.#addToDrawLayer();\n    editor.onScaleChanging();\n    editor.rotate();\n    return editor;\n  }\n  serializeDraw(isForCopying) {\n    const [pageX, pageY] = this.pageTranslation;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    return this.#drawOutlines.serialize([pageX, pageY, pageWidth, pageHeight], isForCopying);\n  }\n  renderAnnotationElement(annotation) {\n    annotation.updateEdited({\n      rect: this.getPDFRect()\n    });\n    return null;\n  }\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\n;// ./src/display/editor/drawers/inkdraw.js\n\n\n\n\n\n\n\nclass InkDrawOutliner {\n  #last = new Float64Array(6);\n  #line;\n  #lines;\n  #rotation;\n  #thickness;\n  #points;\n  #lastSVGPath = \"\";\n  #lastIndex = 0;\n  #outlines = new InkDrawOutline();\n  #parentWidth;\n  #parentHeight;\n  constructor(x, y, parentWidth, parentHeight, rotation, thickness) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n    [x, y] = this.#normalizePoint(x, y);\n    const line = this.#line = [NaN, NaN, NaN, NaN, x, y];\n    this.#points = [x, y];\n    this.#lines = [{\n      line,\n      points: this.#points\n    }];\n    this.#last.set(line, 0);\n  }\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      this.#thickness = value;\n    }\n  }\n  #normalizePoint(x, y) {\n    return Outline._normalizePoint(x, y, this.#parentWidth, this.#parentHeight, this.#rotation);\n  }\n  isEmpty() {\n    return !this.#lines?.length;\n  }\n  isCancellable() {\n    return this.#points.length <= 10;\n  }\n  add(x, y) {\n    [x, y] = this.#normalizePoint(x, y);\n    const [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(this.#parentWidth * diffX, this.#parentHeight * diffY);\n    if (d <= 2) {\n      return null;\n    }\n    this.#points.push(x, y);\n    if (isNaN(x1)) {\n      this.#last.set([x2, y2, x, y], 2);\n      this.#line.push(NaN, NaN, NaN, NaN, x, y);\n      return {\n        path: {\n          d: this.toSVGPath()\n        }\n      };\n    }\n    if (isNaN(this.#last[0])) {\n      this.#line.splice(6, 6);\n    }\n    this.#last.set([x1, y1, x2, y2, x, y], 0);\n    this.#line.push(...Outline.createBezierPoints(x1, y1, x2, y2, x, y));\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  end(x, y) {\n    const change = this.add(x, y);\n    if (change) {\n      return change;\n    }\n    if (this.#points.length === 2) {\n      return {\n        path: {\n          d: this.toSVGPath()\n        }\n      };\n    }\n    return null;\n  }\n  startNew(x, y, parentWidth, parentHeight, rotation) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n    [x, y] = this.#normalizePoint(x, y);\n    const line = this.#line = [NaN, NaN, NaN, NaN, x, y];\n    this.#points = [x, y];\n    const last = this.#lines.at(-1);\n    if (last) {\n      last.line = new Float32Array(last.line);\n      last.points = new Float32Array(last.points);\n    }\n    this.#lines.push({\n      line,\n      points: this.#points\n    });\n    this.#last.set(line, 0);\n    this.#lastIndex = 0;\n    this.toSVGPath();\n    return null;\n  }\n  getLastElement() {\n    return this.#lines.at(-1);\n  }\n  setLastElement(element) {\n    if (!this.#lines) {\n      return this.#outlines.setLastElement(element);\n    }\n    this.#lines.push(element);\n    this.#line = element.line;\n    this.#points = element.points;\n    this.#lastIndex = 0;\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  removeLastElement() {\n    if (!this.#lines) {\n      return this.#outlines.removeLastElement();\n    }\n    this.#lines.pop();\n    this.#lastSVGPath = \"\";\n    for (let i = 0, ii = this.#lines.length; i < ii; i++) {\n      const {\n        line,\n        points\n      } = this.#lines[i];\n      this.#line = line;\n      this.#points = points;\n      this.#lastIndex = 0;\n      this.toSVGPath();\n    }\n    return {\n      path: {\n        d: this.#lastSVGPath\n      }\n    };\n  }\n  toSVGPath() {\n    const firstX = Outline.svgRound(this.#line[4]);\n    const firstY = Outline.svgRound(this.#line[5]);\n    if (this.#points.length === 2) {\n      this.#lastSVGPath = `${this.#lastSVGPath} M ${firstX} ${firstY} Z`;\n      return this.#lastSVGPath;\n    }\n    if (this.#points.length <= 6) {\n      const i = this.#lastSVGPath.lastIndexOf(\"M\");\n      this.#lastSVGPath = `${this.#lastSVGPath.slice(0, i)} M ${firstX} ${firstY}`;\n      this.#lastIndex = 6;\n    }\n    if (this.#points.length === 4) {\n      const secondX = Outline.svgRound(this.#line[10]);\n      const secondY = Outline.svgRound(this.#line[11]);\n      this.#lastSVGPath = `${this.#lastSVGPath} L ${secondX} ${secondY}`;\n      this.#lastIndex = 12;\n      return this.#lastSVGPath;\n    }\n    const buffer = [];\n    if (this.#lastIndex === 0) {\n      buffer.push(`M ${firstX} ${firstY}`);\n      this.#lastIndex = 6;\n    }\n    for (let i = this.#lastIndex, ii = this.#line.length; i < ii; i += 6) {\n      const [c1x, c1y, c2x, c2y, x, y] = this.#line.slice(i, i + 6).map(Outline.svgRound);\n      buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n    }\n    this.#lastSVGPath += buffer.join(\" \");\n    this.#lastIndex = this.#line.length;\n    return this.#lastSVGPath;\n  }\n  getOutlines(parentWidth, parentHeight, scale, innerMargin) {\n    const last = this.#lines.at(-1);\n    last.line = new Float32Array(last.line);\n    last.points = new Float32Array(last.points);\n    this.#outlines.build(this.#lines, parentWidth, parentHeight, scale, this.#rotation, this.#thickness, innerMargin);\n    this.#last = null;\n    this.#line = null;\n    this.#lines = null;\n    this.#lastSVGPath = null;\n    return this.#outlines;\n  }\n  get defaultSVGProperties() {\n    return {\n      root: {\n        viewBox: \"0 0 10000 10000\"\n      },\n      rootClass: {\n        draw: true\n      },\n      bbox: [0, 0, 1, 1]\n    };\n  }\n}\nclass InkDrawOutline extends Outline {\n  #bbox;\n  #currentRotation = 0;\n  #innerMargin;\n  #lines;\n  #parentWidth;\n  #parentHeight;\n  #parentScale;\n  #rotation;\n  #thickness;\n  build(lines, parentWidth, parentHeight, parentScale, rotation, thickness, innerMargin) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#parentScale = parentScale;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n    this.#innerMargin = innerMargin ?? 0;\n    this.#lines = lines;\n    this.#computeBbox();\n  }\n  get thickness() {\n    return this.#thickness;\n  }\n  setLastElement(element) {\n    this.#lines.push(element);\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  removeLastElement() {\n    this.#lines.pop();\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  toSVGPath() {\n    const buffer = [];\n    for (const {\n      line\n    } of this.#lines) {\n      buffer.push(`M${Outline.svgRound(line[4])} ${Outline.svgRound(line[5])}`);\n      if (line.length === 6) {\n        buffer.push(\"Z\");\n        continue;\n      }\n      if (line.length === 12 && isNaN(line[6])) {\n        buffer.push(`L${Outline.svgRound(line[10])} ${Outline.svgRound(line[11])}`);\n        continue;\n      }\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6).map(Outline.svgRound);\n        buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n      }\n    }\n    return buffer.join(\"\");\n  }\n  serialize([pageX, pageY, pageWidth, pageHeight], isForCopying) {\n    const serializedLines = [];\n    const serializedPoints = [];\n    const [x, y, width, height] = this.#getBBoxWithNoMargin();\n    let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn;\n    switch (this.#rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = pageX;\n        ty = pageY + pageHeight;\n        sx = pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + x * pageWidth;\n        y1 = pageY + (1 - y - height) * pageHeight;\n        x2 = pageX + (x + width) * pageWidth;\n        y2 = pageY + (1 - y) * pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX;\n        ty = pageY;\n        sx = pageWidth;\n        sy = pageHeight;\n        x1 = pageX + y * pageWidth;\n        y1 = pageY + x * pageHeight;\n        x2 = pageX + (y + height) * pageWidth;\n        y2 = pageY + (x + width) * pageHeight;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX + pageWidth;\n        ty = pageY;\n        sx = -pageWidth;\n        sy = pageHeight;\n        x1 = pageX + (1 - x - width) * pageWidth;\n        y1 = pageY + y * pageHeight;\n        x2 = pageX + (1 - x) * pageWidth;\n        y2 = pageY + (y + height) * pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX + pageWidth;\n        ty = pageY + pageHeight;\n        sx = -pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + (1 - y - height) * pageWidth;\n        y1 = pageY + (1 - x - width) * pageHeight;\n        x2 = pageX + (1 - y) * pageWidth;\n        y2 = pageY + (1 - x) * pageHeight;\n        break;\n    }\n    for (const {\n      line,\n      points\n    } of this.#lines) {\n      serializedLines.push(rescaleFn(line, tx, ty, sx, sy, isForCopying ? new Array(line.length) : null));\n      serializedPoints.push(rescaleFn(points, tx, ty, sx, sy, isForCopying ? new Array(points.length) : null));\n    }\n    return {\n      lines: serializedLines,\n      points: serializedPoints,\n      rect: [x1, y1, x2, y2]\n    };\n  }\n  static deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, {\n    paths: {\n      lines,\n      points\n    },\n    rotation,\n    thickness\n  }) {\n    const newLines = [];\n    let tx, ty, sx, sy, rescaleFn;\n    switch (rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = -pageX / pageWidth;\n        ty = pageY / pageHeight + 1;\n        sx = 1 / pageWidth;\n        sy = -1 / pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = -pageY / pageHeight;\n        ty = -pageX / pageWidth;\n        sx = 1 / pageHeight;\n        sy = 1 / pageWidth;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX / pageWidth + 1;\n        ty = -pageY / pageHeight;\n        sx = -1 / pageWidth;\n        sy = 1 / pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageY / pageHeight + 1;\n        ty = pageX / pageWidth + 1;\n        sx = -1 / pageHeight;\n        sy = -1 / pageWidth;\n        break;\n    }\n    if (!lines) {\n      lines = [];\n      for (const point of points) {\n        const len = point.length;\n        if (len === 2) {\n          lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1]]));\n          continue;\n        }\n        if (len === 4) {\n          lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1], NaN, NaN, NaN, NaN, point[2], point[3]]));\n          continue;\n        }\n        const line = new Float32Array(3 * (len - 2));\n        lines.push(line);\n        let [x1, y1, x2, y2] = point.subarray(0, 4);\n        line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n        for (let i = 4; i < len; i += 2) {\n          const x = point[i];\n          const y = point[i + 1];\n          line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);\n          [x1, y1, x2, y2] = [x2, y2, x, y];\n        }\n      }\n    }\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      newLines.push({\n        line: rescaleFn(lines[i].map(x => x ?? NaN), tx, ty, sx, sy),\n        points: rescaleFn(points[i].map(x => x ?? NaN), tx, ty, sx, sy)\n      });\n    }\n    const outlines = new this.prototype.constructor();\n    outlines.build(newLines, pageWidth, pageHeight, 1, rotation, thickness, innerMargin);\n    return outlines;\n  }\n  #getMarginComponents(thickness = this.#thickness) {\n    const margin = this.#innerMargin + thickness / 2 * this.#parentScale;\n    return this.#rotation % 180 === 0 ? [margin / this.#parentWidth, margin / this.#parentHeight] : [margin / this.#parentHeight, margin / this.#parentWidth];\n  }\n  #getBBoxWithNoMargin() {\n    const [x, y, width, height] = this.#bbox;\n    const [marginX, marginY] = this.#getMarginComponents(0);\n    return [x + marginX, y + marginY, width - 2 * marginX, height - 2 * marginY];\n  }\n  #computeBbox() {\n    const bbox = this.#bbox = F32_BBOX_INIT.slice();\n    for (const {\n      line\n    } of this.#lines) {\n      if (line.length <= 12) {\n        for (let i = 4, ii = line.length; i < ii; i += 6) {\n          Util.pointBoundingBox(line[i], line[i + 1], bbox);\n        }\n        continue;\n      }\n      let lastX = line[4],\n        lastY = line[5];\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6);\n        Util.bezierBoundingBox(lastX, lastY, c1x, c1y, c2x, c2y, x, y, bbox);\n        lastX = x;\n        lastY = y;\n      }\n    }\n    const [marginX, marginY] = this.#getMarginComponents();\n    bbox[0] = MathClamp(bbox[0] - marginX, 0, 1);\n    bbox[1] = MathClamp(bbox[1] - marginY, 0, 1);\n    bbox[2] = MathClamp(bbox[2] + marginX, 0, 1);\n    bbox[3] = MathClamp(bbox[3] + marginY, 0, 1);\n    bbox[2] -= bbox[0];\n    bbox[3] -= bbox[1];\n  }\n  get box() {\n    return this.#bbox;\n  }\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      return this.#updateThickness(value);\n    }\n    return null;\n  }\n  #updateThickness(thickness) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#thickness = thickness;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const [diffMarginX, diffMarginY] = [newMarginX - oldMarginX, newMarginY - oldMarginY];\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n    return bbox;\n  }\n  updateParentDimensions([width, height], scale) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#parentWidth = width;\n    this.#parentHeight = height;\n    this.#parentScale = scale;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const diffMarginX = newMarginX - oldMarginX;\n    const diffMarginY = newMarginY - oldMarginY;\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n    return bbox;\n  }\n  updateRotation(rotation) {\n    this.#currentRotation = rotation;\n    return {\n      path: {\n        transform: this.rotationTransform\n      }\n    };\n  }\n  get viewBox() {\n    return this.#bbox.map(Outline.svgRound).join(\" \");\n  }\n  get defaultProperties() {\n    const [x, y] = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`\n      }\n    };\n  }\n  get rotationTransform() {\n    const [,, width, height] = this.#bbox;\n    let a = 0,\n      b = 0,\n      c = 0,\n      d = 0,\n      e = 0,\n      f = 0;\n    switch (this.#currentRotation) {\n      case 90:\n        b = height / width;\n        c = -width / height;\n        e = width;\n        break;\n      case 180:\n        a = -1;\n        d = -1;\n        e = width;\n        f = height;\n        break;\n      case 270:\n        b = -height / width;\n        c = width / height;\n        f = height;\n        break;\n      default:\n        return \"\";\n    }\n    return `matrix(${a} ${b} ${c} ${d} ${Outline.svgRound(e)} ${Outline.svgRound(f)})`;\n  }\n  getPathResizingSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const [x, y, width, height] = this.#bbox;\n    if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      return {\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: `${this.rotationTransform} translate(${tx} ${ty})`\n        }\n      };\n    }\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const s2x = width / newWidth;\n    const s2y = height / newHeight;\n    return {\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`,\n        transform: `${this.rotationTransform} scale(${s2x} ${s2y}) ` + `translate(${Outline.svgRound(marginX)} ${Outline.svgRound(marginY)}) scale(${s1x} ${s1y}) ` + `translate(${Outline.svgRound(-marginX)} ${Outline.svgRound(-marginY)})`\n      }\n    };\n  }\n  getPathResizedSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const bbox = this.#bbox;\n    const [x, y, width, height] = bbox;\n    bbox[0] = newX;\n    bbox[1] = newY;\n    bbox[2] = newWidth;\n    bbox[3] = newHeight;\n    if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n      return {\n        root: {\n          viewBox: this.viewBox\n        },\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: this.rotationTransform || null,\n          d: this.toSVGPath()\n        }\n      };\n    }\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const tx = -s1x * (x + marginX) + newX + marginX;\n    const ty = -s1y * (y + marginY) + newY + marginY;\n    if (s1x !== 1 || s1y !== 1 || tx !== 0 || ty !== 0) {\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._rescale(line, tx, ty, s1x, s1y, line);\n        Outline._rescale(points, tx, ty, s1x, s1y, points);\n      }\n    }\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n        transform: this.rotationTransform || null,\n        d: this.toSVGPath()\n      }\n    };\n  }\n  getPathTranslatedSVGProperties([newX, newY], parentDimensions) {\n    const [newParentWidth, newParentHeight] = parentDimensions;\n    const bbox = this.#bbox;\n    const tx = newX - bbox[0];\n    const ty = newY - bbox[1];\n    if (this.#parentWidth === newParentWidth && this.#parentHeight === newParentHeight) {\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n    } else {\n      const sx = this.#parentWidth / newParentWidth;\n      const sy = this.#parentHeight / newParentHeight;\n      this.#parentWidth = newParentWidth;\n      this.#parentHeight = newParentHeight;\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._rescale(line, tx, ty, sx, sy, line);\n        Outline._rescale(points, tx, ty, sx, sy, points);\n      }\n      bbox[2] *= sx;\n      bbox[3] *= sy;\n    }\n    bbox[0] = newX;\n    bbox[1] = newY;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`\n      }\n    };\n  }\n  get defaultSVGProperties() {\n    const bbox = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      rootClass: {\n        draw: true\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(bbox[0])} ${Outline.svgRound(bbox[1])}`,\n        transform: this.rotationTransform || null\n      },\n      bbox\n    };\n  }\n}\n\n;// ./src/display/editor/ink.js\n\n\n\n\n\n\n\n\n\n\nclass InkDrawingOptions extends DrawingOptions {\n  constructor(viewerParameters) {\n    super();\n    this._viewParameters = viewerParameters;\n    super.updateProperties({\n      fill: \"none\",\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-opacity\": 1,\n      \"stroke-width\": 1,\n      \"stroke-linecap\": \"round\",\n      \"stroke-linejoin\": \"round\",\n      \"stroke-miterlimit\": 10\n    });\n  }\n  updateSVGProperty(name, value) {\n    if (name === \"stroke-width\") {\n      value ??= this[\"stroke-width\"];\n      value *= this._viewParameters.realScale;\n    }\n    super.updateSVGProperty(name, value);\n  }\n  clone() {\n    const clone = new InkDrawingOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass InkEditor extends DrawingEditor {\n  static _type = \"ink\";\n  static _editorType = AnnotationEditorType.INK;\n  static _defaultDrawingOptions = null;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"inkEditor\"\n    });\n    this._willKeepAspectRatio = true;\n    this.defaultL10nId = \"pdfjs-editor-ink-editor\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    this._defaultDrawingOptions = new InkDrawingOptions(uiManager.viewParameters);\n  }\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n  static get supportMultipleDrawings() {\n    return true;\n  }\n  static get typesMap() {\n    return shadow(this, \"typesMap\", new Map([[AnnotationEditorParamsType.INK_THICKNESS, \"stroke-width\"], [AnnotationEditorParamsType.INK_COLOR, \"stroke\"], [AnnotationEditorParamsType.INK_OPACITY, \"stroke-opacity\"]]));\n  }\n  static createDrawerInstance(x, y, parentWidth, parentHeight, rotation) {\n    return new InkDrawOutliner(x, y, parentWidth, parentHeight, rotation, this._defaultDrawingOptions[\"stroke-width\"]);\n  }\n  static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {\n    return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          borderStyle: {\n            rawWidth: thickness\n          },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.INK,\n        color: Array.from(color),\n        thickness,\n        opacity,\n        paths: {\n          points: inkLists\n        },\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    return editor;\n  }\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n  get colorType() {\n    return AnnotationEditorParamsType.INK_COLOR;\n  }\n  get colorAndOpacityType() {\n    return AnnotationEditorParamsType.INK_COLOR_AND_OPACITY;\n  }\n  get opacityType() {\n    return AnnotationEditorParamsType.INK_OPACITY;\n  }\n  updateParams(type, value) {\n    if (type === AnnotationEditorParamsType.INK_COLOR_AND_OPACITY) {\n      this._updateColorAndOpacity(value.color, value.opacity);\n      return;\n    }\n    super.updateParams(type, value);\n  }\n  static updateDefaultParams(type, value) {\n    if (type === AnnotationEditorParamsType.INK_COLOR_AND_OPACITY) {\n      super.updateDefaultParams(AnnotationEditorParamsType.INK_COLOR, value.color);\n      super.updateDefaultParams(AnnotationEditorParamsType.INK_OPACITY, value.opacity);\n      return;\n    }\n    super.updateDefaultParams(type, value);\n  }\n  get color() {\n    return this._drawingOptions.stroke;\n  }\n  get opacity() {\n    return this._drawingOptions[\"stroke-opacity\"];\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    super.onScaleChanging();\n    const {\n      _drawId,\n      _drawingOptions,\n      parent\n    } = this;\n    _drawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(_drawId, _drawingOptions.toSVGProperties());\n  }\n  static onScaleChangingWhenDrawing() {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n    super.onScaleChangingWhenDrawing();\n    this._defaultDrawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());\n  }\n  createDrawingOptions({\n    color,\n    thickness,\n    opacity\n  }) {\n    this._drawingOptions = InkEditor.getDefaultDrawingOptions({\n      stroke: Util.makeHexColor(...color),\n      \"stroke-width\": thickness,\n      \"stroke-opacity\": opacity\n    });\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const {\n      lines,\n      points\n    } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: {\n        stroke,\n        \"stroke-opacity\": opacity,\n        \"stroke-width\": thickness\n      }\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color: AnnotationEditor._colorManager.convert(stroke),\n      opacity,\n      thickness,\n      paths: {\n        lines,\n        points\n      }\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.isCopy = true;\n      return serialized;\n    }\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      color,\n      thickness,\n      opacity,\n      pageIndex\n    } = this._initialData;\n    return this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized || serialized.color.some((c, i) => c !== color[i]) || serialized.thickness !== thickness || serialized.opacity !== opacity || serialized.pageIndex !== pageIndex;\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    const {\n      points,\n      rect\n    } = this.serializeDraw(false);\n    annotation.updateEdited({\n      rect,\n      thickness: this._drawingOptions[\"stroke-width\"],\n      points,\n      popup: this.comment\n    });\n    return null;\n  }\n}\n\n;// ./src/display/editor/drawers/contour.js\n\nclass ContourDrawOutline extends InkDrawOutline {\n  toSVGPath() {\n    let path = super.toSVGPath();\n    if (!path.endsWith(\"Z\")) {\n      path += \"Z\";\n    }\n    return path;\n  }\n}\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.uint8-array.from-base64.js\nvar es_uint8_array_from_base64 = __webpack_require__(5213);\n;// ./src/display/editor/drawers/signaturedraw.js\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst BASE_HEADER_LENGTH = 8;\nconst POINTS_PROPERTIES_NUMBER = 3;\nclass SignatureExtractor {\n  static #PARAMETERS = {\n    maxDim: 512,\n    sigmaSFactor: 0.02,\n    sigmaR: 25,\n    kernelSize: 16\n  };\n  static #neighborIndexToId(i0, j0, i, j) {\n    i -= i0;\n    j -= j0;\n    if (i === 0) {\n      return j > 0 ? 0 : 4;\n    }\n    if (i === 1) {\n      return j + 6;\n    }\n    return 2 - j;\n  }\n  static #neighborIdToIndex = new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1]);\n  static #clockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (-k + id - offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n  static #counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (k + id + offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n  static #findContours(buf, width, height, threshold) {\n    const N = buf.length;\n    const types = new Int32Array(N);\n    for (let i = 0; i < N; i++) {\n      types[i] = buf[i] <= threshold ? 1 : 0;\n    }\n    for (let i = 1; i < height - 1; i++) {\n      types[i * width] = types[i * width + width - 1] = 0;\n    }\n    for (let i = 0; i < width; i++) {\n      types[i] = types[width * height - 1 - i] = 0;\n    }\n    let nbd = 1;\n    let lnbd;\n    const contours = [];\n    for (let i = 1; i < height - 1; i++) {\n      lnbd = 1;\n      for (let j = 1; j < width - 1; j++) {\n        const ij = i * width + j;\n        const pix = types[ij];\n        if (pix === 0) {\n          continue;\n        }\n        let i2 = i;\n        let j2 = j;\n        if (pix === 1 && types[ij - 1] === 0) {\n          nbd += 1;\n          j2 -= 1;\n        } else if (pix >= 1 && types[ij + 1] === 0) {\n          nbd += 1;\n          j2 += 1;\n          if (pix > 1) {\n            lnbd = pix;\n          }\n        } else {\n          if (pix !== 1) {\n            lnbd = Math.abs(pix);\n          }\n          continue;\n        }\n        const points = [j, i];\n        const isHole = j2 === j + 1;\n        const contour = {\n          isHole,\n          points,\n          id: nbd,\n          parent: 0\n        };\n        contours.push(contour);\n        let contour0;\n        for (const c of contours) {\n          if (c.id === lnbd) {\n            contour0 = c;\n            break;\n          }\n        }\n        if (!contour0) {\n          contour.parent = isHole ? lnbd : 0;\n        } else if (contour0.isHole) {\n          contour.parent = isHole ? contour0.parent : lnbd;\n        } else {\n          contour.parent = isHole ? lnbd : contour0.parent;\n        }\n        const k = this.#clockwiseNonZero(types, width, i, j, i2, j2, 0);\n        if (k === -1) {\n          types[ij] = -nbd;\n          if (types[ij] !== 1) {\n            lnbd = Math.abs(types[ij]);\n          }\n          continue;\n        }\n        let shiftI = this.#neighborIdToIndex[2 * k];\n        let shiftJ = this.#neighborIdToIndex[2 * k + 1];\n        const i1 = i + shiftI;\n        const j1 = j + shiftJ;\n        i2 = i1;\n        j2 = j1;\n        let i3 = i;\n        let j3 = j;\n        while (true) {\n          const kk = this.#counterClockwiseNonZero(types, width, i3, j3, i2, j2, 1);\n          shiftI = this.#neighborIdToIndex[2 * kk];\n          shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n          const i4 = i3 + shiftI;\n          const j4 = j3 + shiftJ;\n          points.push(j4, i4);\n          const ij3 = i3 * width + j3;\n          if (types[ij3 + 1] === 0) {\n            types[ij3] = -nbd;\n          } else if (types[ij3] === 1) {\n            types[ij3] = nbd;\n          }\n          if (i4 === i && j4 === j && i3 === i1 && j3 === j1) {\n            if (types[ij] !== 1) {\n              lnbd = Math.abs(types[ij]);\n            }\n            break;\n          } else {\n            i2 = i3;\n            j2 = j3;\n            i3 = i4;\n            j3 = j4;\n          }\n        }\n      }\n    }\n    return contours;\n  }\n  static #douglasPeuckerHelper(points, start, end, output) {\n    if (end - start <= 4) {\n      for (let i = start; i < end - 2; i += 2) {\n        output.push(points[i], points[i + 1]);\n      }\n      return;\n    }\n    const ax = points[start];\n    const ay = points[start + 1];\n    const abx = points[end - 4] - ax;\n    const aby = points[end - 3] - ay;\n    const dist = Math.hypot(abx, aby);\n    const nabx = abx / dist;\n    const naby = aby / dist;\n    const aa = nabx * ay - naby * ax;\n    const m = aby / abx;\n    const invS = 1 / dist;\n    const phi = Math.atan(m);\n    const cosPhi = Math.cos(phi);\n    const sinPhi = Math.sin(phi);\n    const tmax = invS * (Math.abs(cosPhi) + Math.abs(sinPhi));\n    const poly = invS * (1 - tmax + tmax ** 2);\n    const partialPhi = Math.max(Math.atan(Math.abs(sinPhi + cosPhi) * poly), Math.atan(Math.abs(sinPhi - cosPhi) * poly));\n    let dmax = 0;\n    let index = start;\n    for (let i = start + 2; i < end - 2; i += 2) {\n      const d = Math.abs(aa - nabx * points[i + 1] + naby * points[i]);\n      if (d > dmax) {\n        index = i;\n        dmax = d;\n      }\n    }\n    if (dmax > (dist * partialPhi) ** 2) {\n      this.#douglasPeuckerHelper(points, start, index + 2, output);\n      this.#douglasPeuckerHelper(points, index, end, output);\n    } else {\n      output.push(ax, ay);\n    }\n  }\n  static #douglasPeucker(points) {\n    const output = [];\n    const len = points.length;\n    this.#douglasPeuckerHelper(points, 0, len, output);\n    output.push(points[len - 2], points[len - 1]);\n    return output.length <= 4 ? null : output;\n  }\n  static #bilateralFilter(buf, width, height, sigmaS, sigmaR, kernelSize) {\n    const kernel = new Float32Array(kernelSize ** 2);\n    const sigmaS2 = -2 * sigmaS ** 2;\n    const halfSize = kernelSize >> 1;\n    for (let i = 0; i < kernelSize; i++) {\n      const x = (i - halfSize) ** 2;\n      for (let j = 0; j < kernelSize; j++) {\n        kernel[i * kernelSize + j] = Math.exp((x + (j - halfSize) ** 2) / sigmaS2);\n      }\n    }\n    const rangeValues = new Float32Array(256);\n    const sigmaR2 = -2 * sigmaR ** 2;\n    for (let i = 0; i < 256; i++) {\n      rangeValues[i] = Math.exp(i ** 2 / sigmaR2);\n    }\n    const N = buf.length;\n    const out = new Uint8Array(N);\n    const histogram = new Uint32Array(256);\n    for (let i = 0; i < height; i++) {\n      for (let j = 0; j < width; j++) {\n        const ij = i * width + j;\n        const center = buf[ij];\n        let sum = 0;\n        let norm = 0;\n        for (let k = 0; k < kernelSize; k++) {\n          const y = i + k - halfSize;\n          if (y < 0 || y >= height) {\n            continue;\n          }\n          for (let l = 0; l < kernelSize; l++) {\n            const x = j + l - halfSize;\n            if (x < 0 || x >= width) {\n              continue;\n            }\n            const neighbour = buf[y * width + x];\n            const w = kernel[k * kernelSize + l] * rangeValues[Math.abs(neighbour - center)];\n            sum += neighbour * w;\n            norm += w;\n          }\n        }\n        const pix = out[ij] = Math.round(sum / norm);\n        histogram[pix]++;\n      }\n    }\n    return [out, histogram];\n  }\n  static #getHistogram(buf) {\n    const histogram = new Uint32Array(256);\n    for (const g of buf) {\n      histogram[g]++;\n    }\n    return histogram;\n  }\n  static #toUint8(buf) {\n    const N = buf.length;\n    const out = new Uint8ClampedArray(N >> 2);\n    let max = -Infinity;\n    let min = Infinity;\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      const pix = out[i] = buf[i << 2];\n      max = Math.max(max, pix);\n      min = Math.min(min, pix);\n    }\n    const ratio = 255 / (max - min);\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      out[i] = (out[i] - min) * ratio;\n    }\n    return out;\n  }\n  static #guessThreshold(histogram) {\n    let i;\n    let M = -Infinity;\n    let L = -Infinity;\n    const min = histogram.findIndex(v => v !== 0);\n    let pos = min;\n    let spos = min;\n    for (i = min; i < 256; i++) {\n      const v = histogram[i];\n      if (v > M) {\n        if (i - pos > L) {\n          L = i - pos;\n          spos = i - 1;\n        }\n        M = v;\n        pos = i;\n      }\n    }\n    for (i = spos - 1; i >= 0; i--) {\n      if (histogram[i] > histogram[i + 1]) {\n        break;\n      }\n    }\n    return i;\n  }\n  static #getGrayPixels(bitmap) {\n    const originalBitmap = bitmap;\n    const {\n      width,\n      height\n    } = bitmap;\n    const {\n      maxDim\n    } = this.#PARAMETERS;\n    let newWidth = width;\n    let newHeight = height;\n    if (width > maxDim || height > maxDim) {\n      let prevWidth = width;\n      let prevHeight = height;\n      let steps = Math.log2(Math.max(width, height) / maxDim);\n      const isteps = Math.floor(steps);\n      steps = steps === isteps ? isteps - 1 : isteps;\n      for (let i = 0; i < steps; i++) {\n        newWidth = Math.ceil(prevWidth / 2);\n        newHeight = Math.ceil(prevHeight / 2);\n        const offscreen = new OffscreenCanvas(newWidth, newHeight);\n        const ctx = offscreen.getContext(\"2d\");\n        ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n        prevWidth = newWidth;\n        prevHeight = newHeight;\n        if (bitmap !== originalBitmap) {\n          bitmap.close();\n        }\n        bitmap = offscreen.transferToImageBitmap();\n      }\n      const ratio = Math.min(maxDim / newWidth, maxDim / newHeight);\n      newWidth = Math.round(newWidth * ratio);\n      newHeight = Math.round(newHeight * ratio);\n    }\n    const offscreen = new OffscreenCanvas(newWidth, newHeight);\n    const ctx = offscreen.getContext(\"2d\", {\n      willReadFrequently: true\n    });\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, newWidth, newHeight);\n    ctx.filter = \"grayscale(1)\";\n    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, newWidth, newHeight);\n    const grayImage = ctx.getImageData(0, 0, newWidth, newHeight).data;\n    const uint8Buf = this.#toUint8(grayImage);\n    return [uint8Buf, newWidth, newHeight];\n  }\n  static extractContoursFromText(text, {\n    fontFamily,\n    fontStyle,\n    fontWeight\n  }, pageWidth, pageHeight, rotation, innerMargin) {\n    let canvas = new OffscreenCanvas(1, 1);\n    let ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const fontSize = 200;\n    const font = ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;\n    const {\n      actualBoundingBoxLeft,\n      actualBoundingBoxRight,\n      actualBoundingBoxAscent,\n      actualBoundingBoxDescent,\n      fontBoundingBoxAscent,\n      fontBoundingBoxDescent,\n      width\n    } = ctx.measureText(text);\n    const SCALE = 1.5;\n    const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE);\n    const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE);\n    canvas = new OffscreenCanvas(canvasWidth, canvasHeight);\n    ctx = canvas.getContext(\"2d\", {\n      alpha: true,\n      willReadFrequently: true\n    });\n    ctx.font = font;\n    ctx.filter = \"grayscale(1)\";\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n    ctx.fillStyle = \"black\";\n    ctx.fillText(text, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2);\n    const uint8Buf = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data);\n    const histogram = this.#getHistogram(uint8Buf);\n    const threshold = this.#guessThreshold(histogram);\n    const contourList = this.#findContours(uint8Buf, canvasWidth, canvasHeight, threshold);\n    return this.processDrawnLines({\n      lines: {\n        curves: contourList,\n        width: canvasWidth,\n        height: canvasHeight\n      },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true\n    });\n  }\n  static process(bitmap, pageWidth, pageHeight, rotation, innerMargin) {\n    const [uint8Buf, width, height] = this.#getGrayPixels(bitmap);\n    const [buffer, histogram] = this.#bilateralFilter(uint8Buf, width, height, Math.hypot(width, height) * this.#PARAMETERS.sigmaSFactor, this.#PARAMETERS.sigmaR, this.#PARAMETERS.kernelSize);\n    const threshold = this.#guessThreshold(histogram);\n    const contourList = this.#findContours(buffer, width, height, threshold);\n    return this.processDrawnLines({\n      lines: {\n        curves: contourList,\n        width,\n        height\n      },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true\n    });\n  }\n  static processDrawnLines({\n    lines,\n    pageWidth,\n    pageHeight,\n    rotation,\n    innerMargin,\n    mustSmooth,\n    areContours\n  }) {\n    if (rotation % 180 !== 0) {\n      [pageWidth, pageHeight] = [pageHeight, pageWidth];\n    }\n    const {\n      curves,\n      width,\n      height\n    } = lines;\n    const thickness = lines.thickness ?? 0;\n    const linesAndPoints = [];\n    const ratio = Math.min(pageWidth / width, pageHeight / height);\n    const xScale = ratio / pageWidth;\n    const yScale = ratio / pageHeight;\n    const newCurves = [];\n    for (const {\n      points\n    } of curves) {\n      const reducedPoints = mustSmooth ? this.#douglasPeucker(points) : points;\n      if (!reducedPoints) {\n        continue;\n      }\n      newCurves.push(reducedPoints);\n      const len = reducedPoints.length;\n      const newPoints = new Float32Array(len);\n      const line = new Float32Array(3 * (len === 2 ? 2 : len - 2));\n      linesAndPoints.push({\n        line,\n        points: newPoints\n      });\n      if (len === 2) {\n        newPoints[0] = reducedPoints[0] * xScale;\n        newPoints[1] = reducedPoints[1] * yScale;\n        line.set([NaN, NaN, NaN, NaN, newPoints[0], newPoints[1]], 0);\n        continue;\n      }\n      let [x1, y1, x2, y2] = reducedPoints;\n      x1 *= xScale;\n      y1 *= yScale;\n      x2 *= xScale;\n      y2 *= yScale;\n      newPoints.set([x1, y1, x2, y2], 0);\n      line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n      for (let i = 4; i < len; i += 2) {\n        const x = newPoints[i] = reducedPoints[i] * xScale;\n        const y = newPoints[i + 1] = reducedPoints[i + 1] * yScale;\n        line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);\n        [x1, y1, x2, y2] = [x2, y2, x, y];\n      }\n    }\n    if (linesAndPoints.length === 0) {\n      return null;\n    }\n    const outline = areContours ? new ContourDrawOutline() : new InkDrawOutline();\n    outline.build(linesAndPoints, pageWidth, pageHeight, 1, rotation, areContours ? 0 : thickness, innerMargin);\n    return {\n      outline,\n      newCurves,\n      areContours,\n      thickness,\n      width,\n      height\n    };\n  }\n  static async compressSignature({\n    outlines,\n    areContours,\n    thickness,\n    width,\n    height\n  }) {\n    let minDiff = Infinity;\n    let maxDiff = -Infinity;\n    let outlinesLength = 0;\n    for (const points of outlines) {\n      outlinesLength += points.length;\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        const dx = points[i] - points[i - 2];\n        minDiff = Math.min(minDiff, dx);\n        maxDiff = Math.max(maxDiff, dx);\n      }\n    }\n    let bufferType;\n    if (minDiff >= -128 && maxDiff <= 127) {\n      bufferType = Int8Array;\n    } else if (minDiff >= -32768 && maxDiff <= 32767) {\n      bufferType = Int16Array;\n    } else {\n      bufferType = Int32Array;\n    }\n    const len = outlines.length;\n    const headerLength = BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * len;\n    const header = new Uint32Array(headerLength);\n    let offset = 0;\n    header[offset++] = headerLength * Uint32Array.BYTES_PER_ELEMENT + (outlinesLength - 2 * len) * bufferType.BYTES_PER_ELEMENT;\n    header[offset++] = 0;\n    header[offset++] = width;\n    header[offset++] = height;\n    header[offset++] = areContours ? 0 : 1;\n    header[offset++] = Math.max(0, Math.floor(thickness ?? 0));\n    header[offset++] = len;\n    header[offset++] = bufferType.BYTES_PER_ELEMENT;\n    for (const points of outlines) {\n      header[offset++] = points.length - 2;\n      header[offset++] = points[0];\n      header[offset++] = points[1];\n    }\n    const cs = new CompressionStream(\"deflate-raw\");\n    const writer = cs.writable.getWriter();\n    await writer.ready;\n    writer.write(header);\n    const BufferCtor = bufferType.prototype.constructor;\n    for (const points of outlines) {\n      const diffs = new BufferCtor(points.length - 2);\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        diffs[i - 2] = points[i] - points[i - 2];\n      }\n      writer.write(diffs);\n    }\n    writer.close();\n    const bytes = await new Response(cs.readable).bytes();\n    return bytes.toBase64();\n  }\n  static async decompressSignature(signatureData) {\n    try {\n      const bytes = Uint8Array.fromBase64(signatureData);\n      const {\n        readable,\n        writable\n      } = new DecompressionStream(\"deflate-raw\");\n      const writer = writable.getWriter();\n      await writer.ready;\n      writer.write(bytes).then(async () => {\n        await writer.ready;\n        await writer.close();\n      }).catch(() => {});\n      let data = null;\n      let offset = 0;\n      for await (const chunk of readable) {\n        data ||= new Uint8Array(new Uint32Array(chunk.buffer, 0, 4)[0]);\n        data.set(chunk, offset);\n        offset += chunk.length;\n      }\n      const header = new Uint32Array(data.buffer, 0, data.length >> 2);\n      const version = header[1];\n      if (version !== 0) {\n        throw new Error(`Invalid version: ${version}`);\n      }\n      const width = header[2];\n      const height = header[3];\n      const areContours = header[4] === 0;\n      const thickness = header[5];\n      const numberOfDrawings = header[6];\n      const bufferType = header[7];\n      const outlines = [];\n      const diffsOffset = (BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * numberOfDrawings) * Uint32Array.BYTES_PER_ELEMENT;\n      let diffs;\n      switch (bufferType) {\n        case Int8Array.BYTES_PER_ELEMENT:\n          diffs = new Int8Array(data.buffer, diffsOffset);\n          break;\n        case Int16Array.BYTES_PER_ELEMENT:\n          diffs = new Int16Array(data.buffer, diffsOffset);\n          break;\n        case Int32Array.BYTES_PER_ELEMENT:\n          diffs = new Int32Array(data.buffer, diffsOffset);\n          break;\n      }\n      offset = 0;\n      for (let i = 0; i < numberOfDrawings; i++) {\n        const len = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH];\n        const points = new Float32Array(len + 2);\n        outlines.push(points);\n        for (let j = 0; j < POINTS_PROPERTIES_NUMBER - 1; j++) {\n          points[j] = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH + j + 1];\n        }\n        for (let j = 0; j < len; j++) {\n          points[j + 2] = points[j] + diffs[offset++];\n        }\n      }\n      return {\n        areContours,\n        thickness,\n        outlines,\n        width,\n        height\n      };\n    } catch (e) {\n      warn(`decompressSignature: ${e}`);\n      return null;\n    }\n  }\n}\n\n;// ./src/display/editor/signature.js\n\n\n\n\n\n\n\n\n\n\n\n\nclass SignatureOptions extends DrawingOptions {\n  constructor() {\n    super();\n    super.updateProperties({\n      fill: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 0\n    });\n  }\n  clone() {\n    const clone = new SignatureOptions();\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass DrawnSignatureOptions extends InkDrawingOptions {\n  constructor(viewerParameters) {\n    super(viewerParameters);\n    super.updateProperties({\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 1\n    });\n  }\n  clone() {\n    const clone = new DrawnSignatureOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass SignatureEditor extends DrawingEditor {\n  #isExtracted = false;\n  #description = null;\n  #signatureData = null;\n  #signatureUUID = null;\n  static _type = \"signature\";\n  static _editorType = AnnotationEditorType.SIGNATURE;\n  static _defaultDrawingOptions = null;\n  constructor(params) {\n    super({\n      ...params,\n      mustBeCommitted: true,\n      name: \"signatureEditor\"\n    });\n    this._willKeepAspectRatio = true;\n    this.#signatureData = params.signatureData || null;\n    this.#description = null;\n    this.defaultL10nId = \"pdfjs-editor-signature-editor1\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    this._defaultDrawingOptions = new SignatureOptions();\n    this._defaultDrawnSignatureOptions = new DrawnSignatureOptions(uiManager.viewParameters);\n  }\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n  static get supportMultipleDrawings() {\n    return false;\n  }\n  static get typesMap() {\n    return shadow(this, \"typesMap\", new Map());\n  }\n  static get isDrawer() {\n    return false;\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"signature\",\n      hasDescription: !!this.#description\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    const hasDescriptionStats = data.get(\"hasDescription\");\n    return {\n      hasAltText: hasDescriptionStats.get(true) ?? 0,\n      hasNoAltText: hasDescriptionStats.get(false) ?? 0\n    };\n  }\n  get isResizable() {\n    return true;\n  }\n  onScaleChanging() {\n    if (this._drawId === null) {\n      return;\n    }\n    super.onScaleChanging();\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    const {\n      _isCopy\n    } = this;\n    if (_isCopy) {\n      this._isCopy = false;\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    if (this._drawId === null) {\n      if (this.#signatureData) {\n        const {\n          lines,\n          mustSmooth,\n          areContours,\n          description,\n          uuid,\n          heightInPage\n        } = this.#signatureData;\n        const {\n          rawDims: {\n            pageWidth,\n            pageHeight\n          },\n          rotation\n        } = this.parent.viewport;\n        const outline = SignatureExtractor.processDrawnLines({\n          lines,\n          pageWidth,\n          pageHeight,\n          rotation,\n          innerMargin: SignatureEditor._INNER_MARGIN,\n          mustSmooth,\n          areContours\n        });\n        this.addSignature(outline, heightInPage, description, uuid);\n      } else {\n        this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n          description: \"\"\n        }));\n        this.div.hidden = true;\n        this._uiManager.getSignature(this);\n      }\n    } else {\n      this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n        description: this.#description || \"\"\n      }));\n    }\n    if (_isCopy) {\n      this._isCopy = true;\n      this._moveAfterPaste(baseX, baseY);\n    }\n    return this.div;\n  }\n  setUuid(uuid) {\n    this.#signatureUUID = uuid;\n    this.addEditToolbar();\n  }\n  getUuid() {\n    return this.#signatureUUID;\n  }\n  get description() {\n    return this.#description;\n  }\n  set description(description) {\n    this.#description = description;\n    if (!this.div) {\n      return;\n    }\n    this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n      description\n    }));\n    super.addEditToolbar().then(toolbar => {\n      toolbar?.updateEditSignatureButton(description);\n    });\n  }\n  getSignaturePreview() {\n    const {\n      newCurves,\n      areContours,\n      thickness,\n      width,\n      height\n    } = this.#signatureData;\n    const maxDim = Math.max(width, height);\n    const outlineData = SignatureExtractor.processDrawnLines({\n      lines: {\n        curves: newCurves.map(points => ({\n          points\n        })),\n        thickness,\n        width,\n        height\n      },\n      pageWidth: maxDim,\n      pageHeight: maxDim,\n      rotation: 0,\n      innerMargin: 0,\n      mustSmooth: false,\n      areContours\n    });\n    return {\n      areContours,\n      outline: outlineData.outline\n    };\n  }\n  get toolbarButtons() {\n    if (this._uiManager.signatureManager) {\n      return [[\"editSignature\", this._uiManager.signatureManager]];\n    }\n    return super.toolbarButtons;\n  }\n  addSignature(data, heightInPage, description, uuid) {\n    const {\n      x: savedX,\n      y: savedY\n    } = this;\n    const {\n      outline\n    } = this.#signatureData = data;\n    this.#isExtracted = outline instanceof ContourDrawOutline;\n    this.description = description;\n    let drawingOptions;\n    if (this.#isExtracted) {\n      drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();\n      drawingOptions.updateProperties({\n        \"stroke-width\": outline.thickness\n      });\n    }\n    this._addOutlines({\n      drawOutlines: outline,\n      drawingOptions\n    });\n    const [, pageHeight] = this.pageDimensions;\n    let newHeight = heightInPage / pageHeight;\n    newHeight = newHeight >= 1 ? 0.5 : newHeight;\n    this.width *= newHeight / this.height;\n    if (this.width >= 1) {\n      newHeight *= 0.9 / this.width;\n      this.width = 0.9;\n    }\n    this.height = newHeight;\n    this.setDims();\n    this.x = savedX;\n    this.y = savedY;\n    this.center();\n    this._onResized();\n    this.onScaleChanging();\n    this.rotate();\n    this._uiManager.addToAnnotationStorage(this);\n    this.setUuid(uuid);\n    this._reportTelemetry({\n      action: \"pdfjs.signature.inserted\",\n      data: {\n        hasBeenSaved: !!uuid,\n        hasDescription: !!description\n      }\n    });\n    this.div.hidden = false;\n  }\n  getFromImage(bitmap) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);\n  }\n  getFromText(text, fontInfo) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.extractContoursFromText(text, fontInfo, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);\n  }\n  getDrawnSignature(curves) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.processDrawnLines({\n      lines: curves,\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin: SignatureEditor._INNER_MARGIN,\n      mustSmooth: false,\n      areContours: false\n    });\n  }\n  createDrawingOptions({\n    areContours,\n    thickness\n  }) {\n    if (areContours) {\n      this._drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      this._drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();\n      this._drawingOptions.updateProperties({\n        \"stroke-width\": thickness\n      });\n    }\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    const {\n      lines,\n      points\n    } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: {\n        \"stroke-width\": thickness\n      }\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      isSignature: true,\n      areContours: this.#isExtracted,\n      color: [0, 0, 0],\n      thickness: this.#isExtracted ? 0 : thickness\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.paths = {\n        lines,\n        points\n      };\n      serialized.uuid = this.#signatureUUID;\n      serialized.isCopy = true;\n    } else {\n      serialized.lines = lines;\n    }\n    if (this.#description) {\n      serialized.accessibilityData = {\n        type: \"Figure\",\n        alt: this.#description\n      };\n    }\n    return serialized;\n  }\n  static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {\n    if (data.areContours) {\n      return ContourDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n    }\n    return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n  }\n  static async deserialize(data, parent, uiManager) {\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#isExtracted = data.areContours;\n    editor.description = data.accessibilityData?.alt || \"\";\n    editor.#signatureUUID = data.uuid;\n    return editor;\n  }\n}\n\n;// ./src/display/editor/stamp.js\n\n\n\n\n\n\n\n\n\n\nclass StampEditor extends AnnotationEditor {\n  #bitmap = null;\n  #bitmapId = null;\n  #bitmapPromise = null;\n  #bitmapUrl = null;\n  #bitmapFile = null;\n  #bitmapFileName = \"\";\n  #canvas = null;\n  #missingCanvas = false;\n  #resizeTimeoutId = null;\n  #isSvg = false;\n  #hasBeenAddedInUndoStack = false;\n  static _type = \"stamp\";\n  static _editorType = AnnotationEditorType.STAMP;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"stampEditor\"\n    });\n    this.#bitmapUrl = params.bitmapUrl;\n    this.#bitmapFile = params.bitmapFile;\n    this.defaultL10nId = \"pdfjs-editor-stamp-editor\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n  }\n  static isHandlingMimeForPasting(mime) {\n    return SupportedImageMimeTypes.includes(mime);\n  }\n  static paste(item, parent) {\n    parent.pasteEditor({\n      mode: AnnotationEditorType.STAMP\n    }, {\n      bitmapFile: item.getAsFile()\n    });\n  }\n  altTextFinish() {\n    if (this._uiManager.useNewAltTextFlow) {\n      this.div.hidden = false;\n    }\n    super.altTextFinish();\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"stamp\",\n      hasAltText: !!this.altTextData?.altText\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    const hasAltTextStats = data.get(\"hasAltText\");\n    return {\n      hasAltText: hasAltTextStats.get(true) ?? 0,\n      hasNoAltText: hasAltTextStats.get(false) ?? 0\n    };\n  }\n  #getBitmapFetched(data, fromId = false) {\n    if (!data) {\n      this.remove();\n      return;\n    }\n    this.#bitmap = data.bitmap;\n    if (!fromId) {\n      this.#bitmapId = data.id;\n      this.#isSvg = data.isSvg;\n    }\n    if (data.file) {\n      this.#bitmapFileName = data.file.name;\n    }\n    this.#createCanvas();\n  }\n  #getBitmapDone() {\n    this.#bitmapPromise = null;\n    this._uiManager.enableWaiting(false);\n    if (!this.#canvas) {\n      return;\n    }\n    if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) {\n      this.addEditToolbar().then(() => {\n        this._editToolbar.hide();\n        this._uiManager.editAltText(this, true);\n      });\n      return;\n    }\n    if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) {\n      this._reportTelemetry({\n        action: \"pdfjs.image.image_added\",\n        data: {\n          alt_text_modal: false,\n          alt_text_type: \"empty\"\n        }\n      });\n      try {\n        this.mlGuessAltText();\n      } catch {}\n    }\n    this.div.focus();\n  }\n  async mlGuessAltText(imageData = null, updateAltTextData = true) {\n    if (this.hasAltTextData()) {\n      return null;\n    }\n    const {\n      mlManager\n    } = this._uiManager;\n    if (!mlManager) {\n      throw new Error(\"No ML.\");\n    }\n    if (!(await mlManager.isEnabledFor(\"altText\"))) {\n      throw new Error(\"ML isn't enabled for alt text.\");\n    }\n    const {\n      data,\n      width,\n      height\n    } = imageData || this.copyCanvas(null, null, true).imageData;\n    const response = await mlManager.guess({\n      name: \"altText\",\n      request: {\n        data,\n        width,\n        height,\n        channels: data.length / (width * height)\n      }\n    });\n    if (!response) {\n      throw new Error(\"No response from the AI service.\");\n    }\n    if (response.error) {\n      throw new Error(\"Error from the AI service.\");\n    }\n    if (response.cancel) {\n      return null;\n    }\n    if (!response.output) {\n      throw new Error(\"No valid response from the AI service.\");\n    }\n    const altText = response.output;\n    await this.setGuessedAltText(altText);\n    if (updateAltTextData && !this.hasAltTextData()) {\n      this.altTextData = {\n        alt: altText,\n        decorative: false\n      };\n    }\n    return altText;\n  }\n  #getBitmap() {\n    if (this.#bitmapId) {\n      this._uiManager.enableWaiting(true);\n      this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapUrl) {\n      const url = this.#bitmapUrl;\n      this.#bitmapUrl = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapFile) {\n      const file = this.#bitmapFile;\n      this.#bitmapFile = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.accept = SupportedImageMimeTypes.join(\",\");\n    const signal = this._uiManager._signal;\n    this.#bitmapPromise = new Promise(resolve => {\n      input.addEventListener(\"change\", async () => {\n        if (!input.files || input.files.length === 0) {\n          this.remove();\n        } else {\n          this._uiManager.enableWaiting(true);\n          const data = await this._uiManager.imageManager.getFromFile(input.files[0]);\n          this._reportTelemetry({\n            action: \"pdfjs.image.image_selected\",\n            data: {\n              alt_text_modal: this._uiManager.useNewAltTextFlow\n            }\n          });\n          this.#getBitmapFetched(data);\n        }\n        resolve();\n      }, {\n        signal\n      });\n      input.addEventListener(\"cancel\", () => {\n        this.remove();\n        resolve();\n      }, {\n        signal\n      });\n    }).finally(() => this.#getBitmapDone());\n    input.click();\n  }\n  remove() {\n    if (this.#bitmapId) {\n      this.#bitmap = null;\n      this._uiManager.imageManager.deleteId(this.#bitmapId);\n      this.#canvas?.remove();\n      this.#canvas = null;\n      if (this.#resizeTimeoutId) {\n        clearTimeout(this.#resizeTimeoutId);\n        this.#resizeTimeoutId = null;\n      }\n    }\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      if (this.#bitmapId) {\n        this.#getBitmap();\n      }\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (this.#bitmapId && this.#canvas === null) {\n      this.#getBitmap();\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  onceAdded(focus) {\n    this._isDraggable = true;\n    if (focus) {\n      this.div.focus();\n    }\n  }\n  isEmpty() {\n    return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId || this.#missingCanvas);\n  }\n  get toolbarButtons() {\n    return [[\"altText\", this.createAltText()]];\n  }\n  get isResizable() {\n    return true;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.div.hidden = true;\n    this.createAltText();\n    if (!this.#missingCanvas) {\n      if (this.#bitmap) {\n        this.#createCanvas();\n      } else {\n        this.#getBitmap();\n      }\n    }\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n    this._uiManager.addShouldRescale(this);\n    return this.div;\n  }\n  setCanvas(annotationElementId, canvas) {\n    const {\n      id: bitmapId,\n      bitmap\n    } = this._uiManager.imageManager.getFromCanvas(annotationElementId, canvas);\n    canvas.remove();\n    if (bitmapId && this._uiManager.imageManager.isValidId(bitmapId)) {\n      this.#bitmapId = bitmapId;\n      if (bitmap) {\n        this.#bitmap = bitmap;\n      }\n      this.#missingCanvas = false;\n      this.#createCanvas();\n    }\n  }\n  _onResized() {\n    this.onScaleChanging();\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    if (this.#resizeTimeoutId !== null) {\n      clearTimeout(this.#resizeTimeoutId);\n    }\n    const TIME_TO_WAIT = 200;\n    this.#resizeTimeoutId = setTimeout(() => {\n      this.#resizeTimeoutId = null;\n      this.#drawBitmap();\n    }, TIME_TO_WAIT);\n  }\n  #createCanvas() {\n    const {\n      div\n    } = this;\n    let {\n      width,\n      height\n    } = this.#bitmap;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const MAX_RATIO = 0.75;\n    if (this.width) {\n      width = this.width * pageWidth;\n      height = this.height * pageHeight;\n    } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {\n      const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);\n      width *= factor;\n      height *= factor;\n    }\n    this._uiManager.enableWaiting(false);\n    const canvas = this.#canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\"role\", \"img\");\n    this.addContainer(canvas);\n    this.width = width / pageWidth;\n    this.height = height / pageHeight;\n    this.setDims();\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    } else {\n      this.fixAndSetPosition();\n    }\n    this._initialOptions = null;\n    if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) {\n      div.hidden = false;\n    }\n    this.#drawBitmap();\n    if (!this.#hasBeenAddedInUndoStack) {\n      this.parent.addUndoableEditor(this);\n      this.#hasBeenAddedInUndoStack = true;\n    }\n    this._reportTelemetry({\n      action: \"inserted_image\"\n    });\n    if (this.#bitmapFileName) {\n      this.div.setAttribute(\"aria-description\", this.#bitmapFileName);\n    }\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.stamp);\n    }\n  }\n  copyCanvas(maxDataDimension, maxPreviewDimension, createImageData = false) {\n    if (!maxDataDimension) {\n      maxDataDimension = 224;\n    }\n    const {\n      width: bitmapWidth,\n      height: bitmapHeight\n    } = this.#bitmap;\n    const outputScale = new OutputScale();\n    let bitmap = this.#bitmap;\n    let width = bitmapWidth,\n      height = bitmapHeight;\n    let canvas = null;\n    if (maxPreviewDimension) {\n      if (bitmapWidth > maxPreviewDimension || bitmapHeight > maxPreviewDimension) {\n        const ratio = Math.min(maxPreviewDimension / bitmapWidth, maxPreviewDimension / bitmapHeight);\n        width = Math.floor(bitmapWidth * ratio);\n        height = Math.floor(bitmapHeight * ratio);\n      }\n      canvas = document.createElement(\"canvas\");\n      const scaledWidth = canvas.width = Math.ceil(width * outputScale.sx);\n      const scaledHeight = canvas.height = Math.ceil(height * outputScale.sy);\n      if (!this.#isSvg) {\n        bitmap = this.#scaleBitmap(scaledWidth, scaledHeight);\n      }\n      const ctx = canvas.getContext(\"2d\");\n      ctx.filter = this._uiManager.hcmFilter;\n      let white = \"white\",\n        black = \"#cfcfd8\";\n      if (this._uiManager.hcmFilter !== \"none\") {\n        black = \"black\";\n      } else if (ColorScheme.isDarkMode) {\n        white = \"#8f8f9d\";\n        black = \"#42414d\";\n      }\n      const boxDim = 15;\n      const boxDimWidth = boxDim * outputScale.sx;\n      const boxDimHeight = boxDim * outputScale.sy;\n      const pattern = new OffscreenCanvas(boxDimWidth * 2, boxDimHeight * 2);\n      const patternCtx = pattern.getContext(\"2d\");\n      patternCtx.fillStyle = white;\n      patternCtx.fillRect(0, 0, boxDimWidth * 2, boxDimHeight * 2);\n      patternCtx.fillStyle = black;\n      patternCtx.fillRect(0, 0, boxDimWidth, boxDimHeight);\n      patternCtx.fillRect(boxDimWidth, boxDimHeight, boxDimWidth, boxDimHeight);\n      ctx.fillStyle = ctx.createPattern(pattern, \"repeat\");\n      ctx.fillRect(0, 0, scaledWidth, scaledHeight);\n      ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);\n    }\n    let imageData = null;\n    if (createImageData) {\n      let dataWidth, dataHeight;\n      if (outputScale.symmetric && bitmap.width < maxDataDimension && bitmap.height < maxDataDimension) {\n        dataWidth = bitmap.width;\n        dataHeight = bitmap.height;\n      } else {\n        bitmap = this.#bitmap;\n        if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) {\n          const ratio = Math.min(maxDataDimension / bitmapWidth, maxDataDimension / bitmapHeight);\n          dataWidth = Math.floor(bitmapWidth * ratio);\n          dataHeight = Math.floor(bitmapHeight * ratio);\n          if (!this.#isSvg) {\n            bitmap = this.#scaleBitmap(dataWidth, dataHeight);\n          }\n        }\n      }\n      const offscreen = new OffscreenCanvas(dataWidth, dataHeight);\n      const offscreenCtx = offscreen.getContext(\"2d\", {\n        willReadFrequently: true\n      });\n      offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, dataWidth, dataHeight);\n      imageData = {\n        width: dataWidth,\n        height: dataHeight,\n        data: offscreenCtx.getImageData(0, 0, dataWidth, dataHeight).data\n      };\n    }\n    return {\n      canvas,\n      width,\n      height,\n      imageData\n    };\n  }\n  #scaleBitmap(width, height) {\n    const {\n      width: bitmapWidth,\n      height: bitmapHeight\n    } = this.#bitmap;\n    let newWidth = bitmapWidth;\n    let newHeight = bitmapHeight;\n    let bitmap = this.#bitmap;\n    while (newWidth > 2 * width || newHeight > 2 * height) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n      if (newWidth > 2 * width) {\n        newWidth = Math.ceil(newWidth / 2);\n      }\n      if (newHeight > 2 * height) {\n        newHeight = Math.ceil(newHeight / 2);\n      }\n      const offscreen = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n      bitmap = offscreen.transferToImageBitmap();\n    }\n    return bitmap;\n  }\n  #drawBitmap() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const {\n      width,\n      height\n    } = this;\n    const outputScale = new OutputScale();\n    const scaledWidth = Math.ceil(width * parentWidth * outputScale.sx);\n    const scaledHeight = Math.ceil(height * parentHeight * outputScale.sy);\n    const canvas = this.#canvas;\n    if (!canvas || canvas.width === scaledWidth && canvas.height === scaledHeight) {\n      return;\n    }\n    canvas.width = scaledWidth;\n    canvas.height = scaledHeight;\n    const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(scaledWidth, scaledHeight);\n    const ctx = canvas.getContext(\"2d\");\n    ctx.filter = this._uiManager.hcmFilter;\n    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);\n  }\n  #serializeBitmap(toUrl) {\n    if (toUrl) {\n      if (this.#isSvg) {\n        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);\n        if (url) {\n          return url;\n        }\n      }\n      const canvas = document.createElement(\"canvas\");\n      ({\n        width: canvas.width,\n        height: canvas.height\n      } = this.#bitmap);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0);\n      return canvas.toDataURL();\n    }\n    if (this.#isSvg) {\n      const [pageWidth, pageHeight] = this.pageDimensions;\n      const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const offscreen = new OffscreenCanvas(width, height);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height);\n      return offscreen.transferToImageBitmap();\n    }\n    return structuredClone(this.#bitmap);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    let missingCanvas = false;\n    if (data instanceof StampAnnotationElement) {\n      const {\n        data: {\n          rect,\n          rotation,\n          id,\n          structParent,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        container,\n        parent: {\n          page: {\n            pageNumber\n          }\n        },\n        canvas\n      } = data;\n      let bitmapId, bitmap;\n      if (canvas) {\n        delete data.canvas;\n        ({\n          id: bitmapId,\n          bitmap\n        } = uiManager.imageManager.getFromCanvas(container.id, canvas));\n        canvas.remove();\n      } else {\n        missingCanvas = true;\n        data._hasNoCanvas = true;\n      }\n      const altText = (await parent._structTree.getAriaAttributes(`${AnnotationPrefix}${id}`))?.get(\"aria-label\") || \"\";\n      initialData = data = {\n        annotationType: AnnotationEditorType.STAMP,\n        bitmapId,\n        bitmap,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        accessibilityData: {\n          decorative: false,\n          altText\n        },\n        isSvg: false,\n        structParent,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    const {\n      rect,\n      bitmap,\n      bitmapUrl,\n      bitmapId,\n      isSvg,\n      accessibilityData\n    } = data;\n    if (missingCanvas) {\n      uiManager.addMissingCanvas(data.id, editor);\n      editor.#missingCanvas = true;\n    } else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {\n      editor.#bitmapId = bitmapId;\n      if (bitmap) {\n        editor.#bitmap = bitmap;\n      }\n    } else {\n      editor.#bitmapUrl = bitmapUrl;\n    }\n    editor.#isSvg = isSvg;\n    const [parentWidth, parentHeight] = editor.pageDimensions;\n    editor.width = (rect[2] - rect[0]) / parentWidth;\n    editor.height = (rect[3] - rect[1]) / parentHeight;\n    if (accessibilityData) {\n      editor.altTextData = accessibilityData;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    editor.#hasBeenAddedInUndoStack = !!initialData;\n    return editor;\n  }\n  serialize(isForCopying = false, context = null) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      bitmapId: this.#bitmapId,\n      isSvg: this.#isSvg\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.bitmapUrl = this.#serializeBitmap(true);\n      serialized.accessibilityData = this.serializeAltText(true);\n      serialized.isCopy = true;\n      return serialized;\n    }\n    const {\n      decorative,\n      altText\n    } = this.serializeAltText(false);\n    if (!decorative && altText) {\n      serialized.accessibilityData = {\n        type: \"Figure\",\n        alt: altText\n      };\n    }\n    if (this.annotationElementId) {\n      const changes = this.#hasElementChanged(serialized);\n      if (changes.isSame) {\n        return null;\n      }\n      if (changes.isSameAltText) {\n        delete serialized.accessibilityData;\n      } else {\n        serialized.accessibilityData.structParent = this._initialData.structParent ?? -1;\n      }\n      serialized.id = this.annotationElementId;\n      delete serialized.bitmapId;\n      return serialized;\n    }\n    if (context === null) {\n      return serialized;\n    }\n    context.stamps ||= new Map();\n    const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;\n    if (!context.stamps.has(this.#bitmapId)) {\n      context.stamps.set(this.#bitmapId, {\n        area,\n        serialized\n      });\n      serialized.bitmap = this.#serializeBitmap(false);\n    } else if (this.#isSvg) {\n      const prevData = context.stamps.get(this.#bitmapId);\n      if (area > prevData.area) {\n        prevData.area = area;\n        prevData.serialized.bitmap.close();\n        prevData.serialized.bitmap = this.#serializeBitmap(false);\n      }\n    }\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      pageIndex,\n      accessibilityData: {\n        altText\n      }\n    } = this._initialData;\n    const isSamePageIndex = serialized.pageIndex === pageIndex;\n    const isSameAltText = (serialized.accessibilityData?.alt || \"\") === altText;\n    return {\n      isSame: !this.hasEditedComment && !this._hasBeenMoved && !this._hasBeenResized && isSamePageIndex && isSameAltText,\n      isSameAltText\n    };\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment\n    });\n    return null;\n  }\n}\n\n;// ./src/display/editor/annotation_editor_layer.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass AnnotationEditorLayer {\n  #accessibilityManager;\n  #allowClick = false;\n  #annotationLayer = null;\n  #clickAC = null;\n  #editorFocusTimeoutId = null;\n  #editors = new Map();\n  #hadPointerDown = false;\n  #isDisabling = false;\n  #isEnabling = false;\n  #drawingAC = null;\n  #focusedElement = null;\n  #textLayer = null;\n  #textSelectionAC = null;\n  #textLayerDblClickAC = null;\n  #lastPointerDownTimestamp = -1;\n  #uiManager;\n  static _initialized = false;\n  static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor, SignatureEditor].map(type => [type._editorType, type]));\n  constructor({\n    uiManager,\n    pageIndex,\n    div,\n    structTreeLayer,\n    accessibilityManager,\n    annotationLayer,\n    drawLayer,\n    textLayer,\n    viewport,\n    l10n\n  }) {\n    const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()];\n    if (!AnnotationEditorLayer._initialized) {\n      AnnotationEditorLayer._initialized = true;\n      for (const editorType of editorTypes) {\n        editorType.initialize(l10n, uiManager);\n      }\n    }\n    uiManager.registerEditorTypes(editorTypes);\n    this.#uiManager = uiManager;\n    this.pageIndex = pageIndex;\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationLayer = annotationLayer;\n    this.viewport = viewport;\n    this.#textLayer = textLayer;\n    this.drawLayer = drawLayer;\n    this._structTree = structTreeLayer;\n    this.#uiManager.addLayer(this);\n  }\n  get isEmpty() {\n    return this.#editors.size === 0;\n  }\n  get isInvisible() {\n    return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE;\n  }\n  updateToolbar(options) {\n    this.#uiManager.updateToolbar(options);\n  }\n  updateMode(mode = this.#uiManager.getMode()) {\n    this.#cleanup();\n    switch (mode) {\n      case AnnotationEditorType.NONE:\n        this.div.classList.toggle(\"nonEditing\", true);\n        this.disableTextSelection();\n        this.togglePointerEvents(false);\n        this.toggleAnnotationLayerPointerEvents(true);\n        this.disableClick();\n        return;\n      case AnnotationEditorType.INK:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n        break;\n      case AnnotationEditorType.HIGHLIGHT:\n        this.enableTextSelection();\n        this.togglePointerEvents(false);\n        this.disableClick();\n        break;\n      default:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n    }\n    this.toggleAnnotationLayerPointerEvents(false);\n    const {\n      classList\n    } = this.div;\n    classList.toggle(\"nonEditing\", false);\n    if (mode === AnnotationEditorType.POPUP) {\n      classList.toggle(\"commentEditing\", true);\n    } else {\n      classList.toggle(\"commentEditing\", false);\n      for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n        classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType);\n      }\n    }\n    this.div.hidden = false;\n  }\n  hasTextLayer(textLayer) {\n    return textLayer === this.#textLayer?.div;\n  }\n  setEditingState(isEditing) {\n    this.#uiManager.setEditingState(isEditing);\n  }\n  addCommands(params) {\n    this.#uiManager.addCommands(params);\n  }\n  cleanUndoStack(type) {\n    this.#uiManager.cleanUndoStack(type);\n  }\n  toggleDrawing(enabled = false) {\n    this.div.classList.toggle(\"drawing\", !enabled);\n  }\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n  toggleAnnotationLayerPointerEvents(enabled = false) {\n    this.#annotationLayer?.togglePointerEvents(enabled);\n  }\n  get #allEditorsIterator() {\n    return this.#editors.size !== 0 ? this.#editors.values() : this.#uiManager.getEditors(this.pageIndex);\n  }\n  async enable() {\n    this.#isEnabling = true;\n    this.div.tabIndex = 0;\n    this.togglePointerEvents(true);\n    this.div.classList.toggle(\"nonEditing\", false);\n    this.#textLayerDblClickAC?.abort();\n    this.#textLayerDblClickAC = null;\n    const annotationElementIds = new Set();\n    for (const editor of this.#allEditorsIterator) {\n      editor.enableEditing();\n      editor.show(true);\n      if (editor.annotationElementId) {\n        this.#uiManager.removeChangedExistingAnnotation(editor);\n        annotationElementIds.add(editor.annotationElementId);\n      }\n    }\n    const annotationLayer = this.#annotationLayer;\n    if (annotationLayer) {\n      for (const editable of annotationLayer.getEditableAnnotations()) {\n        editable.hide();\n        if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {\n          continue;\n        }\n        if (annotationElementIds.has(editable.data.id)) {\n          continue;\n        }\n        const editor = await this.deserialize(editable);\n        if (!editor) {\n          continue;\n        }\n        this.addOrRebuild(editor);\n        editor.enableEditing();\n      }\n    }\n    this.#isEnabling = false;\n    this.#uiManager._eventBus.dispatch(\"editorsrendered\", {\n      source: this,\n      pageNumber: this.pageIndex + 1\n    });\n  }\n  disable() {\n    this.#isDisabling = true;\n    this.div.tabIndex = -1;\n    this.togglePointerEvents(false);\n    this.div.classList.toggle(\"nonEditing\", true);\n    if (this.#textLayer && !this.#textLayerDblClickAC) {\n      this.#textLayerDblClickAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textLayerDblClickAC);\n      this.#textLayer.div.addEventListener(\"pointerdown\", e => {\n        const DBL_CLICK_THRESHOLD = 500;\n        const {\n          clientX,\n          clientY,\n          timeStamp\n        } = e;\n        const lastPointerDownTimestamp = this.#lastPointerDownTimestamp;\n        if (timeStamp - lastPointerDownTimestamp > DBL_CLICK_THRESHOLD) {\n          this.#lastPointerDownTimestamp = timeStamp;\n          return;\n        }\n        this.#lastPointerDownTimestamp = -1;\n        const {\n          classList\n        } = this.div;\n        classList.toggle(\"getElements\", true);\n        const elements = document.elementsFromPoint(clientX, clientY);\n        classList.toggle(\"getElements\", false);\n        if (!this.div.contains(elements[0])) {\n          return;\n        }\n        let id;\n        const regex = new RegExp(`^${AnnotationEditorPrefix}[0-9]+$`);\n        for (const element of elements) {\n          if (regex.test(element.id)) {\n            id = element.id;\n            break;\n          }\n        }\n        if (!id) {\n          return;\n        }\n        const editor = this.#editors.get(id);\n        if (editor?.annotationElementId === null) {\n          stopEvent(e);\n          editor.dblclick(e);\n        }\n      }, {\n        signal,\n        capture: true\n      });\n    }\n    const annotationLayer = this.#annotationLayer;\n    const needFakeAnnotation = [];\n    if (annotationLayer) {\n      const changedAnnotations = new Map();\n      const resetAnnotations = new Map();\n      for (const editor of this.#allEditorsIterator) {\n        editor.disableEditing();\n        if (!editor.annotationElementId) {\n          needFakeAnnotation.push(editor);\n          continue;\n        }\n        if (editor.serialize() !== null) {\n          changedAnnotations.set(editor.annotationElementId, editor);\n          continue;\n        } else {\n          resetAnnotations.set(editor.annotationElementId, editor);\n        }\n        this.getEditableAnnotation(editor.annotationElementId)?.show();\n        editor.remove();\n      }\n      for (const editable of annotationLayer.getEditableAnnotations()) {\n        const {\n          id\n        } = editable.data;\n        if (this.#uiManager.isDeletedAnnotationElement(id)) {\n          editable.updateEdited({\n            deleted: true\n          });\n          continue;\n        }\n        let editor = resetAnnotations.get(id);\n        if (editor) {\n          editor.resetAnnotationElement(editable);\n          editor.show(false);\n          editable.show();\n          continue;\n        }\n        editor = changedAnnotations.get(id);\n        if (editor) {\n          this.#uiManager.addChangedExistingAnnotation(editor);\n          if (editor.renderAnnotationElement(editable)) {\n            editor.show(false);\n          }\n        }\n        editable.show();\n      }\n    }\n    this.#cleanup();\n    if (this.isEmpty) {\n      this.div.hidden = true;\n    }\n    const {\n      classList\n    } = this.div;\n    for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n      classList.remove(`${editorType._type}Editing`);\n    }\n    this.disableTextSelection();\n    this.toggleAnnotationLayerPointerEvents(true);\n    annotationLayer?.updateFakeAnnotations(needFakeAnnotation);\n    this.#isDisabling = false;\n  }\n  getEditableAnnotation(id) {\n    return this.#annotationLayer?.getEditableAnnotation(id) || null;\n  }\n  setActiveEditor(editor) {\n    const currentActive = this.#uiManager.getActive();\n    if (currentActive === editor) {\n      return;\n    }\n    this.#uiManager.setActiveEditor(editor);\n  }\n  enableTextSelection() {\n    this.div.tabIndex = -1;\n    if (this.#textLayer?.div && !this.#textSelectionAC) {\n      this.#textSelectionAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textSelectionAC);\n      this.#textLayer.div.addEventListener(\"pointerdown\", this.#textLayerPointerDown.bind(this), {\n        signal\n      });\n      this.#textLayer.div.classList.add(\"highlighting\");\n    }\n  }\n  disableTextSelection() {\n    this.div.tabIndex = 0;\n    if (this.#textLayer?.div && this.#textSelectionAC) {\n      this.#textSelectionAC.abort();\n      this.#textSelectionAC = null;\n      this.#textLayer.div.classList.remove(\"highlighting\");\n    }\n  }\n  #textLayerPointerDown(event) {\n    this.#uiManager.unselectAll();\n    const {\n      target\n    } = event;\n    if (target === this.#textLayer.div || (target.getAttribute(\"role\") === \"img\" || target.classList.contains(\"endOfContent\") || target.classList.contains(\"textLayerImages\") || target.classList.contains(\"textLayerImagePlaceholder\")) && this.#textLayer.div.contains(target)) {\n      const {\n        isMac\n      } = FeatureTest.platform;\n      if (event.button !== 0 || event.ctrlKey && isMac) {\n        return;\n      }\n      this.#uiManager.showAllEditors(\"highlight\", true, true);\n      this.#textLayer.div.classList.add(\"free\");\n      this.toggleDrawing();\n      HighlightEditor.startHighlighting(this, this.#uiManager.direction === \"ltr\", {\n        target: this.#textLayer.div,\n        x: event.x,\n        y: event.y\n      });\n      this.#textLayer.div.addEventListener(\"pointerup\", () => {\n        this.#textLayer.div.classList.remove(\"free\");\n        this.toggleDrawing(true);\n      }, {\n        once: true,\n        signal: this.#uiManager._signal\n      });\n      event.preventDefault();\n    }\n  }\n  enableClick() {\n    if (this.#clickAC) {\n      return;\n    }\n    this.#clickAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#clickAC);\n    this.div.addEventListener(\"pointerdown\", this.pointerdown.bind(this), {\n      signal\n    });\n    const pointerup = this.pointerup.bind(this);\n    this.div.addEventListener(\"pointerup\", pointerup, {\n      signal\n    });\n    this.div.addEventListener(\"pointercancel\", pointerup, {\n      signal\n    });\n  }\n  disableClick() {\n    this.#clickAC?.abort();\n    this.#clickAC = null;\n  }\n  attach(editor) {\n    this.#editors.set(editor.id, editor);\n    const {\n      annotationElementId\n    } = editor;\n    if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) {\n      this.#uiManager.removeDeletedAnnotationElement(editor);\n    }\n  }\n  detach(editor) {\n    this.#editors.delete(editor.id);\n    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n    if (!this.#isDisabling && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n    }\n  }\n  remove(editor) {\n    this.detach(editor);\n    this.#uiManager.removeEditor(editor);\n    editor.div.remove();\n    editor.isAttachedToDOM = false;\n  }\n  changeParent(editor) {\n    if (editor.parent === this) {\n      return;\n    }\n    if (editor.parent && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n      AnnotationEditor.deleteAnnotationElement(editor);\n      editor.annotationElementId = null;\n    }\n    this.attach(editor);\n    editor.parent?.detach(editor);\n    editor.setParent(this);\n    if (editor.div && editor.isAttachedToDOM) {\n      editor.div.remove();\n      this.div.append(editor.div);\n    }\n  }\n  add(editor) {\n    if (editor.parent === this && editor.isAttachedToDOM) {\n      return;\n    }\n    this.changeParent(editor);\n    this.#uiManager.addEditor(editor);\n    this.attach(editor);\n    if (!editor.isAttachedToDOM) {\n      const div = editor.render();\n      this.div.append(div);\n      editor.isAttachedToDOM = true;\n    }\n    editor.fixAndSetPosition();\n    editor.onceAdded(!this.#isEnabling);\n    this.#uiManager.addToAnnotationStorage(editor);\n    editor._reportTelemetry(editor.telemetryInitialData);\n  }\n  moveEditorInDOM(editor) {\n    if (!editor.isAttachedToDOM) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) {\n      editor._focusEventsAllowed = false;\n      this.#editorFocusTimeoutId = setTimeout(() => {\n        this.#editorFocusTimeoutId = null;\n        if (!editor.div.contains(document.activeElement)) {\n          editor.div.addEventListener(\"focusin\", () => {\n            editor._focusEventsAllowed = true;\n          }, {\n            once: true,\n            signal: this.#uiManager._signal\n          });\n          activeElement.focus();\n        } else {\n          editor._focusEventsAllowed = true;\n        }\n      }, 0);\n    }\n    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);\n  }\n  addOrRebuild(editor) {\n    if (editor.needsToBeRebuilt()) {\n      editor.parent ||= this;\n      editor.rebuild();\n      editor.show();\n    } else {\n      this.add(editor);\n    }\n  }\n  addUndoableEditor(editor) {\n    const cmd = () => editor._uiManager.rebuild(editor);\n    const undo = () => {\n      editor.remove();\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: false\n    });\n  }\n  getEditorByUID(uid) {\n    for (const editor of this.#editors.values()) {\n      if (editor.uid === uid) {\n        return editor;\n      }\n    }\n    return null;\n  }\n  get #currentEditorType() {\n    return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode());\n  }\n  combinedSignal(ac) {\n    return this.#uiManager.combinedSignal(ac);\n  }\n  #createNewEditor(params) {\n    const editorType = this.#currentEditorType;\n    return editorType ? new editorType.prototype.constructor(params) : null;\n  }\n  canCreateNewEmptyEditor() {\n    return this.#currentEditorType?.canCreateNewEmptyEditor();\n  }\n  async pasteEditor(options, params) {\n    this.updateToolbar(options);\n    await this.#uiManager.updateMode(options.mode);\n    const {\n      offsetX,\n      offsetY\n    } = this.#getCenterPoint();\n    const id = this.#uiManager.getId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: offsetX,\n      y: offsetY,\n      uiManager: this.#uiManager,\n      isCentered: true,\n      ...params\n    });\n    if (editor) {\n      this.add(editor);\n    }\n  }\n  async deserialize(data) {\n    return (await AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager)) || null;\n  }\n  createAndAddNewEditor(event, isCentered, data = {}) {\n    const id = this.#uiManager.getId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: event.offsetX,\n      y: event.offsetY,\n      uiManager: this.#uiManager,\n      isCentered,\n      ...data\n    });\n    if (editor) {\n      this.add(editor);\n    }\n    return editor;\n  }\n  get boundingClientRect() {\n    return this.div.getBoundingClientRect();\n  }\n  #getCenterPoint() {\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.boundingClientRect;\n    const tlX = Math.max(0, x);\n    const tlY = Math.max(0, y);\n    const brX = Math.min(window.innerWidth, x + width);\n    const brY = Math.min(window.innerHeight, y + height);\n    const centerX = (tlX + brX) / 2 - x;\n    const centerY = (tlY + brY) / 2 - y;\n    const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];\n    return {\n      offsetX,\n      offsetY\n    };\n  }\n  addNewEditor(data = {}) {\n    this.createAndAddNewEditor(this.#getCenterPoint(), true, data);\n  }\n  setSelected(editor) {\n    this.#uiManager.setSelected(editor);\n  }\n  toggleSelected(editor) {\n    this.#uiManager.toggleSelected(editor);\n  }\n  unselect(editor) {\n    this.#uiManager.unselect(editor);\n  }\n  pointerup(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    if (!this.#hadPointerDown) {\n      return;\n    }\n    this.#hadPointerDown = false;\n    if (this.#currentEditorType?.isDrawer && this.#currentEditorType.supportMultipleDrawings) {\n      return;\n    }\n    if (!this.#allowClick) {\n      this.#allowClick = true;\n      return;\n    }\n    const currentMode = this.#uiManager.getMode();\n    if (currentMode === AnnotationEditorType.STAMP || currentMode === AnnotationEditorType.POPUP || currentMode === AnnotationEditorType.SIGNATURE) {\n      this.#uiManager.unselectAll();\n      return;\n    }\n    this.createAndAddNewEditor(event, false);\n  }\n  pointerdown(event) {\n    if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) {\n      this.enableTextSelection();\n    }\n    if (this.#hadPointerDown) {\n      this.#hadPointerDown = false;\n      return;\n    }\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    this.#hadPointerDown = true;\n    if (this.#currentEditorType?.isDrawer) {\n      this.startDrawingSession(event);\n      return;\n    }\n    const editor = this.#uiManager.getActive();\n    this.#allowClick = !editor || editor.isEmpty();\n  }\n  startDrawingSession(event) {\n    this.div.focus({\n      preventScroll: true\n    });\n    if (this.#drawingAC) {\n      this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n      return;\n    }\n    this.#uiManager.setCurrentDrawingSession(this);\n    this.#drawingAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#drawingAC);\n    this.div.addEventListener(\"blur\", ({\n      relatedTarget\n    }) => {\n      if (relatedTarget && !this.div.contains(relatedTarget)) {\n        this.#focusedElement = null;\n        this.commitOrRemove();\n      }\n    }, {\n      signal\n    });\n    this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n  }\n  pause(on) {\n    if (on) {\n      const {\n        activeElement\n      } = document;\n      if (this.div.contains(activeElement)) {\n        this.#focusedElement = activeElement;\n      }\n      return;\n    }\n    if (this.#focusedElement) {\n      setTimeout(() => {\n        this.#focusedElement?.focus();\n        this.#focusedElement = null;\n      }, 0);\n    }\n  }\n  endDrawingSession(isAborted = false) {\n    if (!this.#drawingAC) {\n      return null;\n    }\n    this.#uiManager.setCurrentDrawingSession(null);\n    this.#drawingAC.abort();\n    this.#drawingAC = null;\n    this.#focusedElement = null;\n    return this.#currentEditorType.endDrawing(isAborted);\n  }\n  findNewParent(editor, x, y) {\n    const layer = this.#uiManager.findParent(x, y);\n    if (layer === null || layer === this) {\n      return false;\n    }\n    layer.changeParent(editor);\n    return true;\n  }\n  commitOrRemove() {\n    if (this.#drawingAC) {\n      this.endDrawingSession();\n      return true;\n    }\n    return false;\n  }\n  onScaleChanging() {\n    if (!this.#drawingAC) {\n      return;\n    }\n    this.#currentEditorType.onScaleChangingWhenDrawing(this);\n  }\n  destroy() {\n    this.commitOrRemove();\n    if (this.#uiManager.getActive()?.parent === this) {\n      this.#uiManager.commitOrRemove();\n      this.#uiManager.setActiveEditor(null);\n    }\n    if (this.#editorFocusTimeoutId) {\n      clearTimeout(this.#editorFocusTimeoutId);\n      this.#editorFocusTimeoutId = null;\n    }\n    for (const editor of this.#editors.values()) {\n      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n      editor.setParent(null);\n      editor.isAttachedToDOM = false;\n      editor.div.remove();\n    }\n    this.div = null;\n    this.#editors.clear();\n    this.#uiManager.removeLayer(this);\n  }\n  #cleanup() {\n    for (const editor of this.#editors.values()) {\n      if (editor.isEmpty()) {\n        editor.remove();\n      }\n    }\n  }\n  async render({\n    viewport\n  }) {\n    this.viewport = viewport;\n    setLayerDimensions(this.div, viewport);\n    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {\n      this.add(editor);\n      editor.rebuild();\n    }\n    await this.#uiManager.findClonesForPage(this);\n    this.div.hidden = this.isEmpty;\n    this.updateMode();\n  }\n  update({\n    viewport\n  }) {\n    this.#uiManager.commitOrRemove();\n    this.#cleanup();\n    const oldRotation = this.viewport.rotation;\n    const rotation = viewport.rotation;\n    this.viewport = viewport;\n    setLayerDimensions(this.div, {\n      rotation\n    });\n    if (oldRotation !== rotation) {\n      for (const editor of this.#editors.values()) {\n        editor.rotate(rotation);\n      }\n    }\n  }\n  get pageDimensions() {\n    const {\n      pageWidth,\n      pageHeight\n    } = this.viewport.rawDims;\n    return [pageWidth, pageHeight];\n  }\n  get scale() {\n    return this.#uiManager.viewParameters.realScale;\n  }\n}\n\n;// ./src/display/draw_layer.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction compareTextLayers(a, b) {\n  if (a === b) {\n    return 0;\n  }\n  return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\nfunction getTextLayer(node) {\n  if (!node) {\n    return null;\n  }\n  if (node.nodeType === Node.ELEMENT_NODE) {\n    return node.closest(\".textLayer\");\n  }\n  return node.parentElement?.closest(\".textLayer\") || null;\n}\nfunction isPointBefore(nodeA, offsetA, nodeB, offsetB) {\n  if (nodeA === nodeB) {\n    return offsetA <= offsetB;\n  }\n  const relation = nodeA.compareDocumentPosition(nodeB);\n  if (relation & Node.DOCUMENT_POSITION_FOLLOWING) {\n    return true;\n  }\n  if (relation & Node.DOCUMENT_POSITION_PRECEDING) {\n    return false;\n  }\n  return null;\n}\nfunction normalizeEdgeBoundary(container, offset, textLayer) {\n  if (container.nodeType !== Node.ELEMENT_NODE || !container.classList.contains(\"textLayer\") || offset !== container.childNodes.length) {\n    return {\n      container,\n      offset\n    };\n  }\n  let lastNode = container.lastChild;\n  if (lastNode?.nodeType === Node.ELEMENT_NODE && lastNode.classList.contains(\"endOfContent\")) {\n    lastNode = lastNode.previousSibling;\n  }\n  if (!lastNode || !textLayer.contains(lastNode)) {\n    return null;\n  }\n  if (lastNode.nodeType === Node.TEXT_NODE) {\n    return {\n      container: lastNode,\n      offset: lastNode.textContent.length\n    };\n  }\n  return {\n    container: lastNode,\n    offset: lastNode.childNodes.length\n  };\n}\nclass DrawLayer {\n  #parent = null;\n  #mapping = new Map();\n  #textLayer = null;\n  #filterFactory = null;\n  #pageColors = null;\n  #textLayerObserver = null;\n  #toUpdate = new Map();\n  static #id = 0;\n  static #selectionId = 0;\n  static #selectionChangeAC = null;\n  static #selections = new Set();\n  static #isSelecting = false;\n  static #textLayerSet = new Set();\n  static #textLayers = new WeakMap();\n  constructor({\n    filterFactory = null,\n    pageColors = null,\n    pageIndex,\n    textLayer = null\n  }) {\n    this.pageIndex = pageIndex;\n    this.#filterFactory = filterFactory;\n    this.#pageColors = pageColors;\n    if (textLayer) {\n      const previousData = DrawLayer.#textLayers.get(textLayer);\n      if (previousData?.selectionDiv) {\n        previousData.selectionDiv.remove();\n        DrawLayer.#selections.delete(previousData.selectionDiv);\n      }\n      DrawLayer.#textLayers.set(textLayer, {\n        drawLayer: this\n      });\n      DrawLayer.#textLayerSet.add(textLayer);\n      this.#textLayer = textLayer;\n      this.#textLayerObserver = new MutationObserver(records => {\n        if (!this.#parent || !this.#textLayer?.isConnected || !DrawLayer.#hasSelection()) {\n          return;\n        }\n        for (const {\n          addedNodes\n        } of records) {\n          for (const node of addedNodes) {\n            if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains(\"endOfContent\")) {\n              DrawLayer.#selectionChange();\n              return;\n            }\n          }\n        }\n      });\n      this.#textLayerObserver.observe(textLayer, {\n        childList: true\n      });\n      if (DrawLayer.#selectionChangeAC === null) {\n        DrawLayer.#selectionChangeAC = new AbortController();\n        const {\n          signal\n        } = DrawLayer.#selectionChangeAC;\n        document.addEventListener(\"selectionchange\", DrawLayer.#selectionChange.bind(DrawLayer), {\n          signal\n        });\n        document.addEventListener(\"pointerdown\", () => {\n          DrawLayer.#isSelecting = true;\n        }, {\n          signal\n        });\n        document.addEventListener(\"pointerup\", () => {\n          DrawLayer.#isSelecting = false;\n        }, {\n          signal\n        });\n        window.addEventListener(\"blur\", () => {\n          DrawLayer.#isSelecting = false;\n        }, {\n          signal\n        });\n      }\n    }\n  }\n  setParent(parent) {\n    if (!this.#parent) {\n      this.#parent = parent;\n      if (this.#textLayer?.isConnected && DrawLayer.#hasSelection()) {\n        DrawLayer.#selectionChange();\n      }\n      return;\n    }\n    if (this.#parent !== parent) {\n      if (this.#mapping.size > 0) {\n        for (const root of this.#mapping.values()) {\n          root.remove();\n          parent.append(root);\n        }\n      }\n      this.#parent = parent;\n    }\n  }\n  static #cleanupTextLayerSelection(textLayer) {\n    const textLayerData = this.#textLayers.get(textLayer);\n    if (!textLayerData?.selectionDiv) {\n      return;\n    }\n    textLayerData.selectionDiv.remove();\n    this.#selections.delete(textLayerData.selectionDiv);\n    textLayerData.selectionDiv = null;\n    textLayerData.path = null;\n  }\n  static #hasSelection() {\n    const selection = document.getSelection();\n    return !!selection && !selection.isCollapsed;\n  }\n  static #getOrderedTextLayers() {\n    return [...this.#textLayerSet].filter(textLayer => textLayer.isConnected).sort(compareTextLayers);\n  }\n  static #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      for (const root of this.#selections) {\n        root.remove();\n      }\n      this.#selections.clear();\n      return;\n    }\n    const rotators = new WeakMap();\n    const orderedTextLayers = this.#getOrderedTextLayers();\n    const ranges = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      let {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      } = range;\n      let startTextLayer = getTextLayer(startContainer);\n      let endTextLayer = getTextLayer(endContainer);\n      const startMissing = startTextLayer === null;\n      const endMissing = endTextLayer === null;\n      if (this.#isSelecting && startMissing !== endMissing) {\n        return;\n      }\n      if (selection.rangeCount === 1) {\n        const {\n          anchorNode,\n          anchorOffset,\n          focusNode,\n          focusOffset\n        } = selection;\n        const anchorLayer = getTextLayer(anchorNode);\n        const focusLayer = getTextLayer(focusNode);\n        const anchorBeforeFocus = isPointBefore(anchorNode, anchorOffset, focusNode, focusOffset);\n        if (anchorLayer && focusLayer && anchorBeforeFocus !== null) {\n          if (anchorBeforeFocus) {\n            startContainer = anchorNode;\n            startOffset = anchorOffset;\n            startTextLayer = anchorLayer;\n            endContainer = focusNode;\n            endOffset = focusOffset;\n            endTextLayer = focusLayer;\n          } else {\n            startContainer = focusNode;\n            startOffset = focusOffset;\n            startTextLayer = focusLayer;\n            endContainer = anchorNode;\n            endOffset = anchorOffset;\n            endTextLayer = anchorLayer;\n          }\n        }\n      }\n      const activeTextLayers = orderedTextLayers.filter(textLayer => range.intersectsNode(textLayer));\n      if (activeTextLayers.length === 0) {\n        continue;\n      }\n      let boundarySubstituted = false;\n      if (!startTextLayer) {\n        startTextLayer = activeTextLayers[0];\n        startContainer = startTextLayer;\n        startOffset = 0;\n        boundarySubstituted = true;\n      }\n      if (!endTextLayer) {\n        endTextLayer = activeTextLayers.at(-1);\n        endContainer = endTextLayer;\n        endOffset = endTextLayer.childNodes.length;\n        boundarySubstituted = true;\n      }\n      if (endContainer.nodeType === Node.ELEMENT_NODE) {\n        if (endContainer.classList.contains(\"endOfContent\")) {\n          const previousNode = endContainer.previousSibling;\n          if (!previousNode) {\n            continue;\n          }\n          endContainer = previousNode;\n          endOffset = previousNode.nodeType === Node.TEXT_NODE ? previousNode.textContent.length : previousNode.childNodes.length;\n        } else if (endContainer.classList.contains(\"textLayer\") && endContainer.childNodes.length === endOffset) {\n          const normalizedEnd = normalizeEdgeBoundary(endContainer, endOffset, endTextLayer);\n          if (!normalizedEnd) {\n            continue;\n          }\n          endContainer = normalizedEnd.container;\n          endOffset = normalizedEnd.offset;\n        }\n      }\n      if (startContainer.nodeType === Node.ELEMENT_NODE) {\n        const normalizedStart = normalizeEdgeBoundary(startContainer, startOffset, startTextLayer);\n        if (!normalizedStart) {\n          continue;\n        }\n        startContainer = normalizedStart.container;\n        startOffset = normalizedStart.offset;\n      }\n      if (startTextLayer === endTextLayer && !boundarySubstituted && activeTextLayers.includes(startTextLayer)) {\n        ranges.push([range, startTextLayer]);\n        continue;\n      }\n      for (const textLayer of activeTextLayers) {\n        const firstNode = textLayer.firstChild;\n        if (!firstNode) {\n          continue;\n        }\n        const subRange = document.createRange();\n        if (textLayer === startTextLayer) {\n          subRange.setStart(startContainer, startOffset);\n        } else {\n          subRange.setStartBefore(firstNode);\n        }\n        if (textLayer === endTextLayer) {\n          subRange.setEnd(endContainer, endOffset);\n        } else {\n          const lastNode = textLayer.lastChild;\n          if (!lastNode) {\n            continue;\n          }\n          if (lastNode.nodeType === Node.ELEMENT_NODE && lastNode.classList.contains(\"endOfContent\")) {\n            const lastTextNode = lastNode.previousSibling;\n            if (!lastTextNode) {\n              continue;\n            }\n            subRange.setEndAfter(lastTextNode);\n          } else {\n            subRange.setEndAfter(lastNode);\n          }\n        }\n        if (!subRange.collapsed) {\n          ranges.push([subRange, textLayer]);\n        }\n      }\n    }\n    const selectedTextLayers = new Set(ranges.map(range => range[1]));\n    for (const textLayer of this.#textLayerSet) {\n      if (!selectedTextLayers.has(textLayer)) {\n        this.#cleanupTextLayerSelection(textLayer);\n      }\n    }\n    for (const [range, textLayer] of ranges) {\n      const textLayerData = DrawLayer.#textLayers.get(textLayer);\n      if (!textLayerData) {\n        continue;\n      }\n      let rotator = rotators.get(textLayer);\n      if (!rotator) {\n        const clientRect = textLayer.getBoundingClientRect();\n        rotator = (x, y, w, h) => ({\n          x: (x - clientRect.x) / clientRect.width,\n          y: (y - clientRect.y) / clientRect.height,\n          width: w / clientRect.width,\n          height: h / clientRect.height\n        });\n        rotators.set(textLayer, rotator);\n      }\n      const boxes = [];\n      for (let {\n        x,\n        y,\n        width,\n        height\n      } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        ({\n          x,\n          y,\n          width,\n          height\n        } = rotator(x, y, width, height));\n        if (width === 1 && height === 1) {\n          continue;\n        }\n        boxes.push(`M${x} ${y} h${width} v${height} h-${width} Z`);\n      }\n      if (boxes.length === 0) {\n        continue;\n      }\n      const drawLayer = textLayerData.drawLayer;\n      let div = textLayerData.selectionDiv;\n      let path = textLayerData.path;\n      if (!div) {\n        const clipPathId = `clip_selection_${DrawLayer.#selectionId++}`;\n        div = document.createElement(\"div\");\n        div.className = \"selection\";\n        div.style.clipPath = `url(#${clipPathId})`;\n        const selectionStyle = drawLayer.#filterFactory?.createSelectionStyle(drawLayer.#pageColors);\n        if (selectionStyle) {\n          for (const [name, value] of Object.entries(selectionStyle)) {\n            div.style.setProperty(name, value);\n          }\n        }\n        const svg = DrawLayer._svgFactory.create(1, 1, true);\n        svg.setAttribute(\"aria-hidden\", \"true\");\n        svg.setAttribute(\"width\", \"100%\");\n        svg.setAttribute(\"height\", \"100%\");\n        const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n        clipPath.setAttribute(\"id\", clipPathId);\n        clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n        path = DrawLayer._svgFactory.createElement(\"path\");\n        clipPath.append(path);\n        svg.append(clipPath);\n        div.append(svg);\n        textLayerData.path = path;\n        textLayerData.selectionDiv = div;\n      }\n      if (!div.parentNode && drawLayer.#parent) {\n        drawLayer.#parent.append(div);\n        this.#selections.add(div);\n      }\n      path.setAttribute(\"d\", boxes.join(\" \"));\n    }\n  }\n  static get _svgFactory() {\n    return shadow(this, \"_svgFactory\", new DOMSVGFactory());\n  }\n  static #setBox(element, [x, y, width, height]) {\n    const {\n      style\n    } = element;\n    style.top = `${100 * y}%`;\n    style.left = `${100 * x}%`;\n    style.width = `${100 * width}%`;\n    style.height = `${100 * height}%`;\n  }\n  #createSVG() {\n    const svg = DrawLayer._svgFactory.create(1, 1, true);\n    this.#parent.append(svg);\n    svg.setAttribute(\"aria-hidden\", \"true\");\n    return svg;\n  }\n  #createClipPath(defs, pathId) {\n    const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n    defs.append(clipPath);\n    const clipPathId = `clip_${pathId}`;\n    clipPath.setAttribute(\"id\", clipPathId);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    const clipPathUse = DrawLayer._svgFactory.createElement(\"use\");\n    clipPath.append(clipPathUse);\n    clipPathUse.setAttribute(\"href\", `#${pathId}`);\n    clipPathUse.classList.add(\"clip\");\n    return clipPathId;\n  }\n  #updateProperties(element, properties) {\n    for (const [key, value] of Object.entries(properties)) {\n      if (value === null) {\n        element.removeAttribute(key);\n      } else {\n        element.setAttribute(key, value);\n      }\n    }\n  }\n  draw(properties, isPathUpdatable = false, hasClip = false) {\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n    if (isPathUpdatable) {\n      this.#toUpdate.set(id, path);\n    }\n    const clipPathId = hasClip ? this.#createClipPath(defs, pathId) : null;\n    const use = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use);\n    use.setAttribute(\"href\", `#${pathId}`);\n    this.updateProperties(root, properties);\n    this.#mapping.set(id, root);\n    return {\n      id,\n      clipPathId: `url(#${clipPathId})`\n    };\n  }\n  drawOutline(properties, mustRemoveSelfIntersections) {\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n    let maskId;\n    if (mustRemoveSelfIntersections) {\n      const mask = DrawLayer._svgFactory.createElement(\"mask\");\n      defs.append(mask);\n      maskId = `mask_${id}`;\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"objectBoundingBox\");\n      const rect = DrawLayer._svgFactory.createElement(\"rect\");\n      mask.append(rect);\n      rect.setAttribute(\"width\", \"1\");\n      rect.setAttribute(\"height\", \"1\");\n      rect.setAttribute(\"fill\", \"white\");\n      const use = DrawLayer._svgFactory.createElement(\"use\");\n      mask.append(use);\n      use.setAttribute(\"href\", `#${pathId}`);\n      use.setAttribute(\"stroke\", \"none\");\n      use.setAttribute(\"fill\", \"black\");\n      use.setAttribute(\"fill-rule\", \"nonzero\");\n      use.classList.add(\"mask\");\n    }\n    const use1 = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use1);\n    use1.setAttribute(\"href\", `#${pathId}`);\n    if (maskId) {\n      use1.setAttribute(\"mask\", `url(#${maskId})`);\n    }\n    const use2 = use1.cloneNode();\n    root.append(use2);\n    use1.classList.add(\"mainOutline\");\n    use2.classList.add(\"secondaryOutline\");\n    this.updateProperties(root, properties);\n    this.#mapping.set(id, root);\n    return id;\n  }\n  finalizeDraw(id, properties) {\n    this.#toUpdate.delete(id);\n    this.updateProperties(id, properties);\n  }\n  updateProperties(elementOrId, properties) {\n    if (!properties) {\n      return;\n    }\n    const {\n      root,\n      bbox,\n      rootClass,\n      path\n    } = properties;\n    const element = typeof elementOrId === \"number\" ? this.#mapping.get(elementOrId) : elementOrId;\n    if (!element) {\n      return;\n    }\n    if (root) {\n      this.#updateProperties(element, root);\n    }\n    if (bbox) {\n      DrawLayer.#setBox(element, bbox);\n    }\n    if (rootClass) {\n      const {\n        classList\n      } = element;\n      for (const [className, value] of Object.entries(rootClass)) {\n        classList.toggle(className, value);\n      }\n    }\n    if (path) {\n      const defs = element.firstElementChild;\n      const pathElement = defs.firstElementChild;\n      this.#updateProperties(pathElement, path);\n    }\n  }\n  updateParent(id, layer) {\n    if (layer === this) {\n      return;\n    }\n    const root = this.#mapping.get(id);\n    if (!root) {\n      return;\n    }\n    layer.#parent.append(root);\n    this.#mapping.delete(id);\n    layer.#mapping.set(id, root);\n  }\n  remove(id) {\n    this.#toUpdate.delete(id);\n    if (this.#parent === null) {\n      return;\n    }\n    this.#mapping.get(id).remove();\n    this.#mapping.delete(id);\n  }\n  destroy() {\n    this.#parent = null;\n    for (const root of this.#mapping.values()) {\n      root.remove();\n    }\n    this.#mapping.clear();\n    this.#toUpdate.clear();\n    this.#textLayerObserver?.disconnect();\n    this.#textLayerObserver = null;\n    if (this.#textLayer) {\n      const data = DrawLayer.#textLayers.get(this.#textLayer);\n      if (data?.drawLayer === this) {\n        DrawLayer.#cleanupTextLayerSelection(this.#textLayer);\n        DrawLayer.#textLayers.delete(this.#textLayer);\n        DrawLayer.#textLayerSet.delete(this.#textLayer);\n        if (DrawLayer.#textLayerSet.size === 0) {\n          DrawLayer.#selectionChangeAC?.abort();\n          DrawLayer.#selectionChangeAC = null;\n          DrawLayer.#isSelecting = false;\n        }\n      }\n      this.#textLayer = null;\n    }\n  }\n}\n\n;// ./src/display/text_layer_images.js\n\n\n\nfunction percentage(value) {\n  return `${(value * 100).toFixed(2)}%`;\n}\nclass TextLayerImages {\n  #coordinates = [];\n  #coordinatesByElement = new Map();\n  #getPageCanvas = null;\n  #minSize = 0;\n  #pageWidth = 0;\n  #pageHeight = 0;\n  static #activeImage = null;\n  constructor(minSize, coordinates, viewport, getPageCanvas) {\n    this.#minSize = minSize;\n    this.#coordinates = coordinates;\n    this.#pageWidth = viewport.rawDims.pageWidth;\n    this.#pageHeight = viewport.rawDims.pageHeight;\n    this.#getPageCanvas = getPageCanvas;\n  }\n  render() {\n    const container = document.createElement(\"div\");\n    container.className = \"textLayerImages\";\n    for (let i = 0; i < this.#coordinates.length; i += 6) {\n      const el = this.#createImagePlaceholder(this.#coordinates.subarray(i, i + 6));\n      if (el) {\n        container.append(el);\n      }\n    }\n    container.addEventListener(\"contextmenu\", event => {\n      if (!(event.target instanceof HTMLCanvasElement)) {\n        return;\n      }\n      const imgElement = event.target;\n      const coords = this.#coordinatesByElement.get(imgElement);\n      if (!coords) {\n        return;\n      }\n      const activeImage = TextLayerImages.#activeImage?.deref();\n      if (activeImage === imgElement) {\n        return;\n      }\n      if (activeImage) {\n        activeImage.width = 0;\n        activeImage.height = 0;\n      }\n      TextLayerImages.#activeImage = new WeakRef(imgElement);\n      const {\n        inverseTransform,\n        x1,\n        y1,\n        width,\n        height\n      } = coords;\n      const pageCanvas = this.#getPageCanvas();\n      const imageX1 = Math.ceil(x1 * pageCanvas.width);\n      const imageY1 = Math.ceil(y1 * pageCanvas.height);\n      const imageX2 = Math.floor((x1 + width / this.#pageWidth) * pageCanvas.width);\n      const imageY2 = Math.floor((y1 + height / this.#pageHeight) * pageCanvas.height);\n      imgElement.width = imageX2 - imageX1;\n      imgElement.height = imageY2 - imageY1;\n      const ctx = imgElement.getContext(\"2d\");\n      ctx.setTransform(...inverseTransform);\n      ctx.translate(-imageX1, -imageY1);\n      ctx.drawImage(pageCanvas, 0, 0);\n    });\n    return container;\n  }\n  #createImagePlaceholder([x1, y1, x2, y2, x3, y3]) {\n    const width = Math.hypot((x3 - x1) * this.#pageWidth, (y3 - y1) * this.#pageHeight);\n    const height = Math.hypot((x2 - x1) * this.#pageWidth, (y2 - y1) * this.#pageHeight);\n    if (width < this.#minSize || height < this.#minSize) {\n      return null;\n    }\n    const transform = [(x3 - x1) * this.#pageWidth / width, (y3 - y1) * this.#pageHeight / width, (x2 - x1) * this.#pageWidth / height, (y2 - y1) * this.#pageHeight / height, 0, 0];\n    const inverseTransform = Util.inverseTransform(transform);\n    const imgElement = document.createElement(\"canvas\");\n    imgElement.className = \"textLayerImagePlaceholder\";\n    imgElement.width = 0;\n    imgElement.height = 0;\n    Object.assign(imgElement.style, {\n      opacity: 0,\n      position: \"absolute\",\n      left: percentage(x1),\n      top: percentage(y1),\n      width: percentage(width / this.#pageWidth),\n      height: percentage(height / this.#pageHeight),\n      transformOrigin: \"0% 0%\",\n      transform: `matrix(${transform.join(\",\")})`\n    });\n    this.#coordinatesByElement.set(imgElement, {\n      inverseTransform,\n      width,\n      height,\n      x1,\n      y1\n    });\n    return imgElement;\n  }\n}\n\n;// ./src/pdf.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\n  globalThis._pdfjsTestingUtils = {\n    HighlightOutliner: HighlightOutliner\n  };\n}\nglobalThis.pdfjsLib = {\n  AbortException: AbortException,\n  AnnotationEditorLayer: AnnotationEditorLayer,\n  AnnotationEditorParamsType: AnnotationEditorParamsType,\n  AnnotationEditorType: AnnotationEditorType,\n  AnnotationEditorUIManager: AnnotationEditorUIManager,\n  AnnotationLayer: AnnotationLayer,\n  AnnotationMode: AnnotationMode,\n  AnnotationType: AnnotationType,\n  applyOpacity: applyOpacity,\n  build: build,\n  ColorPicker: ColorPicker,\n  createValidAbsoluteUrl: createValidAbsoluteUrl,\n  CSSConstants: CSSConstants,\n  DOMSVGFactory: DOMSVGFactory,\n  DrawLayer: DrawLayer,\n  FeatureTest: FeatureTest,\n  fetchData: fetchData,\n  findContrastColor: findContrastColor,\n  getDocument: getDocument,\n  getFilenameFromUrl: getFilenameFromUrl,\n  getPdfFilenameFromUrl: getPdfFilenameFromUrl,\n  getRGB: getRGB,\n  getRGBA: getRGBA,\n  getUuid: getUuid,\n  GlobalWorkerOptions: GlobalWorkerOptions,\n  ImageKind: ImageKind,\n  InvalidPDFException: InvalidPDFException,\n  isDataScheme: isDataScheme,\n  isPdfFile: isPdfFile,\n  isValidExplicitDest: isValidExplicitDest,\n  makeArr: makeArr,\n  makeMap: makeMap,\n  makeObj: makeObj,\n  MathClamp: MathClamp,\n  noContextMenu: noContextMenu,\n  normalizeUnicode: normalizeUnicode,\n  OPS: OPS,\n  OutputScale: OutputScale,\n  PasswordException: PasswordException,\n  PasswordResponses: PasswordResponses,\n  PDFDataRangeTransport: PDFDataRangeTransport,\n  PDFDateString: PDFDateString,\n  PDFWorker: PDFWorker,\n  PermissionFlag: PermissionFlag,\n  PixelsPerInch: PixelsPerInch,\n  RenderingCancelledException: RenderingCancelledException,\n  renderRichText: renderRichText,\n  ResponseException: ResponseException,\n  setLayerDimensions: setLayerDimensions,\n  shadow: shadow,\n  SignatureExtractor: SignatureExtractor,\n  stopEvent: stopEvent,\n  SupportedImageMimeTypes: SupportedImageMimeTypes,\n  TextLayer: TextLayer,\n  TextLayerImages: TextLayerImages,\n  TouchManager: TouchManager,\n  updateUrlHash: updateUrlHash,\n  Util: Util,\n  VerbosityLevel: VerbosityLevel,\n  version: version,\n  XfaLayer: XfaLayer\n};\n\nexport { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, CSSConstants, ColorPicker, DOMSVGFactory, DrawLayer, FeatureTest, GlobalWorkerOptions, ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PasswordException, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TextLayerImages, TouchManager, Util, VerbosityLevel, XfaLayer, applyOpacity, build, createValidAbsoluteUrl, fetchData, findContrastColor, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getRGB, getRGBA, getUuid, isDataScheme, isPdfFile, isValidExplicitDest, makeArr, makeMap, makeObj, noContextMenu, normalizeUnicode, renderRichText, setLayerDimensions, shadow, stopEvent, updateUrlHash, version };\n\n//# sourceMappingURL=pdf.mjs.map","// @ts-ignore - pdfjs-dist 类型路径\n// Electron 环境使用 legacy 构建版本以避免 Web Streams API 兼容性问题\n// 参考: https://github.com/mozilla/pdf.js/issues/16214\nimport * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { configurePdfWorker } from '@eternalheart/file-preview-core';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n  /**\n   * PDF.js worker 文件路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/legacy/build/pdf.worker.min.mjs`\n   * 注意：为兼容 Electron 环境，使用 legacy 构建版本\n   */\n  workerSrc?: string;\n\n  /**\n   * CMap 文件目录路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n   */\n  cMapUrl?: string;\n\n  /**\n   * 是否使用压缩的 CMap 文件\n   * 默认: true\n   */\n  cMapPacked?: boolean;\n\n  /**\n   * PDF.js 标准字体文件目录路径\n   * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/standard_fonts/`\n   */\n  standardFontDataUrl?: string;\n}\n\n/**\n * 配置 PDF.js\n *\n * 注意：为兼容 Electron 环境，本库使用 pdfjs-dist 的 legacy 构建版本。\n * 如果手动配置 workerSrc，请确保使用对应的 legacy worker 文件。\n *\n * @example\n * ```ts\n * // 使用本地静态文件（推荐用于生产环境，Electron 环境必须使用 legacy 版本）\n * configurePdfjs({\n *   workerSrc: '/pdfjs/pdf.worker.min.mjs', // 确保使用 legacy/build/pdf.worker.min.mjs\n *   cMapUrl: '/pdfjs/cmaps/',\n *   cMapPacked: true,\n *   standardFontDataUrl: '/pdfjs/standard_fonts/',\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN（默认配置，自动使用 legacy 版本）\n * configurePdfjs(); // 自动使用 unpkg CDN 的 legacy 构建\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n  configurePdfWorker(pdfjsLib, options);\n}\n\nexport { pdfjsLib as pdfjs };\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\nexport { FilePreviewEmbed } from './FilePreviewEmbed';\nexport { FilePreviewContent } from './FilePreviewContent';\n\n// 导出类型定义\nexport type {\n  PreviewFile,\n  PreviewFileLink,\n  PreviewFileInput,\n  FileType,\n  ToolbarAction,\n  PreviewState,\n  CustomRenderer,\n  CustomRendererContext,\n  CustomRendererEventPayload,\n  RequestHandler,\n  RequestInitFactory,\n  RequestOptions,\n  Fetcher,\n  ShouldFetchAsBlob,\n} from './types';\n\n// 导出工具函数和常量\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\nexport { SUPPORTED_FILE_TYPES } from '@eternalheart/file-preview-core';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n// 导出 i18n 国际化\nexport { LocaleProvider, useTranslator, useLocale } from './i18n/LocaleContext';\nexport type { LocaleProviderProps, LocaleContextValue } from './i18n/LocaleContext';\nexport type {\n  Locale,\n  Messages,\n  MessageKey,\n  Translator,\n  TranslateParams,\n  CreateTranslatorOptions,\n  Theme,\n} from '@eternalheart/file-preview-core';\n"],"names":["LM","u","I","P","J","M","r","K","QM","EM","UM","w","zM","g","tM","VM","aM","C","y","l","s","j","T","X","S","a","RM","e","q","OM","nM","uM","F","rM","L","_","$","Q","o","R","MM","B","IM","D","x","Y","A","G","Z","E","U","d","W","c","b","KM","PM","wM","vM","eM","n","qM","_M","MI","CM","gM","yM","lM","sM","m","TM","SM","jM","XM","BM","DM","z","II","KI","N","YM","AM","GM","t","xM","f","i","dM","H","PI","wI","ZM","bM","p","WM","cM","CI","pM","JM","iM","hM","h","TI","SI","oM","O","HM","V","mM","kM","jI","XI","LocaleContext","createContext","LocaleProvider","locale","messages","children","value","useMemo","createTranslator","jsx","fallbackTranslator","getFallbackTranslator","useTranslator","ctx","useContext","useLocale","ThemeContext","ThemeProvider","theme","useResolvedTheme","defaultValue","url","init","RequestContext","RequestProvider","requestInit","requestHandler","shouldFetchAsBlob","createFetcher","useFetcher","useResolvedUrl","file","fetcher","needBlob","blobUrl","setBlobUrl","useState","createdRef","useRef","useEffect","cancelled","fetchAsBlobUrl","next","err","UnsupportedRenderer","fileName","fileType","onDownload","jsxs","FileQuestion","Download","useKeyboardNavigation","mode","currentIndex","totalFiles","onNavigate","onClose","rootRef","handlersRef","handleKeyDown","el","useThemeMode","systemDark","setSystemDark","mql","handler","ToolbarButton","icon","label","onClick","disabled","active","ariaKeyshortcuts","stateClass","renderToolbarItems","groups","dividerClass","group","gi","arr","React","item","ii","FilePreviewToolbar","toolGroups","showClose","showDownload","showCloseButton","actionGroups","motion","RendererError","error","onRetry","AlertCircle","RotateCw","RendererErrorBoundary","props","__publicField","errorInfo","_b","_a","RendererLoading","FilePreviewRenderer","currentFile","customRenderer","customRendererContext","onError","reset","Suspense","NAV_HIDE_DELAY","NavArrows","containerRef","hasPrev","hasNext","onPrev","onNext","resetKey","visible","setVisible","timerRef","scheduleHide","useCallback","show","prev","Fragment","ChevronLeft","ChevronRight","ImageRenderer","lazy","PdfRenderer","DocxRenderer","XlsxRenderer","PptxRenderer","MsgRenderer","EpubRenderer","MobiRenderer","VideoRenderer","AudioRenderer","MarkdownRenderer","JsonRenderer","CsvRenderer","XmlRenderer","SubtitleRenderer","ZipRenderer","TextRenderer","FontRenderer","CadRenderer","BUILTIN_RENDERERS","MAX_ZIP_NESTING_DEPTH","FilePreviewContent","FilePreviewContentInner","files","customRenderers","zipNestingDepth","userMessages","headless","onCustomEvent","_requestInit","_requestHandler","_shouldFetchAsBlob","normalizedFiles","normalizeFiles","resolvedUrl","renderer","getFileType","resolvedTheme","contentRef","rendererInstanceRef","rendererToolbarGroups","setRendererToolbarGroups","cleanupRef","setupRenderer","initialGroups","unsubscribe","interval","rendererRef","emitCustom","name","payload","customCtx","handleDownload","downloadFileWithFetcher","resolveShowClose","rendererConfig","RendererComponent","rendererProps","FilePreviewModal","isOpen","originalOverflow","originalPaddingRight","scrollbarWidth","modalContent","AnimatePresence","createPortal","FilePreviewEmbed","width","height","className","style","__webpack_modules__","module","__unused_webpack_exports","__webpack_require__","isCallable","tryToString","$TypeError","argument","isPossiblePrototype","$String","has","it","WeakMapHelpers","weakmap","set","remove","key","wellKnownSymbol","create","defineProperty","UNSCOPABLES","ArrayPrototype","isPrototypeOf","Prototype","isObject","classof","globalThis","uncurryThisAccessor","ArrayBuffer","TypeError","NATIVE_ARRAY_BUFFER","arrayBufferByteLength","DataView","isDetached","DESCRIPTORS","hasOwn","createNonEnumerableProperty","defineBuiltIn","defineBuiltInAccessor","getPrototypeOf","setPrototypeOf","uid","InternalStateModule","enforceInternalState","getInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","NAME","Constructor","TypedArrayConstructorsList","BigIntArrayConstructorsList","isView","klass","getTypedArrayConstructor","proto","state","isTypedArray","aTypedArray","aTypedArrayConstructor","exportTypedArrayMethod","KEY","property","forced","options","ARRAY","TypedArrayConstructor","exportTypedArrayStaticMethod","lengthOfArrayLike","list","$length","index","length","result","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","isArray","getOwnPropertyDescriptor","SILENT_ON_NON_WRITABLE_LENGTH_SET","uncurryThis","commonAlphabet","base64Alphabet","base64UrlAlphabet","inverse","characters","anObject","iteratorClose","iterator","fn","ENTRIES","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","$Object","CORRECT_ARGUMENTS","tryGet","tag","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","target","source","exceptions","keys","fails","done","createPropertyDescriptor","object","bitmap","makeBuiltIn","descriptor","defineGlobalProperty","simple","src","document","EXISTS","MAX_SAFE_INTEGER","navigator","userAgent","process","Deno","versions","v8","match","version","$Error","replace","TEST","arg","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","stack","dropEntries","copyConstructorProperties","isForced","TARGET","GLOBAL","STATIC","FORCED","targetProperty","sourceProperty","exec","NATIVE_BIND","FunctionPrototype","apply","call","aCallable","bind","that","test","getDescriptor","PROPER","CONFIGURABLE","method","uncurryThisWithBind","alphabet","aFunction","namespace","obj","getIteratorDirect","getIteratorMethod","stringHandling","getMethod","isNullOrUndefined","Iterators","ITERATOR","usingIterator","iteratorMethod","func","toIntegerOrInfinity","INVALID_SIZE","$RangeError","max","SetRecord","intSize","numSize","check","toObject","hasOwnProperty","getBuiltIn","createElement","split","dummy","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","get","enforce","getterFor","TYPE","metadata","STATE","documentAll","replacement","feature","detection","data","normalize","POLYFILL","NATIVE","string","USE_SYMBOL_AS_UID","$Symbol","record","ITERATOR_INSTEAD_OF_RECORD","step","isArrayIteratorMethod","getIterator","Result","stopped","ResultPrototype","iterable","unboundFunction","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","iterFn","stop","condition","$iterator","callFn","iters","kind","innerResult","innerError","defineBuiltIns","IteratorPrototype","createIterResultObject","iteratorCloseAll","ITERATOR_HELPER","WRAP_FOR_VALID_ITERATOR","NORMAL","THROW","setInternalState","createIteratorProxyPrototype","returnMethod","WrapForValidIteratorPrototype","IteratorHelperPrototype","nextHandler","RETURN_HANDLER_RESULT","IteratorProxy","methodName","METHOD_NAME","ExpectedError","Iterator","CLOSED","IS_PURE","BUGGY_SAFARI_ITERATORS","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","toLength","CONFIGURABLE_FUNCTION_NAME","inspectSource","join","CONFIGURABLE_LENGTH","TEMPLATE","MapPrototype","ceil","floor","unsafeInt","raw","PromiseCapability","resolve","reject","$$resolve","$$reject","$default","definePropertiesModule","enumBugKeys","html","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","activeXDocument","temp","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","NullProtoObject","Properties","__unused_webpack_module","exports","V8_PROTOTYPE_DEFINE_BUG","objectKeys","IE8_DOM_DEFINE","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","propertyIsEnumerableModule","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","constructor","indexOf","push","names","$propertyIsEnumerable","NASHORN_BUG","requireObjectCoercible","aPossiblePrototype","CORRECT_SETTER","setter","input","pref","val","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","concat","getOwnPropertySymbols","$SyntaxError","$parseInt","fromCharCode","at","slice","codePoints","IS_4_HEX_DIGITS","IS_C0_CONTROL_CODE","unterminated","chr","twoChars","fourHexDigits","SetHelpers","iterate","Set","add","aSet","clone","size","getSetRecord","iterateSet","iterateSimple","other","otherRec","SetPrototype","forEach","interruptible","createSetLike","createSetLikeWithInfinitySize","callback","baseSet","setLike","keysIter","SHARED","V8_VERSION","symbol","min","integer","toPrimitive","prim","IndexedObject","trunc","number","len","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","id","postfix","anObjectOrUndefined","aString","base64Map","getAlphabetOption","notDetached","SyntaxError","skipAsciiWhitespace","decodeBase64Chunk","chunk","throwOnExtraBits","chunkLength","triplet","chunkBytes","writeBytes","bytes","elements","written","elementsLength","into","maxLength","lastChunkHandling","stringLength","read","remainingBytes","Uint8Array","stringMatch","segments","params","params2","NATIVE_SYMBOL","passed","required","WeakMapPrototype","Symbol","WellKnownSymbolsStore","createWellKnownSymbol","$includes","addToUnscopables","BROKEN_ON_SPARSE","BROKEN_ON_SPARSE_WITH_FROM_INDEX","setArrayLength","doesNotExceedSafeInteger","INCORRECT_TO_LENGTH","properErrorOnNonWritableLength","argCount","anInstance","createProperty","CONSTRUCTOR","NativeIterator","IteratorConstructor","defineIteratorPrototypeAccessor","notANaN","toPositiveInteger","createIteratorProxy","iteratorHelperThrowsOnInvalidIterator","iteratorHelperWithoutClosingOnEarlyError","DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR","dropWithoutClosingOnEarlyError","limit","remaining","everyWithoutClosingOnEarlyError","predicate","counter","callWithSafeIterationClosing","FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR","filterWithoutClosingOnEarlyError","findWithoutClosingOnEarlyError","getIteratorFlattenable","throwsOnIteratorWithoutReturn","v","FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR","flatMapWithoutClosingOnEarlyError","mapper","inner","forEachWithoutClosingOnEarlyError","MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR","mapWithoutClosingOnEarlyError","someWithoutClosingOnEarlyError","TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR","takeWithoutClosingOnEarlyError","parseJSONString","JSON","Number","nativeParse","enumerableOwnProperties","IS_DIGIT","IS_NON_ZERO_DIGIT","IS_NUMBER_START","IS_WHITESPACE","PRIMITIVE","OBJECT","$parse","reviver","context","Context","root","endIndex","internalize","holder","node","unmodified","elementRecordsLen","nodeIsArray","nodes","internalizeProperty","Node","end","nextIndex","fork","type","start","expectKeypair","closed","expectElement","array","parsed","startIndex","fractionStartIndex","exponentStartIndex","keyword","regex","NO_SOURCE_SUPPORT","PROPER_BASE_PARSE","text","isRawJSON","arraySlice","NATIVE_RAW_JSON","$stringify","charAt","charCodeAt","numberToString","surrogates","leadingSurrogates","trailingSurrogates","MARK","MARK_LENGTH","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithProperSymbolsConversion","replacer","args","$replacer","getReplacerFunction","fixIllFormedJSON","offset","rawLength","element","keysLength","space","replacerFunction","rawStrings","json","MapHelpers","callbackfn","hasKey","$Infinity","$NaN","abs","pow","POW_2_1023","MAX_DOUBLE","MAX_ULP","NOT_A_NUMBER","MINUS_INFINITY","PLUS_INFINITY","MINUS_ZERO","FINITE","twosum","hi","lo","items","numbers","count","partials","overflow","sum","tmp","actuallyUsedPartials","sign","newPromiseCapabilityModule","perform","Promise","ACCEPT_ARGUMENTS","promiseCapability","difference","setMethodAcceptSetLike","SET_LIKE_INCORRECT_BEHAVIOR","intersection","INCORRECT","isDisjointFrom","isSubsetOf","isSupersetOf","symmetricDifference","setMethodGetKeysBeforeCloning","union","ArrayBufferViewCore","isBigIntArray","toBigInt","PROPER_ORDER","THROW_ON_NEGATIVE_FRACTIONAL_INDEX","relativeIndex","actualIndex","numericValue","k","arrayFromConstructorAndList","$fromBase64","INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS","anUint8Array","$fromHex","throwsOnLengthTrackingView","rab","omitPadding","shift","$Array","hex","aWeakMap","aWeakKey","inheritIfRequired","normalizeStringArgument","DOMExceptionConstants","clearErrorStack","DOM_EXCEPTION","Error","NativeDOMException","$DOMException","DOMExceptionPrototype","argumentsLength","message","ERROR_HAS_STACK","DOM_EXCEPTION_HAS_STACK","BUGGY_DESCRIPTOR","FORCED_CONSTRUCTOR","PolyfilledDOMException","PolyfilledDOMExceptionPrototype","constant","constantName","validateArgumentsLength","USE_NATIVE_URL","URL","urlString","base","__webpack_module_cache__","moduleId","cachedModule","definition","prop","isNodeJS","BBOX_INIT","F32_BBOX_INIT","FONT_IDENTITY_MATRIX","LINE_FACTOR","SVG_NS","RenderingIntentFlag","AnnotationMode","AnnotationPrefix","AnnotationEditorPrefix","AnnotationEditorType","AnnotationEditorParamsType","PermissionFlag","TextRenderingMode","ImageKind","AnnotationType","AnnotationBorderStyleType","VerbosityLevel","OPS","DrawOPS","PasswordResponses","verbosity","setVerbosityLevel","level","getVerbosityLevel","info","msg","warn","unreachable","assert","cond","_isValidProtocol","createValidAbsoluteUrl","baseUrl","dots","stringToUTF8String","absoluteUrl","updateUrlHash","hash","allowRel","res","stripPath","str","shadow","nonSerializable","BaseException","PasswordException","code","UnknownErrorException","details","InvalidPDFException","ResponseException","status","missing","FormatError","AbortException","bytesToString","MAX_ARGUMENT_COUNT","strBuf","chunkEnd","stringToBytes","FeatureTest","buffer8","view32","platform","Util","m1","m2","md","pos","p0","p1","transform","m0","m3","m4","m5","pI","pI1","rect","output","r0","r1","r2","r3","a0","a2","a1","a3","b0","b2","b1","b3","m1r0","m1r2","m2r1","m2r3","matrix","first","second","rect1","rect2","xLow","xHigh","yLow","yHigh","minMax","x0","y0","x1","y1","x2","y2","x3","y3","__privateMethod","_Util_static","getExtremum_fn","getExtremumOnCurve_fn","mt","tt","ttt","delta","sqrtDelta","__privateAdd","NormalizeRegex","NormalizationMap","normalizeUnicode","p2","getUuid","buf","_isValidExplicitDest","validRef","validName","dest","page","zoom","argsLen","allowNull","makeArr","makeMap","makeObj","MathClamp","PageViewport","viewBox","userUnit","scale","rotation","offsetX","offsetY","dontFlip","centerX","centerY","rotateA","rotateB","rotateC","rotateD","offsetCanvasX","offsetCanvasY","dims","XfaText","xfa","walk","child","XfaLayer","storage","intent","storedData","event","option","linkService","attributes","isHTMLAnchorElement","parameters","rootHtml","isNotForRichText","rootDiv","textDivs","parent","childHtml","xfaPage","_PixelsPerInch","PixelsPerInch","fetchData","isValidFetchUrl","response","request","RenderingCancelledException","extraDelay","isDataScheme","isPdfFile","filename","getFilenameFromUrl","getPdfFilenameFromUrl","defaultFilename","newURL","decode","decoded","pdfRegex","getLast","hashFilename","StatTimer","_started","__privateGet","longest","noContextMenu","stopEvent","PDFDateString","_regex","__privateSet","matches","year","month","day","hour","minute","universalTimeRelation","offsetHour","offsetMinute","getRGBA","color","parts","getRGB","rgba","getColorValues","colors","span","computedColor","getCurrentTransform","getCurrentTransformInverse","setLayerDimensions","div","viewport","mustFlip","mustRotate","pageWidth","pageHeight","widthStr","heightStr","OutputScale","pixelRatio","maxPixels","maxDim","capAreaFactor","maxAreaScale","maxWidthScale","maxHeightScale","maxScale","winPixels","SupportedImageMimeTypes","ColorScheme","CSSConstants","applyOpacity","opacity","white","RGBToHSL","rgb","HSLToRGB","hsl","computeLuminance","contrastRatio","hsl1","hsl2","lum1","lum2","contrastCache","findContrastColor","baseColor","fixedColor","cachedValue","baseHSL","fixedHSL","isFixedColorDark","minContrast","PRECISION","mid","renderRichText","dir","container","fragment","lines","line","makePathFromDrawOPS","path","_EditorToolbar","editor","_EditorToolbar_instances","_toolbar","_colorPicker","_editor","_buttons","_altText","_comment","_commentButtonDivider","_signatureDescriptionButton","_l10nRemove","editToolbar","signal","_EditorToolbar_static","pointerDown_fn","buttons","position","editorType","_uiManager","button","addListenersToElement_fn","altText","divider_get","comment","beforeElement","divider","colorPicker","signatureManager","tool","beforeSelector","description","focusIn_fn","focusOut_fn","EditorToolbar","FloatingToolbar","uiManager","_FloatingToolbar_instances","boxes","isLTR","getLastPoint_fn","render_fn","makeButton_fn","lastY","lastX","box","buttonClass","l10nId","labelL10nId","clickHandler","INTERNAL_EVT","internalOpt","bindEvents","_CurrentPointers","pointerId","_pointerIds","pointerType","_pointerId","_pointerType","timeStamp","_moveTimestamp","CurrentPointers","IdManager","_id","__privateWrapper","_ImageManager","_ImageManager_instances","_baseId","_cache","svg","image","promise","lastModified","get_fn","blobPromise","blob","canvas","offscreen","rawData","mustRemoveAspectRatioPromise","fileReader","imageElement","imagePromise","ImageManager","CommandManager","maxSize","_commands","_locked","_maxSize","_position","cmd","undo","post","mustExec","overwriteIfSameType","keepUndo","save","_KeyboardManager","callbacks","isMac","hasMacOverride","shortcut","isMacKey","keyName","modifiers","_KeyboardManager_static","parseShortcut_fn","self","shortcuts","fallback","codeToKey_fn","eventModifiers","bubbles","checker","keyPart","part","upper","modifier","KeyboardManager","_ColorManager","RGB","ColorManager","_AnnotationEditorUIManager","viewer","viewerAlert","altTextManager","commentManager","eventBus","pdfDocument","pageColors","highlightColors","enableHighlightFloatingButton","enableUpdatedAddImage","enableNewAltTextWhenAddingImage","mlManager","editorUndoBar","supportsPinchToZoom","_AnnotationEditorUIManager_instances","_abortController","_activeEditor","_allEditableAnnotations","_allEditors","_allLayers","_savedAllLayers","_altTextManager","_annotationStorage","_changedExistingAnnotations","_commandManager","_commentManager","_copyPasteAC","_currentDrawingSession","_currentPageIndex","_deletedAnnotationsElementIds","_draggingEditors","_editorTypes","_editorsToRescale","_enableHighlightFloatingButton","_enableUpdatedAddImage","_enableNewAltTextWhenAddingImage","_filterFactory","_focusMainContainerTimeoutId","_focusManagerAC","_highlightColors","_highlightWhenShiftUp","_floatingToolbar","_idManager","_isEnabled","_isPointerDown","_isWaiting","_keyboardManagerAC","_lastActiveElement","_mainHighlightColorPicker","_missingCanvases","_mlManager","_mode","_selectedEditors","_selectedTextNode","_signatureManager","_pageColors","_showAllStates","_pdfDocument","_previousStates","_translation","_translationTimeoutId","_container","_viewer","_viewerAlert","_updateModeCapability","evtOpts","evt","beforeUnload_fn","addSelectionListener_fn","addDragAndDropListeners_fn","addKeyboardManager_fn","arrowChecker","textInputChecker","_self","small","big","layer","_c","_d","_e","_f","_g","_h","_i","ac","pair","map","hasHCM","isNameForHCM","colorName","firstTime","posX","posY","pageIndex","savedData","isSelected","visibility","pageNumber","onEditorsRendered","layerX","layerY","pagesRotation","methodOfCreation","selection","anchorNode","anchorOffset","focusNode","focusOffset","textLayer","getAnchorElementForSelection_fn","getLayerForTextLayer_fn","isNoneMode","annotationId","storedValue","messageId","onSelectEnd_fn","activeElement","lastEditor","lastActiveElement","removeKeyboardManager_fn","editors","serialized","clipboardData","ex","newEditors","deserializedEditor","addEditorToLayer_fn","selectEditors_fn","oldPageIndex","newPageIndex","promises","isEditing","addFocusManager_fn","addCopyPasteListeners_fn","dispatchUpdateStates_fn","isEmpty_fn","removeFocusManager_fn","removeCopyPasteListeners_fn","types","dispatchUpdateUI_fn","editId","isFromUser","isFromKeyboard","mustEnterInEditMode","editComment","disableAll_fn","enableAll_fn","editorClass","elementIds","allComments","annotationElementId","hasComment","deleted","annotation","popupRef","contentsObj","updateButton","mustWait","lastSelectedEditor_get","ed","drawingEditor","noCommit","totalX","totalY","TIME_TO_WAIT","mustBeAddedInUndoStack","move","newX","newY","savedX","savedY","savedPageIndex","tx","ty","parentWidth","parentHeight","rotator","range","editorId","currentLayer","displayFloatingToolbar_fn","selectionChange_fn","activeLayer","pointerup","AnnotationEditorUIManager","_AltText","_AltText_instances","_altTextDecorative","_altTextButton","_altTextButtonLabel","_altTextTooltip","_altTextTooltipTimeout","_altTextWasFromKeyBoard","_badge","_guessedText","_textWithDisclaimer","_useNewAltTextFlow","_l10nNewButton","l10n","label_get","setState_fn","guessedText","badge","isForCopying","decorative","textWithDisclaimer","cancel","enabled","tooltip","DELAY_TO_SHOW_TOOLTIP","AltText","Comment","_Comment_instances","_commentStandaloneButton","_commentToolbarButton","_commentWasFromKeyBoard","_initialText","_richText","_text","_date","_deleted","_popupPosition","parentX","parentY","selected","hasPopup","parentDimensions","richText","date","isStandalone","_TouchManager","isPinchingDisabled","isPinchingStopped","onPinchStart","onPinching","onPinchEnd","_TouchManager_instances","_isPinching","_isPinchingStopped","_isPinchingDisabled","_onPinchStart","_onPinching","_onPinchEnd","_pointerDownAC","_signal","_touchInfo","_touchManagerAC","_touchMoveAC","onTouchStart_fn","pointerDownAC","opts","cancelPointerDown","opt","onTouchMove_fn","onTouchEnd","onTouchEnd_fn","touch0","touch1","screen0X","screen0Y","screen1X","screen1Y","touchInfo","pTouch0X","pTouch0Y","pTouch1X","pTouch1Y","prevGapX","prevGapY","currGapX","currGapY","distance","pDistance","origin","TouchManager","_AnnotationEditor","_AnnotationEditor_instances","_accessibilityData","_allResizerDivs","_disabled","_dragPointerId","_dragPointerType","_resizersDiv","_lastPointerCoords","_savedDimensions","_fakeAnnotation","_focusAC","_focusedResizerName","_hasBeenClicked","_initialRect","_isEditing","_isInEditMode","_isResizerEnabledForKeyboard","_moveInDOMTimeout","_prevDragX","_prevDragY","_telemetryTimeouts","_touchManager","_isDraggable","_zIndex","pageX","pageY","resize","fakeEditor","FakeEditor","_type","_value","mime","stopResizing_fn","baseX","baseY","translate_fn","bx","by","_borderLineWidth","_AnnotationEditor_static","rotatePoint_fn","parentScale","toolbarButtons","editToolbarDiv","trY","blX","blY","trX","contents","addFocusListeners_fn","touchPinchStartCallback_fn","touchPinchCallback_fn","touchPinchEndCallback_fn","setUpDragSession_fn","selectOnPointerEvent_fn","shiftX","shiftY","creationDate","modificationDate","focus","top","left","bottom","right","innerHeight","innerWidth","_angle","timeout","createResizers_fn","boundResizerKeydown","resizerKeydown_fn","boundResizerBlur","resizerBlur_fn","resizerFocus_fn","firstPosition","nextFirstPosition","setResizerTabIndex_fn","resizerPointermove_fn","action","annotationLayer","firstElementChild","angle","getRotationMatrix_fn","classes","resizerPointerdown_fn","savedDraggable","savedParentCursor","savedCursor","pointerUpCallback","addResizeToUndoStack_fn","resize_fn","savedWidth","savedHeight","newWidth","newHeight","minWidth","minHeight","rotationMatrix","transf","invRotationMatrix","invTransf","getPoint","getOpposite","isDiagonal","isHorizontal","point","oppositePoint","transfOppositePoint","oppositeX","oppositeY","ratioX","ratioY","deltaX","deltaY","screenX","screenY","lastScreenX","lastScreenY","oldDiag","_origin","prevDistance","factor","transfCenterPoint","newTransfCenterPoint","hasDraggingStarted","cancelDrag","AnnotationEditor","SEED","MASK_HIGH","MASK_LOW","MurmurHash3_64","seed","blockCounts","tailLength","dataUint32","k1","k2","h1","h2","C1","C2","C1_LOW","C2_LOW","SerializableEmpty","AnnotationStorage","_AnnotationStorage_instances","_modified","_modifiedIds","_editorsMap","_storage","modified","entry","setModified_fn","PrintAnnotationStorage","transfer","hasBitmap","stats","typeToEditor","numberOfEditedComments","numberOfDeletedComments","editorStats","counters","ids","_serializable","serializable","FORCED_DEPENDENCY_LABEL","expandBBox","minX","minY","maxX","maxY","scaleCharBBox","scaleX","scaleY","bbox","EMPTY_BBOX","BBoxReader","bboxes","coords","_bboxes","_coords","ensureDebugMetadata","CanvasBBoxTracker","operationsCount","_CanvasBBoxTracker_instances","_baseTransformStack","_clipBox","_pendingBBox","_canvasWidth","_canvasHeight","_bboxesCoords","initializeBBoxes_fn","opIdx","onSavePopped","previous","lastSave","idx","clipBox","preserve","dependencyLists","dependencies","depIdx","depName","fallbackIdx","font","getMeasure","dependencyName","dependencyNames","oldBBoxes","buffer","CanvasDependencyTracker","bboxTracker","recordDebugMetadata","_simple","_incremental","_namedDependencies","_pendingDependencies","_fontBBoxTrustworthy","_debugMetadata","_recordDebugMetadataDepenencyAfterRestore","_bboxTracker","dep","fontBBox","isBBoxTrustworthy","computedBBox","measure","pendingDependencies","incremental","needsCleanup","deps","_CanvasNestedDependencyTracker","dependencyTracker","ignoreBBoxes","_dependencyTracker","_opIdx","_ignoreBBoxes","_nestingLevel","_savesLevel","CanvasNestedDependencyTracker","Dependencies","_CanvasImagesTracker","_capacity","_count","_CoordsArray","newCoords","finalBBox","rotationAngle","sin","cos","finalBBoxWidth","finalBBoxHeight","sin2","cos2","cosSin","denom","CanvasImagesTracker","FontLoader","ownerDocument","styleElement","_FontLoader_instances","_systemFonts","_styleSheet","nativeFontFace","rule","styleSheet","getStyleSheet_fn","adoptedStyleSheets","disableFontFace","_inspectFont","loadedName","fontFace","hasFonts","completeRequest","loadingRequests","otherRequest","testFont","int32","string32","spliceString","insert","chunk1","chunk2","called","isFontReady","loadTestFontId","CFF_CHECKSUM_OFFSET","XXXX_VALUE","checksum","StyleSheet","FontFaceObject","translatedData","inspectFont","charProcOperatorList","extra","_fontData","css","objs","character","objId","cmds","CSS_FONT_INFO","SYSTEM_FONT_INFO","_FONT_INFO","FONT_INFO","PATTERN_INFO","CssFontInfo","_CssFontInfo_instances","_buffer","_decoder","_view","readString_fn","SystemFontInfo","_SystemFontInfo_instances","styleLength","weightLength","weight","FontInfo","_FontInfo_instances","readBoolean_fn","readNumber_fn","readArray_fn","getDataOffsets_fn","stringsLength","systemFontInfoLength","cssFontInfoLength","cssFontInfoData","systemFontInfoData","byteOffset","bitOffset","arrLen","lookupName","increment","PatternInfo","dataView","hasBBox","hasBackground","nCoord","nColor","nStop","stops","background","shadingType","bounds","FontPathInfo","getUrlProp","getDataProp","getFactoryUrlProp","isRefProxy","isNameProxy","isValidExplicitDest","LoopbackPort","_listeners","_deferred","listener","rmAbort","onAbort","CallbackKind","StreamKind","onFn","wrapReason","MessageHandler","sourceName","targetName","comObj","_MessageHandler_instances","_messageAC","onMessage_fn","actionName","ah","transfers","callbackId","capability","queueingStrategy","streamId","controller","startCapability","pullCapability","reason","cancelCapability","processStreamMessage_fn","createStreamSink_fn","streamSink","lastDesiredSize","streamController","deleteStreamController_fn","dataReason","BaseBinaryDataFactory","cMapUrl","standardFontDataUrl","wasmUrl","_errorStr","DOMBinaryDataFactory","BaseCanvasFactory","enableHWA","_enableHWA","canvasAndContext","DOMCanvasFactory","BaseFilterFactory","maps","fgColor","bgColor","alpha","filterName","newFgColor","newBgColor","keepHCM","DOMFilterFactory","docId","_DOMFilterFactory_instances","_baseUrl","__cache","__defs","_docId","_document","__hcmCache","cache_get","tableR","tableG","tableB","createTables_fn","createUrl_fn","filter","createFilter_fn","addTransferMapConversion_fn","hcmCache_get","fgRGB","getRGB_fn","bgRGB","defs_get","table","addGrayConversion_fn","getSteps","tableA","addTransferMapAlphaConversion_fn","addLuminosityConversion_fn","slope","feComponentTransfer","feFuncA","fgGray","bgGray","newFgRGB","newBgRGB","getOpaqueTextColor_fn","fg","bg","newStart","newStep","mapR","mapG","mapB","bufferR","bufferG","bufferB","feColorMatrix","appendFeFunc_fn","feFunc","rTable","gTable","bTable","aTable","getRGBA_fn","canvasR","canvasG","canvasB","blend","require","node_utils_fetchData","NodeFilterFactory","NodeCanvasFactory","NodeBinaryDataFactory","convertBlackAndWhiteToRGBA","srcPos","nonBlackColor","inverseDecode","black","zeroMapping","oneMapping","widthInSource","widthRemainder","xorMask","srcLength","destPos","elem","convertRGBToRGBA","len32","src32","alphaMask","s1","s2","s3","jj","MESH_WGSL","WebGPU","_WebGPU_instances","_initPromise","_device","_meshPipeline","_preferredFormat","initGPU_fn","shaderModule","posData","colData","vertexCount","backgroundColor","paddedWidth","paddedHeight","borderSize","device","posBuffer","colBuffer","uniformBuffer","bindGroup","gpuCtx","clearValue","commandEncoder","renderPass","adapter","_webGPU","initGPU","isGPUReady","loadMeshShader","drawMeshWithGPU","PathType","applyBoundingBox","region","BaseShadingPattern","RadialAxialShadingPattern","IR","dist","grad","firstPoint","secondPoint","colorStop","reversedStops","owner","pathType","pattern","precision","n1","n2","ps","ownerBBox","tmpCanvas","tmpCtx","domMatrix","drawTriangle","p3","c1","c2","c3","rowSize","c1r","c1g","c1b","c2r","c2g","c2b","c3r","c3g","c3b","xa","car","cag","cab","xb","cbr","cbg","cbb","x1_","x2_","MeshShadingPattern","combinedScale","canvasFactory","boundsWidth","boundsHeight","matrixScaleX","matrixScaleY","temporaryPatternCanvas","DummyShadingPattern","getShadingPattern","PaintType","_TilingPattern","canvasGraphicsFactory","baseTransform","absXStep","absYStep","nXFirst","nXLast","nYFirst","nYLast","clippedBBox","inv","dimx","dimy","graphics","useEOFill","bboxWidth","bboxHeight","combinedScaleX","combinedScaleY","xstep","ystep","canvasWidth","canvasHeight","redrawHorizontally","redrawVertically","dimx2","dimy2","xSize","ySize","tmpCanvas2","tmpCtx2","realOutputSize","clip","paintType","fillStyle","strokeStyle","TilingPattern","MIN_FONT_SIZE","MAX_FONT_SIZE","EXECUTION_TIME","EXECUTION_STEPS","FULL_CHUNK_HEIGHT","SCALE_MATRIX","XY","mirrorContextOperations","destCtx","originalMethods","original","drawImageAtIntegerCoords","srcImg","srcX","srcY","srcW","srcH","destX","destY","destW","destH","tlX","rTlX","tlY","rTlY","brX","rWidth","brY","rHeight","CanvasExtraState","xStrokePad","yStrokePad","intersect","putBinaryImageData","imgData","partialChunkHeight","fullChunks","totalChunks","chunkImgData","elemsInThisChunk","putBinaryImageMask","copyCtxState","sourceCtx","properties","resetCtxToDefault","getImageSmoothingEnabled","interpolate","actualScale","LINE_CAP_STYLES","LINE_JOIN_STYLES","NORMAL_CLIP","EO_CLIP","_CanvasGraphics","canvasCtx","commonObjs","filterFactory","optionalContentConfig","markedContentStack","annotationCanvasMap","imagesTracker","_CanvasGraphics_instances","_knockoutGroupLevel","_knockoutElementDepth","_knockoutTempCanvasEntry","_knockoutSavedCtx","_knockoutSavedSMaskCtx","_knockoutSavedGCO","_knockoutElementAlpha","_knockoutFilterCache","_knockoutElementGroupMeta","_groupStackMeta","transparency","savedFillStyle","transparentCanvas","operatorList","executionStartIdx","continueCallback","stepper","operationsFilter","argsArray","fnArray","argsArrayLen","chunkOperations","endTime","steps","fnId","fnArgs","depObjId","objsPool","restoreInitialState_fn","meta","destroyKnockoutPools_fn","cache","drawFilter_fn","img","inverseTransform","widthScale","heightScale","scaleSteps","ws","hs","pw","ph","nw","nh","readEntry","writeEntry","paintWidth","paintHeight","fillColor","isPatternFill","currentTransform","cacheKey","scaled","maskCanvas","mainKey","cachedImage","maskToCanvas","drawnWidth","drawnHeight","fillCanvas","fillCtx","scaledEntry","scaleResult","dashArray","dashPhase","flatness","states","smask","inSMaskMode","subtype","backdrop","transferMap","hasFilter","filteredOOBAlpha","inputAlpha","SMASK_LAYER_TO_MASK_AREA_RATIO","layerW","layerH","maskArea","useLayerSize","filterSpec","bakedBackdrop","preparedEntry","drawX","drawY","srcEntry","sCtx","pCtx","filterApplied","scratchCanvas","dirtyBox","suspendedCtx","applySMaskInPlace","layerCtx","layerBox","layerOffsetX","layerOffsetY","layerWidth","layerHeight","clipX","clipY","clipW","clipH","oobAlpha","hasOOBAlpha","maskX0","maskY0","maskX1","maskY1","hasInnerCutout","maskCtx","maskOffsetX","maskOffsetY","old","op","outerExtraSize","tilingDims","consumePath","started","beginKnockoutElement_fn","strokeColor","newPath","endKnockoutElement_fn","needRestore","tileIdx","paths","fontSize","spacing","leading","fontRefName","fontObj","typeface","bold","italic","browserFontSize","rise","patternFillTransform","patternStrokeTransform","textRenderingMode","fillStrokeMode","isAddToPathSet","patternFill","patternStroke","scaledPath","getScaledPath_fn","invPatternTransform","glyphs","fontSizeScale","charSpacing","wordSpacing","fontDirection","textHScale","glyphsLength","vertical","spacingDir","defaultVMetrics","widthAdvanceScale","simpleFillText","needsFill","needsStroke","lineWidth","chars","glyph","joinedChars","restoreNeeded","accent","scaledX","scaledY","vmetric","vx","vy","measuredWidth","characterScaleX","scaledAccentX","scaledAccentY","charWidth","fontMatrix","isTextInvisible","spacingLength","xWidth","yWidth","llx","lly","urx","ury","renderingOpIdx","currentCtx","canvasBounds","groupCtx","backdropCtx","hasInnerBackdrop","knockoutMaskEntry","savedKnockoutLevel","groupMeta","convertGroupToGray_fn","currentMtx","parentGroupMeta","colorEntry","colorCtx","shapeMaskEntry","createKnockoutMaskCanvas_fn","sourceCompositeOperation","sourceAlpha","sourceFilter","compositeKnockoutSurface_fn","hasOwnCanvas","canvasName","viewportScale","canvases","mask","skewX","skewY","positions","trans","images","imgToPaint","inlineImgCanvas","isEmpty","absDet","normX","normY","scaledLineWidth","scaledXLineWidth","scaledYLineWidth","baseArea","saveRestore","dashes","hcmFilterId","savedFilter","sourceCanvas","reuseEntry","maskEntry","needsAlphaScaling","knockoutFilter","sourceData","maskData","sourcePixels","maskPixels","alphaScale","getOrCreatePooledEntry_fn","surfaceCanvas","backdropCanvas","destTransform","backdropOffset","reuseMaskEntry","poolMeta","knockoutAlpha","backdropEntry","tempEntry","tempCtx","savedCtx","savedSMaskCtx","imageData","gray","CanvasGraphics","BasePDFStream","PDFStreamReader","PDFStreamRangeReader","_PDFStreamReader","_PDFStreamRangeReader","begin","reader","BasePDFStreamReader","stream","BasePDFStreamRangeReader","getFilenameFromContentDispositionHeader","contentDisposition","needsEncodingFixup","toParamRegExp","rfc2616unquote","rfc5987decode","rfc2047decode","fixupEncoding","rfc2231getparam","attributePattern","flags","textdecode","encoding","decoder","contentDispositionStr","iter","quot","quotindex","extvalue","encodingend","charset","createHeaders","isHttp","httpHeaders","headers","getResponseOrigin","validateRangeRequestCapabilities","responseHeaders","rangeChunkSize","disableRange","rv","extractFilenameFromHeader","createResponseError","ensureResponseOrigin","rangeOrigin","fetchUrl","withCredentials","abortController","ensureResponseStatus","getArrayBuffer","PDFFetchStream","PDFFetchStreamReader","PDFFetchStreamRangeReader","disableStream","contentLength","isRangeSupported","responseOrigin","transport_stream_getArrayBuffer","endRequests","PDFDataTransportStream","PDFDataTransportStreamReader","PDFDataTransportStreamRangeReader","_PDFDataTransportStream_instances","pdfDataRangeTransport","initialData","progressiveDone","onReceiveData_fn","rangeReader","_endRequests","contentDispositionFilename","loaded","OK_RESPONSE","PARTIAL_CONTENT_RESPONSE","network_getArrayBuffer","PDFNetworkStream","PDFNetworkStreamReader","PDFNetworkStreamRangeReader","_PDFNetworkStream_instances","_pendingRequests","xhr","pendingRequest","onStateChange_fn","onProgress_fn","xhrStatus","rangeHeader","_PDFNetworkStreamReader_instances","onHeadersReceived_fn","onDone_fn","onError_fn","fullRequestXhr","rawResponseHeaders","_PDFNetworkStreamRangeReader_instances","getReadableStream","fs","Readable","readStream","PDFNodeStream","PDFNodeStreamReader","PDFNodeStreamRangeReader","stat","readableStream","getNetworkStream","GlobalWorkerOptions","_port","_src","Metadata","parsedData","_map","_data","INTERNAL","OptionalContentGroup","renderingIntent","usage","rbGroups","_isDisplay","_isPrint","_userSet","_visible","print","view","internal","userSet","_OptionalContentConfig","groupState","_OptionalContentConfig_instances","_cachedGetHash","_groups","_initialHash","_order","_rawData","on","off","evaluateVisibilityExpression_fn","preserveRB","rbGroup","otherId","operator","OptionalContentConfig","PagesMapper","_PagesMapper_instances","_pageNumberToId","_prevPageNumbers","_pagesNumber","_clipboard","_savedData","selectedPages","pagesToMove","ensureInit_fn","pageNumberToId","prevIdToPageNumber","buildIdToPageNumber_fn","movedCount","mappedPagesToMove","removedBeforeTarget","pagesNumber","remainingLen","adjustedTarget","updatePrevPageNumbers_fn","pagesToDelete","newN","newPageNumberToId","sourceIndex","destIndex","pagesToCopy","copiedPageNumbers","copiedPageIds","idToPageNumber","nCopy","pageNumbers","extractParams","includePages","pageIndices","extractedPageNumbers","usedIds","deletedPageNumbers","pasteIndex","prevPageNumbers","pasteEnd","idsIndices","oldPositions","INITIAL_DATA","dataObj","PDFObjects","_objs","MAX_TEXT_DIVS_TO_RENDER","DEFAULT_FONT_SIZE","_TextLayer","textContentSource","_TextLayer_instances","_capability","_disableProcessItems","_fontInspectorEnabled","_imagesHandler","_lang","_layoutTextParams","_pageHeight","_pageWidth","_reader","_rootContainer","_rotation","_scale","_styleCache","_textContentItemsStr","_textContentSource","_textDivs","_textDivProperties","_transform","_TextLayer_static","ensureMinFontSizeComputed_fn","_minFontSize","_pendingTextLayers","isWindows","isFirefox","pump","processItems_fn","onBefore","getCtx_fn","layout_fn","abortEx","_ascentCache","_canvasContexts","_canvasCtxFonts","textContentItemsStr","appendText_fn","geom","textDiv","textDivProperties","fontFamily","fontHeight","fontAscent","getAscent_fn","divStyle","shouldScaleText","absScaleX","absScaleY","br","ensureCtxFont_fn","lang","family","cached","cachedAscent","metrics","ascent","descent","ratio","TextLayer","RENDERING_CANCELLED_TIMEOUT","getDocument","task","PDFDocumentLoadingTask","password","rangeTransport","PDFDataRangeTransport","worker","PDFWorker","docBaseUrl","cMapPacked","iccUrl","ignoreErrors","maxImageSize","isOffscreenCanvasSupported","isImageDecoderSupported","canvasMaxAreaInBytes","fontExtraProperties","enableXfa","disableAutoFetch","pdfBug","CanvasFactory","FilterFactory","BinaryDataFactory","gpuPromise","useWasm","pagesMapper","useSystemFonts","useWorkerFetch","transportFactory","docParams","transportParams","hasGPU","workerIdPromise","networkStream","NetworkStream","workerId","messageHandler","transport","WorkerTransport","_PDFDocumentLoadingTask","_listener","PDFDocumentProxy","pdfInfo","ref","pageIndexesToSkip","pageInfos","keepLoadedFonts","_PDFPageProxy","pageInfo","_PDFPageProxy_instances","_pendingCleanup","_pagesMapper","canvasContext","annotationMode","optionalContentConfigPromise","printAnnotationStorage","recordImages","recordOperations","intentArgs","intentState","intentPrint","recordForDebugger","shouldRecordOperations","shouldRecordImages","complete","internalRenderTask","recordedBBoxes","tryCleanup_fn","InternalRenderTask","renderTask","operatorListChanged","opListTask","includeMarkedContent","disableNormalization","textContent","waitOn","resetStats","success","operatorListChunk","annotationStorageSerializable","modifiedIds","force","delay","curCacheKey","curIntentState","renderTasks","PDFPageProxy","_PDFWorker","port","_PDFWorker_instances","_messageHandler","_webWorker","_workerPorts","initializeFromPort_fn","initialize_fn","cachedPort","_PDFWorker_static","mainThreadWorkerMessageHandler_get","_fakeWorkerId","_isWorkerDisabled","resolve_fn","setupFakeWorker_fn","workerSrc","terminateEarly","sendTest","testObj","WorkerMessageHandler","workerHandler","otherUrl","wrapper","loadingTask","factory","_WorkerTransport_instances","_fullReader","_methodPromises","_networkStream","_pageCache","_pagePromises","_pageRefCache","_passwordCapability","_pageIndex","isOpList","annotationStorage","modifiedIdsHash","cacheKeyBuf","terminated","sink","readyReason","isStreamingSupported","updatePassword","exportedData","exportedError","fontData","imageRef","pageProxy","copy","ImageBitmapCtor","infos","mapping","remapped","sourceIdx","cachedPromise","cacheSimpleMethod_fn","results","refStr","total","RenderTask","separateAnnots","_InternalRenderTask","useRequestAnimationFrame","_rAF","_canvasInUse","build","_ColorPicker","_ColorPicker_instances","_button","_buttonSwatch","_defaultColor","_dropdown","_dropdownWasFromKeyboard","_isMainColorPicker","_eventBus","_openDropdownAC","_l10nColor","openDropdown_fn","keyDown_fn","swatch","dropdown","getDropdownRoot_fn","colorSelect_fn","isDropdownVisible_get","ColorPicker","_BasicColorPicker","_input","_hasAlpha","colorType","colorAndOpacityType","opacityType","hasAlpha","alphaHex","BasicColorPicker","makeColorComp","scaleAndClamp","ColorConverters","components","BaseSVGFactory","skipDimensions","DOMSVGFactory","annotation_layer_DEFAULT_FONT_SIZE","GetElementsByNameSet","TIMEZONE_OFFSET","AnnotationElementFactory","LinkAnnotationElement","TextAnnotationElement","TextWidgetAnnotationElement","RadioButtonWidgetAnnotationElement","CheckboxWidgetAnnotationElement","PushButtonWidgetAnnotationElement","ChoiceWidgetAnnotationElement","SignatureWidgetAnnotationElement","WidgetAnnotationElement","PopupAnnotationElement","FreeTextAnnotationElement","LineAnnotationElement","SquareAnnotationElement","CircleAnnotationElement","PolylineAnnotationElement","CaretAnnotationElement","InkAnnotationElement","PolygonAnnotationElement","HighlightAnnotationElement","UnderlineAnnotationElement","SquigglyAnnotationElement","StrikeOutAnnotationElement","StampAnnotationElement","FileAttachmentAnnotationElement","MediaAnnotationElement","AnnotationElement","_AnnotationElement","isRenderable","ignoreBorder","createQuadrilaterals","_AnnotationElement_instances","_updates","_hasBorder","_popupElement","quadPoints","inkLists","inkList","popup","newPopup","setRectEdited_fn","horizontalRadius","verticalRadius","radius","borderColor","setColor","jsName","styleName","colorArray","display","hidden","actions","jsEvent","commonActions","detail","eventProxy","rectBlX","rectBlY","rectTrX","rectTrY","svgBuffer","borderWidth","svgFactory","defs","clipPath","rectWidth","rectHeight","popupData","skipId","fields","fieldObj","exportValues","exportValue","domElement","triggers","currentRect","EditorAnnotationElement","_LinkAnnotationElement_instances","link","isBound","bindAttachment_fn","bindSetOCGState_fn","destination","overlaidText","setInternalLink_fn","resetForm","otherClickAction","resetFormFields","resetFormRefs","include","allFields","fieldIds","fieldName","field","allIds","attachmentId","attachment","openAttachment","elementData","baseName","eventName","valueGetter","getter","TEXT_ALIGNMENT","fontColor","computedFontSize","BORDER_SIZE","roundToOneDecimal","numberOfLines","lineHeight","isRequired","keyInStorage","maxLen","fieldFormattedValues","datetimeFormat","datetimeType","timeStep","hasDateOrTime","blurListener","formattedValue","charLimit","commitKey","_blurListener","selectionStart","selectionEnd","selStart","selEnd","combWidth","alignment","setCombOffset","free","checked","checkbox","curChecked","radio","pdfButtonValue","linkElement","selectElement","addAnEmptyEntry","fixDisplayValue","newValue","optionElement","removeEmptyEntry","noneOptionElement","getValue","isExport","multiple","selectedValues","getItems","values","displayValue","selectChild","indices","change","hasCommentManager","_PopupAnnotationElement_instances","createPopup_fn","PopupElement","titleObj","parentRect","open","_PopupElement_instances","_boundKeyDown","_boundHide","hide_fn","_boundShow","show_fn","_boundToggle","toggle_fn","_color","_contentsObj","_dateObj","_elements","_parent","_parentRect","_pinned","_popup","_popupAbortController","_commentButton","_commentButtonPosition","_rect","_titleObj","_wasVisible","_firstElement","_commentText","addEventListeners_fn","setCommentButtonPosition_fn","hasOwnButton","togglePopup","showPopup","hidePopup","parentContainer","updateColor_fn","updateCommentButtonPosition_fn","header","title","html_get","makePopupContent_fn","fontSize_get","fontColor_get","popupLines","popupContent","lineAttributes","setPosition_fn","useParentRect","normalizedRect","popupLeft","popupTop","lineSpan","_line","_square","square","_circle","circle","_polyline","vertices","borderStyle","points","polyline","_InkAnnotationElement_instances","_polylinesGroupElement","_polylines","getTransform_fn","thickness","mark","underline","strikeout","_FileAttachmentAnnotationElement_instances","_trigger","fileId","trigger","download_fn","fallbackContent","_MediaAnnotationElement_instances","_contentUrl","_media","load_fn","revokeContentUrl_fn","contentType","isAudio","media","hovered","focused","updateControls","_AnnotationLayer","accessibilityManager","annotationEditorUIManager","structTreeLayer","_AnnotationLayer_instances","_accessibilityManager","_annotationCanvasMap","_editableAnnotations","_structTreeLayer","_linkService","_hasAriaAttributesFromStructTree","annotations","popupToElements","popupAnnotations","elementParams","isPopupAnnotation","rendered","addElementsToDOM_fn","setAnnotationCanvasMap_fn","contentElement","ariaAttributes","top1","bot1","mid1","top2","bot2","mid2","centerX1","centerX2","cvs","toRemove","firstCanvas","firstChild","lastCanvas","editableAnnotation","AnnotationLayer","EOL_PATTERN","_FreeTextEditor","_FreeTextEditor_instances","_content","_editorDivId","_editModeAC","_fontSize","updateFontSize_fn","savedText","newText","extractText_fn","setText","setContent_fn","setEditorDimensions_fn","paste","_FreeTextEditor_static","deserializeContent_fn","startContainer","startOffset","bufferBefore","bufferAfter","getNodeContent_fn","newRange","beforeLength","padding","textPosition","serializeContent_fn","hasElementChanged_fn","setFontsize","savedFontsize","col","savedColor","prevChild","savedDisplay","savedVisibility","FreeTextEditor","Outline","_bbox","sx","sy","_FreeDrawOutliner","scaleFactor","innerMargin","_FreeDrawOutliner_instances","_box","_bottom","_innerMargin","_isLTR","_top","_last","_lastX","_lastY","_min","_min_dist","_scaleFactor","_thickness","_points","_MIN_DIST","_MIN","diffX","diffY","diffD","nX","nY","thX","thY","toSVGPathTwoPoints_fn","toSVGPathEnd_fn","toSVGPathStart_fn","outline","FreeDrawOutline","last","getOutlineTwoPoints_fn","getOutlineEnd_fn","getOutlineStart_fn","_MIN_DIFF","getLastCoords_fn","lastTop","lastBottom","lastTopX","lastTopY","lastBottomX","lastBottomY","FreeDrawOutliner","_FreeDrawOutline_instances","_outline","computeMinMax_fn","outliner","firstPointX","firstPointY","lastPointX","lastPointY","ltrCallback","bezierBbox","HighlightOutliner","_HighlightOutliner_instances","_firstPoint","_lastPoint","_verticalEdges","_intervals","EPSILON","shiftedMinX","shiftedMinY","lastEdge","lastPoint","edge","outlineVerticalEdges","breakEdge_fn","insert_fn","remove_fn","getOutlines_fn","edges","allEdges","edge1","edge2","outlines","HighlightOutline","binarySearch_fn","middle","y4","_outlines","polygon","prevX","prevY","FreeHighlightOutliner","FreeHighlightOutline","_HighlightEditor","_HighlightEditor_instances","_anchorNode","_anchorOffset","_boxes","_clipPathId","_focusOutlines","_focusNode","_focusOffset","_highlightDiv","_highlightOutlines","_isFreeHighlight","_outlineId","_methodOfCreation","createFreeOutlines_fn","addToDrawLayer_fn","createOutlines_fn","updateThickness_fn","getRotation_fn","cleanDrawLayer_fn","mustBeSelected","drawLayer","_HighlightEditor_static","rotateBbox_fn","keydown_fn","highlightDiv","direction","setCaret_fn","endHighlight_fn","highlightMove_fn","clipPathId","serializeBoxes_fn","serializeOutlines_fn","outlinerForOutline","highlightOutlines","highlightId","setColorAndOpacity","opa","savedOpacity","savedThickness","setThickness","th","changeThickness_fn","HighlightEditor","DrawingOptions","_svgProperties","_DrawingEditor","_DrawingEditor_instances","_drawOutlines","_mustBeCommitted","createDrawOutlines_fn","p1Keys","_options","propertyName","_currentDraw","_drawingOptions","savedValue","updateBbox_fn","opacityName","convertToDrawSpace_fn","rotateBox_fn","_x","_y","drawDiv","_parentWidth","_parentHeight","_currentDrawingAC","_currentDrawingOptions","all","draw","drawId","lastElement","isAborted","_pageX","_pageY","_innerWidth","drawOutlines","drawingOptions","createDrawing_fn","convertToParentSpace_fn","pW","pH","parentRotation","DrawingEditor","InkDrawOutliner","_InkDrawOutliner_instances","_lines","_lastSVGPath","_lastIndex","InkDrawOutline","normalizePoint_fn","firstX","firstY","secondX","secondY","c1x","c1y","c2x","c2y","_InkDrawOutline_instances","_currentRotation","_parentScale","computeBbox_fn","serializedLines","serializedPoints","getBBoxWithNoMargin_fn","rescaleFn","newLines","oldMarginX","oldMarginY","getMarginComponents_fn","newMarginX","newMarginY","diffMarginX","diffMarginY","marginX","marginY","s1x","s1y","s2x","s2y","newParentWidth","newParentHeight","margin","InkDrawingOptions","viewerParameters","_InkEditor","_InkEditor_instances","_drawId","stroke","InkEditor","ContourDrawOutline","BASE_HEADER_LENGTH","POINTS_PROPERTIES_NUMBER","SignatureExtractor","fontStyle","fontWeight","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","fontBoundingBoxAscent","fontBoundingBoxDescent","SCALE","uint8Buf","_SignatureExtractor_static","toUint8_fn","histogram","getHistogram_fn","threshold","guessThreshold_fn","contourList","findContours_fn","getGrayPixels_fn","bilateralFilter_fn","_PARAMETERS","mustSmooth","areContours","curves","linesAndPoints","xScale","yScale","newCurves","reducedPoints","douglasPeucker_fn","newPoints","minDiff","maxDiff","outlinesLength","dx","bufferType","headerLength","cs","writer","BufferCtor","diffs","signatureData","readable","writable","numberOfDrawings","diffsOffset","neighborIndexToId_fn","i0","j0","_neighborIdToIndex","clockwiseNonZero_fn","kk","shiftI","shiftJ","counterClockwiseNonZero_fn","nbd","lnbd","contours","ij","pix","i2","j2","isHole","contour","contour0","i1","j1","i3","j3","i4","j4","ij3","douglasPeuckerHelper_fn","ax","ay","abx","aby","nabx","naby","aa","invS","phi","cosPhi","sinPhi","tmax","poly","partialPhi","dmax","sigmaS","sigmaR","kernelSize","kernel","sigmaS2","halfSize","rangeValues","sigmaR2","out","center","norm","neighbour","spos","originalBitmap","prevWidth","prevHeight","isteps","grayImage","SignatureOptions","DrawnSignatureOptions","_SignatureEditor","_isExtracted","_description","_signatureData","_signatureUUID","hasDescriptionStats","_isCopy","uuid","heightInPage","toolbar","outlineData","fontInfo","SignatureEditor","StampEditor","_StampEditor_instances","_bitmap","_bitmapId","_bitmapPromise","_bitmapUrl","_bitmapFile","_bitmapFileName","_canvas","_missingCanvas","_resizeTimeoutId","_isSvg","_hasBeenAddedInUndoStack","hasAltTextStats","updateAltTextData","getBitmap_fn","createCanvas_fn","bitmapId","drawBitmap_fn","maxDataDimension","maxPreviewDimension","createImageData","bitmapWidth","bitmapHeight","outputScale","scaledWidth","scaledHeight","scaleBitmap_fn","boxDim","boxDimWidth","boxDimHeight","patternCtx","dataWidth","dataHeight","offscreenCtx","missingCanvas","structParent","bitmapUrl","isSvg","accessibilityData","serializeBitmap_fn","changes","area","prevData","getBitmapFetched_fn","fromId","getBitmapDone_fn","MAX_RATIO","toUrl","isSamePageIndex","isSameAltText","_AnnotationEditorLayer","_AnnotationEditorLayer_instances","_allowClick","_annotationLayer","_clickAC","_editorFocusTimeoutId","_editors","_hadPointerDown","_isDisabling","_isEnabling","_drawingAC","_focusedElement","_textLayer","_textSelectionAC","_textLayerDblClickAC","_lastPointerDownTimestamp","editorTypes","cleanup_fn","classList","annotationElementIds","allEditorsIterator_get","editable","clientX","clientY","lastPointerDownTimestamp","needFakeAnnotation","changedAnnotations","resetAnnotations","textLayerPointerDown_fn","currentEditorType_get","getCenterPoint_fn","createNewEditor_fn","isCentered","currentMode","relatedTarget","oldRotation","AnnotationEditorLayer","compareTextLayers","getTextLayer","isPointBefore","nodeA","offsetA","nodeB","offsetB","relation","normalizeEdgeBoundary","lastNode","_DrawLayer","_DrawLayer_instances","_mapping","_textLayerObserver","_toUpdate","previousData","_textLayers","_selections","_textLayerSet","records","_DrawLayer_static","hasSelection_fn","addedNodes","_selectionChangeAC","_isSelecting","isPathUpdatable","hasClip","createSVG_fn","pathId","createClipPath_fn","use","mustRemoveSelfIntersections","maskId","use1","use2","elementOrId","rootClass","updateProperties_fn","setBox_fn","pathElement","cleanupTextLayerSelection_fn","_selectionId","textLayerData","getOrderedTextLayers_fn","rotators","orderedTextLayers","ranges","endContainer","endOffset","startTextLayer","endTextLayer","startMissing","endMissing","anchorLayer","focusLayer","anchorBeforeFocus","activeTextLayers","boundarySubstituted","previousNode","normalizedEnd","normalizedStart","firstNode","subRange","lastTextNode","selectedTextLayers","clientRect","selectionStyle","clipPathUse","DrawLayer","percentage","_TextLayerImages","minSize","coordinates","getPageCanvas","_TextLayerImages_instances","_coordinates","_coordinatesByElement","_getPageCanvas","_minSize","createImagePlaceholder_fn","imgElement","activeImage","_activeImage","pageCanvas","imageX1","imageY1","imageX2","imageY2","TextLayerImages","configurePdfjs","configurePdfWorker","pdfjsLib","VERSION","packageJson"],"mappings":"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","x_google_ignoreList":[20]}