cdk-nextjs 0.7.10 → 0.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/README.md +1 -1
- package/docs/harness-coverage.md +1 -1
- package/docs/nextjs-private-apis.md +128 -0
- package/lib/adapter/adapter.mjs +276 -24
- package/lib/adapter/build-outputs.d.ts +1 -1
- package/lib/adapter/build-outputs.js +29 -13
- package/lib/adapter/build-outputs.test.js +35 -7
- package/lib/adapter/cache-handler.d.ts +1 -1
- package/lib/adapter/cache-handler.js +1 -1
- package/lib/adapter/cache-kinds.d.ts +12 -1
- package/lib/adapter/cache-kinds.js +16 -4
- package/lib/adapter/init-cache.js +7 -7
- package/lib/adapter/local-file-cache-handler.d.ts +1 -1
- package/lib/adapter/local-file-cache-handler.js +1 -1
- package/lib/adapter/memory-cache-handler.d.ts +2 -2
- package/lib/adapter/memory-cache-handler.js +1 -1
- package/lib/adapter/s3-cache-handler.d.ts +2 -2
- package/lib/adapter/s3-cache-handler.js +1 -1
- package/lib/adapter/use-cache-common.d.ts +1 -1
- package/lib/adapter/use-cache-common.js +1 -1
- package/lib/adapter/use-cache-common.test.js +1 -1
- package/lib/adapter/use-cache-default-handler.d.ts +1 -1
- package/lib/adapter/use-cache-default-handler.js +1 -1
- package/lib/adapter/use-cache-handlers.test.js +1 -1
- package/lib/adapter/use-cache-remote-handler.d.ts +1 -1
- package/lib/adapter/use-cache-remote-handler.js +1 -1
- package/lib/cdk-nextjs-version.d.ts +10 -0
- package/lib/cdk-nextjs-version.js +15 -0
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +7 -6
- package/lib/nextjs-build/nextjs-build.test.js +16 -3
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +5 -5
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.test.js +17 -8
- package/lib/runtime/dispatch.js +4 -5
- package/lib/runtime/image.js +43 -32
- package/lib/runtime/image.test.js +27 -26
- package/lib/runtime/lambda.mjs +276 -36
- package/lib/runtime/manifest.d.ts +34 -8
- package/lib/runtime/manifest.js +7 -5
- package/lib/runtime/server.mjs +276 -36
- package/package.json +1 -1
- package/scripts/capture-adapter-fixture.mjs +13 -1
- package/scripts/zero-config-build.mjs +5 -1
package/lib/runtime/lambda.mjs
CHANGED
|
@@ -25416,7 +25416,7 @@ var require_dist_cjs13 = __commonJS({
|
|
|
25416
25416
|
"node_modules/.pnpm/@aws-sdk+credential-provider-web-identity@3.972.78/node_modules/@aws-sdk/credential-provider-web-identity/dist-cjs/index.js"(exports) {
|
|
25417
25417
|
var { setCredentialFeature: setCredentialFeature2 } = (init_client3(), __toCommonJS(client_exports2));
|
|
25418
25418
|
var { CredentialsProviderError: CredentialsProviderError2, externalDataInterceptor: externalDataInterceptor2 } = (init_config2(), __toCommonJS(config_exports));
|
|
25419
|
-
var { readFileSync:
|
|
25419
|
+
var { readFileSync: readFileSync2 } = __require("node:fs");
|
|
25420
25420
|
var fromWebToken = (init) => async (awsIdentityProperties) => {
|
|
25421
25421
|
init.logger?.debug("@aws-sdk/credential-provider-web-identity - fromWebToken");
|
|
25422
25422
|
const { roleArn, roleSessionName, webIdentityToken, providerId, policyArns, policy, durationSeconds } = init;
|
|
@@ -25457,7 +25457,7 @@ var require_dist_cjs13 = __commonJS({
|
|
|
25457
25457
|
}
|
|
25458
25458
|
const credentials = await fromWebToken({
|
|
25459
25459
|
...init,
|
|
25460
|
-
webIdentityToken: externalDataInterceptor2?.getTokenRecord?.()[webIdentityTokenFile] ??
|
|
25460
|
+
webIdentityToken: externalDataInterceptor2?.getTokenRecord?.()[webIdentityTokenFile] ?? readFileSync2(webIdentityTokenFile, { encoding: "ascii" }),
|
|
25461
25461
|
roleArn,
|
|
25462
25462
|
roleSessionName
|
|
25463
25463
|
})(awsIdentityProperties);
|
|
@@ -35918,7 +35918,7 @@ var require_dist = __commonJS({
|
|
|
35918
35918
|
if (typeof e5 !== "undefined") e5.ab = __dirname + "/";
|
|
35919
35919
|
var t = {};
|
|
35920
35920
|
e5.r(t);
|
|
35921
|
-
e5.d(t, { detectDomainLocale: () => detectDomainLocale2, detectLocale: () => detectLocale2, getAcceptLanguageLocale: () => getAcceptLanguageLocale, getCookieLocale: () => getCookieLocale, normalizeLocalePath: () =>
|
|
35921
|
+
e5.d(t, { detectDomainLocale: () => detectDomainLocale2, detectLocale: () => detectLocale2, getAcceptLanguageLocale: () => getAcceptLanguageLocale, getCookieLocale: () => getCookieLocale, normalizeLocalePath: () => normalizeLocalePath2, resolveRoutes: () => resolveRoutes2, responseToMiddlewareResult: () => responseToMiddlewareResult2 });
|
|
35922
35922
|
function matchesCondition(e6, t8) {
|
|
35923
35923
|
if (e6 === void 0) {
|
|
35924
35924
|
return { matched: false };
|
|
@@ -36117,7 +36117,7 @@ var require_dist = __commonJS({
|
|
|
36117
36117
|
}
|
|
36118
36118
|
return void 0;
|
|
36119
36119
|
}
|
|
36120
|
-
function
|
|
36120
|
+
function normalizeLocalePath2(e6, t8) {
|
|
36121
36121
|
if (!t8 || t8.length === 0) {
|
|
36122
36122
|
return { pathname: e6 };
|
|
36123
36123
|
}
|
|
@@ -36201,7 +36201,7 @@ var require_dist = __commonJS({
|
|
|
36201
36201
|
}
|
|
36202
36202
|
function detectLocale2(e6) {
|
|
36203
36203
|
const { pathname: t8, hostname: n4, cookieHeader: a5, acceptLanguageHeader: s2, i18n: r5 } = e6;
|
|
36204
|
-
const o3 =
|
|
36204
|
+
const o3 = normalizeLocalePath2(t8, r5.locales);
|
|
36205
36205
|
if (o3.detectedLocale) {
|
|
36206
36206
|
return { locale: o3.detectedLocale, pathnameWithoutLocale: o3.pathname, localeInPath: true };
|
|
36207
36207
|
}
|
|
@@ -36486,7 +36486,7 @@ var require_dist = __commonJS({
|
|
|
36486
36486
|
const t9 = f5.hostname;
|
|
36487
36487
|
const a6 = h5.get("cookie") || void 0;
|
|
36488
36488
|
const s4 = h5.get("accept-language") || void 0;
|
|
36489
|
-
const r6 =
|
|
36489
|
+
const r6 = normalizeLocalePath2(e7, l3.locales);
|
|
36490
36490
|
const o4 = !!r6.detectedLocale;
|
|
36491
36491
|
const i6 = detectDomainLocale2(l3.domains, t9);
|
|
36492
36492
|
const c6 = i6?.defaultLocale || l3.defaultLocale;
|
|
@@ -36877,9 +36877,249 @@ var require_dist = __commonJS({
|
|
|
36877
36877
|
}
|
|
36878
36878
|
});
|
|
36879
36879
|
|
|
36880
|
+
// package.json
|
|
36881
|
+
var require_package = __commonJS({
|
|
36882
|
+
"package.json"(exports, module) {
|
|
36883
|
+
module.exports = {
|
|
36884
|
+
name: "cdk-nextjs",
|
|
36885
|
+
description: "Deploy Next.js apps on AWS with CDK",
|
|
36886
|
+
repository: {
|
|
36887
|
+
type: "git",
|
|
36888
|
+
url: "https://github.com/cdklabs/cdk-nextjs.git"
|
|
36889
|
+
},
|
|
36890
|
+
scripts: {
|
|
36891
|
+
build: "pnpm dlx projen build",
|
|
36892
|
+
bump: "pnpm dlx projen bump",
|
|
36893
|
+
"bump:releasable-commits": "pnpm dlx projen bump:releasable-commits",
|
|
36894
|
+
bundle: "pnpm dlx projen bundle",
|
|
36895
|
+
"bundle:adapter/adapter": "pnpm dlx projen bundle:adapter/adapter",
|
|
36896
|
+
"bundle:adapter/adapter:watch": "pnpm dlx projen bundle:adapter/adapter:watch",
|
|
36897
|
+
"bundle:adapter/cache-handler": "pnpm dlx projen bundle:adapter/cache-handler",
|
|
36898
|
+
"bundle:adapter/cache-handler:watch": "pnpm dlx projen bundle:adapter/cache-handler:watch",
|
|
36899
|
+
"bundle:adapter/use-cache-default-handler": "pnpm dlx projen bundle:adapter/use-cache-default-handler",
|
|
36900
|
+
"bundle:adapter/use-cache-default-handler:watch": "pnpm dlx projen bundle:adapter/use-cache-default-handler:watch",
|
|
36901
|
+
"bundle:adapter/use-cache-remote-handler": "pnpm dlx projen bundle:adapter/use-cache-remote-handler",
|
|
36902
|
+
"bundle:adapter/use-cache-remote-handler:watch": "pnpm dlx projen bundle:adapter/use-cache-remote-handler:watch",
|
|
36903
|
+
"bundle:lambdas/post-deploy/post-deploy.lambda": "pnpm dlx projen bundle:lambdas/post-deploy/post-deploy.lambda",
|
|
36904
|
+
"bundle:lambdas/post-deploy/post-deploy.lambda:watch": "pnpm dlx projen bundle:lambdas/post-deploy/post-deploy.lambda:watch",
|
|
36905
|
+
"bundle:lambdas/redeploy-stage/redeploy-stage.lambda": "pnpm dlx projen bundle:lambdas/redeploy-stage/redeploy-stage.lambda",
|
|
36906
|
+
"bundle:lambdas/redeploy-stage/redeploy-stage.lambda:watch": "pnpm dlx projen bundle:lambdas/redeploy-stage/redeploy-stage.lambda:watch",
|
|
36907
|
+
"bundle:nextjs-build/patch-fetch": "pnpm dlx projen bundle:nextjs-build/patch-fetch",
|
|
36908
|
+
"bundle:nextjs-build/patch-fetch:watch": "pnpm dlx projen bundle:nextjs-build/patch-fetch:watch",
|
|
36909
|
+
"bundle:runtime/lambda": "pnpm dlx projen bundle:runtime/lambda",
|
|
36910
|
+
"bundle:runtime/lambda:watch": "pnpm dlx projen bundle:runtime/lambda:watch",
|
|
36911
|
+
"bundle:runtime/server": "pnpm dlx projen bundle:runtime/server",
|
|
36912
|
+
"bundle:runtime/server:watch": "pnpm dlx projen bundle:runtime/server:watch",
|
|
36913
|
+
clobber: "pnpm dlx projen clobber",
|
|
36914
|
+
compat: "pnpm dlx projen compat",
|
|
36915
|
+
compile: "pnpm dlx projen compile",
|
|
36916
|
+
default: "pnpm dlx projen default",
|
|
36917
|
+
docgen: "pnpm dlx projen docgen",
|
|
36918
|
+
eject: "pnpm dlx projen eject",
|
|
36919
|
+
eslint: "pnpm dlx projen eslint",
|
|
36920
|
+
integ: "pnpm dlx projen integ",
|
|
36921
|
+
"integ:update": "pnpm dlx projen integ:update",
|
|
36922
|
+
package: "pnpm dlx projen package",
|
|
36923
|
+
"package-all": "pnpm dlx projen package-all",
|
|
36924
|
+
"package:js": "pnpm dlx projen package:js",
|
|
36925
|
+
"post-compile": "pnpm dlx projen post-compile",
|
|
36926
|
+
"post-upgrade": "pnpm dlx projen post-upgrade",
|
|
36927
|
+
"pre-compile": "pnpm dlx projen pre-compile",
|
|
36928
|
+
release: "pnpm dlx projen release",
|
|
36929
|
+
"rosetta:extract": "pnpm dlx projen rosetta:extract",
|
|
36930
|
+
test: "pnpm dlx projen test",
|
|
36931
|
+
"test:watch": "pnpm dlx projen test:watch",
|
|
36932
|
+
unbump: "pnpm dlx projen unbump",
|
|
36933
|
+
upgrade: "pnpm dlx projen upgrade",
|
|
36934
|
+
"upgrade-cdklabs-projen-project-types": "pnpm dlx projen upgrade-cdklabs-projen-project-types",
|
|
36935
|
+
"upgrade-dev-deps": "pnpm dlx projen upgrade-dev-deps",
|
|
36936
|
+
watch: "pnpm dlx projen watch",
|
|
36937
|
+
projen: "pnpm dlx projen"
|
|
36938
|
+
},
|
|
36939
|
+
author: {
|
|
36940
|
+
name: "Amazon Web Services",
|
|
36941
|
+
email: "aws-cdk-dev@amazon.com",
|
|
36942
|
+
organization: true
|
|
36943
|
+
},
|
|
36944
|
+
devDependencies: {
|
|
36945
|
+
"@aws-cdk/integ-runner": "latest",
|
|
36946
|
+
"@aws-cdk/integ-tests-alpha": "latest",
|
|
36947
|
+
"@aws-crypto/sha256-js": "^5.2.0",
|
|
36948
|
+
"@aws-sdk/client-api-gateway": "^3.1141.0",
|
|
36949
|
+
"@aws-sdk/client-cloudfront": "^3.1141.0",
|
|
36950
|
+
"@aws-sdk/client-dynamodb": "^3.1141.0",
|
|
36951
|
+
"@aws-sdk/client-s3": "^3.1141.0",
|
|
36952
|
+
"@aws-sdk/client-ssm": "^3.1141.0",
|
|
36953
|
+
"@aws-sdk/lib-storage": "^3.1141.0",
|
|
36954
|
+
"@mrgrain/jsii-struct-builder": "^0.7.64",
|
|
36955
|
+
"@next/routing": "16.4.0",
|
|
36956
|
+
"@smithy/signature-v4": "^2.3.0",
|
|
36957
|
+
"@types/aws-lambda": "^8.10.163",
|
|
36958
|
+
"@types/debug": "^4.1.13",
|
|
36959
|
+
"@types/jest": "^29.5.14",
|
|
36960
|
+
"@types/mime-types": "^2.1.4",
|
|
36961
|
+
"@types/node": "^24",
|
|
36962
|
+
"@typescript-eslint/eslint-plugin": "^8",
|
|
36963
|
+
"@typescript-eslint/parser": "^8",
|
|
36964
|
+
"aws-cdk": "^2.1143.0",
|
|
36965
|
+
"aws-cdk-lib": "2.261.0",
|
|
36966
|
+
"cdk-nag": "^2.38.2",
|
|
36967
|
+
"cdklabs-projen-project-types": "^0.6.17",
|
|
36968
|
+
"commit-and-tag-version": "^12",
|
|
36969
|
+
constructs: "10.5.1",
|
|
36970
|
+
debug: "^4.4.3",
|
|
36971
|
+
esbuild: "^0.28.2",
|
|
36972
|
+
eslint: "^9",
|
|
36973
|
+
"eslint-config-prettier": "^9.1.2",
|
|
36974
|
+
"eslint-import-resolver-typescript": "^3.10.1",
|
|
36975
|
+
"eslint-plugin-import": "^2.32.0",
|
|
36976
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
36977
|
+
jest: "^29.7.0",
|
|
36978
|
+
"jest-junit": "^17",
|
|
36979
|
+
jsii: "~6.0.4",
|
|
36980
|
+
"jsii-diff": "^1.140.0",
|
|
36981
|
+
"jsii-docgen": "^10.5.0",
|
|
36982
|
+
"jsii-pacmak": "^1.140.0",
|
|
36983
|
+
"jsii-rosetta": "~5.9.67",
|
|
36984
|
+
"mime-types": "^2.1.35",
|
|
36985
|
+
next: "^16.4.0",
|
|
36986
|
+
prettier: "^3.9.9",
|
|
36987
|
+
projen: "^0.101.6",
|
|
36988
|
+
"ts-jest": "^29.4.14",
|
|
36989
|
+
"ts-node": "^10.9.2",
|
|
36990
|
+
typescript: "^5.9.3",
|
|
36991
|
+
undici: "^6.29.0"
|
|
36992
|
+
},
|
|
36993
|
+
peerDependencies: {
|
|
36994
|
+
"aws-cdk-lib": "^2.261.0",
|
|
36995
|
+
constructs: "^10.5.1"
|
|
36996
|
+
},
|
|
36997
|
+
pnpm: {
|
|
36998
|
+
onlyBuiltDependencies: [
|
|
36999
|
+
"esbuild",
|
|
37000
|
+
"unrs-resolver",
|
|
37001
|
+
"sharp"
|
|
37002
|
+
],
|
|
37003
|
+
overrides: {
|
|
37004
|
+
postcss: "^8.5.23",
|
|
37005
|
+
browserslist: "^4.28.7",
|
|
37006
|
+
"js-yaml@3": "^3.15.1",
|
|
37007
|
+
"js-yaml@4": "^4.3.1",
|
|
37008
|
+
"brace-expansion@1": "^1.1.21",
|
|
37009
|
+
"brace-expansion@5": "^5.0.12",
|
|
37010
|
+
"@babel/core": "^7.29.6",
|
|
37011
|
+
sharp: "^0.35.5",
|
|
37012
|
+
"source-map-js": "^1.2.2"
|
|
37013
|
+
}
|
|
37014
|
+
},
|
|
37015
|
+
keywords: [
|
|
37016
|
+
"aws",
|
|
37017
|
+
"aws-cdk",
|
|
37018
|
+
"cdk",
|
|
37019
|
+
"next",
|
|
37020
|
+
"next.js",
|
|
37021
|
+
"nextjs"
|
|
37022
|
+
],
|
|
37023
|
+
devEngines: {
|
|
37024
|
+
packageManager: {
|
|
37025
|
+
name: "pnpm",
|
|
37026
|
+
version: "10.32.1",
|
|
37027
|
+
onFail: "ignore"
|
|
37028
|
+
}
|
|
37029
|
+
},
|
|
37030
|
+
main: "lib/index.js",
|
|
37031
|
+
license: "Apache-2.0",
|
|
37032
|
+
stability: "stable",
|
|
37033
|
+
publishConfig: {
|
|
37034
|
+
access: "public"
|
|
37035
|
+
},
|
|
37036
|
+
version: "0.7.11",
|
|
37037
|
+
packageManager: "pnpm@10.32.1",
|
|
37038
|
+
jest: {
|
|
37039
|
+
coverageProvider: "v8",
|
|
37040
|
+
testPathIgnorePatterns: [
|
|
37041
|
+
"/node_modules/",
|
|
37042
|
+
"/cdk.out/"
|
|
37043
|
+
],
|
|
37044
|
+
testMatch: [
|
|
37045
|
+
"<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
|
|
37046
|
+
"<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
|
|
37047
|
+
"<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)",
|
|
37048
|
+
"<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"
|
|
37049
|
+
],
|
|
37050
|
+
clearMocks: true,
|
|
37051
|
+
collectCoverage: true,
|
|
37052
|
+
coverageReporters: [
|
|
37053
|
+
"json",
|
|
37054
|
+
"lcov",
|
|
37055
|
+
"clover",
|
|
37056
|
+
"cobertura",
|
|
37057
|
+
"text"
|
|
37058
|
+
],
|
|
37059
|
+
coverageDirectory: "coverage",
|
|
37060
|
+
coveragePathIgnorePatterns: [
|
|
37061
|
+
"/node_modules/",
|
|
37062
|
+
"/cdk.out/"
|
|
37063
|
+
],
|
|
37064
|
+
watchPathIgnorePatterns: [
|
|
37065
|
+
"/node_modules/"
|
|
37066
|
+
],
|
|
37067
|
+
reporters: [
|
|
37068
|
+
"default",
|
|
37069
|
+
[
|
|
37070
|
+
"jest-junit",
|
|
37071
|
+
{
|
|
37072
|
+
outputDirectory: "test-reports"
|
|
37073
|
+
}
|
|
37074
|
+
]
|
|
37075
|
+
],
|
|
37076
|
+
transform: {
|
|
37077
|
+
"^.+\\.[t]sx?$": [
|
|
37078
|
+
"ts-jest",
|
|
37079
|
+
{
|
|
37080
|
+
tsconfig: "test/tsconfig.json"
|
|
37081
|
+
}
|
|
37082
|
+
]
|
|
37083
|
+
}
|
|
37084
|
+
},
|
|
37085
|
+
types: "lib/index.d.ts",
|
|
37086
|
+
jsii: {
|
|
37087
|
+
outdir: "dist",
|
|
37088
|
+
targets: {},
|
|
37089
|
+
tsconfig: "tsconfig.json",
|
|
37090
|
+
validateTsconfig: "strict"
|
|
37091
|
+
},
|
|
37092
|
+
exports: {
|
|
37093
|
+
".": {
|
|
37094
|
+
types: "./lib/index.d.ts",
|
|
37095
|
+
import: "./lib/index.js",
|
|
37096
|
+
default: "./lib/index.js"
|
|
37097
|
+
},
|
|
37098
|
+
"./adapter": {
|
|
37099
|
+
import: "./lib/adapter/adapter.mjs",
|
|
37100
|
+
default: "./lib/adapter/adapter.mjs"
|
|
37101
|
+
},
|
|
37102
|
+
"./cache-handler": {
|
|
37103
|
+
import: "./lib/adapter/cache-handler.mjs",
|
|
37104
|
+
default: "./lib/adapter/cache-handler.mjs"
|
|
37105
|
+
},
|
|
37106
|
+
"./cache-handlers/default": {
|
|
37107
|
+
import: "./lib/adapter/use-cache-default-handler.mjs",
|
|
37108
|
+
default: "./lib/adapter/use-cache-default-handler.mjs"
|
|
37109
|
+
},
|
|
37110
|
+
"./cache-handlers/remote": {
|
|
37111
|
+
import: "./lib/adapter/use-cache-remote-handler.mjs",
|
|
37112
|
+
default: "./lib/adapter/use-cache-remote-handler.mjs"
|
|
37113
|
+
}
|
|
37114
|
+
},
|
|
37115
|
+
"//": '~~ Generated by projen. To modify, edit .projenrc.ts and run "pnpm dlx projen".'
|
|
37116
|
+
};
|
|
37117
|
+
}
|
|
37118
|
+
});
|
|
37119
|
+
|
|
36880
37120
|
// src/runtime/lambda.mts
|
|
36881
37121
|
import { dirname as dirname2 } from "node:path";
|
|
36882
|
-
import { fileURLToPath
|
|
37122
|
+
import { fileURLToPath } from "node:url";
|
|
36883
37123
|
|
|
36884
37124
|
// src/runtime/core.ts
|
|
36885
37125
|
import { readFile as readFile3 } from "node:fs/promises";
|
|
@@ -37547,8 +37787,7 @@ function requestLocale(manifest, url) {
|
|
|
37547
37787
|
const i18n = asI18n(manifest.config.i18n);
|
|
37548
37788
|
if (!i18n) return void 0;
|
|
37549
37789
|
const pathname = withoutPathPrefix(url.pathname, manifest.config.basePath);
|
|
37550
|
-
|
|
37551
|
-
return i18n.locales.find((candidate) => candidate.toLowerCase() === segment) ?? (0, import_routing.detectDomainLocale)(i18n.domains, url.hostname)?.defaultLocale ?? i18n.defaultLocale;
|
|
37790
|
+
return (0, import_routing.normalizeLocalePath)(pathname, i18n.locales).detectedLocale ?? (0, import_routing.detectDomainLocale)(i18n.domains, url.hostname)?.defaultLocale ?? i18n.defaultLocale;
|
|
37552
37791
|
}
|
|
37553
37792
|
|
|
37554
37793
|
// src/runtime/entrypoints.ts
|
|
@@ -38032,9 +38271,8 @@ function padEmptyBody() {
|
|
|
38032
38271
|
}
|
|
38033
38272
|
|
|
38034
38273
|
// src/runtime/image.ts
|
|
38035
|
-
import { readFileSync as readFileSync2 } from "node:fs";
|
|
38036
38274
|
import { isAbsolute as isAbsolutePath, join as join9 } from "node:path";
|
|
38037
|
-
import {
|
|
38275
|
+
import { pathToFileURL } from "node:url";
|
|
38038
38276
|
|
|
38039
38277
|
// src/runtime/image-utils.ts
|
|
38040
38278
|
var import_client_s32 = __toESM(require_dist_cjs16());
|
|
@@ -38105,6 +38343,9 @@ function resolveErrorResponse(error2, ImageError) {
|
|
|
38105
38343
|
return { statusCode: 500, message: "Internal Server Error" };
|
|
38106
38344
|
}
|
|
38107
38345
|
|
|
38346
|
+
// src/cdk-nextjs-version.ts
|
|
38347
|
+
var CDK_NEXTJS_VERSION = require_package().version;
|
|
38348
|
+
|
|
38108
38349
|
// src/runtime/next-modules.ts
|
|
38109
38350
|
import { createRequire as createRequire2 } from "node:module";
|
|
38110
38351
|
import { join as join8 } from "node:path";
|
|
@@ -38164,13 +38405,13 @@ var RuntimeImageOptimizer = class {
|
|
|
38164
38405
|
* off.
|
|
38165
38406
|
*/
|
|
38166
38407
|
isEnabled() {
|
|
38167
|
-
|
|
38168
|
-
|
|
38169
|
-
return imagesConfig.loader === "default" && !imagesConfig.unoptimized;
|
|
38408
|
+
const images = manifestImages(this.options.manifest);
|
|
38409
|
+
return images.loader === "default" && !images.unoptimized;
|
|
38170
38410
|
}
|
|
38171
38411
|
async handle(req, res, url, waitUntil) {
|
|
38172
38412
|
this.loaded ??= loadImageRuntime(this.options);
|
|
38173
|
-
const { next, nextConfig
|
|
38413
|
+
const { next, nextConfig } = this.loaded;
|
|
38414
|
+
const imagesConfig = nextConfig.images;
|
|
38174
38415
|
const {
|
|
38175
38416
|
ImageError,
|
|
38176
38417
|
ImageOptimizerCache,
|
|
@@ -38405,9 +38646,8 @@ function newImageResponseCache(ResponseCache) {
|
|
|
38405
38646
|
}
|
|
38406
38647
|
}
|
|
38407
38648
|
function cacheHandlerUrl(distDir, cacheHandler) {
|
|
38408
|
-
const path = cacheHandler.startsWith("file://") ? fileURLToPath(cacheHandler) : cacheHandler;
|
|
38409
38649
|
return pathToFileURL(
|
|
38410
|
-
isAbsolutePath(
|
|
38650
|
+
isAbsolutePath(cacheHandler) ? cacheHandler : join9(distDir, cacheHandler)
|
|
38411
38651
|
).toString();
|
|
38412
38652
|
}
|
|
38413
38653
|
function deferWrites(images, waitUntil) {
|
|
@@ -38427,29 +38667,29 @@ function sendText(res, statusCode, body) {
|
|
|
38427
38667
|
res.setHeader("Content-Type", "text/plain");
|
|
38428
38668
|
res.end(body);
|
|
38429
38669
|
}
|
|
38430
|
-
function
|
|
38670
|
+
function manifestImages(manifest) {
|
|
38671
|
+
if (manifest.cdkNextjsVersion !== CDK_NEXTJS_VERSION) {
|
|
38672
|
+
throw new Error(
|
|
38673
|
+
`The adapter manifest was written by cdk-nextjs ${manifest.cdkNextjsVersion ?? "(unknown)"}, but this runtime is cdk-nextjs ${CDK_NEXTJS_VERSION}. Rebuild the app with this version.`
|
|
38674
|
+
);
|
|
38675
|
+
}
|
|
38676
|
+
return manifest.config.images;
|
|
38677
|
+
}
|
|
38678
|
+
function loadImageRuntime({ manifest }) {
|
|
38431
38679
|
const next = {
|
|
38432
|
-
configShared: nextModule("next/dist/server/config-shared.js"),
|
|
38433
|
-
imageConfig: nextModule("next/dist/shared/lib/image-config.js"),
|
|
38434
38680
|
optimizer: nextModule("next/dist/server/image-optimizer.js"),
|
|
38435
38681
|
serveStatic: nextModule("next/dist/server/serve-static.js")
|
|
38436
38682
|
};
|
|
38437
|
-
const
|
|
38438
|
-
|
|
38439
|
-
|
|
38440
|
-
|
|
38441
|
-
|
|
38442
|
-
|
|
38443
|
-
|
|
38444
|
-
|
|
38445
|
-
return {
|
|
38446
|
-
next,
|
|
38447
|
-
nextConfig,
|
|
38448
|
-
imagesConfig: {
|
|
38449
|
-
...next.imageConfig.imageConfigDefault,
|
|
38450
|
-
...nextConfig.images
|
|
38451
|
-
}
|
|
38683
|
+
const { config } = manifest;
|
|
38684
|
+
const nextConfig = {
|
|
38685
|
+
basePath: config.basePath,
|
|
38686
|
+
assetPrefix: config.assetPrefix,
|
|
38687
|
+
images: manifestImages(manifest),
|
|
38688
|
+
experimental: config.experimental,
|
|
38689
|
+
cacheHandler: config.cacheHandler ?? void 0,
|
|
38690
|
+
cacheMaxMemorySize: config.cacheMaxMemorySize
|
|
38452
38691
|
};
|
|
38692
|
+
return { next, nextConfig };
|
|
38453
38693
|
}
|
|
38454
38694
|
|
|
38455
38695
|
// src/runtime/middleware.ts
|
|
@@ -39702,7 +39942,7 @@ function formatQuery(event) {
|
|
|
39702
39942
|
|
|
39703
39943
|
// src/runtime/lambda.mts
|
|
39704
39944
|
var runtime = await loadRuntime(
|
|
39705
|
-
deploymentRootOf(dirname2(
|
|
39945
|
+
deploymentRootOf(dirname2(fileURLToPath(import.meta.url)))
|
|
39706
39946
|
);
|
|
39707
39947
|
var LambdaResponseSink = class {
|
|
39708
39948
|
constructor(responseStream) {
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/** Current {@link AdapterManifest.version}. Bump on any breaking shape change. */
|
|
2
|
-
export declare const ADAPTER_MANIFEST_VERSION = 1;
|
|
3
1
|
/**
|
|
4
2
|
* Directory written inside `distDir` (`.next`), matching the existing
|
|
5
3
|
* `cdk-nextjs-init-cache` convention.
|
|
@@ -84,7 +82,13 @@ export declare const PUBLIC_FILES_FILE_NAME = "public-files.json";
|
|
|
84
82
|
*/
|
|
85
83
|
export declare function deployedManifestPath(deploymentRoot: string): string;
|
|
86
84
|
export interface AdapterManifest {
|
|
87
|
-
|
|
85
|
+
/**
|
|
86
|
+
* The cdk-nextjs that wrote this (`CDK_NEXTJS_VERSION`). Whatever reads the
|
|
87
|
+
* manifest requires its own version here, rather than a hand-bumped shape
|
|
88
|
+
* version: the adapter and its readers ship in one package, so a mismatch is
|
|
89
|
+
* always a stale build or a second cdk-nextjs install.
|
|
90
|
+
*/
|
|
91
|
+
readonly cdkNextjsVersion: string;
|
|
88
92
|
readonly buildId: string;
|
|
89
93
|
/**
|
|
90
94
|
* From the deployment root to the Next.js project dir. "" when the app is at
|
|
@@ -171,11 +175,7 @@ export interface AdapterManifestConfig {
|
|
|
171
175
|
readonly basePath: string;
|
|
172
176
|
readonly trailingSlash: boolean;
|
|
173
177
|
readonly assetPrefix: string;
|
|
174
|
-
/**
|
|
175
|
-
* `distDir` relative to the project dir — `.next` unless configured. POSIX.
|
|
176
|
-
* The runtime reads `required-server-files.json` from here for the image
|
|
177
|
-
* optimizer's config.
|
|
178
|
-
*/
|
|
178
|
+
/** `distDir` relative to the project dir — `.next` unless configured. POSIX. */
|
|
179
179
|
readonly distDir: string;
|
|
180
180
|
/**
|
|
181
181
|
* `next.config` `compress`. The runtime gzips streamed responses itself
|
|
@@ -200,6 +200,32 @@ export interface AdapterManifestConfig {
|
|
|
200
200
|
* when the app sets none.
|
|
201
201
|
*/
|
|
202
202
|
readonly deploymentId: string;
|
|
203
|
+
/**
|
|
204
|
+
* `next.config` `images`, resolved and defaulted (`ctx.config.images`).
|
|
205
|
+
* `NextConfigComplete["images"]`-shaped. With {@link experimental},
|
|
206
|
+
* {@link cacheHandler} and {@link cacheMaxMemorySize}, what the image
|
|
207
|
+
* optimizer is handed as its `nextConfig`.
|
|
208
|
+
*
|
|
209
|
+
* `images` and `experimental` are copied whole rather than field by field:
|
|
210
|
+
* Next's optimizer picks what it reads out of both (six `experimental.imgOpt*`
|
|
211
|
+
* flags in 16.4), and a hand-kept list would silently drop the next one it
|
|
212
|
+
* starts reading.
|
|
213
|
+
*/
|
|
214
|
+
readonly images: unknown;
|
|
215
|
+
/**
|
|
216
|
+
* `next.config` `experimental`, resolved (`ctx.config.experimental`), as
|
|
217
|
+
* JSON: function-valued entries are dropped, as they are from
|
|
218
|
+
* `required-server-files.json`. See {@link images}.
|
|
219
|
+
*/
|
|
220
|
+
readonly experimental: unknown;
|
|
221
|
+
/**
|
|
222
|
+
* `next.config` `cacheHandler`, relative to the dist dir as
|
|
223
|
+
* `required-server-files.json` has it (the build machine's absolute path
|
|
224
|
+
* means nothing in the deployment). `null` when there is none.
|
|
225
|
+
*/
|
|
226
|
+
readonly cacheHandler: string | null;
|
|
227
|
+
/** `next.config` `cacheMaxMemorySize`. */
|
|
228
|
+
readonly cacheMaxMemorySize: number;
|
|
203
229
|
}
|
|
204
230
|
export type AdapterEntrypointType = "app-page" | "app-route" | "page" | "page-api";
|
|
205
231
|
export interface AdapterEntrypoint {
|
package/lib/runtime/manifest.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PUBLIC_FILES_FILE_NAME = exports.RUNTIME_DIR_NAME = exports.ERROR_PAGE_SUFFIXES = exports.STATUS_PAGE_SUFFIXES = exports.MANIFEST_FILE_NAME = exports.REVALIDATED_PAGE_HOOK = exports.FUNCTION_GROUP_ENV_VAR = exports.GROUPS_DIR_NAME = exports.STAGING_DIR_NAME = exports.ADAPTER_DIR_NAME =
|
|
3
|
+
exports.PUBLIC_FILES_FILE_NAME = exports.RUNTIME_DIR_NAME = exports.ERROR_PAGE_SUFFIXES = exports.STATUS_PAGE_SUFFIXES = exports.MANIFEST_FILE_NAME = exports.REVALIDATED_PAGE_HOOK = exports.FUNCTION_GROUP_ENV_VAR = exports.GROUPS_DIR_NAME = exports.STAGING_DIR_NAME = exports.ADAPTER_DIR_NAME = void 0;
|
|
4
4
|
exports.groupStagingDirName = groupStagingDirName;
|
|
5
5
|
exports.deployedManifestPath = deployedManifestPath;
|
|
6
6
|
/**
|
|
@@ -15,15 +15,17 @@ exports.deployedManifestPath = deployedManifestPath;
|
|
|
15
15
|
* build-machine absolute path: absolute paths work on the build machine and
|
|
16
16
|
* fail in Lambda. The staging tree those keys index into is
|
|
17
17
|
* `<distDir>/cdk-nextjs-adapter/app`; the runtime calls that directory the
|
|
18
|
-
* *deployment root* and resolves every key against it.
|
|
18
|
+
* *deployment root* and resolves every key against it. The exceptions are the
|
|
19
|
+
* Next.js config copied into {@link AdapterManifestConfig}: `cacheHandler` is
|
|
20
|
+
* relative to the dist dir, as Next's own `required-server-files.json` has it,
|
|
21
|
+
* and `images` is copied whole, so `images.loaderFile` stays the build machine's
|
|
22
|
+
* absolute path (nothing in the runtime reads it).
|
|
19
23
|
*
|
|
20
24
|
* This file is intentionally not exported from `src/index.ts`: it is an
|
|
21
25
|
* internal contract, not public construct API, so it is exempt from the JSII
|
|
22
26
|
* restrictions the rest of `src/` follows.
|
|
23
27
|
*/
|
|
24
28
|
const node_path_1 = require("node:path");
|
|
25
|
-
/** Current {@link AdapterManifest.version}. Bump on any breaking shape change. */
|
|
26
|
-
exports.ADAPTER_MANIFEST_VERSION = 1;
|
|
27
29
|
/**
|
|
28
30
|
* Directory written inside `distDir` (`.next`), matching the existing
|
|
29
31
|
* `cdk-nextjs-init-cache` convention.
|
|
@@ -115,4 +117,4 @@ exports.PUBLIC_FILES_FILE_NAME = "public-files.json";
|
|
|
115
117
|
function deployedManifestPath(deploymentRoot) {
|
|
116
118
|
return (0, node_path_1.join)(deploymentRoot, exports.RUNTIME_DIR_NAME, exports.MANIFEST_FILE_NAME);
|
|
117
119
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzRUEsa0RBRUM7QUFvREQsb0RBRUM7QUE5SEQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gseUNBQWlDO0FBRWpDLGtGQUFrRjtBQUNyRSxRQUFBLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUUxQzs7O0dBR0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7O0dBSUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUV0Qzs7Ozs7Ozs7OztHQVVHO0FBQ1UsUUFBQSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsMkJBQTJCLENBQUM7QUFFbEU7Ozs7O0dBS0c7QUFDVSxRQUFBLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQzdDLHNDQUFzQyxDQUN2QyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEtBQWM7SUFDaEQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyx3QkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyx1QkFBZSxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCx3RUFBd0U7QUFDM0QsUUFBQSxrQkFBa0IsR0FBRyxlQUFlLENBQUM7QUFFbEQ7OztHQUdHO0FBQ1UsUUFBQSxvQkFBb0IsR0FBRztJQUNsQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQzVCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNiLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNVLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsR0FBRyw0QkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDNUIsR0FBRyw0QkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDNUIsNEJBQW9CLENBQUMsUUFBUTtDQUM5QixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUUxRDs7Ozs7R0FLRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLGNBQXNCO0lBQ3pELE9BQU8sSUFBQSxnQkFBSSxFQUFDLGNBQWMsRUFBRSx3QkFBZ0IsRUFBRSwwQkFBa0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBidWlsZC10aW1lIOKGkiBydW4tdGltZSBjb250cmFjdCBmb3IgdGhlIGFkYXB0ZXIgcnVudGltZS5cbiAqXG4gKiBgc3JjL2FkYXB0ZXIvYnVpbGQtb3V0cHV0cy50c2Agd3JpdGVzIGFuIHtAbGluayBBZGFwdGVyTWFuaWZlc3R9IGR1cmluZ1xuICogYG5leHQgYnVpbGRgOyB0aGUgcnVudGltZSBzaGVsbHMgaW4gYHNyYy9ydW50aW1lL2AgcmVhZCBpdCBhdCBjb2xkIHN0YXJ0IGFuZFxuICogdGhlIENESyBjb25zdHJ1Y3RzIHJlYWQgaXQgYXQgc3ludGguIEl0IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY3Jvc3NlcyB0aG9zZVxuICogdGhyZWUgYm91bmRhcmllcywgc28gaXQgaXMgZGVsaWJlcmF0ZWx5IHBsYWluIEpTT04uXG4gKlxuICogKipFdmVyeSBwYXRoIGluIHRoaXMgbWFuaWZlc3QgaXMgYSByZXBvLXJvb3QtcmVsYXRpdmUgUE9TSVgga2V5KiosIG5ldmVyIGFcbiAqIGJ1aWxkLW1hY2hpbmUgYWJzb2x1dGUgcGF0aDogYWJzb2x1dGUgcGF0aHMgd29yayBvbiB0aGUgYnVpbGQgbWFjaGluZSBhbmRcbiAqIGZhaWwgaW4gTGFtYmRhLiBUaGUgc3RhZ2luZyB0cmVlIHRob3NlIGtleXMgaW5kZXggaW50byBpc1xuICogYDxkaXN0RGlyPi9jZGstbmV4dGpzLWFkYXB0ZXIvYXBwYDsgdGhlIHJ1bnRpbWUgY2FsbHMgdGhhdCBkaXJlY3RvcnkgdGhlXG4gKiAqZGVwbG95bWVudCByb290KiBhbmQgcmVzb2x2ZXMgZXZlcnkga2V5IGFnYWluc3QgaXQuXG4gKlxuICogVGhpcyBmaWxlIGlzIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkIGZyb20gYHNyYy9pbmRleC50c2A6IGl0IGlzIGFuXG4gKiBpbnRlcm5hbCBjb250cmFjdCwgbm90IHB1YmxpYyBjb25zdHJ1Y3QgQVBJLCBzbyBpdCBpcyBleGVtcHQgZnJvbSB0aGUgSlNJSVxuICogcmVzdHJpY3Rpb25zIHRoZSByZXN0IG9mIGBzcmMvYCBmb2xsb3dzLlxuICovXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG4vKiogQ3VycmVudCB7QGxpbmsgQWRhcHRlck1hbmlmZXN0LnZlcnNpb259LiBCdW1wIG9uIGFueSBicmVha2luZyBzaGFwZSBjaGFuZ2UuICovXG5leHBvcnQgY29uc3QgQURBUFRFUl9NQU5JRkVTVF9WRVJTSU9OID0gMTtcblxuLyoqXG4gKiBEaXJlY3Rvcnkgd3JpdHRlbiBpbnNpZGUgYGRpc3REaXJgIChgLm5leHRgKSwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nXG4gKiBgY2RrLW5leHRqcy1pbml0LWNhY2hlYCBjb252ZW50aW9uLlxuICovXG5leHBvcnQgY29uc3QgQURBUFRFUl9ESVJfTkFNRSA9IFwiY2RrLW5leHRqcy1hZGFwdGVyXCI7XG5cbi8qKlxuICogRGVwbG95bWVudCByb290IGluc2lkZSB7QGxpbmsgQURBUFRFUl9ESVJfTkFNRX06IHRoZSBzdGFnZWQgdW5pb24gb2YgZXZlcnlcbiAqIHNoaXBwZWQgb3V0cHV0J3MgdHJhY2VkIGBhc3NldHNgLCBrZXllZCBieSByZXBvLXJvb3QtcmVsYXRpdmUgcGF0aC4gVGhpcyBpc1xuICogd2hhdCByZXBsYWNlcyBgb3V0cHV0OiBcInN0YW5kYWxvbmVcImAuXG4gKi9cbmV4cG9ydCBjb25zdCBTVEFHSU5HX0RJUl9OQU1FID0gXCJhcHBcIjtcblxuLyoqXG4gKiBQYXJlbnQgb2YgdGhlIHBlci1ncm91cCBkZXBsb3ltZW50IHJvb3RzLCB1c2VkIGluc3RlYWQgb2ZcbiAqIHtAbGluayBTVEFHSU5HX0RJUl9OQU1FfSB3aGVuIGBmdW5jdGlvbkdyb3Vwc2Agc3BsaXRzIHRoZSBhcHA6IGVhY2ggZ3JvdXAgaXNcbiAqIHN0YWdlZCBhdCBgPGRpc3REaXI+L2Nkay1uZXh0anMtYWRhcHRlci9ncm91cHMvPG5hbWU+L2AsIGluY2x1ZGluZyB0aGUgaW1wbGljaXRcbiAqIGBkZWZhdWx0YCBvbmUuXG4gKlxuICogU3BsaXR0aW5nIGdldHMgaXRzIG93biBzdWJ0cmVlIHJhdGhlciB0aGFuIHJldXNpbmcgYGFwcC9gIGZvciB0aGUgZGVmYXVsdCBncm91cFxuICogc28gdGhhdCBhIHRyZWUgbGVmdCBvdmVyIGZyb20gYSBidWlsZCB3aXRoIGRpZmZlcmVudCBncm91cGluZyBjYW4gbmV2ZXIgYmVcbiAqIG1pc3Rha2VuIGZvciB0aGlzIGJ1aWxkJ3MsIGFuZCBzbyBgZHVgIG9uIGVpdGhlciBkaXJlY3RvcnkgYW5zd2VycyBcImhvdyBiaWcgaXNcbiAqIHRoZSB0aGluZyBJIGRlcGxveVwiIHdpdGhvdXQgcXVhbGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEdST1VQU19ESVJfTkFNRSA9IFwiZ3JvdXBzXCI7XG5cbi8qKlxuICogV2hpY2ggZ3JvdXAgdGhlIHJ1bm5pbmcgZnVuY3Rpb24gKmlzKi4gU2V0IHBlciBMYW1iZGEgYXQgc3ludGgsIHJlYWQgYnkgdGhlXG4gKiBydW50aW1lIG9ubHkgdG8gbWFrZSBhIG1pc3JvdXRlIHNheSBzbzsgc2VlIGBvd25lZFJvdXRlRXJyb3JgLlxuICovXG5leHBvcnQgY29uc3QgRlVOQ1RJT05fR1JPVVBfRU5WX1ZBUiA9IFwiQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUFwiO1xuXG4vKipcbiAqIFRoZSBnbG9iYWwgdGhlIGNhY2hlIGhhbmRsZXIgKGBzcmMvYWRhcHRlci9zMy1jYWNoZS1oYW5kbGVyLnRzYCkgcmVnaXN0ZXJzIGl0c1xuICogQ2xvdWRGcm9udCBpbnZhbGlkYXRpb24gaG9vayB1bmRlciwgYW5kIHRoZSBydW50aW1lIChgY29yZS50c2ApIGNhbGxzLiBBIGdsb2JhbFxuICogcmF0aGVyIHRoYW4gYW4gaW1wb3J0LCBiZWNhdXNlIHRoZSBjYWNoZSBoYW5kbGVyIGlzIGEgc2VwYXJhdGUgYnVuZGxlIHRoYXRcbiAqIE5leHQuanMgbG9hZHMgaXRzZWxmOiB0aGUgdHdvIHNoYXJlIGEgcHJvY2Vzcywgbm90IGEgbW9kdWxlIGdyYXBoLlxuICovXG5leHBvcnQgY29uc3QgUkVWQUxJREFURURfUEFHRV9IT09LID0gU3ltYm9sLmZvcihcbiAgXCJjZGstbmV4dGpzLmludmFsaWRhdGVSZXZhbGlkYXRlZFBhZ2VcIixcbik7XG5cbi8qKlxuICogRGlyZWN0b3J5IGluc2lkZSB7QGxpbmsgQURBUFRFUl9ESVJfTkFNRX0gaG9sZGluZyBvbmUgZGVwbG95bWVudCByb290LCByZWxhdGl2ZVxuICogYW5kIFBPU0lYLiBgdW5kZWZpbmVkYCBtZWFucyBcIm5vdCBzcGxpdHRpbmdcIiwgd2hpY2ggaXMgaXRzIG93biBsYXlvdXQgcmF0aGVyXG4gKiB0aGFuIGEgZ3JvdXAgbmFtZWQgYGRlZmF1bHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBTdGFnaW5nRGlyTmFtZShncm91cD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBncm91cCA9PT0gdW5kZWZpbmVkID8gU1RBR0lOR19ESVJfTkFNRSA6IGAke0dST1VQU19ESVJfTkFNRX0vJHtncm91cH1gO1xufVxuXG4vKioge0BsaW5rIEFkYXB0ZXJNYW5pZmVzdH0sIHdyaXR0ZW4gaW5zaWRlIHtAbGluayBBREFQVEVSX0RJUl9OQU1FfS4gKi9cbmV4cG9ydCBjb25zdCBNQU5JRkVTVF9GSUxFX05BTUUgPSBcIm1hbmlmZXN0Lmpzb25cIjtcblxuLyoqXG4gKiBUaGUgZW50cnlwb2ludHMgdGhlIHJ1bnRpbWUgcmVuZGVycyBhIDQwNCBvciBhIDUwMCB3aXRoLCBpbiB0aGUgb3JkZXIgaXRcbiAqIHRyaWVzIHRoZW0sIGFuZCBgL19lcnJvcmAsIHRoZSBsYXN0IHJlc29ydCBmb3IgYm90aC4gQmVmb3JlIGJhc2VQYXRoLlxuICovXG5leHBvcnQgY29uc3QgU1RBVFVTX1BBR0VfU1VGRklYRVMgPSB7XG4gIDQwNDogW1wiL19ub3QtZm91bmRcIiwgXCIvNDA0XCJdLFxuICA1MDA6IFtcIi81MDBcIl0sXG4gIGZhbGxiYWNrOiBcIi9fZXJyb3JcIixcbn07XG5cbi8qKlxuICogRXZlcnkge0BsaW5rIFNUQVRVU19QQUdFX1NVRkZJWEVTfSBwYWdlOiBBcHAgUm91dGVyJ3MgYC9fbm90LWZvdW5kYCwgUGFnZXNcbiAqIFJvdXRlcidzIGAvNDA0YCBhbmQgYC81MDBgLCBhbmQgYC9fZXJyb3JgLiBUaGUgcnVudGltZSBtYXkgcmVuZGVyIGFueSByZXF1ZXN0XG4gKiB3aXRoIHRoZW0sIHdoZXJldmVyIGl0IGxhbmRlZCwgc28gZXZlcnkgZnVuY3Rpb24gZ3JvdXAgc3RhZ2VzIHRoZW1cbiAqIChgY29sbGVjdEdyb3VwU3RhZ2luZ1BsYW5gKSBhbmQgbm8gVVJMIGhhcyB0byBiZSByb3V0ZWQgdG8gdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBR0VfU1VGRklYRVMgPSBbXG4gIC4uLlNUQVRVU19QQUdFX1NVRkZJWEVTWzQwNF0sXG4gIC4uLlNUQVRVU19QQUdFX1NVRkZJWEVTWzUwMF0sXG4gIFNUQVRVU19QQUdFX1NVRkZJWEVTLmZhbGxiYWNrLFxuXTtcblxuLyoqXG4gKiBSZXNlcnZlZCBrZXkgaW5zaWRlIHRoZSBzdGFnaW5nIHRyZWUgdGhhdCBjZGstbmV4dGpzJ3Mgb3duIGJ1bmRsZWQgcnVudGltZVxuICogZmlsZXMgYXJlIGNvcGllZCB0byBhdCBzeW50aCAoTGFtYmRhIGhhbmRsZXJcbiAqIGBjZGstbmV4dGpzLXJ1bnRpbWUvbGFtYmRhLmhhbmRsZXJgKS4gUmVzZXJ2ZWQgYmVjYXVzZSBhIHJlcG8tcm9vdC1yZWxhdGl2ZVxuICogYXNzZXQga2V5IGNvdWxkIG90aGVyd2lzZSBjb2xsaWRlIHdpdGggaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBSVU5USU1FX0RJUl9OQU1FID0gXCJjZGstbmV4dGpzLXJ1bnRpbWVcIjtcblxuLyoqXG4gKiBUaGUgZmlsZSwgbmV4dCB0byB0aGUgbWFuaWZlc3QgaW4ge0BsaW5rIFJVTlRJTUVfRElSX05BTUV9LCB0aGF0IGxpc3RzXG4gKiBgcHVibGljL2Agb24gZXZlcnkgdHlwZSBidXQgYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2A6IGEgSlNPTiBhcnJheSBvZlxuICogYC9gLXNlcGFyYXRlZCBwYXRocyByZWxhdGl2ZSB0byBgcHVibGljL2AsIGFzIGByZWFkUHVibGljRmlsZXNgIHJldHVybnMgdGhlbS5cbiAqIFN5bnRoIHdyaXRlcyBpdCBhZnRlciB0aGUgYnVpbGQgY29tbWFuZCAoc28gYHBvc3RidWlsZGAgb3V0cHV0IGlzIGxpc3RlZClcbiAqIGJlY2F1c2UgdGhvc2UgZGVwbG95bWVudCBwYWNrYWdlcyBkbyBub3QgY2FycnkgYHB1YmxpYy9gIGl0c2VsZjsgdGhlIHJ1bnRpbWVcbiAqIHNlcnZlcyBhIGxpc3RlZCBmaWxlIGZyb20gUzMuIFRoZSBSZWdpb25hbENvbnRhaW5lcnMgaW1hZ2UgY29waWVzIGBwdWJsaWMvYFxuICogaW4gYW5kIGhhcyBubyBzdWNoIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSUNfRklMRVNfRklMRV9OQU1FID0gXCJwdWJsaWMtZmlsZXMuanNvblwiO1xuXG4vKipcbiAqIFdoZXJlIHRoZSBydW50aW1lIHJlYWRzIHtAbGluayBBZGFwdGVyTWFuaWZlc3R9IGZyb20sIGdpdmVuIHRoZSBkZXBsb3ltZW50XG4gKiByb290LiBTeW50aCBjb3BpZXMgYG1hbmlmZXN0Lmpzb25gIGluIG5leHQgdG8gdGhlIGJ1bmRsZWQgc2hlbGxzIHJhdGhlciB0aGFuXG4gKiBsZWF2aW5nIGl0IGF0IGl0cyBidWlsZC10aW1lIGxvY2F0aW9uIChgPGRpc3REaXI+L2Nkay1uZXh0anMtYWRhcHRlci9gLCBvbmVcbiAqIGxldmVsICphYm92ZSogdGhlIHN0YWdpbmcgdHJlZSkgc28gdGhhdCBhIHNpbmdsZSBhc3NldCBpcyBzZWxmLWRlc2NyaWJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXBsb3llZE1hbmlmZXN0UGF0aChkZXBsb3ltZW50Um9vdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oZGVwbG95bWVudFJvb3QsIFJVTlRJTUVfRElSX05BTUUsIE1BTklGRVNUX0ZJTEVfTkFNRSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlck1hbmlmZXN0IHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogMTtcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogRnJvbSB0aGUgZGVwbG95bWVudCByb290IHRvIHRoZSBOZXh0LmpzIHByb2plY3QgZGlyLiBcIlwiIHdoZW4gdGhlIGFwcCBpcyBhdFxuICAgKiB0aGUgcmVwbyByb290LlxuICAgKlxuICAgKiAqKlRoZSBydW50aW1lIGBjaGRpcmBzIGhlcmUgYXQgY29sZCBzdGFydCwgYW5kIHRoYXQgaXMgbG9hZC1iZWFyaW5nLioqIE5leHRcbiAgICogaW5saW5lcyBgX19ORVhUX1JFTEFUSVZFX1BST0pFQ1RfRElSID0gcmVsYXRpdmUoYnVpbGRDd2QsIHByb2plY3REaXIpYCBpbnRvXG4gICAqIGV2ZXJ5IGVudHJ5cG9pbnQgYXQgYnVpbGQgdGltZSAoYG5leHQvZGlzdC9idWlsZC9kZWZpbmUtZW52LmpzYCksIGFuZCB0aGVcbiAgICogYnVpbHQgY29kZSByZXNvbHZlcyBpdCBhcyBgam9pbihwcm9jZXNzLmN3ZCgpLCByZWxhdGl2ZVByb2plY3REaXIpYCB0byBmaW5kXG4gICAqIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAsIHRoZSBwcmVyZW5kZXIgbWFuaWZlc3QsIGFuZCB0aGUgYXBwJ3Mgb3duXG4gICAqIGZpbGVzLiBgcmVxdWVzdE1ldGEucmVsYXRpdmVQcm9qZWN0RGlyYCBvdmVycmlkZXMgaXQgaW5cbiAgICogYG5leHQvZGlzdC9zZXJ2ZXIvcm91dGUtbW9kdWxlcy9yb3V0ZS1tb2R1bGUuanNgIGJ1dCAqKm5vdCoqIGluXG4gICAqIGBhcHAtcGFnZS1ydW50aW1lLmpzYCwgd2hpY2ggcGFzc2VzIHRoZSBpbmxpbmVkIHZhbHVlIHRocm91Z2ggYXMgdGhlIHJlbmRlclxuICAgKiBgZGlyYCDigJQgc28gYHByb2Nlc3MuY3dkKClgIGlzIHRoZSBvbmx5IG1lY2hhbmlzbSB0aGF0IGNvdmVycyBldmVyeVxuICAgKiBlbnRyeXBvaW50IHR5cGUuIGBidWlsZC1vdXRwdXRzLnRzYCBhc3NlcnRzIGBidWlsZEN3ZCA9PT0gcHJvamVjdERpcmAgdG9cbiAgICoga2VlcCB0aGUgaW5saW5lZCB2YWx1ZSBgXCJcImAgYW5kIHRoaXMgZmllbGQgdGhlIHdob2xlIGFuc3dlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUHJvamVjdERpcjogc3RyaW5nO1xuICByZWFkb25seSBjb25maWc6IEFkYXB0ZXJNYW5pZmVzdENvbmZpZztcbiAgLyoqIGBjdHgucm91dGluZ2AgdmVyYmF0aW0sIGluY2x1ZGluZyBgbWlkZGxld2FyZU1hdGNoZXJzYC4gKi9cbiAgcmVhZG9ubHkgcm91dGluZzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEV2ZXJ5IHBhdGhuYW1lIGByZXNvbHZlUm91dGVzYCBpcyBhbGxvd2VkIHRvIG1hdGNoOiB0aGUge0BsaW5rIGVudHJ5cG9pbnRzfVxuICAgKiBrZXlzIHBsdXMge0BsaW5rIHN0YXRpY0ZpbGVzfS4gU29ydGVkIGFuZCBkZWR1cGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aG5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFJvdXRlICp0ZW1wbGF0ZSogKGAvYmxvZy9bc2x1Z11gKSDihpIgZW50cnlwb2ludC4gS2V5cyBhcmUgYmFzZVBhdGgtIGFuZFxuICAgKiBsb2NhbGUtcHJlZml4ZWQgZXhhY3RseSBhcyBgcmVzb2x2ZVJvdXRlc2AgcmVwb3J0cyBgcmVzb2x2ZWRQYXRobmFtZWAsIHNvXG4gICAqIHRoZSBsb29rdXAgaXMgYSBwbGFpbiBpbmRleCB3aXRoIG5vIG5vcm1hbGl6YXRpb24uXG4gICAqXG4gICAqIEluY2x1ZGVzIGR5bmFtaWMgKnByZXJlbmRlciogdGVtcGxhdGVzIChub3RhYmx5IFBhZ2VzIFJvdXRlclxuICAgKiBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+Lzxsb2NhbGU+L2Jsb2cvW3NsdWddLmpzb25gKSBtYXBwZWQgdG8gdGhlIGVudHJ5cG9pbnRcbiAgICogb2YgdGhlIHJvdXRlIHRoYXQgb3ducyB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnlwb2ludHM6IFJlY29yZDxzdHJpbmcsIEFkYXB0ZXJFbnRyeXBvaW50PjtcbiAgcmVhZG9ubHkgbWlkZGxld2FyZTogQWRhcHRlck1pZGRsZXdhcmUgfCBudWxsO1xuICAvKipcbiAgICogUGF0aG5hbWUg4oaSIHJlcG8tcm9vdC1yZWxhdGl2ZSBQT1NJWCBrZXkgb2YgdGhlIGZpbGUgdG8gc2VydmUuXG4gICAqXG4gICAqIEEgbWFwIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBwYXRobmFtZXMgYmVjYXVzZSB0aGUgdHdvIGFyZSBub3QgZGVyaXZhYmxlIGZyb21cbiAgICogZWFjaCBvdGhlcjogYC9mYXZpY29uLmljb2AgaXMgYDxkaXN0RGlyPi9zZXJ2ZXIvYXBwL2Zhdmljb24uaWNvLmJvZHlgLCBgLzQwNGBcbiAgICogaXMgYDxkaXN0RGlyPi9zZXJ2ZXIvcGFnZXMvNDA0Lmh0bWxgLCBhbmQgYSBmdWxseS1zdGF0aWMgUGFnZXMgUm91dGVyIHJvdXRlXG4gICAqIGlzIGA8ZGlzdERpcj4vc2VydmVyL3BhZ2VzLzxyb3V0ZT4uaHRtbGAuIFRoZSBydW50aW1lIHNlcnZlcyB0aGVzZSBpdHNlbGYg4oCUXG4gICAqIGBOZXh0anNTdGF0aWNBc3NldHNgIG9ubHkgdXBsb2FkcyBgPGRpc3REaXI+L3N0YXRpY2AgYW5kIGBwdWJsaWNgLCBzbyBub3RoaW5nXG4gICAqIGluIGZyb250IG9mIHRoZSBjb21wdXRlIGNhbiBhbnN3ZXIgdGhlbS5cbiAgICpcbiAgICogV2hldGhlciB0aGUgZmlsZSBpcyBwcmVzZW50IGluIHRoZSBkZXBsb3ltZW50IHBhY2thZ2UgZGVwZW5kcyBvbiB0aGVcbiAgICogZGVwbG95bWVudCB0eXBlOyBzZWUgYHN0YWdlU2VydmVkU3RhdGljRmlsZXNgIGluIGBidWlsZC1vdXRwdXRzLnRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0ZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogR3JvdXAgbmFtZSDihpIgdGhlIHJvdXRlIHRlbXBsYXRlcyB0aGF0IGdyb3VwJ3MgZGVwbG95bWVudCBwYWNrYWdlIGhvbGRzLFxuICAgKiBpbmNsdWRpbmcgdGhlIGltcGxpY2l0IGBkZWZhdWx0YC4gQWJzZW50IHdoZW4gYGZ1bmN0aW9uR3JvdXBzYCBpcyBub3QgdXNlZC5cbiAgICpcbiAgICogRXZlcnkgZ3JvdXAgZ2V0cyB0aGUgKnNhbWUqIG1hbmlmZXN0LCBiZWNhdXNlIHJvdXRpbmcgaXMgaWRlbnRpY2FsIGluIGFsbCBvZlxuICAgKiB0aGVtOiBtaWRkbGV3YXJlLCByZWRpcmVjdHMgYW5kIHJld3JpdGVzIGFyZSBkdXBsaWNhdGVkIGJ5IGRlc2lnbiwgYW5kIGFcbiAgICogZ3JvdXAgaGFzIHRvIGJlIGFibGUgdG8gcmVzb2x2ZSBhIHBhdGhuYW1lIGl0IGRvZXMgbm90IG93biBpbiBvcmRlciB0byBzYXkgc29cbiAgICogcmF0aGVyIHRoYW4gY3Jhc2ggb24gYSBtaXNzaW5nIGZpbGUuIFRoaXMgZmllbGQgaXMgd2hhdCBsZXRzIGl0IHNheSBzby5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgLyoqXG4gICAqIEV2ZXJ5IGJlaGF2aW9yIHRoZSBlZGdlIHJvdXRlcyBhIG5vbi1kZWZhdWx0IGdyb3VwIG9uLCBtb3N0IHNwZWNpZmljIGZpcnN0XG4gICAqIChgR3JvdXBCZWhhdmlvcmAgaW4gYGZ1bmN0aW9uLWdyb3Vwcy50c2ApLiBQcmVzZW50IGV4YWN0bHkgd2hlblxuICAgKiB7QGxpbmsgZ3JvdXBzfSBpcy4gUmVjb3JkZWQgYnkgdGhlIGFzc2lnbm1lbnQgcmF0aGVyIHRoYW4gcmVjb21wdXRlZCBhdFxuICAgKiBzeW50aCwgc28gdGhlIGJlaGF2aW9ycyBkZXBsb3llZCBhcmUgdGhlIG9uZXMgaXQgY2hlY2tlZC5cbiAgICovXG4gIHJlYWRvbmx5IGJlaGF2aW9ycz86IHsgZ3JvdXA6IHN0cmluZzsgcm91dGU6IHN0cmluZzsgcGF0dGVybjogc3RyaW5nIH1bXTtcbiAgLyoqXG4gICAqIFRoZSBgZnVuY3Rpb25Hcm91cHNgIHRoZSBidWlsZCB3YXMgc3BsaXQgYnkgKG5hbWUgYW5kIHJvdXRlcywgYXMgcGFzc2VkIGluXG4gICAqIGBDREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQU2ApLCBwcmVzZW50IGV4YWN0bHkgd2hlbiB7QGxpbmsgZ3JvdXBzfSBpcy4gU3ludGhcbiAgICogY29tcGFyZXMgaXQgd2l0aCBpdHMgb3duIHByb3BzIHRvIGNhdGNoIGEgc3RhbGUgb3IgaGFuZC1ydW4gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbkdyb3Vwcz86IHsgbmFtZTogc3RyaW5nOyByb3V0ZXM6IHN0cmluZ1tdIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyTWFuaWZlc3RDb25maWcge1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuICByZWFkb25seSB0cmFpbGluZ1NsYXNoOiBib29sZWFuO1xuICByZWFkb25seSBhc3NldFByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogYGRpc3REaXJgIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IGRpciDigJQgYC5uZXh0YCB1bmxlc3MgY29uZmlndXJlZC4gUE9TSVguXG4gICAqIFRoZSBydW50aW1lIHJlYWRzIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgZnJvbSBoZXJlIGZvciB0aGUgaW1hZ2VcbiAgICogb3B0aW1pemVyJ3MgY29uZmlnLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdERpcjogc3RyaW5nO1xuICAvKipcbiAgICogYG5leHQuY29uZmlnYCBgY29tcHJlc3NgLiBUaGUgcnVudGltZSBnemlwcyBzdHJlYW1lZCByZXNwb25zZXMgaXRzZWxmXG4gICAqIChuZWl0aGVyIEFQSSBHYXRld2F5IGluIFNUUkVBTSBtb2RlIG5vciBDbG91ZEZyb250IGNhbiksIHNvIGhvbm9yaW5nIHRoaXNcbiAgICogaXMgb24gdXMuXG4gICAqL1xuICByZWFkb25seSBjb21wcmVzczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGBuZXh0LmNvbmZpZ2AgYGdlbmVyYXRlRXRhZ3NgLiBIb25vcmVkIGZvciB0aGUgZmlsZXMgdGhlIHJ1bnRpbWUgc2VydmVzXG4gICAqIGl0c2VsZiwgYXMgYG5leHQgc3RhcnRgIGRvZXMgKGBzZXJ2ZVN0YXRpY2AncyBgZXRhZ2Agb3B0aW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlRXRhZ3M6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBgUmVzb2x2ZVJvdXRlc1BhcmFtc1tcImkxOG5cIl1gLXNoYXBlZCwgbmFycm93ZXIgdGhhbiBOZXh0Q29uZmlnQ29tcGxldGUuXG4gICAqIGBudWxsYCB3aGVuIHRoZSBhcHAgY29uZmlndXJlcyBubyBgaTE4bmAuXG4gICAqL1xuICByZWFkb25seSBpMThuOiB1bmtub3duIHwgbnVsbDtcbiAgLyoqXG4gICAqIGBuZXh0LmNvbmZpZ2AgYGRlcGxveW1lbnRJZGAgKG9yIGBORVhUX0RFUExPWU1FTlRfSURgKSwgcmVkdWNlZCB0byB0aGVcbiAgICogY2hhcmFjdGVycyBzYWZlIGluIGFuIFMzIGtleSBwcmVmaXggYW5kIGEgRHluYW1vREIgcGFydGl0aW9uIGtleSDigJQgYC9gIGluXG4gICAqIHBhcnRpY3VsYXIgd291bGQgc3BsaXQgdGhlIHByZWZpeCBgcHJ1bmUtY2FjaGUtYnVja2V0LnRzYCBtYXRjaGVzIG9uLiBgXCJcImBcbiAgICogd2hlbiB0aGUgYXBwIHNldHMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZGFwdGVyRW50cnlwb2ludFR5cGUgPVxuICBcImFwcC1wYWdlXCIgfCBcImFwcC1yb3V0ZVwiIHwgXCJwYWdlXCIgfCBcInBhZ2UtYXBpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckVudHJ5cG9pbnQge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogUmVwby1yb290LXJlbGF0aXZlIFBPU0lYIGtleSBpbnNpZGUgdGhlIHN0YWdpbmcgdHJlZS4gTmV2ZXIgYWJzb2x1dGUuICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU6IEFkYXB0ZXJFbnRyeXBvaW50VHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyTWlkZGxld2FyZSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBSZXBvLXJvb3QtcmVsYXRpdmUgUE9TSVgga2V5IGluc2lkZSB0aGUgc3RhZ2luZyB0cmVlLiBOZXZlciBhYnNvbHV0ZS4gKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcbn1cbiJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1RUEsa0RBRUM7QUFvREQsb0RBRUM7QUEvSEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILHlDQUFpQztBQUVqQzs7O0dBR0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7O0dBSUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUV0Qzs7Ozs7Ozs7OztHQVVHO0FBQ1UsUUFBQSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsMkJBQTJCLENBQUM7QUFFbEU7Ozs7O0dBS0c7QUFDVSxRQUFBLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQzdDLHNDQUFzQyxDQUN2QyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEtBQWM7SUFDaEQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyx3QkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyx1QkFBZSxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCx3RUFBd0U7QUFDM0QsUUFBQSxrQkFBa0IsR0FBRyxlQUFlLENBQUM7QUFFbEQ7OztHQUdHO0FBQ1UsUUFBQSxvQkFBb0IsR0FBRztJQUNsQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQzVCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNiLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNVLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsR0FBRyw0QkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDNUIsR0FBRyw0QkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDNUIsNEJBQW9CLENBQUMsUUFBUTtDQUM5QixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUUxRDs7Ozs7R0FLRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLGNBQXNCO0lBQ3pELE9BQU8sSUFBQSxnQkFBSSxFQUFDLGNBQWMsRUFBRSx3QkFBZ0IsRUFBRSwwQkFBa0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBidWlsZC10aW1lIOKGkiBydW4tdGltZSBjb250cmFjdCBmb3IgdGhlIGFkYXB0ZXIgcnVudGltZS5cbiAqXG4gKiBgc3JjL2FkYXB0ZXIvYnVpbGQtb3V0cHV0cy50c2Agd3JpdGVzIGFuIHtAbGluayBBZGFwdGVyTWFuaWZlc3R9IGR1cmluZ1xuICogYG5leHQgYnVpbGRgOyB0aGUgcnVudGltZSBzaGVsbHMgaW4gYHNyYy9ydW50aW1lL2AgcmVhZCBpdCBhdCBjb2xkIHN0YXJ0IGFuZFxuICogdGhlIENESyBjb25zdHJ1Y3RzIHJlYWQgaXQgYXQgc3ludGguIEl0IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY3Jvc3NlcyB0aG9zZVxuICogdGhyZWUgYm91bmRhcmllcywgc28gaXQgaXMgZGVsaWJlcmF0ZWx5IHBsYWluIEpTT04uXG4gKlxuICogKipFdmVyeSBwYXRoIGluIHRoaXMgbWFuaWZlc3QgaXMgYSByZXBvLXJvb3QtcmVsYXRpdmUgUE9TSVgga2V5KiosIG5ldmVyIGFcbiAqIGJ1aWxkLW1hY2hpbmUgYWJzb2x1dGUgcGF0aDogYWJzb2x1dGUgcGF0aHMgd29yayBvbiB0aGUgYnVpbGQgbWFjaGluZSBhbmRcbiAqIGZhaWwgaW4gTGFtYmRhLiBUaGUgc3RhZ2luZyB0cmVlIHRob3NlIGtleXMgaW5kZXggaW50byBpc1xuICogYDxkaXN0RGlyPi9jZGstbmV4dGpzLWFkYXB0ZXIvYXBwYDsgdGhlIHJ1bnRpbWUgY2FsbHMgdGhhdCBkaXJlY3RvcnkgdGhlXG4gKiAqZGVwbG95bWVudCByb290KiBhbmQgcmVzb2x2ZXMgZXZlcnkga2V5IGFnYWluc3QgaXQuIFRoZSBleGNlcHRpb25zIGFyZSB0aGVcbiAqIE5leHQuanMgY29uZmlnIGNvcGllZCBpbnRvIHtAbGluayBBZGFwdGVyTWFuaWZlc3RDb25maWd9OiBgY2FjaGVIYW5kbGVyYCBpc1xuICogcmVsYXRpdmUgdG8gdGhlIGRpc3QgZGlyLCBhcyBOZXh0J3Mgb3duIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgaGFzIGl0LFxuICogYW5kIGBpbWFnZXNgIGlzIGNvcGllZCB3aG9sZSwgc28gYGltYWdlcy5sb2FkZXJGaWxlYCBzdGF5cyB0aGUgYnVpbGQgbWFjaGluZSdzXG4gKiBhYnNvbHV0ZSBwYXRoIChub3RoaW5nIGluIHRoZSBydW50aW1lIHJlYWRzIGl0KS5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgaW50ZW50aW9uYWxseSBub3QgZXhwb3J0ZWQgZnJvbSBgc3JjL2luZGV4LnRzYDogaXQgaXMgYW5cbiAqIGludGVybmFsIGNvbnRyYWN0LCBub3QgcHVibGljIGNvbnN0cnVjdCBBUEksIHNvIGl0IGlzIGV4ZW1wdCBmcm9tIHRoZSBKU0lJXG4gKiByZXN0cmljdGlvbnMgdGhlIHJlc3Qgb2YgYHNyYy9gIGZvbGxvd3MuXG4gKi9cbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbi8qKlxuICogRGlyZWN0b3J5IHdyaXR0ZW4gaW5zaWRlIGBkaXN0RGlyYCAoYC5uZXh0YCksIG1hdGNoaW5nIHRoZSBleGlzdGluZ1xuICogYGNkay1uZXh0anMtaW5pdC1jYWNoZWAgY29udmVudGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFEQVBURVJfRElSX05BTUUgPSBcImNkay1uZXh0anMtYWRhcHRlclwiO1xuXG4vKipcbiAqIERlcGxveW1lbnQgcm9vdCBpbnNpZGUge0BsaW5rIEFEQVBURVJfRElSX05BTUV9OiB0aGUgc3RhZ2VkIHVuaW9uIG9mIGV2ZXJ5XG4gKiBzaGlwcGVkIG91dHB1dCdzIHRyYWNlZCBgYXNzZXRzYCwga2V5ZWQgYnkgcmVwby1yb290LXJlbGF0aXZlIHBhdGguIFRoaXMgaXNcbiAqIHdoYXQgcmVwbGFjZXMgYG91dHB1dDogXCJzdGFuZGFsb25lXCJgLlxuICovXG5leHBvcnQgY29uc3QgU1RBR0lOR19ESVJfTkFNRSA9IFwiYXBwXCI7XG5cbi8qKlxuICogUGFyZW50IG9mIHRoZSBwZXItZ3JvdXAgZGVwbG95bWVudCByb290cywgdXNlZCBpbnN0ZWFkIG9mXG4gKiB7QGxpbmsgU1RBR0lOR19ESVJfTkFNRX0gd2hlbiBgZnVuY3Rpb25Hcm91cHNgIHNwbGl0cyB0aGUgYXBwOiBlYWNoIGdyb3VwIGlzXG4gKiBzdGFnZWQgYXQgYDxkaXN0RGlyPi9jZGstbmV4dGpzLWFkYXB0ZXIvZ3JvdXBzLzxuYW1lPi9gLCBpbmNsdWRpbmcgdGhlIGltcGxpY2l0XG4gKiBgZGVmYXVsdGAgb25lLlxuICpcbiAqIFNwbGl0dGluZyBnZXRzIGl0cyBvd24gc3VidHJlZSByYXRoZXIgdGhhbiByZXVzaW5nIGBhcHAvYCBmb3IgdGhlIGRlZmF1bHQgZ3JvdXBcbiAqIHNvIHRoYXQgYSB0cmVlIGxlZnQgb3ZlciBmcm9tIGEgYnVpbGQgd2l0aCBkaWZmZXJlbnQgZ3JvdXBpbmcgY2FuIG5ldmVyIGJlXG4gKiBtaXN0YWtlbiBmb3IgdGhpcyBidWlsZCdzLCBhbmQgc28gYGR1YCBvbiBlaXRoZXIgZGlyZWN0b3J5IGFuc3dlcnMgXCJob3cgYmlnIGlzXG4gKiB0aGUgdGhpbmcgSSBkZXBsb3lcIiB3aXRob3V0IHF1YWxpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBHUk9VUFNfRElSX05BTUUgPSBcImdyb3Vwc1wiO1xuXG4vKipcbiAqIFdoaWNoIGdyb3VwIHRoZSBydW5uaW5nIGZ1bmN0aW9uICppcyouIFNldCBwZXIgTGFtYmRhIGF0IHN5bnRoLCByZWFkIGJ5IHRoZVxuICogcnVudGltZSBvbmx5IHRvIG1ha2UgYSBtaXNyb3V0ZSBzYXkgc287IHNlZSBgb3duZWRSb3V0ZUVycm9yYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OX0dST1VQX0VOVl9WQVIgPSBcIkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVBcIjtcblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHRoZSBjYWNoZSBoYW5kbGVyIChgc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50c2ApIHJlZ2lzdGVycyBpdHNcbiAqIENsb3VkRnJvbnQgaW52YWxpZGF0aW9uIGhvb2sgdW5kZXIsIGFuZCB0aGUgcnVudGltZSAoYGNvcmUudHNgKSBjYWxscy4gQSBnbG9iYWxcbiAqIHJhdGhlciB0aGFuIGFuIGltcG9ydCwgYmVjYXVzZSB0aGUgY2FjaGUgaGFuZGxlciBpcyBhIHNlcGFyYXRlIGJ1bmRsZSB0aGF0XG4gKiBOZXh0LmpzIGxvYWRzIGl0c2VsZjogdGhlIHR3byBzaGFyZSBhIHByb2Nlc3MsIG5vdCBhIG1vZHVsZSBncmFwaC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFVkFMSURBVEVEX1BBR0VfSE9PSyA9IFN5bWJvbC5mb3IoXG4gIFwiY2RrLW5leHRqcy5pbnZhbGlkYXRlUmV2YWxpZGF0ZWRQYWdlXCIsXG4pO1xuXG4vKipcbiAqIERpcmVjdG9yeSBpbnNpZGUge0BsaW5rIEFEQVBURVJfRElSX05BTUV9IGhvbGRpbmcgb25lIGRlcGxveW1lbnQgcm9vdCwgcmVsYXRpdmVcbiAqIGFuZCBQT1NJWC4gYHVuZGVmaW5lZGAgbWVhbnMgXCJub3Qgc3BsaXR0aW5nXCIsIHdoaWNoIGlzIGl0cyBvd24gbGF5b3V0IHJhdGhlclxuICogdGhhbiBhIGdyb3VwIG5hbWVkIGBkZWZhdWx0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwU3RhZ2luZ0Rpck5hbWUoZ3JvdXA/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ3JvdXAgPT09IHVuZGVmaW5lZCA/IFNUQUdJTkdfRElSX05BTUUgOiBgJHtHUk9VUFNfRElSX05BTUV9LyR7Z3JvdXB9YDtcbn1cblxuLyoqIHtAbGluayBBZGFwdGVyTWFuaWZlc3R9LCB3cml0dGVuIGluc2lkZSB7QGxpbmsgQURBUFRFUl9ESVJfTkFNRX0uICovXG5leHBvcnQgY29uc3QgTUFOSUZFU1RfRklMRV9OQU1FID0gXCJtYW5pZmVzdC5qc29uXCI7XG5cbi8qKlxuICogVGhlIGVudHJ5cG9pbnRzIHRoZSBydW50aW1lIHJlbmRlcnMgYSA0MDQgb3IgYSA1MDAgd2l0aCwgaW4gdGhlIG9yZGVyIGl0XG4gKiB0cmllcyB0aGVtLCBhbmQgYC9fZXJyb3JgLCB0aGUgbGFzdCByZXNvcnQgZm9yIGJvdGguIEJlZm9yZSBiYXNlUGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRVU19QQUdFX1NVRkZJWEVTID0ge1xuICA0MDQ6IFtcIi9fbm90LWZvdW5kXCIsIFwiLzQwNFwiXSxcbiAgNTAwOiBbXCIvNTAwXCJdLFxuICBmYWxsYmFjazogXCIvX2Vycm9yXCIsXG59O1xuXG4vKipcbiAqIEV2ZXJ5IHtAbGluayBTVEFUVVNfUEFHRV9TVUZGSVhFU30gcGFnZTogQXBwIFJvdXRlcidzIGAvX25vdC1mb3VuZGAsIFBhZ2VzXG4gKiBSb3V0ZXIncyBgLzQwNGAgYW5kIGAvNTAwYCwgYW5kIGAvX2Vycm9yYC4gVGhlIHJ1bnRpbWUgbWF5IHJlbmRlciBhbnkgcmVxdWVzdFxuICogd2l0aCB0aGVtLCB3aGVyZXZlciBpdCBsYW5kZWQsIHNvIGV2ZXJ5IGZ1bmN0aW9uIGdyb3VwIHN0YWdlcyB0aGVtXG4gKiAoYGNvbGxlY3RHcm91cFN0YWdpbmdQbGFuYCkgYW5kIG5vIFVSTCBoYXMgdG8gYmUgcm91dGVkIHRvIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBFUlJPUl9QQUdFX1NVRkZJWEVTID0gW1xuICAuLi5TVEFUVVNfUEFHRV9TVUZGSVhFU1s0MDRdLFxuICAuLi5TVEFUVVNfUEFHRV9TVUZGSVhFU1s1MDBdLFxuICBTVEFUVVNfUEFHRV9TVUZGSVhFUy5mYWxsYmFjayxcbl07XG5cbi8qKlxuICogUmVzZXJ2ZWQga2V5IGluc2lkZSB0aGUgc3RhZ2luZyB0cmVlIHRoYXQgY2RrLW5leHRqcydzIG93biBidW5kbGVkIHJ1bnRpbWVcbiAqIGZpbGVzIGFyZSBjb3BpZWQgdG8gYXQgc3ludGggKExhbWJkYSBoYW5kbGVyXG4gKiBgY2RrLW5leHRqcy1ydW50aW1lL2xhbWJkYS5oYW5kbGVyYCkuIFJlc2VydmVkIGJlY2F1c2UgYSByZXBvLXJvb3QtcmVsYXRpdmVcbiAqIGFzc2V0IGtleSBjb3VsZCBvdGhlcndpc2UgY29sbGlkZSB3aXRoIGl0LlxuICovXG5leHBvcnQgY29uc3QgUlVOVElNRV9ESVJfTkFNRSA9IFwiY2RrLW5leHRqcy1ydW50aW1lXCI7XG5cbi8qKlxuICogVGhlIGZpbGUsIG5leHQgdG8gdGhlIG1hbmlmZXN0IGluIHtAbGluayBSVU5USU1FX0RJUl9OQU1FfSwgdGhhdCBsaXN0c1xuICogYHB1YmxpYy9gIG9uIGV2ZXJ5IHR5cGUgYnV0IGBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNgOiBhIEpTT04gYXJyYXkgb2ZcbiAqIGAvYC1zZXBhcmF0ZWQgcGF0aHMgcmVsYXRpdmUgdG8gYHB1YmxpYy9gLCBhcyBgcmVhZFB1YmxpY0ZpbGVzYCByZXR1cm5zIHRoZW0uXG4gKiBTeW50aCB3cml0ZXMgaXQgYWZ0ZXIgdGhlIGJ1aWxkIGNvbW1hbmQgKHNvIGBwb3N0YnVpbGRgIG91dHB1dCBpcyBsaXN0ZWQpXG4gKiBiZWNhdXNlIHRob3NlIGRlcGxveW1lbnQgcGFja2FnZXMgZG8gbm90IGNhcnJ5IGBwdWJsaWMvYCBpdHNlbGY7IHRoZSBydW50aW1lXG4gKiBzZXJ2ZXMgYSBsaXN0ZWQgZmlsZSBmcm9tIFMzLiBUaGUgUmVnaW9uYWxDb250YWluZXJzIGltYWdlIGNvcGllcyBgcHVibGljL2BcbiAqIGluIGFuZCBoYXMgbm8gc3VjaCBmaWxlLlxuICovXG5leHBvcnQgY29uc3QgUFVCTElDX0ZJTEVTX0ZJTEVfTkFNRSA9IFwicHVibGljLWZpbGVzLmpzb25cIjtcblxuLyoqXG4gKiBXaGVyZSB0aGUgcnVudGltZSByZWFkcyB7QGxpbmsgQWRhcHRlck1hbmlmZXN0fSBmcm9tLCBnaXZlbiB0aGUgZGVwbG95bWVudFxuICogcm9vdC4gU3ludGggY29waWVzIGBtYW5pZmVzdC5qc29uYCBpbiBuZXh0IHRvIHRoZSBidW5kbGVkIHNoZWxscyByYXRoZXIgdGhhblxuICogbGVhdmluZyBpdCBhdCBpdHMgYnVpbGQtdGltZSBsb2NhdGlvbiAoYDxkaXN0RGlyPi9jZGstbmV4dGpzLWFkYXB0ZXIvYCwgb25lXG4gKiBsZXZlbCAqYWJvdmUqIHRoZSBzdGFnaW5nIHRyZWUpIHNvIHRoYXQgYSBzaW5nbGUgYXNzZXQgaXMgc2VsZi1kZXNjcmliaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95ZWRNYW5pZmVzdFBhdGgoZGVwbG95bWVudFJvb3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGRlcGxveW1lbnRSb290LCBSVU5USU1FX0RJUl9OQU1FLCBNQU5JRkVTVF9GSUxFX05BTUUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgY2RrLW5leHRqcyB0aGF0IHdyb3RlIHRoaXMgKGBDREtfTkVYVEpTX1ZFUlNJT05gKS4gV2hhdGV2ZXIgcmVhZHMgdGhlXG4gICAqIG1hbmlmZXN0IHJlcXVpcmVzIGl0cyBvd24gdmVyc2lvbiBoZXJlLCByYXRoZXIgdGhhbiBhIGhhbmQtYnVtcGVkIHNoYXBlXG4gICAqIHZlcnNpb246IHRoZSBhZGFwdGVyIGFuZCBpdHMgcmVhZGVycyBzaGlwIGluIG9uZSBwYWNrYWdlLCBzbyBhIG1pc21hdGNoIGlzXG4gICAqIGFsd2F5cyBhIHN0YWxlIGJ1aWxkIG9yIGEgc2Vjb25kIGNkay1uZXh0anMgaW5zdGFsbC5cbiAgICovXG4gIHJlYWRvbmx5IGNka05leHRqc1ZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogRnJvbSB0aGUgZGVwbG95bWVudCByb290IHRvIHRoZSBOZXh0LmpzIHByb2plY3QgZGlyLiBcIlwiIHdoZW4gdGhlIGFwcCBpcyBhdFxuICAgKiB0aGUgcmVwbyByb290LlxuICAgKlxuICAgKiAqKlRoZSBydW50aW1lIGBjaGRpcmBzIGhlcmUgYXQgY29sZCBzdGFydCwgYW5kIHRoYXQgaXMgbG9hZC1iZWFyaW5nLioqIE5leHRcbiAgICogaW5saW5lcyBgX19ORVhUX1JFTEFUSVZFX1BST0pFQ1RfRElSID0gcmVsYXRpdmUoYnVpbGRDd2QsIHByb2plY3REaXIpYCBpbnRvXG4gICAqIGV2ZXJ5IGVudHJ5cG9pbnQgYXQgYnVpbGQgdGltZSAoYG5leHQvZGlzdC9idWlsZC9kZWZpbmUtZW52LmpzYCksIGFuZCB0aGVcbiAgICogYnVpbHQgY29kZSByZXNvbHZlcyBpdCBhcyBgam9pbihwcm9jZXNzLmN3ZCgpLCByZWxhdGl2ZVByb2plY3REaXIpYCB0byBmaW5kXG4gICAqIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAsIHRoZSBwcmVyZW5kZXIgbWFuaWZlc3QsIGFuZCB0aGUgYXBwJ3Mgb3duXG4gICAqIGZpbGVzLiBgcmVxdWVzdE1ldGEucmVsYXRpdmVQcm9qZWN0RGlyYCBvdmVycmlkZXMgaXQgaW5cbiAgICogYG5leHQvZGlzdC9zZXJ2ZXIvcm91dGUtbW9kdWxlcy9yb3V0ZS1tb2R1bGUuanNgIGJ1dCAqKm5vdCoqIGluXG4gICAqIGBhcHAtcGFnZS1ydW50aW1lLmpzYCwgd2hpY2ggcGFzc2VzIHRoZSBpbmxpbmVkIHZhbHVlIHRocm91Z2ggYXMgdGhlIHJlbmRlclxuICAgKiBgZGlyYCDigJQgc28gYHByb2Nlc3MuY3dkKClgIGlzIHRoZSBvbmx5IG1lY2hhbmlzbSB0aGF0IGNvdmVycyBldmVyeVxuICAgKiBlbnRyeXBvaW50IHR5cGUuIGBidWlsZC1vdXRwdXRzLnRzYCBhc3NlcnRzIGBidWlsZEN3ZCA9PT0gcHJvamVjdERpcmAgdG9cbiAgICoga2VlcCB0aGUgaW5saW5lZCB2YWx1ZSBgXCJcImAgYW5kIHRoaXMgZmllbGQgdGhlIHdob2xlIGFuc3dlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUHJvamVjdERpcjogc3RyaW5nO1xuICByZWFkb25seSBjb25maWc6IEFkYXB0ZXJNYW5pZmVzdENvbmZpZztcbiAgLyoqIGBjdHgucm91dGluZ2AgdmVyYmF0aW0sIGluY2x1ZGluZyBgbWlkZGxld2FyZU1hdGNoZXJzYC4gKi9cbiAgcmVhZG9ubHkgcm91dGluZzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEV2ZXJ5IHBhdGhuYW1lIGByZXNvbHZlUm91dGVzYCBpcyBhbGxvd2VkIHRvIG1hdGNoOiB0aGUge0BsaW5rIGVudHJ5cG9pbnRzfVxuICAgKiBrZXlzIHBsdXMge0BsaW5rIHN0YXRpY0ZpbGVzfS4gU29ydGVkIGFuZCBkZWR1cGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aG5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFJvdXRlICp0ZW1wbGF0ZSogKGAvYmxvZy9bc2x1Z11gKSDihpIgZW50cnlwb2ludC4gS2V5cyBhcmUgYmFzZVBhdGgtIGFuZFxuICAgKiBsb2NhbGUtcHJlZml4ZWQgZXhhY3RseSBhcyBgcmVzb2x2ZVJvdXRlc2AgcmVwb3J0cyBgcmVzb2x2ZWRQYXRobmFtZWAsIHNvXG4gICAqIHRoZSBsb29rdXAgaXMgYSBwbGFpbiBpbmRleCB3aXRoIG5vIG5vcm1hbGl6YXRpb24uXG4gICAqXG4gICAqIEluY2x1ZGVzIGR5bmFtaWMgKnByZXJlbmRlciogdGVtcGxhdGVzIChub3RhYmx5IFBhZ2VzIFJvdXRlclxuICAgKiBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+Lzxsb2NhbGU+L2Jsb2cvW3NsdWddLmpzb25gKSBtYXBwZWQgdG8gdGhlIGVudHJ5cG9pbnRcbiAgICogb2YgdGhlIHJvdXRlIHRoYXQgb3ducyB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnlwb2ludHM6IFJlY29yZDxzdHJpbmcsIEFkYXB0ZXJFbnRyeXBvaW50PjtcbiAgcmVhZG9ubHkgbWlkZGxld2FyZTogQWRhcHRlck1pZGRsZXdhcmUgfCBudWxsO1xuICAvKipcbiAgICogUGF0aG5hbWUg4oaSIHJlcG8tcm9vdC1yZWxhdGl2ZSBQT1NJWCBrZXkgb2YgdGhlIGZpbGUgdG8gc2VydmUuXG4gICAqXG4gICAqIEEgbWFwIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBwYXRobmFtZXMgYmVjYXVzZSB0aGUgdHdvIGFyZSBub3QgZGVyaXZhYmxlIGZyb21cbiAgICogZWFjaCBvdGhlcjogYC9mYXZpY29uLmljb2AgaXMgYDxkaXN0RGlyPi9zZXJ2ZXIvYXBwL2Zhdmljb24uaWNvLmJvZHlgLCBgLzQwNGBcbiAgICogaXMgYDxkaXN0RGlyPi9zZXJ2ZXIvcGFnZXMvNDA0Lmh0bWxgLCBhbmQgYSBmdWxseS1zdGF0aWMgUGFnZXMgUm91dGVyIHJvdXRlXG4gICAqIGlzIGA8ZGlzdERpcj4vc2VydmVyL3BhZ2VzLzxyb3V0ZT4uaHRtbGAuIFRoZSBydW50aW1lIHNlcnZlcyB0aGVzZSBpdHNlbGYg4oCUXG4gICAqIGBOZXh0anNTdGF0aWNBc3NldHNgIG9ubHkgdXBsb2FkcyBgPGRpc3REaXI+L3N0YXRpY2AgYW5kIGBwdWJsaWNgLCBzbyBub3RoaW5nXG4gICAqIGluIGZyb250IG9mIHRoZSBjb21wdXRlIGNhbiBhbnN3ZXIgdGhlbS5cbiAgICpcbiAgICogV2hldGhlciB0aGUgZmlsZSBpcyBwcmVzZW50IGluIHRoZSBkZXBsb3ltZW50IHBhY2thZ2UgZGVwZW5kcyBvbiB0aGVcbiAgICogZGVwbG95bWVudCB0eXBlOyBzZWUgYHN0YWdlU2VydmVkU3RhdGljRmlsZXNgIGluIGBidWlsZC1vdXRwdXRzLnRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0ZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogR3JvdXAgbmFtZSDihpIgdGhlIHJvdXRlIHRlbXBsYXRlcyB0aGF0IGdyb3VwJ3MgZGVwbG95bWVudCBwYWNrYWdlIGhvbGRzLFxuICAgKiBpbmNsdWRpbmcgdGhlIGltcGxpY2l0IGBkZWZhdWx0YC4gQWJzZW50IHdoZW4gYGZ1bmN0aW9uR3JvdXBzYCBpcyBub3QgdXNlZC5cbiAgICpcbiAgICogRXZlcnkgZ3JvdXAgZ2V0cyB0aGUgKnNhbWUqIG1hbmlmZXN0LCBiZWNhdXNlIHJvdXRpbmcgaXMgaWRlbnRpY2FsIGluIGFsbCBvZlxuICAgKiB0aGVtOiBtaWRkbGV3YXJlLCByZWRpcmVjdHMgYW5kIHJld3JpdGVzIGFyZSBkdXBsaWNhdGVkIGJ5IGRlc2lnbiwgYW5kIGFcbiAgICogZ3JvdXAgaGFzIHRvIGJlIGFibGUgdG8gcmVzb2x2ZSBhIHBhdGhuYW1lIGl0IGRvZXMgbm90IG93biBpbiBvcmRlciB0byBzYXkgc29cbiAgICogcmF0aGVyIHRoYW4gY3Jhc2ggb24gYSBtaXNzaW5nIGZpbGUuIFRoaXMgZmllbGQgaXMgd2hhdCBsZXRzIGl0IHNheSBzby5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgLyoqXG4gICAqIEV2ZXJ5IGJlaGF2aW9yIHRoZSBlZGdlIHJvdXRlcyBhIG5vbi1kZWZhdWx0IGdyb3VwIG9uLCBtb3N0IHNwZWNpZmljIGZpcnN0XG4gICAqIChgR3JvdXBCZWhhdmlvcmAgaW4gYGZ1bmN0aW9uLWdyb3Vwcy50c2ApLiBQcmVzZW50IGV4YWN0bHkgd2hlblxuICAgKiB7QGxpbmsgZ3JvdXBzfSBpcy4gUmVjb3JkZWQgYnkgdGhlIGFzc2lnbm1lbnQgcmF0aGVyIHRoYW4gcmVjb21wdXRlZCBhdFxuICAgKiBzeW50aCwgc28gdGhlIGJlaGF2aW9ycyBkZXBsb3llZCBhcmUgdGhlIG9uZXMgaXQgY2hlY2tlZC5cbiAgICovXG4gIHJlYWRvbmx5IGJlaGF2aW9ycz86IHsgZ3JvdXA6IHN0cmluZzsgcm91dGU6IHN0cmluZzsgcGF0dGVybjogc3RyaW5nIH1bXTtcbiAgLyoqXG4gICAqIFRoZSBgZnVuY3Rpb25Hcm91cHNgIHRoZSBidWlsZCB3YXMgc3BsaXQgYnkgKG5hbWUgYW5kIHJvdXRlcywgYXMgcGFzc2VkIGluXG4gICAqIGBDREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQU2ApLCBwcmVzZW50IGV4YWN0bHkgd2hlbiB7QGxpbmsgZ3JvdXBzfSBpcy4gU3ludGhcbiAgICogY29tcGFyZXMgaXQgd2l0aCBpdHMgb3duIHByb3BzIHRvIGNhdGNoIGEgc3RhbGUgb3IgaGFuZC1ydW4gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbkdyb3Vwcz86IHsgbmFtZTogc3RyaW5nOyByb3V0ZXM6IHN0cmluZ1tdIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyTWFuaWZlc3RDb25maWcge1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuICByZWFkb25seSB0cmFpbGluZ1NsYXNoOiBib29sZWFuO1xuICByZWFkb25seSBhc3NldFByZWZpeDogc3RyaW5nO1xuICAvKiogYGRpc3REaXJgIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IGRpciDigJQgYC5uZXh0YCB1bmxlc3MgY29uZmlndXJlZC4gUE9TSVguICovXG4gIHJlYWRvbmx5IGRpc3REaXI6IHN0cmluZztcbiAgLyoqXG4gICAqIGBuZXh0LmNvbmZpZ2AgYGNvbXByZXNzYC4gVGhlIHJ1bnRpbWUgZ3ppcHMgc3RyZWFtZWQgcmVzcG9uc2VzIGl0c2VsZlxuICAgKiAobmVpdGhlciBBUEkgR2F0ZXdheSBpbiBTVFJFQU0gbW9kZSBub3IgQ2xvdWRGcm9udCBjYW4pLCBzbyBob25vcmluZyB0aGlzXG4gICAqIGlzIG9uIHVzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHJlc3M6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBgbmV4dC5jb25maWdgIGBnZW5lcmF0ZUV0YWdzYC4gSG9ub3JlZCBmb3IgdGhlIGZpbGVzIHRoZSBydW50aW1lIHNlcnZlc1xuICAgKiBpdHNlbGYsIGFzIGBuZXh0IHN0YXJ0YCBkb2VzIChgc2VydmVTdGF0aWNgJ3MgYGV0YWdgIG9wdGlvbikuXG4gICAqL1xuICByZWFkb25seSBnZW5lcmF0ZUV0YWdzOiBib29sZWFuO1xuICAvKipcbiAgICogYFJlc29sdmVSb3V0ZXNQYXJhbXNbXCJpMThuXCJdYC1zaGFwZWQsIG5hcnJvd2VyIHRoYW4gTmV4dENvbmZpZ0NvbXBsZXRlLlxuICAgKiBgbnVsbGAgd2hlbiB0aGUgYXBwIGNvbmZpZ3VyZXMgbm8gYGkxOG5gLlxuICAgKi9cbiAgcmVhZG9ubHkgaTE4bjogdW5rbm93biB8IG51bGw7XG4gIC8qKlxuICAgKiBgbmV4dC5jb25maWdgIGBkZXBsb3ltZW50SWRgIChvciBgTkVYVF9ERVBMT1lNRU5UX0lEYCksIHJlZHVjZWQgdG8gdGhlXG4gICAqIGNoYXJhY3RlcnMgc2FmZSBpbiBhbiBTMyBrZXkgcHJlZml4IGFuZCBhIER5bmFtb0RCIHBhcnRpdGlvbiBrZXkg4oCUIGAvYCBpblxuICAgKiBwYXJ0aWN1bGFyIHdvdWxkIHNwbGl0IHRoZSBwcmVmaXggYHBydW5lLWNhY2hlLWJ1Y2tldC50c2AgbWF0Y2hlcyBvbi4gYFwiXCJgXG4gICAqIHdoZW4gdGhlIGFwcCBzZXRzIG5vbmUuXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIGBuZXh0LmNvbmZpZ2AgYGltYWdlc2AsIHJlc29sdmVkIGFuZCBkZWZhdWx0ZWQgKGBjdHguY29uZmlnLmltYWdlc2ApLlxuICAgKiBgTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdYC1zaGFwZWQuIFdpdGgge0BsaW5rIGV4cGVyaW1lbnRhbH0sXG4gICAqIHtAbGluayBjYWNoZUhhbmRsZXJ9IGFuZCB7QGxpbmsgY2FjaGVNYXhNZW1vcnlTaXplfSwgd2hhdCB0aGUgaW1hZ2VcbiAgICogb3B0aW1pemVyIGlzIGhhbmRlZCBhcyBpdHMgYG5leHRDb25maWdgLlxuICAgKlxuICAgKiBgaW1hZ2VzYCBhbmQgYGV4cGVyaW1lbnRhbGAgYXJlIGNvcGllZCB3aG9sZSByYXRoZXIgdGhhbiBmaWVsZCBieSBmaWVsZDpcbiAgICogTmV4dCdzIG9wdGltaXplciBwaWNrcyB3aGF0IGl0IHJlYWRzIG91dCBvZiBib3RoIChzaXggYGV4cGVyaW1lbnRhbC5pbWdPcHQqYFxuICAgKiBmbGFncyBpbiAxNi40KSwgYW5kIGEgaGFuZC1rZXB0IGxpc3Qgd291bGQgc2lsZW50bHkgZHJvcCB0aGUgbmV4dCBvbmUgaXRcbiAgICogc3RhcnRzIHJlYWRpbmcuXG4gICAqL1xuICByZWFkb25seSBpbWFnZXM6IHVua25vd247XG4gIC8qKlxuICAgKiBgbmV4dC5jb25maWdgIGBleHBlcmltZW50YWxgLCByZXNvbHZlZCAoYGN0eC5jb25maWcuZXhwZXJpbWVudGFsYCksIGFzXG4gICAqIEpTT046IGZ1bmN0aW9uLXZhbHVlZCBlbnRyaWVzIGFyZSBkcm9wcGVkLCBhcyB0aGV5IGFyZSBmcm9tXG4gICAqIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAuIFNlZSB7QGxpbmsgaW1hZ2VzfS5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbDogdW5rbm93bjtcbiAgLyoqXG4gICAqIGBuZXh0LmNvbmZpZ2AgYGNhY2hlSGFuZGxlcmAsIHJlbGF0aXZlIHRvIHRoZSBkaXN0IGRpciBhc1xuICAgKiBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gIGhhcyBpdCAodGhlIGJ1aWxkIG1hY2hpbmUncyBhYnNvbHV0ZSBwYXRoXG4gICAqIG1lYW5zIG5vdGhpbmcgaW4gdGhlIGRlcGxveW1lbnQpLiBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVIYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICAvKiogYG5leHQuY29uZmlnYCBgY2FjaGVNYXhNZW1vcnlTaXplYC4gKi9cbiAgcmVhZG9ubHkgY2FjaGVNYXhNZW1vcnlTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEFkYXB0ZXJFbnRyeXBvaW50VHlwZSA9XG4gIFwiYXBwLXBhZ2VcIiB8IFwiYXBwLXJvdXRlXCIgfCBcInBhZ2VcIiB8IFwicGFnZS1hcGlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRW50cnlwb2ludCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBSZXBvLXJvb3QtcmVsYXRpdmUgUE9TSVgga2V5IGluc2lkZSB0aGUgc3RhZ2luZyB0cmVlLiBOZXZlciBhYnNvbHV0ZS4gKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogQWRhcHRlckVudHJ5cG9pbnRUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJNaWRkbGV3YXJlIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIFJlcG8tcm9vdC1yZWxhdGl2ZSBQT1NJWCBrZXkgaW5zaWRlIHRoZSBzdGFnaW5nIHRyZWUuIE5ldmVyIGFic29sdXRlLiAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuIl19
|