PageSourceSearch

https://pedestal.io/search-index.js

js pedestal.io collected 2026-09-25 21:21:01 UTC 2,455,499 bytes, 1 lines download raw bytes

1antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component","keyword"],"fieldVectors":[["title/1-1",[0,50.908]],["name/1-1",[]],["text/1-1",[]],["component/1-1",[]],["keyword/1-1",[]],["title/1-2",[1,57.052]],["name/1-2",[]],["text/1-2",[]],["component/1-2",[]],["keyword/1-2",[]],["title/1-3",[2,63.848]],["name/1-3",[]],["text/1-3",[]],["component/1-3",[]],["keyword/1-3",[]],["title/1-4",[3,71.94]],["name/1-4",[]],["text/1-4",[]],["component/1-4",[]],["keyword/1-4",[]],["title/1",[4,26.282,5,60.202]],["name/1",[4,0.623,5,1.427]],["text/1",[4,2.86,5,7.847,6,1.745,7,5.018,8,3.721,9,1.761,10,4.264,11,7.49,12,8.973,13,2.824,14,5.709,15,4.193,16,3.721,17,4.193,18,3.814,19,2.545,20,2.563,21,4.193,22,6.783,23,2.701,24,2.793,25,6.272,26,6.266,27,2.254,28,2.545,29,2.343,30,4.045,31,5.231,32,2.314,33,3.106,34,3.389,35,2.39,36,5.231,37,3.435,38,2.082,39,5.008,40,2.343,41,2.461,42,4.193,43,5.008,44,3.565,45,3.378,46,2.878,47,5.008,48,3.639,49,4.193,50,1.992,51,3.465,52,7.49,53,6.272,54,5.008,55,5.008,56,4.193,57,3.639,58,5.008,59,5.008,60,5.008,61,3.92,62,3.229,63,4.193,64,5.008,65,5.138,66,5.332,67,3.92,68,2.967,69,2.304,70,2.001,71,4.193,72,4.193,73,3.106,74,2.371,75,3.435,76,4.629,77,2.851,78,2.774,79,5.008,80,4.193,81,1.846,82,3.59,83,2.704,84,4.83,85,3.639,86,2.999,87,4.629,88,3.229,89,2.967,90,2.601,91,4.629,92,2.999,93,5.332,94,3.814,95,4.193,96,4.193,97,4.193,98,2.121,99,1.58,100,5.008,101,2.621,102,3.145,103,4.193,104,3.92,105,4.193,106,4.193,107,4.044,108,5.008,109,3.276,110,5.008,111,2.196,112,5.008,113,2.601,114,5.008,115,5.008]],["component/1",[6,0.35]],["keyword/1",[]],["title/2-1",[6,13.384,116,60.202]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["keyword/2-1",[]],["title/2-2",[117,60.202,118,50.022]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["keyword/2-2",[]],["title/2-3",[119,28.623,120,27.985]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["keyword/2-3",[]],["title/2-4",[6,11.164,121,20.053,122,26.415]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["keyword/2-4",[]],["title/2-5",[6,13.384,123,42.181]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["keyword/2-5",[]],["title/2-6",[124,34.052,125,28.363]],["name/2-6",[]],["text/2-6",[]],["component/2-6",[]],["keyword/2-6",[]],["title/2-7",[126,26.282,127,37.174]],["name/2-7",[]],["text/2-7",[]],["component/2-7",[]],["keyword/2-7",[]],["title/2-8",[128,57.961]],["name/2-8",[]],["text/2-8",[]],["component/2-8",[]],["keyword/2-8",[]],["title/2-9",[121,30.002]],["name/2-9",[]],["text/2-9",[]],["component/2-9",[]],["keyword/2-9",[]],["title/2-10",[129,62.432]],["name/2-10",[]],["text/2-10",[]],["component/2-10",[]],["keyword/2-10",[]],["title/2-11",[8,51.156,130,53.891]],["name/2-11",[]],["text/2-11",[]],["component/2-11",[]],["keyword/2-11",[]],["title/2-12",[131,53.891,132,48.074]],["name/2-12",[]],["text/2-12",[]],["component/2-12",[]],["keyword/2-12",[]],["title/2",[6,13.384,123,42.181]],["name/2",[123,1.75]],["text/2",[0,1.52,4,3.547,6,1.953,7,2.059,8,5.023,13,1.446,15,2.148,20,1.313,23,0.925,24,2.133,25,2.148,30,4.096,31,3.994,32,1.767,33,2.713,35,2.021,38,1.066,40,1.2,50,1.02,70,1.025,81,0.946,85,3.179,86,2.62,111,2.963,113,1.332,119,1.066,120,1.778,121,3.385,122,1.18,123,3.505,124,2.164,125,3.403,126,0.979,128,2.951,129,1.864,130,5.291,131,5.938,132,6.158,133,2.201,134,2.243,135,2.008,136,3.826,137,2.243,138,1.385,139,1.844,140,1.18,141,3.777,142,1.826,143,1.76,144,2.047,145,2.565,146,1.979,147,1.446,148,2.148,149,1.632,150,1.954,151,1.864,152,1.864,153,1.229,154,1.207,155,2.661,156,2.862,157,1.097,158,2.565,159,1.277,160,1.446,161,2.565,162,2.62,163,4.543,164,2.863,165,4.278,166,4.789,167,2.514,168,1.718,169,2.783,170,3.613,171,1.76,172,1.46,173,1.119,174,1.313,175,1.474,176,2.565,177,2.907,178,2.539,179,1.167,180,1.611,181,3.533,182,2.243,183,1.591,184,2.047,185,1.969,186,1.363,187,1.591,188,1.908,189,3.179,190,1.322,191,2.243,192,3.826,193,1.591,194,1.025,195,2.008,196,2.905,197,2.024,198,3.127,199,1.047,200,1.313,201,2.905,202,4.094,203,2.243,204,1.408,205,2.807,206,1.864,207,2.243,208,1.826,209,2.243,210,1.125,211,2.078,212,2.148,213,1.433,214,1.363,215,1.703,216,2.272,217,1.654,218,1.421,219,2.243,220,2.368,221,1.889,222,1.678,223,2.934,224,2.783,225,2.008,226,1.536,227,1.632,228,2.178,229,1.446,230,3.68,231,2.402,232,1.421,233,1.654,234,1.13,235,2.071,236,4.789,237,2.148,238,1.678,239,1.034,240,2.071,241,2.423,242,1.826,243,3.354,244,2.467,245,2.148,246,1.397,247,2.148,248,1.906,249,1.167,250,1.222,251,0.883,252,2.243,253,2.243,254,2.071,255,1.193,256,1.295,257,3.505,258,1.678,259,1.446,260,2.243,261,1.02,262,2.68,263,2.071,264,2.071,265,2.243,266,2.243,267,1.906,268,1.397,269,0.939,270,1.906,271,2.008,272,3.251,273,2.148,274,2.243,275,1.222,276,1.489,277,1.572,278,2.243,279,1.554,280,1.678,281,1.632,282,1.864,283,1.791,284,2.008,285,1.654,286,1.167,287,2.243,288,1.969,289,1.108,290,1.826,291,1.791,292,1.332,293,2.68,294,1.474,295,1.554,296,3.826,297,2.243,298,2.008,299,2.243,300,1.062,301,1.043,302,2.243,303,1.678,304,1.536,305,1.678,306,2.239,307,1.554,308,1.906,309,1.408,310,0.979,311,1.245,312,2.141,313,1.73,314,1.245,315,1.591,316,2.008,317,1.864,318,1.46,319,1.632,320,2.148,321,2.148,322,2.243,323,1.554,324,1.193,325,1.591,326,1.332,327,1.363,328,1.295,329,2.071,330,1.906,331,2.243,332,2.148,333,2.243,334,1.18,335,2.243,336,1.611,337,1.591,338,1.374,339,2.243,340,1.591,341,2.243,342,3.332]],["component/2",[6,0.35]],["keyword/2",[]],["title/3-1",[343,28.309,344,25.776,345,45.532,346,33.791]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["keyword/3-1",[]],["title/3-2",[168,15.064,173,16.729,346,26.307,347,13.438,348,26.307,349,35.448]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["keyword/3-2",[]],["title/3-3",[346,33.791,350,25.397,351,12.82,352,45.532]],["name/3-3",[]],["text/3-3",[]],["component/3-3",[]],["keyword/3-3",[]],["title/3-4",[121,17.2,346,33.791,353,49.258,354,43.077]],["name/3-4",[]],["text/3-4",[]],["component/3-4",[]],["keyword/3-4",[]],["title/3-5",[346,33.791,351,12.82,354,43.077,355,24.052]],["name/3-5",[]],["text/3-5",[]],["component/3-5",[]],["keyword/3-5",[]],["title/3-6",[356,22.287,357,28.59,358,49.258,359,39.78]],["name/3-6",[]],["text/3-6",[]],["component/3-6",[]],["keyword/3-6",[]],["title/3-7",[351,12.82,359,39.78,360,34.399,361,35.793]],["name/3-7",[]],["text/3-7",[]],["component/3-7",[]],["keyword/3-7",[]],["title/3-8",[359,39.78,362,35.793,363,19.595,364,43.077]],["name/3-8",[]],["text/3-8",[]],["component/3-8",[]],["keyword/3-8",[]],["title/3",[365,38.822,366,29.444]],["name/3",[365,0.92,366,0.698]],["text/3",[4,1.482,6,2.11,7,0.738,9,0.997,22,1.804,24,0.585,26,1.095,27,0.705,32,0.876,35,1.468,38,0.652,40,0.733,41,0.77,45,1.057,51,1.312,70,1.903,73,2.408,77,2.21,83,0.846,89,0.929,90,0.814,91,1.449,98,1.201,99,0.495,101,0.82,111,1.243,113,0.814,120,0.637,121,0.547,123,0.96,125,1.168,126,2.104,133,0.603,135,3.04,138,0.846,139,0.661,144,2.881,146,0.709,147,0.884,153,0.751,154,1.335,157,0.67,160,0.884,162,0.939,164,0.664,168,3.634,169,0.997,170,3.2,173,3.66,174,0.802,175,4.145,179,1.29,184,0.733,185,0.705,186,0.833,187,0.972,194,1.903,197,0.725,199,0.64,204,0.861,205,1.763,211,1.73,220,0.994,226,0.939,233,1.011,239,1.143,244,0.884,245,1.312,251,1.898,255,1.319,256,0.791,261,1.894,275,0.747,276,0.91,284,1.227,288,1.276,292,1.473,300,1.971,304,0.939,307,0.949,310,2.754,314,0.761,315,0.972,320,2.374,327,0.833,330,1.165,334,1.304,338,0.84,342,2.957,343,0.901,344,0.82,346,1.945,347,1.931,350,2.002,351,2.825,352,1.449,354,2.48,355,3.735,356,3.461,357,2.764,359,1.266,360,1.095,362,4.474,363,2.673,365,2.19,367,2.619,368,1.945,369,1.567,370,1.312,371,2.254,372,0.892,373,1.567,374,1.385,375,1.304,376,0.742,377,3.003,378,2.374,379,1.057,380,2.48,381,1.567,382,3.589,383,2.346,384,1.567,385,1.116,386,1.567,387,0.826,388,1.495,389,1.567,390,1.567,391,1.312,392,1.863,393,2.232,394,1.567,395,1.738,396,2.22,397,1.041,398,2.22,399,2.572,400,1.663,401,0.949,402,2.836,403,2.107,404,2.95,405,3.554,406,0.91,407,1.263,408,1.335,409,0.884,410,2.008,411,0.452,412,1.919,413,0.906,414,0.919,415,0.901,416,0.649,417,1.747,418,0.826,419,1.567,420,3.775,421,1.567,422,0.919,423,1.116,424,1.431,425,2.664,426,0.901,427,1.507,428,0.96,429,1.966,430,0.826,431,1.567,432,2.374,433,1.567,434,1.312,435,1.312,436,1.913,437,1.441,438,0.709,439,2.047,440,3.024,441,2.621,442,0.972,443,1.165,444,1.165,445,1.263,446,0.756,447,0.984,448,1.266,449,1.933,450,1.276,451,1.646,452,1.371,453,1.855,454,0.591,455,1.227,456,2.408,457,1.312,458,1.883,459,0.846,460,1.567,461,1.194,462,2.661,463,1.359,464,1.567,465,1.266,466,2.114,467,1.567,468,0.853,469,1.449,470,1.371,471,1.572,472,1.883,473,0.721,474,1.095,475,1.312,476,1.116,477,1.945,478,1.194,479,0.786,480,4.762,481,1.312,482,3.627,483,1.139,484,2.079,485,1.227,486,1.227,487,1.095,488,1.567,489,0.833,490,1.614,491,1.661,492,1.143,493,0.846,494,1.663,495,1.227,496,1.694,497,0.814,498,2.374,499,0.687,500,1.011,501,0.643,502,1.194,503,1.243,504,1.312,505,2.29,506,1.68,507,0.876,508,1.025,509,1.974,510,1.567,511,0.972,512,0.721,513,1.567,514,1.041,515,1.829,516,1.041,517,1.567,518,1.567,519,0.58,520,2.099,521,1.38,522,1.484,523,0.596,524,1.423,525,0.826,526,1.025,527,1.376,528,5.646,529,1.567,530,1.312,531,0.929,532,1.989,533,1.165,534,1.227,535,
11.227,536,0.939,537,1.717,538,0.96,539,0.997,540,1.567,541,1.165,542,0.901,543,2.22,544,2.664,545,1.829,546,1.312,547,1.614,548,2.764,549,1.567,550,1.194,551,1.567,552,1.312,553,3.883,554,1.567,555,1.095,556,1.519,557,1.861,558,1.266,559,1.312,560,2.16,561,1.567,562,1.165,563,1.057,564,1.737,565,0.684,566,1.227,567,1.312,568,0.729,569,1.567,570,0.655,571,1.312,572,1.567,573,0.621,574,0.972,575,0.861,576,0.84,577,1.567,578,1.567,579,1.804,580,1.227,581,0.96,582,0.868,583,0.919,584,0.664,585,0.613,586,1.567,587,1.263,588,1.646,589,2.387,590,2.438,591,1.025,592,1.011,593,1.041,594,1.663,595,0.96,596,0.984,597,0.919,598,1.116,599,0.919,600,0.997,601,0.96,602,1.266,603,0.972,604,0.555,605,1.057,606,0.929,607,1.567,608,1.312,609,1.25,610,1.194,611,1.449,612,0.901,613,1.075,614,0.833,615,1.095,616,0.929,617,0.997,618,1.567,619,0.68,620,1.194,621,1.057,622,1.095,623,1.567,624,1.567,625,0.929,626,1.075,627,1.371,628,1.567]],["component/3",[6,0.35]],["keyword/3",[]],["title/4-1",[629,67.261]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["keyword/4-1",[]],["title/4-2",[596,43.227,630,60.202]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["keyword/4-2",[]],["title/4-3",[343,39.563,344,36.024]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["keyword/4-3",[]],["title/4-4",[455,67.261]],["name/4-4",[]],["text/4-4",[]],["component/4-4",[]],["keyword/4-4",[]],["title/4-5",[524,22.19]],["name/4-5",[]],["text/4-5",[]],["component/4-5",[]],["keyword/4-5",[]],["title/4-6",[251,29.59]],["name/4-6",[]],["text/4-6",[]],["component/4-6",[]],["keyword/4-6",[]],["title/4-7",[251,23.708,631,40.363]],["name/4-7",[]],["text/4-7",[]],["component/4-7",[]],["keyword/4-7",[]],["title/4-8",[524,17.779,632,30.031]],["name/4-8",[]],["text/4-8",[]],["component/4-8",[]],["keyword/4-8",[]],["title/4-9",[633,39.956,634,38.47]],["name/4-9",[]],["text/4-9",[]],["component/4-9",[]],["keyword/4-9",[]],["title/4-10",[452,75.138]],["name/4-10",[]],["text/4-10",[]],["component/4-10",[]],["keyword/4-10",[]],["title/4",[539,54.659]],["name/4",[539,1.817]],["text/4",[0,1.645,4,3.033,6,1.179,20,1.421,23,2.566,24,1.036,27,1.25,32,1.873,35,2.563,44,3.33,50,2.412,89,1.645,98,1.176,119,1.945,120,1.129,121,0.97,126,2.315,141,1.552,146,2.743,147,1.566,160,2.638,164,3.015,173,1.211,174,1.421,205,1.028,220,1.639,221,2.619,244,1.566,251,0.956,268,1.512,275,1.323,288,3.575,289,2.021,301,1.902,304,1.663,312,1.039,327,1.476,334,2.152,343,2.689,344,1.453,347,0.973,350,1.432,351,2.241,356,1.256,357,1.612,363,1.861,366,1.188,371,1.612,376,1.315,377,2.547,378,3.917,379,5.359,380,2.428,383,2.581,409,1.566,410,4.057,411,0.8,413,3.862,416,1.149,418,1.464,420,1.25,422,1.628,425,3.21,429,1.669,430,1.464,439,1.738,442,1.722,445,1.236,447,1.744,450,1.25,451,1.612,455,4.747,456,1.722,462,2.615,466,1.512,468,1.512,471,1.124,472,1.844,473,1.277,476,1.976,490,1.581,496,2.645,501,1.139,503,1.217,516,1.844,519,1.028,524,2.749,525,2.467,539,7.829,544,1.905,560,2.115,568,1.292,576,2.506,579,2.976,583,1.628,585,1.83,595,1.701,596,4.988,597,2.743,616,1.645,617,2.976,619,1.205,626,3.21,629,4.747,630,2.428,631,1.628,632,2.041,633,1.612,634,1.552,635,2.325,636,2.777,637,4.947,638,2.777,639,3.126,640,2.063,641,2.615,642,1.902,643,3.4,644,3.917,645,2.777,646,2.777,647,3.104,648,2.567,649,1.579,650,2.777,651,3.778,652,4.234,653,4.092,654,3.061,655,1.976,656,2.777,657,2.777,658,4.325,659,3.715,660,1.525,661,2.777,662,2.777,663,2.777,664,2.569,665,2.777,666,1.339,667,1.976,668,1.844,669,2.115,670,1.299,671,1.815,672,1.525,673,2.115,674,3.564,675,4.325,676,1.339,677,2.567,678,2.567,679,1.538,680,2.115,681,1.525,682,1.566,683,1.873,684,1.682,685,2.325,686,1.963,687,2.467,688,2.063,689,1.744,690,2.716,691,2.202,692,2.073,693,1.525,694,2.345,695,2.018,696,1.538,697,1.682,698,1.538,699,1.538,700,1.499,701,1.725,702,1.048,703,1.383,704,1.453,705,2.567,706,2.567,707,2.567,708,2.063,709,1.277,710,1.939,711,1.791,712,2.256,713,2.802,714,1.453,715,1.976,716,2.567,717,1.628,718,1.976,719,2.242,720,2.567,721,2.115,722,2.325]],["component/4",[6,0.35]],["keyword/4",[]],["title/5-1",[127,46.396]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["keyword/5-1",[]],["title/5-2",[723,36.299,724,38.47]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["keyword/5-2",[]],["title/5-3",[521,24.467,725,33.193]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["keyword/5-3",[]],["title/5-4",[220,20.123,726,31.267,727,53.081]],["name/5-4",[]],["text/5-4",[]],["component/5-4",[]],["keyword/5-4",[]],["title/5-5",[728,62.432]],["name/5-5",[]],["text/5-5",[]],["component/5-5",[]],["keyword/5-5",[]],["title/5-6",[376,40.679]],["name/5-6",[]],["text/5-6",[]],["component/5-6",[]],["keyword/5-6",[]],["title/5-7",[729,45.031,730,45.031]],["name/5-7",[]],["text/5-7",[]],["component/5-7",[]],["keyword/5-7",[]],["title/5",[6,16.704]],["name/5",[731,2.075]],["text/5",[3,2.891,4,1.318,6,2.44,9,1.971,13,1.947,23,2.934,24,1.288,32,1.731,35,0.92,44,2.458,45,2.33,74,1.635,111,1.514,119,1.436,121,1.957,125,2.309,126,1.318,140,1.588,168,3.197,170,1.645,173,3.55,174,1.768,175,1.985,179,1.571,185,1.554,186,1.835,199,1.41,200,1.768,205,3.012,211,2.036,218,3.104,220,1.964,221,1.492,223,3.532,231,1.896,237,2.891,239,1.392,249,1.571,250,1.645,251,1.93,261,3.237,269,2.588,286,2.549,289,2.42,293,3.434,309,1.896,310,2.139,312,2.098,327,1.835,347,1.964,350,2.889,351,0.899,355,1.686,356,1.562,357,2.004,375,1.588,377,1.236,383,2.385,388,1.821,392,1.351,398,2.703,399,1.865,400,2.025,401,2.092,411,0.995,412,1.392,422,3.286,423,2.458,428,2.116,429,3.983,438,1.562,440,1.554,446,4.314,447,2.168,449,1.72,471,1.398,490,1.966,497,1.794,509,2.848,521,1.227,524,1.447,525,1.821,536,2.068,548,2.004,557,1.655,565,1.506,573,1.368,583,2.025,597,2.025,620,2.63,641,3.132,642,1.404,649,1.165,660,1.896,672,1.896,687,1.821,701,2.066,723,1.821,725,2.702,726,1.88,728,2.509,732,3.453,733,1.514,734,1.85,735,4.268,736,3.545,737,4.164,738,2.566,739,3.758,740,2.197,741,2.736,742,2.536,743,2.592,744,2.412,745,3.434,746,3.192,747,2.703,748,1.947,749,1.743,750,4.164,751,2.309,752,2.227,753,2.412,754,2.458,755,2.848,756,4.333,757,2.412,758,1.607,759,1.755,760,1.334,761,2.33,762,2.293,763,3.78,764,2.458,765,1.616,766,2.412,767,2.789,768,2.412,769,2.369,770,3.192,771,2.789,772,2.116,773,2.142,774,1.896,775,1.88,776,3.02,777,2.566,778,2.33,779,2.703,780,1.88,781,1.506,782,1.896,783,2.911,784,2.458,785,1.93,786,1.88,787,2.068,788,2.068,789,1.88,790,1.947,791,1.571,792,2.566,793,3.192,794,1.743,795,2.197,796,1.93,797,2.025,798,2.369,799,2.412,800,2.116,801,2.142,802,2.829,8
103,3.192,804,2.458,805,3.192,806,2.046,807,2.789,808,2.168,809,1.896,810,1.635,811,2.509,812,2.458]],["component/5",[6,0.35]],["keyword/5",[]],["title/6-1",[69,31.666,387,36.299]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["keyword/6-1",[]],["title/6-2",[35,15.298,62,37.033,69,26.415]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["keyword/6-2",[]],["title/6-3",[35,18.339,813,45.031]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["keyword/6-3",[]],["title/6-4",[62,24.73,69,17.64,714,20.068,814,26.307,815,27.866,816,20.068]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["keyword/6-4",[]],["title/6-5",[69,19.837,342,32.845,725,20.793,817,34.826,818,21.767]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["keyword/6-5",[]],["title/6-6",[819,60.202,820,44.394]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["keyword/6-6",[]],["title/6-7",[69,15.881,714,18.067,821,30.193,822,15.881,823,19.294,824,27.028,825,27.028]],["name/6-7",[]],["text/6-7",[]],["component/6-7",[]],["keyword/6-7",[]],["title/6-8",[820,37.033,826,44.955,827,34.025]],["name/6-8",[]],["text/6-8",[]],["component/6-8",[]],["keyword/6-8",[]],["title/6-9",[277,42.181,828,53.891]],["name/6-9",[]],["text/6-9",[]],["component/6-9",[]],["keyword/6-9",[]],["title/6-10",[829,28.755,830,60.202]],["name/6-10",[]],["text/6-10",[]],["component/6-10",[]],["keyword/6-10",[]],["title/6-11",[23,13.828,27,27.434,147,21.626,831,30.021,832,30.021]],["name/6-11",[]],["text/6-11",[]],["component/6-11",[]],["keyword/6-11",[]],["title/6-12",[659,42.181,833,52.432]],["name/6-12",[]],["text/6-12",[]],["component/6-12",[]],["keyword/6-12",[]],["title/6-13",[94,65.44]],["name/6-13",[]],["text/6-13",[]],["component/6-13",[]],["keyword/6-13",[]],["title/6",[820,44.394,834,37.483]],["name/6",[820,1.842]],["text/6",[2,1.509,4,0.775,8,1.509,9,2.747,10,1.156,13,0.615,16,0.81,18,0.83,22,1.814,24,1.571,26,0.761,27,1.608,28,0.554,29,0.95,30,0.589,32,2.491,35,2.271,37,2.891,38,0.845,40,0.51,49,1.701,50,0.434,53,0.913,62,7.617,63,0.913,65,0.748,68,0.646,69,5.692,70,3.317,71,0.913,72,2.388,73,0.676,74,0.962,77,1.623,78,1.58,80,0.913,81,1.554,82,0.522,88,0.703,90,1.055,92,0.653,94,4.708,95,0.913,96,1.701,97,0.913,98,0.86,99,0.344,101,1.87,102,1.275,103,0.913,105,1.701,106,1.701,107,1.64,111,0.478,120,1.945,121,0.381,125,0.449,126,0.416,127,0.589,142,0.776,144,0.51,155,1.663,159,1.42,160,0.615,179,0.496,183,2.613,184,0.51,185,1.896,190,0.562,194,0.811,198,0.504,220,0.382,221,0.471,222,0.713,226,0.653,229,0.615,230,1.946,233,0.703,234,0.48,241,0.604,251,2.261,256,1.439,269,0.743,277,1.245,288,2.384,293,0.668,300,0.841,306,1.46,310,0.775,316,1.59,318,1.156,328,0.55,342,6.143,367,0.735,372,1.156,374,0.532,387,3.26,392,0.795,395,0.909,404,0.522,412,0.439,417,0.491,418,1.071,420,0.914,429,1.89,438,1.29,439,0.405,440,1.283,449,0.543,454,0.411,456,2.216,474,1.418,487,0.761,492,0.439,494,1.672,502,2.172,503,0.891,506,1.69,507,1.997,519,2.288,523,1.084,527,0.529,541,0.81,542,0.627,556,0.584,573,2.985,574,1.26,581,0.668,582,1.58,585,0.426,587,1.27,588,0.633,591,1.329,597,0.639,602,0.88,609,0.48,614,0.579,617,0.694,637,1.54,659,0.668,680,0.83,681,0.599,684,2.165,686,0.457,703,0.543,704,1.492,708,0.81,710,0.761,714,2.504,721,0.83,725,1.723,737,0.81,739,0.579,740,0.694,743,1.653,751,2.547,760,0.421,775,0.594,777,0.81,785,4.507,786,1.106,787,1.217,800,0.668,813,0.713,814,4.504,815,4.771,816,1.87,817,6.086,818,1.439,820,6.448,822,1.312,823,1.997,824,3.299,825,4.839,826,5.414,827,4.779,828,8.184,829,3.942,831,1.59,832,0.853,833,2.172,834,4.958,835,0.761,836,0.953,837,0.372,838,0.694,839,3.685,840,1.504,841,2.494,842,3.685,843,2.383,844,2.494,845,2.399,846,1.776,847,0.792,848,0.437,849,0.621,850,0.953,851,0.735,852,0.539,853,0.792,854,2.494,855,0.653,856,1.776,857,0.953,858,0.953,859,0.953,860,0.953,861,0.953,862,2.544,863,0.953,864,0.953,865,0.913,866,0.953,867,0.953,868,0.953,869,0.953,870,0.953,871,0.953,872,0.953,873,0.953,874,0.761,875,0.953,876,0.953,877,1.776,878,1.23,879,0.88,880,0.953,881,0.853,882,0.953,883,0.724,884,1.145,885,0.953,886,0.953,887,0.526,888,0.953,889,1.776,890,0.953,891,0.83,892,1.776,893,1.776,894,1.776,895,0.853,896,1.509,897,0.953,898,0.953,899,0.953,900,0.953,901,0.83,902,0.953,903,0.627,904,6.048,905,0.748,906,0.953,907,3.769,908,0.792,909,0.724,910,0.953,911,1.509,912,0.713,913,0.953,914,1.64,915,1.776,916,1.878,917,1.776,918,2.494,919,0.792,920,0.953,921,1.446,922,1.884,923,0.953,924,1.156,925,2.494,926,0.953,927,1.529,928,0.735,929,0.913,930,1.167,931,1.319,932,0.735,933,0.953,934,0.81,935,1.547,936,0.88,937,0.88,938,5.039,939,6.114,940,0.953,941,0.953,942,1.59,943,0.953,944,4.185,945,1.37,946,1.547,947,0.953,948,0.83,949,0.953,950,0.913,951,1.776,952,0.83,953,0.953,954,0.913,955,0.953,956,1.7
176,957,0.953,958,0.953,959,0.953,960,0.953,961,0.953,962,0.953,963,1.204,964,1.547,965,0.953,966,0.853,967,0.953,968,0.703,969,1.349,970,1.776,971,0.913,972,0.953,973,0.953,974,0.724,975,2.273,976,0.88,977,1.776,978,2.388,979,0.526,980,0.953,981,1.997,982,0.554,983,1.776,984,0.953,985,0.761,986,0.953,987,0.953,988,1.776,989,0.627,990,0.761,991,0.953,992,1.055,993,0.953,994,0.83,995,0.953,996,1.156,997,0.953,998,0.953,999,0.953,1000,0.953,1001,0.953,1002,0.953,1003,0.953,1004,0.953,1005,0.953,1006,0.953,1007,0.953,1008,0.953,1009,0.953,1010,0.953,1011,0.575,1012,0.83,1013,0.953,1014,0.853,1015,0.445,1016,0.953,1017,0.953,1018,0.724,1019,2.189,1020,0.88,1021,0.953,1022,0.88,1023,0.81,1024,0.913,1025,0.953,1026,0.88,1027,0.953,1028,0.953,1029,0.735,1030,0.953,1031,0.513,1032,2.613,1033,0.953,1034,0.953,1035,1.701,1036,2.388,1037,0.953,1038,0.776,1039,0.953,1040,0.913,1041,3.125,1042,2.494,1043,0.761,1044,0.953,1045,0.724,1046,0.81,1047,0.88,1048,0.953,1049,0.953,1050,0.853,1051,0.953,1052,1.547,1053,0.748,1054,0.83,1055,0.653,1056,0.83,1057,0.516,1058,0.953,1059,0.953,1060,0.953,1061,0.953,1062,0.953,1063,0.913,1064,0.953,1065,0.953,1066,0.953,1067,0.953,1068,0.953,1069,0.953,1070,0.953,1071,0.953]],["component/6",[6,0.35]],["keyword/6",[]],["title/7",[1072,71.94]],["name/7",[704,1.495]],["text/7",[0,1.483,6,1.934,7,2.016,9,0.88,19,1.272,22,1.592,24,0.933,28,1.272,32,3.326,34,1.132,35,2.732,38,2.335,41,2.76,68,1.483,69,1.971,70,1.712,81,0.923,86,3.364,98,1.06,99,3.138,111,1.097,113,1.3,122,1.151,125,1.765,133,2.559,144,2.005,146,1.132,147,2.416,153,2.053,160,2.416,162,2.566,164,1.06,165,3.167,168,2.206,170,3.168,205,1.586,211,1.556,221,1.081,223,1.86,228,1.246,239,1.726,251,0.862,255,1.164,256,1.263,261,3.466,262,4.075,269,2.983,286,1.949,292,2.917,309,1.374,310,1.636,312,0.937,314,1.214,328,1.263,347,3.053,351,3.13,356,1.132,357,1.453,363,2.974,366,2.402,370,2.096,375,1.971,377,0.896,383,1.824,385,1.782,392,0.979,407,1.908,408,1.178,411,3.466,412,2.263,413,2.783,414,1.468,415,1.438,416,1.773,420,1.928,422,1.468,428,1.534,437,1.272,439,3.028,446,4.43,454,2.509,459,1.352,466,1.363,471,1.734,479,1.255,495,1.959,496,1.869,507,1.399,512,2.583,514,1.662,519,0.926,520,0.853,524,2.837,532,2.778,536,1.499,564,1.534,568,1.164,570,1.046,573,2.961,585,0.979,594,1.468,604,0.886,631,3.899,632,2.45,649,0.845,664,1.374,682,2.416,686,1.05,691,1.178,696,1.386,701,2.071,702,1.616,704,2.939,709,1.151,717,1.468,718,1.782,730,1.637,772,1.534,773,3.483,829,3.405,849,1.425,931,1.982,945,1.689,963,1.483,992,1.3,1050,1.959,1057,1.185,1073,1.782,1074,1.959,1075,1.352,1076,2.189,1077,0.88,1078,1.614,1079,1.171,1080,2.462,1081,4.942,1082,1.959,1083,1.748,1084,1.374,1085,1.516,1086,3.522,1087,2.189,1088,1.263,1089,3.749,1090,2.225,1091,1.352,1092,2.802,1093,1.819,1094,1.263,1095,1.906,1096,1.592,1097,2.189,1098,1.374,1099,2.487,1100,1.412,1101,1.637,1102,2.189,1103,1.782,1104,2.189,1105,2.503,1106,1.534,1107,1.689,1108,1.717,1109,2.189,1110,2.079,1111,1.906,1112,1.468,1113,1.374,1114,1.959,1115,1.993,1116,1.85,1117,2.193,1118,1.534,1119,2.189,1120,1.662,1121,1.782,1122,1.145,1123,1.438,1124,1.185,1125,1.86,1126,1.086,1127,1.32,1128,1.959,1129,2.939,1130,1.906,1131,1.637]],["component/7",[6,0.35]],["keyword/7",[]],["title/8-1",[689,53.952]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["keyword/8-1",[]],["title/8-2",[701,25.382,801,42.691]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["keyword/8-2",[]],["title/8-3",[1118,42.181,1132,30.98]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["keyword/8-3",[]],["title/8-4",[524,14.831,632,25.051,1132,25.843]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["keyword/8-4",[]],["title/8",[32,17.738,573,22.748,1132,25.843]],["name/8",[1132,1.285]],["text/8",[4,0.92,6,0.806,9,1.458,17,3.471,23,1.968,24,0.898,32,3.803,34,4.432,35,1.104,38,1.724,50,1.649,70,1.656,78,1.334,84,1.553,89,2.456,98,2.312,99,2.519,113,1.251,120,4.221,122,1.108,125,2.248,126,0.92,139,3.365,140,1.108,146,1.876,157,1.773,164,3.095,168,1.628,179,2.482,197,1.918,200,1.233,220,1.453,228,1.2,229,1.358,232,1.334,244,3.077,251,0.83,255,1.929,269,1.997,288,1.084,300,0.997,306,1.233,310,3.047,312,1.552,338,3.472,351,2.456,356,1.09,376,1.963,377,1.484,383,1.025,392,3.122,395,1.078,407,1.073,408,1.951,411,2.822,412,0.971,413,1.324,416,1.716,429,1.946,438,1.09,439,0.895,440,1.084,449,1.2,471,0.975,473,1.108,508,1.576,519,2.02,521,1.473,522,1.261,523,0.916,524,2.854,527,2.648,568,1.121,573,4.298,575,1.323,576,1.29,585,0.942,597,1.412,613,1.653,632,1.051,652,1.682,659,1.476,664,1.323,670,1.127,671,0.935,687,2.186,693,1.323,699,1.334,701,2.39,702,3.225,723,1.27,730,1.576,733,1.056,742,1.09,743,1.114,745,1.476,755,1.224,758,1.929,759,2.107,760,2.109,773,2.571,782,1.323,783,1.251,791,1.886,801,3.384,802,2.092,806,5.803,816,1.261,837,1.413,884,1.358,901,1.835,927,4.441,932,1.625,975,1.532,1019,1.251,1077,1.919,1079,1.127,1085,1.459,1086,3.617,1088,2.092,1089,1.108,1090,3.795,1092,3.57,1096,1.532,1110,1.169,1127,1.27,1132,2.917,1133,3.157,1134,5.477,1135,3.245,1136,1.886,1137,1.835,1138,1.835,1139,1.835,1140,4.447,1141,4.055,1142,1.653,1143,1.886,1144,1.412,1145,5.669,1146,5.682,1147,2.539,1148,2.431,1149,2.107,1150,3.884,1151,1.29,1152,1.945,1153,3.245,1154,1.427,1155,1.102,1156,1.28,1157,2.949,1158,2.107,1159,1.886,1160,1.576,1161,1.6,1162,1.459,1163,2.107,1164,2.107,1165,2.603,1166,2.712,1167,1.945,1168,1.715,1169,1.532,1170,1.301,1171,1.682,1172,1.79,1173,1.682,1174,2.107,1175,4.24,1176,1.553,1177,2.107,1178,1.715,1179,1.653,1180,2.107,1181,1.513,1182,2.107,1183,1.312,1184,1.886,1185,1.28,1186,2.107,1187,1.6,1188,1.79,1189,1.398]],["component/8",[6,0.35]],["keyword/8",[]],["title/9-1",[10,48.908]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["keyword/9-1",[]],["title/9-2",[1190,44.3]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["keyword/9-2",[]],["title/9-3",[188,30.031,1191,38.822]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["keyword/9-3",[]],["title/9-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["keyword/9-4",[]],["title/9-5",[139,36.226]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["keyword/9-5",[]],["title/9-6",[523,26.178,1193,34.99]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["keyword/9-6",[]],["title/9-7",[351,14.945,1194,29.827,1195,25.571]],["name/9-7",[]],["text/9-7",[]],["component/9-7",[]],["keyword/9-7",[]],["title/9-8",[194,19.679,351,12.82,1196,43.077,1197,43.077]],["name/9-8",[]],["text/9-8",[]],["component/9-8",[]],["keyword/9-8",[]],["title/9-9",[512,31.666,701,25.382]],["name/9-9",[]],["text/9-9",[]],["component/9-9",[]],["keyword/9-9",[]],["title/9-10",[520,23.467,604,24.38]],["name/9-10",[]],["text/9-10",[]],["component/9-10",[]],["keyword/9-10",[]],["title/9-11",[604,24.38,1198,42.181]],["name/9-11",[]],["text/9-11",[]],["component/9-11",[]],["keyword/9-11",[]],["title/9-12",[584,29.163,604,24.38]],["name/9-12",[]],["text/9-12",[]],["component/9-12",[]],["keyword/9-12",[]],["title/9-13",[1115,39.972]],["name/9-13",[]],["text/9-13",[]],["component/9-13",[]],["keyword/9-13",[]],["title/9-14",[524,22.19]],["name/9-14",[]],["text/9-14",[]],["component/9-14",[]],["keyword/9-14",[]],["title/9-15",[404,32.989,524,17.779]],["name/9-15",[]],["text/9-15",[]],["component/9-15",[]],["keyword/9-15",[]],["title/9-16",[1199,43.368]],["name/9-16",[]],["text/9-16",[]],["component/9-16",[]],["keyword/9-16",[]],["title/9-17",[78,38.13,1199,34.748]],["name/9-17",[]],["text/9-17",[]],["component/9-17",[]],["keyword/9-17",[]],["title/9-18",[351,
117.916,1077,24.208]],["name/9-18",[]],["text/9-18",[]],["component/9-18",[]],["keyword/9-18",[]],["title/9-19",[351,14.945,521,20.41,1077,20.194]],["name/9-19",[]],["text/9-19",[]],["component/9-19",[]],["keyword/9-19",[]],["title/9-20",[35,11.488,351,11.223,701,15.9,1077,15.165,1200,32.845]],["name/9-20",[]],["text/9-20",[]],["component/9-20",[]],["keyword/9-20",[]],["title/9-21",[454,25.973,1116,29.733]],["name/9-21",[]],["text/9-21",[]],["component/9-21",[]],["keyword/9-21",[]],["title/9-22",[454,25.973,1116,29.733]],["name/9-22",[]],["text/9-22",[]],["component/9-22",[]],["keyword/9-22",[]],["title/9-23",[32,15.215,439,18.3,454,18.585,1116,21.275]],["name/9-23",[]],["text/9-23",[]],["component/9-23",[]],["keyword/9-23",[]],["title/9-24",[351,14.945,565,25.051,1115,26.716]],["name/9-24",[]],["text/9-24",[]],["component/9-24",[]],["keyword/9-24",[]],["title/9-25",[35,15.298,251,19.777,351,14.945]],["name/9-25",[]],["text/9-25",[]],["component/9-25",[]],["keyword/9-25",[]],["title/9-26",[520,16.792,604,17.445,1046,36.604,1201,29.185]],["name/9-26",[]],["text/9-26",[]],["component/9-26",[]],["keyword/9-26",[]],["title/9-27",[220,24.123,415,39.563]],["name/9-27",[]],["text/9-27",[]],["component/9-27",[]],["keyword/9-27",[]],["title/9",[194,27.503,351,17.916]],["name/9",[194,0.652,351,0.425]],["text/9",[4,1.076,6,1.248,7,0.387,9,0.781,13,0.463,14,0.991,18,0.626,23,2.315,24,1.052,26,0.574,27,5.079,29,0.385,30,0.444,32,2.959,33,0.966,35,2.634,38,0.648,40,0.729,41,0.404,45,0.554,46,1.276,50,1.122,51,0.721,66,1.109,69,0.378,70,0.622,73,0.51,75,0.564,77,0.468,81,0.819,82,0.394,83,0.444,92,0.933,98,0.348,99,1.062,101,0.43,113,0.427,119,0.923,120,0.334,122,0.378,124,1.098,125,0.642,126,0.314,127,0.841,133,1.662,140,1.021,144,0.729,155,0.382,156,0.538,157,0.352,159,1.105,164,0.348,167,0.472,173,2.394,174,0.797,179,1.01,185,0.37,187,0.51,188,2.068,190,0.424,194,0.887,197,0.38,198,1.027,199,1.577,200,0.421,205,0.576,211,1.722,213,0.87,214,0.437,216,0.809,218,0.863,220,0.778,226,0.492,228,0.409,230,0.448,231,0.451,232,1.23,234,0.978,242,0.585,244,0.463,246,0.448,251,0.971,255,0.382,257,0.504,261,0.327,262,0.504,268,0.448,275,0.742,276,0.477,277,1.728,279,0.943,288,0.37,290,3.65,294,0.895,300,1.599,306,0.421,309,0.855,310,0.848,311,0.756,312,0.308,314,0.399,318,0.468,323,0.498,324,1.565,334,0.378,337,0.51,344,0.815,347,1.661,351,3.282,355,0.401,361,0.597,362,0.597,363,1.885,371,0.477,372,0.468,377,1.009,383,0.35,388,0.433,392,0.609,393,0.472,395,0.697,401,0.498,404,1.064,406,1.289,408,1.327,410,0.657,411,2.361,412,0.628,413,2.773,416,0.34,417,0.701,418,0.821,420,0.37,424,0.415,425,0.564,426,0.472,427,1.498,429,0.792,430,0.433,432,0.688,437,1.128,439,0.825,444,0.611,445,0.694,450,0.37,454,2.796,462,0.459,463,0.394,466,0.448,468,2.103,471,1.362,473,0.378,474,0.574,490,0.468,491,1.439,492,1.136,496,0.679,497,0.427,499,3.667,501,0.639,503,0.683,504,0.688,512,1.297,519,1.599,520,3.057,521,0.292,523,0.592,524,2.474,527,0.399,532,2.431,535,0.643,537,0.498,538,0.954,542,1.276,547,1.264,556,0.44,557,1.064,565,2.237,568,1.033,570,0.343,575,0.451,579,0.523,584,2.597,585,1.316,589,0.781,590,1.977,592,1.004,593,0.546,594,0.482,599,0.482,603,0.51,604,3.311,606,0.487,609,0.686,614,0.437,616,0.487,619,1.875,632,0.359,647,0.421,649,1.136,655,1.109,660,1.219,666,0.396,670,0.729,671,0.861,676,0.396,681,0.451,684,0.498,686,0.932,687,0.433,692,0.983,697,0.498,700,0.444,701,2.811,702,2.313,704,0.43,709,0.378,712,0.396,717,0.482,726,0.448,733,0.36,734,0.834,741,1.084,751,1.591,752,0.53,758,1.033,759,0.418,760,1.3,780,0.848,782,0.451,787,0.492,788,1.33,791,1.01,792,0.611,796,0.87,810,1.335,811,0.597,814,0.564,822,1.021,823,0.459,827,0.487,829,1.614,837,0.531,838,0.523,840,0.433,843,0.776,845,0.887,848,0.625,849,1.605,851,0.554,878,0.498,884,0.463,887,1.07,905,0.564,922,0.433,924,0.468,927,1.439,931,0.38,948,1.186,968,0.53,989,0.895,990,0.574,996,0.468,1019,0.809,1031,0.733,1055,0.492,1057,2.903,1077,3.406,1079,1.574,1086,1.656,1088,0.415,1089,0.716,1091,0.841,1094,0.415,1098,1.219,1110,0.399,1113,0.451,1115,2.553,1116,4.53,1123,0.472,1124,0.737,1126,0.357,1136,0.643,1138,0.626,1143,0.643,1144,1.302,1147,2.01,1148,0.482,1155,0.376,1156,0.437,1157,0.374,1161,0.546,1166,1.452,1170,0.444,1184,0.643,1185,0.828,1189,0.477,1192,0.396,1195,1.72,1198,0.954,1199,4.136,1200,0.626,1201,1.671,1202,0.643,1203,0.719,1204,0.878,1205,0.719,1206,0.554,1207,1.832,1208,1.258,1209,0.863,1210,0.719,1211,0.477,1212,0.504,1213,1.069,1214,0.585,1215,0.418,1216,2.192,1217,0.482,1218,0.482,1219,0.878,1220,1.33,1221,0.597,1222,0.643,1223,1.832,1224,0.688,1225,0.516,1226,0.855,1227,0.554,1228,0.719,1229,0.643,1230,1.258,1231,2.007,1232,0.498,1233,0.719,1234,0.504,1235,0.719,1236,0.51,1237,0.523,1238,0.564,1239,4.715,1240,1.315,1241,0.463,1242,0.407,1243,0.719,1244,1.315,1245,0.564,1246,0.487,1247,0.765,1248,1.412,1249,0.597,1250,0.719,1251,1.637,1252,0.719,1253,1.162,1254,0.482,1255,3.251,1256,1.315,1257,1.748,1258,3.16,1259,1.362,12
160,4.111,1261,0.719,1262,0.719,1263,0.719,1264,0.719,1265,1.362,1266,0.954,1267,0.477,1268,1.362,1269,1.941,1270,3.12,1271,0.978,1272,2.038,1273,0.455,1274,0.597,1275,0.597,1276,0.719,1277,2.817,1278,0.664,1279,1.941,1280,0.719,1281,1.558,1282,0.51,1283,0.719,1284,0.719,1285,0.688,1286,0.574,1287,0.487,1288,0.643,1289,0.574,1290,2.123,1291,4.014,1292,1.362,1293,1.691,1294,1.523,1295,1.157,1296,0.797,1297,0.585,1298,1.576,1299,1.069,1300,1.289,1301,0.719,1302,2.466,1303,1.59,1304,0.477,1305,1.576,1306,0.554,1307,0.554,1308,0.719,1309,0.418,1310,0.477,1311,1.051,1312,0.76,1313,1.241,1314,0.554,1315,0.468,1316,0.482,1317,0.546,1318,0.954,1319,0.664,1320,0.719,1321,1.362,1322,0.719,1323,0.564,1324,0.76,1325,1.01,1326,0.719,1327,0.626,1328,1.362,1329,1.941,1330,0.719,1331,0.564,1332,1.523,1333,0.719,1334,0.626,1335,0.719,1336,0.554,1337,0.487,1338,0.611,1339,0.546,1340,0.504,1341,0.463,1342,0.487,1343,0.933,1344,0.437,1345,0.664,1346,0.719,1347,1.088,1348,0.719,1349,0.611,1350,0.554,1351,0.538,1352,0.504,1353,0.719,1354,0.719,1355,0.719,1356,0.53,1357,0.43,1358,0.492,1359,0.597,1360,0.822]],["component/9",[6,0.35]],["keyword/9",[]],["title/10-1",[81,18.162,126,18.806,220,17.261,790,27.778]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["keyword/10-1",[]],["title/10-2",[7,32.401,211,25.006]],["name/10-2",[]],["text/10-2",[]],["component/10-2",[]],["keyword/10-2",[]],["title/10-3",[7,27.028,126,21.924,1361,44.955]],["name/10-3",[]],["text/10-3",[]],["component/10-3",[]],["keyword/10-3",[]],["title/10-4",[205,25.478,251,23.708]],["name/10-4",[]],["text/10-4",[]],["component/10-4",[]],["keyword/10-4",[]],["title/10-5",[778,46.44,1362,57.64]],["name/10-5",[]],["text/10-5",[]],["component/10-5",[]],["keyword/10-5",[]],["title/10-6",[180,43.227,512,31.666]],["name/10-6",[]],["text/10-6",[]],["component/10-6",[]],["keyword/10-6",[]],["title/10-7",[1363,75.138]],["name/10-7",[]],["text/10-7",[]],["component/10-7",[]],["keyword/10-7",[]],["title/10",[231,37.801,405,44.394]],["name/10",[231,0.896,405,1.052]],["text/10",[4,0.947,6,1.006,7,3.25,9,0.872,10,0.53,23,4.71,24,0.925,27,2.832,32,1.313,35,1.84,41,0.457,45,0.628,50,0.987,65,0.638,74,0.441,81,0.646,83,0.502,86,0.557,93,0.662,99,1.877,101,1.639,111,0.768,113,0.483,120,0.712,121,2.308,123,0.57,125,1.022,126,2.403,133,0.674,139,1.321,140,0.805,141,0.52,144,0.819,146,0.421,152,0.676,154,0.824,155,0.433,157,0.749,163,1.486,164,3.436,165,3.146,166,2.077,167,1.426,168,0.365,170,1.772,171,1.201,172,0.997,175,1.801,180,3.249,190,0.48,193,0.577,194,0.372,205,2.329,211,1.544,215,0.618,216,0.483,220,0.614,221,0.402,223,2.869,224,0.592,229,0.525,231,3.063,234,0.772,239,1.713,249,0.797,251,1.782,255,0.433,259,3.355,261,2.958,262,0.57,263,0.751,267,0.691,268,0.953,269,0.908,270,0.691,276,1.818,279,0.564,288,3.74,294,0.535,300,0.385,301,1.008,302,2.74,310,0.947,312,1.393,314,0.451,325,0.577,326,0.483,327,3.162,328,0.884,336,0.584,343,0.535,346,1.702,347,2.085,349,1.619,351,1.232,355,1.816,356,1.122,357,0.54,366,1.061,371,1.44,377,0.888,383,0.745,387,0.491,388,0.491,392,1.852,399,1.339,400,0.546,401,0.564,404,0.446,405,1.129,407,0.414,408,0.824,410,0.738,411,0.505,412,0.375,413,0.297,417,0.419,418,0.491,422,1.837,427,0.494,429,1.99,430,0.491,438,0.421,439,0.346,440,0.788,448,0.751,449,0.872,450,2.329,454,1.182,461,0.709,466,0.507,471,0.377,473,0.428,479,0.466,484,1.404,489,1.665,491,0.398,492,3.563,496,0.406,497,1.627,499,0.408,500,0.6,501,1.017,503,0.408,512,1.141,519,1.16,520,0.597,521,1.113,523,0.354,524,2.146,532,1.309,548,1.016,555,1.223,557,0.839,563,0.628,564,0.57,565,0.406,570,0.389,587,0.414,588,0.54,590,0.476,594,0.546,596,1.1,597,0.546,599,1.027,600,1.114,619,0.76,622,0.65,631,1.454,633,2.159,637,0.502,664,0.962,671,1.837,679,0.97,680,0.709,681,0.511,682,0.525,683,0.628,686,0.735,687,0.491,691,1.475,694,1.865,696,0.97,697,0.564,698,0.515,703,0.872,714,0.487,725,1.794,733,0.408,735,0.709,736,0.466,739,0.494,740,0.592,741,0.855,742,0.421,748,0.988,753,1.223,758,0.815,759,0.89,760,0.36,762,0.618,765,2.61,769,1.201,770,0.86,778,2.868,781,2.884,782,2.043,783,0.91,785,0.979,787,0.557,788,0.557,789,4.524,790,2.098,829,0.389,834,1.706,840,0.491,847,0.676,852,0.46,887,0.844,903,1.006,924,0.53,930,0.535,963,0.551,964,0.709,968,0.6,979,0.844,1011,0.491,1015,2.113,1019,0.483,1031,0.438,1053,0.638,1057,0.441,1077,2.213,1080,1.801,1081,1.301,1084,1.362,1086,3.389,1088,0.47,1098,0.511,1099,0.54,1100,0.525,1103,0.662,1107,0.628,1117,0.896,1122,0.426,1127,1.652,1141,0.691,1155,2.552,1160,0.609,1162,0.564,1183,0.507,1193,0.473,1207,0.507,1237,0.592,1240,0.551,1247,1.219,1256,0.551,1258,1.692,1260,3.585,1266,1.073,1273,0.515,1295,0.691,1300,1.818,1309,0.473,1340,0.57,1361,0.728,1362,2.077,1364,0.618,1365,0.691,1366,0.577,1367,0.728,1368,0.86,1369,0.65,1370,0.814,1371,0.86,1372,0.779,1373,0.86,1374,3.004,1375,0.57,1376,0.7
179,1377,0.546,1378,2.003,1379,1.371,1380,0.592,1381,0.86,1382,4.783,1383,3.93,1384,0.814,1385,0.86,1386,1.619,1387,1.751,1388,0.86,1389,0.86,1390,0.609,1391,0.86,1392,0.86,1393,0.86,1394,2.721,1395,2.293,1396,2.293,1397,0.86,1398,0.86,1399,0.814,1400,0.676,1401,0.86,1402,0.86,1403,0.814,1404,0.86,1405,1.466,1406,0.93,1407,1.531,1408,0.93,1409,2.043,1410,0.93,1411,0.86,1412,0.779,1413,0.86,1414,2.293,1415,0.93,1416,1.371,1417,1.371,1418,0.751,1419,0.93,1420,0.662,1421,0.86,1422,0.751,1423,0.676,1424,0.638,1425,0.86,1426,0.93,1427,0.93,1428,0.93,1429,0.93,1430,0.93,1431,0.93,1432,0.93,1433,1.967,1434,2.293,1435,0.86,1436,1.201,1437,1.086,1438,0.814,1439,4.95,1440,6.873,1441,0.86,1442,4.454,1443,6.503,1444,1.619,1445,0.962,1446,2.896,1447,1.619,1448,1.619,1449,2.293,1450,1.619,1451,0.93,1452,1.371,1453,0.728,1454,1.246,1455,0.814,1456,1.163,1457,0.93,1458,2.48,1459,0.93,1460,1.129,1461,0.728,1462,1.371,1463,0.473,1464,0.728,1465,0.709,1466,2.05,1467,1.038,1468,1.038,1469,1.038,1470,1.038,1471,1.818,1472,1.038,1473,0.97,1474,1.038,1475,1.038,1476,1.038,1477,1.44,1478,1.818,1479,1.016,1480,0.709,1481,0.728,1482,0.93,1483,0.93,1484,0.93,1485,0.577,1486,0.86,1487,0.86,1488,0.54,1489,0.546,1490,0.515,1491,0.93,1492,0.779,1493,0.86,1494,0.728,1495,0.618,1496,0.86,1497,1.72,1498,0.86,1499,1.647,1500,0.457,1501,0.65,1502,1.578,1503,0.676,1504,1.414,1505,1.414,1506,0.86,1507,1.619,1508,0.709,1509,1.732,1510,3.93,1511,0.628,1512,0.551,1513,1.531,1514,3.44,1515,0.691,1516,0.86,1517,0.53,1518,0.86,1519,0.751,1520,0.751,1521,0.86,1522,0.618,1523,0.86,1524,0.86,1525,0.93,1526,0.93,1527,0.535,1528,0.86,1529,0.86,1530,0.86,1531,0.93,1532,0.93,1533,0.93,1534,0.93,1535,1.301,1536,0.751,1537,2.003,1538,0.564,1539,3.193,1540,0.662,1541,0.638,1542,0.86,1543,0.779,1544,0.86,1545,1.619,1546,0.86,1547,0.86,1548,0.86,1549,0.662,1550,0.86,1551,0.814,1552,0.86,1553,0.779,1554,0.86,1555,0.86,1556,0.86,1557,0.86,1558,0.691,1559,0.476,1560,0.86,1561,0.691,1562,0.577,1563,0.86,1564,0.86]],["component/10",[6,0.35]],["keyword/10",[]],["title/11-1",[10,39.186,733,30.183]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["keyword/11-1",[]],["title/11-2",[1190,44.3]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["keyword/11-2",[]],["title/11-3",[188,30.031,1191,38.822]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["keyword/11-3",[]],["title/11-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["keyword/11-4",[]],["title/11-5",[139,36.226]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["keyword/11-5",[]],["title/11-6",[523,26.178,1193,34.99]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["keyword/11-6",[]],["title/11-7",[445,30.654,1212,42.181]],["name/11-7",[]],["text/11-7",[]],["component/11-7",[]],["keyword/11-7",[]],["title/11-8",[524,22.19]],["name/11-8",[]],["text/11-8",[]],["component/11-8",[]],["keyword/11-8",[]],["title/11-9",[524,17.779,1248,43.794]],["name/11-9",[]],["text/11-9",[]],["component/11-9",[]],["keyword/11-9",[]],["title/11-10",[351,17.916,524,17.779]],["name/11-10",[]],["text/11-10",[]],["component/11-10",[]],["keyword/11-10",[]],["title/11-11",[484,21.666,702,21.666,1015,23.449]],["name/11-11",[]],["text/11-11",[]],["component/11-11",[]],["keyword/11-11",[]],["title/11-12",[426,39.563,1565,49.002]],["name/11-12",[]],["text/11-12",[]],["component/11-12",[]],["keyword/11-12",[]],["title/11-13",[1296,35.239,1566,40.788]],["name/11-13",[]],["text/11-13",[]],["component/11-13",[]],["keyword/11-13",[]],["title/11-14",[427,36.582,520,23.467]],["name/11-14",[]],["text/11-14",[]],["component/11-14",[]],["keyword/11-14",[]],["title/11-15",[210,37.672]],["name/11-15",[]],["text/11-15",[]],["component/11-15",[]],["keyword/11-15",[]],["title/11",[249,22.409,250,23.462,484,18.585,1015,20.113]],["name/11",[249,0.4,250,0.419,484,0.332,1015,0.359]],["text/11",[4,1.187,6,1.184,7,0.434,9,0.61,13,0.52,14,0.303,19,0.242,20,0.244,21,0.398,23,2.983,24,1.159,27,0.781,28,0.242,29,0.628,30,0.498,32,2.247,33,0.295,34,0.417,35,1.527,36,0.644,37,0.632,38,0.877,40,3.076,41,0.234,45,0.321,46,0.53,48,0.346,50,0.189,51,0.426,61,0.372,70,0.368,74,0.225,77,0.271,78,0.263,81,0.34,82,0.228,86,0.285,88,0.307,98,1.042,99,3.099,101,0.249,111,0.761,119,1.417,120,1,121,0.468,122,0.219,124,1.686,125,1.633,126,1.612,127,0.257,128,0.321,133,1.196,138,0.257,139,1.037,140,1.699,144,0.987,153,0.228,155,0.981,157,1.33,164,0.568,167,0.273,169,0.303,170,0.227,173,0.585,174,0.244,180,0.299,184,0.812,185,1.9,187,0.295,188,1.949,194,0.983,197,0.62,198,1.138,199,0.709,200,0.472,201,0.316,202,0.288,204,0.261,205,0.911,210,0.588,211,1.129,213,0.515,214,1.307,216,1.095,217,0.594,220,1.194,221,0.579,222,0.311,223,0.206,224,0.586,226,0.285,227,0.586,228,0.459,230,0.259,233,0.307,238,0.311,239,0.7,241,0.511,246,0.502,249,2.139,250,1.33,251,0.847,258,0.311,259,3.434,261,1.777,264,0.384,268,0.73,269,1.247,275,0.639,280,0.311,281,0.853,286,0.79,288,1.399,293,0.291,294,1.414,300,1.64,301,0.857,303,0.311,304,0.285,305,0.877,307,0.288,309,0.506,310,1.066,311,0.651,312,1.046,313,0.321,314,0.842,324,0.624,325,0.295,326,0.697,327,0.253,328,0.677,337,0.572,338,0.494,340,0.572,343,1.787,344,0.249,346,1.191,347,1.648,350,0.245,351,1.893,365,0.52,366,0.203,375,1.132,376,0.998,377,1.419,379,0.321,383,0.571,387,0.251,388,0.486,392,0.525,395,0.413,397,0.316,404,1.01,406,0.778,408,0.224,410,0.889,411,2.167,412,0.991,413,2.324,414,0.279,415,0.273,416,0.718,417,0.604,418,0.707,420,0.415,422,1.638,424,0.465,426,0.998,429,0.329,430,0.915,436,0.321,437,0.469,438,0.785,439,0.177,440,0.415,445,1.096,446,2.154,447,0.579,449,0.237,450,1.107,451,0.535,453,0.311,454,0.179,458,0.316,459,0.257,462,0.266,471,
10.193,473,0.219,474,0.332,479,0.238,484,3.963,489,1.652,491,0.203,492,2.649,493,0.257,496,0.208,497,0.247,499,0.761,501,0.865,506,0.282,509,0.242,511,0.295,512,0.617,515,0.307,519,0.176,520,0.457,521,0.749,523,0.66,524,2.812,525,1.112,527,0.231,531,0.282,532,0.199,537,0.288,538,0.291,548,0.276,555,1.212,557,0.643,565,0.402,568,0.429,570,1.656,573,0.365,575,0.506,584,0.735,585,0.361,587,0.212,594,0.786,595,0.565,596,0.299,599,0.786,600,0.303,604,0.747,606,0.546,609,2.072,610,0.362,612,0.53,614,0.49,615,0.332,616,0.282,617,0.853,619,1.212,625,0.795,632,0.208,637,0.257,639,0.692,641,0.266,642,0.193,647,1.259,649,1.049,660,0.953,666,1.347,668,0.316,669,4.638,670,0.987,671,1.733,672,0.261,679,0.962,681,0.261,686,1.172,691,0.224,692,0.934,696,0.962,698,0.743,699,0.263,701,1.556,702,2.092,703,1.225,709,0.219,712,1.781,723,0.251,725,1.499,726,0.259,728,0.67,733,0.761,736,0.238,739,0.253,741,1.029,742,0.215,748,0.979,749,0.465,750,0.353,751,0.869,752,0.594,753,0.644,754,0.656,755,2.718,756,4.377,758,0.808,759,1.25,760,3.773,761,0.321,763,0.905,764,0.339,765,1.728,766,0.332,768,0.332,769,0.326,774,0.506,775,0.945,781,3.057,783,0.902,785,0.97,786,0.259,789,0.502,790,0.268,791,0.79,794,0.24,795,0.303,796,0.266,797,0.279,800,0.291,813,0.311,816,0.249,818,0.24,822,2.163,827,0.795,829,0.881,834,1.693,835,0.332,837,1.351,838,0.303,843,0.459,845,0.271,849,0.271,852,0.663,855,0.803,881,0.722,883,0.316,887,0.444,903,0.998,922,0.251,927,1.458,930,0.998,931,0.62,963,0.282,979,2.035,981,0.266,982,1.58,989,1.212,990,0.332,992,0.479,996,0.271,1015,4.602,1019,0.247,1031,0.434,1045,0.316,1055,0.552,1077,2.257,1079,0.431,1080,1.212,1084,0.736,1086,3.436,1088,0.876,1089,0.219,1091,0.724,1098,0.953,1100,0.268,1108,0.326,1110,0.651,1112,0.279,1113,0.261,1114,0.372,1116,0.398,1117,0.472,1120,0.316,1121,0.339,1122,1.559,1124,0.225,1126,1.212,1127,0.486,1132,0.214,1134,0.465,1139,0.362,1144,0.786,1147,2.667,1154,0.282,1155,2.254,1156,1.484,1157,0.61,1165,0.579,1179,0.326,1181,0.299,1183,0.259,1189,0.276,1190,0.245,1192,0.229,1194,0.247,1195,0.212,1202,0.372,1204,0.52,1207,1.34,1209,0.743,1211,2.3,1212,0.291,1213,0.326,1215,0.682,1216,1.242,1217,0.279,1218,0.279,1219,0.52,1220,0.285,1223,0.259,1225,0.579,1226,1.534,1234,0.291,1237,0.303,1240,0.282,1241,0.268,1242,0.235,1244,0.282,1246,0.282,1247,0.234,1248,4.544,1251,1.008,1253,1.287,1254,1.236,1258,0.419,1267,0.276,1273,0.962,1287,0.282,1289,0.644,1290,0.853,1293,0.362,1296,0.472,1298,0.266,1300,0.276,1303,0.268,1309,0.682,1316,0.279,1325,0.61,1337,0.282,1339,0.316,1341,0.268,1342,0.282,1351,0.603,1356,0.594,1357,0.482,1358,0.285,1364,0.316,1366,0.295,1369,0.332,1375,0.291,1377,0.786,1400,0.346,1409,1.871,
11418,1.703,1433,0.299,1437,0.295,1439,0.307,1456,1.4,1460,1.119,1463,0.682,1466,2.376,1467,1.029,1468,1.029,1469,1.029,1470,1.029,1471,1.804,1472,1.029,1473,0.962,1474,1.029,1475,1.029,1476,1.029,1477,1.008,1478,1.804,1479,1.008,1481,3.497,1485,2.29,1488,1.008,1489,2.324,1490,2.338,1492,1.454,1497,0.261,1500,0.234,1511,0.321,1514,0.346,1527,0.273,1540,0.339,1541,0.326,1549,0.339,1559,0.889,1562,0.295,1565,0.339,1566,0.282,1567,0.659,1568,0.346,1569,0.685,1570,1.688,1571,0.384,1572,1.191,1573,0.937,1574,0.416,1575,0.372,1576,0.803,1577,0.384,1578,0.384,1579,0.362,1580,0.398,1581,0.321,1582,0.372,1583,1.545,1584,0.326,1585,0.565,1586,0.255,1587,1.064,1588,0.316,1589,0.261,1590,0.326,1591,0.622,1592,0.326,1593,0.303,1594,0.316,1595,0.321,1596,0.326,1597,0.288,1598,0.288,1599,0.685,1600,0.806,1601,0.346,1602,0.362,1603,0.416,1604,1.609,1605,0.362,1606,0.346,1607,0.416,1608,0.476,1609,0.416,1610,0.398,1611,0.722,1612,0.346,1613,0.416,1614,0.416,1615,0.321,1616,0.307,1617,1.605,1618,0.346,1619,0.795,1620,0.416,1621,0.859,1622,0.416,1623,0.339,1624,0.362,1625,0.416,1626,0.558,1627,2.429,1628,0.579,1629,0.416,1630,0.384,1631,0.416,1632,0.295,1633,0.416,1634,0.362,1635,0.685,1636,1.58,1637,0.612,1638,0.416,1639,0.326,1640,0.416,1641,0.416,1642,0.372,1643,0.44,1644,0.416,1645,0.372,1646,0.416,1647,0.316,1648,0.346,1649,0.476,1650,0.253,1651,0.372,1652,0.416,1653,0.44,1654,0.476,1655,0.44,1656,0.476,1657,0.572,1658,0.515,1659,0.44,1660,0.346,1661,0.476,1662,0.326,1663,0.326,1664,0.282,1665,0.257,1666,0.307,1667,0.316,1668,0.416,1669,0.326,1670,1.651,1671,2.381,1672,0.416,1673,0.416,1674,0.416,1675,0.416,1676,0.321,1677,0.353,1678,0.353,1679,1.788,1680,0.321,1681,0.398,1682,1.261,1683,1.173,1684,1.518,1685,0.476,1686,0.476,1687,3.933,1688,0.722,1689,0.416,1690,0.339,1691,0.416,1692,0.398,1693,0.476,1694,0.806,1695,0.772,1696,1.66,1697,1.173,1698,0.416,1699,0.416,1700,0.416,1701,0.416,1702,0.416,1703,0.416,1704,0.416,1705,1.379,1706,0.384,1707,0.316,1708,0.476,1709,0.353,1710,0.372,1711,0.285,1712,0.339,1713,0.295,1714,0.316,1715,0.644,1716,0.398,1717,0.476,1718,0.316,1719,0.416,1720,0.416,1721,0.955,1722,1.692,1723,1.173,1724,0.612,1725,0.311,1726,0.416,1727,0.332,1728,0.346,1729,0.362,1730,0.416,1731,0.656,1732,0.416,1733,0.416,1734,0.476,1735,1.083,1736,0.303,1737,0.353,1738,0.476,1739,0.476,1740,0.702,1741,0.372,1742,0.644,1743,0.339,1744,0.346,1745,0.416,1746,0.362,1747,0.372,1748,0.311,1749,0.339,1750,0.362,1751,0.321,1752,1.051,1753,0.476,1754,0.656,1755,0.416,1756,0.398,1757,0.416,1758,0.416,1759,0.416,1760,0.656,1761,0.416,1762,0.416,1763,0.416,1764,2.171,1765,0.398,1766,0.384,1767,0.44,1768,0.307,1769,0.299,1770,0.398,1771,0.362,1772,0.722,1773,0.398,1774,0.398,1775,0.398,1776,0.398,1777,0.372,1778,0.307,1779,0.311,1780,0.299,1781,0.586,1782,0.353,1783,0.307,1784,0.416,1785,0.416,1786,0.372,1787,0.494,1788,0.332,1789,0.416,1790,0.416,1791,0.416,1792,0.416,1793,0.416]],["component/11",[6,0.35]],["keyword/11",[]],["title/12-1",[10,39.186,733,30.183]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["keyword/12-1",[]],["title/12-2",[1190,44.3]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["keyword/12-2",[]],["title/12-3",[188,30.031,1191,38.822]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["keyword/12-3",[]],["title/12-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["keyword/12-4",[]],["title/12-5",[139,36.226]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["keyword/12-5",[]],["title/12-6",[523,26.178,1193,34.99]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["keyword/12-6",[]],["title/12-7",[40,32.212,604,24.38]],["name/12-7",[]],["text/12-7",[]],["component/12-7",[]],["keyword/12-7",[]],["title/12-8",[28,34.99,221,29.733]],["name/12-8",[]],["text/12-8",[]],["component/12-8",[]],["keyword/12-8",[]],["title/12-9",[442,42.691,717,40.363]],["name/12-9",[]],["text/12-9",[]],["component/12-9",[]],["keyword/12-9",[]],["title/12-10",[32,21.264,411,19.835]],["name/12-10",[]],["text/12-10",[]],["component/12-10",[]],["keyword/12-10",[]],["title/12-11",[35,18.339,604,24.38]],["name/12-11",[]],["text/12-11",[]],["component/12-11",[]],["keyword/12-11",[]],["title/12-12",[756,35.186,1077,20.194,1794,57.426]],["name/12-12",[]],["text/12-12",[]],["component/12-12",[]],["keyword/12-12",[]],["title/12-13",[412,23.141,593,38.131,1112,33.671]],["name/12-13",[]],["text/12-13",[]],["component/12-13",[]],["keyword/12-13",[]],["title/12-14",[99,21.722,855,41.232]],["name/12-14",[]],["text/12-14",[]],["component/12-14",[]],["keyword/12-14",[]],["title/12-15",[1296,35.239,1566,40.788]],["name/12-15",[]],["text/12-15",[]],["component/12-15",[]],["keyword/12-15",[]],["title/12-16",[427,36.582,520,23.467]],["name/12-16",[]],["text/12-16",[]],["component/12-16",[]],["keyword/12-16",[]],["title/12-17",[210,37.672]],["name/12-17",[]],["text/12-17",[]],["component/12-17",[]],["keyword/12-17",[]],["title/12",[249,26.124,250,27.352,604,20.337]],["name/12",[249,0.4,250,0.419,584,0.372,604,0.311]],["text/12",[1,0.386,4,1.522,6,1,9,0.205,13,0.328,14,0.712,19,0.296,20,0.298,23,3.855,24,0.604,27,2.315,28,1.278,29,0.524,30,0.314,32,2.759,33,0.694,34,0.507,35,1.871,36,0.782,38,1.046,40,0.757,46,0.334,51,0.518,62,1.044,69,0.268,70,0.647,74,0.275,76,0.538,78,0.62,81,0.768,82,0.537,84,0.722,86,0.348,92,0.348,98,0.882,99,1.85,111,0.255,113,0.302,119,0.866,120,0.847,121,0.727,122,0.268,124,1.972,125,1.203,126,1.259,127,0.314,133,1.878,139,0.682,140,1.157,141,1.164,146,0.263,155,0.753,156,0.381,157,1.41,164,0.246,165,0.631,167,0.334,170,0.277,172,0.921,173,0.254,174,0.573,179,0.265,183,0.361,184,0.272,185,1.314,188,1.739,193,0.361,194,0.232,197,1.163,198,1.163,199,0.238,200,0.298,201,0.386,202,0.678,204,0.319,205,2.17,210,0.255,211,1.198,214,1.336,216,1.897,217,0.375,218,0.322,220,1.023,221,1.261,223,0.253,227,
10.37,228,1.037,230,0.317,232,0.322,234,0.256,238,0.381,239,0.652,241,0.322,243,0.341,244,0.913,246,0.317,249,4.148,250,1.74,251,1.136,256,0.294,258,0.381,259,3.307,261,2.047,268,1.134,269,1.574,276,0.939,280,0.381,281,0.37,283,0.406,285,0.375,286,0.736,288,1.314,289,0.251,292,0.841,294,0.643,300,2.234,301,0.847,307,0.352,310,1.114,311,1.22,312,1.493,313,0.392,314,0.282,319,0.712,328,0.817,330,0.832,334,0.515,337,1.291,343,0.643,344,0.847,346,1.11,347,1.611,350,0.3,351,0.951,357,0.338,365,0.631,366,0.249,374,0.547,375,0.515,388,0.59,392,0.438,395,0.26,404,1.205,408,0.527,410,0.472,411,1.69,412,0.652,413,2.347,414,0.657,416,0.463,417,0.262,418,0.307,422,1.475,424,0.565,427,0.309,430,0.307,437,0.296,438,1.138,439,0.216,440,0.262,445,0.927,446,3.818,447,0.365,451,0.338,454,0.786,466,0.317,468,0.61,472,0.386,473,0.958,479,0.292,483,0.423,484,1.941,489,1.551,491,0.479,492,3.021,496,0.706,499,0.255,501,0.459,505,0.904,508,0.381,509,0.569,511,2.045,512,0.745,514,0.386,515,0.375,516,0.386,519,0.599,520,0.857,521,0.398,523,0.792,524,0.418,527,1.01,528,0.455,531,0.663,537,0.352,542,0.334,548,0.939,556,0.6,557,0.537,565,0.254,570,0.468,571,0.487,573,0.23,575,0.615,576,0.312,580,0.455,581,0.686,582,0.322,584,3.354,585,0.984,589,0.561,592,1.622,593,1.075,594,0.341,597,1.221,598,0.414,599,1.475,601,0.686,603,0.361,604,2.546,605,0.392,609,2.584,612,0.334,614,0.595,615,0.406,619,0.703,625,0.345,626,0.399,631,0.341,639,0.577,640,0.432,641,0.626,647,2.763,649,1.113,660,0.615,671,1.547,679,0.896,682,0.631,683,0.392,686,0.47,687,0.853,690,0.338,691,1.719,692,0.258,693,0.319,696,0.896,697,0.352,698,1.393,700,0.605,701,2.65,702,2.446,703,1.252,709,0.268,711,0.375,713,0.671,714,0.304,724,0.325,725,1.407,726,0.61,733,0.491,736,0.561,738,0.432,741,1.017,748,1.418,749,0.294,751,1.036,752,0.375,753,0.406,754,0.414,755,3.734,756,6.608,757,1.13,758,2.139,759,2.337,760,2.349,761,0.755,763,1.405,764,0.797,765,3.034,766,0.782,768,0.406,769,0.399,774,0.615,780,0.61,781,0.488,783,0.841,785,0.904,789,1.134,790,0.328,791,0.736,794,0.294,795,0.37,796,0.626,797,0.657,800,0.356,806,0.345,822,1.157,827,1.73,829,0.243,834,1.589,837,1.466,845,0.331,847,0.423,852,0.288,855,1.247,874,0.406,883,0.743,884,0.328,887,0.54,903,0.93,905,0.399,922,0.307,927,1.249,930,0.93,931,0.269,945,0.392,979,1.761,981,0.325,982,0.569,989,0.643,992,0.302,996,0.331,1011,0.853,1015,2.724,1031,0.274,1055,0.348,1073,0.414,1077,3.808,1079,0.757,1080,0.93,1084,0.319,1089,0.268,1091,0.874,1094,0.294,1098,0.889,1110,0.543,1112,1.475,1113,0.319,1116,1.858,1117,0.573,1124,0.275,1126,0.904,1127,2.268,1132,0.262,1144,0.657,1147,0.753,1154,0.345,1157,1.144,1170,0.314,1185,0.309,1189,0.65,1190,0.3,1192,0.281,1204,0.631,1207,0.61,1209,1.153,1211,1.209,1213,0.399,1215,0.823,1216,2.343,1217,0.341,1218,0.341,1219,0.328,1220,0.348,1221,0.423,1222,0.455,1223,0.317,1225,0.365,1226,0.615,1229,0.455,1234,0.686,1235,0.509,1238,0.399,1242,1.03,1246,0.959,1247,0.286,1248,0.712,1249,0.423,1251,0.338,1253,0.847,1254,0.657,1257,0.507,1258,2.766,1267,1.694,1273,0.322,1282,0.361,1296,0.573,1300,0.65,1303,1.174,1306,0.392,1309,1.857,1311,0.392,1316,0.341,1325,0.947,1340,0.356,1342,0.959,1343,0.348,1352,0.356,1357,0.304,1358,0.671,1377,0.657,1378,0.47,1400,0.423,1409,1.811,1433,0.703,1439,0.375,1445,0.319,1456,2.19,1460,1.044,1463,0.296,1467,0.959,1468,0.959,1469,0.959,1470,0.959,1471,1.914,1472,0.959,1473,0.896,1474,0.959,1475,0.959,1476,0.959,1477,0.939,1478,1.694,1479,0.939,1485,4.555,1488,0.939,1489,2.861,1490,0.62,1492,1.355,1497,0.889,1499,0.386,1500,0.55,1503,0.423,1504,0.47,1505,0.47,1514,0.814,1517,0.921,1541,0.399,1559,0.298,1562,0.694,1565,0.414,1567,0.55,1568,0.423,1569,1.203,1570,0.768,1572,1.11,1573,0.406,1576,0.348,1582,0.455,1584,0.399,1585,1.276,1586,0.6,1587,1.269,1588,0.386,1589,0.319,1590,0.399,1591,0.755,1592,0.399,1593,0.712,1594,0.386,1595,0.392,1596,0.399,1597,0.352,1598,0.352,1599,0.832,1601,0.423,1602,0.853,1604,0.381,1616,0.375,1617,2.099,1619,2.549,1621,2.901,1632,0.361,1636,0.296,1645,0.455,1647,0.743,1648,0.814,1650,0.595,1651,0.877,1652,0.979,1653,0.538,1655,0.538,1657,1.291,1658,0.325,1659,1.035,1660,0.423,1662,0.399,1663,0.399,1664,0.663,1665,0.605,1667,0.386,1671,0.722,1676,0.755,1679,2.654,1682,1.176,1683,0.509,1684,1.415,1688,0.455,1705,0.381,1709,0.432,1711,0.348,1712,0.414,1713,1.81,1714,0.386,1722,1.997,1725,0.381,1740,2.223,1744,0.423,1746,0.443,1747,0.455,1748,0.381,1749,0.414,1752,0.98,1760,0.414,1764,2.551,1768,0.722,1772,1.969,1773,0.938,1774,1.355,1775,0.938,1776,0.938,1777,0.877,1778,1.882,1779,1.059,1780,1.833,1781,1.6,1782,0.832,1783,0.375,1787,0.312,1795,0.509,1796,0.455,1797,0.509,1798,0.853,1799,0.455,1800,0.979,1801,0.979,1802,0.509,1803,0.509,1804,0.509,1805,1.415,1806,0.509,1807,0.509,1808,0.365,1809,0.509,1810,0.582,1811,0.455,1812,0.979,1813,0.582,1814,0.582,1815,0.443,1816,0.582,1817,0.455,1818,2.199,1819,0.832,1820,0.582,1821,0.582,1822,0.509,1823,0.509,1824,0.487,1825,0.979,1826,0.582,1827,0.455,1828,0.455,1829,0.979,1830,0.582,1831,0.582,1832,0.582,1833,0.582,1834,0.582,1835,2.553,1836,0.582,1837,0.582,1838,0.582,1839,0.979,1840,0.443,1841,0.509,1842,0.47,1843,0.487,1844,0.582,1845,0.582,1846,0.47,1847,0.582,1848,0.768,1849,0.509,1850,0.392,1851,0.509,1852,0.509,1853,0.509,1854,0.509,1855,0.509,1856,0.509,1857,0.509,1858,2.553,1859,0.509,1860,0.509,1861,0.582,1862,0.538,1863,0.538,1864,0.443,1865,0.509,1866,0.509,1867,0.582,1868,0.386,1869,0.509,1870,0.487,1871,0.582,1872,0.979,1873,1.415,1874,0.509,1875,0.582,1876,0.509,1877,0.582,1878,1.619,1879,0.443,1880,0.582,1881,0.582,1882,0.582,1883,0.47,1884,0.582,1885,0.509,1886,0.582,1887,0.582,1888,0.582,1889,0.47,1890,0.509,1891,0.582,1892,0.712,1893,0.423,1894,0.455,1895,0.509,1896,0.381,1897,0.853,1898,0.386,1899,0.423,1900,0.509,1901,0.509,1902,0.509,1903,0.423,1904,0.582,1905,0.904,1906,0.904,1907,0.509,1908,0.365,1909,0.509,1910,0.455,1911,0.509,1912,0.509,1913,0.509,1914,0.509,1915,0.487,1916,0.423,1917,0.509,1918,0.386,1919,0.509,1920,0.509,1921,0.406,1922,0.509,1923,0.509]],["component/12",[6,0.35]],["keyword/12",[]],["title/13-1",[10,48.908]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["keyword/13-1",[]],["title/13-2",[1190,44.3]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["keyword/13-2",[]],["title/13-3",[188,30.031,1191,38.822]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["keyword/13-3",[]],["title/13-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["keyword/13-4",[]],["title/13-5",[139,36.226]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["keyword/13-5",[]],["title/13-6",[523,26.178,1193,34.99]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["keyword/13-6",[]],["title/13-7",[205,25.478,1924,53.891]],["name/13-7",[]],["text/13-7",[]],["component/13-7",[]],["keyword/13-7",[]],["title/13-8",[232,31.808,311,27.863,324,26.716]],["name/13-8",[]],["text/13-8",[]],["component/13-8",[]],["keyword/13-8",[]],["title/13-9",[99,21.722,454,25.973]],["name/13-9",[]],["text/13-9",[]],["component/13-9",[]],["keyword/13-9",[]],["title/13-10",[144,32.212,507,38.47]],["name/13-10",[]],["text/13-10",[]],["component/13-10",[]],["keyword/13-10",[]],["title/13-11",[351,24.485]],["name/13-11",[]],["text/13-11",[]],["component/13-11",[]],["keyword/13-11",[]],["title/13-12",[220,24.123,1535,51.156
1]],["name/13-12",[]],["text/13-12",[]],["component/13-12",[]],["keyword/13-12",[]],["title/13-13",[1296,35.239,1566,40.788]],["name/13-13",[]],["text/13-13",[]],["component/13-13",[]],["keyword/13-13",[]],["title/13-14",[427,36.582,520,23.467]],["name/13-14",[]],["text/13-14",[]],["component/13-14",[]],["keyword/13-14",[]],["title/13-15",[210,37.672]],["name/13-15",[]],["text/13-15",[]],["component/13-15",[]],["keyword/13-15",[]],["title/13",[249,31.317,250,32.789]],["name/13",[249,0.742,250,0.777]],["text/13",[4,2.446,6,1.701,7,1.593,9,1.054,13,0.339,14,0.382,20,0.591,22,0.382,23,3.076,24,1.118,27,1.982,28,0.587,29,0.54,30,0.324,32,1.848,33,0.373,34,0.272,35,2.176,36,0.806,38,0.891,40,0.54,41,0.295,46,0.345,51,0.278,69,1.189,70,1.76,81,1.248,82,0.288,83,0.324,85,0.437,86,0.36,88,0.387,98,1.587,99,1.659,102,0.377,109,0.393,111,1.484,113,0.6,118,0.437,119,1.831,120,0.871,121,1.047,122,0.767,123,0.368,124,0.825,125,1.235,126,0.229,133,0.995,139,1.264,140,2.026,141,0.336,144,2.202,146,1.17,147,0.339,149,0.382,152,1.212,154,0.283,155,1.203,157,2.012,159,0.299,160,0.339,163,1.283,164,0.489,165,1.908,167,1.232,169,0.382,170,2.504,172,0.342,173,0.262,174,0.308,175,0.664,177,0.587,178,0.968,179,1.364,180,1.346,184,1.21,185,1.164,188,2.177,190,0.31,194,1.198,195,0.904,196,0.399,197,1.387,198,0.771,199,0.472,200,0.853,202,1.298,204,0.33,205,2.515,210,0.94,211,1.91,213,1.675,214,1.374,216,2.122,217,0.745,218,0.64,220,1.431,221,0.72,223,2.393,226,0.36,227,0.382,228,0.575,230,0.327,231,0.33,232,0.333,234,0.265,238,0.393,239,1.364,242,0.428,249,3.597,250,1.946,251,1.165,255,0.537,256,0.303,258,0.393,259,1.691,261,3.776,267,0.446,268,0.908,269,1.495,270,0.446,275,0.55,277,1.022,280,0.393,285,0.745,286,0.759,289,0.259,292,0.312,293,1.022,294,0.664,300,1.823,301,1.051,304,0.36,307,0.364,308,0.446,309,0.634,310,1.43,311,1.982,312,2.064,313,0.405,314,1.04,318,0.342,319,0.735,324,0.537,326,0.6,327,0.886,328,1.891,334,0.767,338,0.619,344,0.314,346,0.412,347,2.562,351,2.304,360,0.42,366,0.713,367,0.405,374,0.293,375,0.767,376,0.284,377,0.215,383,2.547,387,0.317,388,0.609,393,0.345,395,0.517,399,0.324,404,0.553,406,0.349,408,0.785,410,3.856,411,2.458,412,0.864,413,2.979,414,0.677,416,1.401,417,0.75,418,0.609,422,3.373,424,0.842,426,0.664,429,0.412,437,0.305,438,1.17,439,0.429,440,0.27,442,0.716,443,0.858,445,0.954,446,3.877,447,2.352,450,0.75,451,0.349,453,0.393,454,0.629,456,0.716,459,0.624,461,0.458,463,0.288,473,0.276,479,0.836,484,1.413,487,0.42,489,0.614,491,0.713,492,2.499,493,0.324,496,0.262,497,0.866,499,1.315,501,0.684,503,0.506,507,0.932,509,1.089,511,1.034,512,1.189,519,0.222,520,0.568,521,1.203,522,0.314,523,0.983,524,0.774,527,1.455,532,0.482,548,1.244,556,0.322,557,0.288,564,0.708,565,0.935,568,0.997,570,0.482,573,0.238,575,0.634,576,0.619,584,0.489,585,1.841,587,0.514,588,0.67,589,0.301,591,0.393,599,1.256,604,1.198,606,0.356,609,2.429,612,1.232,615,0.42,619,1.301,620,0.458,625,0.684,631,1.516,639,1.931,647,2.091,649,1.142,660,1.177,664,0.33,671,1.003,679,0.333,681,0.634,682,1.208,683,0.779,686,0.7,687,0.317,690,0.67,691,1.217,692,0.512,694,0.301,696,0.333,698,0.64,700,0.324,701,2.864,702,1.984,703,0.575,704,0.314,709,0.276,711,0.387,717,0.677,723,0.879,724,0.336,725,1.033,726,0.327,733,0.731,734,0.322,736,0.579,739,0.319,740,0.382,741,0.564,745,1.022,748,0.339,749,1.305,751,2.271,752,1.075,753,1.806,754,1.187,755,2.239,756,4.163,757,1.806,758,1.203,759,1.314,760,0.999,761,0.779,763,1.744,764,0.822,765,1.583,766,0.806,768,0.806,769,0.792,773,1.329,774,0.33,775,1.408,780,0.327,781,0.262,783,0.312,785,0.336,786,0.629,789,0.908,790,0.651,791,0.975,792,1.239,794,0.303,796,0.336,797,0.352,808,1.047,809,0.33,810,1.015,816,0.314,818,0.583,827,0.356,834,0.629,837,1.604,843,0.83,845,0.657,848,0.669,851,0.405,852,0.297,853,0.437,878,0.364,884,0.651,887,0.557,903,0.345,922,0.609,924,0.342,927,1.447,928,0.405,930,0.664,963,0.356,968,1.075,979,1.806,981,0.336,982,1.314,989,0.345,996,0.342,1011,0.317,1015,1.529,1029,0.405,1055,0.692,1056,0.88,1057,0.284,1073,0.428,1074,0.47,1077,2.023,1079,0.281,1080,2.531,1084,1.177,1086,0.23,1088,0.303,1089,0.767,1091,2.206,1094,0.583,1098,1.177,1100,0.339,1101,0.393,1106,0.368,1107,0.405,1108,0.792,1110,0.56,1113,0.634,1116,0.72,1117,0.308,1121,0.822,1122,0.275,1126,0.261,1144,0.352,1146,0.428,1147,1.203,1155,0.528,1157,0.525,1162,0.364,1165,0.725,1170,0.324,1181,0.725,1185,0.319,1187,0.399,1189,0.67,1190,0.86,1192,0.29,1194,0.6,1195,0.954,1204,0.94,1207,1.167,1209,0.64,1211,2.896,1216,0.461,1217,0.352,1218,0.352,1219,0.651,1220,0.36,1223,0.327,1225,0.725,1226,0.634,1227,0.405,1237,0.382,1238,0.412,1240,0.356,1241,0.94,1242,1.674,1251,0.349,1253,0.872,1254,0.677,1257,0.272,1260,0.29,1273,1.432,1289,0.42,1290,0.295,1296,1.097,1309,0.587,1313,0.645,1325,0.525,1336,0.405,1339,0.399,1341,0.94,1342,0.684,1351,0.393,1352,0.368,1356,0.745,1357,0.314,1358,0.36,1374,0.485,1377,1.256,1409,1.858,1420,0.822,1423,0.437,1424,0.412,1433,0.725,1436,1.144,1437,1.034,1456,0.399,1460,0.387,1467,0.356,1468,0.356,1469,0.356,1470,0.356,1471,0.67,1472,0.356,1473,0.333,1474,0.356,1475,0.356,1476,0.356,1477,0.349,1478,0.67,1479,0.349,1485,0.716,1488,0.349,1489,0.677,1490,0.333,1492,0.503,1497,0.33,1499,0.399,1500,1.053,1504,0.485,1505,0.933,1519,1.346,1527,0.664,1535,0.446,1536,0.485,1538,1.01,1539,0.405,1561,0.446,1562,0.373,1566,0.356,1567,1.053,1570,0.792,1584,0.412,1585,1.584,1586,0.619,1587,0.583,1588,0.399,1589,0.916,1590,0.412,1591,0.779,1592,0.412,1593,1.907,1594,0.399,1595,0.405,1596,0.412,1597,0.364,1598,0.364,1601,0.437,1612,0.437,1616,0.387,1617,1.723,1621,0.297,1623,0.428,1626,0.364,1635,0.446,1637,1.107,1643,0.555,1657,1.034,1668,0.525,1679,2.722,1680,0.405,1683,0.525,1684,0.525,1690,0.428,1692,0.503,1705,0.393,1707,0.399,1709,1.239,1711,0.692,1712,0.822,1713,0.716,1715,0.42,1728,0.839,1729,0.458,1731,0.822,1740,1.27,1741,0.47,1742,0.806,1744,0.437,1750,0.458,1754,0.428,1768,0.745,1771,0.458,1787,0.619,1788,0.42,1796,0.47,1799,0.904,1811,0.47,1812,0.525,1819,0.446,1828,0.47,1842,0.485,1843,0.503,1848,0.792,1870,0.503,1879,0.458,1894,0.47,1896,0.755,1921,0.42,1924,0.904,1925,0.525,1926,0.503,1927,0.458,1928,0.958,1929,0.525,1930,0.405,1931,0.525,1932,0.47,1933,1.125,1934,1.01,1935,1.01,1936,0.806,1937,0.525,1938,0.699,1939,0.446,1940,0.822,1941,0.405,1942,1.01,1943,0.47,1944,0.525,1945,0.525,1946,0.525,1947,0.485,1948,0.525,1949,1.01,1950,1.731,1951,0.47,1952,1.01,1953,1.458,1954,0.525,1955,1.01,1956,1.01,1957,0.601,1958,0.601,1959,0.47,1960,1.075,1961,0.525,1962,0.458,1963,0.503,1964,0.405,1965,0.601,1966,0.525,1967,1.496,1968,0.601,1969,0.525,1970,0.933,1971,0.437,1972,1.01,1973,0.601,1974,0.601,1975,0.503,1976,0.525,1977,0.356,1978,0.428,1979,0.525,1980,0.503,1981,0.525,1982,0.503,1983,0.806,1984,0.525,1985,0.555,1986,0.485,1987,0.47,1988,0.755,1989,0.525,1990,0.525,1991,0.601,1992,1.667,1993,0.601,1994,0.601,1995,0.458,1996,0.364,1997,0.525,1998,0.601,1999,0.525,2000,0.525,2001,0.525,2002,0.601,2003,0.42,2004,0.525,2005,0.503,2006,0.601,2007,0.485,2008,0.485,2009,0.525,2010,0.601,2011,0.601,2012,0.428,2013,0.503,2014,0.525,2015,0.601,2016,0.47,2017,0.437,2018,0.525,2019,0.525,2020,0.446,2021,0.485,2022,0.503,2023,0.47,2024,1.01,2025,0.525,2026,0.428,2027,0.503,2028,0.525,2029,0.503,2030,0.601,2031,0.601,2032,1.01,2033,0.555,2034,0.601,2035,0.437]],["component/13",[6,0.35]],["keyword/13",[]],["title/14-1",[205,25.478,473,31.666]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["keyword/14-1",[]],["title/14-2",[279,34.781,849,32.688,1256,34.025]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["keyword/14-2",[]],["title/14-3",[221,29.733,694,34.511]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["keyword/14-3",[]],["title/14-4",[220,24.123,415,39.563]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["keyword/14-4",[]],["title/14",[691,32.401,698,38.13]],["name/14",[690,0.947,691,0.768]],["text/14",[4,2.834,6,1.188,9,1.204,19,0.686,23,3.825,24,0.503,29,1.157,32,1.719,35,1.758,46,1.422,50,0.537,51,0.624,70,0.988,74,0.639,78,0.747,81,1.564,92,0.808,99,1.756,101,0.706,109,0.882,111,0.592,120,1.724,121,0.471,124,0.667,125,1.411,126,0.944,132,0.942,133,1.632,138,0.728,139,1.043,140,1.138,141,0.754,147,1.395,149,0.858,153,0.646,155,0.628,157,1.814,160,0.761,164,1.451,165,1.395,171,0.925,188,0.589,194,0.539,197,1.962,198,1.584,205,2.442,211,2.554,214,0.717,215,0.896,216,0.701,220,1.486,221,3.741,223,1.841,229,1.932,232,0.747,243,0.791,244,1.932,249,4.825,250,3.704,251,0.465,255,0.628,256,1.249,259,2.79,261,2.625,275,0.643,279,0.817,285,0.87,286,0.614,288,4.296,289,1.832,300,1.024,301,1.392,304,0.808,306,0.691,307,0.817,310,0.515,311,0.655,312,0.926,323,0.817,326,0.701,334,0.621,336,0.847,347,2.464,351,3.149,371,0.783,374,0.659,377,0.483,385,0.96,393,1.422,395,1.107,396,1.056,399,0.728,404,0.646,410,2.347,411,1.222,412,0.544,413,2.587,416,0.558,422,1.45,427,0.717,429,0.882,438,1.119,439,1.576,445,0.601,446,5.054,447,0.847,449,0.672,450,1.113,454,0.933,463,0.646,468,0.735,470,1.18,472,0.896,484,0.933,489,1.314,491,0.577,492,2.463,496,0.589,500,0.87,501,0.553,506,0.799,519,0.499,520,1.168,521,1.507,524,1.579,527,0.655,532,1.771,552,1.13,557,0.646,563,2.311,568,1.151,570,1.033,576,0.723,581,1.516,582,0.747,585,1.34,588,1.436,596,0.847,601,0.827,605,0.91,608,1.13,609,1.09,631,0.791,637,0.728,639,2.87,647,2.171,649,0.455,660,0.741,664,0.741,666,1.193,671,1.645,676,0.65,679,0.747,682,0.761,683,0.91,687,0.711,690,3.231,691,2.877,694,4.687,696,0.747,698,4.308,701,3.369,702,0.509,703,0.672,709,1.138,714,0.706,723,0.711,724,3.111,725,1.651,741,2.071,748,0.761,749,1.249,751,1.019,752,0.87,753,0.942,754,0.96,755,2.515,757,0.942,758,1.151,759,1.741,760,1.639,761,1.669,763,3.338,764,1.761,765,2.605,766,0.942,774,0.74
11,780,0.735,781,1.079,782,2.717,783,0.701,785,0.754,786,0.735,788,0.808,790,0.761,797,0.791,822,0.621,827,0.799,834,1.347,837,1.687,838,0.858,848,1.374,849,0.768,878,0.817,903,0.775,905,0.925,909,0.896,912,1.618,922,0.711,927,1.465,928,2.311,930,0.775,931,0.624,946,1.028,979,1.193,982,1.257,992,0.701,1015,1.399,1018,1.642,1032,0.837,1077,1.491,1080,0.775,1084,0.741,1089,1.576,1091,0.728,1098,0.741,1111,1.028,1113,3.057,1116,1.068,1122,1.567,1124,2.894,1126,0.586,1127,1.806,1137,1.028,1147,0.628,1181,0.847,1188,1.003,1204,0.761,1207,1.347,1211,1.436,1215,0.686,1226,0.741,1237,0.858,1240,2.932,1242,2.098,1247,0.663,1256,3.622,1260,1.193,1273,1.897,1306,0.91,1310,3.548,1313,0.754,1316,0.791,1317,2.274,1318,1.516,1325,0.614,1339,0.896,1343,1.481,1357,0.706,1369,0.942,1377,1.45,1394,0.775,1409,1.881,1442,0.808,1460,0.87,1463,1.257,1467,0.799,1468,0.799,1469,0.799,1470,0.799,1471,1.436,1472,0.799,1473,0.747,1474,0.799,1475,0.799,1476,0.799,1477,0.783,1478,1.436,1479,0.783,1488,0.783,1489,0.791,1490,0.747,1538,1.498,1559,0.691,1562,0.837,1586,0.723,1589,1.358,1610,1.13,1617,2.437,1619,1.466,1690,0.96,1709,1.003,1711,0.808,1712,0.96,1715,1.727,1718,1.642,1768,0.87,1779,0.882,1780,1.553,1781,1.574,1782,1.003,1787,2.272,1819,1.003,1879,1.028,1892,0.858,1932,1.056,1960,0.87,1996,0.817,2036,1.18,2037,2.071,2038,2.163,2039,2.163,2040,1.18,2041,1.056,2042,1.089,2043,1.18,2044,3.709,2045,1.18,2046,1.18,2047,2.474,2048,4.327,2049,1.056,2050,1.18,2051,1.18,2052,1.761,2053,1.18,2054,1.18,2055,3.769,2056,1.349,2057,0.925,2058,1.18,2059,1.422,2060,1.028,2061,1.13,2062,1.13,2063,1.18,2064,1.349,2065,1.18,2066,1.18,2067,1.18,2068,1.18,2069,1.089,2070,1.349,2071,1.18,2072,0.896,2073,1.18]],["component/14",[6,0.35]],["keyword/14",[]],["title/15-1",[809,37.801,2074,53.891]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["keyword/15-1",[]],["title/15-2",[410,29.025,701,25.382]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["keyword/15-2",[]],["title/15-3",[351,17.916,410,29.025]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["keyword/15-3",[]],["title/15-4",[6,13.384,410,29.025]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["keyword/15-4",[]],["title/15-5",[256,34.748,410,29.025]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["keyword/15-5",[]],["title/15-6",[4,32.802]],["name/15-6",[]],["text/15-6",[]],["component/15-6",[]],["keyword/15-6",[]],["title/15-7",[427,36.582,520,23.467]],["name/15-7",[]],["text/15-7",[]],["component/15-7",[]],["keyword/15-7",[]],["title/15",[6,11.164,809,31.533,2075,57.426]],["name/15",[6,0.222,609,0.503,809,0.627]],["text/15",[4,0.713,6,1.545,9,1.574,14,1.188,20,1.698,23,3.49,28,0.949,30,1.008,35,1.833,38,1.38,51,0.864,62,1.204,75,1.281,78,1.034,81,0.689,88,1.204,90,2.325,101,0.977,111,2.378,120,0.759,121,0.652,125,0.769,126,2.845,127,1.008,133,0.719,138,1.008,140,0.859,144,4.401,146,0.845,157,1.915,165,1.053,172,1.063,175,1.073,188,1.447,194,2.167,201,1.24,205,2.3,210,0.819,211,2.257,220,1.569,232,1.034,256,3.761,261,0.743,286,0.85,288,1.493,301,1.82,309,1.025,310,2.071,312,1.242,313,1.26,314,0.906,328,3.761,334,0.859,351,2.744,367,1.26,372,3.916,383,0.795,395,0.836,408,0.879,410,3.142,411,2.622,412,1.804,413,2.539,420,2.796,422,1.095,423,1.329,429,2.835,430,0.985,437,1.686,438,0.845,439,0.694,440,0.84,445,0.832,446,3.593,447,1.173,450,0.84,451,1.926,454,1.252,462,1.044,466,1.017,468,1.017,471,1.343,479,1.663,484,0.705,490,2.548,491,2.943,492,3.531,499,1.455,501,1.361,507,1.044,509,0.949,511,1.158,512,0.859,521,0.664,523,0.71,524,2.164,535,1.462,542,1.073,557,0.895,565,0.815,570,1.87,573,0.74,597,1.095,601,1.144,609,3.502,639,1.711,642,2.205,647,0.956,649,1.831,651,1.508,671,1.287,688,1.388,692,0.827,693,1.025,694,0.936,697,1.131,698,3.004,701,2.747,703,0.93,713,1.119,735,1.422,749,3.136,751,2.235,752,1.204,753,1.304,754,1.329,755,3.497,756,5.577,757,1.304,758,0.869,759,0.949,760,0.722,761,1.26,763,2.238,764,1.329,765,2.095,766,1.304,775,1.807,780,2.438,786,1.017,787,1.119,791,0.85,793,1.726,797,1.095,804,2.362,809,6.895,812,1.329,818,0.943,833,2.527,837,0.637,843,0.93,848,1.331,945,1.26,979,2.615,982,1.686,1043,1.304,1053,2.276,1075,1.792,1077,2.185,1085,1.131,1121,1.329,1122,0.854,1124,2.12,1127,1.75,1155,1.518,1156,2.883,1167,1.508,1170,1.008,1237,2.848,1253,0.977,1282,1.158,1293,1.422,1300,1.084,1315,1.063,1316,1.095,1337,1.966,1358,1.987,1359,1.357,1394,1.073,1438,1.633,1439,1.204,1466,1.6,1559,0.956,1567,0.918,1579,1.422,1602,1.422,1604,1.222,1619,1.107,1621,1.641,1657,1.158,1680,1.26,1713,1.158,1721,3.187,1735,1.508,1736,1.188,1778,2.14,1780,1.173,1782,1.388,1828,1.462,1862,1.726,1893,3.941,1938,1.131,1960,2.14,1971,1.357,2004,1.633,2059,1.073,2074,7.362,2076,3.318,2077,1.868,2078,1.726,2079,1.868,2080,1.868,2081,1.868,2082,1.868,2083,1.726,2084,1.726,2085,1.422,2086,1.868,2087,1.868,2088,1.204,2089,1.726,2090,4.138,2091,3.749,2092,1.726,2093,3.749,2094,2.778,2095,1.633,2096,1.726,2097,1.726,2098,2.778,2099,1.868,2100,3.318,2101,7.947,2102,1.726,2103,1.868,2104,3.318,2105,1.868,2106,1.868,2107,1.868,2108,1.462,2109,1.095,2110,1.868,2111,1.222,2112,1.304,2113,1.726,2114,4.138,2115,1.726,2116,
11.868,2117,1.726,2118,3.067,2119,1.726,2120,1.564,2121,3.067,2122,1.726,2123,1.564,2124,1.726,2125,3.318,2126,3.749,2127,1.868,2128,1.726,2129,1.868,2130,1.868,2131,1.726,2132,1.868]],["component/15",[6,0.35]],["keyword/15",[]],["title/16-1",[1190,44.3]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["keyword/16-1",[]],["title/16-2",[188,30.031,1191,38.822]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["keyword/16-2",[]],["title/16-3",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["keyword/16-3",[]],["title/16-4",[139,36.226]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["keyword/16-4",[]],["title/16-5",[523,26.178,1193,34.99]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["keyword/16-5",[]],["title/16-6",[7,32.401,144,32.212]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["keyword/16-6",[]],["title/16-7",[256,28.986,411,16.546,809,31.533]],["name/16-7",[]],["text/16-7",[]],["component/16-7",[]],["keyword/16-7",[]],["title/16-8",[6,13.384,809,37.801]],["name/16-8",[]],["text/16-8",[]],["component/16-8",[]],["keyword/16-8",[]],["title/16-9",[809,37.801,1293,52.432]],["name/16-9",[]],["text/16-9",[]],["component/16-9",[]],["keyword/16-9",[]],["title/16-10",[642,27.985,2133,46.44]],["name/16-10",[]],["text/16-10",[]],["component/16-10",[]],["keyword/16-10",[]],["title/16-11",[194,27.503,351,17.916]],["name/16-11",[]],["text/16-11",[]],["component/16-11",[]],["keyword/16-11",[]],["title/16-12",[809,37.801,2074,53.891]],["name/16-12",[]],["text/16-12",[]],["component/16-12",[]],["keyword/16-12",[]],["title/16-13",[27,30.98,410,29.025]],["name/16-13",[]],["text/16-13",[]],["component/16-13",[]],["keyword/16-13",[]],["title/16-14",[223,29.881,429,24.555]],["name/16-14",[]],["text/16-14",[]],["component/16-14",[]],["keyword/16-14",[]],["title/16-15",[221,24.803,691,27.028,740,36.532]],["name/16-15",[]],["text/16-15",[]],["component/16-15",[]],["keyword/16-15",[]],["title/16-16",[121,30.002]],["name/16-16",[]],["text/16-16",[]],["component/16-16",[]],["keyword/16-16",[]],["title/16-17",[211,20.86,256,28.986,507,32.091]],["name/16-17",[]],["text/16-17",[]],["component/16-17",[]],["keyword/16-17",[]],["title/16-18",[32,21.264,223,29.881]],["name/16-18",[]],["text/16-18",[]],["component/16-18",[]],["keyword/16-18",[]],["title/16-19",[121,30.002]],["name/16-19",[]],["text/16-19",[]],["component/16-19",[]],["keyword/16-19",[]],["title/16-20",[124,34.052,500,44.394]],["name/16-20",[]],["text/16-20",[]],["component/16-20",[]],["keyword/16-20",[]],["title/16-21",[1296,35.239,1566,40.788]],["name/16-21",[]],["text/16-21",[]],["component/16-21",[]],["keyword/16-21",[]],["title/16-22",[427,36.582,520,23.467]],["name/16-22",[]],["text/16-22",[]],["component/16-22",[]],["keyword/16-22",[]],["title/16",[6,11.164,35,15.298,809,31.533]],["name/16",[6,0.317,809,0.896]],["text/16",[0,0.289,4,1.326,6,1.713,7,0.835,9,1.002,19,0.248,20,1.622,23,3.873,24,0.661,27,2.152,28,0.479,29,0.441,30,0.263,32,1.739,34,0.22,35,1.891,38,0.203,44,0.347,45,0.329,46,0.542,68,0.289,70,0.548,74,0.447,81,0.18,82,0.452,83,0.509,89,0.559,90,0.253,92,0.292,98,0.751,99,2.324,101,0.494,113,1.118,119,0.895,120,1.64,121,3.286,122,0.631,124,0.678,125,0.731,126,1.735,133,0.829,138,0.263,139,1.059,140,1.458,141,0.527,144,2.01,146,0.803,147,0.532,153,0.233,154,0.645,155,0.825,156,0.617,157,1.355,162,0.565,163,1.706,164,0.581,165,2.696,171,0.647,172,0.537,173,0.212,174,0.249,175,0.28,177,0.248,179,0.429,180,0.592,181,1.107,184,0.228,185,0.424,188,1.515,190,0.486,194,1.716,196,0.323,197,1.318,198,0.821,199,0.385,200,0.249,201,0.626,202,0.295,205,3.022,210,1.249,211,2.364,214,0.729,216,2.096,218,0.27,220,1.11,221,1.855,223,2.173,226,0.292,228,0.243,230,0.265,232,0.522,239,1.399,249,0.429,250,0.449,251,1.565,255,0.227,256,5.459,259,1.214,261,2.16,268,0.966,269,0.502,275,1.357,276,0.283,281,0.31,282,0.354,286,1.142,288,2.045,289,0.407,294,0.788,300,2.072,301,1.021,306,0.483,309,0.518,310,1.088,312,1.3,314,1.045,317,0.685,325,0.585,326,0.253,328,0.476,334,0.434,336,1.114,338,0.261,340,0.302,347,0.998,348,0.647,351,1.848,366,0.208,372,2.445,374,0.238,375,0.99,377,0.174,383,0.916,388,0.497,392,1.358,395,0.794,397,0.911,401,0.295,404,0.233,406,0.283,407,0.79,408,1.013,410,1.811,411,2.539,412,0.196,413,1.859,415,0.28,416,0.202,417,0.219,420,1.426,422,1.04,424,0.895,429,1.786,430,0.497,437,0.248,439,0.509,440,0.424,442,0.585,445,0.42,446,3.286,447,0.592,449,0.243,450,0.219,453,0.617,454,0.947,459,0.263,462,0.527,468,0.265,470,0.426,473,0.816,477,0.334,484,0.517,487,0.34,489,0.501,491,2.045,492,3.481,494,0.286,496,0.411,497,0.253,499,1.101,500,1.388,501,
10.387,503,0.778,505,1.107,506,1.488,507,0.527,509,0.697,512,0.631,519,0.656,520,0.856,521,0.335,522,0.255,523,0.521,524,1.403,532,0.741,538,0.298,542,0.542,548,0.547,556,0.261,557,0.233,563,0.636,564,1.319,568,0.439,570,1.049,573,0.543,574,0.585,576,0.261,580,0.381,581,0.298,582,0.27,587,0.42,592,0.608,594,0.286,599,0.553,602,0.393,609,2.937,612,1.637,614,0.501,619,0.595,631,0.553,632,0.212,637,0.263,639,1.11,641,0.272,642,0.557,647,2.326,649,0.727,660,1.74,664,0.267,670,0.441,671,0.532,672,0.267,679,0.27,682,1,683,1.197,686,0.396,687,0.935,690,0.283,691,1.634,693,0.267,694,2.153,696,0.27,697,0.831,698,2.517,701,1.28,702,1.075,703,0.243,704,0.255,709,0.224,714,0.494,723,0.257,724,0.272,725,0.455,726,0.514,733,0.214,740,0.872,741,0.67,744,0.34,745,0.298,748,0.275,749,2.168,751,2.152,752,0.608,753,0.659,754,0.671,755,2.958,756,5.124,758,1.474,759,1.611,760,2.099,761,0.636,763,1.694,764,0.671,765,1.888,766,0.659,767,0.393,768,0.659,769,0.647,775,0.966,777,0.701,779,0.381,781,0.212,782,0.753,783,0.253,785,0.272,788,0.292,789,2.048,790,1,791,0.624,794,0.246,797,0.286,799,0.34,800,0.578,809,6.313,810,0.447,812,0.976,816,0.255,818,0.476,822,0.224,829,0.394,834,0.514,837,0.856,843,0.47,845,0.277,848,0.864,849,0.277,874,0.34,903,0.28,908,0.354,911,0.362,927,0.403,931,0.634,946,0.371,969,0.911,979,1.945,981,0.527,982,1.912,996,0.277,1011,0.257,1015,0.724,1038,0.347,1040,0.408,1053,0.334,1055,0.565,1056,0.371,1075,0.263,1077,1.114,1079,0.83,1080,0.28,1083,0.34,1084,0.753,1086,0.187,1088,0.476,1091,0.263,1094,0.476,1100,0.532,1101,0.319,1110,0.665,1112,0.553,1116,1.369,1120,0.323,1122,0.627,1126,0.211,1127,3.165,1131,0.617,1134,0.246,1147,0.825,1150,0.347,1151,0.261,1155,0.627,1156,2.144,1157,0.222,1160,0.319,1165,0.306,1171,0.34,1173,0.34,1178,0.347,1179,0.334,1181,0.306,1183,0.265,1185,0.501,1189,0.283,1192,0.235,1193,0.248,1204,1,1207,0.514,1209,0.522,1211,1.654,1214,0.976,1216,0.548,1217,0.286,1218,0.286,1219,0.275,1225,1.114,1230,0.393,1234,0.84,1241,0.275,1242,0.678,1246,0.289,1247,0.464,1253,0.494,1256,0.289,1257,0.22,1272,0.295,1273,1.391,1293,2.645,1298,0.272,1300,1.457,1303,0.275,1306,0.329,1307,0.329,1309,0.479,1310,0.283,1325,0.624,1338,0.362,1351,0.319,1356,0.314,1357,0.494,1358,0.565,1377,2.519,1378,0.393,1394,1.237,1399,0.825,1409,1.379,1422,0.762,1423,1.564,1424,0.941,1425,0.45,1433,0.592,1436,0.647,1437,0.302,1463,0.248,1467,0.289,1468,0.289,1469,0.289,1470,0.289,1471,0.547,1472,0.289,1473,0.27,1474,0.289,1475,0.289,1476,0.289,1477,0.283,1478,0.547,1479,0.283,1485,1.557,1489,0.286,1490,0.27,1497,1.74,1499,2.104,1500,0.464,1504,2.559,1505,2.559,1527,1.237,1538,2.103,1539,0.329,1540,0.347,1551,0.426,1559,0.702,1562,1.1,1567,0.464,1571,0.393,1583,0.306,1587,0.895,1597,0.295,1598,0.295,1604,0.319,1611,0.738,1612,0.354,1615,0.329,1617,2.878,1619,0.289,1621,1.409,1626,0.295,1627,0.298,1657,1.1,1682,1.289,1690,0.347,1709,0.701,1711,0.565,1712,0.671,1713,0.585,1715,0.659,1721,1.263,1724,0.323,1731,0.347,1735,0.762,1736,0.6,1749,0.347,1767,0.45,1768,0.314,1770,0.408,1771,0.371,1778,1.619,1779,0.617,1780,1.352,1781,1.128,1782,0.701,1787,0.505,1817,0.738,1848,0.334,1868,0.626,1883,0.393,1893,2.523,1896,0.319,1908,1.577,1915,0.79,1927,0.371,1928,0.28,1938,0.295,1960,0.608,1971,0.685,1977,0.289,1983,0.34,1995,0.371,1996,0.295,2003,0.34,2004,0.426,2022,0.79,2027,0.408,2052,0.347,2059,0.542,2060,0.718,2061,0.79,2062,0.79,2072,0.323,2074,5.095,2078,0.45,2083,0.45,2084,0.45,2088,0.314,2089,1.267,2090,3.476,2091,3.378,2092,0.872,2093,2.385,2094,1.803,2095,1.199,2096,1.64,2097,0.872,2098,0.408,2102,0.872,2108,0.381,2111,0.319,2112,0.34,2113,1.64,2114,2.929,2115,4.628,2117,1.267,2118,2.929,2119,0.872,2121,5.02,2122,0.872,2123,0.408,2124,0.45,2126,0.79,2128,0.45,2133,0.925,2134,0.426,2135,0.487,2136,0.354,2137,0.943,2138,0.487,2139,0.487,2140,0.45,2141,0.659,2142,0.381,2143,0.381,2144,0.371,2145,0.487,2146,0.487,2147,0.381,2148,0.426,2149,0.825,2150,0.943,2151,0.943,2152,0.943,2153,0.943,2154,0.872,2155,0.872,2156,0.872,2157,0.872,2158,0.872,2159,0.79,2160,0.872,2161,0.943,2162,0.943,2163,0.943,2164,0.943,2165,0.825,2166,0.872,2167,0.872,2168,0.426,2169,0.487,2170,0.79,2171,0.943,2172,1.371,2173,0.487,2174,0.426,2175,0.487,2176,0.487,2177,0.487,2178,0.426,2179,0.825,2180,0.943,2181,0.426,2182,0.626,2183,0.941,2184,0.34,2185,
10.362,2186,0.487,2187,1.371,2188,0.943,2189,0.943,2190,0.487,2191,0.943,2192,1.774,2193,1.551,2194,1.551,2195,0.487,2196,0.34,2197,0.487,2198,0.487,2199,0.487,2200,1.774,2201,2.153,2202,1.371,2203,0.943,2204,0.298,2205,0.487,2206,2.849,2207,0.487,2208,0.393,2209,0.426,2210,0.487,2211,0.487,2212,0.487,2213,0.381,2214,0.718,2215,0.426,2216,0.943,2217,0.825,2218,1.551,2219,1.267,2220,2.633,2221,0.943,2222,0.943,2223,0.872,2224,0.408,2225,0.408,2226,0.825,2227,2.511,2228,1.551,2229,0.825,2230,1.371,2231,1.371,2232,0.381,2233,0.408,2234,0.487,2235,0.487,2236,0.487,2237,0.487,2238,0.487,2239,0.381,2240,0.487,2241,0.487,2242,0.487,2243,0.323,2244,0.381,2245,0.319,2246,0.381,2247,0.487,2248,0.487,2249,0.487,2250,0.487,2251,0.487,2252,0.426]],["component/16",[6,0.35]],["keyword/16",[]],["title/17-1",[188,30.031,1191,38.822]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["keyword/17-1",[]],["title/17-2",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["keyword/17-2",[]],["title/17-3",[139,36.226]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["keyword/17-3",[]],["title/17-4",[523,26.178,1193,34.99]],["name/17-4",[]],["text/17-4",[]],["component/17-4",[]],["keyword/17-4",[]],["title/17-5",[7,32.401,144,32.212]],["name/17-5",[]],["text/17-5",[]],["component/17-5",[]],["keyword/17-5",[]],["title/17-6",[286,31.317,429,24.555]],["name/17-6",[]],["text/17-6",[]],["component/17-6",[]],["keyword/17-6",[]],["title/17-7",[223,29.881,429,24.555]],["name/17-7",[]],["text/17-7",[]],["component/17-7",[]],["keyword/17-7",[]],["title/17",[6,11.164,35,15.298,1988,37.564]],["name/17",[6,0.317,1988,1.068]],["text/17",[6,1.126,7,1.937,22,1.071,23,3.344,24,2.16,27,1.361,28,0.855,29,0.788,30,2.223,32,2.319,34,0.762,35,2.22,50,2.304,69,0.774,70,0.672,74,1.432,81,1.115,99,0.954,101,2.154,107,1.359,113,0.874,119,0.7,120,0.684,121,0.588,126,1.572,133,1.584,139,1.736,141,0.941,155,0.783,157,1.293,162,1.811,163,3.009,165,1.705,171,1.155,177,0.855,183,1.044,184,0.788,187,2.553,188,3.635,190,2.591,193,1.044,197,0.779,198,0.779,205,2.941,210,0.738,211,1.825,216,1.57,220,0.59,223,2.181,230,0.916,232,1.675,239,2.826,241,0.932,244,0.949,249,3.416,250,2.393,251,1.041,256,0.85,261,0.67,269,2.908,282,1.223,286,0.766,288,0.757,290,1.198,300,0.697,301,0.684,304,1.008,310,1.154,318,1.721,324,0.783,325,1.044,327,0.894,328,0.85,346,1.155,347,2.631,351,1.954,355,0.822,356,3.398,357,2.916,366,1.293,375,0.774,377,1.082,388,0.887,391,1.409,392,2.265,399,0.909,407,3.123,410,0.71,411,1.186,412,1.218,413,0.538,417,0.757,422,0.987,429,2.066,437,0.855,446,4.018,447,1.057,454,0.635,473,0.774,477,1.155,492,2.598,509,0.855,519,1.86,520,1.713,521,1.786,524,0.781,531,1.791,542,0.967,547,1.721,548,0.977,568,0.783,573,0.667,575,0.924,584,1.744,585,1.61,596,1.057,609,1.332,612,1.738,631,1.773,642,1.229,647,0.862,649,1.696,670,1.415,671,1.597,686,0.706,691,0.792,701,1.115,713,1.008,714,1.582,718,1.198,724,0.941,725,4.018,733,0.738,736,0.844,742,0.762,745,1.031,749,0.85,750,1.251,751,1.246,752,1.085,755,2.554,756,2.522,758,1.407,759,0.855,760,0.65,761,1.135,762,1.118,763,2.04,765,0.788,766,1.175,768,1.175,769,1.155,775,1.646,781,1.319,790,0.949,804,2.152,822,0.774,835,2.111,837,0.574,845,0.958,848,0.675,852,0.833,901,1.282,909,1.118,927,1.761,931,1.399,979,1.458,982,1.537,996,0.958,1014,1.318,1015,1.681,1043,1.175,1055,1.811,1077,3.351,1079,1.926,1084,1.66,1086,1.578,1100,1.705,1110,1.467,1116,2.501,1122,2.298,1147,0.783,1155,0.77,1156,1.607,1192,0.812,1201,1.791,1211,0.977,1216,1.645,1217,0.987,1218,0.987,1219,0.949,1340,1.031,1343,1.008,1349,1.251,1366,1.875,1377,1.773,1390,1.101,1409,0.924,1424,1.155,1436,1.155,1463,2.092,1488,0.977,1497,4.123,1500,3.905,1501,2.111,1502,1.923,1517,0.958,1527,4.566,1538,1.019,1589,0.924,1597,1.019,1598,1.019,1621,1.496,1650,1.607,1658,0.941,1664,1.791,1665,3.127,1711,1.008,1712,1.198,1722,1.019,1724,2.008,1736,1.923,1754,1.198,1787,0.902,1927,1.282,1928,0.967,1933,1.135,1977,0.997,1988,7.079,2017,1.223,2059,0.967,2060,1.282,2165,1.472,2170,1.409,2223,1.556,2253,1.135,2254,1.409,2255,4.116,2256,1.683,2257,7.093,2258,1.472,2259,3.805,2260,5.212,2261,1.472,2262,1.683,2263,3.805,2264,2.644,2265,1.683,2266,1.556,2267,1.683,2268,1.175,2269,1.472,2270,7.59,2271,1.683,2272,3.024,2273,4.116,2274,1.472,2275,1.683,2276,1.071,2277,1.683,2278,1.409,2279,1.556,2280,1.683,2281,1.683,2282,1.683,2283,1.683,2284,1.683,2285,2.644,2286,2.247,2287,3.059,2288,2.111,2289,1.556,2290,1.683,2291,1.251,2292,1.683,2293,2.442,2294,1.101,2295,2.644,2296,1.683,2297,1.556,2298,1.683,2299,1.556,2300,1.683,2301,2.111,2302,1.556,2303,1.556,2304,1.556,2305,1.556,2306,1.683,2307,1.683,2308,1.556,2309,1.282,2310,3.024,2311,1.683,2312,2.303,2313,1.683,2314,1.683,2315,1.683,2316,1.683,2317,1.683,2318,1.683,2319,1.683,2320,1.683,2321,1.683,2322,1.683,2323,1.359,2324,1.683,2325,2.442,2326,1.683]],["component/17",[6,0.35]],["keyword/17",[]],["title/18-1",[10,48.908]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["keyword/18-1",[]],["title/18-2",[1190,44.3]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["keyword/18-2",[]],["title/18-3",[188,30.031,1191,38.822]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["keyword/18-3",[]],["title/18-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["keyword/18-4",[]],["title/18-5",[269,18.026,742,22.287,743,22.786,2327,35.063]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["keyword/18-5",[]],["title/18-6",[139,36.226]],["name/18-6",[]],["text/18-6",[]],["component/18-6",[]],["keyword/18-6",[]],["title/18-7",[8
11,25.382,220,24.123]],["name/18-7",[]],["text/18-7",[]],["component/18-7",[]],["keyword/18-7",[]],["title/18-8",[205,25.478,286,31.317]],["name/18-8",[]],["text/18-8",[]],["component/18-8",[]],["keyword/18-8",[]],["title/18-9",[269,15.781,351,11.223,450,19.407,742,19.512,743,19.949]],["name/18-9",[]],["text/18-9",[]],["component/18-9",[]],["keyword/18-9",[]],["title/18-10",[185,30.98,214,36.582]],["name/18-10",[]],["text/18-10",[]],["component/18-10",[]],["keyword/18-10",[]],["title/18-11",[810,32.593,1840,52.432]],["name/18-11",[]],["text/18-11",[]],["component/18-11",[]],["keyword/18-11",[]],["title/18-12",[1296,35.239,1566,40.788]],["name/18-12",[]],["text/18-12",[]],["component/18-12",[]],["keyword/18-12",[]],["title/18-13",[220,24.123,415,39.563]],["name/18-13",[]],["text/18-13",[]],["component/18-13",[]],["keyword/18-13",[]],["title/18",[269,21.015,742,25.983,743,26.564]],["name/18",[1169,1.817]],["text/18",[0,0.829,1,0.929,4,0.534,6,1.217,7,1.204,23,3.987,27,2.569,28,0.711,29,0.655,30,0.756,32,1.091,34,2.832,35,1.521,38,0.582,70,0.559,81,0.943,99,2.39,102,0.879,119,0.582,121,0.893,125,1.798,126,1.349,133,1.36,140,1.177,154,1.663,155,0.651,157,0.599,163,0.838,165,0.789,173,1.116,174,0.716,179,1.986,184,0.655,186,0.744,188,2.49,197,0.647,198,0.647,202,0.848,204,0.769,205,3.052,211,2.274,216,1.835,220,1.238,223,0.607,227,0.89,229,0.789,230,0.762,234,0.617,239,0.564,241,0.775,243,1.5,246,0.762,249,1.986,250,2.079,261,1.018,268,0.762,269,3.125,275,0.667,276,0.812,286,1.986,288,0.63,291,0.977,292,0.727,300,0.579,301,1.436,310,0.977,311,0.679,312,1.634,324,0.651,326,0.727,327,1.877,328,1.291,334,0.644,338,0.75,343,0.804,350,0.722,351,1.756,376,5.022,377,1.265,388,0.738,395,0.627,407,1.139,410,1.079,411,1.258,413,0.817,414,0.821,417,1.151,422,2.559,429,0.912,438,0.633,440,0.63,446,4.837,447,1.606,450,0.63,461,1.948,468,0.762,473,0.644,484,0.528,489,0.744,492,2.522,496,0.611,509,0.711,512,0.644,519,0.518,520,0.872,521,0.909,523,0.532,524,2.047,542,0.804,547,0.797,548,1.485,556,0.75,570,1.069,580,1.096,581,1.567,585,1.707,594,0.821,604,0.496,609,1.923,612,1.47,614,0.744,647,1.809,649,1.473,651,2.066,659,2.165,670,1.197,671,0.543,681,0.769,684,0.848,686,0.587,689,0.879,691,1.204,692,0.62,693,0.769,698,0.775,701,0.516,702,1.647,723,3.01,736,1.282,739,2.701,742,2.832,743,5.639,744,0.977,749,1.291,751,1.798,752,1.65,753,1.786,754,1.821,755,4.192,757,1.786,758,1.19,759,1.3,760,1.687,761,1.726,763,2.944,764,1.821,765,3.157,766,1.786,768,1.786,769,1.755,775,0.762,790,1.443,802,0.706,810,3.753,816,2.66,818,1.783,829,3.876,837,0.477,845,0.797,848,1.026,884,0.789,927,0.599,975,0.89,979,2.105,982,0.711,996,0.797,1015,1.045,1031,0.659,1077,2.007,1084,1.94,1086,2.753,1090,1.835,1092,0.916,1094,0.706,1098,0.769,1100,0.789,1110,0.679,1117,3.877,1122,0.64,1126,3.118,1127,2.68,1132,1.964,1147,2.031,1155,1.17,1169,6.747,1170,1.381,1173,0.977,1183,0.762,1192,0.675,1204,0.789,1215,0.711,1216,1.022,1217,0.821,1218,0.821,1219,0.789,1223,0.762,1247,0.688,1253,1.339,1254,0.821,1260,0.675,1266,0.858,1273,0.775,1299,0.96,1300,0.812,1317,0.929,1334,1.066,1341,2.461,1352,0.858,1374,1.13,1377,2.559,1409,1.94,1485,3.152,1489,0.821,1501,1.786,1502,1.627,1522,1.699,1538,0.848,1540,0.996,1586,0.75,1597,0.848,1598,0.848,1617,2.03,1619,2.093,1621,0.692,1628,3.584,1637,0.929,1657,1.586,1709,1.901,1711,1.532,1712,1.821,1724,0.929,1779,1.673,1780,1.606,1781,2.777,1782,1.901,1787,1.892,1840,2.691,1899,1.017,1916,1.017,1928,2.03,1940,1.821,1941,0.944,1977,0.829,1983,0.977,2243,0.929,2286,1.04,2288,0.977,2291,1.901,2328,1.172,2329,0.89,2330,1.017,2331,1.096,2332,0.977,2333,1.294,2334,2.142,2335,1.4,2336,7.612,2337,4.992,2338,3.618,2339,2.003,2340,6.259,2341,2.142,2342,2.142,2343,1.294,2344,1.294,2345,1.224,2346,1.224,2347,1.224,2348,1.224,2349,4.348,2350,2.003,2351,2.003,2352,2.003,2353,2.066,2354,1.948,2355,2.142,2356,1.294,2357,1.4,2358,1.224,2359,1.224,2360,1.224,2361,2.766,2362,1.294,2363,1.4,2364,1.4,2365,1.4,2366,1.294,2367,1.172,2368,0.996,2369,1.096,2370,1.294,2371,1.294]],["component/18",[6,0.35]],["keyword/18",[]],["title/19-1",[121,20.053,524,14.831,2372,35.612]],["name/19-1",[]],["text/19-1",[]],["component/19-1",[]],["keyword/19-1",[]],["title/19-2",[121,20.053,524,14.831,1223,31.267]],["name/19-2",[]],["text/19-2",[]],["component/19-2",[]],["keyword/19-2",[]],["title/19-3",[99,18.12,121,20.053,251,19.777]],["name/19-3",[]],["text/19-3",[]],["component/19-3",[]],["keyword/19-3",[]],["title/19-4",[99,21.722,1325,31.317]],["name/19-4",[]],["text/19-4",[]],["component/19-4",[]],["keyword/19-4",[]],["title/19-5",[781,37.482]],["name/19-5",[]],["text/19-5",[]],["component/19-5",[]],["keyword/19-5",[]],["title/19-6",[760,33.2]],["name/19-6",[]],["text/19-6",[]],["component/19-6",[]],["keyword/19-6",[]],["title/19-7",[]],["name/19-7",[]],["text/19-7",[]],["component/19-7",[]],["keyword/19-7",[]],["title/19-8",[99,21.722,411,19.835]],["name/19-8",[]],["text/19-8",[]],["component/19-8",[]],["keyword/19-8",[]],["title/19-9",[32,21.264,121,24.038]],["name/19-9",[]],["text/19-9",[]],["component/19-9",[]],["keyword/19-9",[]],["title/19-10",[121,24.038,1057,32.593]],["name/19-10",[]],["text/19-10",[]],["component/19-10",[]],["keyword/19-10",[]],["title/19-11",[121,20.053,573,22.748,1132,25.843]],["name/19-11",[]],["text/19-11",[]],["component/19-11",[]],["keyword/19-11",[]],["title/19-12",[121,20.053,350,29.608,1169,36.532]],["name/19-12",[]],["text/19-12",[]],["component/19-12",[]],["keyword/19-12",[]],["title/19",[121,24.038,992,35.755]],["name/19",[121,0.57,992,0.848]],["text/19",[1,0.976,4,0.561,6,1.024,9,1.852,23,3.245,24,0.998,27,0.661,32,3.153,33,0.912,35,2.165,38,1.112,50,2.764,51,0.68,57,1.068,70,1.069,74,0.696,81,0.986,83,0.794,98,0.623,99,3.649,101,0.769,111,1.173,119,0.611,121,3.979,125,1.102,126,1.021,133,1.029,138,0.794,139,0.62,141,0.821,154,0.692,159,0.732,162,0.88,164,2.499,173,1.167,174,0.752,179,0.669,186,1.956,188,1.167,194,0.587,199,2.15,200,0.752,205,2.571,211,0.534,212,2.24,216,0.763,220,0.937,239,0.592,246,1.457,249,2.395,251,2.032,255,1.713,269,1.659,275,0.7,286,1.675,288,0.661,300,2.179,301,0.598,306,1.369,310,1.405,311,1.298,312,0.55,321,1.231,323,0.89,326,0.763,334,0.676,338,1.433,343,1.537,344,2.372,347,2.262,350,0.758,351,1.68,367,0.992,376,1.267,37
17,0.958,383,0.626,393,0.845,395,0.658,409,0.829,410,0.62,411,2.342,413,1.885,416,0.608,426,0.845,429,1.617,439,1.684,442,0.912,445,2.019,446,3.749,447,0.923,450,0.661,454,0.555,462,1.495,463,1.764,466,2.004,468,0.8,471,0.595,472,0.976,479,1.341,482,1.12,484,3.066,490,2.095,491,1.144,492,2.602,493,0.794,496,2.574,497,0.763,499,1.614,501,0.603,503,1.173,509,1.871,511,0.912,512,0.676,519,1.678,520,0.501,521,1.611,523,1.017,524,2.676,525,1.941,531,2.181,542,0.845,545,0.948,557,0.704,564,1.639,565,1.606,573,1.06,576,0.787,581,0.901,582,0.814,584,1.559,585,1.046,587,0.655,598,1.046,604,0.521,610,1.12,614,0.781,616,0.871,619,1.598,632,1.606,642,0.598,649,2.492,670,2.121,671,1.038,680,1.12,681,0.807,692,0.651,693,0.807,695,1.068,699,2.039,700,0.794,701,1.357,702,1.009,708,1.092,709,0.676,726,1.457,734,0.787,742,0.665,743,0.68,751,1.102,758,2.745,759,2.304,760,3.88,765,0.688,777,1.092,781,3.392,782,0.807,800,2.256,802,1.858,806,0.871,809,0.807,823,0.821,829,0.614,837,2.517,840,0.775,843,1.332,887,0.709,891,1.12,896,1.092,921,2.62,922,0.775,927,0.629,931,0.68,954,1.231,978,1.231,992,1.389,1014,1.151,1015,3.175,1018,0.976,1057,2.493,1075,1.988,1077,1.294,1086,3.115,1088,1.35,1089,1.693,1094,0.742,1100,0.829,1108,1.008,1115,0.684,1116,2.274,1117,1.369,1122,0.672,1126,0.638,1132,0.661,1144,0.862,1147,1.245,1155,2.409,1156,1.956,1185,0.781,1214,1.046,1215,1.36,1216,3.106,1223,0.8,1234,1.639,1241,0.829,1242,1.323,1247,0.722,1257,2.382,1258,2.395,1260,2.845,1296,1.369,1303,0.829,1307,0.992,1309,0.747,1315,0.837,1316,0.862,1325,2.684,1340,0.901,1342,2.181,1351,0.961,1352,1.639,1365,1.092,1380,0.935,1423,2.675,1466,1.29,1490,1.482,1500,1.315,1512,0.871,1541,1.008,1558,1.092,1576,1.602,1579,1.12,1583,0.923,1585,0.901,1586,0.787,1587,2.288,1626,0.89,1664,0.871,1665,1.445,1666,0.948,1669,1.835,1696,0.992,1736,0.935,1787,1.433,1848,1.008,1889,1.187,1898,0.976,1908,0.923,1938,0.89,1977,0.871,2007,1.187,2017,1.068,2072,0.976,2098,1.231,2141,1.026,2220,1.359,2288,1.026,2354,2.037,2368,1.046,2372,1.659,2373,1.231,2374,1.47,2375,1.359,2376,3.11,2377,1.47,2378,7.411,2379,4.122,2380,4.384,2381,3.549,2382,1.47,2383,1.47,2384,1.47,2385,2.094,2386,1.702,2387,1.068,2388,1.47,2389,1.944,2390,1.47,2391,1.285,2392,1.092,2393,1.47,2394,1.151,2395,1.231,2396,1.151,2397,1.092,2398,1.151,2399,1.151,2400,1.046,2401,1.046,2402,1.046,2403,1.151,2404,1.151,2405,1.285,2406,1.092,2407,1.231]],["component/19",[6,0.35]],["keyword/19",[]],["title/20-1",[2327,61.159]],["name/20-1",[]],["text/20-1",[]],["component/20-1",[]],["keyword/20-1",[]],["title/20-2",[239,23.141,400,33.671,1559,29.396]],["name/20-2",[]],["text/20-2",[]],["component/20-2",[]],["keyword/20-2",[]],["title/20-3",[144,40.204]],["name/20-3",[]],["text/20-3",[]],["component/20-3",[]],["keyword/20-3",[]],["title/20-4",[251,23.708,261,27.385]],["name/20-4",[]],["text/20-4",[]],["component/20-4",[]],["keyword/20-4",[]],["title/20-5",[399,37.174,2408,63.633]],["name/20-5",[]],["text/20-5",[]],["component/20-5",[]],["keyword/20-5",[]],["title/20-6",[211,20.86,239,23.141,400,33.671]],["name/20-6",[]],["text/20-6",[]],["component/20-6",[]],["keyword/20-6",[]],["title/20-7",[356,31.147,1509,48.074]],["name/20-7",[]],["text/20-7",[]],["component/20-7",[]],["keyword/20-7",[]],["title/20-8",[223,29.881,356,31.147]],["name/20-8",[]],["text/20-8",[]],["component/20-8",[]],["keyword/20-8",[]],["title/20-9",[1363,75.138]],["name/20-9",[]],["text/20-9",[]],["component/20-9",[]],["keyword/20-9",[]],["title/20",[399,37.174,400,40.363]],["name/20",[399,0.881,400,0.957]],["text/20",[0,0.51,4,1.333,6,1.432,7,1.089,9,1.571,23,4.229,24,1.093,27,0.387,29,0.761,32,1.236,33,0.533,35,1.898,38,0.358,40,0.403,46,2.007,69,0.396,70,0.924,74,0.407,81,0.853,90,0.845,99,0.271,101,0.45,111,0.377,119,0.676,120,1.192,121,0.3,125,3.035,126,0.328,127,0.465,133,0.331,139,0.975,140,0.396,141,0.481,143,2.746,144,3.447,
1147,0.485,149,0.547,154,1.089,155,0.4,157,0.696,160,0.485,162,1.385,163,2.092,164,0.364,165,0.917,166,1.937,167,0.935,168,4.118,169,1.865,170,1.396,171,0.59,173,2.136,175,3.25,178,0.944,180,0.54,185,0.732,187,0.533,188,1.523,193,0.533,194,0.344,197,0.398,199,0.664,205,1.654,208,0.612,210,0.377,211,2.496,214,0.457,216,2.321,220,1.854,221,0.372,223,2.737,229,0.485,233,0.555,234,0.379,239,4.192,244,0.485,249,2.033,250,1.102,251,0.797,259,1.969,261,1.778,268,0.468,269,0.846,272,0.639,275,1.102,277,0.527,281,0.547,286,1.334,293,0.527,294,0.494,295,0.521,300,0.673,301,1.192,306,0.44,307,0.985,309,0.472,310,1.119,311,0.417,312,1.498,314,0.789,318,0.49,319,0.547,324,0.757,326,0.845,328,1.167,330,0.639,337,1.009,338,1.239,346,3.879,347,1.027,350,2.304,351,0.224,355,1.705,356,2.853,357,0.944,371,0.499,374,0.42,375,0.748,377,0.828,378,1.362,382,0.795,383,1.487,388,0.454,392,2.788,398,0.673,399,4.612,400,5.834,401,0.521,403,3.639,405,0.555,406,0.499,407,0.724,408,2.103,410,0.363,411,1.411,412,0.347,413,1.116,416,0.957,417,0.732,420,1.319,426,0.494,427,0.864,429,2.353,437,0.437,438,0.736,439,0.859,441,1.503,445,0.383,446,0.784,447,0.54,454,0.325,456,0.533,465,3.232,466,0.885,468,0.468,469,0.795,484,0.614,485,0.673,486,0.673,489,0.864,490,0.49,491,0.368,492,2.279,499,0.377,502,2.66,503,0.377,508,0.563,509,0.827,512,3.388,519,0.318,520,1.804,521,1.042,524,0.597,542,0.494,544,0.59,548,0.499,556,0.461,573,0.644,583,0.504,585,0.337,589,0.431,590,1.184,609,1.292,614,1.229,622,1.136,647,0.44,649,0.549,660,1.27,671,1.137,679,0.476,681,0.472,692,0.72,693,0.472,694,0.815,696,0.476,699,0.476,701,0.317,703,1.152,704,0.45,717,0.954,723,0.454,725,1.115,736,2.652,741,0.42,742,0.736,744,0.601,748,0.485,749,1.167,751,0.67,752,0.555,755,1.775,756,0.996,757,0.601,758,0.4,759,0.827,760,0.332,761,0.58,762,2.319,763,1.097,768,0.601,769,0.59,780,1.259,781,0.709,782,0.472,783,0.447,785,0.481,788,0.974,790,0.917,794,0.821,796,0.481,807,0.695,810,2.116,816,0.851,829,0.359,834,0.885,837,0.293,840,0.454,843,0.428,878,0.985,884,0.485,887,0.415,903,0.494,922,0.454,924,0.49,927,0.368,937,0.695,963,4.96,964,0.655,968,0.555,979,0.784,1015,1.426,1032,0.533,1075,0.465,1077,1.407,1078,0.555,1080,1.329,1084,1.61,1086,0.33,1089,0.396,1094,1.48,1098,0.472,1106,2.14,1107,1.097,1110,0.417,1116,0.702,1117,0.44,1124,0.407,1127,0.454,1129,0.59,1146,1.646,1154,0.51,1155,0.394,1161,0.571,1168,0.612,1170,0.878,1183,0.885,1185,0.457,1204,0.917,1207,0.468,1209,0.476,1211,0.944,1215,0.437,1230,0.695,1231,0.612,1239,0.547,1240,0.51,1247,0.799,1253,0.851,1254,0.504,1258,1.334,1273,0.901,1300,0.499,1336,0.58,1340,0.527,1342,0.51,1357,0.851,1367,0.673,1370,2.023,1377,2.048,1390,0.563,1409,1.918,1433,0.54,1436,1.116,1437,1.818,1445,0.472,1466,0.415,1467,0.51,1468,0.51,1469,0.51,1470,0.51,1471,0.944,1472,0.51,1473,0.476,1474,0.51,1475,0.51,1476,0.51,1477,2.323,1478,0.944,1479,0.499,1485,1.009,1488,0.944,1489,0.504,1490,0.476,1493,0.795,1500,1.441,1508,0.655,1509,5.144,1514,0.625,1517,0.926,1527,0.494,1538,0.521,1539,1.097,1558,0.639,1559,0.832,1575,1.273,1581,0.58,1586,0.871,1591,1.097,1606,0.625,1615,0.58,1617,0.494,1637,0.571,1648,0.625,1650,1.558,1652,0.752,1664,0.964,1711,0.515,1712,0.612,1713,0.533,1718,0.571,1749,0.612,1750,0.655,1828,1.811,1926,0.72,1933,0.58,1938,1.401,1972,0.752,1983,0.601,2025,0.752,2026,0.612,2035,1.182,2059,0.494,2111,0.563,2140,0.795,2183,0.59,2291,0.639,2302,0.795,2303,7.397,2304,0.795,2305,0.795,2308,0.795,2337,2.564,2408,1.503,2409,1.937,2410,0.673,2411,0.86,2412,0.695,2413,0.752,2414,0.86,2415,0.86,2416,1.422,2417,0.86,2418,1.422,2419,1.422,2420,0.795,2421,0.86,2422,4.469,2423,0.86,2424,1.626,2425,0.86,2426,1.626,2427,0.86,2428,2.138,2429,0.86,2430,0.86,2431,0.86,2432,0.86,2433,0.86,2434,0.86,2435,1.626,2436,0.752,2437,0.752,2438,0.86,2439,1.422,2440,0.752,2441,0.752,2442,0.86,2443,0.752,2444,1.626,2445,0.752,2446,0.86,2447,1.313,2448,0.86,2449,0.86,2450,0.86,2451,0.86,2452,0.86,2453,0.86,2454,0.86,2455,0.86,2456,0.86,2457,0.86,2458,0.86,2459,0.86,2460,0.86,2461,0.86,2462,0.72,2463,8.37,2464,1.719,2465,4.469,2466,2.71,2467,2.932,2468,1.626,2469,0.86,2470,0.86,2471,1.626,2472,0.86,2473,0.86,2474,0.86,2475,0.752,2476,0.86,2477,3.492,2478,2.313,2479,1.626,2480,0.86,2481,0.86,2482,0.472,2483,0.86,2484,0.86,2485,0.86,2486,0.86,2487,0.795,2488,1.362,2489,0.72,2490,0.752,2491,2.138,2492,0.86,2493,0.86,2494,0.86,2495,0.86,2496,0.86,2497,0.86,2498,0.86,2499,4.43,2500,0.58,2501,
10.86,2502,0.86,2503,0.795,2504,1.626,2505,0.673,2506,1.626,2507,0.86,2508,0.86,2509,0.86,2510,0.86,2511,0.72,2512,0.86,2513,0.86,2514,0.86,2515,0.86,2516,0.86,2517,0.86,2518,1.626,2519,0.86,2520,0.86,2521,0.72,2522,0.86,2523,0.86,2524,0.86,2525,0.86,2526,0.86,2527,0.86,2528,1.626,2529,0.86,2530,0.86,2531,0.86,2532,0.86,2533,0.86,2534,5.291,2535,1.626,2536,2.313,2537,0.86,2538,0.86,2539,0.86,2540,0.86,2541,0.86,2542,0.86,2543,0.86,2544,0.86,2545,0.86,2546,0.86,2547,4.469,2548,0.86,2549,0.86,2550,0.86,2551,1.626,2552,0.86,2553,0.86,2554,1.626,2555,0.86,2556,0.695,2557,2.023,2558,0.86,2559,1.626,2560,0.752,2561,0.86,2562,0.86,2563,1.626,2564,0.86,2565,0.86,2566,0.86,2567,0.795,2568,0.86,2569,0.86,2570,0.86,2571,0.86,2572,0.86,2573,0.86,2574,0.86,2575,0.86,2576,0.86,2577,0.86,2578,0.86,2579,0.86,2580,1.626,2581,1.626,2582,1.626,2583,1.626,2584,0.86,2585,0.86,2586,0.86,2587,0.86,2588,0.86,2589,0.86,2590,0.86,2591,0.86,2592,0.86,2593,0.86,2594,0.86,2595,1.626,2596,0.86,2597,1.626,2598,0.86,2599,0.86,2600,0.86,2601,0.86,2602,0.86,2603,0.86,2604,0.86]],["component/20",[6,0.35]],["keyword/20",[]],["title/21-1",[10,48.908]],["name/21-1",[]],["text/21-1",[]],["component/21-1",[]],["keyword/21-1",[]],["title/21-2",[1190,44.3]],["name/21-2",[]],["text/21-2",[]],["component/21-2",[]],["keyword/21-2",[]],["title/21-3",[188,30.031,1191,38.822]],["name/21-3",[]],["text/21-3",[]],["component/21-3",[]],["keyword/21-3",[]],["title/21-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/21-4",[]],["text/21-4",[]],["component/21-4",[]],["keyword/21-4",[]],["title/21-5",[350,35.494,2327,49.002]],["name/21-5",[]],["text/21-5",[]],["component/21-5",[]],["keyword/21-5",[]],["title/21-6",[139,36.226]],["name/21-6",[]],["text/21-6",[]],["component/21-6",[]],["keyword/21-6",[]],["title/21-7",[81,25.382,220,24.123]],["name/21-7",[]],["text/21-7",[]],["component/21-7",[]],["keyword/21-7",[]],["title/21-8",[205,25.478,286,31.317]],["name/21-8",[]],["text/21-8",[]],["component/21-8",[]],["keyword/21-8",[]],["title/21-9",[350,29.608,351,14.945,450,25.843]],["name/21-9",[]],["text/21-9",[]],["component/21-9",[]],["keyword/21-9",[]],["title/21-10",[185,30.98,214,36.582]],["name/21-10",[]],["text/21-10",[]],["component/21-10",[]],["keyword/21-10",[]],["title/21-11",[810,32.593,1840,52.432]],["name/21-11",[]],["text/21-11",[]],["component/21-11",[]],["keyword/21-11",[]],["title/21-12",[1296,35.239,1566,40.788]],["name/21-12",[]],["text/21-12",[]],["component/21-12",[]],["keyword/21-12",[]],["title/21-13",[220,24.123,415,39.563]],["name/21-13",[]],["text/21-13",[]],["component/21-13",[]],["keyword/21-13",[]],["title/21",[350,44.3]],["name/21",[350,1.473]],["text/21",[0,0.957,1,1.072,6,0.773,7,0.76,9,1.024,16,1.2,23,4.546,27,2.824,29,0.755,30,0.872,32,1.939,34,2.546,35,0.776,40,0.755,70,1.164,77,3.203,78,0.894,81,0.595,119,1.211,120,1.617,121,0.564,125,1.2,126,1.112,127,0.872,133,0.621,154,0.76,155,0.751,157,0.691,163,0.967,165,0.91,167,2.286,173,1.736,174,0.826,184,0.755,186,0.858,188,2.738,194,0.645,197,0.747,205,2.877,211,2.485,216,1.513,220,1.021,223,1.264,230,0.879,234,0.711,243,0.947,249,2.855,250,2.32,261,0.642,269,2.844,286,2.215,288,0.727,289,0.697,300,0.668,301,1.184,310,0.616,312,1.09,318,0.919,327,3.335,328,0.815,338,0.865,347,1.021,350,6.097,351,2.215,376,0.764,377,0.578,388,0.851,395,0.723,410,1.228,411,0.839,412,1.603,413,0.516,416,0.668,417,0.727,422,2.855,429,0.576,437,0.821,446,5.08,447,1.829,461,2.218,462,2.721,473,1.34,476,2.832,484,0.609,490,0.919,491,0.691,492,2.529,494,0.947,497,0.839,506,0.957,512,0.743,520,0.993,521,1.035,523,0.614,524,2.108,548,1.69,557,0.774,570,0.674,573,0.64,581,0.989,585,1.139,589,1.46,599,0.947,609,1.753,612,0.928,642,0.656,647,0.826,667,1.149,670,2.937,686,0.677,689,1.014,690,0.937,691,1.371,693,0.886,697,0.978,698,0.894,699,0.894,702,1.099,703,0.804,733,2.135,739,3.335,742,0.73,743,2.603,749,1.47,751,2.006,752,1.878,753,2.034,754,2.073,755,4.148,757,3.401,758,1.355,759,1.48,760,1.125,761,1.965,763,3.285,764,2.073,765,3.982,766,2.034,768,2.034,769,1.998,781,0.704,787,0.967,789,0.879,790,1.642,796,1.627,810,4.744,815,2.116,816,0.845,827,0.957,837,0.55,845,0.919,848,1.169,887,0.778,927,0.691,979,1.918,996,0.919,1029,1.089,1077,1.024,1079,1.363,1084,1.599,1098,1.599,1100,0.91,1110,0.783,1117,3.755,1126,3.184,1127,2.967,1147,2.266,1155,0.738,1157,0.734,1169,1.027,1170,0.872,1192,0.778,1204,0.91,1207,0.879,1217,0.947,1218,0.947,1219,0.91,1248,6.248,1254,5.492,1257,0.73,1317,1.072,1325,0.734,1334,1.23,1341,4.603,1374,1.304,1377,2.855,1409,2.185,1485,1.001,1502,1.853,1538,0.978,1597,0.978,1598,0.978,1617,0.928,1619,2.357,1621,4.037,1628,2.498,1657,1.806,1669,1.107,1709,2.164,1711,1.744,1712,2.073,1722,1.764,1779,1.905,1780,1.829,1781,3.098,1782,2.164,1787,0.865,1840,3.03,1940,2.073,1941,1.089,1978,1.149,1983,1.127,2025,1.412,2026,1.149,2098,1.352,2133,2.684,2279,1.492,2328,1.352,2329,1.027,2330,2.116,2331,1.264,2332,1.127,2337,5.489,2338,5.221,2339,1.264,2343,1.492,2344,1.492,2356,1.492,2362,1.492,2366,1.492,2367,1.352,2368,1.149,2369,1.264,2370,1.492,2371,1.492,2466,4.502,2511,1.352,2605,1.173,2606,1.614,2607,1.352,2608,1.352,2609,1.614,2610,1.492,2611,4.078,2612,1.041,2613,3.979,2614,1.614,2615,6.276,2616,2.912,2617,2.438,2618,2.912,2619,4.87,2620,4.87,2621,2.912,2622,1.107,2623,1.492,2624,5.626,2625,1.614,2626,1.614,2627,1.614,2628,1.614,2629,1.614,2630,2.912,2631,2.912,2632,1.027,2633,1.614,2634,1.614,2635,1.614,2636,1.614,2637,1.614,2638,1.614,2639,1.614,2640,1.614,2641,1.412]],["component/21",[6,0.35]],["keyword/21",[]],["title/22-1",[1190,44.3]],["name/22-1",[]],["text/22-1",[]],["component/22-1",[]],["keyword/22-1",[]],["title/22-2",[524,17.779,605,46.44]],["name/22-2",[]],["text/22-2",[]],["component/22-2",[]],["keyword/22-2",[]],["title/22-3",[1916,50.022,2482,37.801]],["name/22-3",[]],["text/22-3",[]],["component/22-3",[]],["keyword/22-3",[]],["title/22-4",[794,34.748,1357,36.024]],["name/22-4",[]],["text/22-4",[]],["component/22-4",[]],["keyword/22-4",[]],["title/22-5",[525,36.299,712,33.193]],["name/22-5",[]],["text/22-5",[]],["component/22-5",[]],["keyword/22-5",[]],["title/22-6",[143,39.394,1155,26.268,1466,27.689]],["name/22-6",[]],["text/22-6",[]],["component/22-6",[]],["keyword/22-6",[]],["title/22-7",[712,33.193,741,33.614]],["name/22-7",[]],["text/22-7",[]],["component/22-7",[]],["keyword/22-7",[]],["title/22-8",[69,22.658,437,25.037,787,29.503,1627,30.182]],["name/22-8",[]],["text/22-8",[]],["component/22-8",[]],["keyword/22-8",[]],["title/22-9",[98,29.163,802,34.748]],["name/22-9",[]],["text/22-9",[]],["component/22-9",[]],["keyword/22-9",[]],["title/22-10",[412,27.741,501,28.235]],["name/22-10",[]],["text/22-10",[]],["component/22-10",[]],["keyword/22-10",[]],["title/22-11",[35,15.298,524,14.831,1099,33.33]],["name/22-11",[]],["text/22-11",[]],["component/22-11",[]],["keyword/22-11",[]],["title/22-12",[210,37.672]],["name/22-12",[]],["text/22-12",[]],["component/22-12",[]],["keyword/22-12",[]],["title/22",[524,22.19]],["name/22",[524,0.738]],["text/22",[1,0.811,2,0.907,4,1.201,6,1.553,9,1.106,13,0.688,20,0.625,23,2.064,24,0.455,27,3.937,29,1.472,32,2.702,34,2.078,35,1.869,36,0.852,38,1.308,40,1.056,41,0.6,46,0.702,48,0.887,50,0.486,51,0.565,69,0.561,70,2.074,73,0.757,75,0.837,82,0.585,89,0.723,90,0.634,93,0.869,98,0.956,99,1.956,113,0.634,119,0.508,120,1.592,121,0.426,122,0.561,124,0.604,125,2.554,126,1.754,133,2.202,138,0.659,139,1.326,146,0.552,149,1.435,153,0.585,154,1.062,155,1.822,157,0.522,159,3.67,160,0.688,164,2.808,168,1.235,170,1.074,172,0.695,175,0.702,177,0.62,178,0.708,179,0.555,185,1.015,186,0.649,188,0.532,194,0.488,197,0.565,199,1.284,204,0.67,205,1.921,210,0.535,211,1.669,216,0.634,218,0.676,220,0.428,221,0.527,223,0.53,228,0.608,234,0.994,261,1.251,275,1.498,283,0.852,286,1.782,288,0.549,289,1.692,300,0.505,301,0.496,303,0.798,306,0.625,309,0.67,310,1.495,312,0.845,314,1.095,323,2.372,324,1.05,334,1.802,337,1.399,338,0.654,340,0.757,343,1.296,344,1.646,347,1.373,350,0.629,351,1.613,363,0.486,366,1.675,372,2.23,374,1.536,375,0.561,377,1.644,383,0.52,385,0.869,392,0.882,408,1.48,410,1.937,411,2.881,412,2.3
106,413,2.72,415,1.296,416,2.369,424,0.616,428,1.382,429,0.435,430,0.644,439,1.455,445,1.4,446,0.589,449,0.608,450,1.015,454,1.478,466,1.228,471,0.913,473,1.038,477,1.548,479,0.612,491,0.522,492,1.851,493,0.659,499,0.535,500,0.787,501,3.492,515,0.787,519,1.45,521,0.434,522,1.18,523,0.464,524,3.251,525,3.018,527,0.592,538,1.382,546,1.022,556,0.654,557,0.585,565,0.532,568,0.568,570,1.636,573,2.267,582,0.676,583,0.716,584,0.517,585,0.477,587,0.544,588,1.309,597,1.844,598,0.869,601,0.748,604,0.432,605,0.823,609,2.024,619,0.53,626,0.837,639,0.629,640,0.907,642,1.279,643,1.639,649,2.237,666,1.088,667,2.788,670,1.472,671,0.474,673,0.93,684,0.739,686,1.32,687,2.065,692,2.035,701,2.11,702,3.301,704,0.639,709,0.561,711,0.787,712,2.759,713,0.731,714,1.18,729,0.798,734,0.654,736,0.612,742,0.552,760,1.215,775,1.228,782,0.67,783,1.634,786,0.665,794,0.616,795,0.777,796,1.261,797,1.323,802,2.889,806,0.723,811,0.887,816,0.639,818,0.616,822,1.447,829,1.919,837,0.416,838,0.777,848,0.905,849,0.695,855,0.731,884,0.688,887,1.088,909,0.811,924,0.695,927,1.345,931,1.044,969,0.811,979,2.503,981,1.261,982,1.991,992,1.634,1015,0.498,1029,0.823,1075,0.659,1077,2.012,1078,0.787,1079,1.472,1086,4.111,1088,1.587,1089,1.447,1090,0.634,1096,2.492,1099,3.322,1100,0.688,1107,0.823,1110,1.095,1117,0.625,1134,1.587,1140,2.157,1142,1.548,1147,1.05,1153,1.766,1154,0.723,1155,3.895,1156,1.199,1157,0.555,1170,1.218,1171,0.852,1172,0.907,1175,0.708,1176,0.787,1179,1.548,1187,0.811,1191,0.688,1193,0.62,1207,1.712,1209,0.676,1226,0.67,1241,0.688,1242,0.604,1245,2.687,1253,2.05,1257,1.021,1260,1.516,1296,0.625,1313,0.682,1315,1.79,1323,0.837,1337,0.723,1466,4.323,1527,0.702,1567,1.109,1580,1.022,1583,0.766,1587,0.616,1604,0.798,1618,1.639,1621,0.604,1623,0.869,1626,0.739,1627,5.942,1628,4.162,1636,1.147,1639,1.548,1666,0.787,1713,0.757,1714,0.811,1727,1.575,1731,0.869,1783,0.787,1787,0.654,1808,0.766,1815,0.93,1928,1.296,1959,0.956,1960,0.787,1980,1.022,1996,0.739,2003,0.852,2012,1.606,2052,0.869,2072,0.811,2085,0.93,2112,0.852,2143,0.956,2144,0.93,2182,2.088,2208,4.622,2232,0.956,2329,2.922,2376,0.837,2482,2.522,2500,0.823,2642,0.956,2643,3.447,2644,0.798,2645,2.75,2646,2.088,2647,0.93,2648,1.067,2649,1.067,2650,1.067,2651,1.067,2652,1.973,2653,1.067,2654,1.067,2655,1.067,2656,1.067,2657,1.067,2658,0.798,2659,1.973,2660,2.75,2661,1.067,2662,0.986,2663,1.889,2664,1.067,2665,1.067,2666,2.75,2667,1.973,2668,1.128,2669,1.067,2670,1.067,2671,0.93,2672,0.907,2673,0.956,2674,1.067,2675,0.986,2676,1.067,2677,0.956,2678,0.956,2679,0.956,2680,0.823]],["component/22",[6,0.35]],["keyword/22",[]],["title/23-1",[10,39.186,733,30.183]],["name/23-1",[]],["text/23-1",[]],["component/23-1",[]],["keyword/23-1",[]],["title/23-2",[1190,44.3]],["name/23-2",[]],["text/23-2",[]],["component/23-2",[]],["keyword/23-2",[]],["title/23-3",[188,30.031,1191,38.822]],["name/23-3",[]],["text/23-3",[]],["component/23-3",[]],["keyword/23-3",[]],["title/23-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/23-4",[]],["text/23-4",[]],["component/23-4",[]],["keyword/23-4",[]],["title/23-5",[139,36.226]],["name/23-5",[]],["text/23-5",[]],["component/23-5",[]],["keyword/23-5",[]],["title/23-6",[81,25.382,220,24.123]],["name/23-6",[]],["text/23-6",[]],["component/23-6",[]],["keyword/23-6",[]],["title/23-7",[413,21.993,621,46.44]],["name/23-7",[]],["text/23-7",[]],["component/23-7",[]],["keyword/23-7",[]],["title/23-8",[220,20.123,351,14.945,750,42.674]],["name/23-8",[]],["text/23-8",[]],["component/23-8",[]],["keyword/23-8",[]],["title/23-9",[351,17.916,2023,53.891]],["name/23-9",[]],["text/23-9",[]],["component/23-9",[]],["keyword/23-9",[]],["title/23-10",[520,23.467,604,24.38]],["name/23-10",[]],["text/23-10",[]],["component/23-10",[]],["keyword/23-10",[]],["title/23-11",[211,25.006,686,28.889]],["name/23-11",[]],["text/23-11",[]],["component/23-11",[]],["keyword/23-11",[]],["title/23-12",[119,28.623,458,45.711]],["name/23-12",[]],["text/23-12",[]],["component/23-12",[]],["keyword/23-12",[]],["title/23-13",[9,20.194,99,18.12,1307,38.739]],["name/23-13",[]],["text/23-13",[]],["component/23-13",[]],["keyword/23-13",[]],["title/23-14",[686,28.889,1239,43.794]],["name/23-14",[]],["text/23-14",[]],["component/23-14",[]],["keyword/23-14",[]],["title/23-15",[919,50.022,1239,43.794]],["name/23-15",[]],["text/23-15",[]],["component/23-15",[]],["keyword/23-15",[]],["title/23-16",[301,23.345,686,24.099,2681,37.564]],["name/23-16",[]],["text/23-16",[]],["component/23-16",[]],["keyword/23-16",[]],["title/23-17",[1296,35.239,1566,40.788]],["name/23-17",[]],["text/23-17",[]],["component/23-17",[]],["keyword/23-17",[]],["title/23-18",[427,36.582,520,23.467]],["name/23-18",[]],["text/23-18",[]],["component/23-18",[]],["keyword/23-18",[]],["title/23-19",[210,37.672]],["name/23-19",[]],["text/23-19",[]],["component/23-19",[]],["keyword/23-19",[]],["title/23",[119,28.623,173,30.031]],["name/23",[119,0.679,173,0.712]],["text/23",[4,1.486,6,0.793,7,0.605,9,0.742,13,0.379,14,0.817,20,0.344,23,2.536,24,0.367,27,1.836,28,0.501,29,0.161,30,0.185,31,0.24,32,2.729,34,0.446,35,1.643,38,0.409,40,0.461,41,0.169,50,0.511,51,0.456,56,0.288,57,0.488,66,0.244,70,0.268,74,0.608,75,0.236,81,0.474,82,0.322,86,0.402,92,0.402,98,2.155,99,2.651,101,0.18,111,0.294,119,0.279,120,0.751,121,0.993,122,0.309,124,1.625,125,0.87,126,2.893,128,0.232,133,0.91,139,1.72,140,0.85,141,0.55,146,0.155,149,0.427,153,0.165,154,0.463,155,1.322,157,1.011,159,0.171,163,0.206,164,0.894,165,0.194,167,0.197,170,0.164,173,1.032,174,0.658,177,0.341,178,0.39,179,0.715,183,0.975,184,0.314,185,0.95,188,0.921,190,0.508,194,0.393,197,1.617,198,0.456,199,0.754,200,0.805,202,0.407,204,0.369,205,0.781,206,0.25,208,0.244,210,0.432,211,3.122,213,0.192,214,0.982,216,1.228,217,0.221,218,0.545,220,1.43,221,0.555,222,0.225,223,0.427,224,0.218,226,0.206,228,0.334,230,0.187,231,0.189,233,0.221,236,0.288,238,0.225,239,0.271,241,0.372,243,0.922,244,0.379,246,0.536,249,0.305,250,0.469,251,0.636,258,0.225,259,3.191,261,1.221,264,0.277,268,0.856,269,0.676,272,0.255,275,0.749,276,0.39,279,0.407,280,0.225,28
16,0.96,288,0.95,289,0.148,290,0.478,292,0.178,294,0.197,300,1.907,301,1.336,306,0.344,308,0.255,309,0.541,310,0.6,311,0.763,312,1.527,314,0.326,324,0.982,325,0.213,326,0.178,328,0.339,334,0.309,336,0.216,337,0.213,340,0.213,344,0.18,347,1.493,351,2.485,355,0.168,363,0.267,365,0.555,366,0.287,375,0.591,377,0.24,387,0.181,388,0.354,392,0.263,395,0.154,401,0.208,405,0.221,406,0.572,408,0.994,410,0.663,411,0.681,412,0.271,413,2.081,416,0.532,417,0.302,418,0.354,420,0.302,422,0.577,423,0.244,424,0.339,426,0.197,427,0.182,429,0.239,430,0.677,434,0.288,435,0.288,436,0.232,437,0.341,438,0.711,439,0.249,440,0.302,445,0.822,446,1.584,447,0.422,449,0.171,450,1.174,451,0.39,454,1.073,458,0.228,459,0.185,462,0.192,463,0.165,466,0.187,468,0.366,471,0.139,473,0.591,479,0.337,484,1.608,489,1.857,491,0.287,492,2.669,496,0.293,499,0.432,503,0.294,505,0.277,506,0.203,508,0.439,511,0.213,512,0.453,515,0.221,516,0.654,519,0.127,520,1.681,521,0.75,523,0.255,524,2.379,526,0.225,527,0.478,531,0.398,532,0.411,543,0.526,544,0.236,548,0.199,557,0.165,562,0.255,564,0.21,565,0.921,568,0.312,570,0.411,573,0.136,575,0.369,576,0.184,583,0.201,584,1.88,585,1.02,587,0.299,588,1.225,592,0.221,593,0.228,594,0.201,599,0.922,601,0.603,604,1.238,606,0.203,609,2.173,612,0.386,614,0.182,619,0.558,621,1.595,632,0.293,637,0.185,647,1.21,649,0.434,652,0.24,660,0.369,664,0.541,670,2.076,671,1.51,676,0.166,679,0.871,681,1.919,682,0.194,684,0.208,686,5.155,687,0.519,688,0.255,689,0.216,691,0.74,692,0.297,693,0.189,694,0.172,696,0.871,697,1.279,698,0.871,700,0.185,701,0.962,702,1.395,703,0.783,709,0.158,710,0.24,712,0.166,717,0.201,723,0.181,725,1.371,728,0.25,733,0.294,734,0.184,736,0.494,738,0.255,739,0.182,741,0.767,742,0.155,743,0.159,747,0.526,748,0.886,749,0.339,751,0.87,752,0.433,753,0.469,754,0.478,755,2.342,756,0.411,758,2.294,759,1.67,760,2.186,761,0.232,763,0.453,764,0.244,765,1.635,766,0.24,767,0.277,768,0.24,769,0.236,774,0.369,775,1.006,779,0.269,781,2.284,783,0.816,785,0.878,786,0.187,787,0.402,789,1.006,790,0.194,791,0.584,795,0.817,796,0.192,797,0.201,800,0.411,810,0.466,812,1.315,816,0.18,818,0.793,822,1.7,823,1.715,827,0.931,829,2.124,834,1.548,835,1.474,837,0.969,845,0.195,848,0.395,849,0.195,852,0.17,853,0.25,855,0.206,865,0.288,884,0.194,903,0.903,911,0.255,919,3.91,921,0.244,927,0.672,931,0.456,979,2.222,982,1.67,989,0.386,996,0.195,1011,0.354,1015,2.197,1019,0.511,1031,0.316,1055,0.206,1057,2.181,1077,3.555,1078,0.221,1079,0.735,1080,0.903,1084,0.369,1086,3.773,1088,0.497,1089,0.158,1091,0.185,1092,0.225,1094,0.497,1098,0.541,1099,0.199,1110,0.167,1115,0.982,1116,2.385,1117,0.344,1118,0.411,1122,0.157,1123,0.197,1126,0.291,1127,0.354,1128,0.269,1132,0.302,1134,0.793,1142,4.891,1144,0.201,1147,2.754,1151,0.36,1154,0.761,1155,2.183,1156,3.007,1157,0.715,1160,0.225,1162,0.407,1170,0.363,1178,0.244,1181,0.216,1183,0.187,1185,0.357,1189,0.199,1192,0.166,1194,0.178,1204,0.555,1207,0.187,1211,1.372,1213,0.236,1215,0.341,1216,1.226,1217,0.201,1218,0.201,1219,0.194,1220,0.769,1221,0.25,1223,0.699,1225,0.216,1227,0.453,1234,0.411,1239,4.281,1242,0.332,1244,0.203,1245,5.311,1246,0.203,1247,0.631,1248,4.281,1251,0.199,1253,0.515,1256,0.203,1257,0.446,1258,2.448,1260,5.297,1266,0.21,1273,1.023,1282,0.975,1290,0.33,1296,0.176,1298,0.55,1303,1.603,1309,1.073,1313,0.55,1316,0.201,1325,0.84,1331,0.461,1332,0.676,1342,0.203,1344,0.357,1351,0.225,1352,0.411,1357,0.351,1364,0.228,1369,0.24,1377,0.577,1378,0.277,1380,0.218,1409,1.804,1433,0.216,1438,0.3,1442,0.206,1445,0.189,1466,2.055,1467,0.931,1468,0.931,1469,0.931,1470,0.931,1471,1.65,1472,0.931,1473,0.871,
11474,0.931,1475,0.931,1476,0.931,1477,0.912,1478,1.65,1479,0.912,1489,1.926,1490,0.712,1497,1.432,1499,1.226,1500,0.33,1504,1.492,1505,1.492,1508,0.262,1515,0.255,1527,2.009,1559,0.504,1562,0.213,1567,0.169,1568,0.25,1576,0.206,1581,0.232,1584,0.236,1585,0.603,1586,0.527,1587,0.173,1588,0.228,1589,0.189,1590,0.236,1591,0.453,1592,0.236,1593,0.218,1594,0.228,1595,0.232,1596,0.236,1597,0.208,1598,0.208,1604,0.225,1615,0.232,1616,0.828,1617,0.903,1619,0.398,1627,0.21,1636,2.255,1639,0.236,1657,0.213,1658,0.375,1660,0.488,1662,0.461,1663,0.461,1664,0.398,1665,0.363,1668,0.3,1671,1.014,1680,0.232,1687,0.236,1705,0.225,1707,0.228,1709,0.255,1710,0.269,1711,0.206,1712,0.244,1713,0.611,1721,0.244,1722,1.119,1725,0.225,1728,0.25,1737,0.255,1752,0.208,1754,0.244,1760,0.244,1764,0.897,1779,0.84,1780,1.927,1781,0.427,1782,0.255,1786,0.269,1787,0.36,1788,1.474,1798,0.262,1812,0.3,1848,0.461,1896,0.225,1908,0.216,1921,0.24,1928,0.197,1938,0.407,1939,0.255,1940,0.478,1941,0.232,1960,0.433,1964,0.232,1975,0.288,1982,0.288,1996,0.407,2003,0.24,2007,0.277,2013,0.288,2026,0.478,2041,0.269,2049,0.269,2072,0.228,2182,0.228,2184,0.24,2185,0.255,2213,0.269,2214,0.262,2219,0.91,2225,0.288,2239,0.269,2246,0.269,2373,0.288,2386,2.711,2387,0.933,2389,0.25,2406,0.255,2407,0.288,2410,0.269,2462,0.562,2505,0.526,2605,0.716,2608,0.288,2622,0.461,2642,0.269,2644,0.439,2658,0.439,2663,0.288,2673,0.269,2679,0.269,2681,7.548,2682,0.288,2683,0.3,2684,1.315,2685,0.488,2686,4.098,2687,2.068,2688,5.062,2689,3.568,2690,3.056,2691,0.587,2692,0.3,2693,0.262,2694,0.3,2695,0.269,2696,0.3,2697,0.262,2698,0.3,2699,0.343,2700,0.343,2701,0.671,2702,1.123,2703,0.671,2704,0.343,2705,0.343,2706,0.343,2707,0.671,2708,0.343,2709,0.343,2710,0.3,2711,0.269,2712,0.3,2713,1.615,2714,1.123,2715,0.343,2716,0.343,2717,0.343,2718,0.488,2719,0.343,2720,0.343,2721,0.3,2722,0.277,2723,0.3,2724,0.3,2725,0.277,2726,0.343,2727,0.343,2728,0.343,2729,0.343,2730,0.3,2731,1.123,2732,0.3,2733,3.727,2734,0.3,2735,0.277,2736,0.343,2737,0.343,2738,0.3,2739,1.846,2740,1.615,2741,1.037,2742,0.269,2743,0.3,2744,0.343,2745,0.587,2746,0.3,2747,0.3,2748,0.3,2749,0.3,2750,0.671,2751,0.343,2752,0.343,2753,0.277,2754,0.277,2755,0.288,2756,0.3,2757,0.277,2758,0.3,2759,0.542,2760,0.3,2761,0.3,2762,0.343,2763,0.343,2764,0.343,2765,0.3,2766,0.3,2767,3.568,2768,0.262,2769,0.343,2770,0.343,2771,0.343,2772,0.671,2773,0.3,2774,0.3,2775,0.3,2776,0.269,2777,0.3,2778,0.3,2779,0.269,2780,0.3,2781,0.3,2782,0.3,2783,0.3,2784,0.3,2785,0.3,2786,0.277]],["component/23",[6,0.35]],["keyword/23",[]],["title/24-1",[2787,57.961]],["name/24-1",[]],["text/24-1",[]],["component/24-1",[]],["keyword/24-1",[]],["title/24-2",[19,29.188,1632,35.612,2020,42.674]],["name/24-2",[]],["text/24-2",[]],["component/24-2",[]],["keyword/24-2",[]],["title/24-3",[524,22.19]],["name/24-3",[]],["text/24-3",[]],["component/24-3",[]],["keyword/24-3",[]],["title/24-4",[168,22.558,347,20.123,348,39.394]],["name/24-4",[]],["text/24-4",[]],["component/24-4",[]],["keyword/24-4",[]],["title/24-5",[6,13.384,446,33.193]],["name/24-5",[]],["text/24-5",[]],["component/24-5",[]],["keyword/24-5",[]],["title/24",[368,47.224,2327,49.002]],["name/24",[368,1.12,2327,1.162]],["text/24",[4,1.217,6,1.941,9,1.519,23,1.893,24,0.666,29,2.021,32,3.481,34,0.808,35,0.476,38,1.326,40,0.836,50,0.71,51,1.475,68,1.058,69,0.821,70,2.409,74,1.51,81,1.176,88,1.152,98,0.756,99,2.585,104,1.398,111,1.894,119,1.326,122,0.821,124,0.883,125,1.779,126,1.217,127,0.964,133,2.02,138,0.964,139,0.753,140,1.467,141,0.998,146,0.808,153,0.856,159,0.889,164,0.756,168,1.252,172,1.016,173,1.884,179,1.965,198,1.475,199,0.729,200,0.914,201,1.186,204,2.883,205,0.661,210,1.398,211,1.158,214,0.949,220,1.513,221,1.377,223,0.775,234,0.787,239,1.285,241,0.989,248,1.327,261,1.718,268,0.972,269,1.58,279,1.082,286,1.45,289,0.771,292,0.928,300,0.739,301,1.296,304,1.07,306,0.914,310,2.004,312,1.194,319,1.136,325,1.977,326,0.928,340,1.107,344,2.26,347,2.113,350,1.644,351,1.742,356,1.954,357,1.85,365,1.007,366,0.764,367,1.205,374,0.872,376,2.045,377,2.777,383,1.838,388,0.942,392,1.247,398,1.398,399,0.964,404,0.856,406,1.036,408,1.501,410,0.753,411,3.09,412,1.285,413,3.036,415,3.465,416,0.739,420,1.435,422,1.047,426,1.832,427,0.949,428,1.094,429,2.59,439,1.605,440,1.435,445,1.923,446,4.136,447,1.121,449,0.889,453,1.168,454,0.674,458,1.186,459,0.964,463,1.528,466,0.972,471,1.29,473,0.821,483,1.298,484,0.674,491,1.364,492,1.285,493,1.722,494,2.532,496,0.779,501,1.771,503,1.398,507,0.998,509,0.908,514,1.186,519,0.661,520,0.609,522,0.934,523,0.679,524,2.94,525,1.681,545,1.152,560,2.428,564,1.954,565,1.391,570,2.193,573,2.651,574,1.107,579,1.136,584,0.756,585,2.054,588,1.036,591,1.168,592,1.152,600,1.136,604,1.129,606,1.058,609,1.405,614,0.949,616,1.058,619,0.775,622,1.247,625,1.058,632,1.391,633,1.036,634,0.998,647,1.632,649,1.772,659,1.094,670,0.836,693,0.981,699,0.989,701,3.163,702,2.275,711,1.152,712,2.907,725,0.861,729,1.168,736,3.023,738,1.327,739,1.694,743,2.428,749,0.901,751,0.736,755,0.908,758,0.831,760,1.232,773,3.739,781,0.779,786,0.972,787,1.07,796,0.998,802,1.609,804,1.271,810,0.845,829,0.746,848,0.717,862,1.271,887,0.861,927,0.764,931,0.826,979,1.537,981,0.998,982,1.621,1015,1.302,1019,1.656,1031,0.84,1054,1.36,10
177,0.628,1079,0.836,1082,1.398,1083,1.247,1085,1.082,1086,3.14,1088,2.65,1089,1.467,1090,0.928,1096,1.136,1101,1.168,1106,2.646,1112,1.047,1117,0.914,1124,0.845,1126,1.384,1134,1.609,1155,3.061,1157,1.45,1161,1.186,1173,2.226,1175,1.036,1183,0.972,1198,1.094,1207,1.736,1209,0.989,1233,1.562,1246,1.058,1247,0.878,1273,0.989,1287,3.111,1311,1.205,1318,1.094,1337,1.889,1342,1.058,1358,1.07,1367,1.398,1466,3.227,1509,1.247,1512,1.889,1539,2.151,1559,0.914,1579,1.36,1581,1.205,1587,2.18,1589,0.981,1593,1.136,1621,0.883,1636,1.621,1687,1.225,1714,1.186,1729,1.36,1760,1.271,1896,1.168,1908,1.121,1977,1.889,2003,1.247,2012,1.271,2029,1.495,2037,1.495,2147,1.398,2204,1.094,2233,1.495,2245,2.086,2253,1.205,2329,1.136,2330,1.298,2386,2.028,2482,4.26,2612,1.152,2632,2.028,2643,2.868,2644,1.168,2646,1.186,2680,1.205,2711,1.398,2788,1.186,2789,1.562,2790,1.562,2791,1.562,2792,1.107,2793,1.442,2794,1.495,2795,1.495,2796,1.562,2797,1.562,2798,1.271,2799,1.786,2800,1.786,2801,3.777,2802,1.495,2803,1.271,2804,1.562,2805,1.562,2806,3.209,2807,1.562,2808,1.562,2809,1.562,2810,1.398,2811,1.36,2812,1.152,2813,1.562,2814,1.562,2815,1.562]],["component/24",[6,0.35]],["keyword/24",[]],["title/25",[9,24.208,632,30.031]],["name/25",[9,0.574,632,0.712]],["text/25",[4,2.057,6,1.538,9,4.283,32,3.549,34,2.438,35,2.107,40,2.521,50,2.144,67,4.218,70,3.743,81,1.987,99,3.626,119,2.241,122,2.479,153,2.582,154,2.536,164,4.373,168,2.117,186,2.864,199,3.229,220,1.888,244,3.039,251,3.227,255,2.507,289,2.327,310,2.057,347,4.027,407,2.4,411,2.974,413,1.722,420,2.425,429,1.922,454,2.033,509,2.739,524,3.263,541,4.004,565,2.351,573,4.704,587,2.4,625,3.193,632,5.422,649,1.819,701,1.987,702,2.033,712,2.598,733,2.363,772,3.302,802,2.72,1086,3.031,1089,5.057,1090,2.799,1220,3.228,1351,3.525,1583,3.384,1621,2.666,1626,3.264,1636,4.02,1639,3.697,1928,3.097,2245,3.525,2278,4.512,2677,4.218,2678,4.218,2680,5.335,2816,6.916,2817,4.713]],["component/25",[6,0.35]],["keyword/25",[]],["title/26-1",[407,30.654,837,23.467]],["name/26-1",[]],["text/26-1",[]],["component/26-1",[]],["keyword/26-1",[]],["title/26-2",[407,30.654,1031,32.401]],["name/26-2",[]],["text/26-2",[]],["component/26-2",[]],["keyword/26-2",[]],["title/26-3",[239,23.141,407,25.571,1576,34.395]],["name/26-3",[]],["text/26-3",[]],["component/26-3",[]],["keyword/26-3",[]],["title/26-4",[407,30.654,649,23.232]],["name/26-4",[]],["text/26-4",[]],["component/26-4",[]],["keyword/26-4",[]],["title/26-5",[23,17.762,694,24.694,2058,43.077,2818,49.258]],["name/26-5",[]],["text/26-5",[]],["component/26-5",[]],["keyword/26-5",[]],["title/26-6",[23,20.707,2819,46.376,2820,48.083]],["name/26-6",[]],["text/26-6",[]],["component/26-6",[]],["keyword/26-6",[]],["title/26-7",[23,20.707,2821,48.083,2822,48.083]],["name/26-7",[]],["text/26-7",[]],["component/26-7",[]],["keyword/26-7",[]],["title/26-8",[23,13.828,521,13.63,701,14.139,1077,13.485,2823,38.349,2824,38.349]],["name/26-8",[]],["text/26-8",[]],["component/26-8",[]],["keyword/26-8",[]],["title/26-9",[23,17.762,934,36.604,2825,49.258,2826,49.258]],["name/26-9",[]],["text/26-9",[]],["component/26-9",[]],["keyword/26-9",[]],["title/26-10",[23,15.55,539,27.434,596,27.079,2827,43.124,2828,43.124]],["name/26-10",[]],["text/26-10",[]],["component/26-10",[]],["keyword/26-10",[]],["title/26-11",[23,17.762,328,24.863,2829,43.077,2830,45.532]],["name/26-11",[]],["text/26-11",[]],["component/26-11",[]],["keyword/26-11",[]],["title/26-12",[23,15.55,484,16.27,837,14.701,2829,37.713,2831,43.124]],["name/26-12",[]],["text/26-12",[]],["component/26-12",[]],["keyword/26-12",[]],["title/26-13",[328,28.986,2832,53.081,2833,53.081]],["name/26-13",[]],["text/26-13",[]],["component/26-13",[]],["keyword/26-13",[]],["title/26",[407,38.259]],["name/26",[2834,1.897]],["text/26",[4,1.045,6,2.154,9,0.962,23,2.841,24,1.021,35,3.007,48,1.989,50,1.839,51,1.266,70,1.093,81,1.009,83,1.478,90,3.662,101,1.432,121,2.985,133,1.053,165,2.607,169,1.741,171,1.878,172,2.631,175,2.657,180,1.719,194,1.093,200,1.401,205,1.711,211,2.18,221,2.592,239,1.103,246,1.49,255,2.151,256,3.977,261,1.089,289,1.997,300,1.133,305,1.79,310,1.045,312,1.731,328,4.315,334,2.126,343,1.573,355,3.443,366,1.977,371,1.589,374,2.257,378,2.292,380,4.042,383,1.165,399,2.496,407,4.052,411,2.032,413,3.664,416,1.133,420,1.232,429,1.649,439,1.017,446,2.893,451,1.589,463,2.215,471,1.108,484,4.094,490,1.558,496,3.076,519,1.013,521,3.539,523,1.041,524,1.194,539,1.74
11,562,2.034,570,1.931,573,1.084,587,2.058,595,1.677,596,1.719,614,1.455,625,1.622,630,2.394,633,4.092,634,3.353,642,1.113,649,0.924,655,1.948,666,1.32,667,1.948,671,1.062,672,1.503,676,2.893,684,1.658,686,1.149,691,1.288,694,3.535,701,1.009,702,2.264,709,1.259,713,1.639,724,3.353,734,1.466,743,2.138,765,1.281,774,1.503,780,1.49,782,1.503,789,1.49,791,1.245,808,1.719,822,1.259,837,3.847,848,1.098,912,4.612,931,2.138,934,2.034,1015,1.118,1031,1.288,1043,1.911,1054,2.085,1077,2.479,1084,1.503,1085,1.658,1094,1.382,1106,1.677,1122,1.252,1157,1.245,1160,1.79,1212,1.677,1216,2.397,1240,2.739,1242,3.488,1257,2.715,1287,1.622,1305,1.53,1315,3.415,1336,3.118,1343,3.594,1365,2.034,1375,1.677,1394,1.573,1405,7.157,1436,3.171,1437,2.867,1442,1.639,1445,1.503,1463,2.35,1517,1.558,1576,1.639,1586,1.466,1589,3.872,1594,1.817,1658,2.583,1722,1.658,1737,2.034,1769,5.367,1787,1.466,1977,3.555,2059,4.912,2060,2.085,2061,3.87,2062,3.87,2063,2.394,2111,1.79,2464,3.435,2788,1.817,2819,2.21,2834,3.984,2835,2.394,2836,2.53,2837,4.273,2838,1.989,2839,3.619,2840,2.085,2841,2.53,2842,2.737,2843,2.737,2844,4.273,2845,2.53,2846,2.292,2847,2.53,2848,2.53]],["component/26",[6,0.35]],["keyword/26",[]],["title/27-1",[411,16.546,446,27.689,649,19.38]],["name/27-1",[]],["text/27-1",[]],["component/27-1",[]],["keyword/27-1",[]],["title/27-2",[521,24.467,524,17.779]],["name/27-2",[]],["text/27-2",[]],["component/27-2",[]],["keyword/27-2",[]],["title/27-3",[351,22.361]],["name/27-3",[]],["text/27-3",[]],["component/27-3",[]],["keyword/27-3",[]],["title/27-4",[6,11.164,211,20.86,446,27.689]],["name/27-4",[]],["text/27-4",[]],["component/27-4",[]],["keyword/27-4",[]],["title/27-5",[221,29.733,694,34.511]],["name/27-5",[]],["text/27-5",[]],["component/27-5",[]],["keyword/27-5",[]],["title/27",[411,19.835,446,33.193]],["name/27",[411,0.47,446,0.787]],["text/27",[4,1.379,6,1.78,7,1.699,9,2.563,32,2.58,35,3.084,50,1.436,69,1.661,74,1.71,81,2.142,99,1.139,120,1.468,121,1.261,126,1.379,129,2.624,133,1.39,146,1.634,154,3.931,164,1.53,172,2.055,174,1.848,205,2.698,211,3.552,220,1.265,221,4.224,229,2.036,251,2.877,288,1.625,301,3.976,312,2.175,344,1.889,347,1.265,351,1.897,356,1.634,362,2.624,363,1.436,366,1.544,377,2.08,392,1.412,404,1.73,407,3.719,409,2.036,410,2.449,411,3.336,413,3.526,416,2.404,422,2.117,429,2.072,439,3.401,445,1.608,446,5.996,449,1.798,450,1.625,454,1.362,471,1.461,484,2.192,490,3.307,494,2.117,503,2.547,521,3.654,524,3.095,568,1.68,573,1.43,584,1.53,589,1.81,604,1.279,617,2.297,629,2.827,632,1.575,633,2.096,637,1.95,639,2.995,649,1.219,670,1.69,671,1.401,691,1.699,694,4.187,702,1.362,703,1.798,713,3.48,717,2.117,724,2.018,725,2.801,737,2.683,773,3.603,774,1.983,781,2.534,782,1.983,783,1.875,784,2.57,806,2.139,809,1.983,810,1.71,816,1.889,829,1.508,908,2.624,1015,1.474,1024,3.023,1086,2.794,1100,2.036,1134,1.823,1216,1.443,1253,1.889,1257,1.634,1290,1.774,1298,3.246,1372,3.023,1394,2.075,1463,1.835,1500,2.855,1517,2.055,1619,2.139,1650,1.919,1658,2.018,1664,2.139,1743,2.57,1748,2.362,1769,2.267,1787,1.934,1798,2.75,1967,2.522,2057,2.477,2183,2.477,2849,1.919,2850,2.827,2851,2.624,2852,3.611,2853,3.611,2854,4.864,2855,3.158,2856,3.338]],["component/27",[6,0.35]],["keyword/27",[]],["title/28-1",[405,55.408]],["name/28-1",[]],["text/28-1",[]],["component/28-1",[]],["keyword/28-1",[]],["title/28-2",[400,28.881,429,17.57,736,24.694,2409,41.244]],["name/28-2",[]],["text/28-2",[]],["component/28-2",[]],["keyword/28-2",[]],["title/28",[6,13.384,446,33.193]],["name/28",[446,1.377]],["text/28",[4,1.697,6,2.381,9,2.406,19,2.26,24,1.658,29,2.08,32,2.114,35,1.184,38,1.848,65,3.05,70,2.734,74,2.105,81,1.639,99,1.403,111,3,125,1.832,168,4.197,173,4.088,188,1.939,199,1.815,205,3.088,211,3.031,220,1.558,223,4.067,234,1.959,239,2.758,251,1.531,269,1.627,304,2.663,310,1.697,347,2.398,350,2.292,355,2.171,356,3.775,357,3.972,371,2.58,377,2.45,383,2.913,395,1.99,399,3.695,400,5.494,405,2.867,407,3.715,408,2.092,410,1.874,411,1.972,413,2.186,416,2.832,420,2.001,422,2.607,429,3.609,438,2.011,445,1.98,446,6.412,447,2.791,450,3.08,507,2.484,515,2.867,519,1.645,524,2.155,527,2.157,560,3.386,573,3.305,629,3.48,632,1.939,642,1.807,660,2.441,694,2.229,704,2.326,709,2.045,717,2.607,734,2.381,742,2.011,743,2.056,751,1.832,773,7.31,776,3.888,808,2.791,816,3.581,843,2.214,1015,1.815,1073,3.164,1085,2.693,1086,1.704,1089,2.045,1099,2.58,1100,2.507,1106,2.724,1125,3.304,1159,3.48,1231,3.164,1437,2.757,1538,2.693,1562,2.757,1583,2.791,1787,3.665,2133,4.616,2855,3.888,2856,4.109,2857,4.446,2858,4.446]],["component/28",[6,0.35]],["keyword/28",[]],["title/29-1",[2849,45.658]],["name/29-1",[]],["text/29-1",[]],["component/29-1",[]],["keyword/29-1",[]],["title/29-2",[404,32.989,649,23.232]],["name/29-2",[]],["text/29-2",[]],["component/29-2",[]],["keyword/29-2",[]],["title/29-3",[1445,47.18]],["name/29-3",[]],["text/29-3",[]],["component/29-3",[]],["keyword/29-3",[]],["title/29-4",[82,32.989,347,24.123]],["name/29-4",[]],["text/29-4",[]],["component/29-4",[]],["keyword/29-4",[]],["title/29-5",[168,27.042,649,23.232]],["name/29-5",[]],["text/29-5",[]],["component/29-5",[]],["keyword/29-5",[]],["title/29",[411,19.835,1086,26.387]],["name/29",[411,0.47,1086,0.626]],["text/29",[4,0.885,6,1.519,9,2.947,22,2.551,23,0.836,32,3.429,35,2.472,38,0.964,41,1.971,50,0.922,65,1.59,70,0.926,78,1.284,81,0.855,99,2.644,119,0.964,120,0.942,122,1.844,125,0.955,126,0.885,133,2.43,154,2.494,157,1.715,159,1.997,164,3.754,168,3.292,173,1.011,183,1.437,190,2.067,199,0.946,210,1.016,211,0.842,232,1.284,234,1.021,261,0.922,269,1.467,288,1.804,289,1.001,298,1.814,300,0.959,301,1.63,312,0.868,318,1.319,334,1.066,338,1.241,347,2.5,351,1.857,365,1.307,366,0.991,379,1.563,387,2.114,404,2.54,407,1.032,410,1.691,411,3.3
169,412,2.545,413,2.831,416,2.193,420,1.043,424,1.17,439,1.49,445,1.032,446,1.118,450,2.842,463,1.111,468,2.183,473,1.066,479,2.657,481,1.941,484,2.383,485,1.814,486,1.814,492,0.934,493,1.252,494,1.359,499,1.016,501,2.174,503,1.758,519,0.858,523,1.525,524,3.051,525,2.114,558,1.872,568,1.078,570,2.638,573,2.826,575,1.273,587,1.785,588,1.345,632,3.113,637,2.165,639,2.067,649,3.747,654,1.516,659,1.42,666,1.933,670,1.876,674,1.765,676,2.555,692,1.776,693,1.273,701,0.855,702,1.513,703,1.997,709,1.066,712,3.44,714,3.305,715,1.65,734,1.241,741,2.588,742,1.049,743,1.072,765,1.876,809,1.273,810,1.898,829,0.968,837,2.432,840,2.114,843,1.997,852,3.124,887,1.118,927,1.715,931,1.072,981,2.241,985,1.619,1014,1.814,1036,1.941,1038,1.65,1077,0.815,1078,1.495,1086,4.378,1088,2.675,1094,1.17,1099,1.345,1118,1.42,1119,2.027,1126,1.006,1134,2.024,1142,1.59,1147,1.865,1151,1.241,1154,1.373,1155,3.573,1157,1.824,1176,2.586,1193,2.694,1194,1.204,1257,1.049,1260,3.44,1313,1.295,1315,1.319,1325,1.054,1337,1.373,1366,1.437,1375,2.457,1439,1.495,1442,1.388,1445,5.294,1463,1.178,1466,4.04,1559,1.186,1567,1.971,1627,3.869,1636,2.038,1722,1.404,1727,2.8,1766,3.238,1787,1.241,1868,1.539,1928,2.304,1978,1.65,2136,1.684,2182,1.539,2334,1.941,2662,1.872,2803,1.65,2806,1.722,2812,1.495,2834,1.539,2838,1.684,2849,2.816,2859,2.027,2860,2.027,2861,1.814,2862,1.941,2863,1.872,2864,2.142,2865,1.59,2866,1.872,2867,2.027,2868,2.142,2869,1.872,2870,2.142,2871,2.027,2872,2.027,2873,2.142,2874,1.59,2875,2.027,2876,2.142,2877,2.027]],["component/29",[6,0.35]],["keyword/29",[]],["title/30-1",[32,17.738,524,14.831,633,33.33]],["name/30-1",[]],["text/30-1",[]],["component/30-1",[]],["keyword/30-1",[]],["title/30-2",[32,21.264,366,29.444]],["name/30-2",[]],["text/30-2",[]],["component/30-2",[]],["keyword/30-2",[]],["title/30-3",[449,34.279,471,27.862]],["name/30-3",[]],["text/30-3",[]],["component/30-3",[]],["keyword/30-3",[]],["title/30-4",[1309,43.671]],["name/30-4",[]],["text/30-4",[]],["component/30-4",[]],["keyword/30-4",[]],["title/30-5",[1517,48.908]],["name/30-5",[]],["text/30-5",[]],["component/30-5",[]],["keyword/30-5",[]],["title/30-6",[484,25.973,1015,28.11]],["name/30-6",[]],["text/30-6",[]],["component/30-6",[]],["keyword/30-6",[]],["title/30-7",[584,29.163,1258,31.317]],["name/30-7",[]],["text/30-7",[]],["component/30-7",[]],["keyword/30-7",[]],["title/30-8",[760,26.601,1258,31.317]],["name/30-8",[]],["text/30-8",[]],["component/30-8",[]],["keyword/30-8",[]],["title/30-9",[725,33.193,781,30.031]],["name/30-9",[]],["text/30-9",[]],["component/30-9",[]],["keyword/30-9",[]],["title/30",[521,24.467,524,17.779]],["name/30",[521,0.58,524,0.421]],["text/30",[6,1.533,9,3.287,19,4.008,24,2.002,32,3.182,35,2.101,50,2.135,81,1.979,82,2.572,99,3.251,157,2.296,160,3.027,186,2.852,239,2.163,301,3.206,312,2.009,327,2.852,344,4.126,351,1.397,366,3.998,377,1.921,387,2.83,407,3.511,411,2.968,413,3.291,429,1.914,446,2.588,449,2.673,450,4.939,471,2.172,484,2.975,499,2.353,521,3.901,524,3.142,527,2.604,530,4.494,531,3.18,570,2.242,584,3.34,585,3.657,587,2.39,613,3.682,671,3.059,676,2.588,713,3.215,725,2.588,730,3.511,751,2.211,760,2.074,778,3.621,781,4.078,829,3.294,852,2.655,1015,3.22,1031,4.849,1045,3.564,1077,1.887,1086,2.057,1089,2.469,1126,2.33,1155,2.455,1206,5.319,1216,2.144,1258,2.442,1290,2.638,1303,3.027,1309,2.728,1372,4.494,1420,3.82,1466,2.588,1497,2.947,1517,4.489,1676,5.319,1705,3.511,1743,3.82,1977,3.18,2111,3.511,2658,3.511,2680,3.621,2840,4.088,2878,3.9]],["component/30",[6,0.35]],["keyword/30",[]],["title/31",[221,29.733,694,34.511]],["name/31",[694,0.818,1394,0.938]],["text/31",[6,1.416,38,3.029,51,5.104,70,2.91,98,3.086,153,3.491,164,3.086,169,4.634,172,5.564,221,5.678,255,3.389,256,3.677,288,4.399,289,3.146,306,3.729,351,1.896,377,2.608,399,5.278,407,3.244,413,2.327,429,3.487,451,4.228,574,4.517,606,4.316,639,5.04,666,3.512,676,3.512,690,4.228,691,3.428,694,6.591,724,5.463,782,4,837,2.483,912,4.765,931,3.37,1110,3.534,1219,4.108,1394,4.186,1567,3.58,1769,4.574,2487,6.733,2803,5.185,2879,5.413,2880,7.284,2881,7.284]],["component/31",[6,0.35]],["keyword/31",[]],["title/32-1",[413,21.993,501,28.235]],["name/32-1",[]],["text/32-1",[]],["component/32-1",[]],["keyword/32-1",[]],["title/32-2",[501,23.554,524,14.831,1175,33.33]],["name/32-2",[]],["text/32-2",[]],["component/32-2",[]],["keyword/32-2",[]],["title/32-3",[159,28.595,366,24.562,2882,44.955]],["name/32-3",[]],["text/32-3",[]],["component/32-3",[]],["keyword/32-3",[]],["title/32",[412,27.741,501,28.235]],["name/32",[412,0.658,501,0.669]],["text/32",[4,0.673,6,2.01,7,0.829,9,2.101,16,1.31,23,1.136,24,1.594,29,0.825,32,0.544,34,0.797,35,2.168,38,1.31,50,1.253,51,0.815,70,
11.259,89,1.867,90,1.637,98,1.335,99,2.568,113,0.915,119,1.31,121,0.615,122,1.449,124,3.565,125,1.761,126,1.203,133,2.3,139,0.743,144,0.825,157,1.348,159,6.003,164,2.532,168,0.692,170,1.501,175,1.013,190,0.909,194,0.704,197,1.458,200,1.613,205,0.652,210,0.773,213,0.985,218,0.976,220,0.618,221,0.761,223,0.765,234,0.777,241,1.745,246,0.96,251,1.472,275,0.839,289,0.761,291,2.2,295,1.067,310,0.673,311,0.855,314,0.855,315,1.093,347,0.618,351,0.82,366,3.294,368,1.209,371,1.023,374,0.861,377,1.128,383,1.341,392,1.233,395,0.789,397,1.17,406,3.018,411,2.724,412,3.435,413,2.461,415,1.811,416,1.769,417,0.793,418,2.253,420,0.793,430,0.929,439,0.655,449,1.569,453,1.153,454,0.665,463,1.51,471,0.713,473,0.811,484,2.255,492,2.095,497,0.915,499,4.023,501,5.051,512,1.449,516,2.092,519,0.652,521,1.519,522,1.649,523,0.67,524,3.054,525,3.8,526,1.153,537,1.067,538,1.931,556,1.688,565,0.769,570,0.736,573,1.693,574,1.093,579,1.121,585,2.596,587,1.403,593,2.837,595,1.08,600,1.121,609,2.634,619,3.128,632,0.769,633,1.023,635,1.476,639,1.625,649,2.432,676,0.85,679,0.976,686,0.74,687,0.929,690,1.023,692,1.396,694,0.883,699,1.745,701,3.143,702,3.345,704,1.649,710,1.231,712,0.85,758,1.466,760,2.009,765,0.825,775,1.716,791,0.802,801,1.093,802,1.59,808,1.107,818,1.59,829,2.172,837,1.772,852,0.872,855,1.056,878,1.067,909,1.17,924,1.794,966,1.38,974,1.17,979,1.519,982,1.602,985,1.231,1019,0.915,1031,0.829,1077,1.108,1079,1.474,1086,3.808,1091,1.701,1095,2.4,1113,1.73,1117,0.902,1118,1.08,1121,1.254,1122,0.806,1126,0.765,1132,1.418,1147,1.466,1148,1.033,1151,2.785,1155,1.441,1156,2.271,1157,1.433,1168,1.254,1170,0.952,1175,3.468,1198,1.08,1220,1.056,1241,0.994,1247,2.1,1251,1.829,1253,1.649,1256,1.044,1257,2.352,1260,0.85,1271,1.107,1298,0.985,1310,1.829,1311,2.126,1313,0.985,1314,1.189,1318,1.08,1323,2.162,1325,0.802,1337,1.044,1366,2.65,1442,1.056,1445,0.968,1466,2.881,1497,0.968,1549,1.254,1559,1.613,1567,0.866,1573,1.231,1587,0.89,1616,1.137,1628,1.107,1636,3.037,1677,1.31,1736,1.121,1743,1.254,1752,1.067,1883,1.423,1899,1.281,1903,1.281,1910,1.38,1971,1.281,2012,2.243,2072,1.17,2108,1.38,2142,1.38,2244,1.38,2245,1.153,2253,1.189,2329,1.121,2658,1.153,2671,1.342,2672,1.31,2849,0.937,2861,3.345,2862,1.476,2878,1.281,2883,1.541,2884,1.541,2885,1.541,2886,2.756,2887,5.804,2888,1.541,2889,1.541,2890,1.476,2891,3.151,2892,1.541,2893,1.31,2894,1.541,2895,1.762,2896,3.737,2897,1.629,2898,1.629,2899,2.756,2900,1.541,2901,2.756,2902,1.423,2903,2.756,2904,1.137,2905,1.31,2906,1.541,2907,2.638,2908,1.476,2909,1.762,2910,1.762,2911,1.423,2912,1.541,2913,1.423,2914,1.541,2915,1.541]],["component/32",[6,0.35]],["keyword/32",[]],["title/33",[347,24.123,422,40.363]],["name/33",[347,0.572,422,0.957]],["text/33",[38,3.687,99,2.798,144,4.149,153,4.249,168,3.483,173,3.868,261,3.528,269,4.064,347,4.679,350,4.572,376,4.198,377,4.341,388,4.676,393,5.096,422,7.11,440,3.991,446,4.276,641,4.955,742,4.012,743,4.102,806,5.254,1162,5.371,1209,4.912,2020,6.59]],["component/33",[6,0.35]],["keyword/33",[]],["title/34",[1751,57.961]],["name/34",[1751,1.927]],["text/34",[6,2.032,122,4.807,269,3.825,377,3.741,545,6.74,637,5.644,736,5.239,822,4.807,976,8.44,1751,8.277]],["component/34",[6,0.35]],["keyword/34",[]],["title/35-1",[524,17.779,642,27.985]],["name/35-1",[]],["text/35-1",[]],["component/35-1",[]],["keyword/35-1",[]],["title/35-2",[2109,50.377]],["name/35-2",[]],["text/35-2",[]],["component/35-2",[]],["keyword/35-2",[]],["title/35-3",[351,17.916,642,27.985]],["name/35-3",[]],["text/35-3",[]],["component/35-3",[]],["keyword/35-3",[]],["title/35-4",[2916,57.961]],["name/35-4",[]],["text/35-4",[]],["component/35-4",[]],["keyword/35-4",[]],["title/35-5",[251,23.708,642,27.985]],["name/35-5",[]],["text/35-5",[]],["component/35-5",[]],["keyword/35-5",[]],["title/35-6",[2855,75.138]],["name/35-6",[]],["text/35-6",[]],["component/35-6",[]],["keyword/35-6",[]],["title/35-7",[168,27.042,642,27.985]],["name/35-7",[]],["text/35-7",[]],["component/35-7",[]],["keyword/35-7",[]],["title/35-8",[2917,62.432]],["name/35-8",[]],["text/35-8",[]],["component/35-8",[]],["keyword/35-8",[]],["title/35-9",[2918,62.432]],["name/35-9",[]],["text/35-9",[]],["component/35-9",[]],["keyword/35-9",[]],["title/35",[424,34.748,642,27.985]],["name/35",[424,0.824,642,0.663]],["text/35",[4,1.432,6,2.03,9,2.107,34,2.71,35,2.65,41,1.844,51,2.771,70,2.987,74,1.776,81,1.383,82,1.798,89,2.223,98,2.538,99,3.139,109,4.892,111,1.645,120,1.525,121,1.31,126,1.432,147,2.116,148,3.141,157,2.562,168,1.474,170,2.853,173,1.637,179,1.707,199,1.532,205,2.217,213,2.097,228,1.868,234,3.295,261,2.975,275,1.787,276,2.177,289,1.62,292,3.111,309,3.289,310,2.287,312,2.243,351,2.983,356,2.71,357,3.477,363,1.492,376,4.042,398,2.937,407,1.671,408,1.766,411,2.155,413,2.981,416,1.553,420,2.696,424,1.894,429,3.548,439,3.172,446,4.117,459,2.026,471,1.518,484,3.753,496,1.637,497,1.949,503,1.645,512,1.726,522,1.963,524,2.205,532,2.502,570,1.567,575,2.06,585,1.468,587,1.671,642,4.544,649,2.022,664,3.289,700,2.026,702,1.415,709,1.726,711,2.419,712,1.809,730,2.454,734,4.005,760,3.844,772,2.299,773,5.295,829,1.567,837,1.279,848,2.404,907,2.454,974,2.491,1015,1.532,1075,4.61,1090,1.949,1094,1.894,1122,1.716,1123,2.156,1124,3.54,1127,1.978,1131,2.454,1195,3.33,1232,2.272,1290,1.844,1356,2.419,1494,2.937,1512,2.223,1522,2.491,1559,3.828,1567,1.844,1666,2.419,1808,3.762,2055,2.857,2109,4.385,2245,2.454,2294,2.454,2372,2.327,2622,2.574,2788,2.491,2916,5.76,2917,2.726,2918,2.726,2919,3.919,2920,3.281,2921,3.03,2922,3.281,2923,3.281,2924,3.281,2925,3.468,2926,3.281,2927,2.937,2928,3.281,2929,2.726]],["component/35",[6,0.35]],["keyword/35",[]],["title/36",[848,34.474]],["name/36",[731,2.075]],["text/36",[]],["component/36",[6,0.35]],["keyword/36",[]],["title/37-1",[1086,26.387,1445,37.801]],["name/37-1",[]],["text/37-1",[]],["component/37-1",[]],["keyword/37-1",[]],["title/37-2",[524,14.831,702,21.666,837,19.576]],["name/37-2",[]],["text/37-2",[]],["component/37-2",[]],["keyword/37-2",[]],["title/37-3",[2109,50.377]],["name/37-3",[]],["text/37-3",[]],["component/37-3",[]],["keyword/37-3",[]],["title/37-4",[524,14.831,712,27.689,2812,37.033]],["name/37-4",[]],["text/37-4",[]],["component/37-4",[]],["keyword/37-4",[]],["title/37-5",[701,31.679]],["name/37-5",[]],["text/37-5",[]],["component/37-5",[]],["keyword/37-5",[]],["title/37-6",[412,27.741,501,28.235]],["name/37-6",[]],["text/37-6",[]],["component/37-6",[]],["keyword/37-6",[]],["title/37-
17",[6,13.384,524,17.779]],["name/37-7",[]],["text/37-7",[]],["component/37-7",[]],["keyword/37-7",[]],["title/37",[524,22.19]],["name/37",[524,0.738]],["text/37",[6,1.629,9,2.316,20,1.263,23,0.485,24,0.502,30,0.726,32,2.884,34,2.98,35,2.431,38,1.026,40,0.629,41,0.661,50,0.981,51,1.58,69,0.619,70,0.985,74,0.637,75,0.923,81,1.26,82,1.182,90,0.699,98,2.353,99,2.338,101,0.704,109,0.88,111,1.498,119,0.559,120,0.547,122,0.619,125,1.016,126,0.942,133,1.315,140,1.135,146,0.609,147,0.759,153,1.182,154,0.633,156,0.88,157,0.575,159,0.67,160,1.391,164,3.426,168,0.969,174,0.689,175,1.418,178,0.781,179,0.612,185,0.605,188,0.587,190,0.693,194,1.69,197,0.622,198,0.622,199,0.549,205,0.498,210,1.082,211,0.489,215,0.893,223,1.483,229,0.759,234,1.506,239,0.542,241,0.745,243,0.789,251,0.463,255,1.148,261,0.535,269,0.492,279,0.815,285,1.591,288,1.11,289,1.827,300,1.414,301,1.003,303,1.614,307,0.815,310,1.304,311,1.197,315,0.834,324,0.626,347,1.197,351,2.481,363,1.359,371,0.781,372,2.81,374,0.657,377,1.223,379,1.664,383,1.454,392,0.526,395,1.529,404,1.182,410,0.567,411,3.053,412,1.99,413,3.423,416,0.557,418,0.709,424,0.679,429,1.219,437,0.684,438,1.116,439,2.608,443,1,445,1.098,446,1.647,450,2.222,451,0.781,454,1.596,457,1.126,458,0.893,471,0.998,476,0.957,477,1.692,479,1.237,484,1.289,492,1.705,493,0.726,496,2.154,497,0.699,499,1.082,501,3.04,503,0.59,516,2.269,519,1.264,520,0.459,521,0.478,523,0.938,524,3.418,525,2.603,527,1.658,532,0.562,537,0.815,538,0.824,539,3.141,556,1.83,557,0.645,559,1.126,565,0.587,570,0.562,573,2.936,574,0.834,584,0.57,585,1.931,596,0.845,604,0.476,609,1.865,614,0.715,617,0.856,619,1.836,629,2.675,632,1.846,639,0.693,641,0.752,642,1.389,647,0.689,649,2.369,654,2.768,655,1.756,659,1.511,666,1.189,667,0.957,670,0.629,676,1.647,681,0.739,686,1.775,687,1.301,690,0.781,691,0.633,692,1.093,694,0.674,698,0.745,699,1.366,700,0.726,701,3.28,702,3.357,711,0.867,712,3.744,714,0.704,733,1.082,736,0.674,743,0.622,748,0.759,755,0.684,757,0.939,758,0.626,759,0.684,760,0.52,765,0.629,773,0.834,780,1.343,794,0.679,798,0.923,802,2.492,806,2.024,808,1.549,837,1.894,843,0.67,848,1.698,852,0.665,887,1.189,911,1,927,1.461,928,1.664,939,1.053,975,0.856,979,1.189,981,1.378,992,0.699,1031,1.161,1075,1.332,1077,3.534,1079,1.154,1086,3.79,1088,1.245,1089,1.135,1090,2.197,1094,1.245,1096,2.173,1098,0.739,1099,1.432,1113,0.739,1118,0.824,1123,0.773,1132,0.605,1134,2.804,1140,1.692,1146,0.957,1147,0.626,1150,2.432,1155,3.552,1157,0.612,1166,1.614,1175,0.781,1176,1.591,1194,0.699,1195,1.884,1209,0.745,1220,0.806,1226,0.739,1232,0.815,1234,0.824,1240,0.797,1242,1.22,1244,0.797,1247,0.661,1253,0.704,1257,1.546,1258,1.122,1266,0.824,1306,1.664,1314,0.907,1315,0.766,1316,1.446,1318,1.511,1349,1,1445,0.739,1466,4.171,1515,1,1561,1,1583,0.845,1587,1.245,1618,1.792,1627,0.824,1634,1.024,1636,0.684,1637,0.893,1662,0.923,1666,1.591,1727,1.723,1756,1.126,1787,1.83,1815,1.024,1868,0.893,1928,1.418,1960,0.867,2008,1.086,2055,1.024,2057,0.923,2109,1.446,2111,0.88,2112,0.939,2196,0.939,2489,1.126,2612,1.591,2632,0.856,2647,1.024,2693,1.879,2788,1.638,2812,0.867,2865,3.387,2879,1,2930,1.176,2931,1.176,2932,1.176,2933,1.176,2934,1,2935,0.977,2936,1.053,2937,1.345,2938,1.176,2939,1.176,2940,1.176,2941,1.176,2942,1.176,2943,1.345,2944,1.345,2945,0.939,2946,1.345,2947,1.345,2948,1.345,2949,1.345,2950,1.345,2951,1.243,2952,1.345]],["component/37",[6,0.35]],["keyword/37",[]],["title/38-1",[392,26.93,671,26.709]],["name/38-1",[]],["text/38-1",[]],["component/38-1",[]],["keyword/38-1",[]],["title/38-2",[521,24.467,2953,53.891]],["name/38-2",[]],["text/38-2",[]],["component/38-2",[]],["keyword/38-2",[]],["title/38",[356,31.147,357,39.956]],["name/38",[356,1.292]],["text/38",[6,0.46,9,2.779,20,1.211,23,1.472,35,3.192,50,0.941,57,3.912,73,1.468,81,4.052,82,1.134,90,5.488,99,0.747,111,1.038,120,0.962,142,1.685,153,1.134,170,1.127,172,1.347,186,2.17,190,2.105,198,1.095,205,0.876,211,1.483,221,1.022,239,1.645,251,0.815,269,3.1,284,1.853,289,1.022,312,0.886,347,2.77,356,3.832,357,1.374,374,2.629,376,2.549,377,2.293,392,2.827,407,3.218,411,0.682,413,2.706,417,1.837,429,1.456,446,1.969,450,1.065,454,0.893,463,1.956,471,1.652,476,1.685,483,1.72,484,0.893,489,2.17,520,2.183,521,3.906,532,0.989,535,1.853,568,1.899,570,0.989,585,1.597,612,1.36,642,0.962,649,1.817,666,1.141,670,1.107,671,2.485,672,3.517,686,1.713,698,1.311,702,1.54,703,1.178,713,1.417,725,2.596,736,1.186,751,2.218,782,1.3,810,3.033,816,1.238,822,1.878,837,1.392,840,1.248,848,0.95,924,1.347,927,1.012,931,1.095,1045,1.571,1077,2.252,1086,3.589,1089,1.878,1092,1.548,1126,2.337,1133,4.878,1134,3.989,1135,1.853,1176,2.633,1201,3.19,1216,3.384,1241,2.302,1254,2.394,1272,1.433,1290,2.006,1294,2.801,1300,1.374,1311,1.596,1341,1.335,1357,1.238,1366,1.468,1375,1.45,1443,2.07,1463,3.256,1473,4.003,1488,1.374,1500,3.552,1502,1.506,1517,1.347,1621,2.02,1628,1.486,1647,1.571,1650,1.258,1658,3.579,1664,2.419,1769,4.963,1967,1.653,1988,7.307,2257,5.252,2259,2.188,2260,6.294,2263,2.188,2287,5.873,2289,2.188,2291,3.034,2294,1.548,2299,4.977,2325,4.348,2392,3.034,2611,3.418,2617,4.508,2632,2.597,2644,2.671,2646,1.571,2849,1.258,2854,7.092,2935,4.654,2953,5.658,2954,3.57,2955,4.473,2956,2.07,2957,2.367,2958,2.07,2959,2.367,2960,7.562,2961,1.911,2962,1.911,2963,5.363,2964,2.07,2965,2.367,2966,3.297,2967,2.367,2968,3.57,2969,3.418,2970,5.363,2971,3.774,2972,1.486,2973,2.367,2974,3.57,2975,2.367,2976,2.367,2977,2.07,2978,3.57,2979,2.07,2980,2.367,2981,2.07,2982,2.07,2983,2.07,2984,2.07,2985,2.07,2986,2.07,2987,2.07]],["component/38",[6,0.35]],["keyword/38",[]],["title/39-1",[1093,50.022,1898,45.711]],["name/39-1",[]],["text/39-1",[]],["component/39-1",[]],["keyword/39-1",[]],["title/39-2",[1093,41.728,1390,37.564,1898,38.131]],["name/39-2",[]],["text/39-2",[]],["component/39-2",[]],["keyword/39-2",[]],["title/39",[6,13.384,383,29.303]],["name/39",[383,1.216]],["text/39",[4,1.686,6,2.336,9,1.553,32,1.364,35,2.213,70,1.764,74,2.091,85,3.209,86,5.593,92,2.645,101,2.311,111,
11.936,128,4.593,143,3.03,144,4.72,146,1.998,147,2.491,151,3.209,152,3.209,168,1.735,170,2.104,173,1.927,239,1.78,251,1.521,261,2.708,262,2.706,286,3.097,301,2.768,312,1.653,327,2.347,334,2.031,347,2.911,351,1.149,356,3.081,357,2.563,366,1.889,375,2.031,377,1.581,383,5.35,392,1.728,404,2.116,408,3.205,411,1.272,413,1.411,422,3.992,429,2.429,436,2.979,437,2.245,438,1.998,439,1.641,446,4.006,454,1.666,456,2.739,459,3.677,475,3.698,479,2.214,492,1.78,499,1.936,501,1.811,503,1.936,519,1.634,524,1.758,527,2.143,532,1.845,548,3.952,557,2.116,581,2.706,583,2.589,585,1.728,589,2.214,600,4.331,633,2.563,634,2.468,649,1.49,686,1.853,714,3.563,719,3.567,729,2.889,744,3.084,768,4.755,769,4.671,771,3.567,778,2.979,790,4.686,802,2.229,837,1.506,1077,2.922,1079,2.067,1084,2.425,1093,3.209,1099,2.563,1103,3.144,1130,3.364,1131,4.454,1198,2.706,1223,3.707,1290,2.17,1377,3.992,1379,3.457,1384,3.862,1615,2.979,1706,3.567,1890,3.862,1985,4.082,1986,5.498,1987,3.457,2159,3.698,2276,5.286,2428,4.082,2521,3.698,2849,2.347,2934,5.059,2988,4.082,2989,4.082,2990,4.082,2991,5.701,2992,3.457,2993,3.698,2994,4.082,2995,4.082,2996,4.082,2997,4.082,2998,4.082,2999,6.293,3000,4.082]],["component/39",[6,0.35]],["keyword/39",[]],["title/40-1",[2787,57.961]],["name/40-1",[]],["text/40-1",[]],["component/40-1",[]],["keyword/40-1",[]],["title/40-2",[35,22.889]],["name/40-2",[]],["text/40-2",[]],["component/40-2",[]],["keyword/40-2",[]],["title/40-3",[35,22.889]],["name/40-3",[]],["text/40-3",[]],["component/40-3",[]],["keyword/40-3",[]],["title/40-4",[3001,61.159]],["name/40-4",[]],["text/40-4",[]],["component/40-4",[]],["keyword/40-4",[]],["title/40-5",[503,30.183,1194,35.755]],["name/40-5",[]],["text/40-5",[]],["component/40-5",[]],["keyword/40-5",[]],["title/40",[363,22.844,1304,33.33,1305,32.091]],["name/40",[363,0.454,1304,0.663,1305,0.638]],["text/40",[9,2.393,27,3.063,32,2.883,35,2.487,40,3.184,78,3.769,81,2.509,119,2.83,120,2.767,140,3.13,153,3.261,194,2.719,251,2.344,351,3.368,363,5.055,365,3.838,411,2.69,417,4.201,420,5.159,440,3.063,446,3.281,456,4.22,487,4.752,491,2.911,499,4.093,520,3.632,556,3.645,576,3.645,584,3.954,589,3.412,590,4.778,604,2.41,649,2.297,672,3.737,700,3.675,709,4.294,751,2.804,837,2.32,924,5.313,1199,5.378,1238,4.668,1304,5.418,1305,5.216,1359,4.945,1624,5.183,2009,5.951,2612,4.389,3002,5.951,3003,6.291]],["component/40",[6,0.35]],["keyword/40",[]],["title/41-1",[1129,58.94]],["name/41-1",[]],["text/41-1",[]],["component/41-1",[]],["keyword/41-1",[]],["title/41-2",[743,31.845,1216,27.503]],["name/41-2",[]],["text/41-2",[]],["component/41-2",[]],["keyword/41-2",[]],["title/41-3",[366,29.444,639,35.494]],["name/41-3",[]],["text/41-3",[]],["component/41-3",[]],["keyword/41-3",[]],["title/41-4",[159,42.783]],["name/41-4",[]],["text/41-4",[]],["component/41-4",[]],["keyword/41-4",[]],["title/41-5",[649,23.232,887,33.193]],["name/41-5",[]],["text/41-5",[]],["component/41-5",[]],["keyword/41-5",[]],["title/41-6",[366,29.444,639,35.494]],["name/41-6",[]],["text/41-6",[]],["component/41-6",[]],["keyword/41-6",[]],["title/41-7",[639,35.494,3004,57.64]],["name/41-7",[]],["text/41-7",[]],["component/41-7",[]],["keyword/41-7",[]],["title/41-8",[1375,42.181,2839,53.891]],["name/41-8",[]],["text/41-8",[]],["component/41-8",[]],["keyword/41-8",[]],["title/41-9",[521,17.507,743,22.786,1375,30.182,3005,41.244]],["name/41-9",[]],["text/41-9",[]],["component/41-9",[]],["keyword/41-9",[]],["title/41-10",[411,14.193,1086,18.881,1129,33.791,3006,45.532]],["name/41-10",[]],["text/41-10",[]],["component/41-10",[]],["keyword/41-10",[]],["title/41-11",[519,21.253,1416,44.955,1417,44.955]],["name/41-11",[]],["text/41-11",[]],["component/41-11",[]],["keyword/41-11",[]],["title/41",[366,36.749]],["name/41",[366,1.222]],["text/41",[4,0.597,6,1.691,9,1.363,19,1.97,20,1.448,23,1.714,24,1.445,27,2.476,32,0.483,35,2.855,38,1.611,42,1.309,50,1.126,51,0.723,62,1.008,70,1.899,74,0.74,81,1.429,88,1.008,90,2.469,98,0.662,99,0.493,109,3.11,111,0.686,119,1.177,121,1.353,122,0.719,125,0.644,126,0.597,127,0.844,133,1.089,140,1.783,144,1.324,146,0.708,153,0.749,156,1.023,157,2.033,159,2.74,162,1.695,170,1.846,172,0.89,173,0.682,185,1.744,190,0.806,193,0.97,198,0.723,199,1.155,204,0.859,214,0.831,220,0.548,221,1.222,224,0.995,234,0.689,239,1.916,246,0.851,255,0.728,256,1.428,259,0.882,261,2.669,268,0.851,275,1.348,282,1.136,286,0.711,289,2.053,292,0.812,301,0.636,304,0.937,305,3.11,306,0.8,311,0.759,314,0.759,318,0.89,323,0.947,326,0.812,328,1.956,334,0.719,336,0.982,343,0.899,344,0.818,356,0.708,366,5.305,375,0.719,377,0.56,383,2.342,392,0.612,395,0.7,404,1.857,406,2.759,407,2.45,410,2.32,411,2.663,413,2.441,416,2.777,417,1.273,420,2.139,430,0.825,439,0.581,440,0.704,445,1.26,450,0.704,451,0.908,454,0.59,463,2.637,466,0.851,471,1.145,490,1.611,491,0.669,492,0.63,493,1.528,494,0.917,496,0.682,497,0.812,499,0.686,501,0.641,503,1.241,506,1.677,507,0.874,508,1.023,509,0.795,512,0.719,514,1.038,519,1.759,521,3.091,522,0.818,523,1.076,526,1.023,532,1.182,536,0.937,544,1.073,555,1.092,557,0.749,562,1.162,565,1.234,568,0.728,585,0.612,587,1.726,591,1.023,592,1.008,595,0.958,596,1.777,600,0.995,604,1.002,609,0.689,612,0.899,613,1.941,619,0.679,622,1.092,633,0.908,637,0.844,639,3.939,642,1.575,649,3.342,664,3.955,666,0.754,676,0.754,682,2.681,683,1.055,691,0.736,702,2.319,718,2.759,724,1.581,726,0.851,741,0.764,743,3.332,749,0.789,751,1.166,772,1.734,782,2.128,786,0.851,789,2.11,794,1.428,806,0.927,808,1.777,822,0.719,829,1.986,837,2.737,878,0.947,887,1.869,912,1.851,927,0.669,931,2.199,934,1.162,963,1.677,968,1.008,994,1.191,1019,0.812,1031,0.736,1043,1.092,1075,1.528,1077,2.162,1083,1.092,1085,0.947,1086,1.085,1090,0.812,1091,2.567,1094,1.956,1106,
10.958,1113,1.554,1120,1.038,1122,3.069,1129,5.965,1130,2.155,1134,2.4,1151,0.838,1157,0.711,1160,1.023,1162,0.947,1170,0.844,1176,1.008,1194,1.47,1198,0.958,1209,0.866,1215,1.438,1216,3.348,1242,0.774,1247,0.768,1257,0.708,1260,2.292,1294,1.941,1298,0.874,1299,1.073,1309,0.795,1315,1.611,1338,1.162,1343,1.695,1349,2.103,1364,1.038,1375,2.375,1416,4.307,1417,1.224,1437,0.97,1439,3.066,1463,0.795,1497,0.859,1499,1.038,1512,0.927,1522,2.573,1538,0.947,1562,0.97,1576,1.695,1578,1.263,1589,1.554,1621,1.917,1626,0.947,1658,0.874,1666,1.825,1715,1.092,1722,2.879,1754,1.113,1783,1.008,1983,1.092,2007,1.263,2088,1.008,2111,1.023,2253,1.055,2332,1.976,2372,0.97,2500,1.055,2642,3.034,2672,1.162,2741,2.285,2819,1.263,2820,1.309,2821,1.309,2822,1.309,2839,4.307,2840,6.623,2863,1.263,2869,7.998,2874,1.073,2893,2.103,2919,1.023,2974,1.368,2993,3.245,3004,2.369,3005,3.245,3007,1.368,3008,1.368,3009,1.445,3010,1.445,3011,1.445,3012,1.445,3013,1.309,3014,1.445,3015,1.445,3016,2.616,3017,1.445,3018,1.445,3019,1.445,3020,1.445,3021,1.445,3022,1.445,3023,1.445,3024,1.368,3025,1.445,3026,1.445,3027,1.445,3028,2.616,3029,1.445,3030,1.445,3031,3.582,3032,1.162,3033,1.445,3034,1.224,3035,1.445,3036,1.445,3037,1.445,3038,1.445,3039,1.445,3040,1.445,3041,1.445,3042,1.445,3043,1.445,3044,1.445,3045,1.445,3046,1.445,3047,1.445,3048,1.445,3049,1.445,3050,1.445,3051,1.445,3052,1.445,3053,1.445,3054,2.616,3055,1.445]],["component/41",[6,0.35]],["keyword/41",[]],["title/42-1",[2787,57.961]],["name/42-1",[]],["text/42-1",[]],["component/42-1",[]],["keyword/42-1",[]],["title/42-2",[35,22.889]],["name/42-2",[]],["text/42-2",[]],["component/42-2",[]],["keyword/42-2",[]],["title/42-3",[35,22.889]],["name/42-3",[]],["text/42-3",[]],["component/42-3",[]],["keyword/42-3",[]],["title/42-4",[3001,61.159]],["name/42-4",[]],["text/42-4",[]],["component/42-4",[]],["keyword/42-4",[]],["title/42-5",[503,30.183,1194,35.755]],["name/42-5",[]],["text/42-5",[]],["component/42-5",[]],["keyword/42-5",[]],["title/42-6",[848,34.474]],["name/42-6",[]],["text/42-6",[]],["component/42-6",[]],["keyword/42-6",[]],["title/42",[363,22.844,411,16.546,590,29.396]],["name/42",[363,0.454,411,0.329,590,0.585]],["text/42",[6,1.965,9,2.693,32,2.365,35,3.204,81,2.823,120,3.113,127,4.135,146,3.464,251,2.637,305,5.009,351,3.342,363,4.785,365,4.318,401,4.638,411,3.466,423,5.45,440,3.446,446,3.692,499,4.431,520,3.856,584,3.244,589,5.066,590,6.157,604,2.712,619,3.324,626,5.253,649,2.584,837,2.61,1157,3.483,1199,3.865,1201,4.537,1586,4.101,1918,5.084,1950,6.184,2768,5.832,3056,6.696]],["component/42",[6,0.35]],["keyword/42",[]],["title/43-1",[377,20.557,484,21.666,634,32.091]],["name/43-1",[]],["text/43-1",[]],["component/43-1",[]],["keyword/43-1",[]],["title/43-2",[1100,48.453]],["name/43-2",[]],["text/43-2",[]],["component/43-2",[]],["keyword/43-2",[]],["title/43-3",[407,30.654,634,38.47]],["name/43-3",[]],["text/43-3",[]],["component/43-3",[]],["keyword/43-3",[]],["title/43-4",[484,25.973,837,23.467]],["name/43-4",[]],["text/43-4",[]],["component/43-4",[]],["keyword/43-4",[]],["title/43-5",[375,31.666,634,38.47]],["name/43-5",[]],["text/43-5",[]],["component/43-5",[]],["keyword/43-5",[]],["title/43",[634,48.014]],["name/43",[634,1.596]],["text/43",[1,1.863,3,5.998,6,1.554,9,2.519,20,1.436,32,2.844,35,2.575,38,1.166,70,2.862,74,1.328,81,2.252,82,1.344,90,1.457,99,0.885,102,1.762,120,3.248,133,1.08,144,1.313,154,2.221,159,1.397,164,1.189,168,1.854,173,3.125,186,1.491,194,2.441,198,1.298,204,2.592,211,1.019,235,2.266,256,1.416,269,1.727,275,1.336,306,1.436,307,1.699,311,1.361,312,1.05,326,1.457,327,5.136,328,1.416,336,1.762,366,2.019,374,4.495,375,2.81,376,2.892,377,1.69,383,1.194,388,1.479,392,1.097,396,2.196,407,4.627,408,1.32,410,1.99,413,2.289,416,2.528,417,2.124,420,2.749,429,1.683,438,1.269,449,1.397,456,2.927,459,2.549,463,2.262,471,1.91,484,4.031,491,2.019,492,1.902,496,2.059,501,1.936,503,2.069,521,2.546,523,1.067,524,1.578,527,2.29,533,2.085,537,1.699,550,2.137,563,1.893,568,4.283,573,1.87,582,1.554,585,1.097,587,2.102,595,1.719,601,1.719,633,3.546,634,6.995,642,1.141,649,0.947,666,2.276,692,1.243,695,2.039,697,1.699,702,1.781,703,3.567,712,1.353,714,1.468,742,2.764,772,1.719,778,6.521,783,1.457,808,1.762,837,3.543,912,1.835,964,3.595,992,1.457,1022,2.266,1079,1.313,1088,1.416,1089,2.171,1095,2.137,1100,1.582,1117,1.436,1126,2.049,1131,1.835,1170,1.51
15,1171,1.959,1172,4.54,1207,1.528,1216,1.886,1256,1.662,1270,2.266,1298,1.568,1323,1.925,1341,1.582,1343,1.68,1420,1.997,1512,2.796,1558,2.085,1589,1.541,1621,2.335,1630,2.266,1893,2.039,1977,1.662,1995,2.137,2057,1.925,2059,1.612,2268,1.959,2336,6.69,2395,5.998,2658,1.835,2846,6.691,2849,1.491,2882,2.196,2893,2.085,2904,3.044,2935,4.439,3007,2.454,3057,2.593,3058,2.806,3059,4.782,3060,2.454,3061,4.363,3062,3.695,3063,2.593,3064,2.593,3065,2.806,3066,4.72,3067,2.806,3068,2.806,3069,4.72,3070,2.806,3071,2.806,3072,2.593,3073,2.593,3074,2.593,3075,2.593,3076,2.593,3077,2.593,3078,2.593,3079,2.593,3080,2.593,3081,2.593,3082,2.806]],["component/43",[6,0.35]],["keyword/43",[]],["title/44-1",[584,29.163,604,24.38]],["name/44-1",[]],["text/44-1",[]],["component/44-1",[]],["keyword/44-1",[]],["title/44-2",[520,23.467,604,24.38]],["name/44-2",[]],["text/44-2",[]],["component/44-2",[]],["keyword/44-2",[]],["title/44-3",[604,24.38,760,26.601]],["name/44-3",[]],["text/44-3",[]],["component/44-3",[]],["keyword/44-3",[]],["title/44-4",[151,50.022,239,27.741]],["name/44-4",[]],["text/44-4",[]],["component/44-4",[]],["keyword/44-4",[]],["title/44-5",[491,29.444,604,24.38]],["name/44-5",[]],["text/44-5",[]],["component/44-5",[]],["keyword/44-5",[]],["title/44",[604,30.428]],["name/44",[604,1.012]],["text/44",[4,0.954,6,1.452,9,2.336,24,2.092,27,2.524,29,2.001,32,3.599,35,2.169,38,1.778,41,1.228,50,0.994,69,2.58,74,1.183,77,1.422,84,2.758,92,1.496,98,1.058,122,1.149,124,1.236,133,0.961,138,1.349,143,5.123,149,1.589,151,1.815,173,1.09,199,1.02,205,0.925,211,0.908,225,1.956,231,1.372,239,1.007,261,2.642,275,1.19,277,1.531,288,1.124,289,1.079,292,1.298,301,1.016,310,0.954,312,0.935,324,1.162,343,3.817,344,4.555,347,1.499,351,2.119,355,1.22,357,1.45,360,1.745,375,1.149,395,1.118,408,1.176,411,3.101,412,2.26,413,1.366,429,2.001,439,0.928,444,1.857,445,1.905,454,0.943,471,1.731,473,1.149,484,3.072,489,1.328,491,1.829,492,1.007,496,2.898,519,1.583,520,2.264,521,1.52,522,1.307,523,0.95,524,2.371,565,3.552,570,1.787,582,1.384,584,4.21,585,2.598,587,1.112,603,1.549,604,4.019,613,1.714,619,2.434,649,3.235,669,1.903,671,2.176,672,1.372,673,5.059,702,1.614,726,1.36,740,1.589,760,3.841,765,1.169,780,3.054,781,1.866,823,1.396,829,2.774,837,2.546,852,1.236,887,1.205,907,1.634,922,1.317,931,1.156,1011,1.317,1015,3.554,1045,1.659,1057,1.183,1077,1.972,1101,1.634,1115,3.09,1116,4.426,1122,1.143,1126,1.084,1151,2.291,1162,1.513,1206,1.685,1215,2.851,1216,2.983,1231,1.778,1236,3.478,1253,1.307,1255,2.934,1257,4.869,1258,5.301,1260,3.203,1266,2.621,1298,1.396,1325,1.946,1337,1.48,1345,3.454,1347,1.745,1350,2.885,1357,1.307,1495,1.659,1502,1.589,1522,1.659,1572,1.714,1576,3.359,1606,1.815,1636,2.851,1671,1.611,1696,1.685,1850,3.783,2243,1.659,2400,1.778,2401,1.778,2402,1.778,2605,1.815,2622,4.556,2803,1.778,2810,1.956,3083,2.185,3084,2.185,3085,3.741,3086,2.185,3087,2.185,3088,3.741,3089,3.741,3090,2.185,3091,2.018,3092,2.185,3093,2.185,3094,2.185,3095,2.185,3096,2.185,3097,2.498,3098,2.498,3099,2.498,3100,2.092,3101,2.092,3102,2.185,3103,2.498,3104,3.741,3105,2.018]],["component/44",[6,0.35]],["keyword/44",[]],["title/45-1",[2787,57.961]],["name/45-1",[]],["text/45-1",[]],["component/45-1",[]],["keyword/45-1",[]],["title/45-2",[35,22.889]],["name/45-2",[]],["text/45-2",[]],["component/45-2",[]],["keyword/45-2",[]],["title/45-3",[35,22.889]],["name/45-3",[]],["text/45-3",[]],["component/45-3",[]],["keyword/45-3",[]],["title/45-4",[3001,61.159]],["name/45-4",[]],["text/45-4",[]],["component/45-4",[]],["keyword/45-4",[]],["title/45-5",[503,30.183,1194,35.755]],["name/45-5",[]],["text/45-5",[]],["component/45-5",[]],["keyword/45-5",[]],["title/45-6",[848,34.474]],["name/45-6",[]],["text/45-6",[]],["component/45-6",[]],["keyword/45-6",[]],["title/45",[363,22.844,589,28.788,590,29.396]],["name/45",[363,0.454,589,0.573,590,0.585]],["text/45",[6,1.394,9,3.4,35,2.915,81,2.643,84,4.622,120,3.931,139,3.022,153,4.634,193,4.445,255,3.335,305,4.689,351,3.183,363,4.866,365,4.042,383,3.051,395,4.329,411,2.786,417,4.352,420,4.352,428,4.392,438,3.243,446,3.456,499,4.24,519,2.653,520,3.73,536,4.293,584,3.036,589,4.848,590,5.602,604,2.538,649,2.419,741,3.5,751,2.953,837,2.443,924,4.08,1199,3.618,1201,4.247,1918,4.759,3106,6.268,3107,5.788,3108,6.268,3109,4.835,3110,4.835,3111,6.002,3112,6.268,3113,6.268,3114,6.268]],["component/45",[6,0.35]],["keyword/45",[]],["title/46",[32,21.264,411,19.835]],["name/46",[32,0.504,411,0.47]],["text/46",[6,0.929,9,2.543,23,2.226,24,1.062,32,4.039,35,1.926,41,1.399,69,1.31,73,1.766,77,1.621,90,3.207,99,1.948,111,2.707,113,1.479,119,1.987,126,1.824,144,1.332,146,2.162,150,2.168,160,1.606,168,4.218,185,1.281,194,1.137,199,1.951,211,1.034,220,0.998,25
15,1.325,257,1.744,269,2.26,288,1.281,300,1.978,301,1.157,310,1.824,318,1.621,344,1.49,347,2.824,351,1.244,374,1.39,376,1.348,377,1.711,395,2.139,399,1.537,400,1.669,408,1.34,411,3.232,413,0.91,418,1.501,425,1.953,429,1.016,439,1.775,446,1.373,450,1.281,459,1.537,462,1.591,477,1.953,484,2.33,485,2.229,486,2.229,490,1.621,491,1.218,492,1.926,496,1.242,511,1.766,519,1.054,520,2.747,521,1.012,523,1.083,524,2.081,531,2.831,565,1.242,568,1.325,573,1.893,576,1.525,584,3.063,587,1.268,604,2.187,619,1.236,642,2.51,649,2.44,654,1.862,666,1.373,668,1.891,692,1.261,703,1.418,733,1.248,742,4.194,751,1.173,760,3.371,781,2.694,789,1.55,791,1.295,802,1.437,829,1.189,837,1.629,840,1.501,843,2.379,848,1.142,852,4.315,883,3.173,912,1.862,927,1.218,931,1.317,1015,2.953,1075,1.537,1077,3.067,1085,1.724,1086,1.832,1088,1.437,1089,1.31,1115,2.223,1116,2.064,1126,4.024,1132,1.281,1156,1.513,1206,3.223,1215,2.429,1216,4.697,1236,8.042,1257,2.794,1258,1.295,1260,1.373,1267,3.584,1282,1.766,1350,1.921,1352,1.744,1364,1.891,1456,4.1,1463,1.447,1497,1.563,1500,2.348,1636,2.429,1647,1.891,1650,1.513,1665,2.58,1769,1.788,1892,1.811,1943,2.229,1988,1.862,1996,1.724,2254,2.384,2257,2.069,2375,2.632,2389,2.069,2482,3.39,2849,1.513,2874,1.953,2972,1.788,3115,2.49,3116,2.847,3117,2.49,3118,2.384,3119,2.49,3120,2.49,3121,2.49,3122,2.168]],["component/46",[6,0.35]],["keyword/46",[]],["title/47-1",[351,17.916,355,33.614]],["name/47-1",[]],["text/47-1",[]],["component/47-1",[]],["keyword/47-1",[]],["title/47-2",[671,26.709,1194,35.755]],["name/47-2",[]],["text/47-2",[]],["component/47-2",[]],["keyword/47-2",[]],["title/47-3",[351,14.945,532,23.987,671,22.28]],["name/47-3",[]],["text/47-3",[]],["component/47-3",[]],["keyword/47-3",[]],["title/47",[355,41.953]],["name/47",[355,1.395]],["text/47",[4,1.573,6,1.254,7,1.126,13,1.349,23,3.735,24,1.537,32,1.993,35,2.602,50,0.951,69,1.1,70,0.956,77,1.361,81,1.519,83,1.292,90,1.242,98,1.013,99,2.509,101,1.252,113,2.14,120,2.206,133,1.586,138,1.292,140,1.895,141,1.337,142,1.703,144,1.119,146,1.864,149,1.522,159,1.191,162,4.762,163,4.357,168,0.94,170,1.139,173,1.043,175,1.375,179,1.088,194,0.956,198,1.906,205,2.009,211,1.972,239,4.698,256,2.08,275,1.139,288,1.076,301,0.972,304,1.433,310,0.913,312,0.895,315,1.483,318,2.345,324,1.917,334,1.895,347,0.838,351,3.126,355,6.18,374,1.168,377,1.475,383,1.018,393,3.708,401,1.449,410,2.72,411,2.096,413,2.324,416,0.99,417,1.076,420,1.076,429,2.301,430,1.261,439,1.531,440,2.443,446,1.987,447,1.502,450,1.076,458,1.588,459,1.292,466,1.302,471,1.668,491,1.023,492,2.187,494,2.416,496,1.043,497,1.242,498,2.003,499,1.807,503,1.049,509,2.094,511,1.483,520,2.71,521,2.826,522,1.252,524,1.666,531,1.417,532,2.695,533,5.908,534,7.645,542,1.375,543,1.872,544,1.641,557,1.974,564,1.466,565,1.797,568,1.917,570,0.999,587,1.065,589,3.986,601,1.466,604,0.847,609,1.816,610,1.822,617,1.522,639,1.233,649,1.39,671,4.2,681,1.313,700,1.292,702,2.048,714,3.806,731,4.688,741,2.012,749,1.207,751,0.985,752,1.542,755,1.216,760,0.924,761,1.613,763,2.779,765,1.119,774,2.262,782,1.313,802,2.08,829,0.999,835,1.67,922,1.261,927,1.762,931,1.106,932,1.613,948,1.822,1019,1.242,1031,1.126,1046,1.777,1077,1.909,1086,0.917,1107,1.613,1120,1.588,1124,1.132,1126,1.038,1134,1.207,1137,1.822,1207,1.302,1209,1.325,1219,1.349,1223,1.302,1287,2.441,1303,1.349,1305,1.337,1309,1.216,1325,1.088,1345,1.932,1349,1.777,1380,1.522,1407,2.092,1437,4.93,1463,4.572,1500,1.175,1520,1.932,1570,1.641,1571,1.932,1579,1.822,1657,1.483,1665,1.292,1863,2.211,1938,2.496,2005,2.003,2144,1.822,2297,2.211,2392,1.777,2420,5.017,2464,1.777,2503,2.211,2662,1.932,2684,1.703,2838,1.738,2849,1.271,2935,3.944,2979,2.092,3123,2.392,3124,2.211,3125,2.392,3126,2.392,3127,2.392,3128,4.12,3129,2.392,3130,2.092,3131,2.392,3132,2.211,3133,2.392,3134,2.392,3135,2.392,3136,2.392,3137,2.392,3138,2.392,3139,2.392,3140,2.392]],["component/47",[6,0.35]],["keyword/47",[]],["title/48",[99,21.722,411,19.835]],["name/48",[99,0.515,411,0.47]],["text/48",[0,3.023,4,2.9,6,1.477,20,3.888,23,1.84,32,1.576,35,1.359,70,2.039,99,4.124,111,2.237,120,2.074,156,3.338,157,2.183,159,2.541,164,2.162,234,2.249,239,2.056,301,2.074,310,1.948,347,2.662,392,1.996,395,2.284,411,3.593,413,2.427,429,1.82,445,2.272,451,2.962,454,1.925,484,3.793,492,3.061,496,2.226,519,1.889,524,2.776,544,3.5,545,3.291,556,2.733,573,2.021,574,3.164,582,2.826,619,3.939,632,2.226,649,1.722,701,1.881,702,2.866,742,3.437,758,4.222,760,3.506,781,5.231,837,1.739,843,2.541,852,3.757,1015,3.705,1019,2.65,1077,2.671,1086,3.478,1089,2.347,1126,3.297,1154,3.023,1157,2.321,1183,2.778,1216,3.625,1236,3.164,1241,2.878,1244,3.023,1272,4.601,1303,2.878,1307,3.442,1323,3.5,
11586,2.733,1636,4.612,1681,4.273,1918,3.388,2204,3.127,2376,3.5,2389,3.708,2680,5.124,2849,2.712,2955,5.305,3141,4.717,3142,4.462,3143,4.717,3144,4.717]],["component/48",[6,0.35]],["keyword/48",[]],["title/49-1",[34,31.147,2929,50.022]],["name/49-1",[]],["text/49-1",[]],["component/49-1",[]],["keyword/49-1",[]],["title/49-2",[34,25.983,794,28.986,1132,25.843]],["name/49-2",[]],["text/49-2",[]],["component/49-2",[]],["keyword/49-2",[]],["title/49-3",[413,27.449]],["name/49-3",[]],["text/49-3",[]],["component/49-3",[]],["keyword/49-3",[]],["title/49",[99,21.722,760,26.601]],["name/49",[99,0.515,760,0.631]],["text/49",[6,1.32,32,1.36,34,5.183,35,1.173,50,1.751,51,2.036,99,3.5,120,1.789,144,3.88,157,2.905,168,1.729,170,2.097,228,2.192,229,2.482,234,1.94,239,2.737,261,3.298,269,1.611,284,3.446,307,2.666,326,2.286,347,1.542,376,5.947,377,2.968,387,3.581,392,1.722,411,1.268,412,3.341,413,3.218,422,2.581,424,2.222,438,1.992,446,3.275,484,3.8,496,1.92,521,2.414,524,1.137,536,2.636,573,2.69,642,2.761,649,1.486,660,2.417,664,5.118,668,2.923,692,1.95,702,1.661,742,1.992,743,2.036,745,2.697,760,3.892,765,3.178,773,2.73,801,2.73,802,2.222,829,1.839,837,2.315,840,2.321,843,2.192,848,1.766,878,2.666,945,2.97,963,5.967,1015,2.773,1019,2.286,1045,2.923,1079,2.06,1090,3.527,1096,2.8,1112,2.581,1126,1.911,1132,1.981,1134,3.428,1165,2.764,1166,2.879,1175,2.555,1176,2.839,1215,2.237,1216,1.759,1236,5.142,1247,2.163,1254,2.581,1267,2.555,1420,3.133,1490,2.438,1495,2.923,1621,4.101,1669,7.609,1670,7.884,1671,2.839,1783,2.839,2196,3.074,2376,3.02,2392,5.047,2693,3.353,2917,3.199,2918,3.199,2927,3.446,2929,6.025,3145,3.85,3146,3.85,3147,5.317,3148,5.047,3149,3.686,3150,4.069]],["component/49",[6,0.35]],["keyword/49",[]],["title/50-1",[1517,48.908]],["name/50-1",[]],["text/50-1",[]],["component/50-1",[]],["keyword/50-1",[]],["title/50-2",[3151,71.94]],["name/50-2",[]],["text/50-2",[]],["component/50-2",[]],["keyword/50-2",[]],["title/50-3",[355,33.614,393,39.563]],["name/50-3",[]],["text/50-3",[]],["component/50-3",[]],["keyword/50-3",[]],["title/50",[2482,37.801,2643,45.711]],["name/50",[2482,1.568]],["text/50",[0,2.151,6,1.134,9,2.572,19,1.845,23,2.638,29,1.699,32,3.183,35,2.445,70,2.331,81,1.338,99,2.308,104,2.842,111,1.592,121,1.268,122,1.67,123,2.224,126,1.386,133,2.815,157,1.553,162,2.174,173,2.545,186,1.929,199,1.482,204,1.993,210,2.558,211,2.119,228,2.905,234,1.6,239,2.351,255,1.689,261,1.444,275,1.729,289,1.568,292,1.886,301,2.372,323,2.199,336,2.28,344,1.9,347,2.045,355,3.572,356,1.643,357,2.107,376,1.719,377,1.3,383,1.545,410,1.531,411,2.645,413,1.864,420,2.626,428,3.575,429,2.609,436,2.449,437,2.966,439,1.349,449,1.808,450,1.634,453,2.375,459,1.96,471,2.361,484,1.37,493,1.96,507,2.029,516,2.411,520,1.238,521,2.074,524,2.995,565,2.545,566,2.842,587,1.617,649,3.098,671,2.264,689,2.28,692,1.608,701,1.338,704,1.9,714,1.9,736,1.82,739,3.887,740,4.654,760,1.403,772,3.575,786,1.977,802,2.945,813,6.413,822,1.67,829,4.095,891,2.765,927,1.553,931,5.115,1015,1.482,1031,1.709,1057,1.719,1075,1.96,1077,2.052,1079,1.699,1120,2.411,1125,2.698,1126,3.637,1131,2.375,1183,1.977,1215,1.845,1216,2.331,1231,4.153,1260,1.75,1286,2.535,1313,2.029,1314,3.936,1437,2.251,1454,2.584,1463,2.966,1517,6.831,1569,2.698,1587,1.832,1621,2.886,1637,3.874,1769,2.28,1780,2.28,1951,2.842,2059,2.086,2185,2.698,2264,3.175,2270,3.175,2295,3.175,2410,2.842,2482,5.658,2605,2.638,2643,3.874,3151,8.208,3152,3.356,3153,3.356,3154,3.356,3155,3.356,3156,5.393,3157,3.356,3158,3.356,3159,3.356,3160,3.356]],["component/50",[6,0.35]],["keyword/50",[]],["title/51-1",[351,17.916,532,28.755]],["name/51-1",[]],["text/51-1",[]],["component/51-1",[]],["keyword/51-1",[]],["title/51-2",[66,49.002,413,21.993]],["name/51-2",[]],["text/51-2",[]],["component/51-2",[]],["keyword/51-2",[]],["title/51-3",[126,14.641,348,26.307,351,15.865,360,26.781,532,16.019]],["name/51-3",[]],["text/51-3",[]],["component/51-3",[]],["keyword/51-3",[]],["title/51-4",[2916,57.961]],["name/51-4",[]],["text/51-4",[]],["component/51-4",[]],["keyword/51-4",[]],["title/51-5",[642,27.985,3161,53.891]],["name/51-5",[]],["text/51-5",[]],["component/51-5",[]],["keyword/51-5",[]],["title/51-6",[363,27.385,642,27.985]],["name/51-6",[]],["text/51-6",[]],["component/51-6",[]],["keyword/51-6",[]],["title/51",[288,25.843,351,14.945,560,43.738]],["name/51",[288,0.734,351,0.425]],["text/51",[6,1.11,9,1.243,35,1.914,38,1.47,40,3.362,44,2.516,66,4.065,68,2.094,81,2.649,82,1.694,113,1.836,120,1.437,125,1.456,126,1.35,133,1.36,146,1.599,147,1.993,160,1.993,179,3.269,185,1.591,194,2.282,195,2.767,199,1.443,221,1.527,228,1.76,285,2.28,288,3.234,289,1.527,310,1.35,312,1.323,323,2.141,334,1.626,351,3.504,360,2.469,362,2.569,363,4.22,375,1.626,377,2.044,392,1.383,410,2.408,411,2.377,413,2.636,417,1.591,420,2.57,425,2.425,429,2.037,430,1.864,438,1.599,439,2.122,440,2.57,453,2.312,454,1.334,459,1.909,471,2.311,476,4.065,477,2.425,479,1.772,484,1.334,491,1.512,496,1.542,497,1.836,499,1.55,503,2.504,509,1.797,512,1.626,519,1.308,520,1.947,521,1.256,524,1.475,532,3.782,537,2.141,545,3.683,560,2.692,564,2.166,567,2.96,568,2.657,570,1.477,575,1.941,579,2.249,585,2.234,589,1.772,604,1.252,617,2.249,619,2.479,637,3.084,639,1.823,640,2.627,642,4.313,643,5.221,647,5.217,660,1.941,686,1.483,692,1.566,697,2.141,702,3.654,711,2.28,713,2.117,808,2.22,829,1.477,837,3.474,847,2.569,862,2.516,927,1.512,931,1.635,945,2.385,946,2.692,969,2.347,974,4.771,1077,2.527,1085,2.141,1091,1.909,1123,2.032,1124,3.906,1131,2.312,1157,1.608,1199,1.784,1206,2.385,1232,2.141,1237,2.249,1282,2.192,1327,2.692,1343,2.117,1357,1.85,1494,2.767,1541,2.425,1543,2.96,1559,1.81,1567,2.807,1587,1.784,1626,2.141,1824,2.96,1848,2.425,1850,2.385,1938,2.141,1996,2.141,2007,2.855,2008,2.855,2052,2.516,2120,2.96,2788,2.347,2874,2.425,2916,2.385,2925,3.268,3122,2.692,3161,2.767,3162,3.535,3163,3.535,3164,7.185,3165,2.767,3166,3.268,3167,3.535]],["component/51",[6,0.35]],["keyword/51",[]],["title/52-1",[383,36.572]],["name/52-1",[]],["text/52-1",[]],["component/52-1",[]],["keyword/52-1",[]],["title/52-2",[348,35.559,351,17.23,413,10.03,439,11.664,524,8.108]],["name/52-2",[]],["text/52-2",[]],["component/52-2",[]],["keyword/52-2",[]],["title/52-3",[351,
117.916,439,25.575]],["name/52-3",[]],["text/52-3",[]],["component/52-3",[]],["keyword/52-3",[]],["title/52-4",[351,17.916,532,28.755]],["name/52-4",[]],["text/52-4",[]],["component/52-4",[]],["keyword/52-4",[]],["title/52-5",[363,27.385,375,31.666]],["name/52-5",[]],["text/52-5",[]],["component/52-5",[]],["keyword/52-5",[]],["title/52-6",[351,17.916,524,17.779]],["name/52-6",[]],["text/52-6",[]],["component/52-6",[]],["keyword/52-6",[]],["title/52",[351,14.945,848,23.041,1185,30.516]],["name/52",[351,0.297,848,0.458,1185,0.607]],["text/52",[6,1.426,7,0.621,9,2.289,23,2.995,24,1.816,26,0.922,29,0.618,32,3.033,35,1.954,38,2.28,40,0.618,41,0.649,50,0.964,68,0.782,69,0.607,70,0.969,77,0.751,81,2.56,82,0.633,83,1.309,84,0.851,93,0.94,98,2.063,99,0.765,126,1.284,133,2.11,139,0.557,140,1.115,153,2.333,164,1.027,168,1.321,174,0.676,175,0.759,179,1.103,185,0.594,186,0.701,193,0.819,194,1.665,199,0.99,205,1.543,211,1.221,220,1.461,221,0.57,251,0.455,255,0.614,269,0.483,276,0.766,289,1.047,292,0.686,295,0.799,304,0.791,309,1.846,310,0.926,312,0.908,314,0.64,326,0.686,334,0.607,347,2.57,351,3.417,360,2.348,362,3.029,363,3.601,371,1.407,372,0.751,375,2.24,377,0.473,383,1.431,392,1.631,393,0.759,404,0.633,407,1.497,408,0.621,410,0.557,411,2.727,412,0.532,413,3.282,416,1.725,418,0.696,420,1.091,425,0.905,429,1.956,438,0.597,439,3.186,440,1.091,445,0.588,446,1.169,450,0.594,454,0.915,456,0.819,459,0.713,462,1.355,468,0.719,471,1.361,472,2.233,479,1.215,484,1.573,487,0.922,491,2.083,492,1.68,494,0.774,496,1.819,499,3.869,500,1.564,503,1.063,507,0.738,509,1.709,512,0.607,519,1.543,520,3.632,521,1.195,524,1.894,527,0.64,528,1.898,531,0.782,532,4.348,533,0.981,536,0.791,547,1.38,548,1.407,558,1.066,564,2.554,565,1.467,568,1.564,570,1.404,573,0.96,579,0.84,584,1.027,585,1.315,587,1.497,589,1.215,590,2.134,594,0.774,601,1.486,604,2.459,609,1.068,614,0.701,617,0.84,619,1.459,625,1.437,634,0.738,642,0.986,649,2.197,660,1.331,666,0.636,671,1.617,685,1.105,692,0.585,694,0.662,699,1.862,702,1.837,703,0.657,704,1.269,709,0.607,712,0.636,722,2.03,724,0.738,733,0.579,734,0.707,751,0.544,758,0.614,762,0.876,765,1.134,774,0.725,775,1.32,780,1.32,788,2.497,794,0.666,797,0.774,809,0.725,810,1.148,822,0.607,829,2.291,837,1.869,849,0.751,896,2.499,914,1.066,922,0.696,930,0.759,974,0.876,975,0.84,979,1.169,982,1.232,985,0.922,990,0.922,994,1.005,1011,0.696,1012,1.005,1026,1.066,1031,1.583,1057,0.625,1075,0.713,1077,3.015,1078,0.851,1079,0.618,1086,0.929,1089,2.522,1091,1.816,1092,0.863,1094,1.224,1110,0.64,1112,0.774,1116,1.047,1122,3.355,1123,2.798,1124,2.596,1131,0.863,1148,0.774,1160,0.863,1162,0.799,1167,1.066,1187,0.876,1195,2.684,1199,2.104,1201,1.437,1212,0.809,1216,0.527,1232,2.037,1234,0.809,1237,0.84,1240,0.782,1253,0.691,1256,0.782,1257,1.886,1258,1.103,1260,2.348,1267,0.766,1272,0.799,1282,0.819,1290,2.695,1299,0.905,1304,1.407,1305,2.33,1310,0.766,1313,0.738,1315,0.751,1316,0.774,1318,0.809,1325,0.6,1342,0.782,1344,0.701,1357,0.691,1365,0.981,1379,1.033,1380,1.542,1442,0.791,1500,2.962,1501,1.693,1559,0.676,1567,2.049,1583,1.522,1626,0.799,1632,0.819,1650,3.203,1665,1.816,1676,0.89,1724,1.61,1748,1.586,1752,0.799,1760,0.94,1808,0.829,1846,1.066,1850,0.89,1869,1.154,1896,0.863,1938,0.799,1990,1.154,1996,2.037,2020,1.802,2057,0.905,2109,0.774,2183,3.34,2204,0.809,2209,1.154,2232,1.033,2286,1.802,2288,1.693,2406,0.981,2738,1.154,2779,1.033,2865,0.905,2878,1.762,2907,1.105,2916,2.268,2926,1.154,3032,0.981,3109,0.89,3110,0.89,3149,1.105,3165,1.898,3168,2.241,3169,1.22,3170,2.241,3171,1.22,3172,1.22,3173,1.32,3174,1.22,3175,1.005,3176,2.12,3177,2.12,3178,1.32,3179,1.154,3180,1.105,3181,1.066,3182,1.898,3183,2.241,3184,2.241,3185,2.241,3186,1.22,3187,1.22,3188,1.32,3189,1.22,3190,1.802,3191,1.154,3192,1.32,3193,1.154]],["component/52",[6,0.35]],["keyword/52",[]],["title/53-1",[2787,57.961]],["name/53-1",[]],["text/53-1",[]],["component/53-1",[]],["keyword/53-1",[]],["title/53-2",[35,22.889]],["name/53-2",[]],["text/53-2",[]],["component/53-2",[]],["keyword/53-2",[]],["title/53-3",[35,22.889]],["name/53-3",[]],["text/53-3",[]],["component/53-3",[]],["keyword/53-3",[]],["title/53-4",[3001,61.159]],["name/53-4",[]],["text/53-4",[]],["component/53-4",[]],["keyword/53-4",[]],["title/53-5",[503,30.183,1194,35.755]],["name/53-5",[]],["text/53-5",[]],["component/53-5",[]],["keyword/53-5",[]],["title/53-6",[848,34.474]],["name/53-6",[]],["text/53-6",[]],["component/53-6",[]],["keyword/53-6",[]],["title/53",[362,50.022,363,27.385]],["name/53",[362,1.186,363,0.649]],["text/53",[0,1.68,6,0.551,9,0.997,23,1.717,24,1.057,27,1.276,32,3.222,35,1.268,50,1.894,51,1.311,75,3.266,78,4.453,81,2.659,82,1.359,83,1.531,93,3.389,109,1.855,119,3.342,120,1.153,133,1.091,140,1.304,153,1.359,154,1.334,164,1.201,189,2.06,193,1.758,194,1.902,205,1.049,218,1.57,221,1.225,228,1.412,246,1.544,255,2.864,279,1.717,304,3.687,305,1.855,310,1.082,326,1.473,351,3.426,362,8.14,363,4.017,365,1.599,371,1.646,392,1.109,393,2.736,395,2.131,401,3.728,404,1.359,411,2.078,412,1.142,417,2.143,418,1.495,420,1.276,437,1.441,438,1.283,440,2.143,445,1.262,446,1.367,454,1.796,471,1.147,472,3.162,489,1.507,491,2.037,493,1.531,499,5.213,501,1.163,519,1.049,520,4.33,521,1.692,523,1.078,528,6.814,532,1.989,543,2.219,563,1.913,568,1.319,570,1.184,584,1.201,589,4.03,590,5.169,603,6.021,604,3.797,610,3.627,611,4.401,612,4.144,619,1.231,649,0.957,700,1.531,704,6.06,775,1.544,787,1.698,797,1.662,814,3.266,837,2.098,843,1.412,851,1.913,908,2.06,985,4.299,1018,1.883,1031,1.334,1079,1.327,1085,1.717,1094,1.431,1108,1.945,1139,2.159,1183,1.544,1199,1.431,1200,2.159,1216,1.133,1231,2.018,1241,1.599,1244,1.68,1260,1.367,1277,2.374,1285,2.374,1305,1.584,1342,1.68,1352,2.917,1420,3.389,1495,1.883,1500,2.34,1501,1.98,1632,1.758,1634,2.159,1665,1.531,1787,1.519,1918,1.883,2085,2.159,2144,2.159,2204,1.737,2488,2.374,2682,3.987,2802,2.374,2850,2.219,2936,2.219,3109,4.153,3110,1.913,3194,2.835,3195,2.835,3196,2.835,3197,2.835,3198,2.374,3199,4.761,3200,2.835,3201,2.621,3202,2.835,3203,2.835,3204,4.761,3205,2.835,3206,2.835,3207,2.835,3208,4.761,3209,2.835,3210,2.835,3211,2.835]],["component/53",[6,0.35]],["keyword/53",[]],["title/54-1",[300,23.767,524,14.831,1169,36.532]],["name/54-1",[]],["text/54-1",[]],["component/54-1",[]],["keyword/54-1",[]],["title/54-2",[32,21.264,573,27.269]],["name/54-2",[]],["text/54-2",[]],["component/54-2",[]],["keyword/54-2",[]],["title/54-3",[413,21.993,723,36.299]],["name/54-3",[]],["text/54-3",[]],["component/54-3",[]],["keyword/54-3",[]],["title/54-4",[519,31.799]],["name/54-4",[]],["text/54-4",[]],["component/54-4",[]],["keyword/54-4",[]],["title/54",[269,21.015,742,25.983,743,26.564]],["name/54",[269,0.418,742,0.517,743,0.528]],["text/54",[6,1.623,20,1.553,23,2.713,24,1.131,32,1.556,34,3.777,35,2.004,38,1.261,46,1.743,50,1.207,67,2.374,69,1.395,77,1.727,81,1.118,99,2.374,120,2.627,126,1.158,133,1.167,154,1.428,173,1.323,179,3.423,187,1.881,194,2.581,197,1.403,199,1.239,205,3.09,208,2.159,210,1.33,213,1.695,214,1.612,220,2.264,251,1.045,269,2.364,289,2.176,300,1.255,324,3.5,327,1.612,347,1.765,351,1.681,355,1.481,371,1.76,374,2.46,375,1.395,376,5.411,377,1.803,383,1.291,408,1.428,411,1.451,413,3.048,416,1.255,417,1.365,437,1.542,439,1.127,462,1.695,471,1.228,496,2.198,519,1.123,524,2.326,532,1.267,556,1.625,565,1.323,570,2.104,585,2.527,613,2.081,619,2.187,633,1.76,642,1.233,649,2.18,651,2.449,670,1.419,687,1.599,692,1.344,702,1.144,723,5.466,742,1.372,743,6.058,749,1.531,751,2.662,755,1.542,774,1.666,781,1.323,789,1.651,810,3.059,818,1.531,829,4.465,837,2.565,848,2.021,855,1.817,862,2.159,908,2.204,945,2.046,968,1.956,981,1.695,1011,1.599,1077,3.167,1086,2.477,1090,1.575,1117,5.472,1126,4.761,1147,2.344,1155,2.304,1169,6.8,1216,3.006,1223,2.743,1260,3.115,1310,1.76,1325,1.38,1341,5.078,1352,1.858,1502,1.93,1567,1.491,1621,1.5,1628,1.905,1658,1.695,1716,2.54,1722,1.837,1743,2.159,1768,1.956,1864,2.31,1964,3.398,2016,3.944,2341,2.54,2342,2.54,2349,4.921,2350,2.374,2351,2.374,2352,2.374,2355,2.54,2361,2.374,2412,2.449,2607,4.218,2612,1.956,2788,2.014,2803,2.159,3122,2.31,3212,4.406,3213,2.449,3214,2.653,3215,2.449,3216,2.653,3217,2.374,3218,3.033,3219,2.653,3220,3.033,3221,3.033,3222,3.033]],["component/54",[6,0.35]],["keyword/54",[]],["title/55-1",[2904,44.394,2905,51.156]],["name/55-1",[]],["text/55-1",[]],["component/55-1",[]],["keyword/55-1",[]],["title/55-2",[99,18.12,2904,37.033,3223,46.376]],["name/55-2",[]],["text/55-2",[]],["component/55-2",[]],["keyword/55-2",[]],["title/55-3",[99,21.722,621,46.44]],["name/55-3",[]],["text/55-3",[]],["component/55-3",[]],["keyword/55-3",[]],["title/55",[168,27.042,524,17.779]],["name/55",[168,0.641,524,0.421]],["text/55",[9,2.394,24,1.647,32,2.566,35,1.814,38,3.455,40,2.067,50,1.757,7
17,2.514,81,2.51,83,2.385,92,2.645,98,1.871,99,3.966,125,1.82,126,1.686,133,1.7,153,2.116,154,3.205,159,3.39,164,3.52,168,4.362,170,2.104,173,2.97,189,3.209,194,1.764,199,2.78,211,2.473,215,2.933,220,2.386,251,2.861,314,3.303,318,2.514,324,3.168,326,2.294,338,2.366,347,2.386,376,2.091,403,6.174,411,3.071,412,3.763,413,3.222,414,2.589,418,2.329,429,2.429,437,3.461,450,1.987,484,1.666,492,2.744,496,1.927,501,1.811,503,1.936,521,1.57,522,2.311,524,3.246,585,3.25,606,2.617,614,2.347,619,1.917,632,4.073,649,3.151,660,2.425,666,2.129,670,2.067,709,2.031,712,2.129,751,1.82,760,1.707,781,1.927,837,3.183,852,2.185,922,2.329,1015,1.803,1032,2.739,1077,1.553,1085,2.675,1086,3.579,1089,2.031,1126,1.917,1132,1.987,1155,3.801,1166,2.889,1198,2.706,1247,2.17,1272,2.675,1466,4.006,1567,2.17,1639,3.03,1642,5.33,1808,2.773,1827,3.457,1928,2.538,2136,3.209,2368,3.144,2482,2.425,2882,3.457,2908,3.698,2911,3.567,3224,3.862,3225,4.082,3226,3.862,3227,4.416]],["component/55",[6,0.35]],["keyword/55",[]],["title/56",[2972,53.952]],["name/56",[2972,1.793]],["text/56",[6,1.55,24,2.974,35,3.073,102,5.007,121,3.624,199,3.256,261,3.172,351,2.075,375,3.668,377,2.855,409,4.497,410,5.152,411,2.298,413,2.548,439,2.963,446,3.845,494,4.676,576,4.271,671,3.094,709,3.668,745,4.886,843,3.971,1094,4.025,1318,4.886,1495,5.295,1537,8.381,1538,6.286,1559,4.082,2111,5.216,2904,5.143,2972,7.673,3228,7.371,3229,7.975,3230,7.975,3231,7.371,3232,7.975,3233,7.371,3234,7.371,3235,7.371,3236,7.371]],["component/56",[6,0.35]],["keyword/56",[]],["title/57-1",[35,15.298,99,18.12,413,18.346]],["name/57-1",[]],["text/57-1",[]],["component/57-1",[]],["keyword/57-1",[]],["title/57-2",[35,15.298,99,18.12,387,30.28]],["name/57-2",[]],["text/57-2",[]],["component/57-2",[]],["keyword/57-2",[]],["title/57-3",[34,22.287,35,13.122,99,15.543,1090,25.584]],["name/57-3",[]],["text/57-3",[]],["component/57-3",[]],["keyword/57-3",[]],["title/57-4",[35,22.889]],["name/57-4",[]],["text/57-4",[]],["component/57-4",[]],["keyword/57-4",[]],["title/57",[99,21.722,376,32.593]],["name/57",[376,1.352]],["text/57",[4,1.686,19,3.461,32,1.364,34,4.822,35,2.213,70,1.764,78,2.446,99,3.504,139,1.862,168,1.735,179,2.009,197,2.043,198,3.15,205,1.634,223,1.917,239,2.744,251,1.521,255,2.055,257,2.706,261,1.757,289,1.907,312,1.653,314,2.143,315,4.222,324,2.055,334,2.031,338,2.366,343,2.538,355,2.156,374,2.156,376,5.258,377,1.581,387,4.924,392,1.728,413,3.405,471,2.756,484,1.666,490,2.514,496,1.927,519,1.634,523,1.679,524,2.146,527,2.143,536,2.645,566,3.457,573,1.749,576,2.366,585,2.663,595,4.172,619,1.917,641,2.468,668,2.933,682,3.84,702,2.569,733,2.985,738,3.282,742,1.998,758,2.055,760,3.211,781,1.927,806,4.034,829,3.471,837,2.832,931,2.043,969,2.933,975,2.81,1015,1.803,1038,3.144,1090,3.536,1099,2.563,1110,2.143,1125,3.282,1126,4.378,1132,3.739,1134,3.437,1141,3.282,1150,3.144,1165,2.773,1215,3.461,1216,1.764,1226,3.739,1236,7.296,1241,2.491,1254,2.589,1272,2.675,1298,2.468,1325,2.009,1341,3.84,1343,2.645,1456,2.933,1503,3.209,1512,2.617,1576,4.078,1586,2.366,1621,2.185,1632,4.222,1669,4.671,1817,3.457,2185,3.282,2376,3.03,2386,4.331,2499,3.698,2684,4.846,2693,3.364,3147,3.457,3148,3.282,3198,3.698,3237,4.082,3238,3.862,3239,5.954,3240,5.954,3241,3.862,3242,3.862,3243,4.416,3244,3.862]],["component/57",[6,0.35]],["keyword/57",[]],["title/58-1",[848,27.621,1185,36.582]],["name/58-1",[]],["text/58-1",[]],["component/58-1",[]],["keyword/58-1",[]],["title/58-2",[532,28.755,671,26.709]],["name/58-2",[]],["text/58-2",[]],["component/58-2",[]],["keyword/58-2",[]],["title/58-3",[351,14.945,1122,26.268,1290,28.221]],["name/58-3",[]],["text/58-3",[]],["component/58-3",[]],["keyword/58-3",[]],["title/58-4",[351,14.945,532,23.987,1195,25.571]],["name/58-4",[]],["text/58-4",[]],["component/58-4",[]],["keyword/58-4",[]],["title/58-5",[351,14.945,1124,27.189,1195,25.571]],["name/58-5",[]],["text/58-5",[]],["component/58-5",[]],["keyword/58-5",[]],["title/58-6",[234,30.338,848,27.621]],["name/58-6",[]],["text/58-6",[]],["component/58-6",[]],["keyword/58-6",[]],["title/58-7",[520,23.467,1216,27.503]],["name/58-7",[]],["text/58-7",[]],["component/58-7",[]],["keyword/58-7",[]],["title/58-8",[347,24.123,1115,32.027]],["name/58-8",[]],["text/58-8",[]],["component/58-8",[]],["keyword/58-8",[]],["title/58-9",[463,27.519,1115,26.716,1195,25.571]],["name/58-9",[]],["text/58-9",[]],["component/58-9",[]],["keyword/58-9",[]],["title/58-10",[524,17.779,701,25.382]],["name/58-10",[]],["text/58-10",[]],["component/58-10",[]],["keyword/58-10",[]],["title/58-11",[351,14.945,1077,20.194,1251,33.33]],["name/58-11",[]],["text/58-11",[]],["component/58-11",[]],["keyword/58-11",[]],["title/58-12",[1199,34.748,1251,39.956]],["name/58-12",[]],["text/58-12",[]],["component/58-12",[]],["keyword/58-12",[]],["title/58",[532,28.755,1195,30.654]],["name/58",[532,0.682,1195,0.727]],["text/58",[9,1.975,19,1.272,23,3.587,24,2.48,26,1.748,27,4.135,29,1.171,32,2.309,35,2.321,50,2.974,8
11,2.756,83,2.313,111,2.462,119,1.041,133,2.161,194,1.712,198,1.158,205,0.926,261,1.704,282,1.819,295,1.516,300,1.036,310,0.956,324,1.993,347,1.501,351,3.422,363,0.996,377,2.011,387,1.32,397,1.662,404,2.691,407,1.115,411,2.154,413,1.369,416,1.036,425,1.717,429,1.528,463,2.053,471,1.734,479,1.255,496,1.092,499,2.916,519,0.926,520,3.496,521,1.996,524,2.719,532,4.283,547,2.439,565,1.869,570,1.789,579,1.592,584,1.06,587,1.908,588,1.453,589,1.255,598,1.782,603,1.552,604,2.887,614,1.33,642,1.018,649,2.244,666,2.066,671,3.859,672,2.352,676,1.207,686,1.05,700,1.352,701,2.452,704,1.31,734,1.341,739,1.33,749,2.162,751,2.314,788,1.499,818,1.263,823,2.394,837,2.267,895,1.959,907,2.802,932,1.689,974,2.845,1011,1.32,1019,1.3,1031,3.13,1057,2.028,1077,3.498,1113,1.374,1115,5.11,1116,1.85,1124,1.185,1147,2.613,1148,1.468,1151,1.341,1157,1.139,1199,4.398,1201,3.328,1216,3.256,1236,2.657,1239,2.725,1242,1.238,1244,1.483,1251,3.86,1255,2.939,1257,4.157,1258,1.139,1260,4.626,1267,1.453,1274,1.819,1275,1.819,1286,2.992,1287,2.538,1290,2.76,1291,3.354,1297,3.998,1300,2.487,1304,1.453,1305,3.139,1313,1.399,1318,1.534,1325,1.949,1327,1.906,1332,1.717,1337,1.483,1344,1.33,1350,2.89,1352,1.534,1357,1.31,1358,1.499,1375,1.534,1380,3.573,1500,1.23,1587,1.263,1650,2.985,1665,2.313,1725,2.802,1868,1.662,1892,1.592,1896,1.637,1977,2.538,2088,1.614,2109,1.468,2253,2.89,2268,1.748,2338,1.782,2500,1.689,2718,1.819,2919,1.637,2972,1.572,3109,1.689,3110,1.689,3182,3.354,3224,2.189,3245,2.503,3246,2.189,3247,3.354,3248,2.021,3249,1.959,3250,1.959,3251,1.959,3252,1.959,3253,1.959,3254,1.959,3255,4.912,3256,2.021,3257,2.189]],["component/58",[6,0.35]],["keyword/58",[]],["title/59-1",[848,27.621,1185,36.582]],["name/59-1",[]],["text/59-1",[]],["component/59-1",[]],["keyword/59-1",[]],["title/59-2",[429,20.483,1122,26.268,1290,28.221]],["name/59-2",[]],["text/59-2",[]],["component/59-2",[]],["keyword/59-2",[]],["title/59-3",[351,14.945,1122,26.268,1290,28.221]],["name/59-3",[]],["text/59-3",[]],["component/59-3",[]],["keyword/59-3",[]],["title/59-4",[351,14.945,1124,27.189,1195,25.571]],["name/59-4",[]],["text/59-4",[]],["component/59-4",[]],["keyword/59-4",[]],["title/59-5",[234,30.338,848,27.621]],["name/59-5",[]],["text/59-5",[]],["component/59-5",[]],["keyword/59-5",[]],["title/59-6",[520,23.467,1216,27.503]],["name/59-6",[]],["text/59-6",[]],["component/59-6",[]],["keyword/59-6",[]],["title/59-7",[411,19.835,1115,32.027]],["name/59-7",[]],["text/59-7",[]],["component/59-7",[]],["keyword/59-7",[]],["title/59-8",[524,17.779,701,25.382]],["name/59-8",[]],["text/59-8",[]],["component/59-8",[]],["keyword/59-8",[]],["title/59",[1195,30.654,1232,41.695]],["name/59",[1195,0.727,1232,0.988]],["text/59",[6,0.5,9,0.904,19,1.306,23,2.065,24,0.958,32,2.346,35,2.203,50,2.279,74,2.712,82,1.232,119,1.069,133,1.686,155,1.196,194,2.288,205,0.951,211,1.592,249,1.169,250,1.224,261,1.743,268,1.399,295,1.557,310,2.187,312,0.962,324,1.196,347,0.901,351,3.35,363,1.022,377,0.92,392,2.241,397,1.706,411,3.061,413,0.821,425,1.763,429,1.563,442,1.594,463,2.745,466,1.399,491,1.099,492,3.06,493,1.388,495,2.012,496,1.911,499,3.33,519,0.951,520,3.84,522,1.345,523,0.977,524,1.748,532,3.172,547,1.463,555,1.795,570,2.393,579,1.635,584,1.089,587,3.013,588,1.492,589,1.288,603,1.594,604,2.928,609,3.347,641,1.436,642,1.045,649,1.933,654,2.866,666,1.239,671,3.208,672,1.411,676,1.239,686,2.404,700,1.388,701,2.8,704,2.293,734,1.377,749,1.297,751,1.059,774,1.411,818,1.297,822,1.182,837,1.953,843,2.852,895,2.012,907,2.866,942,3.43,979,2.113,1011,1.355,1031,4.73,1057,3.596,1077,3.641,1115,4.817,1116,2.474,1122,2.62,1124,2.075,1147,1.196,1151,1.377,1193,1.306,1195,3.682,1199,3.833,1201,3.394,1207,1.399,1212,1.575,1216,3.303,1223,1.399,1232,5.346,1236,2.717,1239,1.635,1242,2.167,1244,2.596,1245,1.763,1255,3.929,1257,3.062,1258,1.169,1260,4.846,1267,1.492,1274,1.867,1275,1.867,1290,4.939,1298,1.436,1300,1.492,1304,1.492,1305,1.436,1307,1.734,1325,1.169,1332,1.763,1344,1.366,1352,1.575,1358,2.624,1380,4.305,1500,1.263,1538,1.557,1559,1.316,1587,1.297,1632,1.594,1650,1.366,1665,1.388,1725,2.866,1746,1.957,1752,5.876,1868,1.706,1892,2.787,2088,1.657,2108,2.012,2109,1.507,2112,1.795,2246,2.012,2253,1.734,2268,1.795,2294,1.681,2331,2.012,2464,1.91,2612,2.826,2718,1.867,2849,1.366,2919,1.681,2972,1.614,3109,1.734,3110,1.734,3247,2.012,3249,2.012,3250,2.012,3251,2.012,3252,2.012,3253,2.012,3254,2.012,3257,2.247,3258,2.375,3259,2.247,3260,2.247,3261,2.152,3262,2.375,3263,2.375,3264,2.247]],["component/59",[6,0.35]],["keyword/59",[]],["title/60",[2792,53.282]],["name/60",[2792,1.771]],["text/60",[6,2.396,377,4.412,545,6.792,547,5.996,637,5.688,643,7.654,2792,6.532,3265,8.245]],["component/60",[6,0.35]],["keyword/60",[]],["title/61-1",[121,20.053,524,14.831,2372,35.612]],["name/61-1",[]],["text/61-1",[]],["component/61-1",[]],["keyword/61-1",[]],["title/61-2",[99,18.12,121,20.053,251,19.777]],["name/61-2",[]],["text/61-2",[]],["component/61-2",[]],["keyword/61-2",[]],["title/61-3",[2243,57.052]
1],["name/61-3",[]],["text/61-3",[]],["component/61-3",[]],["keyword/61-3",[]],["title/61-4",[121,30.002]],["name/61-4",[]],["text/61-4",[]],["component/61-4",[]],["keyword/61-4",[]],["title/61-5",[121,24.038,1057,32.593]],["name/61-5",[]],["text/61-5",[]],["component/61-5",[]],["keyword/61-5",[]],["title/61-6",[41,28.221,351,14.945,1116,24.803]],["name/61-6",[]],["text/61-6",[]],["component/61-6",[]],["keyword/61-6",[]],["title/61-7",[28,29.188,121,20.053,1132,25.843]],["name/61-7",[]],["text/61-7",[]],["component/61-7",[]],["keyword/61-7",[]],["title/61",[121,24.038,992,35.755]],["name/61",[121,0.57,992,0.848]],["text/61",[4,1.373,6,0.699,9,1.693,19,1.04,23,3.616,24,1.795,27,2.166,28,1.04,32,2.574,35,2.22,37,1.404,50,1.915,74,1.703,81,0.755,83,1.105,89,2.131,98,0.867,99,3.478,102,1.285,121,4.114,124,1.012,138,1.105,146,0.926,154,0.963,164,2.039,168,2.591,200,1.048,211,1.748,220,1.261,234,0.902,249,2.19,251,3.796,255,0.952,269,0.749,286,0.931,295,1.239,300,0.847,306,1.841,310,1.838,311,0.993,312,1.347,344,1.071,347,1.687,351,2.869,377,0.733,392,0.801,393,1.176,410,0.863,411,1.901,413,2.663,416,0.847,426,1.176,429,0.73,438,0.926,439,1.336,440,2.166,454,1.816,462,2.01,463,2.306,466,1.959,471,0.828,479,1.803,482,1.559,484,2.489,490,1.165,491,0.875,492,3.16,501,0.839,509,2.944,519,1.331,520,1.641,521,0.727,523,0.778,524,2.36,526,1.339,542,1.176,557,0.981,565,0.893,573,1.425,582,1.133,583,2.109,584,1.524,585,0.801,597,1.2,604,2.051,609,1.585,616,1.212,632,2.1,649,2.226,660,1.124,666,0.987,670,3.67,671,1.396,676,0.987,692,0.906,701,0.755,702,1.357,726,1.114,733,0.897,751,1.482,758,3.382,759,2.944,760,3.875,781,3.986,786,1.114,794,1.033,798,1.404,800,2.204,801,1.269,802,1.033,810,0.969,823,1.144,837,2.249,840,1.079,848,1.443,887,0.987,921,2.561,922,1.079,927,0.875,981,1.144,989,1.176,1011,1.897,1015,2.694,1018,1.359,1023,1.521,1029,1.38,1057,3.123,1075,1.105,1077,2.32,1085,1.239,1086,0.784,1112,1.2,1115,2.239,1116,4.089,1122,1.645,1124,0.969,1132,0.921,1144,1.2,1147,3.069,1151,1.096,1155,2.202,1156,2.558,1185,1.087,1212,1.254,1214,1.457,1216,1.437,1223,1.114,1242,1.012,1246,1.212,1257,1.628,1258,2.19,1260,3.781,1303,1.154,1309,1.04,1315,1.165,1325,0.931,1340,2.204,1344,1.087,1466,1.734,1490,1.133,1511,1.38,1581,1.38,1585,1.254,1586,1.927,1587,1.816,1667,1.359,1678,1.521,1696,1.38,1707,1.359,1736,1.302,1748,1.339,1898,1.359,1908,4.142,1977,2.131,2141,1.429,2184,1.429,2204,1.254,2354,2.74,2372,1.269,2378,8.205,2379,4.534,2380,5.403,2381,4.534,2385,2.816,2386,2.288,2387,1.487,2394,1.602,2396,2.816,2397,2.673,2398,1.602,2399,1.602,2400,1.457,2401,1.457,2402,1.457,2403,1.602,2404,1.602,2681,3.148,2945,1.429,3217,2.816,3266,5.692,3267,1.713,3268,1.653,3269,1.653,3270,2.561,3271,2.673,3272,1.559,3273,1.653,3274,1.653,3275,1.602,3276,1.653,3277,1.653,3278,1.653,3279,1.653,3280,1.653]],["component/61",[6,0.35]],["keyword/61",[]],["title/62",[1115,32.027,1350,46.44]],["name/62",[1115,0.759,1350,1.101]],["text/62",[4,2.276,28,4.325,32,3.534,35,1.588,38,2.479,42,4.992,69,2.742,70,2.382,120,2.423,142,4.243,187,3.697,193,3.697,194,3.399,211,2.165,222,3.9,277,6.63,279,3.611,289,2.575,300,2.467,324,3.958,334,2.742,347,3.477,407,2.655,411,1.718,413,2.718,424,3.009,429,2.126,439,2.215,471,2.413,491,5.088,496,2.601,521,2.119,524,1.54,565,4.72,584,4.203,604,3.514,633,3.46,649,2.012,671,2.313,686,2.502,692,2.641,736,4.265,796,3.331,810,2.823,822,3.914,823,4.755,837,2.032,884,3.362,891,4.541,919,6.183,1057,4.697,1077,2.096,1079,2.79,1115,3.958,1126,2.588,1257,2.697,1258,3.871,1282,3.697,1286,4.163,1287,3.532,1347,4.163,1350,5.74,1463,3.03,1567,2.93,1637,3.958,1743,4.243,1978,4.243,2333,5.51,2412,4.814,2632,3.792,3032,4.43,3124,5.51,3281,5.961,3282,5.961]],["component/62",[6,0.35]],["keyword/62",[]],["title/63",[1123,39.563,1195,30.654]],["name/63",[1123,0.938,1195,
10.727]],["text/63",[4,1.622,6,0.826,23,3.298,35,2.64,50,1.69,83,2.294,179,1.933,194,2.64,205,1.573,314,2.062,347,2.316,351,3.2,372,2.419,377,1.521,392,3.578,411,3.351,414,2.491,425,2.915,439,2.455,454,2.493,492,3.686,496,3.537,499,1.863,520,3.378,524,3.219,532,1.775,568,1.977,570,1.775,579,2.703,584,2.799,587,1.892,588,2.466,604,2.872,609,4.031,619,1.844,649,1.434,655,3.025,671,3.549,676,3.186,686,2.773,701,4.037,729,2.779,751,1.751,775,3.598,788,3.958,837,2.764,895,3.326,935,6.176,979,4.41,982,3.359,1057,2.012,1077,3.981,1091,2.294,1115,3.772,1122,3.023,1123,3.798,1124,2.012,1195,2.942,1199,5.001,1209,2.354,1216,3.654,1240,2.518,1242,4.525,1257,3.669,1290,4.495,1299,2.915,1341,2.396,1380,2.703,1500,3.247,1522,6.074,1632,2.635,1650,3.512,1665,2.294,1724,4.388,1752,2.574,1850,2.866,1868,2.821,2204,2.604,2622,2.915,2879,3.158,3181,3.431,3246,3.716,3257,3.716,3283,6.108]],["component/63",[6,0.35]],["keyword/63",[]],["title/64-1",[350,35.494,2133,46.44]],["name/64-1",[]],["text/64-1",[]],["component/64-1",[]],["keyword/64-1",[]],["title/64-2",[170,32.789,350,35.494]],["name/64-2",[]],["text/64-2",[]],["component/64-2",[]],["keyword/64-2",[]],["title/64-3",[6,13.384,350,35.494]],["name/64-3",[]],["text/64-3",[]],["component/64-3",[]],["keyword/64-3",[]],["title/64-4",[350,35.494,671,26.709]],["name/64-4",[]],["text/64-4",[]],["component/64-4",[]],["keyword/64-4",[]],["title/64-5",[671,26.709,810,32.593]],["name/64-5",[]],["text/64-5",[]],["component/64-5",[]],["keyword/64-5",[]],["title/64-6",[356,25.983,439,21.334,671,22.28]],["name/64-6",[]],["text/64-6",[]],["component/64-6",[]],["keyword/64-6",[]],["title/64-7",[1621,34.052,3284,63.633]],["name/64-7",[]],["text/64-7",[]],["component/64-7",[]],["keyword/64-7",[]],["title/64-8",[3285,85.92]],["name/64-8",[]],["text/64-8",[]],["component/64-8",[]],["keyword/64-8",[]],["title/64-9",[6,11.164,476,40.877,545,37.033]],["name/64-9",[]],["text/64-9",[]],["component/64-9",[]],["keyword/64-9",[]],["title/64",[350,44.3]],["name/64",[350,1.473]],["text/64",[2,1.151,4,1.802,6,1.063,9,1.66,19,0.788,23,2.203,24,1.046,32,3.049,34,3.439,35,1.777,50,0.616,51,1.298,57,1.126,70,1.536,77,0.882,81,0.571,82,0.742,98,2,99,2.261,101,0.811,119,1.963,120,1.141,128,1.045,141,1.568,146,0.701,153,0.742,154,2.222,159,1.397,164,0.656,170,1.337,173,1.224,175,0.89,179,1.75,185,0.697,194,1.121,195,1.213,205,1.039,206,1.126,210,0.679,211,1.397,220,0.543,251,0.966,261,1.116,269,2.622,289,0.669,300,1.954,310,0.592,312,1.44,314,0.752,315,0.961,325,1.74,327,3.545,334,0.713,338,0.83,347,1.915,350,5.577,351,1.229,355,0.757,356,1.74,366,0.663,374,0.757,375,0.713,376,1.329,377,2.721,379,1.045,392,1.504,395,1.256,398,1.213,407,1.713,411,2.303,412,1.55,413,1.229,416,3.308,420,0.697,422,0.908,424,0.782,429,1.95,437,0.788,438,0.701,439,2.031,446,1.854,456,0.961,461,2.137,462,3.414,463,0.742,466,1.528,471,0.627,472,1.029,473,0.713,475,1.297,476,4.748,479,0.777,484,1.059,490,0.882,491,1.645,492,0.624,493,0.837,494,2.255,498,1.297,501,1.151,503,0.679,505,1.251,509,1.426,516,1.863,519,0.573,520,0.528,523,1.462,524,1.85,532,1.606,539,0.986,545,0.999,557,0.742,560,1.18,565,1.224,570,0.647,573,1.87,576,2.06,583,0.908,598,1.103,599,0.908,600,0.986,604,0.549,609,0.683,612,1.613,614,1.491,619,0.673,620,1.18,621,1.045,632,1.224,637,0.837,642,0.63,649,2.565,666,0.747,668,1.029,671,2.78,686,0.65,687,1.48,692,2.421,693,0.851,695,1.126,697,0.938,702,2.062,703,3.785,704,1.468,711,0.999,721,2.137,736,1.407,741,0.757,742,1.74,743,1.298,765,2.209,772,2.892,773,1.74,774,0.851,778,1.045,781,1.224,787,0.928,796,0.866,802,3.084,804,1.103,810,4.844,815,2.795,816,3.978,829,0.647,837,2.083,848,0.622,851,1.045,878,0.938,884,0.874,887,0.747,922,0.817,932,1.045,963,1.663,971,1.297,979,0.747,1015,0.633,1086,0.594,1088,0.782,1090,1.998,1094,0.782,1096,0.986,1100,0.874,1111,3.595,1117,0.793,1119,2.454,1125,1.151,1126,4.284,1133,2.929,1140,1.063,1152,1.251,1157,1.277,1193,0.788,1207,0.844,1216,2.441,1234,0.949,1241,1.582,1248,0.986,1254,5.245,1257,1.27,1290,1.379,1296,0.793,1325,0.705,1336,1.045,1341,5.327,1366,1.74,1466,0.747,1473,2.13,1502,0.986,1511,1.045,1517,0.882,1621,5.412,1623,1.103,1626,0.938,1627,0.949,1628,6.709,1636,1.426,1667,1.029,1669,2.638,1687,1.063,1705,1.014,1743,1.997,1787,
11.503,1996,0.938,2033,1.432,2224,2.35,2330,1.126,2392,3.508,2405,2.454,2567,1.432,2610,1.432,2611,7.709,2617,1.297,2623,1.432,2632,1.785,2641,4.128,2644,1.014,2684,1.103,2798,1.997,2849,2.044,2935,3.972,2971,2.594,2977,3.363,2978,2.454,2979,1.355,3032,1.151,3118,2.35,3148,5.324,3201,1.432,3284,7.387,3286,1.432,3287,2.806,3288,1.549,3289,4.78,3290,2.806,3291,1.549,3292,1.549,3293,1.432,3294,6.11,3295,1.432,3296,1.432,3297,1.549,3298,1.549,3299,1.432,3300,2.806,3301,1.549,3302,1.549,3303,1.549,3304,1.549,3305,1.18,3306,6.671,3307,2.594]],["component/64",[6,0.35]],["keyword/64",[]],["title/65-1",[6,13.384,116,60.202]],["name/65-1",[]],["text/65-1",[]],["component/65-1",[]],["keyword/65-1",[]],["title/65-2",[117,60.202,118,50.022]],["name/65-2",[]],["text/65-2",[]],["component/65-2",[]],["keyword/65-2",[]],["title/65-3",[6,11.164,121,20.053,122,26.415]],["name/65-3",[]],["text/65-3",[]],["component/65-3",[]],["keyword/65-3",[]],["title/65-4",[6,13.384,123,42.181]],["name/65-4",[]],["text/65-4",[]],["component/65-4",[]],["keyword/65-4",[]],["title/65-5",[124,34.052,125,28.363]],["name/65-5",[]],["text/65-5",[]],["component/65-
15",[]],["keyword/65-5",[]],["title/65-6",[126,26.282,127,37.174]],["name/65-6",[]],["text/65-6",[]],["component/65-6",[]],["keyword/65-6",[]],["title/65-7",[128,57.961]],["name/65-7",[]],["text/65-7",[]],["component/65-7",[]],["keyword/65-7",[]],["title/65-8",[121,30.002]],["name/65-8",[]],["text/65-8",[]],["component/65-8",[]],["keyword/65-8",[]],["title/65-9",[129,62.432]],["name/65-9",[]],["text/65-9",[]],["component/65-9",[]],["keyword/65-9",[]],["title/65-10",[131,53.891,132,48.074]],["name/65-10",[]],["text/65-10",[]],["component/65-10",[]],["keyword/65-10",[]],["title/65",[6,13.384,123,42.181]],["name/65",[123,1.75]],["text/65",[0,1.727,4,3.751,6,1.985,7,2.294,8,2.166,13,1.644,15,2.441,20,1.492,23,1.051,24,1.818,25,2.441,30,4.409,31,4.386,32,1.94,33,3.022,35,2.175,38,1.212,40,1.364,50,1.16,70,1.165,85,2.118,86,2.919,111,2.754,113,1.514,120,1.185,121,3.431,122,1.341,123,2.986,124,2.411,125,3.364,126,1.113,128,3.288,129,2.118,130,3.815,131,6.392,132,6.544,133,2.825,134,2.549,135,2.282,136,4.262,137,2.549,138,1.574,139,2.055,140,1.341,141,3.509,146,1.319,155,2.267,157,1.247,163,2.919,164,2.065,165,2.748,167,1.675,170,2.991,177,3.192,178,2.829,181,3.936,182,2.549,183,1.808,184,2.28,185,2.826,186,2.59,187,1.808,188,1.272,189,3.541,190,1.503,191,2.549,192,4.262,193,1.808,194,1.165,195,2.282,196,3.236,197,2.254,198,3.395,199,1.19,200,1.492,201,3.236,202,4.445,203,2.549,204,1.601,205,3.022,206,2.118,207,2.549,208,2.075,209,2.549,210,1.278,211,2.281,212,2.441,213,1.629,214,1.549,215,1.936,216,2.531,217,3.143,218,1.615,219,2.549,220,2.201,221,2.105,222,1.907,223,2.726,224,3.1,225,2.282,226,1.746,227,1.854,228,2.427,229,1.644,230,3.996,231,2.676,232,1.615,233,1.88,234,1.285,235,2.354,236,5.258,237,2.441,238,1.907,239,1.175,240,2.354,241,2.699,242,2.075,243,3.682,244,2.748,245,2.441,246,1.587,247,2.441,248,2.166,249,1.326,250,1.388,251,1.004,252,2.549,253,2.549,254,2.354,255,1.356,256,1.471,257,3.848,258,1.907,259,1.644,260,2.549,261,1.16,262,2.986,263,2.354,264,2.354,265,2.549,266,2.549,267,2.166,268,1.587,269,1.067,270,2.166,271,2.282,272,3.622,273,2.441,274,2.549,275,1.388,276,1.692,277,1.786,278,2.549,279,1.765,280,1.907,281,1.854,282,2.118,283,2.036,284,2.282,285,1.88,286,1.326,287,2.549,288,2.193,289,1.259,290,2.075,291,2.036,292,1.514,293,2.986,294,1.675,295,1.765,296,4.262,297,4.262,298,2.282,299,2.549,300,1.206,301,1.185,303,1.907,306,1.492,309,1.601,310,1.113,311,1.414,312,2.351,313,1.966,314,1.414,315,1.808,316,2.282,317,2.118,318,1.659,319,1.854,320,2.441,321,2.441,322,2.549,323,1.765,324,1.356,325,1.808,326,1.514,327,1.549,328,1.471,329,2.354,330,2.166,331,2.549,332,2.441,333,2.549,334,1.341,335,2.549,336,1.83,337,1.808,338,1.561,339,2.549,340,1.808,341,2.549,930,1.675,963,1.727,1340,1.786,1527,1.675,3308,2.694,3309,2.694,3310,3.936]],["component/65",[6,0.35]],["keyword/65",[]],["title/66-1",[127,46.396]],["name/66-1",[]],["text/66-1",[]],["component/66-1",[]],["keyword/66-1",[]],["title/66-2",[723,36.299,724,38.47]],["name/66-2",[]],["text/66-2",[]],["component/66-2",[]],["keyword/66-2",[]],["title/66-3",[521,24.467,725,33.193]],["name/66-3",[]],["text/66-3",[]],["component/66-3",[]],["keyword/66-3",[]],["title/66-4",[220,20.123,726,31.267,727,53.081]],["name/66-4",[]],["text/66-4",[]],["component/66-4",[]],["keyword/66-4",[]],["title/66-5",[728,62.432]],["name/66-5",[]],["text/66-5",[]],["component/66-5",[]],["keyword/66-5",[]],["title/66-6",[376,40.679]],["name/66-6",[]],["text/66-6",[]],["component/66-6",[]],["keyword/66-6",[]],["title/66-7",[729,45.031,730,45.031]],["name/66-7",[]],["text/66-7",[]],["component/66-7",[]],["keyword/66-7",[]],["title/66",[6,16.704]],["name/66",[731,2.075]],["text/66",[3,3.735,6,2.476,13,2.515,24,1.663,32,2.119,35,1.828,44,3.175,45,3.009,81,1.645,111,1.956,121,1.557,125,2.827,126,1.703,140,2.052,168,2.695,170,3.268,173,1.946,174,2.283,179,2.029,185,2.007,186,2.37,199,1.821,200,2.283,205,1.651,211,1.62,218,3.8,220,2.93,221,1.926,223,4.074,231,2.449,239,1.797,251,2.363,255,2.075,261,3.734,269,2.511,286,3.121,289,1.926,293,4.204,310,1.703,312,2.568,327,2.37,332,3.735,350,3.537,355,2.178,375,2.052,377,1.597,383,1.899,388,2.352,392,1.745,399,2.409,400,2.615,401,2.701,412,1.797,423,3.175,428,2.733,429,4.209,438,2.018,449,2.221,471,1.805,497,2.317,509,3.487,512,2.052,524,1.152,525,2.352,536,2.671,548,2.589,565,1.946,573,1.767,583,2.615,620,3.397,642,1.813,649,1.505,672,2.449,687,2.352,709,2.052,723,2.352,725,3.308,726,2.429,733,1.956,734,2.389,735,3.397,736,4.191,737,5.098,738,3.314,739,3.646,740,2.837,741,3.35,742,3.104,743,3.174,744,3.115,745,4.204,746,4.123,747,3.492,748,2.515,750,3.314,751,1.838,767,3.602,776,3.901,777,3.314,778,3.009,779,3.492,780,2.429,781,1.946,782,2.449,783,3.563,784,3.175,785,2.493,786,2.429,787,2.671,788,2.671,789,2.429,790,2.515,791,2.029,792,3.314,794,2.251,795,2.837,796,2.493,797,2.615,798,3.06,799,3.115,802,2.251,803,4.123,804,3.175,805,4.123,809,2.449,810,2.112,811,3.241,812,3.175,2929,3.241,3311,3.397,3312,4.123,3313,4.46]],["component/66",[6,0.35]],["keyword/66",[]],["title/67-1",[455,67.261]],["name/67-1",[]],["text/67-1",[]],["component/67-1",[]],["keyword/67-1",[]],["title/67-2",[524,22.19]],["name/67-2",[]],["text/67-2",[]],["component/67-2",[]],["keyword/67-2",[]],["title/67-3",[251,29.59]],["name/67-3",[]],["text/67-3",[]],["component/67-3",[]],["keyword/67-3",[]],["title/67-4",[251,23.708,631,40.363]],["name/67-4",[]],["text/67-4",[]],["component/67-4",[]],["keyword/67-4",[]],["title/67-5",[524,17.779,632,30.031]],["name/67-5",[]],["text/67-5",[]],["component/67-5",[]],["keyword/67-
15",[]],["title/67-6",[633,39.956,634,38.47]],["name/67-6",[]],["text/67-6",[]],["component/67-6",[]],["keyword/67-6",[]],["title/67-7",[452,75.138]],["name/67-7",[]],["text/67-7",[]],["component/67-7",[]],["keyword/67-7",[]],["title/67",[539,54.659]],["name/67",[539,1.817]],["text/67",[0,2.397,4,2.999,6,1.236,20,2.07,23,3.211,32,1.249,35,2.738,50,2.529,119,1.682,120,1.644,121,1.412,126,2.427,146,1.83,160,3.586,164,3.772,174,2.07,220,2.228,221,2.746,244,2.281,268,2.202,288,2.861,304,2.423,312,1.514,327,2.149,334,1.861,351,1.655,363,1.609,366,1.73,371,2.348,377,1.448,379,6.007,383,2.706,410,3.755,413,3.936,418,2.133,425,2.775,430,2.133,439,1.503,445,1.801,450,1.82,455,4.978,456,2.508,471,1.637,472,2.686,473,1.861,496,3.427,501,1.659,503,1.773,519,1.497,524,2.876,525,3.353,539,7.729,576,3.406,579,2.573,583,2.372,585,2.487,595,2.478,596,4.933,616,2.397,619,1.756,626,4.362,629,3.166,631,2.372,632,2.774,633,2.348,634,2.26,637,4.242,639,3.278,641,2.26,642,1.644,643,2.939,644,3.387,647,2.07,649,1.365,651,3.266,652,4.44,653,3.537,654,2.646,659,3.896,664,2.221,671,1.569,674,4.843,675,5.877,676,1.95,677,3.739,678,3.739,679,2.24,680,3.081,681,2.221,682,2.281,683,2.729,684,2.45,685,3.387,686,2.668,687,3.353,688,3.006,689,2.54,690,3.69,691,2.993,692,2.817,693,2.221,694,3.187,695,2.939,696,2.24,697,2.45,698,2.24,699,2.24,700,2.184,701,2.344,702,1.526,703,2.014,704,2.117,705,3.739,706,3.739,707,3.739,708,3.006,709,1.861,710,2.825,711,2.608,712,3.066,713,3.808,714,2.117,715,2.879,716,3.739,717,2.372,718,2.879,719,3.266,720,3.739,721,3.081,722,3.387,3314,4.045]],["component/67",[6,0.35]],["keyword/67",[]],["title/68-1",[69,31.666,387,36.299]],["name/68-1",[]],["text/68-1",[]],["component/68-1",[]],["keyword/68-1",[]],["title/68-2",[35,15.298,62,37.033,69,26.415]],["name/68-2",[]],["text/68-2",[]],["component/68-2",[]],["keyword/68-2",[]],["title/68-3",[35,18.339,813,45.031]],["name/68-3",[]],["text/68-3",[]],["component/68-3",[]],["keyword/68-3",[]],["title/68-4",[62,24.73,69,17.64,714,20.068,814,26.307,815,27.866,816,20.068]],["name/68-4",[]],["text/68-4",[]],["component/68-4",[]],["keyword/68-4",[]],["title/68-5",[69,19.837,342,32.845,725,20.793,817,34.826,818,21.767]],["name/68-5",[]],["text/68-5",[]],["component/68-5",[]],["keyword/68-5",[]],["title/68-6",[819,60.202,820,44.394]],["name/68-6",[]],["text/68-6",[]],["component/68-6",[]],["keyword/68-6",[]],["title/68-7",[69,15.881,714,18.067,821,30.193,822,15.881,823,19.294,824,27.028,825,27.028]],["name/68-7",[]],["text/68-7",[]],["component/68-7",[]],["keyword/68-7",[]],["title/68-8",[820,37.033,826,44.955,827,34.025]],["name/68-8",[]],["text/68-8",[]],["component/68-8",[]],["keyword/68-8",[]],["title/68-9",[277,42.181,828,53.891]],["name/68-9",[]],["text/68-9",[]],["component/68-9",[]],["keyword/68-9",[]],["title/68-10",[829,28.755,830,60.202]],["name/68-10",[]],["text/68-10",[]],["component/68-10",[]],["keyword/68-10",[]],["title/68-11",[23,13.828,27,27.434,147,21.626,831,30.021,832,30.021]],["name/68-11",[]],["text/68-11",[]],["component/68-11",[]],["keyword/68-11",[]],["title/68-12",[659,42.181,833,52.432]],["name/68-12",[]],["text/68-12",[]],["component/68-12",[]],["keyword/68-12",[]],["title/68-13",[94,65.44]],["name/68-13",[]],["text/68-13",[]],["component/68-13",[]],["keyword/68-13",[]],["title/68",[820,44.394,834,37.483]],["name/68",[820,1.842]],["text/68",[2,1.509,4,0.775,8,1.509,9,2.747,10,1.156,13,0.615,16,0.81,18,0.83,22,1.814,24,1.571,26,0.761,27,1.608,28,0.554,29,0.95,30,0.589,32,2.491,35,2.271,37,2.891,38,0.845,40,0.51,49,1.701,50,0.434,53,0.913,62,7.617,63,0.913,65,0.748,68,0.646,69,5.692,70,3.317,71,0.913,72,2.388,73,0.676,74,0.962,77,1.623,78,1.58,80,0.913,81,1.554,82,0.522,88,0.703,90,1.055,92,0.653,94,4.708,95,0.913,96,1.701,97,0.913,98,0.86,99,0.344,101,1.87,102,1.275,103,0.913,105,1.701,106,1.701,107,1.64,111,0.478,120,1.945,121,0.381,125,0.449,126,0.416,127,0.589,142,0.776,144,0.51,155,1.663,159,1.42,160,0.615,179,0.496,183,2.613,184,0.51,185,1.896,190,0.562,194,0.811,198,0.504,220,0.382,221,0.471,222,0.713,226,0.653,229,0.615,230,1.946,233,0.703,234,0.48,241,0.604,251,2.261,256,1.439,269,0.743,277,1.245,288,2.384,293,0.668,300,0.841,306,1.46,310,0.775,316,1.59,318,1.156,328,0.55,342,6.143,367,0.735,372,1.156,374,0.532,387,3.26,392,0.795,395,0.909,404,0.522,412,0.439,417,0.491,418,1.071,420,0.914,429,1.89,438,1.29,439,0.405,440,1.283,449,0.543,454,0.411,456,2.216,474,1.418,487,0.761,492,0.439,494,1.672,502,2.172,503,0.891,506,1.69,507,1.997,519,2.288,523,1.084,527,0.529,541,0.81,542,0.627,556,0.584,573,2.985,574,1.26,581,0.668,582,1.58,585,0.426,587,1.27,588,0.633,591,1.329,597,0.639,602,0.88,609,0.48,614,0.579,617,0.694,637,1.54,659,0.668,680,0.83,681,0.599,684,2.165,686,0.457,703,0.543,704,1.492,708,0.81,710,0.761,714,2.504,721,0.83,725,1.723,737,0.81,739,0.579,740,0.694,743,1.653,751,2.547,760,0.421,775,0.594,777,0.81,785,4.507,786,1.106,787,1.217,800,0.668,813,0.713,814,4.504,815,4.771,816,1.87,817,6.086,818,1.439,820,6.448,822,1.312,823,1.997,824,3.299,825,4.839,826,5.414,827,4.779,828,8.184,829,3.942,831,1.59,832,0.853,833,2.172,834,4.958,835,0.761,836,0.953,837,0.372,838,0.694,839,3.685,840,1.504,841,2.494,842,3.685,843,2.383,844,2.494,845,2.399,846,1.776,847,0.792,848,0.437,849,0.621,850,0.953,851,0.735,852,0.539,853,0.792,854,2.494,855,0.653,856,1.776,857,0.953,858,0.953,859,0.953,860,0.953,861,0.953,862,2.544,863,0.953,864,0.953,865,0.913,866,0.953,867,0.953,868,0.953,869,0.953,870,0.953,871,0.953,872,0.953,873,0.953,874,0.761,875,0.953,876,0.953,877,1.776,878,1.23,879,0.88,880,0.953,881,0.853,882,0.953,883,0.724,884,1.145,885,0.953,886,0.953,887,0.526,888,0.953,889,1.776,890,0.953,891,0.83,892,1.776,893,1.776,894,1.776,895,0.853,896,1.509,897,0.953,898,0.953,899,0.953,900,0.953,901,0.83,902,0.953,903,0.627,904,6.048,905,0.748,906,0.953,907,3.769,908,0.792,909,0.724,910,0.953,911,1.509,912,0.713,913,0.953,914,1.64,915,1.776,916,1.878,917,1.776,918,2.494,919,0.792,920,0.953,921,1.446,922,1.884,923,0.953,924,1.156,925,2.494,926,0.953,927,1.529,928,0.735,929,0.913,930,1.167,931,1.319,932,0.735,933,0.953,934,0.81,935,1.547,936,0.88,937,0.88,938,5.039,939,6.114,940,0.953,941,0.953,942,1.59,943,0.953,944,4.185,945,1.37,946,1.547,947,0.953,948,0.83,949,0.953,950,0.913,951,1.776,952,0.83,953,0.953,954,0.913,955,0.953,956,1.7
176,957,0.953,958,0.953,959,0.953,960,0.953,961,0.953,962,0.953,963,1.204,964,1.547,965,0.953,966,0.853,967,0.953,968,0.703,969,1.349,970,1.776,971,0.913,972,0.953,973,0.953,974,0.724,975,2.273,976,0.88,977,1.776,978,2.388,979,0.526,980,0.953,981,1.997,982,0.554,983,1.776,984,0.953,985,0.761,986,0.953,987,0.953,988,1.776,989,0.627,990,0.761,991,0.953,992,1.055,993,0.953,994,0.83,995,0.953,996,1.156,997,0.953,998,0.953,999,0.953,1000,0.953,1001,0.953,1002,0.953,1003,0.953,1004,0.953,1005,0.953,1006,0.953,1007,0.953,1008,0.953,1009,0.953,1010,0.953,1011,0.575,1012,0.83,1013,0.953,1014,0.853,1015,0.445,1016,0.953,1017,0.953,1018,0.724,1019,2.189,1020,0.88,1021,0.953,1022,0.88,1023,0.81,1024,0.913,1025,0.953,1026,0.88,1027,0.953,1028,0.953,1029,0.735,1030,0.953,1031,0.513,1032,2.613,1033,0.953,1034,0.953,1035,1.701,1036,2.388,1037,0.953,1038,0.776,1039,0.953,1040,0.913,1041,3.125,1042,2.494,1043,0.761,1044,0.953,1045,0.724,1046,0.81,1047,0.88,1048,0.953,1049,0.953,1050,0.853,1051,0.953,1052,1.547,1053,0.748,1054,0.83,1055,0.653,1056,0.83,1057,0.516,1058,0.953,1059,0.953,1060,0.953,1061,0.953,1062,0.953,1063,0.913,1064,0.953,1065,0.953,1066,0.953,1067,0.953,1068,0.953,1069,0.953,1070,0.953,1071,0.953]],["component/68",[6,0.35]],["keyword/68",[]],["title/69",[1072,71.94]],["name/69",[704,1.495]],["text/69",[0,1.526,6,1.718,7,2.066,9,2.017,19,1.309,22,1.638,24,0.96,28,1.309,32,3.482,34,1.165,35,2.679,38,1.825,41,2.157,51,1.191,68,1.526,69,2.019,70,1.029,81,0.949,86,3.436,98,1.091,99,3.064,111,1.129,113,1.337,125,1.808,133,0.991,144,2.054,146,1.165,147,2.475,153,2.103,160,1.452,162,2.629,164,1.859,165,3.235,168,2.986,170,3.227,205,0.953,211,2.461,221,1.112,223,1.905,228,1.282,239,1.769,251,1.975,255,1.198,256,1.3,261,3.515,262,4.152,269,3.233,286,1.997,292,2.979,309,1.414,310,0.983,312,0.964,314,1.249,328,1.3,347,3.096,351,3.09,356,1.165,363,2.695,366,2.453,370,2.156,375,2.019,377,0.922,383,1.096,385,1.833,387,1.358,392,1.007,407,1.147,408,1.212,411,3.488,412,1.769,413,1.832,414,2.573,416,1.816,420,2.581,428,1.578,437,1.309,439,3.85,454,2.556,459,1.39,466,1.402,471,1.776,495,2.016,496,1.915,512,2.638,514,1.71,519,0.953,520,0.878,524,2.862,532,2.396,536,1.542,548,1.494,564,1.578,568,1.198,573,3.278,585,1.007,587,1.147,594,1.51,604,0.912,631,3.973,632,3.317,649,0.869,664,1.414,682,2.475,686,1.081,691,1.212,696,1.426,699,1.426,701,2.115,702,1.656,704,2.297,709,1.184,717,1.51,718,1.833,730,1.684,748,2.475,772,1.578,829,3.69,849,1.466,931,2.03,963,1.526,992,1.337,1050,2.016,1057,1.219,1073,1.833,1074,2.016,1075,1.39,1076,2.252,1077,0.905,1078,1.66,1079,1.205,1080,2.522,1081,5.035,1082,2.016,1083,1.798,1084,1.414,1086,3.387,1087,2.252,1088,1.3,1089,3.807,1090,2.28,1091,1.39,1092,2.871,1093,1.871,1094,1.3,1095,1.961,1096,1.638,1097,2.252,1098,1.414,1099,2.547,1100,2.475,1101,1.684,1102,2.252,1103,1.833,1104,2.252,1106,1.578,1107,1.737,1108,1.766,1109,2.252,1110,2.129,1111,1.961,1112,1.51,1113,1.414,1114,2.016,1115,2.042,1116,1.896,1117,2.247,1118,1.578,1120,1.71,1121,1.833,1122,1.178,1123,1.48,1124,1.219,1125,1.913,1126,1.118,1127,1.358,1128,2.016,1129,3.011,1130,1.961,1131,1.684,1359,1.871,2057,1.766,2879,1.913]],["component/69",[6,0.35]],["keyword/69",[]],["title/70-1",[689,53.952]],["name/70-1",[]],["text/70-1",[]],["component/70-1",[]],["keyword/70-1",[]],["title/70-2",[701,25.382,801,42.691]],["name/70-2",[]],["text/70-2",[]],["component/70-2",[]],["keyword/70-2",[]],["title/70-3",[1118,42.181,1132,30.98]],["name/70-3",[]],["text/70-3",[]],["component/70-3",[]],["keyword/70-3",[]],["title/70-4",[524,14.831,632,25.051,1132,25.843]],["name/70-4",[]],["text/70-4",[]],["component/70-4",[]],["keyword/70-4",[]],["title/70",[32,17.738,573,22.748,1132,25.843]],["name/70",[1132,1.285]],["text/70",[4,0.92,6,0.806,9,1.458,17,3.471,23,1.968,24,0.898,32,3.803,34,4.432,35,1.104,38,1.724,50,1.649,70,1.656,78,1.334,84,1.553,89,2.456,98,2.312,99,2.519,113,1.251,120,4.221,122,1.108,125,2.248,126,0.92,139,3.365,140,1.108,146,1.876,157,1.773,164,3.095,168,1.628,179,2.482,197,1.918,200,1.233,220,1.453,228,1.2,229,1.358,232,1.334,244,3.077,251,0.83,255,1.929,269,1.997,288,1.084,300,0.997,306,1.233,310,3.047,312,1.552,338,3.472,351,2.456,356,1.09,376,1.963,377,1.484,383,1.025,392,3.122,395,1.078,407,1.073,408,1.951,411,2.822,412,0.971,413,1.324,416,1.716,429,1.946,438,1.09,439,0.895,440,1.084,449,1.2,471,0.975,473,1.108,508,1.576,519,2.02,521,1.473,522,1.261,523,0.916,524,2.854,527,2.648,568,1.121,573,4.298,575,1.323,576,1.29,585,0.942,597,1.412,613,1.653,632,1.051,652,1.682,659,1.476,664,1.323,670,1.127,671,0.935,687,2.186,693,1.323,699,1.334,701,2.39,702,3.225,723,1.27,730,1.576,733,1.056,742,1.09,743,1.114,745,1.476,755,1.224,758,1.929,759,2.107,760,2.109,773,2.571,782,1.323,783,1.251,791,1.886,801,3.384,802,2.092,806,5.803,816,1.261,837,1.413,884,1.358,901,1.835,927,4.441,932,1.625,975,1.532,1019,1.251,1077,1.919,1079,1.127,1085,1.459,1086,3.617,1088,2.092,1089,1.108,1090,3.795,1092,3.57,1096,1.532,1110,1.169,1127,1.27,1132,2.917,1133,3.157,1134,5.477,1135,3.245,1136,1.886,1137,1.835,1138,1.835,1139,1.835,1140,4.447,1141,4.055,1142,1.653,1143,1.886,1144,1.412,1145,5.669,1146,5.682,1147,2.539,1148,2.431,1149,2.107,1150,3.884,1151,1.29,1152,1.945,1153,3.245,1154,1.427,1155,1.102,1156,1.28,1157,2.949,1158,2.107,1159,1.886,1160,1.576,1161,1.6,1162,1.459,1163,2.107,1164,2.107,1165,2.603,1166,2.712,1167,1.945,1168,1.715,1169,1.532,1170,1.301,1171,1.682,1172,1.79,1173,1.682,1174,2.107,1175,4.24,1176,1.553,1177,2.107,1178,1.715,1179,1.653,1180,2.107,1181,1.513,1182,2.107,1183,1.312,1184,1.886,1185,1.28,1186,2.107,1187,1.6,1188,1.79,1189,1.398]],["component/70",[6,0.35]],["keyword/70",[]],["title/71-1",[10,48.908]],["name/71-1",[]],["text/71-1",[]],["component/71-1",[]],["keyword/71-1",[]],["title/71-2",[1190,44.3]],["name/71-2",[]],["text/71-2",[]],["component/71-2",[]],["keyword/71-2",[]],["title/71-3",[188,30.031,1191,38.822]],["name/71-3",[]],["text/71-3",[]],["component/71-3",[]],["keyword/71-3",[]],["title/71-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/71-4",[]],["text/71-4",[]],["component/71-4",[]],["keyword/71-4",[]],["title/71-5",[139,36.226]],["name/71-5",[]],["text/71-5",[]],["component/71-5",[]],["keyword/71-5",[]],["title/71-6",[523,26.178,1193,34.99]],["name/71-6",[]],["text/71-6",[]],["component/71-6",[]],["keyword/71-6",[]],["title/71-7",[351,14.945,1194,29.827,1195,25.571]],["name/71-7",[]],["text/71-7",[]],["component/71-7",[]],["keyword/71-7",[]],["title/71-8",[194,19.679,351,12.82,1196,43.077,1197,43.077]],["name/71-8",[]],["text/71-8",[]],["component/71-8",[]],["keyword/71-8",[]],["title/71-9",[512,31.666,701,25.382]],["name/71-9",[]],["text/71-9",[]],["component/71-9",[]],["keyword/71-9",[]],["title/71-10",[520,23.467,604,24.38]],["name/71-10",[]],["text/71-10",[]],["component/71-10",[]],["keyword/71-10",[]],["title/71-11",[604,24.38,1198,42.181]],["name/71-11",[]],["text/71-11",[]],["component/71-11",[]],["keyword/71-11",[]],["title/71-12",[584,29.163,604,24.38]],["name/71-12",[]],["text/71-12",[]],["component/71-12",[]],["keyword/71-12",[]],["title/71-13",[1115,39.972]],["name/71-13",[]],["text/71-13",[]],["component/71-13",[]],["keyword/71-13",[]],["title/71-14",[524,22.19]],["name/71-14",[]],["text/71-14",[]],["component/71-14",[]],["keyword/71-14",[]],["title/71-15",[404,32.989,524,17.779]],["name/71-15",[]],["text/71-15",[]],["component/71-15",[]],["keyword/71-15",[]],["title/71-16",[1199,43.368]],["name/71-16",[]],["text/71-16",[]],["component/71-16",[]],["keyword/71-16",[]],["title/71-17",[78,38.13,1199,34.748]],["name/71-17",[]],["text/71-17",[]],["component/71-17",[]],["keyword/71-17",[]],["title/71-18",[351,
117.916,1077,24.208]],["name/71-18",[]],["text/71-18",[]],["component/71-18",[]],["keyword/71-18",[]],["title/71-19",[351,14.945,521,20.41,1077,20.194]],["name/71-19",[]],["text/71-19",[]],["component/71-19",[]],["keyword/71-19",[]],["title/71-20",[35,11.488,351,11.223,701,15.9,1077,15.165,1200,32.845]],["name/71-20",[]],["text/71-20",[]],["component/71-20",[]],["keyword/71-20",[]],["title/71-21",[454,25.973,1116,29.733]],["name/71-21",[]],["text/71-21",[]],["component/71-21",[]],["keyword/71-21",[]],["title/71-22",[454,25.973,1116,29.733]],["name/71-22",[]],["text/71-22",[]],["component/71-22",[]],["keyword/71-22",[]],["title/71-23",[32,15.215,439,18.3,454,18.585,1116,21.275]],["name/71-23",[]],["text/71-23",[]],["component/71-23",[]],["keyword/71-23",[]],["title/71-24",[1115,32.027,1350,46.44]],["name/71-24",[]],["text/71-24",[]],["component/71-24",[]],["keyword/71-24",[]],["title/71-25",[35,15.298,251,19.777,351,14.945]],["name/71-25",[]],["text/71-25",[]],["component/71-25",[]],["keyword/71-25",[]],["title/71-26",[520,16.792,604,17.445,1046,36.604,1201,29.185]],["name/71-26",[]],["text/71-26",[]],["component/71-26",[]],["keyword/71-26",[]],["title/71-27",[220,24.123,415,39.563]],["name/71-27",[]],["text/71-27",[]],["component/71-27",[]],["keyword/71-27",[]],["title/71",[194,27.503,351,17.916]],["name/71",[194,0.652,351,0.425]],["text/71",[4,1.309,6,1.266,7,0.396,9,0.797,13,0.475,14,1.013,18,0.641,23,2.446,24,1.073,27,5.109,29,0.394,30,0.454,32,2.985,33,0.988,35,2.656,38,0.662,40,0.745,45,0.568,46,1.303,50,1.144,51,0.737,66,1.134,69,0.387,70,0.636,73,0.522,75,0.577,77,0.479,81,0.587,82,0.403,83,0.454,92,0.954,98,0.356,99,0.908,101,0.44,113,0.437,119,0.943,120,0.342,122,0.387,124,1.122,125,0.656,126,0.321,127,1.224,133,1.692,140,1.043,144,0.745,155,0.391,156,0.55,157,0.36,159,1.129,164,0.356,167,0.484,173,2.431,174,0.431,179,1.031,185,0.379,187,0.522,188,2.103,190,0.434,194,0.906,197,0.389,198,1.049,199,1.606,200,0.431,205,0.589,211,1.893,213,0.89,214,0.447,216,0.437,218,1.256,220,1.008,226,0.504,228,0.419,230,0.458,231,0.462,232,0.882,234,0.999,242,0.599,244,0.475,246,0.458,251,0.991,255,0.391,257,0.516,261,0.634,262,0.516,268,0.458,275,0.759,276,0.488,277,1.763,279,0.965,288,0.379,290,3.71,294,0.915,300,1.628,306,0.431,309,0.875,310,0.608,311,0.773,312,0.315,314,0.408,318,0.479,323,0.51,324,1.338,334,0.387,337,0.522,344,0.833,347,1.689,351,3.273,355,0.411,361,0.611,363,1.918,371,0.488,372,0.479,377,0.812,383,0.358,388,0.444,392,0.623,393,0.484,395,0.713,401,0.51,404,1.087,406,1.316,408,1.354,410,0.671,411,2.335,412,0.642,413,2.893,416,0.348,417,0.717,418,0.84,420,0.379,424,0.425,426,0.484,427,1.529,429,0.809,430,0.444,432,0.705,437,1.152,439,0.842,440,0.379,445,0.709,450,0.379,454,2.831,462,0.47,463,0.403,466,0.458,468,1.868,471,1.592,473,0.387,474,0.588,491,1.467,492,0.642,496,0.695,497,0.437,499,3.554,501,0.653,503,0.698,504,0.705,512,1.323,519,1.627,520,2.989,521,0.299,523,0.606,524,2.6,527,0.408,532,2.328,537,0.51,538,0.976,542,1.303,547,1.291,556,0.451,557,1.087,565,2.273,568,1.055,570,0.351,575,0.462,584,2.503,585,1.125,589,0.798,590,1.756,592,1.027,593,0.559,594,0.493,599,0.493,603,0.522,604,3.106,606,0.499,614,0.447,616,0.499,619,1.708,632,0.367,647,0.431,649,1.158,655,1.134,660,1.245,666,0.406,670,1.061,671,0.88,676,0.406,681,0.462,684,0.51,686,0.668,687,0.444,692,1.004,697,0.51,700,0.454,701,2.845,702,2.457,704,0.44,709,0.387,712,0.406,717,0.493,729,1.042,733,0.369,734,0.853,741,0.778,751,1.185,752,0.543,758,1.055,759,0.428,760,1.325,780,0.867,782,0.462,787,0.504,788,1.358,791,1.031,792,0.625,796,0.89,810,1.362,811,0.611,814,0.577,822,1.043,823,0.47,827,0.499,829,1.202,837,0.543,838,0.535,840,0.444,843,0.793,845,0.907,848,0.639,849,1.638,851,0.568,878,0.51,884,0.475,887,1.093,905,0.577,922,0.444,924,0.479,927,1.467,931,0.389,948,1.213,968,0.543,989,0.915,990,0.588,996,0.479,1019,0.827,1031,0.75,1055,0.504,1057,2.945,1077,3.436,1079,1.605,1086,1.685,1088,0.425,1089,0.733,1091,0.86,1098,1.245,1110,0.408,1113,0.462,1115,2.424,1116,4.496,1123,0.484,1124,0.398,1126,0.365,1136,0.659,1138,0.641,1143,0.659,1144,1.329,1147,2.045,1155,0.385,1156,0.447,1157,0.383,1161,0.559,1166,1.483,1170,0.454,1184,0.659,1185,0.846,1189,0.488,1192,0.406,1195,1.957,1198,0.976,1199,4.182,1200,0.641,1201,1.705,1202,0.659,1203,0.736,1204,0.898,1205,0.736,1206,0.568,1207,1.235,1208,1.286,1209,0.882,1210,0.736,1211,0.488,1212,0.516,1213,1.093,1214,0.599,1215,0.428,1216,2.227,1217,0.493,1218,0.493,1219,0.898,1220,1.358,1221,0.611,1222,0.659,1223,1.868,1224,1.334,1225,0.528,1226,0.875,1227,0.568,1228,0.736,1229,0.659,1230,1.286,1231,2.048,1232,0.965,1233,0.736,1234,0.516,1235,0.736,1236,0.522,1237,0.535,1238,0.577,1239,4.774,1240,1.343,1242,0.416,1243,0.736,1244,1.343,1245,0.577,1246,0.499,1247,0.783,1248,1.442,1249,0.611,1250,0.736,1251,1.67,1252,0.736,1253,0.833,1254,0.493,1255,3.307,1256,1.343,1257,1.78,1258,3.202,1259,1.393,1260,4.154,1261,0.736,1262,0.736,1263,0.736,1264,0.736,1265,1.393,1266,0.976,1267,0.488,1268,1.393,1269,1.983,1270,3.177,1271,1,1272,2.077,1273,0.466,1274,0.611,1275,0.611,1276,0.736,1277,2.872,1278,0.68,1279,1.393,1280,0.736,1283,0.736,1284,0.736,1285,0.705,1286,0.588,1287,0.499,1288,0.659,1289,0.588,1290,2.16,1291,4.08,1292,1.393,1293,1.727,1294,1.555,1295,1.184,1296,0.815,1297,0.599,1298,1.608,1299,1.093,1300,1.316,1301,0.736,1302,1.983,1303,1.279,1304,0.488,1305,1.608,1306,0.568,1307,0.568,1308,0.736,1309,0.428,1310,0.488,1311,1.074,1312,0.778,1313,1.267,1314,0.568,1315,0.479,1316,0.493,1317,0.559,1319,0.68,1320,0.736,1321,1.393,1322,0.736,1323,0.577,1324,0.778,1325,1.031,1326,0.736,1327,0.641,1328,1.393,1329,1.983,1330,0.736,1331,0.577,1332,1.555,1333,0.736,1335,0.736,1336,0.568,1337,0.499,1338,0.625,1339,0.559,1340,0.516,1341,0.475,1342,0.499,1343,0.954,1344,0.447,1346,0.736,1347,0.588,1348,0.736,1349,0.625,1351,0.55,1352,0.516,1353,0.736,1354,0.736,1355,0.736,1356,0.543,1357,0.44,1358,0.504,1359,0.611,1466,0.406,1577,0.68,1715,0.588,1752,0.51,1978,0.599,2644,0.55,2812,0.543,3289,0.736,3315,0.778,3316,0.841]],["component/71",[6,0.35]],["keyword/71",[]],["title/72-1",[689,53.952]],["name/72-1",[]],["text/72-1",[]],["component/72-1",[]],["keyword/72-1",[]],["title/72-2",[1190,44.3]],["name/72-2",[]],["text/72-2",[]],["component/72-2",[]],["keyword/72-2",[]],["title/72-3",[188,30.031,1191,38.822]],["name/72-3",[]],["text/72-3",[]],["component/72-3",[]],["keyword/72-3",[]],["title/72-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/72-4",[]],["text/72-4",[]],["component/72-4",[]],["keyword/72-4",[]],["title/72-5",[523,26.178,1193,34.99]],["name/72-5",[]],["text/72-5",[]],["component/72-5",[]],["keyword/72-5",[]],["title/72-6",[205,18.23,269,18.026,347,17.261,1127,25.973]],["name/72-6",[]],["text/72-6",[]],["component/72-6",[]],["keyword/72-6",[]],["title/72-7",[125,28.363,351,17.916]],["name/72-7",[]],["text/72-7",[]],["component/72-7",[]],["keyword/72-7",[]],["title/72-8",[524,17.779,701,25.382]],["name/72-8",[]],["text/72-8",[]],["component/72-8",[]],["keyword/72-8",[]],["title/72-9",[99,18.12,121,20.053,351,14.945]],["name/72-9",[]],["text/72-9",[]],["component/72-9",[]],["keyword/72-9",[]],["title/72-10",[351,14.945,454,21.666,3317,44.955]],["name/72-10",[]],["text/72-10",[]],["component/72-10",[]],["keyword/72-10",[]],["title/72-11",[351,17.916,3317,53.891]],["name/72-11",[]],["text/72-11",[]],["component/72-11",[]],["keyword/72-11",[]],["title/72-12",[351,17.916,454,25.973]],["name/72-12",[]],["text/72-12",[]],["component/72-12",[]],["keyword/72-12",[]],["title/72-13",[35,18.339,2685,50.022]],["name/72-13",[]],["text/72-13",[]],["component/72-13",[]],["keyword/72-13",[]],["title/72-14",[223,24.926,429,20.483,810,27.189]],["name/72-14",[]],["text/72-14",[]],["component/72-14",[]],["keyword/72-14",[]],["title/72-15",[155,32.027,210,30.183]],["name/72-15",[]],["text/72-15",[]],["component/72-15",[]],["keyword/72-15",[]],["title/72",[221,29.733,691,32.401]],["name/72",[221,0.705,691,0.768]],["text/72",[6,1.946,7,1.388,9,1.527,23,4.18,27,0.948,28,0.576,29,0.53,30,0.612,32,1.956,34,0.513,35,1.79,38,0.471,50,2.165,69,1.357,74,0.997,82,1.768,83,0.612,99,1.865,101,0.593,109,0.741,111,0.497,119,0.876,121,2.582,124,1.459,125,0.467,126,2.256,129,0.823,133,1.135,139,0.478,140,1.697,142,0.807,150,0.863,153,0.543,155,0.527,157,1.857,168,0.445,169,1.34,174,1.51,175,0.651,178,0.658,179,1.342,180,1.322,184,0.53,185,0.948,187,2.692,188,3.085,189,0.823,190,0.584,194,0.453,196,0.753,198,2.277,199,0.463,205,2.014,210,0.497,211,0.765,214,0.602,216,2.255,220,1.034,221,2.126,222,0.741,223,2.749,228,0.564,229,0.639,230,0.617,231,2.026,232,1.166,234,0.499,239,0.457,246,0.617,249,0.958,250,0.54,251,1.874,256,0.572,257,0.694,261,0.838,262,1.807,269,2.915,271,0.887,275,0.54,283,0.791,286,1.342,288,1.327,294,0.651,300,0.469,301,1.765,310,1.408,311,0.55,312,1.625,323,1.275,338,1.128,347,2.355,351,3.208,355,0.553,363,0.451,371,0.658,377,0.406,388,0.598,407,0.938,409,0.639,410,1.244,411,0.85,413,2.457,414,0.664,416,0.469,417,0.948,418,0.598,429,2.637,430,0.598,439,0.421,440,0.51,445,0.505,454,2.39,462,1.648,468,0.617,473,0.521,478,0.863,491,2.105,497,0.589,501,1.21,502,1.604,503,0.497,506,
10.671,507,0.633,514,0.753,520,2.622,521,1.749,524,2.184,525,0.598,526,0.741,532,2.469,535,0.887,541,0.842,557,0.543,565,0.919,570,0.473,573,0.449,575,1.156,581,1.29,582,0.628,583,2.886,585,0.443,589,0.568,590,0.58,594,0.664,606,0.671,616,1.748,631,0.664,632,0.494,641,0.633,642,0.461,647,2.222,649,0.995,664,2.384,666,1.015,670,0.985,681,1.62,682,3.572,686,1.822,688,0.842,690,1.222,691,4.647,692,1.923,694,1.479,695,0.823,698,2.405,701,2.006,702,1.113,709,0.969,714,0.593,723,0.598,726,0.617,739,3.929,741,0.553,749,0.572,751,1.215,755,2.207,760,0.814,762,0.753,765,3.144,789,2.009,797,0.664,804,0.807,807,0.915,809,1.62,810,0.537,822,0.521,829,0.473,840,0.598,843,0.564,845,0.645,848,1.48,849,0.645,874,0.791,884,0.639,909,0.753,924,1.199,927,1.262,932,0.765,952,0.863,974,0.753,985,0.791,992,1.532,996,0.645,1019,0.589,1031,0.533,1053,0.777,1057,0.537,1077,3.606,1079,0.985,1086,0.434,1100,0.639,1106,0.694,1110,1.022,1115,1.716,1116,3.054,1122,1.687,1127,1.11,1134,0.572,1147,1.372,1151,0.607,1155,1.986,1161,0.753,1168,2.626,1181,0.712,1183,0.617,1190,1.902,1192,0.546,1193,0.576,1199,0.572,1211,2.141,1216,0.453,1217,0.664,1218,0.664,1219,0.639,1247,0.557,1256,1.248,1258,1.342,1260,0.546,1271,0.712,1287,0.671,1295,1.565,1309,0.576,1310,1.712,1317,0.753,1331,0.777,1339,0.753,1340,1.29,1343,0.679,1344,0.602,1352,0.694,1357,1.544,1361,3.399,1394,3.397,1424,0.777,1442,1.261,1453,1.649,1463,0.576,1466,1.779,1497,1.156,1500,0.557,1502,0.721,1508,0.863,1511,1.421,1512,1.248,1527,0.651,1559,0.58,1567,0.557,1589,0.622,1593,1.34,1597,0.686,1598,0.686,1605,0.863,1617,3.397,1619,1.748,1621,0.561,1635,0.842,1650,0.602,1663,0.777,1664,0.671,1665,0.612,1667,0.753,1680,0.765,1713,0.703,1722,2.981,1736,2.347,1778,1.902,1850,0.765,1885,0.991,1893,0.823,1894,0.887,1938,0.686,1941,0.765,1960,0.731,1962,0.863,1964,0.765,1966,0.991,1989,0.991,2035,0.823,2060,2.81,2109,0.664,2111,1.93,2136,0.823,2179,0.991,2182,0.753,2196,0.791,2269,0.991,2274,0.991,2278,0.949,2323,1.701,2330,0.823,2338,1.499,2339,0.887,2372,0.703,2413,0.991,2482,0.622,2488,1.763,2632,0.721,2643,0.753,2686,2.81,2806,0.842,2811,0.863,2849,0.602,2851,2.68,2874,0.777,3248,0.915,3261,0.949,3317,1.649,3318,1.048,3319,1.048,3320,1.53,3321,1.048,3322,1.048,3323,1.048,3324,1.048,3325,1.947,3326,2.58,3327,2.888,3328,1.048,3329,1.048,3330,7.363,3331,1.048,3332,1.048,3333,1.048,3334,1.048,3335,1.048,3336,1.842,3337,1.947,3338,1.048,3339,1.048,3340,1.048,3341,1.048,3342,1.048,3343,1.048,3344,3.41,3345,1.947,3346,1.947,3347,2.727,3348,1.048,3349,1.048,3350,1.048,3351,1.947,3352,1.048,3353,1.947,3354,1.048,3355,2.727,3356,1.947,3357,1.048,3358,1.048,3359,1.947,3360,1.947,3361,1.048,3362,1.048,3363,1.947,3364,1.947,3365,1.048,3366,1.048,3367,1.048,3368,1.048,3369,0.949,3370,1.048,3371,1.947,3372,1.048,3373,1.048,3374,1.048,3375,1.048,3376,1.048,3377,1.048,3378,1.048,3379,0.887,3380,0.887,3381,1.048,3382,1.048,3383,1.048,3384,1.947,3385,1.048,3386,1.947,3387,1.048,3388,1.048,3389,1.048]],["component/72",[6,0.35]],["keyword/72",[]],["title/73-1",[81,18.162,126,18.806,220,17.261,790,27.778]],["name/73-1",[]],["text/73-1",[]],["component/73-1",[]],["keyword/73-1",[]],["title/73-2",[7,32.401,211,25.006]],["name/73-2",[]],["text/73-2",[]],["component/73-2",[]],["keyword/73-2",[]],["title/73-3",[7,27.028,126,21.924,1361,44.955]],["name/73-3",[]],["text/73-3",[]],["component/73-3",[]],["keyword/73-3",[]],["title/73-4",[205,25.478,251,23.708]],["name/73-4",[]],["text/73-4",[]],["component/73-4",[]],["keyword/73-4",[]],["title/73-5",[778,46.44,1362,57.64]],["name/73-5",[]],["text/73-5",[]],["component/73-5",[]],["keyword/73-5",[]],["title/73-6",[180,43.227,512,31.666]],["name/73-6",[]],["text/73-6",[]],["component/73-6",[]],["keyword/73-6",[]],["title/73-7",[1363,75.138]],["name/73-7",[]],["text/73-7",[]],["component/73-7",[]],["keyword/73-7",[]],["title/73",[231,37.801,405,44.394]],["name/73",[231,0.896,405,1.052]],["text/73",[4,0.904,6,1.047,7,3.153,9,0.832,10,0.503,23,4.791,24,1.118,27,2.588,32,1.979,35,1.707,41,0.434,45,0.596,50,0.942,65,1.143,74,0.789,81,0.873,83,0.477,86,0.529,93,0.628,99,1.125,101,1.568,111,1.314,113,0.866,120,0.962,121,2.127,125,0.975,126,2.325,133,0.34,139,1.264,140,0.767,141,0.493,144,0.78,146,0.399,152,0.641,154,0.784,155,0.411,157,0.713,163,1.418,164,3.433,165,3.435,166,1.982,167,1.36,168,0.655,170,2.17,171,0.606,172,0.949,175,1.36,179,0.402,180,3.381,190,0.455,193,0.547,199,0.681,205,2.479,211,1.483,213,0.493,215,0.586,216,0.459,220,0.829,221,0.381,223,2.908,224,0.562,231,2.957,234,0.734,239,1.437,246,0.481,247,0.739,249,1.622,251,1.855,255,0.411,259,3.244,261,2.774,262,0.541,263,0.713,267,0.656,268,0.907,269,1.097,270,0.656,275,0.42,279,0.535,288,3.732,294,1.36,300,0.365,301,0.677,302,2.621,306,0.452,310,0.904,312,1.705,314,0.809,325,0.547,326,0.459,327,3.057,328,0.841,336,0.554,343,0.507,345,0.816,347,1.596,351,0.928,355,1.156,356,1.848,357,0.512,359,1.346,366,0.713,371,1.374,377,0.847,383,0.709,387,0.465,388,0.465,392,1.597,399,1.278,400,0.518,404,0.423,405,1.075,407,0.393,408,0.784,409,0.94,410,0.998,411,0.48,412,0.672,413,0.282,417,0.397,427,0.469,429,1.921,430,0.465,439,0.328,440,0.397,448,0.713,449,1.179,450,2.05,454,0.893,455,0.691,466,0.481,471,0.675,473,0.406,477,0.606,479,0.443,484,1.541,489,1.593,491,0.713,492,3.342,497,1.229,499,0.387,500,0.569,501,0.971,503,0.387,509,0.449,512,1.089,519,1.109,520,1.216,521,0.841,523,0.336,524,2.188,532,0.989,547,0.503,548,0.512,563,0.596,564,0.541,565,0.385,570,0.369,587,0.393,590,0.452,596,1.486,599,0.518,600,1.06,619,0.723,622,0.617,631,1.388,633,2.895,637,0.477,664,0.915,670,1.402,671,1.767,679,0.923,681,0.485,683,0.596,686,0.699,691,1.411,694,0.835,696,0.923,697,0.535,703,0.83,713,0.529,715,0.628,725,1.445,733,0.387,735,0.672,736,0.443,739,0.469,740,0.562,741,0.814,742,0.399,748,0.94,758,0.775,759,0.847,760,0.341,762,1.572,765,2.691,778,2.755,781,1.307,782,1.3,783,0.866,785,0.931,787,
10.529,789,4.304,790,2.011,822,0.406,829,0.369,834,1.632,840,0.465,847,0.641,848,0.669,852,0.437,884,0.498,887,0.426,903,0.958,929,0.739,930,0.507,963,0.523,968,0.569,979,0.804,989,0.507,1011,0.465,1015,1.456,1019,0.866,1031,0.416,1032,0.547,1053,0.606,1057,1.121,1077,2.142,1080,1.722,1081,1.238,1084,1.3,1086,3.312,1098,0.485,1099,0.512,1100,0.498,1103,0.628,1107,0.596,1116,0.72,1117,0.853,1127,1.88,1141,0.656,1155,2.463,1160,0.577,1162,0.535,1193,0.449,1207,0.481,1215,0.449,1226,0.485,1237,0.562,1240,0.523,1247,1.163,1256,0.523,1258,2.45,1260,3.485,1266,1.45,1273,0.489,1300,1.739,1309,0.847,1310,0.512,1338,0.656,1340,0.541,1361,0.691,1362,1.982,1364,0.586,1365,0.656,1366,0.547,1367,0.691,1368,0.816,1369,1.653,1370,0.772,1371,0.816,1372,0.739,1373,0.816,1374,2.88,1375,0.541,1376,0.739,1377,0.518,1378,0.713,1379,1.305,1380,0.562,1381,0.816,1382,4.61,1383,3.775,1384,0.772,1385,0.816,1386,1.54,1388,2.188,1389,0.816,1390,0.577,1391,0.816,1392,0.816,1393,0.816,1394,2.05,1395,2.188,1396,2.188,1397,0.816,1398,0.816,1399,0.772,1400,0.641,1401,0.816,1402,0.816,1403,0.772,1404,0.816,1405,1.395,1407,1.457,1409,1.958,1411,0.816,1412,0.739,1413,0.816,1414,2.188,1416,0.691,1417,0.691,1418,0.713,1420,0.628,1421,0.816,1422,0.713,1423,0.641,1424,0.606,1433,1.882,1434,2.188,1435,0.816,1436,1.624,1437,1.034,1439,4.961,1440,6.681,1441,1.54,1442,4.329,1443,6.321,1444,1.54,1445,1.3,1446,2.77,1447,1.54,1448,1.54,1449,2.188,1450,1.54,1452,1.305,1454,2.133,1455,1.457,1460,0.569,1461,1.305,1462,1.853,1463,0.449,1464,1.305,1465,1.269,1466,1.969,1467,0.987,1468,0.987,1469,0.987,1470,0.987,1471,1.739,1472,0.987,1473,0.923,1474,0.987,1475,0.987,1476,0.987,1477,1.374,1478,1.739,1479,0.967,1480,1.269,1485,0.547,1486,0.816,1487,0.816,1488,0.512,1489,0.518,1490,0.489,1496,0.816,1497,1.646,1498,0.816,1499,1.572,1500,0.434,1502,1.506,1503,0.641,1506,0.816,1507,1.54,1509,1.653,1510,3.775,1511,0.596,1512,0.523,1513,1.457,1514,3.913,1515,0.656,1516,0.816,1517,0.503,1518,0.816,1519,0.713,1520,0.713,1521,0.816,1522,0.586,1523,0.816,1524,0.816,1527,0.507,1528,0.816,1529,0.816,1530,0.816,1535,0.656,1536,0.713,1537,1.346,1538,0.535,1539,3.073,1540,0.628,1542,0.816,1543,0.739,1544,0.816,1545,1.54,1546,0.816,1547,0.816,1548,0.816,1549,0.628,1550,0.816,1551,0.772,1552,0.816,1553,0.739,1554,0.816,1555,0.816,1556,0.816,1557,0.816,1558,0.656,1559,0.452,1560,0.816,1561,0.656,1562,0.547,1563,0.816,1564,0.816,1567,0.434,1650,0.469,1658,0.493,1663,1.624,1664,0.523,1713,0.547,1718,0.586,1819,0.656,1864,0.672,2395,1.395,2851,0.641,2904,1.526,2905,0.656,3132,0.816,3223,0.713,3312,0.816,3327,0.691,3390,0.883,3391,0.883,3392,0.883,3393,0.883,3394,1.211,3395,1.667,3396,1.667,3397,1.346,3398,0.883,3399,0.883,3400,0.883,3401,0.883,3402,0.883,3403,0.883,3404,4.639,3405,0.883,3406,1.346,3407,1.269,3408,1.346,3409,0.883,3410,0.883,3411,0.883,3412,0.672,3413,0.883,3414,0.883,3415,0.713,3416,0.883,3417,0.883,3418,0.883,3419,0.883,3420,0.883,3421,0.883,3422,1.667,3423,0.883,3424,0.883,3425,0.883,3426,0.883,3427,0.883,3428,1.667,3429,0.772,3430,0.883,3431,0.883,3432,0.883]],["component/73",[6,0.35]],["keyword/73",[]],["title/74-1",[10,39.186,733,30.183]],["name/74-1",[]],["text/74-1",[]],["component/74-1",[]],["keyword/74-1",[]],["title/74-2",[1190,44.3]],["name/74-2",[]],["text/74-2",[]],["component/74-2",[]],["keyword/74-2",[]],["title/74-3",[188,30.031,1191,38.822]],["name/74-3",[]],["text/74-3",[]],["component/74-3",[]],["keyword/74-3",[]],["title/74-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/74-4",[]],["text/74-4",[]],["component/74-4",[]],["keyword/74-4",[]],["title/74-5",[139,36.226]],["name/74-5",[]],["text/74-5",[]],["component/74-5",[]],["keyword/74-5",[]],["title/74-6",[523,26.178,1193,34.99]],["name/74-6",[]],["text/74-6",[]],["component/74-6",[]],["keyword/74-6",[]],["title/74-7",[445,30.654,1212,42.181]],["name/74-7",[]],["text/74-7",[]],["component/74-7",[]],["keyword/74-7",[]],["title/74-8",[524,22.19]],["name/74-8",[]],["text/74-8",[]],["component/74-8",[]],["keyword/74-8",[]],["title/74-9",[524,17.779,1248,43.794]],["name/74-9",[]],["text/74-9",[]],["component/74-9",[]],["keyword/74-9",[]],["title/74-10",[351,17.916,524,17.779]],["name/74-10",[]],["text/74-10",[]],["component/74-10",[]],["keyword/74-10",[]],["title/74-11",[484,21.666,702,21.666,1015,23.449]],["name/74-11",[]],["text/74-11",[]],["component/74-11",[]],["keyword/74-11",[]],["title/74-12",[426,39.563,1565,49.002]],["name/74-12",[]],["text/74-12",[]],["component/74-12",[]],["keyword/74-12",[]],["title/74-13",[1296,35.239,1566,40.788]],["name/74-13",[]],["text/74-13",[]],["component/74-13",[]],["keyword/74-13",[]],["title/74-14",[427,36.582,520,23.467]],["name/74-14",[]],["text/74-14",[]],["component/74-14",[]],["keyword/74-14",[]],["title/74-15",[210,37.672]],["name/74-15",[]],["text/74-15",[]],["component/74-15",[]],["keyword/74-15",[]],["title/74",[249,22.409,250,23.462,484,18.585,1015,20.113]],["name/74",[249,0.4,250,0.419,484,0.332,1015,0.359]],["text/74",[4,1.117,6,1.078,7,0.237,9,0.908,13,0.549,14,0.32,19,0.256,20,0.258,21,0.421,23,2.7,24,0.963,27,0.822,28,0.256,29,0.661,30,0.272,32,2.143,33,0.312,34,0.228,35,1.531,36,0.68,37,0.668,38,0.759,40,2.689,41,0.247,46,0.559,48,0.366,51,0.45,61,0.394,68,0.298,70,0.565,74,0.238,77,0.286,78,0.279,81,0.359,82,0.241,86,0.301,98,1.378,99,3.16,101,0.263,111,0.62,113,0.261,119,1.481,120,0.901,121,0.494,124,1.907,125,1.468,126,1.36,127,0.272,128,0.339,133,1.126,138,0.526,139,1.088,140,1.901,144,0.661,153,0.241,155,1.031,157,1.524,164,0.213,167,0.289,168,1.399,169,0.32,170,0.24,173,0.797,174,0.258,184,0.855,185,1.979,187,0.312,188,2.133,194,0.885,197,0.654,198,1.194,199,1.328,200,0.498,201,0.334,202,0.589,204,0.276,205,0.955,210,0.801,211,1.294,213,0.544,214,1.555,216,1.151,217,0.912,220,1.351,221,0.789,223,0.422,224,0.619,226,0.301,227,0.619,228,0.485,230,0.274,233,0.324,238,0.637,239,0.57,241,0.539,246,0.53,249,2.865,250,1.394,251,1.601,258,0.329,259,3.552,261,1.644,268,0.53,269,1.191,275,0.24,280,0.329,281,0.899,286,0.831,288,1.464,292,0.261,293,0.596,294,1.273,300,1.474,301,0.743,303,0.329,304,0.301,305,0.925,307,0.305,309,0.534,310,0.54,311,0.886,312,1.096,313,0.339,314,0.886,324,0.453,325,0.312,326,0.734,327,0.267,328,0.491,337,0.604,338,0.521,340,0.312,343,1.87,344,0.263,347,1.87,351,2.044,356,0.44,357,1.286,363,0.2,365,0.549,366,0.215,375,1.187,376,1.687,377,1.048,379,0.339,383,0.602,387,0.513,388,0.513,392,0.715,395,0.225,397,0.334,403,0.374,404,0.875,406,0.82,408,0.237,409,0.549,410,1.088,411,1.956,412,0.736,413,2.118,414,0.295,415,0.289,416,0.756,417,0.636,418,0.745,424,0.491,426,0.812,429,0.347,430,0.265,436,0.339,437,0.495,438,1.002,440,0.226,445,1.303,450,0.438,451,0.292,453,0.329,454,0.19,459,0.272,462,0.281,473,0.231,474,0.351,484,3.819,489,1.893,491,0.215,492,2.467,493,0.272,497,0.261,499,0.221,501,0.909,506,0.298,509,0.256,511,0.312,512,0.65,515,0.324,519,0.36,520,0.623,521,0.502,523,0.537,524,2.819,525,1.168,527,0.472,531,0.298,532,0.21,537,0.305,538,0.308,548,0.292,555,1.547,557,0.466,56
15,0.425,568,0.453,570,1.488,573,0.199,575,0.534,584,0.774,585,0.381,587,0.224,592,0.324,594,1.071,595,0.596,596,0.316,599,1.071,604,0.785,606,0.577,609,1.822,610,0.383,612,0.559,614,0.517,615,0.351,617,0.619,619,1.12,625,0.837,637,0.272,639,0.942,641,0.281,642,0.396,647,1.134,649,0.871,660,0.776,666,1.569,668,0.334,669,4.797,670,1.208,671,1.986,672,0.276,676,0.469,679,1.227,682,0.284,686,0.93,691,0.237,692,1.143,696,1.227,698,0.539,699,0.279,701,0.521,702,2.014,703,1.457,709,0.231,712,1.718,723,0.265,725,1.859,726,0.274,728,0.366,733,0.801,736,0.252,739,0.267,741,1.26,742,0.228,748,1.456,749,0.491,751,0.582,755,2.819,756,2.849,758,0.85,759,1.488,760,3.78,765,1.208,771,0.406,774,0.534,775,1.206,780,0.274,781,2.822,783,1.151,785,1.238,786,0.53,789,0.274,790,0.284,791,0.443,794,0.491,796,0.281,800,0.308,813,0.329,816,0.263,818,0.254,822,2.139,827,0.837,829,0.925,834,2.099,835,0.351,837,1.314,838,0.32,845,0.286,849,0.286,852,0.481,855,0.847,881,0.762,883,0.334,887,0.682,903,1.273,922,0.513,927,1.649,930,1.05,968,0.324,979,1.569,982,1.488,989,1.484,992,0.261,996,0.286,1015,4.471,1019,0.261,1031,0.237,1032,1.133,1045,0.334,1055,0.583,1077,2.088,1079,0.455,1080,1.273,1084,0.534,1086,3.358,1088,0.922,1089,0.231,1091,0.763,1098,0.776,1108,0.345,1110,0.686,1112,0.295,1113,0.276,1114,0.394,1116,0.42,1117,0.258,1120,0.334,1122,0.647,1124,0.461,1126,0.962,1127,0.513,1132,0.226,1134,0.491,1139,0.383,1144,0.571,1147,3.085,1148,1.299,1154,0.298,1155,2.342,1156,1.729,1157,0.643,1165,0.611,1179,0.345,1181,0.316,1183,1.594,1189,0.292,1190,0.259,1192,0.243,1194,0.261,1195,0.224,1202,0.394,1204,0.797,1207,0.995,1209,0.539,1211,2.399,1213,0.345,1215,0.928,1216,0.885,1217,0.295,1218,0.295,1219,0.549,1220,0.583,1223,0.274,1225,0.611,1226,1.216,1234,0.308,1237,0.32,1240,0.298,1241,0.284,1242,0.249,1244,0.298,1246,0.298,1247,0.247,1248,4.506,1251,1.06,1253,1.159,1254,0.829,1258,0.443,1273,0.279,1287,0.298,1289,0.68,1290,0.898,1296,0.498,1303,0.284,1309,0.718,1316,0.571,1325,0.643,1337,0.298,1339,0.334,1341,0.284,1344,0.517,1351,0.637,1356,0.912,1357,0.509,1364,0.334,1369,0.351,1377,0.829,1394,1.05,1400,0.366,1409,2.27,1433,0.316,1437,0.312,1439,0.628,1445,0.276,1460,1.178,1463,0.718,1466,2.358,1467,1.082,1468,1.313,1469,1.082,1470,1.082,1471,2.068,1472,1.313,1473,1.227,1474,1.313,1475,1.082,1476,1.082,1477,1.286,1478,2.238,1479,1.286,1481,3.64,1485,2.017,1488,1.498,1489,2.424,1490,2.29,1497,0.276,1500,0.247,1514,0.366,1540,0.358,1541,0.345,1549,0.358,1559,0.935,1565,0.358,1566,0.298,1567,0.695,1568,0.366,1569,0.723,1570,1.253,1571,0.406,1572,1.253,1573,0.68,1574,0.44,1575,0.394,1576,0.583,1577,0.406,1578,0.406,1579,0.383,1582,0.394,1583,1.621,1584,0.345,1585,0.596,1586,0.269,1587,0.713,1588,0.334,1589,0.276,1590,0.345,1591,0.657,1592,0.345,1593,0.619,1594,0.334,1595,0.339,1596,0.345,1597,0.305,1598,0.305,1599,0.723,1600,0.44,1601,0.366,1602,0.383,1603,0.44,1604,1.449,1605,0.383,1606,0.366,1607,0.44,1610,0.421,1611,0.762,1612,0.366,1613,0.44,1614,0.44,1615,0.339,1616,0.324,1617,1.87,1618,0.366,1619,1.313,1620,0.44,1621,0.249,1622,0.44,1623,0.358,1624,0.383,1625,0.44,1626,0.856,1627,2.533,1628,0.611,1629,0.44,1630,0.406,1631,0.44,1633,0.44,1634,0.383,1635,0.723,1636,1.811,1637,0.646,1638,0.44,1639,0.345,1640,0.44,1641,0.44,1642,0.394,1644,0.44,1645,0.394,1646,0.44,1647,0.334,1648,0.366,1650,0.267,1651,0.394,1657,0.604,1658,0.281,1660,0.366,1662,0.345,1663,0.345,1664,0.298,1665,0.272,1666,0.324,1667,0.334,1669,0.668,1670,1.734,1671,2.486,1672,0.44,1673,0.44,1674,0.44,1675,0.44,1676,0.339,1677,0.374,1678,0.374,1679,1.876,1680,0.339,1681,0.421,1682,1.327,1687,3.805,1688,0.762,1689,0.44,1690,0.358,1691,0.44,1694,0.851,1695,1.183,1696,1.741,1697,1.597,1698,0.44,1699,0.44,1700,0.44,1701,0.44,1702,0.44,1703,0.44,1704,0.44,1705,0.329,1706,0.406,1707,0.334,1710,0.394,1711,0.301,1718,1.213,1719,0.44,1720,0.44,1721,1.006,1722,1.773,1723,1.236,1724,0.646,1725,0.329,1726,0.44,1727,0.68,1728,0.366,1729,0.383,1730,0.44,1731,0.693,1732,0.44,1733,0.44,1735,0.786,1737,0.374,1740,0.741,1741,0.394,1742,0.351,1743,0.358,1744,0.366,1745,0.44,1746,0.383,1747,0.394,1748,0.329,1749,0.693,1750,0.383,1752,1.106,1755,0.44,1756,0.421,1757,0.44,1758,0.44,1759,0.44,1760,0.693,1761,0.44,1762,0.44,1763,0.44,1764,2.272,1765,0.421,1770,0.421,1771,0.383,1772,0.394,1777,0.394,1778,0.324,1779,0.329,1780,0.316,1781,0.32,1783,0.324,1784,0.44,1785,0.44,1786,0.394,1787,0.521,1788,0.351,1789,0.44,1790,0.44,1791,0.44,1792,0.44,1793,0.44,1897,1.077,1930,1.494,1938,0.305,1947,0.406,2276,0.32,2482,0.776,2505,0.394,2685,0.366,2878,0.707,2902,0.406,2972,0.316,3190,0.374,3226,0.44,3256,0.406,3311,0.383,3412,0.383,3433,0.465,3434,0.421,3435,0.465,343
16,0.421,3437,1.734,3438,0.465,3439,0.421,3440,0.421,3441,0.421,3442,0.421,3443,0.421,3444,0.421,3445,0.421,3446,0.421,3447,0.421,3448,0.465,3449,0.465,3450,0.421,3451,0.421,3452,0.465,3453,0.421,3454,0.465,3455,0.465,3456,0.421,3457,0.465,3458,0.465,3459,0.465,3460,0.465,3461,0.421,3462,0.465,3463,0.465,3464,0.9,3465,0.421,3466,0.465,3467,0.465,3468,0.465,3469,0.465,3470,0.465,3471,0.465,3472,0.465,3473,2.021,3474,0.324,3475,0.324,3476,0.324,3477,0.646,3478,0.637,3479,0.345,3480,0.345]],["component/74",[6,0.35]],["keyword/74",[]],["title/75-1",[10,39.186,733,30.183]],["name/75-1",[]],["text/75-1",[]],["component/75-1",[]],["keyword/75-1",[]],["title/75-2",[1190,44.3]],["name/75-2",[]],["text/75-2",[]],["component/75-2",[]],["keyword/75-2",[]],["title/75-3",[188,30.031,1191,38.822]],["name/75-3",[]],["text/75-3",[]],["component/75-3",[]],["keyword/75-3",[]],["title/75-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/75-4",[]],["text/75-4",[]],["component/75-4",[]],["keyword/75-4",[]],["title/75-5",[139,36.226]],["name/75-5",[]],["text/75-5",[]],["component/75-5",[]],["keyword/75-5",[]],["title/75-6",[523,26.178,1193,34.99]],["name/75-6",[]],["text/75-6",[]],["component/75-6",[]],["keyword/75-6",[]],["title/75-7",[40,32.212,604,24.38]],["name/75-7",[]],["text/75-7",[]],["component/75-7",[]],["keyword/75-7",[]],["title/75-8",[28,34.99,221,29.733]],["name/75-8",[]],["text/75-8",[]],["component/75-8",[]],["keyword/75-8",[]],["title/75-9",[442,42.691,717,40.363]],["name/75-9",[]],["text/75-9",[]],["component/75-9",[]],["keyword/75-9",[]],["title/75-10",[32,21.264,411,19.835]],["name/75-10",[]],["text/75-10",[]],["component/75-10",[]],["keyword/75-10",[]],["title/75-11",[35,18.339,604,24.38]],["name/75-11",[]],["text/75-11",[]],["component/75-11",[]],["keyword/75-11",[]],["title/75-12",[99,21.722,855,41.232]],["name/75-12",[]],["text/75-12",[]],["component/75-12",[]],["keyword/75-12",[]],["title/75-13",[1296,35.239,1566,40.788]],["name/75-13",[]],["text/75-13",[]],["component/75-13",[]],["keyword/75-13",[]],["title/75-14",[427,36.582,520,23.467]],["name/75-14",[]],["text/75-14",[]],["component/75-14",[]],["keyword/75-14",[]],["title/75-15",[210,37.672]],["name/75-15",[]],["text/75-15",[]],["component/75-15",[]],["keyword/75-15",[]],["title/75",[249,26.124,250,27.352,604,20.337]],["name/75",[249,0.4,250,0.419,584,0.372,604,0.311]],["text/75",[4,1.234,6,0.984,13,0.617,14,0.361,19,0.289,20,0.291,23,3.61,24,0.59,27,2.159,28,1.454,29,0.512,30,0.591,32,2.789,33,0.678,34,0.257,35,1.596,38,1.024,40,0.74,51,0.263,62,1.02,74,0.269,81,0.908,82,0.524,86,0.34,98,0.67,99,1.89,111,0.249,113,0.295,119,0.847,120,1.001,121,0.711,122,0.261,124,1.773,125,1.178,126,1.368,127,0.307,133,1.739,138,0.307,139,1.038,140,1.648,141,1.139,146,0.495,155,0.736,156,0.371,157,1.533,165,0.892,167,0.326,168,0.967,170,0.27,173,0.248,174,0.56,179,0.258,183,0.678,184,0.512,185,1.613,188,1.707,197,0.732,198,1.323,199,0.832,200,0.291,201,1.051,202,0.662,204,0.312,205,2.74,210,0.249,211,0.206,213,0.317,214,1.52,216,1.279,217,1.02,218,0.314,220,0.714,221,1.235,223,0.687,226,0.34,227,0.361,228,0.788,230,0.309,232,0.606,238,0.371,239,0.638,240,0.459,241,0.314,243,0.641,244,0.892,246,0.309,249,4.368,250,1.864,251,2.133,256,0.287,258,0.371,259,2.548,261,1.681,268,1.109,269,2.654,276,0.635,279,0.344,280,0.371,281,0.361,283,0.764,285,0.366,286,0.72,288,1.287,292,0.295,294,0.909,300,1.985,301,0.643,307,0.344,310,0.418,311,1.388,312,1.071,313,0.383,314,0.275,319,0.361,324,0.264,328,0.287,330,0.422,334,0.503,337,1.264,343,0.326,344,0.572,347,1.773,351,1.248,356,1.294,357,0.918,365,0.617,366,0.243,374,0.534,375,0.937,377,0.392,383,0.242,388,0.834,395,0.254,404,0.758,408,0.515,409,0.617,411,2.044,412,0.441,413,2.159,414,0.333,416,0.235,417,0.256,424,0.552,427,0.581,430,0.299,438,0.716,440,0.256,445,0.907,450,0.256,451,0.33,454,0.597,466,0.309,468,0.596,473,0.728,479,0.285,483,0.413,484,2.004,489,1.309,491,0.871,492,2.651,499,0.249,501,0.449,506,0.336,508,0.371,509,0.804,511,2.005,512,0.728,514,0.377,515,0.366,519,0.754,520,1.81,523,0.602,524,1.011,527,0.768,531,0.648,537,
10.344,542,0.326,555,1.105,556,0.586,557,0.524,570,0.457,571,0.475,573,0.433,575,0.601,576,0.304,581,0.348,584,3.072,585,0.963,592,1.588,593,0.726,594,0.333,597,1.195,598,0.404,599,1.444,601,0.67,603,0.352,604,2.454,605,0.383,606,0.336,609,2.23,612,0.326,614,0.581,615,0.397,619,0.884,625,0.336,626,0.389,631,0.333,639,0.293,640,0.422,641,0.611,642,0.445,647,3.066,649,0.965,660,0.312,664,0.312,670,1.338,671,1.518,679,0.876,682,0.892,683,0.383,684,0.344,686,0.459,687,0.577,690,0.33,691,1.687,692,0.252,693,0.312,696,0.876,697,0.344,698,0.876,700,0.307,701,1.443,702,2.614,703,1.015,708,0.422,709,0.261,711,0.366,713,0.655,714,0.297,724,0.611,725,1.379,726,0.309,733,0.249,736,0.548,741,0.773,748,1.389,749,0.287,751,1.015,755,3.606,756,4.794,758,1.965,759,2.147,760,2.611,765,2.114,774,0.601,780,0.309,781,0.889,783,0.822,785,0.884,789,1.109,790,0.32,791,0.927,794,0.552,795,0.361,796,0.611,797,0.641,799,0.397,800,0.348,816,0.297,822,1.133,827,1.459,829,0.457,834,1.76,837,1.635,845,0.323,851,0.738,852,0.281,855,1.22,874,0.397,883,0.726,903,0.909,905,0.389,922,0.299,927,1.223,930,0.629,979,1.728,981,0.317,982,1.252,989,0.629,992,0.295,996,0.323,1011,0.834,1015,1.725,1031,0.267,1032,0.678,1055,0.34,1073,0.404,1077,2.841,1079,0.953,1080,0.909,1084,0.312,1086,0.218,1089,0.261,1091,0.591,1094,0.552,1098,0.869,1110,0.531,1112,1.195,1113,0.312,1116,1.548,1117,0.56,1124,0.269,1126,0.884,1127,2.925,1132,0.492,1134,0.552,1140,1.086,1144,0.641,1147,1.146,1148,0.333,1154,0.336,1156,0.581,1157,1.63,1178,0.404,1183,2.612,1185,0.302,1189,0.635,1190,0.293,1192,0.274,1195,0.487,1204,0.617,1209,1.584,1211,0.918,1212,0.348,1215,0.804,1216,1.916,1217,0.333,1218,0.333,1219,0.32,1220,0.34,1221,0.413,1222,0.444,1223,0.596,1225,0.357,1226,0.601,1229,0.444,1234,0.348,1238,0.389,1241,0.32,1242,0.281,1246,0.938,1247,0.538,1248,0.361,1249,0.413,1251,0.33,1253,0.828,1254,0.928,1257,0.495,1258,3.227,1266,0.67,1267,0.33,1271,0.357,1273,0.606,1278,0.459,1282,0.352,1296,0.56,1303,1.149,1309,2.147,1310,0.635,1311,0.383,1316,0.333,1317,0.377,1325,0.927,1340,0.348,1342,0.938,1344,0.302,1356,0.366,1357,0.297,1358,0.655,1377,0.641,1390,0.715,1394,2.908,1400,0.413,1409,1.775,1433,0.687,1439,0.366,1445,0.312,1452,0.856,1454,0.779,1456,0.726,1460,0.705,1461,0.856,1462,0.856,1463,1.036,1464,0.856,
11465,0.833,1466,0.274,1467,0.648,1468,0.938,1469,0.648,1470,0.648,1471,1.66,1472,0.938,1473,0.876,1474,0.938,1475,0.648,1476,0.648,1477,0.918,1478,1.66,1479,0.918,1480,0.833,1485,4.079,1488,2.08,1489,2.649,1490,0.314,1497,2.779,1499,0.377,1500,0.538,1501,0.397,1503,0.413,1514,0.795,1517,1.16,1527,2.757,1541,0.389,1549,0.779,1559,0.291,1562,0.678,1565,0.404,1567,0.538,1568,0.413,1569,1.176,1570,0.75,1572,1.086,1573,0.397,1582,0.444,1584,0.389,1585,1.248,1586,0.586,1587,1.243,1588,0.377,1589,0.312,1590,0.389,1591,0.738,1592,0.389,1593,0.361,1594,0.377,1595,0.383,1596,0.389,1597,0.344,1598,0.344,1599,0.813,1601,0.413,1602,0.833,1604,0.371,1616,0.366,1617,2.059,1619,2.319,1636,0.289,1645,0.444,1647,0.726,1648,0.795,1650,1.083,1651,0.856,1657,1.774,1658,1.139,1660,0.413,1662,0.389,1663,0.389,1664,1.207,1665,0.591,1667,0.377,1671,0.705,1676,0.738,1679,2.349,1682,0.795,1688,0.444,1705,0.371,1711,0.34,1713,1.527,1714,0.726,1718,0.726,1722,1.491,1725,0.371,1740,1.876,1744,1.15,1747,0.444,1748,0.371,1749,0.404,1752,0.958,1754,0.404,1764,2.503,1768,0.366,1772,1.928,1773,0.916,1774,1.325,1775,0.916,1776,0.916,1777,0.856,1778,1.588,1779,1.035,1780,1.546,1781,1.007,1783,0.366,1787,0.304,1795,0.497,1796,0.444,1797,0.497,1798,0.833,1799,0.444,1800,0.957,1801,0.957,1802,0.497,1803,0.497,1804,0.497,1805,0.957,1806,0.497,1807,0.497,1808,0.357,1809,0.497,1811,0.444,1818,1.782,1823,0.497,1824,0.475,1825,0.957,1827,0.444,1829,0.957,1835,2.501,1839,0.957,1841,0.497,1846,0.459,1848,0.389,1849,0.497,1850,0.383,1851,0.497,1852,0.497,1853,0.497,1854,0.497,1855,0.497,1856,0.497,1857,0.497,1858,2.153,1859,0.497,1860,0.497,1865,0.497,1866,0.497,1870,0.475,1872,0.497,1873,0.497,1892,0.696,1893,0.413,1894,0.444,1895,0.497,1896,0.371,1897,3.218,1898,0.377,1899,0.413,1900,0.497,1901,0.497,1902,0.497,1903,0.413,1905,0.883,1906,0.883,1907,0.497,1908,0.357,1909,0.497,1910,0.444,1911,0.497,1912,0.497,1913,0.497,1914,0.497,1915,0.475,1916,0.413,1917,0.497,1918,0.377,1919,0.957,1920,0.497,1921,0.397,1922,0.497,1923,0.497,1928,0.326,1930,1.661,1933,0.738,1936,0.764,1939,0.813,1962,0.432,1996,0.344,2017,0.413,2042,0.459,2059,0.629,2074,0.444,2088,0.366,2196,0.397,2239,0.856,2276,0.361,2301,1.423,2309,1.205,2312,1.205,2380,0.422,2490,0.497,2722,0.459,2735,0.459,2757,0.459,2798,0.404,2851,0.795,2934,0.422,3175,0.432,3256,0.459,3272,0.432,3311,0.432,3394,0.413,3397,0.883,3404,4.398,3406,0.883,3407,0.833,3408,0.883,3412,1.205,3415,0.883,3434,0.475,3436,0.475,3437,1.239,3439,0.475,3440,0.475,3441,0.475,3442,0.475,3443,0.475,3444,0.475,3445,0.475,3446,0.475,3447,0.475,3450,0.475,3451,0.475,3453,0.475,3456,0.475,3465,0.475,3473,5.91,3474,0.705,3475,0.705,3476,0.705,3477,1.353,3478,1.333,3479,1.398,3480,0.75,3481,0.525,3482,0.525,3483,0.525,3484,0.525,3485,0.568,3486,0.568,3487,1.239,3488,0.568,3489,0.568,3490,0.957,3491,0.525,3492,0.525,3493,1.011,3494,0.525,3495,0.525,3496,0.916,3497,0.525,3498,0.525,3499,0.525,3500,0.525,3501,1.011,3502,0.525,3503,0.525,3504,0.525,3505,0.525,3506,0.525,3507,0.525,3508,0.525,3509,0.432,3510,0.525,3511,0.525,3512,0.525,3513,0.432,3514,0.432,3515,0.432,3516,0.432,3517,0.525,3518,0.525,3519,0.525,3520,0.525,3521,0.525,3522,0.525,3523,0.525,3524,1.011,3525,1.011,3526,0.525,3527,0.525,3528,0.525,3529,0.525,3530,1.011,3531,0.525,3532,0.525,3533,0.525,3534,0.525,3535,0.525,3536,0.525,3537,0.525,3538,0.525,3539,0.525,3540,0.525,3541,0.525,3542,0.525,3543,0.525]],["component/75",[6,0.35]],["keyword/75",[]],["title/76-1",[10,48.908]],["name/76-1",[]],["text/76-1",[]],["component/76-1",[]],["keyword/76-1",[]],["title/76-2",[1190,44.3]],["name/76-2",[]],["text/76-2",[]],["component/76-2",[]],["keyword/76-2",[]],["title/76-3",[188,30.031,1191,38.822]],["name/76-3",[]],["text/76-3",[]],["component/76-3",[]],["keyword/76-3",[]],["title/76-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/76-4",[]],["text/76-4",[]],["component/76-4",[]],["keyword/76-4",[]],["title/76-5",[139,36.226]],["name/76-5",[]],["text/76-5",[]],["component/76-5",[]],["keyword/76-5",[]],["title/76-6",[523,26.178,1193,34.99]],["name/76-6",[]],["text/76-6",[]],["component/76-6",[]],["keyword/76-6",[]],["title/76-7",[205,25.478,1924,53.891]],["name/76-7",[]],["text/76-7",[]],["component/76-7",[]],["keyword/76-7",[]],["title/76-8",[232,31.808,311,27.863,324,26.716]],["name/76-8",[]],["text/76-8",[]],["component/76-8",[]],["keyword/76-8",[]],["title/76-9",[99,21.722,454,25.973]],["name/76-9",[]],["text/76-9",[]],["component/76-9",[]],["keyword/76-9",[]],["title/76-10",[144,32.212,507,38.47]],["name/76-10",[]],["text/76-10",[]],["component/76-10",[]],["keyword/76-10",[]],["title/76-11",[351,22.361]],["name/76-11",[]],["text/76-11",[]],["component/76-11",[]],["keyword/76-11",[]],["title/76-12",[220,24.123,1535,51.156
1]],["name/76-12",[]],["text/76-12",[]],["component/76-12",[]],["keyword/76-12",[]],["title/76-13",[1296,35.239,1566,40.788]],["name/76-13",[]],["text/76-13",[]],["component/76-13",[]],["keyword/76-13",[]],["title/76-14",[427,36.582,520,23.467]],["name/76-14",[]],["text/76-14",[]],["component/76-14",[]],["keyword/76-14",[]],["title/76-15",[210,37.672]],["name/76-15",[]],["text/76-15",[]],["component/76-15",[]],["keyword/76-15",[]],["title/76",[249,31.317,250,32.789]],["name/76",[249,0.742,250,0.777]],["text/76",[4,2.503,6,1.596,7,1.598,9,0.674,13,0.394,14,0.445,19,0.355,23,2.444,24,0.261,27,2.732,28,0.355,29,0.327,30,0.377,32,1.875,33,0.433,34,0.316,35,2.225,36,0.488,38,1.586,40,0.327,41,0.344,45,0.472,46,0.767,51,0.323,70,0.279,74,0.331,77,0.398,81,0.707,82,0.335,85,0.508,86,0.419,98,0.566,99,1.744,111,1.673,113,1.273,118,0.508,119,1.749,120,0.996,121,1.332,122,0.614,123,0.428,124,0.66,125,1.009,126,0.51,133,1.307,135,0.547,139,1.774,140,2.102,141,0.391,144,1.785,146,1.109,147,0.394,152,3.568,155,1.368,157,2.1,163,1.467,165,1.915,167,1.69,169,0.445,170,2.339,171,0.479,173,0.305,174,0.358,175,0.402,177,0.679,178,1.707,179,0.872,180,0.838,184,0.897,185,1.324,188,2.533,190,0.36,194,1.175,196,0.464,197,0.887,198,1.133,199,1.201,200,1.254,202,0.809,204,0.384,205,2.247,210,0.84,211,1.66,213,2.554,214,2.609,216,2.185,217,0.451,218,0.74,220,1.832,221,0.302,223,2.131,224,0.445,226,0.419,227,0.445,228,0.348,230,0.381,231,0.384,232,0.387,233,0.861,234,0.588,238,0.873,239,1.695,242,0.95,249,4.088,250,2.177,251,1.691,254,0.564,255,0.325,256,0.353,258,0.457,259,1.915,261,3.265,267,0.519,268,0.727,269,2.631,270,0.519,275,0.333,280,0.457,281,0.445,285,0.451,286,0.872,288,0.315,289,0.302,292,0.363,293,0.818,294,0.767,300,2.164,301,0.779,307,0.423,308,0.519,309,1.052,310,1.296,311,2.818,312,2.455,313,0.472,314,0.648,318,0.76,319,0.849,324,1.14,326,0.995,327,0.71,328,1.237,334,1.127,338,0.715,347,2.586,351,2.767,356,1.726,360,0.488,363,0.762,364,0.611,366,0.299,374,0.341,375,0.614,383,2.472,388,0.704,391,0.585,392,0.273,393,0.402,395,0.858,396,0.547,408,0.628,409,1.915,410,2.764,411,1.953,412,0.772,413,2.668,416,1.405,417,0.315,418,0.704,424,0.967,426,0.767,429,0.684,436,0.472,438,1.331,439,0.26,440,0.315,442,1.189,445,0.595,450,0.315,451,0.406,453,0.457,454,0.264,459,0.377,463,0.335,468,0.381,473,0.322,479,0.35,484,1.587,489,0.71,491,0.82,492,2.817,493,0.721,496,0.305,497,0.693,499,2.292,501,1.005,507,1.071,509,1.245,511,1.189,512,1.755,519,0.494,520,1.301,522,0.366,523,1.291,524,0.495,527,1.851,532,1.418,556,0.374,557,0.335,565,0.305,570,0.292,573,0.277,575,0.733,576,0.374,579,0.445,584,0.566,585,2.045,587,
10.311,589,1.475,590,1.506,599,1.437,603,0.433,604,0.473,606,0.791,609,2.889,612,0.402,615,0.488,616,0.414,619,1.826,620,0.532,625,0.414,627,0.611,631,1.725,639,0.688,647,2.153,649,0.647,660,1.052,664,0.384,671,0.744,679,0.387,681,1.052,682,0.394,686,0.293,687,1.292,690,1.112,691,1.153,692,0.591,694,0.35,696,0.387,698,1.357,700,0.377,701,0.903,702,2.474,703,0.348,709,0.322,710,0.488,717,0.783,723,0.704,725,0.644,726,0.381,733,0.585,734,0.374,736,0.669,739,1.018,741,0.341,744,0.932,745,0.428,748,0.394,749,1.237,751,2.604,755,1.726,756,3.873,758,1.14,759,1.495,760,0.947,762,0.464,765,2.139,775,1.044,780,0.381,781,0.305,783,0.363,785,0.391,786,0.381,789,1.044,790,0.753,791,0.318,792,1.424,794,0.353,796,0.391,797,0.41,799,0.488,808,0.838,810,0.907,816,0.366,818,0.353,834,0.727,837,0.835,843,0.348,845,0.76,848,0.769,851,0.472,853,0.508,884,0.394,887,0.337,903,0.402,922,0.369,924,0.76,927,1.452,928,0.472,930,0.767,963,0.414,968,0.861,979,1.637,982,0.974,992,0.363,996,0.398,1011,0.369,1015,1.386,1032,0.433,1047,0.564,1055,0.419,1056,1.46,1057,0.632,1073,0.498,1074,0.547,1077,1.944,1080,3.768,1084,1.052,1086,0.268,1089,0.614,1091,1.588,1098,1.052,1106,0.428,1107,0.472,1108,0.916,1110,0.648,1113,0.384,1115,0.325,1116,0.577,1117,0.683,1122,0.877,1124,1.16,1134,0.353,1144,0.41,1146,0.498,1147,0.621,1148,0.783,1155,0.32,1157,0.607,1165,0.838,1170,0.377,1179,0.479,1181,0.838,1183,2.674,1185,0.371,1187,0.464,1189,0.775,1190,0.988,1192,0.337,1194,0.693,1195,1.091,1199,0.353,1204,1.081,1207,0.727,1208,0.564,1209,1.357,1211,3.935,1215,0.355,1216,0.533,1217,0.41,1218,0.41,1219,1.081,1220,0.419,1223,0.381,1225,0.838,1226,0.384,1227,0.472,1237,0.445,1238,0.479,1240,0.791,1242,0.66,1249,0.508,1253,1.282,1254,0.41,1257,0.604,1258,0.318,1271,0.439,1273,1.881,1289,0.488,1296,1.506,1309,0.679,1310,0.406,1313,0.391,1325,0.607,1336,0.901,1339,0.464,1341,0.394,1342,0.414,1344,2.028,1351,0.457,1356,1.236,1369,0.488,1377,1.437,1409,2.095,1420,0.95,1423,0.508,1424,0.479,1433,0.838,1436,0.479,1437,1.189,1439,0.451,1460,0.451,1467,0.414,1468,0.414,1469,0.414,1470,0.414,1471,0.775,1472,0.414,1473,0.387,1474,0.414,1475,0.414,1476,0.414,1477,0.406,1478,0.775,1479,0.406,1485,0.828,1488,0.406,1489,0.783,1490,0.387,1500,0.344,1502,0.445,1517,0.398,1519,1.548,1527,0.402,1535,0.992,1536,0.564,1539,0.472,1561,0.519,1566,0.414,1567,0.942,1570,0.916,1584,0.479,1585,1.802,1586,0.374,1587,0.674,1588,0.464,1589,1.052,1590,0.479,1591,0.901,1592,0.479,1593,1.871,1594,0.464,1595,0.472,1596,0.479,1597,0.423,1598,0.423,1599,0.519,1601,0.508,1606,0.508,1609,0.611,1612,0.508,1616,0.451,1617,2.193,1621,0.346,1623,0.498,1635,0.519,1637,0.887,1657,0.828,1679,2.467,1680,0.472,1690,0.498,1692,0.585,1705,0.457,1707,0.464,1711,0.8,1714,0.464,1718,0.464,1728,0.97,1729,0.532,1731,0.95,1741,0.547,1742,0.488,1744,0.508,1750,0.532,1768,0.451,1787,0.374,1788,0.932,1796,1.045,1799,1.045,1811,0.547,1819,0.519,1842,0.564,1843,0.585,1864,0.532,1879,0.532,1896,0.457,1921,0.488,1924,1.045,1925,0.611,1926,0.585,1927,0.532,1928,0.767,1929,0.611,1930,0.472,1931,0.611,1932,0.547,1933,1.293,1934,1.168,1935,1.168,1936,0.932,1937,0.611,1938,0.809,1939,0.519,1940,0.95,1941,0.472,1942,1.168,1943,0.547,1944,0.611,1945,0.611,1946,0.611,1947,0.564,1948,0.611,1951,0.547,1952,1.168,1953,1.168,1954,0.611,1955,0.611,1956,0.611,1959,0.547,1961,0.611,1962,0.532,1967,0.932,1969,0.611,1970,0.564,1971,0.97,1976,0.611,1978,0.498,1979,0.611,1981,0.611,1982,0.585,1983,0.488,1984,0.611,1986,1.078,1987,0.547,1995,0.532,1996,0.423,1997,0.611,1999,0.611,2000,0.611,2001,0.611,2014,1.168,2016,0.547,2017,0.508,2018,0.611,2019,0.611,2020,0.519,2021,0.564,2022,0.585,2023,0.547,2024,1.676,2026,0.498,2027,0.585,2028,0.611,2029,0.585,2032,0.611,2035,0.508,2168,0.611,2204,0.428,2276,0.849,2632,0.445,2695,0.547,2759,0.564,2936,0.547,2991,1.118,2992,1.045,3105,0.564,3175,0.532,3271,0.519,3311,1.017,3369,1.605,3379,0.547,3380,0.547,3394,0.508,3404,0.532,3465,1.118,3474,0.861,3475,0.861,3476,0.861,3477,0.887,3478,0.873,3496,0.585,3544,0.646,3545,0.646,3546,0.646,3547,0.646,3548,0.646,3549,0.646,3550,0.646,3551,1.234,3552,2.719,3553,1.234,3554,1.234,3555,1.234,3556,1.234,3557,2.719,3558,0.646,3559,0.646,3560,2.719,3561,0.646,3562,0.646,3563,0.646,3564,0.646,3565,0.646,3566,
10.646,3567,0.646,3568,0.646,3569,0.646]],["component/76",[6,0.35]],["keyword/76",[]],["title/77-1",[205,25.478,473,31.666]],["name/77-1",[]],["text/77-1",[]],["component/77-1",[]],["keyword/77-1",[]],["title/77-2",[351,14.945,413,18.346,652,40.103]],["name/77-2",[]],["text/77-2",[]],["component/77-2",[]],["keyword/77-2",[]],["title/77-3",[351,14.945,1113,31.533,3570,50.22]],["name/77-3",[]],["text/77-3",[]],["component/77-3",[]],["keyword/77-3",[]],["title/77-4",[35,18.339,351,17.916]],["name/77-4",[]],["text/77-4",[]],["component/77-4",[]],["keyword/77-4",[]],["title/77-5",[220,24.123,415,39.563]],["name/77-5",[]],["text/77-5",[]],["component/77-5",[]],["keyword/77-5",[]],["title/77",[691,32.401,698,38.13]],["name/77",[690,0.947,691,0.768]],["text/77",[4,2.577,6,0.849,9,1.044,19,0.58,20,0.585,23,4.044,24,0.426,29,0.534,31,0.797,32,1.529,35,1.892,46,1.219,50,0.454,51,0.528,70,0.847,78,0.633,81,0.782,92,0.684,99,1.562,101,1.554,109,0.747,111,1.302,119,0.475,120,1.509,121,0.399,125,0.874,126,0.81,132,0.797,133,1.681,138,0.617,139,0.894,140,1.707,141,0.638,149,1.349,155,1.381,157,1.588,160,0.644,164,1.572,172,1.69,179,1.351,185,0.514,188,0.498,190,1.093,193,0.708,197,2.02,198,2.02,199,0.466,200,0.585,205,2.748,210,0.501,211,1.079,215,0.758,216,0.593,218,0.633,220,0.4,221,2.363,223,1.289,229,1.196,232,0.633,243,0.67,244,1.674,246,1.155,249,5.197,250,3.809,251,1.504,255,0.531,256,0.576,259,2.463,261,2.363,269,3.019,275,0.544,285,0.736,286,0.519,288,4.253,289,0.493,300,1.536,301,0.862,304,0.684,306,0.585,307,0.692,310,0.436,311,0.554,312,0.794,314,0.554,325,0.708,326,0.593,334,0.525,336,0.717,347,2.602,351,3.23,356,1.679,374,0.558,377,0.759,385,0.813,393,1.219,395,0.949,404,0.547,408,1.398,409,1.196,410,2.504,411,0.611,413,2.965,416,0.473,427,0.607,429,1.324,430,0.602,438,0.96,439,1.622,449,1.056,450,1.336,454,0.8,463,1.016,468,2.695,472,0.758,473,0.525,484,1.12,489,1.127,491,0.488,492,2.204,493,0.617,496,0.925,500,0.736,501,0.468,503,0.501,506,0.677,508,0.747,519,0.423,520,0.723,521,1.055,522,0.598,523,0.434,524,0.548,527,0.554,532,1.824,550,0.87,552,1.776,563,2.003,568,0.987,570,0.886,576,1.136,581,1.299,582,0.633,585,0.83,591,0.747,596,0.717,601,0.7,605,0.77,608,0.956,609,1.636,616,0.677,619,0.496,637,0.617,639,0.589,647,2.8,649,0.385,652,0.797,655,2.114,664,0.627,666,0.551,671,1.44,676,2.864,679,0.633,682,0.644,683,0.77,687,1.118,690,3.447,691,3.177,693,0.627,694,1.861,696,0.633,698,4.57,699,1.175,701,3.485,702,1.648,703,1.056,709,0.525,713,0.684,714,0.598,723,0.602,724,3.319,725,1.432,733,1.915,740,1.349,741,0.558,745,0.7,748,0.644,749,1.07,751,0.874,755,2.516,757,1.481,758,1.381,759,1.887,760,1.687,765,1.389,774,1.165,781,0.925,783,0.593,785,0.638,786,0.622,788,0.684,791,0.519,797,0.67,812,0.813,818,1.499,822,0.976,829,0.477,834,1.155,837,1.687,838,0.726,849,0.65,903,0.656,905,0.783,909,0.758,927,1.27,928,0.77,930,1.219,931,1.374,946,0.87,969,0.758,979,1.79,982,1.078,989,1.219,992,0.593,1011,0.602,1015,1.516,1018,1.408,1019,0.593,1031,0.537,1032,1.315,1077,1.924,1079,0.534,1080,0.656,1083,0.797,1088,0.576,1089,0.525,1091,0.617,1098,0.627,1111,0.87,1113,4.24,1116,1.603,1122,1.358,1124,2.068,1126,0.496,1127,1.566,1137,1.615,1147,1.727,1148,1.244,1157,0.519,1181,0.717,1183,0.622,1188,0.849,1189,0.663,1195,0.508,1199,0.576,1204,0.644,1207,1.155,1211,1.723,1215,1.078,1242,2.706,1247,0.561,1253,1.554,1256,3.519,1257,0.517,1260,1.023,1267,0.663,1273,2.741,1303,0.644,1309,1.078,1310,1.723,1313,0.638,1315,0.65,1316,0.67,1317,0.758,1318,0.7,1325,0.519,1339,1.408,1344,1.127,1357,0.598,1365,0.849,1409,1.165,1442,0.684,1460,1.368,1463,0.58,1467,0.677,1468,0.677,1469,0.677,1470,0.677,1471,1.231,1472,0.677,1473,0.633,1474,0.677,1475,0.677,1476,0.677,1477,0.663,1478,1.231,1479,0.663,1488,1.231,1489,0.67,1490,1.175,1538,1.798,1559,1.086,1562,0.708,1567,0.561,1586,1.136,1617,1.706,1619,1.759,1621,1.049,1658,2.44,1690,0.813,1713,0.708,1715,1.481,1718,1.972,1742,2.074,1768,0.736,1779,0.747,1780,1.865,1781,0.726,1787,0.612,1819,0.849,1868,0.758,1876,0.999,1879,0.87,1889,0.922,1892,0.726,1932,0.894,1949,0.999,1996,0.692,2035,0.83,2036,0.999,2038,1.855,2039,3.246,2040,0.999,2041,0.894,2042,0.922,2043,0.999,2044,3.819,2045,1.855,2046,0.999,2048,4.328,2049,0.894,2050,2.597,2051,0.999,2052,1.51,2053,0.999,2054,0.999,2055,2.827,2057,0.783,2059,1.706,2065,2.597,2066,1.855,2067,0.999,2068,0.999,2069,0.922,2071,0.999,2072,0.758,2073,0.999,2133,0.77,2214,0.87,2224,0.956,2329,0.726,2612,0.736,2685,0.83,2753,0.922,2811,0.87,3474,2.394,3475,2.394,3476,2.394,3477,2.465,3478,2.428,3479,2.996,3480,0.783,3570,0.999,3571,1.056,3572,1.056,3573,1.056,3574,1.056,3575,1.056,3576,1.056,3577,1.056,3578,1.056,3579,3.431,3580,1.142,3581,1.142,3582,2.969,3583,1.142,3584,1.142,3585,1.142]],["component/77",[6,0.35]],["keyword/77",[]],["title/78-1",[1190,44.3]],["name/78-1",[]],["text/78-1",[]],["component/78-1",[]],["keyword/78-1",[]],["title/78-2",[188,30.031,1191,38.822]],["name/78-2",[]],["text/78-2",[]],["component/78-2",[]],["keyword/78-2",[]],["title/78-3",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/78-3",[]],["text/78-3",[]],["component/78-3",[]],["keyword/78-3",[]],["title/78-4",[139,36.226]],["name/78-4",[]],["text/78-4",[]],["component/78-4",[]],["keyword/78-4",[]],["title/78-5",[523,26.178,1193,34.99]],["name/78-5",[]],["text/78-5",[]],["component/78-5",[]],["keyword/78-5",[]],["title/78-6",[7,32.401,154,32.401]],["name/78-6",[]],["text/78-6",[]],["component/78-6",[]],["keyword/78-6",[]],["title/78-7",[6,11.164,286,26.124,809,31.533]],["name/78-7",[]],["text/78-7",[]],["component/78-7",[]],["keyword/78-7",[]],["title/78-8",[220,24.123,2141,48.074]],["name/78-8",[]],["text/78-8",[]],["component/78-8",[]],["keyword/78-8",[]],["title/78-9",[223,37.294]],["name/78-9",[]],["text/78-9",[]],["component/78-9",[]],["keyword/78-9",[]],["title/78-10",[121,30.002]],["name/78-10",[]],["text/78-10",[]],["component/78-10",[]],["keyword/78-10",[]],["title/78-11",[1296,35.239,1566,40.788]],["name/78-11",[]],["text/78-11",[]],["component/78-11",[]],["keyword/78-11",[]],["title/78-12",[427,36.582,520,23.467]],["name/78-12",[]],["text/78-12",[]],["component/78-12",[]],["keyword/78-12",[]],["title/78",[6,11.164,35,15.298,809,3
11.533]],["name/78",[6,0.317,809,0.896]],["text/78",[4,0.921,6,2.09,7,0.888,9,0.462,22,0.437,23,3.77,24,0.703,27,2.031,28,0.349,29,0.614,30,0.371,32,0.745,34,0.311,35,1.996,44,0.489,51,0.318,68,0.407,74,0.622,81,1.531,83,0.371,90,0.357,98,0.291,99,1.53,101,0.687,109,0.449,113,0.98,119,1.205,120,0.279,121,3.65,124,0.649,125,0.283,126,1.972,133,0.264,139,1.017,140,1.731,141,0.384,144,1.566,146,0.594,154,2.124,155,1.122,156,0.449,162,0.411,163,1.445,164,0.291,165,1.064,171,0.901,174,0.352,177,0.349,179,0.597,180,0.431,181,0.555,184,0.321,185,0.849,188,2.116,190,0.354,194,0.274,196,0.456,197,1.116,198,0.607,199,0.536,205,3.343,210,1.058,211,2.845,214,0.698,216,3.119,220,0.845,221,0.297,223,1.047,228,0.342,230,0.374,231,0.377,239,1.673,243,0.403,244,0.387,249,2.952,250,2.461,251,4.001,255,0.32,256,5.531,259,2.735,261,1.153,269,2.289,275,0.327,276,0.399,281,0.437,286,1.318,289,0.567,300,0.781,306,0.672,310,0.501,312,1.253,314,0.333,317,0.954,326,0.357,327,0.365,328,0.347,336,1.515,338,0.368,347,2.192,351,2.458,356,1.311,366,0.294,367,0.886,372,1.65,375,0.604,377,0.246,383,0.559,388,0.362,392,1.897,395,0.307,401,0.795,404,0.329,406,0.399,407,1.491,409,2.545,410,1.222,411,2.87,413,2.073,416,0.781,417,0.309,420,2.584,423,0.489,424,0.347,428,0.421,429,0.861,430,0.362,437,0.349,438,0.311,439,1.077,440,0.591,442,0.814,445,0.585,453,0.449,454,0.495,459,0.371,468,0.715,471,0.763,473,0.316,478,1,484,0.91,489,1.282,491,1.032,492,3.28,494,0.77,496,0.3,497,0.357,500,0.443,501,0.282,503,0.301,506,0.407,507,1.62,509,0.667,512,0.316,519,0.486,520,0.822,522,0.359,523,0.717,524,0.487,533,0.51,542,0.395,564,0.421,568,0.32,573,0.272,576,0.368,581,0.421,582,0.38,597,0.403,599,0.77,604,0.243,609,3.379,614,1.282,631,0.77,639,0.972,641,0.384,642,0.279,644,0.575,647,2.483,649,1.27,670,2.81,671,1.46,676,1.614,679,0.727,686,0.288,691,0.618,692,0.836,694,0.344,696,0.727,
1699,0.38,701,0.484,702,1.263,703,0.654,709,1.11,725,1.163,726,0.374,733,0.827,741,0.921,745,0.421,748,0.74,749,2.095,751,2.674,755,2.465,756,3.68,758,1.751,759,1.913,760,1.996,765,1.566,774,0.377,775,2.457,783,0.682,785,0.734,788,0.411,789,0.715,790,1.361,794,0.347,795,0.437,809,5.74,810,0.622,818,1.218,822,0.316,829,0.287,834,1.314,837,0.643,840,0.362,845,0.391,848,1.811,874,0.48,903,0.755,922,0.362,927,0.562,930,0.755,931,0.318,952,0.523,969,0.456,979,3.016,981,0.384,982,2.777,989,0.395,996,0.391,1011,0.692,1015,1.537,1032,0.814,1053,0.471,1055,2.005,1077,1.177,1080,0.755,1084,1.036,1094,0.347,1099,0.399,1100,0.74,1101,0.449,1110,0.915,1116,1.793,1120,1.252,1124,0.325,1127,3.028,1128,0.538,1131,0.859,1147,1.348,1148,0.77,1151,2.417,1156,1.282,1162,0.416,1171,0.48,1183,1.578,1192,0.331,1193,0.349,1195,0.306,1204,1.361,1209,0.727,1211,0.762,1215,0.667,1217,0.403,1218,0.403,1219,0.387,1226,0.721,1237,1.535,1247,0.338,1256,1.118,1257,0.594,1271,0.431,1273,0.38,1282,0.814,1298,0.384,1300,0.762,1306,0.463,1307,0.463,1325,0.312,1331,0.901,1344,0.698,1357,0.359,1377,2.434,1390,0.859,1394,0.395,1409,2.28,1412,0.575,1418,1.06,1422,0.555,1423,0.499,1424,0.471,1445,1.325,1460,0.847,1467,0.778,1468,0.778,1469,0.778,1470,0.778,1471,1.4,1472,0.778,1473,0.727,1474,0.778,1475,0.778,1476,0.778,1477,0.762,1478,1.4,1479,0.762,1485,1.496,1488,1.4,1489,1.699,1490,0.727,1497,3,1499,0.456,1500,0.927,1527,3.14,1570,0.901,1585,0.421,1587,0.347,1589,1.838,1597,0.416,1598,0.416,1612,0.499,1615,0.463,1617,3.452,1619,0.778,1657,1.17,1658,0.734,1664,0.407,1676,0.463,1682,1.371,1711,0.786,1713,0.814,1718,0.872,1721,1.717,1724,1.252,1749,0.489,1764,0.917,1771,0.523,1781,1.2,1783,0.443,1868,0.456,1874,0.601,1906,0.555,1908,3.244,1927,0.523,1930,1.628,1933,0.886,1936,0.917,2052,0.489,2059,0.755,2072,0.456,2088,0.443,2091,3.476,2093,2.02,2094,1.579,2120,2.02,2123,1.099,2126,1.579,2133,0.886,2134,0.601,2136,0.499,2141,1.317,2142,1.028,2147,0.538,2149,1.148,2154,1.214,2155,1.214,2156,1.214,2157,1.214,2158,1.214,2159,1.099,2160,1.214,2165,1.148,2166,1.214,2167,1.214,2170,0.575,2174,0.601,2178,0.601,2181,0.601,2182,0.456,2183,1.655,2184,0.917,2193,1.649,2194,1.148,2213,0.538,2214,0.523,2215,0.601,2217,1.148,2218,1.148,2226,1.148,2228,2.11,2229,1.148,2243,0.872,2244,0.538,2245,0.449,2266,0.635,2276,0.835,2286,0.51,2301,1.685,2309,1.437,2312,1.437,2339,0.538,2406,0.51,2447,2.341,2500,0.463,2556,3.917,3032,0.51,3091,0.555,3122,0.523,3270,0.489,3311,1,3320,0.499,3394,0.499,3437,1.028,3461,0.575,3474,0.847,3475,0.847,3476,0.847,3477,0.872,3478,0.859,3479,0.901,3480,0.901,3487,1.028,3513,1,3514,1,3515,1,3516,1,3586,0.635,3587,0.635,3588,0.635,3589,0.635,3590,1.214,3591,1.028,3592,1.214,3593,1.214,3594,0.635,3595,1.214,3596,0.635,3597,0.635,3598,0.635,3599,0.635,3600,0.635,3601,1.214,3602,0.635,3603,0.635,3604,1.214,3605,0.575,3606,0.635,3607,1.214,3608,1.743,3609,1.214,3610,1.214,3611,1.579,3612,0.635,3613,0.635,3614,1.214,3615,0.538,3616,0.635,3617,0.538,3618,0.635,3619,0.635,3620,0.635,3621,1.214,3622,0.635,3623,0.635,3624,0.635,3625,0.635,3626,0.635,3627,0.635,3628,0.635,3629,0.635,3630,0.635,3631,0.635,3632,1.313,3633,1.437,3634,0.635,3635,2.679,3636,1.214]],["component/78",[6,0.35]],["keyword/78",[]],["title/79-1",[10,48.908]],["name/79-1",[]],["text/79-1",[]],["component/79-1",[]],["keyword/79-1",[]],["title/79-2",[1190,44.3]],["name/79-2",[]],["text/79-2",[]],["component/79-2",[]],["keyword/79-2",[]],["title/79-3",[188,30.031,1191,38.822]],["name/79-3",[]],["text/79-3",[]],["component/79-3",[]],["keyword/79-3",[]],["title/79-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/79-4",[]],["text/79-4",[]],["component/79-4",[]],["keyword/79-4",[]],["title/79-5",[139,36.226]],["name/79-5",[]],["text/79-5",[]],["component/79-5",[]],["keyword/79-5",[]],["title/79-6",[523,26.178,1193,34.99]],["name/79-6",[]],["text/79-6",[]],["component/79-6",[]],["keyword/79-6",[]],["title/79-7",[7,27.028,126,21.924,454,21.666]],["name/79-7",[]],["text/79-7",[]],["component/79-7",[]],["keyword/79-7",[]],["title/79-8",[301,27.985,3637,57.64]],["name/79-8",[]],["text/79-8",[]],["component/79-8",[]],["keyword/79-8",[]],["title/79-9",[220,24.123,1964,46.44]],["name/79-9",[]],["text/79-9",[]],["component/79-9",[]],["keyword/79-9",[]],["title/79-10",[269,18.026,351,12.82,742,22.287,743,22.786]],["name/79-10",[]],["text/79-10",[]],["component/79-10",[]],["keyword/79-10",[]],["title/79-11",[220,24.123,415,39.563]],["name/79-11",[]],["text/79-11",[]],["component/79-11",[]],["keyword/79-11",[]],["title/79",[269,21.015,742,25.983,743,26.564]],["name/79",[1169,1.817]],["text/79",[1,0.71,4,1.071,6,1.262,7,1.32,9,0.702,23,4.503,24,1.312,27,0.898,29,0.5,30,0.577,32,1.282,34,2.135,35,1.822,40,0.5,61,1.562,65,0.734,69,0.492,70,0.427,81,1.74,82,0.512,99,1.31,102,1.253,111,0.469,113,0.555,119,0.83,125,0.441,126,1.071,132,0.747,133,1.079,140,0.492,144,1.312,146,0.484,154,1.32,155,0.497,157,1.505,160,0.603,162,0.64,167,0.615,173,1.223,174,1.021,184,0.5,185,1.262,187,0.663,188,2.482,190,0.551,194,0.797,197,0.495,198,0.495,202,0.648,204,0.587,205,2.105,210,0.875,211,1.278,216,1.827,220,1.455,223,0.866,227,0.68,230,0.582,231,1.096,239,0.431,243,1.17,246,0.582,249,1.276,250,1.336,251,1.8,257,0.655,261,1.116,262,0.655,269,3.428,275,0.509,276,0.621,286,0.908,291,0.747,300,0.826,301,1.688,310,0.408,311,0.519,312,1.554,315,0.663,324,0.928,327,0.568,329,0.864,334,0.492,343,0.615,347,1.653,350,1.029,351,2.551,355,0.522,356,2.365,366,0.457,375,0.492,376,4.358,377,0.714,388,0.564,392,0.78,395,0.479,404,1.344,407,1.849,409,1.984,411,1.014,412,0.431,413,0.342,414,0.627,416,0.826,417,1.583,429,1,438,0.484,439,0.397,440,1.583,443,0.795,449,0.532,450,1.262,454,1.327,463,0.512,471,0.433,473,0.492,484,0.753,489,1.869,492,0.431,503,0.875,512,0.918,519,0.738,520,0.365,521,1.25,524,1.997,542,0.615,547,0.609,556,0.573,580,0.837,585,1.376,594,0.627,604,0.379,609,0.471,612,0.615,625,0.634,632,0.466,637,
11.077,641,0.598,647,2.125,649,1.187,670,0.5,671,1.088,676,0.962,679,0.592,681,0.587,684,1.208,686,0.449,689,0.671,691,0.503,692,0.474,693,0.587,694,0.536,696,0.592,701,0.736,702,1.327,703,0.993,723,2.756,724,0.598,725,2.275,731,1.45,736,0.536,739,4.6,741,0.522,742,3.823,743,5.485,744,0.747,749,1.776,751,2.516,755,2.398,758,0.497,759,0.544,760,2.767,762,1.862,775,0.582,781,1.811,782,0.587,789,1.527,799,0.747,802,0.54,810,3.072,816,1.841,818,0.54,822,0.918,827,0.634,829,3.337,834,1.527,837,0.365,845,1.136,848,0.429,884,0.603,927,0.853,935,0.814,975,0.68,979,0.516,982,0.544,996,0.609,1015,1.436,1019,0.555,1031,0.503,1077,0.986,1086,1.808,1090,2.45,1092,0.7,1094,0.54,1098,0.587,1100,0.603,1103,1.996,1110,0.519,1115,0.497,1117,3.126,1118,0.655,1122,0.913,1126,2.469,1127,1.052,1129,1.924,1132,1.583,1147,3.182,1157,0.486,1169,4.745,1170,1.077,1173,0.747,1189,0.621,1192,0.516,1204,0.603,1215,0.544,1216,1.12,1217,0.627,1218,0.627,1219,0.603,1225,0.671,1226,0.587,1227,0.721,1241,0.603,1246,0.634,1247,0.526,1253,0.56,1258,3.111,1266,0.655,1273,0.592,1287,0.634,1295,2.084,1297,1.42,1299,0.734,1300,0.621,1319,0.864,1331,0.734,1334,0.814,1341,1.125,1344,1.869,1352,0.655,1376,0.895,1390,0.7,1394,0.615,1409,1.54,1453,2.754,1463,0.544,1471,0.621,1477,1.628,1478,1.628,1479,2.042,1481,0.837,1485,1.237,1488,0.621,1489,0.627,1497,2.28,1500,0.98,1501,1.393,1540,0.761,1572,1.924,1597,0.648,1598,0.648,1605,0.814,1617,2.022,1619,0.634,1628,2.963,1650,0.568,1658,1.115,1664,0.634,1665,0.577,1711,0.64,1724,0.71,1736,1.269,1751,1.346,1788,0.747,1840,2.679,1897,2.679,1899,0.777,1916,0.777,1928,1.147,1930,0.721,1933,0.721,1936,0.747,1941,0.721,1983,0.747,1988,1.305,2035,0.777,2059,0.615,2243,0.71,2258,0.935,2260,0.795,2261,0.935,2276,0.68,2285,0.935,2286,0.795,2287,1.483,2288,0.747,2291,0.795,2301,1.393,2323,1.611,2328,0.895,2329,0.68,2330,0.777,2331,0.837,2332,1.393,2336,6.806,2338,4.619,2341,1.67,2342,1.67,2345,0.935,2346,0.935,2347,0.935,2349,4.943,2350,1.562,2351,1.562,2352,1.562,2353,1.611,2355,1.67,2358,0.935,2359,0.935,2360,0.935,2361,2.195,2367,0.895,2368,0.761,2369,0.837,2482,2.871,2556,2.265,2697,0.814,2792,1.237,2798,0.761,2838,0.777,2913,0.864,2962,0.864,2966,0.864,3320,1.45,3327,0.837,3429,0.935,3474,1.808,3475,1.808,3476,1.808,3513,0.814,3514,0.814,3515,0.814,3516,0.814,3605,0.895,3611,2.348,3615,0.837,3617,0.837,3637,2.945,3638,0.988,3639,0.988,3640,2.679,3641,1.844,3642,0.988,3643,0.988,3644,0.988,3645,0.988,3646,0.988,3647,0.988,3648,2.592,3649,0.988,3650,0.988,3651,0.988,3652,3.837,3653,3.252,3654,3.252,3655,2.592,3656,2.592,3657,1.844,3658,0.988,3659,0.864,3660,0.837,3661,0.814,3662,0.988,3663,0.988,3664,0.895,3665,0.895,3666,0.935,3667,0.988,3668,0.988,3669,0.988,3670,0.988,3671,1.67,3672,0.988,3673,0.895,3674,0.988,3675,0.988,3676,0.988,3677,0.895,3678,0.895,3679,0.988,3680,0.988,3681,1.844,3682,0.988,3683,1.844,3684,0.988,3685,0.988,3686,0.988,3687,0.988,3688,0.988,3689,0.988,3690,0.988,3691,0.988,3692,0.988,3693,0.988,3694,2.592,3695,0.988,3696,0.988,3697,0.988,3698,0.988,3699,0.988,3700,0.988,3701,0.988,3702,0.988,3703,0.988,3704,0.988,3705,0.988,3706,0.988,3707,0.988]],["component/79",[6,0.35]],["keyword/79",[]],["title/80-1",[121,20.053,524,14.831,2372,35.612]],["name/80-1",[]],["text/80-1",[]],["component/80-1",[]],["keyword/80-1",[]],["title/80-2",[99,18.12,121,20.053,251,19.777]],["name/80-2",[]],["text/80-2",[]],["component/80-2",[]],["keyword/80-2",[]],["title/80-3",[2243,57.052]],["name/80-3",[]],["text/80-3",[]],["component/80-3",[]],["keyword/80-3",[]],["title/80-4",[121,30.002]],["name/80-4",[]],["text/80-4",[]],["component/80-4",[]],["keyword/80-4",[]],["title/80-5",[121,24.038,1057,32.593]],["name/80-5",[]],["text/80-5",[]],["component/80-5",[]],["keyword/80-5",[]],["title/80-6",[41,28.221,351,14.945,1116,24.803]],["name/80-6",[]],["text/80-6",[]],["component/80-6",[]],["keyword/80-6",[]],["title/80-7",[28,29.188,121,20.053,1132,25.843]],["name/80-7",[]],["text/80-7",[]],["component/80-7",[]],["keyword/80-7",[]],["title/80",[121,24.038,992,35.755]],["name/80",[121,0.57,992,0.848]],["text/80",[4,1.375,6,0.7,9,1.695,19,1.042,23,3.618,24,1.797,27,2.169,28,1.042,32,2.576,35,2.222,37,1.406,50,1.917,74,1.705,81,0.756,83,1.107,89,2.134,98,0.868,99,3.479,102,1.287,121,4.079,124,1.014,138,1.107,146,0.927,154,0.965,164,2.041,168,2.594,200,1.049,205,0.759,211,2.106,220,1.262,234,0.903,249,2.192,251,3.798,255,0.953,286,0.932,295,1.241,300,1.491,306,1.844,310,1.84,311,0.994,312,1.349,334,0.943,338,1.098,344,1.072,347,1.689,351,2.909,377,0.734,392,0.802,393,1.178,410,0.864,411,1.903,413,2.665,416,0.848,426,1.178,429,0.731,438,0.927,439,1.338,440,2.169,454,1.818,462,2.013,463,2.309,466,1.961,471,0.83,479,1.806,482,1.561,484,2.491,490,2.05,491,0.877,492,3.163,501,0.841,509,2.947,519,1.333,520,1.643,521,0.728,523,1.37,524,2.361,542,1.178,557,0.982,565,0.894,573,0.812,582,1.135,583,1.202,584,1.526,585,0.802,597,1.202,604,2.053,609,1.587,616,1.214,632,2.102,649,2.228,660,1.125,666,0.988,670,3.673,671,1.398,676,0.988,692,0.908,701,0.756,702,1.818,726,1.116,733,0.899,751,1.484,758,3.385,759,2.947,760,3.877,781,3.988,786,1.116,794,1.034,798,1.406,800,2.207,802,1.034,810,0.97,823,1.145,837,2.481,840,1.081,848,1.445,887,0.988,921,2.564,922,1.081,927,0.877,989,1.178,1011,1.899,1015,2.696,1018,1.361,1023,1.523,1029,1.383,1057,3.126,1075,1.107,1077,2.322,1085,1.241,1086,0.786,1112,1.202,1115,2.242,1116,4.092,1122,1.648,1124,0.97,1132,0.922,1144,1.202,1147,3.072,1151,1.098,1155,2.204,1156,2.561,1185,1.089,1212,1.256,1214,1.459,1216,1.439,1223,1.116,1242,1.014,1246,1.214,1257,1.63,1258,2.192,1260,3.785,1303,1.156,1309,1.042,1315,1.167,1325,0.932,1340,2.207,1344,1.089,1466,1.737,1490,1.135,1511,1.383,1581,1.383,1585,1.256,1586,1.929,1587,
11.818,1667,1.361,1678,1.523,1696,1.383,1707,1.361,1736,1.304,1748,1.341,1898,1.361,1908,3.641,1977,2.134,2141,1.431,2184,1.431,2204,1.256,2354,2.743,2372,1.271,2378,8.209,2379,4.539,2380,5.408,2381,4.539,2385,2.82,2386,2.291,2387,1.489,2394,1.604,2396,2.82,2397,2.677,2398,1.604,2399,1.604,2400,1.459,2401,1.459,2402,1.459,2403,1.604,2404,1.604,2681,3.152,2945,1.431,3217,1.604,3266,5.697,3268,1.655,3269,1.655,3270,2.564,3271,1.523,3272,1.561,3273,1.655,3274,1.655,3275,1.604,3276,1.655,3277,1.655,3278,1.655,3279,1.655,3280,1.655]],["component/80",[6,0.35]],["keyword/80",[]],["title/81-1",[7,23.184,133,18.957,155,22.916,3215,39.78]],["name/81-1",[]],["text/81-1",[]],["component/81-1",[]],["keyword/81-1",[]],["title/81-2",[155,22.916,168,19.349,407,21.934,1567,24.207]],["name/81-2",[]],["text/81-2",[]],["component/81-2",[]],["keyword/81-2",[]],["title/81-3",[155,20.063,400,25.285,512,19.837,1342,25.551,3708,39.862]],["name/81-3",[]],["text/81-3",[]],["component/81-3",[]],["keyword/81-3",[]],["title/81-4",[155,20.063,400,25.285,512,19.837,1084,23.68,1342,25.551]],["name/81-4",[]],["text/81-4",[]],["component/81-4",[]],["keyword/81-4",[]],["title/81-5",[155,26.716,399,31.01,1815,43.738]],["name/81-5",[]],["text/81-5",[]],["component/81-5",[]],["keyword/81-5",[]],["title/81",[399,37.174,400,40.363]],["name/81",[399,0.881,400,0.957]],["text/81",[0,1.422,6,1.058,7,2.561,20,2.116,24,0.895,35,0.639,38,0.998,50,1.644,70,1.651,83,1.296,90,1.247,118,1.744,121,0.838,122,1.104,125,0.989,126,0.916,144,4.409,146,1.086,147,1.354,162,2.475,163,3.26,167,1.379,168,4.584,169,1.527,170,2.592,172,1.366,175,3.716,178,1.393,180,2.595,183,1.489,185,1.86,186,2.196,198,1.912,199,0.98,205,2.014,211,2.349,213,1.341,220,1.448,223,3.458,231,2.269,234,1.058,239,4.367,251,1.423,261,0.955,262,2.532,269,1.512,286,1.092,294,1.379,306,1.229,310,0.916,312,0.899,328,2.086,347,1.448,351,1.076,355,2.018,356,1.87,383,1.759,392,4.874,399,4.607,400,6.081,405,1.548,406,3.753,407,1.069,408,1.13,410,1.743,411,1.568,412,0.967,413,1.32,429,4.207,443,1.784,445,1.069,454,1.559,465,5.222,499,1.812,507,1.341,519,2.393,520,0.818,526,1.57,528,3.235,557,1.15,585,2.53,591,1.57,654,1.57,681,1.318,691,1.13,694,1.203,713,2.475,724,1.341,730,1.57,736,5.781,739,1.276,788,3.26,791,1.092,798,1.647,808,2.595,837,1.855,852,2.044,887,1.157,930,1.379,963,3.225,1019,2.147,1077,3.169,1079,1.123,1081,1.784,1101,1.57,1106,2.532,1110,1.165,1116,2.793,1157,1.092,1159,1.879,1170,1.296,1187,1.594,1188,1.784,1189,1.393,1193,1.22,1194,1.247,1258,4.718,1306,1.619,1314,1.619,1334,1.828,1394,1.379,1409,1.318,1433,1.507,1466,1.157,1520,1.938,1538,1.454,1539,2.788,1541,1.647,1553,2.01,1575,3.235,1588,1.594,1589,1.318,1626,1.454,1650,1.276,1768,1.548,1808,1.507,1822,2.099,1940,1.709,1963,2.01,1964,1.619,1977,1.422,2026,1.709,2059,1.379,2133,1.619,2148,2.099,2276,1.527,2288,1.676,2369,3.235,2409,2.01,2416,2.099,2418,4.759,2419,3.614,2436,2.099,2437,2.099,2439,2.099,2440,2.099,2441,2.099,2443,2.099,2445,3.614,2447,6.89,2475,3.614,2500,1.619,2511,2.01,2557,3.614,2560,2.099,2792,1.489,2834,1.594,2992,1.879,3149,2.01,3305,1.828,3320,3.003,3709,2.219,3710,2.219,3711,2.219,3712,2.01,3713,2.219,3714,2.219,3715,2.219,3716,2.219,3717,2.219,3718,2.219,3719,2.219,3720,2.219,3721,3.82,3722,2.219,3723,2.219,3724,5.031,3725,2.219,3726,2.219,3727,2.219,3728,2.219,3729,2.219,3730,2.219,3731,3.614,3732,2.219,3733,2.219,3734,2.219,3735,2.219,3736,2.219,3737,2.219,3738,2.219,3739,2.219,3740,2.219,3741,6.738,3742,2.219,3743,2.219,3744,2.219,3745,2.219,3746,2.219,3747,2.219]],["component/81",[6,0.35]],["keyword/81",[]],["title/82-1",[1190,44.3]],["name/82-1",[]],["text/82-1",[]],["component/82-1",[]],["keyword/82-1",[]],["title/82-2",[524,17.779,605,46.44]],["name/82-2",[]],["text/82-2",[]],["component/82-2",[]],["keyword/82-2",[]],["title/82-3",[1916,50.022,2482,37.801]],["name/82-3",[]],["text/82-3",[]],["component/82-3",[]],["keyword/82-3",[]],["title/82-4",[794,34.748,1357,36.024]],["name/82-4",[]],["text/82-4",[]],["component/82-4",[]],["keyword/82-4",[]],["title/82-5",[525,36.299,712,33.193]],["name/82-5",[]],["text/82-5",[]],["component/82-5",[]],["keyword/82-5",[]],["title/82-6",[143,39.394,1155,26.268,1466,27.689]],["name/82-6",[]],["text/82-6",[]],["component/82-6",[]],["keyword/82-6",[]],["title/82-7",[712,33.193,741,33.614]],["name/82-7",[]],["text/82-7",[]],["component/82-7",[]],["keyword/82-7",[]],["title/82-8",[69,22.658,437,25.037,787,29.503,1627,30.182]],["name/82-8",[]],["text/82-8",[]],["component/82-8",[]],["keyword/82-8",[]],["title/82-9",[98,29.163,802,34.748]],["name/82-9",[]],["text/82-9",[]],["component/82-9",[]],["keyword/82-9",[]],["title/82-10",[412,27.741,501,28.235]],["name/82-10",[]],["text/82-10",[]],["component/82-10",[]],["keyword/82-10",[]],["title/82-11",[35,15.298,524,14.831,1099,33.33]],["name/82-11",[]],["text/82-11",[]],["component/82-11",[]],["keyword/82-11",[]],["title/82-12",[210,37.672]],["name/82-12",[]],["text/82-12",[]],["component/82-12",[]],["keyword/82-12",[]],["title/82",[524,22.19]],["name/82",[524,0.738]],["text/82",[1,0.811,2,0.908,4,1.202,6,1.554,9,1.107,13,0.689,20,0.625,23,2.065,24,0.456,27,3.938,29,1.473,32,2.703,34,2.08,35,1.87,36,0.853,38,1.309,40,1.056,41,0.6,46,0.702,48,0.888,50,0.486,51,0.565,69,0.562,70,2.075,73,0.758,75,0.838,82,0.585,89,0.724,90,0.635,93,0.87,98,0.956,99,1.957,113,0.635,119,0.508,120,1.593,121,0.427,122,0.562,124,0.604,125,2.556,126,1.755,133,2.204,138,0.66,139,1.327,146,0.553,149,1.436,153,0.585,154,1.063,155,1.824,157,0.523,159,3.672,160,0.689,164,2.81,168,1.236,170,1.075,172,0.695,175,0.702,177,0.621,178,0.709,179,0.556,185,1.016,186,0.649,188,0.533,194,0.488,197,0.565,199,1.285,204,0.671,205,1.922,210,0.536,211,1.67,216,0.635,218,0.677,220,0.428,221,0.528,223,0.53,228,0.608,234,0.995,261,1.252,275,1.499,283,0.853,286,1.783,288,0.55,289,1.693,300,0.506,301,0.497,303,0.799,306,0.625,309,0.671,310,1.497,312,0.845,314,1.095,323,2.374,324,1.05,334,1.803,337,1.4,338,0.654,340,0.758,343,1.298,344,1.647,347,1.374,350,0.63,351,1.614,363,0.486,366,1.677,372,2.231,374,1.537,375,0.562,377,1.645,383,0.52,385,0.87,392,0.883,408,1.481,410,1.938,411,2.882,412,2.308,413,2.721,415,1.298,416,2.37,424,0.617,428,1.383,429,0.436,430,0.644,439,1.456,445,1.402,449,0.608,450,1.016,454,1.479,466,1.229,471,0.914,473,1.039,477,1.549,479,0.612,491,0.523,492,1.852,493,0.66,499,0.536,500,0.788,501,3.494,515,0.788,519,1.451,521,0.434,522,1.181,523,0.465,524,3.251,525,3.019,527,0.593,538,1.383,546,1.023,556,0.654,557,0.585,565,0.533,568,0.568,570,1.637,573,2.268,582,0.677,583,0.716,584,0.518,585,0.478,587,0.544,588,1.31,597,1.845,598,0.87,601,0.749,604,0.433,605,0.824,609,2.026,619,0.53,626,0.838,639,0.63,640,0.908,642,1.28,643,1.641,649,2.238,666,
11.089,667,2.79,670,1.473,671,0.474,673,0.931,684,0.74,686,1.321,687,2.067,692,2.036,701,2.111,702,3.302,704,0.639,709,0.562,711,0.788,712,2.761,713,0.732,714,1.181,729,0.799,734,0.654,736,0.612,742,0.553,760,1.216,775,1.229,782,0.671,783,1.635,786,0.665,794,0.617,795,0.777,796,1.262,797,1.324,802,2.89,806,0.724,811,0.888,816,0.639,818,0.617,822,1.448,829,1.92,837,0.416,838,0.777,848,0.906,849,0.695,855,0.732,884,0.689,887,1.089,909,0.811,924,0.695,927,1.346,931,1.044,969,0.811,979,2.505,981,1.262,982,1.992,992,1.635,1015,0.499,1029,0.824,1075,0.66,1077,2.014,1078,0.788,1079,1.473,1086,4.112,1088,1.589,1089,1.448,1090,0.635,1096,2.494,1099,3.324,1100,0.689,1107,0.824,1110,1.095,1117,0.625,1134,1.589,1140,2.159,1142,1.549,1147,1.05,1153,1.767,1154,0.724,1155,3.896,1156,1.2,1157,0.556,1170,1.219,1171,0.853,1172,0.908,1175,0.709,1176,0.788,1179,1.549,1187,0.811,1191,0.689,1193,0.621,1207,1.714,1209,0.677,1226,0.671,1241,0.689,1242,0.604,1245,2.689,1253,2.051,1257,1.022,1260,1.518,1296,0.625,1313,0.683,1315,1.792,1323,0.838,1337,0.724,1466,4.324,1527,0.702,1567,1.11,1580,1.023,1583,0.767,1587,0.617,1604,0.799,1618,1.641,1621,0.604,1623,0.87,1626,0.74,1627,5.944,1628,4.164,1636,1.148,1639,1.549,1666,0.788,1713,0.758,1714,0.811,1727,1.577,1731,0.87,1783,0.788,1787,0.654,1808,0.767,1815,0.931,1928,1.298,1959,0.956,1960,0.788,1980,1.023,1996,0.74,2003,0.853,2012,1.607,2052,0.87,2072,0.811,2085,0.931,2112,0.853,2143,0.956,2144,0.931,2182,2.09,2208,4.625,2232,0.956,2329,2.924,2376,0.838,2482,2.524,2500,0.824,2642,0.956,2643,3.449,2644,0.799,2645,2.753,2646,2.09,2647,0.931,2648,1.068,2649,1.068,2650,1.068,2651,1.068,2652,1.974,2653,1.068,2654,1.068,2655,1.068,2656,1.068,2657,1.068,2658,0.799,2659,1.974,2660,2.753,2661,1.068,2662,0.987,2663,1.89,2664,1.068,2665,1.068,2666,2.753,2667,1.974,2668,1.129,2669,1.068,2670,1.068,2671,0.931,2672,0.908,2673,0.956,2674,1.068,2675,0.987,2676,1.068,2677,0.956,2678,0.956,2679,0.956,2680,0.824]],["component/82",[6,0.35]],["keyword/82",[]],["title/83-1",[10,39.186,733,30.183]],["name/83-1",[]],["text/83-1",[]],["component/83-1",[]],["keyword/83-1",[]],["title/83-2",[1190,44.3]],["name/83-2",[]],["text/83-2",[]],["component/83-2",[]],["keyword/83-2",[]],["title/83-3",[188,30.031,1191,38.822]],["name/83-3",[]],["text/83-3",[]],["component/83-3",[]],["keyword/83-3",[]],["title/83-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/83-4",[]],["text/83-4",[]],["component/83-4",[]],["keyword/83-4",[]],["title/83-5",[139,36.226]],["name/83-5",[]],["text/83-5",[]],["component/83-5",[]],["keyword/83-5",[]],["title/83-6",[81,25.382,220,24.123]],["name/83-6",[]],["text/83-6",[]],["component/83-6",[]],["keyword/83-6",[]],["title/83-7",[413,21.993,621,46.44]],["name/83-7",[]],["text/83-7",[]],["component/83-7",[]],["keyword/83-7",[]],["title/83-8",[220,20.123,351,14.945,750,42.674]],["name/83-8",[]],["text/83-8",[]],["component/83-8",[]],["keyword/83-8",[]],["title/83-9",[351,17.916,2023,53.891]],["name/83-9",[]],["text/83-9",[]],["component/83-9",[]],["keyword/83-9",[]],["title/83-10",[520,23.467,604,24.38]],["name/83-10",[]],["text/83-10",[]],["component/83-10",[]],["keyword/83-10",[]],["title/83-11",[211,25.006,686,28.889]],["name/83-11",[]],["text/83-11",[]],["component/83-11",[]],["keyword/83-11",[]],["title/83-12",[119,28.623,458,45.711]],["name/83-12",[]],["text/83-12",[]],["component/83-12",[]],["keyword/83-12",[]],["title/83-13",[1116,37.11]],["name/83-13",[]],["text/83-13",[]],["component/83-13",[]],["keyword/83-13",[]],["title/83-14",[686,28.889,1239,43.794]],["name/83-14",[]],["text/83-14",[]],["component/83-14",[]],["keyword/83-14",[]],["title/83-15",[301,23.345,686,24.099,2681,37.564]],["name/83-15",[]],["text/83-15",[]],["component/83-15",[]],["keyword/83-15",[]],["title/83-16",[1296,35.239,1566,40.788]],["name/83-16",[]],["text/83-16",[]],["component/83-16",[]],["keyword/83-16",[]],["title/83-17",[427,36.582,520,23.467]],["name/83-17",[]],["text/83-17",[]],["component/83-17",[]],["keyword/83-17",[]],["title/83-18",[210,37.672]],["name/83-18",[]],["text/83-18",[]],["component/83-18",[]],["keyword/83-18",[]],["title/83",[119,28.623,173,30.031]],["name/83",[119,0.679,173,0.712]],["text/83",[4,1.116,6,0.827,7,0.572,9,0.427,13,0.357,14,0.592,20,0.324,23,3.064,24,0.236,27,1.836,28,0.757,29,0.151,30,0.175,31,0.226,32,2.731,34,0.146,35,1.452,38,0.387,40,0.435,41,0.159,50,0.484,51,0.431,56,0.271,57,0.235,66,0.23,70,0.372,74,0.576,81,0.448,82,0.446,86,0.38,92,0.38,98,1.872,99,2.581,111,0.278,119,0.387,120,0.605,121,0.785,122,0.291,124,1.55,125,0.261,126,2.742,130,0.253,133,0.573,138,0.175,139,1.569,140,0.806,146,0.146,149,0.206,153,0.155,154,0.438,155,1.259,157,0.749,159,0.161,163,0.194,164,0.631,165,0.183,167,0.186,168,1.533,170,0.154,173,1.181,174,0.476,177,0.322,178,0.368,179,0.423,183,0.923,184,0.297,185,1.117,188,0.874,190,0.48,194,0.372,197,1.45,198,0.293,199,1.442,200,0.762,202,0.384,204,0.348,205,1.002,206,0.235,208,0.23,210,0.278,211,2.971,213,0.181,214,1.065,216,0.631,217,0.209,218,0.351,220,1.43,221,0.757,222,0.212,223,0.528,224,0.206,226,0.194,228,0.316,230,0.176,231,0.178,233,0.209,238,0.212,239,0.255,241,0.351,243,0.873,244,0.357,246,0.507,249,0.288,250,0.302,251,1.079,258,0.212,259,2.492,261,0.987,268,0.507,269,1.362,272,0.241,275,0.443,276,0.188,279,0.384,280,0.212,286,0.677,288,0.902,289,0.274,290,0.451,292,0.168,294,0.186,300,1.76,301,1.009,306,0.166,308,0.241,309,0.348,310,0.568,311,0.722,312,1.393,314,0.307,319,0.206,324,0.932,325,0.201,326,0.168,328,0.32,334,0.291,337,0.201,340,0.201,347,1.098,351,2.509,355,0.158,356,0.421,363,0.252,365,0.525,366,0.271,375,0.559,377,0.435,387,0.171,388,0.334,392,0.364,395,0.145,401,0.196,403,0.241,405,0.209,406,0.54,408,0.943,409,0.988,410,0.513,411,0.715,412,0.375,413,1.901,416,0.503,417,0.285,418,0.334,420,0.146,424,0.32,426,0.186,427,0.172,429,0.226,430,0.334,434,0.271,435,0.271,436,0.218,437,0.473,438,0.674,439,0.235,440,0.146,445,0.541,449,0.161,450,0.788,451,0.188,454,1.021,459,0.175,468,0.176,471,
10.131,473,0.559,478,0.709,479,0.162,484,1.953,489,1.319,491,1.251,492,2.248,496,0.276,499,0.533,503,0.278,506,0.375,508,0.415,511,0.201,512,0.291,515,0.209,516,0.421,520,2.996,521,0.432,523,0.241,524,2.424,527,0.307,531,0.375,532,0.389,543,0.496,544,0.222,547,0.184,557,0.155,562,0.241,565,0.98,568,0.295,570,0.265,575,0.348,576,0.173,583,0.19,584,1.801,585,1.059,587,0.282,588,1.163,592,0.209,593,0.215,594,0.19,599,0.713,601,0.57,604,1.11,606,0.192,609,1.47,612,0.364,614,0.172,619,0.275,621,1.516,632,0.276,637,0.175,642,0.258,647,1.026,649,0.214,652,0.226,660,0.348,664,0.667,670,2.67,671,1.134,674,0.483,676,0.156,679,0.673,681,1.832,682,0.183,684,0.196,686,5.091,687,0.171,688,0.241,689,0.203,691,0.943,692,0.281,693,0.178,694,0.162,696,0.516,697,1.061,698,0.516,700,0.175,701,0.646,702,1.021,703,0.463,709,0.149,715,0.451,717,0.19,723,0.334,725,0.966,728,0.235,733,0.142,736,0.467,739,0.172,741,0.454,742,0.146,743,0.15,747,0.496,748,0.685,749,0.32,751,0.722,755,2.246,756,0.388,758,2.408,759,1.486,760,1.945,765,2.143,774,0.348,775,0.662,779,0.253,781,2.132,783,0.483,785,0.679,789,0.662,790,0.183,791,0.553,795,0.773,796,0.354,797,0.372,800,0.388,806,0.192,810,0.3,812,0.865,816,0.169,818,0.752,822,1.625,823,1.864,827,0.882,829,1.554,834,0.954,835,1.223,837,0.766,845,0.184,848,0.488,849,0.184,852,0.16,853,0.235,883,0.421,884,0.183,896,0.241,903,0.535,919,3.861,927,0.52,931,0.15,979,1.609,982,1.142,989,0.364,996,0.184,1011,0.334,1015,2.381,1019,0.483,1031,0.298,1055,0.194,1057,1.848,1077,3.147,1078,0.209,1079,0.697,1080,0.535,1084,0.348,1086,3.68,1088,0.32,1089,0.149,1092,0.415,1094,0.614,1098,0.511,1099,0.188,1110,0.307,1115,0.932,1116,2.41,1117,0.476,1118,0.198,1122,0.148,1123,0.186,1126,0.275,1127,0.491,1132,0.788,1134,0.614,1142,4.926,1144,0.19,1147,2.596,1148,0.713,1151,0.339,1154,0.72,1155,2.166,1156,2.824,1157,0.677,1160,0.212,1162,0.384,1170,0.342,1178,0.23,1181,0.203,1183,0.176,1185,0.337,1189,0.368,1192,0.156,1194,0.168,1199,1.252,1204,0.525,1207,0.176,1211,0.864,1213,0.222,1215,0.618,1216,1.081,1217,0.19,1218,0.19,1219,0.183,1220,0.728,1221,0.235,1223,0.345,1225,0.203,1227,0.427,1234,0.388,1239,4.206,1242,0.313,1244,0.192,1245,4.802,1246,0.375,1247,0.597,1248,4.206,1251,0.188,1253,0.636,1257,0.287,1258,3.226,1260,5.521,1266,0.745,1267,0.368,1273,0.825,1282,0.923,1290,0.311,1296,0.166,1298,0.181,1300,0.706,1303,1.649,1309,0.89,1310,1.44,1313,0.52,1316,0.372,1317,0.215,1325,0.677,1331,0.435,1332,0.834,1344,0.337,1351,0.212,1357,0.332,1364,0.215,1369,0.226,1377,0.546,1380,0.206,1390,0.212,1394,0.856,1409,1.234,1433,0.203,1442,0.194,1445,0.511,1452,0.729,1454,0.662,1456,0.807,1461,0.729,1462,0.729,1463,0.322,1464,0.729,1465,0.709,1466,1.968,1467,0.72,1468,0.72,1469,0.72,1470,0.551,1471,1.163,1472,0.72,1473,0.673,1474,0.72,1475,0.72,1476,0.72,1477,0.54,1478,1.017,1479,0.54,1480,0.709,1488,0.54,1489,1.714,1490,0.673,1497,1.606,1499,0.807,1500,0.311,1501,0.226,1508,0.247,1515,0.241,1527,2.138,1559,0.476,1562,0.201,1567,0.159,1568,0.235,1573,0.226,1576,0.194,1581,0.218,1584,0.222,1585,0.57,1586,0.651,1587,0.163,1588,0.215,1589,0.178,1590,0.222,1591,0.427,1592,0.222,1593,0.206,1594,0.215,1595,0.218,1596,0.222,1597,0.196,1598,0.196,1604,0.212,1611,0.253,1615,0.218,1616,0.784,1617,0.535,1619,0.375,1626,0.196,1627,0.198,1636,1.984,1647,0.421,1648,0.46,1650,0.172,1657,0.393,1658,0.679,1660,1.273,1662,1.202,1663,1.202,1664,0.192,1665,0.342,1671,0.784,1680,0.218,1687,0.222,1707,0.215,1710,0.253,1711,0.194,1714,0.215,1721,0.23,1722,0.902,1725,0.212,1728,0.235,1737,0.241,1742,0.226,1752,0.196,1754,0.23,1764,0.849,1779,0.795,1780,1.411,1781,0.206,1786,0.253,1788,1.04,1798,0.247,1848,0.222,1896,0.212,1908,0.398,1921,0.226,1930,0.218,1933,0.218,1936,0.226,1938,0.384,1939,0.241,1940,0.451,1941,0.218,1960,0.409,1964,0.218,1975,0.271,1996,0.196,2003,0.226,2013,0.271,2026,0.451,2041,0.253,2049,0.253,2059,0.186,2182,0.618,2184,0.226,2213,0.253,2214,0.247,2225,0.271,2239,0.253,2246,0.253,2276,0.206,2288,0.443,2301,0.443,2309,0.247,2312,0.247,2373,0.271,2386,2.705,2387,0.676,2391,0.554,2406,0.471,2407,0.271,2410,0.253,2462,0.531,2505,0.253,2605,0.46,2608,0.271,2622,0.222,2644,0.415,2658,0.415,2673,0.253,2679,0.253,2681,7.479,2682,0.271,2683,0.283,2684,1.247,2685,0.46,2686,4.794,2687,1.753,2688,4.983,2689,3.56,2690,2.557,2691,0.554,2692,0.283,2694,0.283,2695,0.253,2696,0.283,2697,0.247,2698,0.283,2702,1.063,2710,0.283,2711,0.253,2712,0.283,2713,0.814,2714,1.063,2718,0.676,2721,0.283,2722,0.261,2723,0.283,2724,0.283,2725,0.261,2730,0.283,2731,1.302,2732,0.283,2733,2.741,2734,0.283,2735,0.512,2739,1.302,2740,1.302,2741,0.752,2742,0.253,2743,0.283,2745,0.554,2746,0.283,2747,0.283,2748,0.283,2749,0.283,2753,0.261,2754,0.261,2755,0.271,2756,0.283,2757,0.261,2758,0.283,2759,0.512,2760,0.283,2761,0.283,2765,0.283,2766,0.283,2767,3.414,2768,0.247,2773,0.283,2774,0.283,2775,0.283,2776,0.253,2777,0.283,2778,0.283,2779,0.253,2780,0.283,2781,0.283,2782,0.283,2783,0.283,2784,0.283,2785,0.283,2786,0.261,2834,0.421,2851,0.235,2866,0.512,2904,1.13,2905,0.471,3013,1.018,3223,0.512,3270,1.06,3311,0.247,3379,0.496,3380,0.496,3394,0.235,3397,0.261,3404,5.905,3406,0.752,3407,0.709,3408,0.752,3412,1.134,3415,0.261,3464,0.299,3465,0.271,3473,3.329,3474,0.209,3475,0.209,3476,0.209,3477,0.421,3478,0.415,3479,0.222,3480,0.222,3482,0.299,3483,0.299,3484,0.299,3487,0.253,3509,0.926,3633,0.483,3748,0.299,3749,0.324,3750,0.324,3751,0.324,3752,0.324,3753,0.324,3754,0.324,3755,0.324,3756,0.324,3757,0.324,3758,0.324,3759,1.853,3760,0.324,3761,0.324,3762,0.324,3763,0.324,3764,0.324,3765,0.324,3766,0.324,3767,1.124,3768,0.554,3769,0.586,3770,0.586,3771,1.124,3772,0.586,3773,0.586,3774,0.586,3775,0.586,3776,1.124,3777,0.586,3778,0.586,3779,0.86,3780,0.586,3781,0.299,3782,0.299,3783,0.586,3784,0.586,3785,0.586,3786,0.586,3787,0.586,3788,0.299,3789,0.299,3790,0.586,3791,0.299,3792,0.299,3793,0.299,3794,0.586,3795,0.299,3796,0.586,3797,0.586,3798,0.586,3799,0.586,3800,0.586,3801,0.586,3802,0.586,3803,0.586,3804,0.586,3805,0.586,3806,0.86,3807,0.299,3808,0.299,3809,0.299,3810,0.299,3811,0.299,3812,0.299,3813,0.299,3814,0.299,3815,1.124,3816,0.299,3817,0.586,3818,0.299,3819,0.586,3820,0.299,3821,0.299,3822,0.299]],["component/83",[6,0.35]],["keyword/83",[]],["title/84-1",[2787,57.961]],["name/84-1",[]],["text/84-1",[]],["component/84-1",[]],["keyword/84-1",[]],["title/84-2",[524,22.19]],["name/84-2",[]],["text/84-2",[]],["component/84-2",[]],["keyword/84-2",[]],["title/84-3",[9,24.208,632,30.031]],["name/84-3",[]],["text/84-3",[]],["component/84-3",[]],["keyword/84-3",[]],["title/84-4",[446,33.193,773,42.691]],["name/84-4",[]],["text/84-4",[]],["component/84-4",[]],["keyword/84-4",[]],["title/84",[368,47.224,2327,49.002]],["name/84",[368,1.12,2327,1.162]],["text/84",[4,1.199,6,1.721,9,2.856,23,1.869,24,1.171,29,0.821,32,3.426,34,0.794,35,0.468,38,1.306,40,0.821,46,1.009,50,1.249,51,0.812,68,1.04,70,1.254,73,1.089,74,0.831,81,1.571,88,1.132,98,0.744,99,2.684,104,1.374,111,1.377,119,1.306,122,0.807,124,0.868,125,3.167,126,1.199,127,0.948,133,1.639,138,0.948,139,0.74,140,1.444,141,0.981,146,1.421,153,0.841,154,1.478,157,0.751,159,0.874,164,0.744,168,2.601,172,0.999,173,0.766,178,1.019,179,1.938,185,1.413,197,0.812,198,1.452,200,0.899,201,1.166,204,3.273,205,0.65,210,1.377,211,2.165,214,0.933,220,1.493,221,1.356,223,1.363,229,0.99,234,0.774,239,1.265,241,0.972,248,1.305,251,1.081,261,1.695,268,0.956,269,2.181,279,1.063,286,1.428,292,0.912,300,0.727,301,1.276,304,1.051,310,1.979,312,1.595,319,1.117,325,1.947,326,0.912,334,0.807,340,1.089,344,2.229,347,2.52,350,1.619,351,1.723,356,1.421,365,0.99,366,0.751,367,1.184,368,1.204,374,0.857,376,2.017,377,1.856,392,1.666,393,1.009,399,1.696,404,0.841,406,1.019,408,1.478,409,0.99,410,0.74,411,3.073,412,1.717,413,3.096,415,3.425,416,0.727,420,1.413,426,1.805,427,0.933,428,1.076,429,2.362,439,0.652,440,1.413,442,1.947,445,1.897,446,2.054,449,1.563,454,0.662,458,1.166,459,0.948,463,1.505,471,1.724,473,0.807,479,0.88,483,1.276,484,0.662,491,1.343,492,1.265,493,1.696,494,2.498,501,1.747,503,0.77,514,1.166,519,0.65,520,0.598,522,1.643,523,0.668,524,3.006,525,1.656,564,1.076,565,0.766,570,1.312,573,2.361,574,1.089,579,1.117,584,0.744,585,1.666,588,1.019,591,1.148,604,1.112,609,1.384,616,1.04,619,0.762,622,2.193,625,1.04,632,3.861,647,0.899,649,1.749,659,1.076,670,0.821,672,0.964,693,0.964,699,0.972,701,3.137,702,2.249,711,1.132,712,3.192,717,1.029,729,1.148,733,0.77,736,2.988,738,1.305,739,1.669,743,2.398,749,0.886,751,1.294,755,0.892,758,0.817,760,1.213,772,1.076,773,3.215,781,0.766,786,0.956,787,1.051,794,0.886,796,0.981,802,1.585,810,2.017,829,0.733,848,0.704,862,1.25,878,1.063,887,0.846,927,0.751,931,0.812,979,1.514,981,0.981,982,1.596,1015,1.282,1019,0.912,1054,1.337,1077,0.617,1079,0.821,1082,1.374,1083,1.226,1086,3.393,1088,2.617,1089,1.959,1090,0.912,1096,1.997,1101,1.148,1106,2.61,1112,1.029,1117,0.899,1124,0.831,1126,1.363,1134,1.585,1155,3.029,1157,1.428,1161,1.166,1173,2.193,1175,1.019,1183,0.956,1198,1.076,1207,1.71,1209,0.972,1246,1.04,1247,0.863,1271,1.102,1273,0.972,1287,3.072,1311,1.184,1318,1.076,1337,1.86,1342,1.04,1358,1.051,1367,1.374,1466,3.192,1509,1.226,1512,1.04,1527,1.009,1539,2.118,1559,0.899,1581,1.184,1587,2.617,1589,0.964,1593,1.117,1621,0.868,1636,1.596,1687,1.204,1714,1.166,1760,1.25,1896,1.148,1908,1.102,1921,1.226,1971,1.276,1977,1.04,2003,1.226,2012,1.25,2037,1.47,2143,1.374,2147,1.374,2204,1.076,2233,1.47,2245,2.054,2293,1.418,2329,1.117,2332,1.226,2386,1.997,2482,4.22,2612,1.132,2632,1.997,2643,2.828,2644,1.148,2646,1.166,2671,1.337,2680,1.184,2776,1.374,2788,1.166,2789,1.535,2790,1.535,2791,1.535,2792,1.089,2793,1.418,2794,1.47,2795,1.47,2796,1.535,2797,1.535,2801,2.746,2802,1.47,2804,1.535,2805,1.535,2806,3.165,2807,1.535,2808,1.535,2809,1.535,2810,1.374,2811,1.337,2812,1.132,2813,1.535,2814,1.535,2815,1.535,2904,1.132,3034,1.374,3712,1.47,3823,1.623,3824,1.623,3825,1.623]],["component/84",[6,0.35]],["keyword/84",[]],["title/85",[9,24.208,632,30.031]],["name/85",[9,0.574,632,0.712]],["text/85",[4,2.36,6,1.697,9,3.867,32,3.719,35,2.325,40,2.892,67,4.838,70,4.043,81,2.279,99,3.66,122,2.843,153,2.962,154,2.909,164,3.698,168,2.428,186,3.284,199,3.564,220,2.166,251,3.485,255,2.875,289,2.669,310,2.36,347,4.064,411,3.168,413,1.974,420,2.781,454,2.332,509,3.141,524,3.196,565,2.696,573,4.902,587,2.752,625,3.662,632,5.252,701,2.279,712,2.98,733,2.71,772,3.787,1086,3.346,1089,5.335,1583,3.881,1621,3.057,1636,3.141,2245,4.043,2677,4.838,2678,4.838,2680,5.889,2816,7.634,2817,5.405]],["component/85",[6,0.35]],["keyword/85",[]],["title/86-1",[407,30.654,1031,32.401]],["name/86-1",[]],["text/86-1",[]],["component/86-1",[]],["keyword/86-1",[]],["title/86-2",[239,23.141,407,25.571,1576,34.395]],["name/86-2",[]],["text/86-2",[]],["component/86-2",[]],["keyword/86-2",[]],["title/86-3",[407,30.654,649,23.232]],["name/86-3",[]],["text/86-3",[]],["component/86-3",[]],["keyword/86-3",[]],["title/86",[407,38.259]],["name/86",[2834,1.897]],["text/86",[4,1.236,6,2.263,23,2.823,24,1.207,35,3.046,48,2.352,50,1.288,51,1.498,67,2.534,83,1.748,90,3.513,101,1.694,121,3.246,133,1.246,159,1.612,164,1.371,169,2.059,172,3.026,175,1.861,190,1.669,205,1.198,211,2.457,221,3.382,239,1.305,246,1.763,251,2.329,255,3.147,256,4.365,261,1.288,269,1.185,289,1.398,292,1.681,300,1.34,305,2.118,312,1.99,328,4.957,334,2.445,355,3.823,366,2.274,372,1.843,375,1.489,377,1.903,383,1.378,399,2.871,407,4.566,410,1.365,411,2.256,413,2.97,416,1.34,429,1.896,439,1.203,445,1.442,451,1.879,456,2.008,459,1.748,463,3.241,492,1.305,496,2.319,519,1.198,521,2.783,523,1.231,539,2.059,562,2.406,570,2.221,587,2.367,595,1.984,614,1.72,625,1.918,633,3.926,634,4.833,647,1.657,649,1.093,666,1.561,672,1.778,676,3.776,
1684,1.961,686,1.359,692,1.434,694,2.665,702,2.552,704,1.694,709,1.489,724,3.78,734,1.734,743,2.459,765,2.488,774,1.778,791,2.418,808,2.033,837,3.727,887,1.561,912,5.122,931,2.459,1015,1.322,1031,1.524,1043,2.261,1077,1.869,1085,1.961,1106,1.984,1122,1.481,1170,1.748,1212,1.984,1216,2.702,1240,4.008,1242,3.346,1257,1.465,1287,1.918,1305,1.809,1315,3.026,1336,3.586,1343,4.051,1365,2.406,1366,2.008,1375,1.984,1405,7.783,1437,3.297,1442,1.939,1445,1.778,1576,3.184,1589,4.3,1594,2.15,1722,1.961,1737,2.406,1769,2.033,1787,1.734,1977,4.008,1987,2.534,2059,4.5,2111,2.118,2464,3.951,2788,2.15,2819,4.293,2820,2.711,2821,2.711,2822,2.711,2829,2.831,2830,2.992,2832,2.992,2833,2.992,2834,2.15,2835,2.831,2836,2.992,2839,4.162,2840,2.466,2841,2.992,2844,2.992,2845,2.992,2847,2.992,2848,2.992,3826,3.237,3827,2.831,3828,2.831,3829,2.711,3830,2.831]],["component/86",[6,0.35]],["keyword/86",[]],["title/87-1",[2849,45.658]],["name/87-1",[]],["text/87-1",[]],["component/87-1",[]],["keyword/87-1",[]],["title/87-2",[1445,47.18]],["name/87-2",[]],["text/87-2",[]],["component/87-2",[]],["keyword/87-2",[]],["title/87-3",[82,32.989,347,24.123]],["name/87-3",[]],["text/87-3",[]],["component/87-3",[]],["keyword/87-3",[]],["title/87-4",[168,27.042,649,23.232]],["name/87-4",[]],["text/87-4",[]],["component/87-4",[]],["keyword/87-4",[]],["title/87",[411,19.835,1086,26.387]],["name/87",[411,0.47,1086,0.626]],["text/87",[4,0.991,6,1.616,9,2.395,22,1.651,23,0.936,32,3.431,35,2.488,41,2.171,50,1.032,65,1.78,78,1.437,81,0.957,99,2.798,119,1.079,120,1.055,122,2.032,125,1.069,126,0.991,133,2.621,154,1.221,157,1.89,159,2.2,164,3.956,168,3.484,173,1.132,183,1.609,190,2.278,199,1.059,210,1.138,211,0.942,234,1.143,261,1.032,269,1.617,288,1.988,289,1.121,298,2.031,300,1.074,301,1.055,312,0.971,318,1.477,334,1.194,338,1.39,347,2.676,365,1.463,366,1.11,379,1.75,387,2.329,407,1.155,411,3.2,412,2.744,413,2.984,416,2.388,420,1.168,424,1.31,439,0.964,445,1.155,450,2.596,468,2.405,473,1.194,479,2.892,481,2.172,484,2.569,485,2.031,486,2.031,492,1.046,493,1.401,494,1.521,501,2.366,503,1.937,523,1.68,524,3.103,525,2.329,558,2.095,568,1.207,570,2.41,573,3.025,575,1.425,587,1.967,588,1.506,632,3.332,637,2.386,639,2.278,649,3.748,654,1.697,659,1.59,666,2.13,670,2.067,674,1.976,676,2.782,692,1.957,693,1.425,701,0.957,702,1.667,703,2.2,709,1.194,712,3.683,714,3.019,715,1.847,734,1.39,741,2.817,742,1.174,743,1.2,765,1.214,810,1.228,837,2.322,840,2.329,843,2.2,852,3.369,887,1.251,927,1.11,931,1.2,981,2.469,1038,1.847,1077,0.912,1078,1.673,1086,4.257,1088,2.912,1094,1.31,1099,1.506,1118,1.59,1126,1.126,1134,1.31,1147,2.055,1151,1.39,1154,1.537,1155,3.801,1157,2.01,1193,2.932,1194,1.348,1260,3.683,1313,1.45,1325,1.18,1337,1.537,1375,2.707,1439,1.673,1442,1.554,1445,5.54,1463,1.319,1466,4.276,1559,1.328,1567,2.171,1627,4.173,1636,2.245,1722,1.572,1727,3.085,1766,3.568,1787,1.39,1868,1.723,1928,2.539,1978,1.847,2136,1.885,2182,1.723,2334,2.172,2806,1.928,2812,1.673,2834,1.723,2838,1.885,2849,3.066,2859,2.269,2860,2.269,2861,2.031,2862,2.172,2863,2.095,2864,2.398,2865,1.78,2866,2.095,2867,2.269,2868,2.398,2869,2.095,2870,2.398,2871,2.269,2872,2.269,2873,2.398,2874,1.78,2875,2.269,2876,2.398,2877,2.269,3831,2.595]],["component/87",[6,0.35]],["keyword/87",[]],["title/88-1",[2849,45.658]],["name/88-1",[]],["text/88-1",[]],["component/88-1",[]],["keyword/88-1",[]],["title/88-2",[521,20.41,525,30.28,1088,28.986]],["name/88-2",[]],["text/88-2",[]],["component/88-2",[]],["keyword/88-2",[]],["title/88-3",[521,24.467,524,17.779]],["name/88-3",[]],["text/88-3",[]],["component/88-3",[]],["keyword/88-3",[]],["title/88-4",[32,17.738,524,14.831,633,33.33]],["name/88-4",[]],["text/88-4",[]],["component/88-4",[]],["keyword/88-4",[]],["title/88-5",[32,21.264,366,29.444]],["name/88-5",[]],["text/88-5",[]],["component/88-5",[]],["keyword/88-5",[]],["title/88-6",[449,34.279,471,27.862]],["name/88-6",[]],["text/88-6",[]],["component/88-6",[]],["keyword/88-6",[]],["title/88-7",[1309,43.671]],["name/88-7",[]],["text/88-7",[]],["component/88-7",[]],["keyword/88-7",[]],["title/88-8",[1517,48.908]],["name/88-8",[]],["text/88-8",[]],["component/88-8",[]],["keyword/88-8",[]],["title/88-9",[784,49.002,3832,55.594]],["name/88-9",[]],["text/88-9",[]],["component/88-9",[]],["keyword/88-9",[]],["title/88-10",[484,25.973,1015,28.11]],["name/88-10",[]],["text/88-10",[]],["component/88-10",[]],["keyword/88-10",[]],["title/88-11",[584,29.163,1258,31.317]],["name/88-11",[]],["text/88-11",[]],["component/88-11",[]],["keyword/88-11",[]],["title/88-12",[491,29.444,1258,31.317]],["name/88-12",[]],["text/88-12",[]],["component/88-12",[]],["keyword/88-12",[]],["title/88-13",[355,41.953]],["name/88-13",[]],["text/88-13",[]],["component/88-13",[]],["keyword/88-13",[]],["title/88-14",[239,34.623]],["name/88-14",[]],["text/88-14",[]],["component/88-14",[]],["keyword/88-14",[]],["title/88-15",[725,33.193,781,30.031]],["name/88-15",[]],["text/88-15",[]],["component/88-15",[]],["keyword/88-15",[]],["title/88-16",[363,34.179]],["name/88-16",[]],["text/88-16",[]],["component/88-16",[]],["keyword/88-16",[]],["title/88-17",[520,19.576,1258,26.124,1266,35.186]],["name/88-17",[]],["text/88-17",[]],["component/88-17",[]],["keyword/88-17",[]],["title/88",[521,24.467,524,17.779]],["name/88",[521,0.58,524,0.421]],["text/88",[4,1.221,6,1.304,19,2.676,23,1.898,24,3.205,32,1.626,35,1.402,38,1.33,41,1.572,50,1.273,51,1.48,81,2.473,111,1.403,120,1.3,133,1.23
11,153,1.533,157,1.368,168,2.635,186,3.565,197,1.48,198,2.435,199,1.306,211,3.841,220,1.121,227,2.035,241,1.772,251,4.167,269,3.145,281,2.035,282,3.825,301,3.493,312,1.198,366,2.869,375,1.471,395,4.373,407,2.344,410,1.349,411,3.444,413,2.745,429,1.141,439,1.188,445,1.424,449,1.593,450,5.56,492,2.121,512,1.471,519,1.184,520,1.795,521,4.248,523,1.216,524,3.312,525,2.776,527,1.552,530,2.678,550,2.436,570,2.199,575,1.757,585,3.822,587,1.424,609,2.32,616,1.895,641,1.788,649,2.623,671,1.241,676,1.542,699,1.772,755,1.626,765,3.139,781,2.296,822,2.421,837,3.33,838,2.035,840,1.687,843,1.593,852,1.582,855,3.153,922,1.687,979,2.538,982,2.676,1031,3.659,1052,4.009,1088,3.924,1155,1.463,1157,1.455,1194,1.661,1204,1.804,1226,1.757,1244,1.895,1258,1.455,1266,1.96,1288,2.504,1290,2.587,1294,2.194,1297,3.747,1309,1.626,1366,1.984,1466,1.542,1497,1.757,1517,1.821,1636,2.676,1676,3.551,2017,2.324,2646,3.496,2725,2.583,2834,5.162,2840,2.436,3407,2.436,3478,2.093,3659,2.583,3660,4.121,3833,6.2,3834,4.866,3835,4.866,3836,2.957,3837,2.957,3838,3.199,3839,2.957,3840,6.2,3841,4.009,3842,2.957,3843,2.957,3844,4.866,3845,3.199]],["component/88",[6,0.35]],["keyword/88",[]],["title/89",[221,29.733,694,34.511]],["name/89",[694,0.818,1394,0.938]],["text/89",[6,1.284,23,4.286,35,1.76,38,2.746,51,3.055,81,2.435,98,2.798,164,2.798,165,5.157,171,4.531,172,5.205,180,4.147,205,2.445,215,4.386,221,5.134,239,2.662,255,3.073,256,4.616,288,2.972,371,3.834,377,2.364,413,2.11,563,4.456,606,3.913,639,3.406,666,3.185,667,4.702,671,2.563,676,3.185,690,3.834,691,4.304,694,6.441,724,3.691,782,3.627,789,3.596,822,3.038,837,2.252,848,2.65,912,5.982,931,3.055,1084,3.627,1110,3.205,1219,3.725,1394,5.255,1436,6.273,1463,3.357,1517,3.76,1567,3.246,1769,4.147,2058,5.776,2059,6.028,2060,5.031,2061,7.656,2062,7.656,2063,5.776,2803,4.702,2837,8.452,2838,4.799,2879,4.908]],["component/89",[6,0.35]],["keyword/89",[]],["title/90-1",[413,21.993,501,28.235]],["name/90-1",[]],["text/90-1",[]],["component/90-1",[]],["keyword/90-1",[]],["title/90-2",[501,23.554,524,14.831,1175,33.33]],["name/90-2",[]],["text/90-2",[]],["component/90-2",[]],["keyword/90-2",[]],["title/90-3",[159,28.595,366,24.562,2882,44.955]],["name/90-3",[]],["text/90-3",[]],["component/90-3",[]],["keyword/90-3",[]],["title/90",[412,27.741,501,28.235]],["name/90",[412,0.658,501,0.669]],["text/90",[4,0.699,6,2,7,0.862,9,1.55,16,1.361,23,1.176,24,1.644,29,0.857,32,0.566,34,0.829,35,2.211,38,1.356,50,1.298,51,0.847,70,1.303,89,1.933,90,1.694,98,1.382,99,2.619,119,1.356,121,0.64,122,2.028,124,3.363,125,1.344,126,1.245,133,2.361,139,0.772,144,0.857,157,1.395,159,5.98,164,2.266,168,0.72,170,1.554,175,1.053,190,0.945,194,0.732,197,1.509,200,1.67,205,0.678,210,0.803,213,1.024,218,1.015,220,0.642,221,0.791,223,0.795,234,0.807,241,1.807,246,0.997,251,1.842,275,0.873,291,2.278,295,1.11,310,0.699,311,0.889,314,0.889,315,1.136,347,0.642,351,0.849,366,3.364,368,1.257,371,1.063,374,1.593,377,1.168,383,1.388,392,1.276,395,0.82,397,1.216,406,3.105,411,2.904,412,3.499,413,2.513,415,1.874,416,0.758,417,0.824,418,2.325,420,0.824,430,0.966,439,0.681,444,1.361,445,0.816,454,0.691,463,2.113,471,0.741,473,0.843,484,2.018,492,2.155,497,0.951,499,4.09,501,4.926,512,1.5,519,0.678,521,1.567,522,1.707,523,0.697,524,3.06,525,3.585,526,1.198,537,1.11,538,1.999,556,0.981,565,0.799,570,0.765,573,1.746,574,1.136,579,1.165,585,2.66,587,1.452,593,2.927,595,1.122,600,1.165,609,1.437,619,2.951,632,1.423,633,1.063,635,1.534,639,1.682,649,2.654,670,0.857,671,0.711,676,0.883,679,1.015,686,0.769,687,0.966,690,1.063,692,1.445,694,0.918,699,1.807,701,3.06,702,3.404,704,1.707,710,1.279,712,0.883,758,1.517,760,2.067,765,0.857,775,1.776,791,0.833,801,1.136,802,1.646,808,1.15,818,1.646,829,2.234,837,2.091,852,0.906,855,1.097,878,1.11,909,1.216,924,1.857,966,1.434,974,1.216,979,1.573,982,1.658,985,1.279,1019,0.951,1031,0.862,1077,1.147,1079,0.857,1086,3.863,1091,1.761,1095,2.484,1113,1.791,1117,0.938,1118,1.122,1121,1.304,1126,0.795,1132,1.468,1147,1.517,1148,1.074,1151,2.865,1155,1.492,1156,2.343,1157,1.484,1168,1.304,1170,0.989,1175,3.56,1198,1.122,1220,1.097,1241,1.033,1247,2.166,1251,1.893,1253,1.707,1256,1.085,1257,2.42,1260,0.883,1271,1.15,1298,1.024,1310,1.063,1311,2.2,1313,1.024,1314,1.236,1318,1.122,1323,2.237,1325,0.833,1337,1.085,1366,2.734,1442,1.097,1445,1.006,1466,2.958,1497,1.006,1549,1.304,1559,0.938,1567,0.9,1573,1.279,1587,1.646,1616,1.181,1628,1.15,1636,2.719,1677,1.361,1736,1.165,1752,1.11,1883,1.479,1899,1.331,1903,1.331,1910,1.434,1971,1.331,2012,2.322,2072,1.216,2108,1.434,2142,1.434,2244,1.434,2245,1.198,2253,1.236,2329,1.165,2658,1.198,2671,1.395,2672,1.361,2849,0.974,2861,4.187,2878,1.331,2883,1.602,2884,1.602,2885,1.602,2886,2.852,2887,4.678,2888,1.602,2889,1.602,2890,1.534,2892,1.602,2893,1.361,2894,1.602,2896,3.855,2897,1.693,2898,1.693,2899,2.852,2900,1.602,2901,2.852,2902,1.479,2903,2.852,2904,1.181,2905,1.361,2906,1.602,2907,3.691,2908,1.534,2911,1.479,2912,1.602,2913,1.479,2914,1.602,2915,1.602,3270,1.304]],["component/90",[6,0.35]],["keyword/90",[]],["title/91",[1751,57.961]],["name/91",[1751,1.927]],["text/91",[6,2.032,122,4.807,269,3.825,377,3.741,545,6.74,637,5.644,736,5.239,822,4.807,976,8.44,1751,8.277]],["component/91",[6,0.35]],["keyword/91",[]],["title/92-1",[524,17.779,642,27.985]],["name/92-1",[]],["text/92-1",[]],["component/92-1",[]],["keyword/92-1",[]],["title/92-2",[2109,50.377]],["name/92-2",[]],["text/92-2",[]],["component/92-2",[]],["keyword/92-2",[]],["title/92-3",[351,
117.916,642,27.985]],["name/92-3",[]],["text/92-3",[]],["component/92-3",[]],["keyword/92-3",[]],["title/92-4",[363,34.179]],["name/92-4",[]],["text/92-4",[]],["component/92-4",[]],["keyword/92-4",[]],["title/92-5",[3161,67.261]],["name/92-5",[]],["text/92-5",[]],["component/92-5",[]],["keyword/92-5",[]],["title/92-6",[2916,57.961]],["name/92-6",[]],["text/92-6",[]],["component/92-6",[]],["keyword/92-6",[]],["title/92-7",[168,27.042,642,27.985]],["name/92-7",[]],["text/92-7",[]],["component/92-7",[]],["keyword/92-7",[]],["title/92-8",[2917,62.432]],["name/92-8",[]],["text/92-8",[]],["component/92-8",[]],["keyword/92-8",[]],["title/92-9",[2918,62.432]],["name/92-9",[]],["text/92-9",[]],["component/92-9",[]],["keyword/92-9",[]],["title/92",[424,34.748,642,27.985]],["name/92",[424,0.824,642,0.663]],["text/92",[4,0.938,6,1.851,9,1.483,24,0.916,32,2.029,34,1.908,35,2.536,40,1.15,41,1.208,51,1.951,68,1.456,70,0.982,82,1.178,88,1.585,89,2.499,90,3.412,98,2.347,99,2.333,111,1.077,120,1.714,122,1.94,126,0.938,133,0.946,147,1.386,148,2.057,155,1.143,157,1.804,170,2.009,174,1.258,179,1.918,194,1.685,197,1.137,199,1.722,211,0.893,213,1.373,220,0.861,228,1.224,232,1.361,234,3.259,251,1.908,261,2.204,276,2.448,289,1.061,292,3.84,293,1.506,301,0.999,309,2.316,310,2.508,312,1.579,314,1.192,315,1.524,334,1.13,347,1.478,351,3.31,363,4.344,371,1.426,375,1.94,376,3.11,388,1.296,408,1.157,411,2.845,413,2.91,414,1.441,416,2.293,417,1.106,420,1.106,424,1.24,429,3.522,439,4.057,440,1.106,448,1.984,471,2.242,473,1.13,484,3.045,491,1.051,493,2.277,496,1.072,497,1.276,499,1.849,512,1.13,520,1.438,522,1.286,524,2.701,527,1.192,531,1.456,532,1.026,536,1.472,537,1.488,557,1.178,564,2.584,570,1.026,573,0.973,575,1.349,585,1.65,587,2.467,589,2.114,590,3.363,606,1.456,614,1.306,622,1.716,642,4.439,649,1.869,664,2.316,681,3.042,700,1.327,701,1.555,702,3.045,709,1.13,712,2.033,730,2.758,734,2.967,760,3.118,795,1.563,829,2.744,837,1.438,843,1.224,847,1.786,848,1.692,907,1.607,974,1.632,1015,1.003,1020,1.984,1075,3.547,1086,0.942,1089,1.94,1090,1.276,1091,1.327,1094,2.129,1116,1.061,1122,1.929,1123,1.412,1124,3.11,1155,1.124,1175,1.426,1195,2.467,1232,1.488,1256,1.456,1290,1.208,1298,3.095,1304,2.448,1305,2.357,1343,1.472,1356,1.585,1357,1.286,1358,1.472,1494,1.924,1512,1.456,1522,1.632,1559,4.131,1567,1.208,1632,1.524,1666,1.585,1808,2.648,1905,1.984,2109,3.248,2111,1.607,2133,1.658,2183,3.8,2245,1.607,2294,1.607,2372,1.524,2622,1.686,2788,1.632,2798,3.002,2865,1.686,2916,3.737,2917,1.786,2918,1.786,2919,2.758,2920,2.149,2921,1.984,2922,2.149,2923,2.149,2924,2.149,2927,1.924,2928,2.149,2929,1.786,2972,1.543,3161,3.301,3165,1.924,3190,5.495,3846,2.271,3847,2.271,3848,1.826,3849,2.057]],["component/92",[6,0.35]],["keyword/92",[]],["title/93",[848,34.474]],["name/93",[731,2.075]],["text/93",[]],["component/93",[6,0.35]],["keyword/93",[]],["title/94-1",[1086,26.387,1445,37.801]],["name/94-1",[]],["text/94-1",[]],["component/94-1",[]],["keyword/94-1",[]],["title/94-2",[524,14.831,702,21.666,837,19.576]],["name/94-2",[]],["text/94-2",[]],["component/94-2",[]],["keyword/94-2",[]],["title/94-3",[2109,50.377]],["name/94-3",[]],["text/94-3",[]],["component/94-3",[]],["keyword/94-3",[]],["title/94-4",[524,14.831,712,27.689,2812,37.033]],["name/94-4",[]],["text/94-4",[]],["component/94-4",[]],["keyword/94-4",[]],["title/94-5",[701,31.679]],["name/94-5",[]],["text/94-5",[]],["component/94-5",[]],["keyword/94-5",[]],["title/94-6",[524,17.779,879,55.594]],["name/94-6",[]],["text/94-6",[]],["component/94-6",[]],["keyword/94-6",[]],["title/94-7",[412,27.741,501,28.235]],["name/94-7",[]],["text/94-7",[]],["component/94-7",[]],["keyword/94-7",[]],["title/94-8",[6,13.384,524,17.779]],["name/94-8",[]],["text/94-8",[]],["component/94-8",[]],["keyword/94-8",[]],["title/94",[524,22.19]],["name/94",[524,0.738]],["text/94",[6,1.326,9,2.2,20,1.484,23,1.046,24,0.599,32,3.09,34,3.086,35,2.346,38,0.668,40,0.752,41,0.79,50,1.154,51,1.341,70,0.642,74,0.761,81,0.592,82,0.77,89,0.952,98,1.679,99,2.569,101,0.841,119,0.668,120,0.653,122,1.334,125,1.195,126,1.107,133,1.525,140,1.823,146,0.727,147,0.906,153,1.39,154,0.756,157,1.24,160,1.635,164,3.449,168,1.557,174,0.822,179,0.731,185,0.723,188,1.265,194,1.583,197,0.743,198,0.743,199,0.656,205,0.595,210,1.271,211,0.584,215,1.067,223,1.72,229,0.906,234,1.746,239,0.647,243,0.942,251,0.553,255,0.747,269,0.588,285,1.87,288,1.305,289,0.694,292,0.835,300,1.2,301,1.179,303,1.897,307,0.973,310,1.513,311,1.407,312,0.602,315,0.996,324,1.349,347,1.389,351,2.119,363,1.154,372,2.256,374,0.785,377,1.038,383,1.687,392,1.134,395,0.719,404,1.39,411,3.186,412,2.26,413,3.603,418,0.847,424,0.811,429,1.414,437,0.817,438,1.312,439,1.472,443,1.194,445,1.291,449,1.444,450,0.723,454,1.094,457,1.345,458,1.067,471,1.964,477,1.989,479,1.454,484,0.606,491,0.687,492,1.169,493,0.868,496,1.729,497,0.835,499,0.704,501,2.798,503,0.704,516,1.067,519,1.073,520,0.989,521,0.571,523,0.611,524,3.447,525,2.957,527,1.923,532,0.671,538,0.984,539,1.845,556,2.123,557,0.77,559,1.345,565,1.265,570,0.671,573,3.225,574,0.996,584,1.228,585,2.194,587,0.715,604,0.569,609,1.278,617,1.022,619,2.106,632,1.729,641,0.898,642,1.611,649,1.892,653,1.405,654,1.897,666,1.398,667,1.144,670,0.752,671,0.623,676,1.911,686,1.663,687,0.847,690,0.933,691,0.756,692,1.755,694,0.805,698,0.89,699,0.89,700,1.566,701,3.002,702,3.699,712,4.094,714,0.841,733,1.271,734,0.861,736,0.805,760,0.621,765,0.752,780,0.875,784,1.144,794,0.811,798,1.102,801,0.996,802,2.449,806,1.718,814,1.102,837,2.325,843,0.8,848,1.947,852,0.795,879,1.298,887,1.398,911,1.194,927,1.695,928,1.956,939,1.258,975,1.022,981,1.62,992,0.835,1015,0.656,1031,0.756,1035,1.345,1075,1.566,1077,0.565,1079,0.752,1086,3.834,1088,1.464,1089,0.739,1090,2.058,1094,1.464,1096,1.022,1098,0.882,1099,1.683,1113,0.882,1118,0.984,1132,0.723,1134,2.83,1140,1.989,1146,1.144,1150,2.821,1155,3.546,1157,0.731,1166,2.592,1175,0.933,1176,1.87,1194,1.506,1195,1.291,1209,0.89,1220,0.962,1226,0.882,1234,0.984,1240,0.952,1242,1.96,1244,0.952,1247,0.79,1253,0.841,1258,2.846,1266,1.777,1306,1.956,1314,1.084,1316,0.942,1318,0.984,1394,0.923,1445,0.882,1454,1.144,1463,0.817,1466,4.245,1512,0.952,1515,1.194,1561,1.194,1583,1.009,1587,2,1618,2.107,1627,0.984,1634,1.224,1636,0.817,1637,1.067,1662,1.102,1666,1.87,1687,1.102,1787,1.553,1808,1.009,1848,1.102,1868,1.067,1889,1.298,1928,1.667,1960,1.036,2008,1.298,2055,1.224,2057,1.102,2109,2.324,2112,1.122,2196,1.122,2482,0.882,2489,1.345,2632,1.022,2643,1.925,2647,1.224,2788,1.925,2812,1.036,2838,1.167,2865,3.847,2930,1.405,2931,1.405,2932,1.405,2933,1.405,2934,1.194,2935,1.167,2936,2.27,2938,1.405,2939,1.405,2940,1.405,2941,1.405,2942,1.405,2951,1.485,3832,1.298,3850,1.607,3851,1.607]],["component/94",[6,0.35]],["keyword/94",[]],["title/95-1",[392,26.93,671,26.709]],["name/95-1",[]],["text/95-1",[]],["component/95-1",[]],["keyword/95-1",[]],["title/95-2",[521,24.467,2953,53.891]],["name/95-2",[]],["text/95-2",[]],["component/95-2",[]],["keyword/95-2",[]],["title/95",[356,31.147,548,39.956]],["name/95",[356,1.292]],["text/95",[6,0.628,9,2.749,20,1.653,35,3.298,50,1.285,57,4.907,73,2.003,81,4.127,82,1.548,90,6.042,111,2.326,170,1.538,186,3.588,198,1.494,211,1.927,239,2.138,269,2.471,289,1.395,312,1.209,347,1.859,356,4.201,377,2.417,392,2.076,407,3.007,411,0.931,413,2.966,417,1.453,450,1.453,463,3.236,471,2.147,476,2.299,484,1.219,489,2.819,520,1.809,521,3.771,532,1.349,548,1.874,568,1.503,585,2.076,642,1.313,649,2.279,670,1.511,671,2.059,672,3.708,686,2.227,702,2.002,725,3.256,751,2.782,810,3.702,837,1.809,840,1.703,848,1.296,927,1.381,931,1.494,1077,1.136,1086,3.76,1126,2.931,1133,2.46,1134,4.687,
11135,2.528,1176,3.422,1216,3.709,1241,2.992,1290,2.607,1294,3.64,1375,1.979,1463,4.39,1473,2.939,1488,1.874,1500,4.563,1647,2.145,1658,3.774,1769,5.423,1967,2.255,1988,7.837,2257,2.347,2260,6.418,2287,6.9,2294,2.113,2301,2.255,2325,5.453,2632,2.055,2644,3.471,2646,2.145,2849,1.716,2854,8.214,2953,6.121,2954,4.64,2955,3.705,2958,2.824,2960,7.498,2961,2.608,2962,2.608,2963,8.214,2964,2.824,2966,4.285,2968,4.64,2969,4.442,2970,6.547,2981,2.824,2982,2.824,2983,2.824,2984,2.824,2985,2.824,2986,2.824,2987,2.824,3852,2.985,3853,2.985,3854,2.985,3855,2.985,3856,2.985]],["component/95",[6,0.35]],["keyword/95",[]],["title/96-1",[1093,50.022,1898,45.711]],["name/96-1",[]],["text/96-1",[]],["component/96-1",[]],["keyword/96-1",[]],["title/96-2",[1093,41.728,1390,37.564,1898,38.131]],["name/96-2",[]],["text/96-2",[]],["component/96-2",[]],["keyword/96-2",[]],["title/96",[6,13.384,383,29.303]],["name/96",[383,1.216]],["text/96",[4,1.473,6,2.248,9,1.357,32,1.192,35,2.311,68,2.287,70,1.542,74,1.827,85,2.804,86,5.196,87,3.567,92,2.311,101,2.02,109,2.524,111,1.692,128,4.133,143,2.647,144,4.713,146,1.746,147,2.176,151,2.804,152,2.804,163,2.311,168,2.407,170,3.629,172,2.197,173,2.673,221,1.667,239,1.555,251,2.624,261,2.437,262,2.365,269,1.412,286,2.787,292,2.004,301,2.491,312,1.445,327,3.256,334,1.775,347,2.147,350,1.99,351,1.004,356,3.447,366,1.651,375,1.775,377,1.382,383,5.186,392,2.397,404,1.849,408,2.884,411,1.112,413,1.957,429,2.185,436,2.603,437,1.962,438,1.746,454,1.456,456,2.393,459,3.308,475,3.231,479,1.935,492,3.07,499,1.692,501,1.583,503,1.692,519,1.428,524,1.582,527,1.872,532,1.612,539,2.455,548,3.556,557,1.849,581,2.365,583,2.263,585,1.51,589,1.935,600,3.898,631,3.592,633,4.422,634,4.258,649,1.302,686,1.62,714,3.206,719,4.948,729,2.524,744,2.695,749,1.948,771,3.117,778,2.603,790,4.297,794,1.948,802,1.948,837,1.316,1077,2.679,1079,1.806,1084,2.119,1090,3.182,1093,2.804,1099,2.24,1103,2.747,1130,2.939,1131,4.008,1198,2.365,1223,3.336,1290,1.897,1377,3.592,1379,3.021,1615,2.603,1706,3.117,1890,3.375,1986,7.642,1987,7.408,2159,3.231,2204,2.365,2276,4.847,2464,2.868,2521,3.231,2849,2.051,2934,4.553,2956,3.375,2988,8.019,2989,8.019,2990,3.567,2991,6.379,2992,3.021,2993,3.231,2994,3.567,2995,3.567,2996,3.567,2997,3.567,2998,3.567,2999,5.663,3000,3.567,3311,4.666,3857,3.375,3858,3.859,3859,3.859,3860,3.859,3861,3.859]],["component/96",[6,0.35]],["keyword/96",[]],["title/97-1",[2787,57.961]],["name/97-1",[]],["text/97-1",[]],["component/97-1",[]],["keyword/97-1",[]],["title/97-2",[35,22.889]],["name/97-2",[]],["text/97-2",[]],["component/97-2",[]],["keyword/97-2",[]],["title/97-3",[35,22.889]],["name/97-3",[]],["text/97-3",[]],["component/97-3",[]],["keyword/97-3",[]],["title/97-4",[3001,61.159]],["name/97-4",[]],["text/97-4",[]],["component/97-4",[]],["keyword/97-4",[]],["title/97-5",[503,30.183,1194,35.755]],["name/97-5",[]],["text/97-5",[]],["component/97-5",[]],["keyword/97-5",[]],["title/97",[363,22.844,1304,33.33,1305,32.091]],["name/97",[363,0.454,1304,0.663,1305,0.638]],["text/97",[9,2.393,27,3.063,32,2.883,35,2.487,40,3.184,78,3.769,119,2.83,120,2.767,140,3.13,153,3.261,194,2.719,251,3.215,301,2.767,351,3.368,363,4.936,365,3.838,411,2.69,417,4.201,420,5.159,440,3.063,456,4.22,487,4.752,491,2.911,499,4.093,520,3.632,556,3.645,576,3.645,584,3.954,589,3.412,590,4.778,604,2.41,649,2.297,672,3.737,700,3.675,709,4.294,751,2.804,837,2.32,924,5.313,1199,5.378,1238,4.668,1304,5.418,1305,5.216,1359,4.945,1624,5.183,2009,5.951,2612,4.389,3002,5.951,3003,6.291,3848,5.057]],["component/97",[6,0.35]],["keyword/97",[]],["title/98-1",[1129,58.94]],["name/98-1",[]],["text/98-1",[]],["component/98-1",[]],["keyword/98-1",[]],["title/98-2",[743,31.845,1216,27.503]],["name/98-2",[]],["text/98-2",[]],["component/98-2",[]],["keyword/98-2",[]],["title/98-3",[366,29.444,639,35.494]],["name/98-3",[]],["text/98-3",[]],["component/98-3",[]],["keyword/98-3",[]],["title/98-4",[159,42.783]],["name/98-4",[]],["text/98-4",[]],["component/98-4",[]],["keyword/98-4",[]],["title/98-5",[649,23.232,887,33.193]],["name/98-5",[]],["text/98-5",[]],["component/98-5",[]],["keyword/98-5",[]],["title/98-6",[639,35.494,3004,57.64]],["name/98-6",[]],["text/98-6",[]],["component/98-6",[]],["keyword/98-6",[]],["title/98-7",[1375,42.181,2839,53.891]],["name/98-7",[]],["text/98-7",[]],["component/98-7",[]],["keyword/98-7",[]],["title/98-8",[521,17.507,743,22.786,1375,30.182,3005,41.244]],["name/98-8",[]],["text/98-8",[]],["component/98-8",[]],["keyword/98-8",[]],["title/98-9",[411,14.193,1086,18.881,1129,33.791,3006,45.532]],["name/98-9",[]],["text/98-9",[]],["component/98-9",[]],["keyword/98-9",[]],["title/98-10",[519,21.253,1416,44.955,1417,44.955]],["name/98-10",[]],["text/98-10",[]],["component/98-10",[]],["keyword/98-10",[]],["title/98-11",[633,39.956,634,38.47]],["name/98-11",[]],["text/98-11",[]],["component/98-11",[]],["keyword/98-11",[]],["title/98",[366,36.749]],["name/98",[366,1.222]],["text/98",[4,0.593,6,1.792,9,1.355,19,0.789,20,0.795,23,1.705,24,1.437,27,2.464,32,0.48,35,2.848,38,1.602,42,1.3,50,0.618,51,0.718,62,1.001,70,1.889,74,0.735,81,1.421,88,1.001,90,2.456,98,0.658,99,0.49,109,3.093,111,0.681,121,1.346,122,0.714,125,0.64,126,1.074,127,0.839,133,1.082,140,1.772,144,1.316,146,0.703,153,0.744,156,1.016,157,2.023,159,2.726,160,0.876,162,1.684,170,1.835,172,0.884,173,1.227,185,1.734,190,0.801,193,0.963,198,0.718,199,1.148,204,0.853,214,0.825,220,0.544,221,1.215,224,0.988,234,0.684,239,1.906,246,0.846,255,0.722,256,1.419,259,0.876,261,2.658,268,0.846,275,1.339,282,1.128,286,0.706,289,2.042,292,0.807,301,0.631,304,0.93,305,3.093,306,0.795,311,0.753,314,0.753,318,0.884,323,0.941,326,0.807,327,0.825,328,1.945,334,0.714,336,0.975,343,0.893,344,0.813,356,0.703,366,5.233,375,1.293,377,0.556,379,1.048,383,2.331,392,1.1,395,0.695,404,1.847,406,2.745,407,2.438,410,2.309,411,2.655,413,2.668,416,2.765,417,1.265,420,2.128,430,0.819,439,0.577,440,0.699,445,1.252,450,0.699,451,
10.901,454,0.586,459,0.839,463,2.624,466,0.846,471,0.629,490,1.601,491,0.664,492,0.626,493,1.518,494,0.911,496,0.677,497,0.807,499,0.681,501,0.637,503,1.689,506,1.666,507,0.868,508,1.016,509,0.789,512,0.714,514,1.031,519,1.75,521,3.081,522,0.813,523,1.069,526,1.016,532,1.175,536,0.93,539,1.789,544,1.065,545,1.001,555,1.084,557,0.744,562,1.154,565,1.227,568,0.722,585,0.607,587,1.716,591,1.016,592,1.001,595,0.952,596,1.766,600,0.988,609,0.684,612,0.893,613,1.929,619,0.674,622,1.084,633,1.632,634,0.868,637,1.518,639,3.699,642,1.922,649,3.334,659,0.952,664,3.939,666,0.749,676,0.749,682,2.667,683,1.048,691,0.731,702,2.309,713,0.93,718,3.366,724,1.571,726,0.846,741,0.758,743,3.319,749,0.784,751,1.159,772,1.723,778,1.048,782,2.116,786,0.846,789,2.098,794,1.419,806,0.92,808,0.975,822,0.714,829,1.975,837,2.728,878,0.941,887,1.858,912,1.839,927,0.664,931,2.187,934,1.154,963,1.666,994,1.183,1019,0.807,1031,0.731,1043,1.084,1075,1.518,1077,2.152,1083,1.084,1085,0.941,1086,1.078,1090,0.807,1091,2.554,1094,1.945,1106,0.952,1113,1.544,1120,1.031,1122,3.056,1129,5.946,1130,2.142,1134,2.387,1151,0.832,1157,0.706,1160,1.016,1162,0.941,1170,0.839,1176,1.001,1194,1.461,1198,0.952,1209,0.86,1215,1.429,1216,3.337,1242,0.768,1247,0.763,1260,2.28,1294,1.929,1298,0.868,1299,1.065,1309,0.789,1315,1.601,1338,1.154,1343,1.684,1349,2.09,1364,1.031,1375,2.361,1416,4.286,1417,1.216,1437,0.963,1439,3.049,1463,0.789,1497,0.853,1499,1.031,1512,0.92,1522,2.559,1562,0.963,1576,1.684,1578,1.254,1589,1.544,1621,1.906,1626,0.941,1658,0.868,1666,1.813,1715,1.084,1722,2.864,1754,1.105,1783,1.001,1983,1.084,2088,1.001,2111,1.016,2253,1.048,2332,1.964,2372,0.963,2500,1.048,2642,3.016,2672,1.154,2741,2.271,2819,1.254,2820,1.3,2821,1.3,2822,1.3,2839,4.286,2840,6.602,2863,1.254,2869,7.977,2874,1.065,2893,2.09,2919,1.016,2974,1.358,2993,3.226,3004,2.354,3005,3.226,3007,1.358,3008,1.358,3009,1.435,3010,1.435,3011,1.435,3012,1.435,3013,1.3,3014,1.435,3015,1.435,3016,2.599,3017,1.435,3018,1.435,3019,1.435,3020,1.435,3021,1.435,3022,1.435,3023,1.435,3024,1.358,3025,1.435,3026,1.435,3027,1.435,3028,2.599,3029,1.435,3030,1.435,3031,3.562,3032,1.154,3033,1.435,3034,1.216,3035,1.435,3036,1.435,3037,1.435,3038,1.435,3039,1.435,3040,1.435,3041,1.435,3042,1.435,3043,1.435,3044,1.435,3045,1.435,3046,1.435,3047,1.435,3048,1.435,3049,1.435,3050,1.435,3051,1.435,3052,1.435,3053,1.435,3054,2.599,3055,1.435]],["component/98",[6,0.35]],["keyword/98",[]],["title/99-1",[2787,57.961]],["name/99-1",[]],["text/99-1",[]],["component/99-1",[]],["keyword/99-1",[]],["title/99-2",[35,22.889]],["name/99-2",[]],["text/99-2",[]],["component/99-2",[]],["keyword/99-2",[]],["title/99-3",[35,22.889]],["name/99-3",[]],["text/99-3",[]],["component/99-3",[]],["keyword/99-3",[]],["title/99-4",[3001,61.159]],["name/99-4",[]],["text/99-4",[]],["component/99-4",[]],["keyword/99-4",[]],["title/99-5",[503,30.183,1194,35.755]],["name/99-5",[]],["text/99-5",[]],["component/99-5",[]],["keyword/99-5",[]],["title/99-6",[848,34.474]],["name/99-6",[]],["text/99-6",[]],["component/99-6",[]],["keyword/99-6",[]],["title/99",[363,22.844,411,16.546,590,29.396]],["name/99",[363,0.454,411,0.329,590,0.585]],["text/99",[6,1.957,32,2.352,35,3.197,120,3.095,127,4.111,146,3.445,251,2.622,305,4.98,312,2.85,351,3.337,361,5.532,363,4.965,365,4.294,401,4.611,411,2.901,420,3.426,423,5.42,440,3.426,499,4.414,520,3.845,521,3.578,584,3.225,589,5.047,590,5.774,604,2.696,619,3.305,626,5.223,709,4.631,733,3.338,734,4.078,1199,3.843,1201,4.511,1586,4.078,1918,5.056,1950,6.149,2768,5.799,3056,6.658]],["component/99",[6,0.35]],["keyword/99",[]],["title/100-1",[689,53.952]],["name/100-1",[]],["text/100-1",[]],["component/100-1",[]],["keyword/100-1",[]],["title/100-2",[173,37.482]],["name/100-2",[]],["text/100-2",[]],["component/100-2",[]],["keyword/100-2",[]],["title/100-3",[2336,62.432]],["name/100-3",[]],["text/100-3",[]],["component/100-3",[]],["keyword/100-3",[]],["title/100-4",[3059,67.261]],["name/100-4",[]],["text/100-4",[]],["component/100-4",[]],["keyword/100-4",[]],["title/100-5",[3062,67.261]],["name/100-5",[]],["text/100-5",[]],["component/100-5",[]],["keyword/100-5",[]],["title/100-6",[3862,71.94]],["name/100-6",[]],["text/100-6",[]],["component/100-6",[]],["keyword/100-6",[]],["title/100-7",[372,39.186,521,24.467]],["name/100-7",[]],["text/100-7",[]],["component/100-7",[]],["keyword/100-7",[]],["title/100",[539,43.794,634,38.47]],["name/100",[634,0.912,3265,1.278]],["text/100",[0,1.698,1,1.903,4,1.094,23,2.237,24,1.792,32,1.916,35,2.701,38,1.191,40,1.341,44,2.04,69,1.318,70,2.478,90,1.488,93,2.04,98,2.035,119,1.191,120,3.288,133,1.103,140,1.318,144,1.341,146,1.296,147,1.616,157,2.055,185,1.289,186,1.523,194,1.919,199,1.17,202,1.735,211,1.745,218,2.661,220,1.004,223,1.244,228,1.427,241,2.661,244,1.616,248,3.57,251,2.5,255,2.886,256,1.446,269,1.049,288,1.289,289,1.238,291,3.355,303,1.874,311,1.39,312,1.073,317,2.082,323,1.735,336,1.799,348,1.966,366,1.226,372,4.603,374,1.399,376,2.274,377,1.026,383,1.22,387,2.533,404,3.875,407,1.276,410,1.208,413,2.97,416,1.186,417,3.267,420,1.289,429,2.885,439,1.064,440,1.289,442,1.777,445,2.139,454,1.081,463,1.373,472,1.903,473,1.318,474,2.001,490,2.735,492,1.155,496,1.25,497,1.488,503,1.256,521,2.874,522,2.514,523,1.09,527,1.39,531,1.698,534,2.243,536,1.716,545,1.848,563,1.933,565,2.706,567,2.399,568,4.071,573,1.903,583,1.68,584,1.214,588,1.663,595,1.756,600,1.823,634,6.865,642,1.953,647,1.467,649,0.967,658,2.649,676,1.382,692,2.748,693,1.573,702,1.812,703,2.392,709,1.318,717,1.68,718,2.04,724,1.601,735,2.182,743,2.222,772,1.756,780,1.56,794,1.446,822,1.318,829,2.007,837,3.57,843,1.427,887,1.382,912,1.874,931,3.741,1075,1.547,1077,2.553,1094,1.446,1110,1.39,1142,3.295,1162,2.91,1206,1.933,1216,1.145,1223,1.56,1227,1.933,1242,1.417,1247,1.408,1257,2.174,1289,3.355,1296,1.467,1298,2.685,1315,2.735,1316,1.68,1325,2.822,1336,1.933,1343,1.716,1366,1.777,1442,1.716,1473,1.587,1495,1.903,1512,3.675,1558,2.129,1562,1.777,1567,1.408,1589,2.638,1628,3.895,1715,2.001,1938,2.91,1977,1.698,1995,3.659,2005,2.399,2021,2.314,2059,1.647,2069,2.314,2268,2.001,2291,2.129,2329,1.823,2332,2.001,2336,5.275,2348,2.506,2368,2.04,2658,3.142,2684,2.04,2697,2.182,2711,2.243,2786,2.3
114,2850,2.243,2893,2.129,2921,2.314,3059,5.683,3062,3.761,3213,2.314,3265,2.243,3305,2.182,3827,2.506,3828,2.506,3829,4.022,3830,4.201,3857,2.506,3862,5.194,3863,2.649,3864,5.734,3865,2.649,3866,2.649,3867,2.649,3868,2.506,3869,2.649,3870,2.649,3871,2.649,3872,2.649,3873,4.441,3874,2.649,3875,2.649,3876,2.649,3877,2.649,3878,2.649,3879,4.441,3880,2.649,3881,2.649,3882,2.649,3883,2.649]],["component/100",[6,0.35]],["keyword/100",[]],["title/101-1",[377,20.557,484,21.666,634,32.091]],["name/101-1",[]],["text/101-1",[]],["component/101-1",[]],["keyword/101-1",[]],["title/101-2",[1100,48.453]],["name/101-2",[]],["text/101-2",[]],["component/101-2",[]],["keyword/101-2",[]],["title/101-3",[375,31.666,634,38.47]],["name/101-3",[]],["text/101-3",[]],["component/101-3",[]],["keyword/101-3",[]],["title/101-4",[425,58.94]],["name/101-4",[]],["text/101-4",[]],["component/101-4",[]],["keyword/101-4",[]],["title/101",[634,48.014]],["name/101",[634,1.596]],["text/101",[1,2.457,6,2.098,9,2.979,32,3.207,35,2.634,38,1.538,70,2.96,99,1.168,120,3.767,126,1.413,133,1.424,154,1.742,159,1.842,164,1.567,168,2.327,173,2.585,186,1.966,194,1.478,211,1.344,235,2.988,256,1.868,269,2.168,289,1.598,300,1.531,311,1.795,312,1.385,326,1.922,327,4.501,328,1.868,366,2.534,371,2.148,375,2.725,376,3.508,377,3.317,379,2.496,383,2.522,388,1.951,392,1.447,407,3.299,409,2.087,410,2.498,413,1.893,417,2.666,420,1.665,429,2.643,438,1.674,449,1.842,456,3.674,459,3.199,471,2.398,501,2.43,503,1.622,520,1.261,521,2.106,524,1.914,533,2.75,539,4.714,545,2.386,550,2.818,557,1.773,563,2.496,568,4.831,573,2.347,576,1.982,585,1.447,587,2.638,595,4.54,633,4.3,634,6.83,637,1.998,659,2.267,666,2.857,695,2.689,697,2.241,712,1.784,718,2.634,719,2.988,742,3.352,778,5.714,783,1.922,808,2.323,837,2.526,912,2.42,964,4.512,1022,2.988,1089,2.725,1095,2.818,1100,2.087,1117,1.894,1126,2.572,1131,2.42,1171,2.584,1172,5.506,1270,2.988,1323,2.538,1341,2.087,1343,2.216,1512,3.51,1543,3.098,1558,2.75,1589,2.032,1621,2.931,1630,2.988,1893,2.689,1995,2.818,2059,2.126,2268,2.584,2336,6.734,2395,7.093,2658,2.42,2882,2.897,2904,3.821,2935,5.384,3057,3.42,3059,5.8,3060,3.236,3061,3.42,3062,4.638,3063,3.42,3064,3.42,3072,3.42,3073,3.42,3074,3.42,3075,3.42,3076,3.42,3077,3.42,3078,3.42,3079,3.42,3080,3.42,3081,3.42,3265,4.638,3829,3.098,3884,3.7,3885,3.7]],["component/101",[6,0.35]],["keyword/101",[]],["title/102-1",[584,29.163,604,24.38]],["name/102-1",[]],["text/102-1",[]],["component/102-1",[]],["keyword/102-1",[]],["title/102-2",[520,23.467,604,24.38]],["name/102-2",[]],["text/102-2",[]],["component/102-2",[]],["keyword/102-2",[]],["title/102-3",[604,24.38,760,26.601]],["name/102-3",[]],["text/102-3",[]],["component/102-3",[]],["keyword/102-3",[]],["title/102-4",[151,50.022,239,27.741]],["name/102-4",[]],["text/102-4",[]],["component/102-4",[]],["keyword/102-4",[]],["title/102-5",[491,29.444,604,24.38]],["name/102-5",[]],["text/102-5",[]],["component/102-5",[]],["keyword/102-5",[]],["title/102",[604,30.428]],["name/102",[604,1.012]],["text/102",[4,1.508,6,1.373,9,2.483,24,1.473,27,2.354,29,1.849,32,3.596,35,2.213,38,1.643,41,1.12,50,0.906,68,1.35,69,2.871,74,1.079,77,1.297,84,2.548,92,1.365,98,0.965,122,1.048,124,1.127,127,2.133,133,0.877,138,1.23,143,4.843,149,1.449,151,1.656,168,0.895,173,0.994,199,0.93,205,0.843,211,1.435,225,1.784,231,1.251,239,0.918,243,1.336,261,2.483,275,1.085,277,1.396,288,1.025,289,0.984,292,1.183,301,0.926,310,0.87,312,0.853,324,1.06,343,3.587,344,4.346,347,1.833,351,2.014,355,1.113,357,1.322,360,1.591,363,2.809,375,2.871,377,1.414,395,1.02,408,1.072,411,3.07,412,2.108,413,1.262,429,2.518,439,0.846,444,1.693,445,1.759,454,0.86,471,1.599,473,1.048,484,2.919,489,1.211,491,1.69,492,1.592,496,2.723,519,1.462,520,2.638,521,1.404,522,1.192,523,0.866,524,2.472,565,3.375,570,1.65,582,1.262,584,4.513,585,2.442,587,1.015,603,1.413,604,4.243,609,1.741,613,1.563,619,2.27,649,3.107,669,1.735,671,2.029,672,1.251,673,4.754,702,1.491,726,1.241,740,1.449,751,0.939,760,3.822,765,1.066,780,3.399,781,1.724,823,1.273,829,2.607,837,2.407,852,1.127,887,1.099,907,1.49,922,1.201,931,1.054,1011,1.201,1015,3.391,1045,1.513,1057,1.079,1077,1.839,1094,1.15,1101,1.49,1115,3.285,1116,4.395,1122,1.042,1126,0.989,1151,2.116,1157,1.037,1162,1.38,1206,1.537,1215,2.659,1216,2.821,1231,1.622,1236,3.244,1253,1.192,1255,2.71,1257,4.718,1258,5.237,1260,3.01,1266,2.421,1282,1.413,1298,3.488,1325,1.797,
11337,1.35,1345,3.191,1347,1.591,1350,2.665,1357,1.192,1495,1.513,1502,1.449,1522,1.513,1572,1.563,1576,3.133,1606,1.656,1636,2.659,1671,1.469,1696,1.537,1850,3.529,2243,1.513,2400,1.622,2401,1.622,2402,1.622,2605,1.656,2622,4.282,2803,1.622,2810,1.784,2945,1.591,3083,1.993,3084,1.993,3085,3.455,3086,1.993,3087,1.993,3088,3.455,3089,3.455,3090,1.993,3091,1.84,3092,1.993,3093,1.993,3094,1.993,3095,1.993,3096,1.993,3100,1.908,3101,1.908,3102,1.993,3104,3.455,3105,1.84]],["component/102",[6,0.35]],["keyword/102",[]],["title/103-1",[2787,57.961]],["name/103-1",[]],["text/103-1",[]],["component/103-1",[]],["keyword/103-1",[]],["title/103-2",[35,22.889]],["name/103-2",[]],["text/103-2",[]],["component/103-2",[]],["keyword/103-2",[]],["title/103-3",[35,22.889]],["name/103-3",[]],["text/103-3",[]],["component/103-3",[]],["keyword/103-3",[]],["title/103-4",[3001,61.159]],["name/103-4",[]],["text/103-4",[]],["component/103-4",[]],["keyword/103-4",[]],["title/103-5",[503,30.183,1194,35.755]],["name/103-5",[]],["text/103-5",[]],["component/103-5",[]],["keyword/103-5",[]],["title/103-6",[848,34.474]],["name/103-6",[]],["text/103-6",[]],["component/103-6",[]],["keyword/103-6",[]],["title/103",[363,22.844,589,28.788,590,29.396]],["name/103",[363,0.454,589,0.573,590,0.585]],["text/103",[6,1.394,9,3.4,35,2.915,84,4.622,120,3.931,139,3.022,153,4.634,193,4.445,251,2.469,255,3.335,301,2.914,305,4.689,351,3.183,363,4.66,365,4.042,383,3.051,395,4.329,411,2.786,417,4.352,420,4.352,428,4.392,438,3.243,499,4.24,519,2.653,520,3.73,536,4.293,584,3.036,589,4.848,590,5.602,604,2.538,649,2.419,741,3.5,751,2.953,837,2.443,924,4.08,1199,3.618,1201,4.247,1918,4.759,3106,6.268,3107,5.788,3108,6.268,3109,4.835,3110,4.835,3111,6.002,3112,6.268,3113,6.268,3114,6.268,3848,5.326]],["component/103",[6,0.35]],["keyword/103",[]],["title/104",[32,21.264,411,19.835]],["name/104",[32,0.504,411,0.47]],["text/104",[6,1.052,9,1.903,23,2.476,24,1.234,32,4.027,35,2.114,41,1.626,69,1.522,70,1.322,73,2.052,81,1.22,111,2.373,119,2.25,126,2.066,144,1.548,146,2.449,150,2.52,153,1.586,160,1.866,173,1.444,185,1.489,199,2.21,220,1.16,255,1.539,257,2.028,269,2.513,289,1.429,300,2.24,301,1.345,310,2.066,318,1.884,324,1.539,344,1.732,347,3.066,374,1.616,376,1.567,377,1.938,395,2.423,411,3.173,413,1.057,418,1.745,429,1.18,439,1.229,450,1.489,462,1.849,484,2.591,490,1.884,491,2.937,492,2.181,496,1.444,511,2.052,519,2.003,520,2.341,521,1.176,523,1.258,524,2.26,531,1.961,565,1.444,568,1.539,573,1.311,576,1.772,584,3.361,587,1.473,604,2.432,619,1.436,632,1.444,642,2.792,649,2.678,654,2.165,668,2.197,692,1.466,733,1.451,742,4.68,760,3.629,780,1.802,781,2.996,789,1.802,791,1.505,802,1.67,823,1.849,837,1.128,840,1.745,843,2.695,848,1.328,852,4.328,883,3.594,927,1.415,931,1.531,1015,3.24,1057,1.567,1075,1.787,1077,3.303,1086,2.075,1088,1.67,1089,1.522,1115,1.539,1116,2.338,1126,4.49,1132,1.489,1156,1.758,1206,3.651,1215,2.751,1216,4.751,1257,2.449,1258,1.505,1267,3.986,1347,2.311,1350,2.232,1364,2.197,1456,4.56,1463,1.682,1497,1.817,1500,2.66,1636,2.751,1647,2.197,1650,1.758,1665,2.923,1769,2.078,1778,5.116,1892,2.105,1943,2.59,1988,2.165,2254,2.771,2257,2.404,2389,2.404,2482,1.817,2849,1.758,2874,2.27,2945,2.311,3115,2.894,3117,2.894,3118,2.771,3119,2.894,3120,2.894,3121,2.894,3305,2.52,3886,9.009,3887,3.059]],["component/104",[6,0.35]],["keyword/104",[]],["title/105-1",[34,25.983,794,28.986,1132,25.843]],["name/105-1",[]],["text/105-1",[]],["component/105-1",[]],["keyword/105-1",[]],["title/105-2",[413,27.449]],["name/105-2",[]],["text/105-2",[]],["component/105-2",[]],["keyword/105-2",[]],["title/105",[99,21.722,760,26.601]],["name/105",[99,0.515,760,0.631]],["text/105",[6,1.003,34,4.886,35,1.375,51,2.388,99,3.407,144,4.275,157,3.277,168,2.027,170,2.458,228,2.57,229,2.911,234,2.275,239,3.087,261,3.634,307,3.126,326,2.681,376,6.081,387,2.722,411,1.487,412,3.087,413,3.229,424,2.605,438,2.335,484,3.814,521,2.723,524,1.333,642,3.114,649,1.742,660,2.834,664,5.551,668,3.427,692,2.286,745,3.163,760,3.906,765,3.585,801,3.201,829,2.156,837,2.612,840,2.722,843,2.57,848,2.071,878,3.126,945,3.482,963,6.398,1015,2.108,1019,2.681,1045,3.427,1079,2.415,1090,3.979,1112,3.026,1132,2.323,1165,3.241,1166,3.376,1175,2.996,12
115,2.623,1216,2.062,1236,5.665,1247,2.536,1254,3.026,1267,2.996,1420,3.674,1490,2.859,1495,3.427,1621,4.519,1669,8.035,1670,8.454,1671,3.328,1783,3.328,2196,3.604,2376,3.541,2392,3.836,2693,3.931,2917,3.75,2918,3.75,2927,4.041,2929,5.567,3145,4.514,3146,4.514,3147,4.041,3148,3.836,3150,4.771]],["component/105",[6,0.35]],["keyword/105",[]],["title/106",[99,21.722,411,19.835]],["name/106",[99,0.515,411,0.47]],["text/106",[0,2.989,4,2.876,6,1.464,20,3.856,23,1.819,32,1.558,35,1.344,70,2.016,99,4.116,111,2.212,120,2.051,156,3.3,157,2.158,159,2.512,164,2.137,234,2.223,239,2.033,301,2.051,310,1.926,347,2.639,392,1.974,395,2.258,411,3.583,413,2.406,429,1.8,445,2.247,451,2.928,454,1.904,484,3.771,492,3.035,496,3.286,519,1.867,524,2.762,544,3.461,545,3.254,556,2.702,573,1.999,574,3.129,582,2.795,619,3.912,632,2.201,649,1.703,701,1.86,702,2.842,742,3.408,758,4.193,760,3.483,781,5.213,837,1.72,843,2.512,852,3.726,1015,3.68,1019,2.621,1077,2.649,1086,3.455,1089,2.321,1126,3.27,1154,2.989,1157,2.295,1183,2.747,1216,3.601,1241,2.845,1244,2.989,1272,4.562,1303,2.845,1307,3.404,1323,3.461,1586,2.702,1636,4.581,1778,4.857,1918,3.35,2204,3.091,2376,3.461,2389,5.473,2680,5.081,2849,2.681,2955,5.26,3141,4.664,3142,4.412,3143,4.664,3144,4.664,3886,3.95]],["component/106",[6,0.35]],["keyword/106",[]],["title/107-1",[1517,48.908]],["name/107-1",[]],["text/107-1",[]],["component/107-1",[]],["keyword/107-1",[]],["title/107-2",[3151,71.94]],["name/107-2",[]],["text/107-2",[]],["component/107-2",[]],["keyword/107-2",[]],["title/107-3",[355,33.614,393,39.563]],["name/107-3",[]],["text/107-3",[]],["component/107-3",[]],["keyword/107-3",[]],["title/107",[2482,37.801,2643,45.711]],["name/107",[2482,1.568]],["text/107",[0,2.151,6,1.134,9,2.572,19,1.845,23,2.638,29,1.699,32,3.183,35,2.445,70,2.331,81,1.338,99,2.308,104,2.842,111,1.592,121,1.268,122,1.67,123,2.224,126,1.386,133,2.815,157,1.553,162,2.174,173,2.545,186,1.929,199,1.482,204,1.993,210,2.558,211,2.119,228,2.905,234,1.6,239,2.351,255,1.689,261,1.444,275,1.729,289,1.568,292,1.886,301,2.372,323,2.199,336,2.28,344,1.9,347,2.045,355,3.572,356,1.643,376,1.719,377,1.3,383,1.545,410,1.531,411,2.645,413,1.864,420,2.626,428,3.575,429,2.609,436,2.449,437,2.966,439,1.349,449,1.808,450,1.634,453,2.375,459,1.96,471,2.361,484,1.37,493,1.96,507,2.029,516,2.411,520,1.238,521,2.074,524,2.995,548,2.107,565,2.545,566,2.842,587,1.617,649,3.098,671,2.264,689,2.28,692,1.608,701,1.338,704,1.9,714,1.9,736,1.82,739,3.887,740,4.654,760,1.403,772,3.575,786,1.977,802,2.945,813,6.413,822,1.67,829,4.095,891,2.765,927,1.553,931,5.115,1015,1.482,1031,1.709,1057,1.719,1075,1.96,1077,2.052,1079,1.699,1120,2.411,1125,2.698,1126,3.637,1131,2.375,1183,1.977,1215,1.845,1216,2.331,1231,4.153,1260,1.75,1286,2.535,1313,2.029,1314,3.936,1437,2.251,1454,2.584,1463,2.966,1517,6.831,1569,2.698,1587,1.832,1621,2.886,1637,3.874,1769,2.28,1780,2.28,1951,2.842,2059,2.086,2185,2.698,2264,3.175,2270,3.175,2295,3.175,2410,2.842,2482,5.658,2605,2.638,2643,3.874,3151,8.208,3152,3.356,3153,3.356,3154,3.356,3155,3.356,3156,5.393,3157,3.356,3158,3.356,3159,3.356,3160,3.356]],["component/107",[6,0.35]],["keyword/107",[]],["title/108-1",[383,36.572]],["name/108-1",[]],["text/108-1",[]],["component/108-1",[]],["keyword/108-1",[]],["title/108-2",[348,38.436,351,14.582,363,13.735,439,12.827,524,8.917]],["name/108-2",[]],["text/108-2",[]],["component/108-2",[]],["keyword/108-2",[]],["title/108-3",[351,17.916,439,25.575]],["name/108-3",[]],["text/108-3",[]],["component/108-3",[]],["keyword/108-3",[]],["title/108-4",[351,17.916,532,28.755]],["name/108-4",[]],["text/108-4",[]],["component/108-4",[]],["keyword/108-4",[]],["title/108-5",[363,27.385,3107,55.594]],["name/108-5",[]],["text/108-5",[]],["component/108-5",[]],["keyword/108-5",[]],["title/108-6",[363,27.385,672,37.801]],["name/108-6",[]],["text/108-6",[]],["component/108-6",[]],["keyword/108-6",[]],["title/108-7",[351,17.916,524,17.779]],["name/108-7",[]],["text/108-7",[]],["component/108-7",[]],["keyword/108-7",[]],["title/108",[351,14.945,848,23.041,1185,30.516]],["name/108",[351,0.297,848,0.458,1185,0.607]],["text/108",[6,1.642,7,0.692,9,2.443,23,3.15,24,1.964,26,1.026,29,1.252,32,2.924,35,2.165,38,1.531,41,1.809,50,1.464,68,0.871,69,0.676,81,1.672,82,0.704,83,0.794,84,0.948,90,0.763,98,1.133,99,0.464,113,0.763,126,1.405,133,1.745,139,0.62,140,1.23,142,1.046,153,2.173,164,1.133,168,0.577,174,0.752,179,1.217,185,1.204,186,0.781,193,0.912,194,1.811,197,0.68,199,1.092,205,1.949,211,1.913,220,0.937,243,0.862,251,1.561,269,0.979,289,1.155,292,0.763,295,0.89,304,0.88,309,2.021,310,0.561,312,1.001,314,0.713,326,0.763,334,0.676,347,2.434,351,3.341,357,1.553,363,3.995,371,0.853,372,0.837,375,2.085,377,0.526,383,1.567,392,0.575,393,0.845,404,0.704,408,1.259,410,0.62,411,2.728,412,0.592,413,2.953,416,1.524,420,0.661,425,1.008,429,2.478,438,0.665,439,3.594,440,1.204,450,0.661,454,1.009,456,0.912,468,0.8,471,1.083,472,2.444,479,0.737,484,1.711,490,0.837,491,2.252,492,1.483,494,0.862,496,1.606,498,1.231,499,3.83,500,0.948,503,1.173,509,1.36,512,1.693,519,1.678,520,3.75,521,0.522,524,1.794,527,0.713,531,0.871,532,4.264,533,1.092,536,0.88,547,1.523,548,1.553,558,1.187,565,1.167,568,1.245,570,1.894,573,1.06,582,0.814,584,1.921,585,0.575,587,1.639,589,1.341,590,2.321,600,1.702,601,0.901,604,2.878,609,1.179,614,0.781,617,0.935,619,1.161,625,0.871,642,1.496,649,2.344,666,0.709,671,2.043,685,1.231,686,0.617,692,0.651,699,1.482,702,1.987,704,0.769,709,0.676,712,0.709,722,2.24,733,0.644,734,0.787,751,0.606,762,0.976,765,0.688,775,1.457,780,1.457,788,2.715,794,0.742,809,0.807,829,1.894,837,2.201,849,0.837,896,1.092,914,1.187,927,0.629,930,0.845,937,2.16,975,0.935,979,1.29,982,1.36,985,1.026,990,1.026,994,1.12,1012,1.12,1026,1.187,1031,1.733,1043,1.026,1057,0.696,1075,1.445,1077,2.858,1078,0.948,1079,0.688,1086,1.025,1089,3.196,1091,1.988,1092,0.961,1094,1.35,1110,0.713,1116,0.635,1122,3.378,1123,3.391,1124,2.793,1160,0.961,1161,0.976,1162,0.89,1175,0.853,1187,0.976,1195,2.875,1199,2.658,1201,1.585,1212,0.901,1213,1.008,1216,0.587,1232,2.23,1234,0.901,1237,0.935,1240,0.871,1249,1.068,1253,0.769,1256,0.871,125
17,2.67,1258,0.669,1260,2.539,1267,0.853,1272,0.89,1282,1.659,1290,2.228,1298,0.821,1299,1.835,1304,1.553,1305,2.534,1310,0.853,1313,0.821,1315,0.837,1318,0.901,1325,1.217,1337,0.871,1342,0.871,1344,0.781,1379,1.151,1380,1.702,1442,0.88,1500,1.809,1501,1.868,1559,0.752,1567,0.722,1583,1.68,1626,0.89,1632,0.912,1650,2.798,1665,1.988,1676,0.992,1724,1.776,1748,1.75,1752,0.89,1760,1.046,1808,0.923,1846,1.187,1869,1.285,1938,0.89,1990,2.339,1996,0.89,2020,1.092,2057,1.008,2109,0.862,2183,3.612,2204,0.901,2209,1.285,2232,1.151,2286,1.988,2288,1.868,2406,1.092,2738,1.285,2865,1.008,2878,1.068,2907,1.231,2916,2.483,2919,0.961,2926,1.285,3024,1.285,3032,1.092,3109,0.992,3110,0.992,3165,2.094,3168,2.473,3169,1.359,3170,2.473,3171,1.359,3172,1.359,3174,1.359,3175,1.12,3176,2.339,3177,2.339,3179,1.285,3180,1.231,3181,1.187,3182,2.094,3183,2.473,3184,2.473,3185,2.473,3187,1.359,3189,1.359,3190,1.988,3191,1.285,3193,1.285,3848,4.384,3888,1.47,3889,1.47]],["component/108",[6,0.35]],["keyword/108",[]],["title/109-1",[300,23.767,524,14.831,1169,36.532]],["name/109-1",[]],["text/109-1",[]],["component/109-1",[]],["keyword/109-1",[]],["title/109-2",[32,21.264,573,27.269]],["name/109-2",[]],["text/109-2",[]],["component/109-2",[]],["keyword/109-2",[]],["title/109-3",[413,21.993,723,36.299]],["name/109-3",[]],["text/109-3",[]],["component/109-3",[]],["keyword/109-3",[]],["title/109-4",[519,31.799]],["name/109-4",[]],["text/109-4",[]],["component/109-4",[]],["keyword/109-4",[]],["title/109-5",[493,31.01,524,14.831,573,22.748]],["name/109-5",[]],["text/109-5",[]],["component/109-5",[]],["keyword/109-5",[]],["title/109",[269,21.015,742,25.983,743,26.564]],["name/109",[269,0.418,742,0.517,743,0.528]],["text/109",[6,1.563,20,1.732,24,2.056,32,2.154,34,4.006,35,1.468,46,1.945,69,1.557,77,1.926,81,1.248,99,3.292,120,2.835,122,1.557,126,1.292,133,1.302,154,1.593,159,1.685,164,1.434,173,1.476,179,1.539,194,2.202,197,1.565,199,1.382,205,3.704,208,2.409,210,1.484,211,1.229,213,1.891,214,1.798,220,1.932,251,1.165,269,2.017,289,1.462,300,2.281,324,3.245,327,1.798,347,2.444,351,1.815,355,1.652,366,1.447,374,2.691,375,1.557,376,5.579,377,1.973,383,1.44,411,2.009,413,3.333,417,1.523,437,1.72,444,4.096,458,2.247,462,1.891,519,2.04,524,2.787,532,1.413,556,1.813,557,1.622,565,1.476,570,2.302,585,2.728,621,2.283,642,1.376,649,1.142,687,1.784,702,2.08,723,5.69,742,3.156,743,6.051,751,1.394,755,1.72,774,1.858,781,2.405,810,3.302,813,2.214,818,1.708,829,3.359,837,1.154,862,2.409,908,2.459,927,1.447,990,2.363,1011,1.784,1077,2.452,1086,2.673,1090,1.758,1117,5.679,1126,4.529,1132,1.523,1147,1.574,1169,7.058,1194,1.758,1216,1.352,1226,1.858,1310,1.964,1325,1.539,1341,4.534,1366,2.098,1502,2.153,1511,2.283,1567,1.663,1621,1.674,1658,1.891,1716,2.833,1768,2.182,1828,2.649,1864,2.577,1964,3.718,1970,2.733,2016,4.315,2252,2.959,2349,5.312,2350,2.649,2351,2.649,2352,2.649,2353,2.733,2361,2.649,2397,2.515,2412,2.733,2607,4.615,2612,2.182,2647,2.577,2803,2.409,3122,2.577,3212,4.82,3213,2.733,3214,2.959,3215,2.733,3216,2.959,3219,2.959]],["component/109",[6,0.35]],["keyword/109",[]],["title/110-1",[251,19.777,411,16.546,649,19.38]],["name/110-1",[]],["text/110-1",[]],["component/110-1",[]],["keyword/110-1",[]],["title/110-2",[521,24.467,524,17.779]],["name/110-2",[]],["text/110-2",[]],["component/110-2",[]],["keyword/110-2",[]],["title/110-3",[355,21.057,449,21.473,783,22.398,787,25.829,3661,32.845]],["name/110-3",[]],["text/110-3",[]],["component/110-3",[]],["keyword/110-3",[]],["title/110-4",[32,13.321,737,32.046,783,22.398,784,30.697,3841,32.845]],["name/110-4",[]],["text/110-4",[]],["component/110-4",[]],["keyword/110-4",[]],["title/110-5",[725,33.193,781,30.031]],["name/110-5",[]],["text/110-5",[]],["component/110-5",[]],["keyword/110-5",[]],["title/110-6",[269,25.192,411,19.835]],["name/110-6",[]],["text/110-6",[]],["component/110-6",[]],["keyword/110-6",[]],["title/110-7",[1272,41.695,2972,43.227]],["name/110-7",[]],["text/110-7",[]],["component/110-7",[]],["keyword/110-7",[]],["title/110",[251,23.708,411,19.835]],["name/110",[251,0.562,411,0.47]],["text/110",[4,0.489,6,0.926,9,1.675,20,0.656,23,1.182,24,0.478,27,0.576,29,0.599,32,1.257,35,2.102,40,1.534,46,0.736,50,0.938,70,1.309,81,3.295,90,0.665,98,0.543,99,2.276,101,
11.234,102,1.481,121,1.145,122,0.589,125,0.528,133,0.908,140,1.085,146,0.58,149,0.815,154,0.603,157,2.037,162,1.413,168,1.288,172,1.343,178,1.369,185,0.576,194,1.309,199,2.193,205,1.988,211,2.321,223,1.767,228,0.638,230,0.697,232,0.71,234,1.039,239,1.321,241,0.71,251,3.453,256,0.647,257,1.445,259,2.686,261,0.51,269,3.944,275,0.61,289,0.553,293,0.785,300,0.53,301,0.959,312,0.48,323,1.429,324,0.596,334,0.589,340,0.794,347,2.391,348,0.879,350,1.69,351,1.663,355,0.626,356,2.155,361,0.931,363,1.304,374,0.626,375,0.589,377,1.173,392,3.405,395,0.573,399,0.692,408,0.603,409,1.33,410,1.382,411,3.401,413,3.667,416,2.824,420,1.475,429,0.841,430,0.675,438,1.067,439,1.769,449,3.397,450,2.417,463,0.614,471,2.586,479,1.182,484,2.23,487,2.289,489,1.253,491,1.402,492,1.321,496,0.559,497,0.665,499,0.562,501,1.67,503,0.562,512,1.085,520,1.388,521,3.323,523,0.487,524,2.783,532,0.535,534,1.003,537,0.776,538,0.785,548,0.744,568,0.596,570,0.985,573,0.934,584,0.543,585,1.282,588,0.744,589,1.182,590,2.084,604,0.454,612,0.736,619,1.024,632,2.078,641,3.001,642,0.521,648,1.184,649,3.218,670,3.192,671,3.55,672,0.703,679,1.306,681,0.703,686,0.538,695,0.931,696,0.71,700,0.692,701,0.87,702,2.23,703,0.638,712,0.618,713,0.767,723,0.675,724,0.716,725,3.29,733,0.562,736,0.642,741,0.626,745,0.785,748,1.33,760,0.495,765,3.691,772,0.785,773,0.794,774,1.295,780,1.284,781,2.976,782,0.703,783,1.225,784,2.333,785,1.318,806,0.759,810,1.927,813,1.543,816,0.67,818,0.647,822,0.589,823,0.716,834,2.217,837,2.689,840,2.511,852,2.657,903,0.736,924,0.729,927,1.402,931,0.593,936,1.035,945,0.864,1015,2.193,1052,0.976,1053,0.879,1057,0.607,1077,0.829,1079,1.104,1080,1.356,1086,1.56,1110,0.622,1115,0.596,1117,1.207,1124,0.607,1126,1.024,1127,2.147,1134,0.647,1157,0.583,1160,0.838,1193,0.651,1216,3.023,1241,0.722,1247,0.63,1257,2.43,1258,0.583,1271,0.804,1272,0.776,1286,0.895,1287,0.759,1290,1.159,1303,0.722,1304,0.744,1305,0.716,1309,1.666,1315,0.729,1316,0.751,1325,0.583,1341,0.722,1347,0.895,1358,0.767,1366,2.033,1409,1.295,1436,0.879,1463,0.651,1467,0.759,1468,1.398,1469,0.759,1470,0.759,1471,1.369,1472,0.759,1473,1.306,1474,0.759,1475,0.759,1476,0.759,1477,0.744,1478,1.369,1479,0.744,1494,1.003,1495,1.566,1500,2.001,1509,0.895,1517,2.317,1537,1.035,1538,0.776,1587,0.647,1632,2.525,1636,1.199,1650,2.854,1658,0.716,1664,2.412,1665,0.692,1677,0.952,1705,0.838,1769,1.481,1778,6.558,1850,0.864,1892,1.5,1903,1.714,1967,0.895,1972,1.12,2085,0.976,2088,0.826,2109,0.751,2144,0.976,2183,1.618,2293,1.035,2294,0.838,2368,0.912,2675,1.035,2681,0.838,2754,1.905,2779,1.003,2792,0.794,2798,0.912,2846,1.073,2849,1.253,2850,1.003,2851,0.931,2877,1.12,2878,1.714,2916,0.864,2919,0.838,2955,0.895,2972,1.481,3034,1.003,3130,1.12,3474,0.826,3475,2.625,3476,1.521,3477,1.566,3479,0.879,3480,1.618,3509,0.976,3633,1.796,3660,3.187,3661,0.976,3664,1.975,3665,1.073,3671,2.744,3673,1.073,3677,1.073,3678,1.073,3832,2.647,3841,3.101,3849,1.073,3886,1.846,3890,1.184,3891,1.184,3892,1.184,3893,1.184,3894,3.03,3895,1.184,3896,1.281,3897,1.184,3898,1.184,3899,1.184,3900,1.184,3901,1.281,3902,1.184,3903,2.18,3904,1.184,3905,1.12,3906,3.763,3907,1.184,3908,1.184,3909,1.184]],["component/110",[6,0.35]],["keyword/110",[]],["title/111",[2972,53.952]],["name/111",[2972,1.793]],["text/111",[6,1.588,24,3.046,35,3.109,102,5.129,121,3.681,199,3.335,251,2.813,261,3.249,351,2.126,375,3.757,377,2.924,410,5.199,411,2.353,413,2.609,439,3.035,494,4.789,576,4.375,671,3.169,709,3.757,745,5.005,843,4.067,1094,4.123,1318,5.005,1495,5.424,1537,8.512,1538,6.384,1559,4.181,2111,5.343,2904,5.267,2972,7.743,3228,7.55,3231,7.55,3233,7.55,3234,7.55,3235,7.55,3236,7.55]],["component/111",[6,0.35]],["keyword/111",[]],["title/112-1",[2904,44.394,2905,51.156]],["name/112-1",[]],["text/112-1",[]],["component/112-1",[]],["keyword/112-1",[]],["title/112-2",[99,18.12,2904,37.033,3223,46.376]],["name/112-2",[]],["text/112-2",[]],["component/112-2",[]],["keyword/112-2",[]],["title/112-3",[99,21.722,621,46.44]],["name/112-3",[]],["text/112-3",[]],["component/112-3",[]],["keyword/112-3",[]],["title/112",[168,27.042,524,17.779]],["name/112",[168,0.641,524,0.421]],["text/112",[9,2.952,24,1.674,32,2.593,35,1.837,38,4.226,40,2.101,50,
11.786,81,1.655,83,2.425,92,2.689,98,1.902,99,4.024,125,1.85,126,1.714,153,2.152,154,3.246,159,3.434,164,3.556,168,4.388,170,2.139,173,3.008,189,3.263,194,1.794,199,3.428,211,3.049,215,2.981,220,1.573,251,2.891,269,1.643,314,3.346,318,2.556,324,3.208,326,2.332,338,2.405,347,2.416,376,2.126,403,3.337,411,3.322,412,3.796,413,3.427,414,4.043,418,2.368,429,2.46,437,2.282,450,2.021,496,1.959,501,1.842,503,1.969,521,1.596,522,2.35,524,3.171,574,2.784,585,2.698,614,2.386,619,1.949,632,4.109,649,3.43,666,2.165,670,3.928,709,2.065,712,2.165,751,1.85,760,1.735,781,1.959,837,3.464,852,2.221,922,2.368,1032,2.784,1085,2.719,1086,3.896,1089,2.065,1126,1.949,1132,2.021,1155,3.84,1166,2.937,1198,2.751,1272,2.719,1466,4.048,1639,3.08,1642,5.398,1808,2.819,1827,3.515,1928,2.58,2368,3.196,2482,2.466,2882,3.515,2908,3.759,2911,3.626,3224,3.927,3633,3.42]],["component/112",[6,0.35]],["keyword/112",[]],["title/113-1",[35,15.298,99,18.12,413,18.346]],["name/113-1",[]],["text/113-1",[]],["component/113-1",[]],["keyword/113-1",[]],["title/113-2",[35,15.298,99,18.12,387,30.28]],["name/113-2",[]],["text/113-2",[]],["component/113-2",[]],["keyword/113-2",[]],["title/113-3",[34,22.287,35,13.122,99,15.543,1090,25.584]],["name/113-3",[]],["text/113-3",[]],["component/113-3",[]],["keyword/113-3",[]],["title/113-4",[35,22.889]],["name/113-4",[]],["text/113-4",[]],["component/113-4",[]],["keyword/113-4",[]],["title/113",[99,21.722,376,32.593]],["name/113",[376,1.352]],["text/113",[4,1.755,19,2.337,34,4.315,35,2.269,51,2.127,78,2.546,99,3.665,127,2.483,139,1.938,168,2.758,179,2.091,197,2.127,198,3.248,205,1.701,223,1.996,239,2.83,251,1.583,257,2.817,261,1.829,289,1.986,312,1.721,315,4.354,334,2.115,355,2.245,374,2.245,376,5.499,377,1.646,387,5.028,392,1.798,411,1.325,413,3.459,440,2.069,471,2.842,484,2.649,490,2.617,519,1.701,523,1.748,524,1.813,527,2.231,536,2.754,566,3.599,576,2.463,585,2.747,595,4.302,619,1.996,641,2.569,668,3.053,682,3.96,702,2.649,733,3.079,742,2.08,758,2.139,760,3.685,781,2.006,782,2.524,806,4.16,829,2.933,837,2.394,931,2.127,969,3.053,975,2.925,1015,1.877,1038,3.272,1090,3.647,1110,2.231,1126,4.458,1132,3.834,1134,3.544,1141,3.416,1150,3.272,1165,2.887,1215,2.337,1216,1.837,1226,2.524,1236,7.382,1241,2.593,1254,2.696,1272,2.784,1325,2.091,1341,3.96,1343,2.754,1456,3.053,1503,3.341,1512,2.724,1576,2.754,1586,2.463,1621,2.274,1632,4.354,1669,4.817,1817,3.599,2185,3.416,2376,3.154,2386,4.467,2499,3.849,2684,4.998,2693,3.502,3147,3.599,3148,3.416,3198,3.849,3237,4.25,3238,4.02,3239,6.141,3240,6.141,3241,4.02,3242,4.02,3244,4.02,3910,4.597]],["component/113",[6,0.35]],["keyword/113",[]],["title/114-1",[848,27.621,1185,36.582]],["name/114-1",[]],["text/114-1",[]],["component/114-1",[]],["keyword/114-1",[]],["title/114-2",[351,14.945,1122,26.268,1290,28.221]],["name/114-2",[]],["text/114-2",[]],["component/114-2",[]],["keyword/114-2",[]],["title/114-3",[351,14.945,532,23.987,1195,25.571]],["name/114-3",[]],["text/114-3",[]],["component/114-3",[]],["keyword/114-3",[]],["title/114-4",[351,14.945,1124,27.189,1195,25.571]],["name/114-4",[]],["text/114-4",[]],["component/114-4",[]],["keyword/114-4",[]],["title/114-5",[234,30.338,848,27.621]],["name/114-5",[]],["text/114-5",[]],["component/114-5",[]],["keyword/114-5",[]],["title/114-6",[520,23.467,1216,27.503]],["name/114-6",[]],["text/114-6",[]],["component/114-6",[]],["keyword/114-6",[]],["title/114-7",[347,24.123,1115,32.027]],["name/114-7",[]],["text/114-7",[]],["component/114-7",[]],["keyword/114-7",[]],["title/114-8",[463,27.519,1115,26.716,1195,25.571]],["name/114-8",[]],["text/114-8",[]],["component/114-8",[]],["keyword/114-8",[]],["title/114-9",[524,17.779,701,25.382]],["name/114-9",[]],["text/114-9",[]],["component/114-9",[]],["keyword/114-9",[]],["title/114-10",[351,14.945,1077,20.194,1251,33.33]],["name/114-10",[]],["text/114-10",[]],["component/114-10",[]],["keyword/114-10",[]],["title/114-11",[1199,34.748,1251,39.956]],["name/114-11",[]],["text/114-11",[]],["component/114-11",[]],["keyword/114-11",[]],["title/114",[532,28.755,1195,30.654]],["name/114",[532,0.682,1195,0.727]],["text/114",[19,1.611,23,3.913,24,1.948,26,2.213,27,4.576,29,1.483,32,2.641,35,2.059,50,3.401,81,1.926,111,2.922,133,2.564,194,1.266,205,1.173,261,2.078,295,1.919,310,1.21,324,2.43,347,1.83,351,3.369,363,1.261,377,1.134,387,1.671,397,2.104,404,3.193,411,1.92,413,1.669,416,1.312,429,1.863,463,1.519,471,1.283,499,3.389,519,1.173,520,3.7,521,1.126,524,1.996,532,3.571,547,2.973,565,2.279,570,1.324,587,2.326,603,1.965,604,2.737,642,1.288,666,2.519,671,3.57,672,1.74,676,1.528,686,1.33,700,1.711,701,2.457,734,1.697,739,1.684,749,2.637,751,2.152,818,1.599,823,2.919,837,2.272,907,3.417,932,2.138,1011,1.671,1031,3.638,1057,2.473,1077,3.421,1113,1.74,1115,4.902,1116,2.256,1124,1.5,1147,3.1,1148,1.858,1151,1.697,1157,1.442,1199,4.315,1201,3.948,1216,3.676,1236,3.239,1239,3.323,1242,1.567,1244,1.878,1251,4.486,1255,3.583,1257,4.163,1258,1.442,1260,5.081,1267,1.839,1274,2.303,1275,2.303,1286,3.648,1287,3.095,
11290,2.567,1291,4.089,1297,4.743,1300,3.032,1304,1.839,1305,3.724,1313,1.771,1318,1.942,1325,1.442,1327,2.413,1332,2.174,1344,1.684,1352,1.942,1357,1.658,1358,1.898,1375,1.942,1380,4.239,1587,1.599,1650,2.776,1665,2.821,1725,3.417,1892,2.016,2088,2.043,2109,1.858,2253,3.524,2268,2.213,2338,2.256,2500,2.138,2718,2.303,2919,2.073,2972,1.99,3109,2.138,3110,2.138,3182,4.089,3247,4.089,3248,2.559,3249,2.481,3250,2.481,3251,2.481,3252,2.481,3253,2.481,3254,2.481,3255,5.827]],["component/114",[6,0.35]],["keyword/114",[]],["title/115-1",[848,27.621,1185,36.582]],["name/115-1",[]],["text/115-1",[]],["component/115-1",[]],["keyword/115-1",[]],["title/115-2",[429,20.483,1122,26.268,1290,28.221]],["name/115-2",[]],["text/115-2",[]],["component/115-2",[]],["keyword/115-2",[]],["title/115-3",[351,14.945,1122,26.268,1290,28.221]],["name/115-3",[]],["text/115-3",[]],["component/115-3",[]],["keyword/115-3",[]],["title/115-4",[351,14.945,1124,27.189,1195,25.571]],["name/115-4",[]],["text/115-4",[]],["component/115-4",[]],["keyword/115-4",[]],["title/115-5",[234,30.338,848,27.621]],["name/115-5",[]],["text/115-5",[]],["component/115-5",[]],["keyword/115-5",[]],["title/115-6",[520,23.467,1216,27.503]],["name/115-6",[]],["text/115-6",[]],["component/115-6",[]],["keyword/115-6",[]],["title/115-7",[411,19.835,1115,32.027]],["name/115-7",[]],["text/115-7",[]],["component/115-7",[]],["keyword/115-7",[]],["title/115-8",[524,17.779,701,25.382]],["name/115-8",[]],["text/115-8",[]],["component/115-8",[]],["keyword/115-8",[]],["title/115",[1195,30.654,1232,41.695]],["name/115",[1195,0.727,1232,0.988]],["text/115",[6,0.513,9,0.929,19,1.342,23,2.107,24,0.985,32,2.383,35,2.056,50,2.325,74,2.767,82,1.265,119,1.098,133,1.726,155,1.228,194,2.335,205,0.977,211,1.629,249,1.201,250,1.258,261,1.784,268,1.438,295,1.599,310,2.231,312,0.989,324,1.228,347,0.925,351,3.364,363,1.05,392,2.286,397,1.753,411,3.089,413,0.844,429,1.599,442,1.637,463,2.8,466,1.438,491,1.129,492,3.109,493,1.426,495,2.067,496,1.956,499,3.383,519,0.977,520,3.806,522,1.382,523,1.004,524,1.779,532,3.223,547,1.503,555,1.844,570,2.441,587,3.067,589,1.324,603,1.637,604,2.44,609,3.4,641,1.476,642,1.073,649,1.972,654,2.933,666,1.273,671,3.254,672,1.45,676,1.273,686,2.452,700,1.426,701,2.845,704,2.346,734,1.414,749,1.333,751,1.088,774,1.45,818,1.333,822,1.215,837,1.992,843,2.91,907,2.933,942,3.51,979,2.162,1011,1.392,1031,4.78,1057,3.653,1077,3.677,1115,4.865,1116,2.524,1122,2.673,1124,2.123,1147,1.228,1151,1.414,1193,1.342,1195,3.735,1199,2.95,1201,3.463,1207,1.438,1212,1.618,1216,3.351,1223,1.438,1232,5.417,1236,2.781,1239,1.68,1242,2.218,1244,2.657,1245,1.811,1255,4.009,1257,3.117,1258,1.201,1260,4.897,1267,1.533,1274,1.919,1275,1.919,1290,4.991,1298,1.476,1300,1.533,1304,1.533,1305,1.476,1307,1.781,1325,1.201,1332,1.811,1344,1.403,1352,1.618,1358,2.686,1380,4.382,1500,1.298,1538,1.599,1559,1.352,1587,1.333,1632,1.637,1650,1.403,1665,1.426,1725,2.933,1746,2.011,1752,5.943,1892,2.852,2088,1.703,2108,2.067,2109,1.548,2112,1.844,2246,2.067,2253,1.781,2268,1.844,2294,1.727,2331,2.067,2464,1.962,2612,2.892,2718,1.919,2849,1.403,2919,1.727,2972,1.658,3109,1.781,3110,1.781,3247,2.067,3249,2.067,3250,2.067,3251,2.067,3252,2.067,3253,2.067,3254,2.067,3258,2.441,3259,2.309,3260,2.309,3261,2.211,3262,2.441,3263,2.441,3264,2.309]],["component/115",[6,0.35]],["keyword/115",[]],["title/116",[2792,53.282]],["name/116",[2792,1.771]],["text/116",[6,2.396,377,4.412,545,6.792,547,5.996,637,5.688,643,7.654,2792,6.532,3265,8.245]],["component/116",[6,0.35]],["keyword/116",[]],["title/117-1",[121,20.053,524,14.831,2372,35.612]],["name/117-1",[]],["text/117-1",[]],["component/117-1",[]],["keyword/117-1",[]],["title/117-2",[99,18.12,121,20.053,251,19.777]],["name/117-2",[]],["text/117-2",[]],["component/117-2",[]],["keyword/117-2",[]],["title/117-3",[2243,57.052]],["name/117-3",[]],["text/117-3",[]],["component/117-3",[]],["keyword/117-3",[]],["title/117-4",[121,30.002]],["name/117-4",[]],["text/117-4",[]],["component/117-4",[]],["keyword/117-4",[]],["title/117-5",[121,24.038,1057,32.593]],["name/117-5",[]],["text/117-5",[]],["component/117-5",[]],["keyword/117-5",[]],["title/117-6",[41,28.221,351,14.945,1116,24.803]],["name/117-6",[]],["text/117-6",[]],["component/117-6",[]],["keyword/117-6",[]],["title/117-7",[28,29.188,121,20.053,1132,25.843]],["name/117-7",[]],["text/117-7",[]],["component/117-7",[]],["keyword/117-7",[]],["title/117",[121,24.038,992,35.755]],["name/117",[121,0.57,992,0.848]],["text/117",[4,1.373,6,0.699,9,1.693,19,1.04,23,3.616,24,1.795,27,2.166,28,1.04,32,2.574,35,2.22,37,1.404,50,1.915,74,1.703,81,0.755,83,1.105,89,2.131,98,0.867,99,3.478,102,1.285,121,4.114,124,1.012,138,1.105,146,0.926,154,0.963,164,2.039,168,2.591,200,1.048,211,1.748,220,1.261,234,0.902,249,2.19,251,3.796,255,0.952,269,0.749,286,0.931,295,1.239,300,0.847,306,1.841,310,1.838,311,0.993,312,1.347,344,1.071,347,1.687,351,2.869,377,0.733,392,0.801,393,1.176,410,0.863,411,1.901,413,2.663,416,0.847,426,1.176,429,0.73,438,0.926,439,1.336,440,2.166,454,1.816,462,2.01,463,2.306,466,1.959,471,0.828,479,1.803,482,1.559,484,2.489,490,1.165,491,0.875,492,3.16,501,0.839,509,2.944,519,1.331,520,1.641,521,0.727,523,0.778,524,2.36,526,1.339,542,1.176,557,0.981,565,0.893,573,1.425,582,1.133,583,2.109,584,1.524,585,0.801,597,1.2,604,2.051,609,1.585,616,1.212,632,2.1,649,2.226,660,1.124,666,0.987,670,3.67,671,1.396,676,0.987,692,0.906,701,0.755,702,1.357,726,1.114,733,0.897,751,1.482,758,3.382,759,2.944,760,3.875,781,3.986,786,1.114,794,1.033,798,1.404,800,2.204,801,1.269,802,1.033,8
110,0.969,823,1.144,837,2.249,840,1.079,848,1.443,887,0.987,921,2.561,922,1.079,927,0.875,981,1.144,989,1.176,1011,1.897,1015,2.694,1018,1.359,1023,1.521,1029,1.38,1057,3.123,1075,1.105,1077,2.32,1085,1.239,1086,0.784,1112,1.2,1115,2.239,1116,4.089,1122,1.645,1124,0.969,1132,0.921,1144,1.2,1147,3.069,1151,1.096,1155,2.202,1156,2.558,1185,1.087,1212,1.254,1214,1.457,1216,1.437,1223,1.114,1242,1.012,1246,1.212,1257,1.628,1258,2.19,1260,3.781,1303,1.154,1309,1.04,1315,1.165,1325,0.931,1340,2.204,1344,1.087,1466,1.734,1490,1.133,1511,1.38,1581,1.38,1585,1.254,1586,1.927,1587,1.816,1667,1.359,1678,1.521,1696,1.38,1707,1.359,1736,1.302,1748,1.339,1898,1.359,1908,4.142,1977,2.131,2141,1.429,2184,1.429,2204,1.254,2354,2.74,2372,1.269,2378,8.205,2379,4.534,2380,5.403,2381,4.534,2385,2.816,2386,2.288,2387,1.487,2394,1.602,2396,2.816,2397,2.673,2398,1.602,2399,1.602,2400,1.457,2401,1.457,2402,1.457,2403,1.602,2404,1.602,2681,3.148,2945,1.429,3217,2.816,3266,5.692,3267,1.713,3268,1.653,3269,1.653,3270,2.561,3271,2.673,3272,1.559,3273,1.653,3274,1.653,3275,1.602,3276,1.653,3277,1.653,3278,1.653,3279,1.653,3280,1.653]],["component/117",[6,0.35]],["keyword/117",[]],["title/118",[1123,39.563,1195,30.654]],["name/118",[1123,0.938,1195,
10.727]],["text/118",[4,1.697,6,0.864,23,3.379,35,2.496,50,1.768,83,2.401,179,2.022,194,2.734,205,1.645,314,2.157,347,2.398,351,3.235,372,2.53,392,3.665,411,3.396,414,2.607,439,2.542,454,2.582,492,3.776,496,3.64,499,1.949,520,3.194,524,3.251,532,1.857,568,2.068,570,1.857,584,1.883,587,1.98,604,1.574,609,4.129,619,1.93,649,1.5,655,3.164,671,3.635,676,3.3,686,2.872,701,4.104,729,2.908,751,1.832,775,3.726,788,4.099,837,2.844,935,6.354,979,4.518,982,3.478,1057,2.105,1077,4.041,1091,2.401,1115,3.881,1122,3.13,1123,3.933,1124,2.105,1195,3.047,1199,4.211,1209,2.462,1216,3.743,1240,2.634,1242,4.635,1257,3.775,1290,4.605,1299,3.05,1341,2.507,1380,2.828,1500,3.363,1522,6.222,1632,2.757,1650,3.636,1665,2.401,1724,4.544,1752,2.693,1850,2.999,2204,2.724,2622,3.05,2879,3.304,3181,3.59,3246,3.888,3283,6.325]],["component/118",[6,0.35]],["keyword/118",[]],["title/119",[350,44.3]],["name/119",[350,1.473]],["text/119",[6,1.159,23,3.578,32,2.301,35,1.985,41,1.833,70,1.491,81,2.199,90,1.938,99,1.177,119,2.48,120,1.517,133,1.436,154,2.807,159,1.858,179,2.713,194,1.491,199,1.523,205,2.207,211,2.706,234,1.644,251,2.566,269,2.182,301,1.517,310,1.424,327,5.273,334,1.716,347,1.307,350,5.58,351,1.552,355,1.822,356,1.688,374,1.822,377,2.135,392,1.459,404,1.788,407,3.79,411,3.118,413,2.38,414,2.188,416,3.851,429,1.331,437,1.896,439,1.386,445,1.661,451,2.165,459,2.015,461,2.842,462,4.756,463,1.788,471,2.414,484,1.408,492,1.503,501,1.53,503,1.636,520,1.272,532,2.491,538,2.286,545,3.846,565,1.628,573,2.362,609,1.644,642,1.517,649,2.514,671,2.891,692,3.77,697,2.26,701,1.376,702,1.408,703,4.634,721,2.842,741,1.822,765,4.354,796,2.085,802,3.761,804,2.656,810,5.124,815,4.334,816,1.952,837,2.033,843,1.858,852,1.845,1089,1.716,1117,3.053,1126,4.522,1152,3.013,1157,1.697,1216,3.4,1254,4.99,1290,1.833,1325,1.697,1341,3.363,1473,2.066,1517,4.241,1565,2.656,1621,4.603,1626,2.26,1628,7.007,1680,2.517,1743,2.656,1787,1.998,2208,3.013,2330,2.711,2405,3.263,2464,2.772,2611,7.126,2617,4.994,2632,2.373,2641,3.263,2849,3.169,2890,3.124,2934,2.772,2977,5.216,2978,5.216,3148,4.432,3286,3.449,3293,3.449,3295,3.449,3296,3.449,3299,3.449,3307,3.449,3911,3.731,3912,3.731,3913,3.731,3914,3.731]],["component/119",[6,0.35]],["keyword/119",[]],["title/120-1",[6,13.384,116,60.202]],["name/120-1",[]],["text/120-1",[]],["component/120-1",[]],["keyword/120-1",[]],["title/120-2",[117,60.202,118,50.022]],["name/120-2",[]],["text/120-2",[]],["component/120-2",[]],["keyword/120-2",[]],["title/120-3",[6,11.164,121,20.053,122,26.415]],["name/120-3",[]],["text/120-3",[]],["component/120-3",[]],["keyword/120-3",[]],["title/120-4",[6,13.384,123,42.181]],["name/120-4",[]],["text/120-4",[]],["component/120-4",[]],["keyword/120-4",[]],["title/120-5",[124,34.052,125,28.363]],["name/120-5",[]],["text/120-5",[]],["component/120-5",[]],["keyword/120-5",[]],["title/120-6",[126,26.282,127,37.174]],["name/120-6",[]],["text/120-6",[]],["component/120-6",[]],["keyword/120-6",[]],["title/120-7",[128,57.961]],["name/120-7",[]],["text/120-7",[]],["component/120-7",[]],["keyword/120-7",[]],["title/120-8",[121,30.002]],["name/120-8",[]],["text/120-8",[]],["component/120-8",[]],["keyword/120-8",[]],["title/120-9",[129,62.432]],["name/120-9",[]],["text/120-9",[]],["component/120-9",[]],["keyword/120-9",[]],["title/120-10",[131,53.891,132,48.074]],["name/120-10",[]],["text/120-10",[]],["component/120-10",[]],["keyword/120-10",[]],["title/120",[6,13.384,123,42.181]],["name/120",[123,1.75]],["text/120",[0,1.727,4,3.751,6,1.985,7,2.294,8,2.166,13,1.644,15,2.441,20,1.492,23,1.051,24,1.818,25,2.441,30,4.409,31,4.386,32,1.94,33,3.022,35,2.175,38,1.212,40,1.364,50,1.16,70,1.165,85,2.118,86,2.919,111,2.754,113,1.514,120,1.185,121,3.431,122,1.341,123,2.986,124,2.411,125,3.364,126,1.113,128,3.288,129,2.118,130,3.815,131,6.392,132,6.544,133,2.825,134,2.549,135,2.282,136,4.262,137,2.549,138,1.574,139,2.055,140,1.341,141,3.509,146,1.319,155,2.267,157,1.247,163,2.919,164,2.065,165,2.748,167,1.675,170,2.991,177,3.192,178,2.829,181,3.936,182,2.549,183,1.808,184,2.28,185,2.826,186,2.59,187,1.808,188,1.272,189,3.541,190,1.503,191,2.549,192,4.262,193,1.808,194,1.165,195,2.282,196,3.236,197,2.254,198,3.395,199,1.19,200,1.492,201,3.236,202,4.445,203,2.549,204,1.601,205,3.022,206,2.118,207,2.549,208,2.075,209,2.549,210,1.278,211,2.281,212,2.441,213,1.629,214,1.549,215,1.936,216,2.531,217,3.143,218,1.615,219,2.549,220,2.201,221,2.105,222,1.907,223,2.726,224,3.1,225,2.282,226,1.746,227,1.854,228,2.427,229,1.644,230,3.996,231,2.676,232,1.615,233,1.88,234,1.285,235,2.354,236,5.258,237,2.441,238,1.907,239,1.175,240,2.354,241,2.699,242,2.075,243,3.682,244,2.748,245,2.441,246,1.587,247,2.441,248,2.166,249,1.326,250,1.388,251,1.004,252,2.549,253,2.549,254,2.354,255,1.356,256,1.471,257,3.848,258,1.907,259,1.644,260,2.549,261,1.16,262,2.986,263,2.354,264,2.354,265,2.549,266,2.549,267,2.166,268,1.587,269,1.067,270,2.166,271,2.282,272,3.622,273,2.441,274,2.549,275,1.388,276,1.692,277,1.786,278,2.549,279,1.76
15,280,1.907,281,1.854,282,2.118,283,2.036,284,2.282,285,1.88,286,1.326,287,2.549,288,2.193,289,1.259,290,2.075,291,2.036,292,1.514,293,2.986,294,1.675,295,1.765,296,4.262,297,4.262,298,2.282,299,2.549,300,1.206,301,1.185,303,1.907,306,1.492,309,1.601,310,1.113,311,1.414,312,2.351,313,1.966,314,1.414,315,1.808,316,2.282,317,2.118,318,1.659,319,1.854,320,2.441,321,2.441,322,2.549,323,1.765,324,1.356,325,1.808,326,1.514,327,1.549,328,1.471,329,2.354,330,2.166,331,2.549,332,2.441,333,2.549,334,1.341,335,2.549,336,1.83,337,1.808,338,1.561,339,2.549,340,1.808,341,2.549,930,1.675,963,1.727,1340,1.786,1527,1.675,3308,2.694,3309,2.694,3310,3.936]],["component/120",[6,0.35]],["keyword/120",[]],["title/121-1",[127,46.396]],["name/121-1",[]],["text/121-1",[]],["component/121-1",[]],["keyword/121-1",[]],["title/121-2",[723,36.299,724,38.47]],["name/121-2",[]],["text/121-2",[]],["component/121-2",[]],["keyword/121-2",[]],["title/121-3",[521,24.467,725,33.193]],["name/121-3",[]],["text/121-3",[]],["component/121-3",[]],["keyword/121-3",[]],["title/121-4",[376,40.679]],["name/121-4",[]],["text/121-4",[]],["component/121-4",[]],["keyword/121-4",[]],["title/121-5",[1445,37.801,2835,60.202]],["name/121-5",[]],["text/121-5",[]],["component/121-5",[]],["keyword/121-5",[]],["title/121-6",[729,56.203]],["name/121-6",[]],["text/121-6",[]],["component/121-6",[]],["keyword/121-6",[]],["title/121",[6,16.704]],["name/121",[731,2.075]],["text/121",[6,2.478,22,3.162,32,2.301,35,2.38,38,2.067,44,3.538,45,3.353,51,2.299,77,2.83,81,1.833,82,2.382,84,3.206,119,2.067,125,3.069,154,2.34,170,2.368,173,3.25,178,2.885,185,2.237,187,3.083,199,2.03,204,2.73,205,1.84,211,2.706,218,2.753,220,2.61,223,2.158,229,2.803,239,2.003,251,2.565,269,3.269,275,2.368,286,2.261,289,2.147,293,3.046,300,3.083,301,2.021,312,1.861,319,3.162,350,2.563,356,2.249,363,1.977,367,3.353,375,2.287,377,1.779,383,2.116,392,2.914,399,4.022,401,3.011,412,2.003,415,2.857,428,3.046,429,3.98,440,2.237,468,2.707,471,2.012,509,4.541,512,3.426,524,1.284,570,2.076,631,2.915,642,2.021,666,2.397,671,1.929,690,2.885,725,3.592,726,4.056,733,3.266,736,2.492,739,3.958,741,2.427,742,3.37,743,3.446,750,3.694,780,2.707,781,2.168,785,2.778,786,2.707,788,2.977,796,2.778,799,5.202,802,2.509,804,3.538,810,2.353,811,3.612,812,3.538,822,2.287,1018,3.301,1089,2.287,1132,2.237,1166,3.252,1183,2.707,1296,2.545,1351,3.252,1509,3.471,1527,2.857,1539,3.353,1567,2.443,1572,3.41,1751,3.353,1842,4.014,2245,3.252,2386,3.162,2792,3.083,2793,4.014,2794,4.162,2795,4.162,2929,3.612,3661,3.786,3841,3.786,3915,4.971,3916,4.595,3917,4.971,3918,4.971]],["component/121",[6,0.35]],["keyword/121",[]],["title/122-1",[69,31.666,387,36.299]],["name/122-1",[]],["text/122-1",[]],["component/122-1",[]],["keyword/122-1",[]],["title/122-2",[35,15.298,62,37.033,69,26.415]],["name/122-2",[]],["text/122-2",[]],["component/122-2",[]],["keyword/122-2",[]],["title/122-3",[35,18.339,813,45.031]],["name/122-3",[]],["text/122-3",[]],["component/122-3",[]],["keyword/122-3",[]],["title/122-4",[62,24.73,69,17.64,714,20.068,814,26.307,815,27.866,816,20.068]],["name/122-4",[]],["text/122-4",[]],["component/122-4",[]],["keyword/122-4",[]],["title/122-5",[69,22.658,725,23.751,818,24.863,3310,39.78]],["name/122-5",[]],["text/122-5",[]],["component/122-5",[]],["keyword/122-5",[]],["title/122-6",[819,60.202,820,44.394]],["name/122-6",[]],["text/122-6",[]],["component/122-6",[]],["keyword/122-6",[]],["title/122-7",[69,15.881,714,18.067,821,30.193,822,15.881,823,19.294,824,27.028,825,27.028]],["name/122-7",[]],["text/122-7",[]],["component/122-7",[]],["keyword/122-7",[]],["title/122-8",[820,37.033,826,44.955,827,34.025]],["name/122-8",[]],["text/122-8",[]],["component/122-8",[]],["keyword/122-8",[]],["title/122-9",[277,42.181,828,53.891]],["name/122-9",[]],["text/122-9",[]],["component/122-9",[]],["keyword/122-9",[]],["title/122-10",[829,28.755,830,60.202]],["name/122-10",[]],["text/122-10",[]],["component/122-10",[]],["keyword/122-10",[]],["title/122-11",[23,13.828,27,27.434,147,21.626,831,30.021,832,30.021]],["name/122-11",[]],["text/122-11",[]],["component/122-11",[]],["keyword/122-11",[]],["title/122-12",[659,42.181,833,52.432]],["name/122-12",[]],["text/122
1-12",[]],["component/122-12",[]],["keyword/122-12",[]],["title/122-13",[94,65.44]],["name/122-13",[]],["text/122-13",[]],["component/122-13",[]],["keyword/122-13",[]],["title/122",[820,44.394,834,37.483]],["name/122",[820,1.842]],["text/122",[2,1.526,4,0.784,8,1.526,9,2.763,10,1.169,13,0.622,16,0.819,18,0.84,22,1.832,24,1.585,26,0.77,27,1.623,28,0.56,29,0.961,30,0.595,32,2.505,35,2.283,37,2.916,38,0.854,40,0.516,49,1.719,50,0.439,53,0.923,62,7.636,63,0.923,65,0.756,68,0.653,69,5.704,70,3.335,71,0.923,72,2.412,73,0.684,74,0.972,77,1.64,78,1.595,80,0.923,81,1.567,82,0.528,88,0.711,90,1.066,92,0.66,94,4.742,95,0.923,96,1.719,97,0.923,98,0.87,99,0.348,101,1.888,102,1.289,103,0.923,105,1.719,106,1.719,107,1.658,111,0.483,120,1.962,121,0.385,125,0.454,126,0.421,127,0.595,142,0.785,144,0.516,155,1.678,159,1.434,160,0.622,179,0.502,183,2.636,184,0.516,185,1.913,190,0.569,194,0.82,198,0.51,220,0.386,221,0.476,222,0.721,226,0.66,229,0.622,230,1.964,233,0.711,234,0.486,241,0.611,251,2.277,256,1.454,269,0.751,277,1.258,288,2.403,293,0.676,300,0.85,306,1.474,310,0.784,316,1.607,318,1.169,328,0.557,367,0.744,372,1.169,374,0.538,387,3.283,392,0.803,395,0.919,404,0.528,412,0.444,417,0.496,418,1.082,420,0.924,429,1.905,438,1.303,439,0.41,440,1.296,449,0.549,454,0.416,456,2.237,474,1.434,487,0.77,492,0.444,494,1.689,502,2.194,503,0.9,506,1.707,507,2.016,519,2.304,523,1.095,527,0.535,541,0.819,542,0.634,556,0.591,573,3.003,574,1.273,581,0.676,582,1.595,585,0.431,587,1.283,588,0.64,591,1.343,597,0.647,602,0.89,609,0.486,614,0.586,617,0.701,637,1.555,659,0.676,680,0.84,681,0.605,684,2.185,686,0.463,703,0.549,704,1.507,708,0.819,710,0.77,714,2.525,721,0.84,725,1.739,737,0.819,739,0.586,740,0.701,743,1.669,751,2.565,760,0.426,775,0.6,777,0.819,785,4.533,786,1.118,787,1.23,800,0.676,813,0.721,814,4.535,815,4.803,816,1.888,818,1.454,820,6.474,822,1.325,823,2.016,824,3.328,825,4.874,826,5.45,827,4.806,828,8.214,829,3.96,831,1.607,832,0.863,833,2.194,834,4.982,835,0.77,836,0.964,837,0.376,838,0.701,839,3.718,840,1.519,841,2.519,842,3.718,843,2.403,844,2.519,845,2.42,846,1.795,847,0.801,848,0.442,849,0.628,850,0.964,851,0.744,852,0.545,853,0.801,854,2.519,855,0.66,856,1.795,857,0.964,858,0.964,859,0.964,860,0.964,861,0.964,862,2.568,863,0.964,864,0.964,865,0.923,866,0.964,867,0.964,868,0.964,869,0.964,870,0.964,871,0.964,872,0.964,873,0.964,874,0.77,875,0.964,876,0.964,877,1.795,878,1.243,879,0.89,880,0.964,881,0.863,882,0.964,883,0.732,884,1.158,885,0.964,886,0.964,887,0.532,888,0.964,889,1.795,890,0.964,891,0.84,892,1.795,893,1.795,894,1.795,895,0.863,896,1.526,897,0.964,898,0.964,899,0.964,900,0.964,901,0.84,902,0.964,903,0.634,904,6.088,905,0.756,906,0.964,907,3.797,908,0.801,909,0.732,910,0.964,911,1.526,912,0.721,913,0.964,914,1.658,915,1.795,917,1.795,918,2.519,919,0.801,920,0.964,921,1.461,922,1.902,923,0.964,924,1.169,925,2.519,926,0.964,927,1.543,928,0.744,929,0.923,930,1.18,931,1.332,932,0.744,933,0.964,934,0.819,935,1.564,936,0.89,937,0.89,938,5.077,939,6.15,940,0.964,941,0.964,942,1.607,943,0.964,944,4.22,945,1.385,946,1.564,947,0.964,948,0.84,949,0.964,950,0.923,951,1.795,952,0.84,953,0.964,954,0.923,955,0.964,956,1.795,957,0.964,958,0.964,959,0.964,960,0.964,961,0.964,962,0.964,963,1.216,964,1.564,965,0.964,966,0.863,967,0.964,968,0.711,969,1.363,970,1.795,971,0.923,972,0.964,973,0.964,974,0.732,975,2.295,976,0.89,977,1.795,978,2.412,979,0.532,980,0.964,981,2.016,982,0.56,983,1.795,984,0.964,985,0.77,986,0.964,987,0.964,988,1.795,989,0.634,990,0.77,991,0.964,992,1.066,993,0.964,994,0.84,995,0.964,996,1.169,997,0.964,998,0.964,999,0.964,1000,0.964,1001,0.964,1002,0.964,1003,0.964,1004,0.964,1005,0.964,1006,0.964,1007,0.964,1008,0.964,1009,0.964,1010,0.964,1011,0.581,1012,0.84,1013,0.964,1014,0.863,1015,0.45,1016,0.964,1017,0.964,1018,0.732,1019,2.208,1020,0.89,1021,0.964,1022,0.89,1023,0.819,1024,0.923,1025,0.964,1026,0.89,1027,0.964,1028,0.964,1029,0.744,1030,0.964,1031,0.519,1032,2.636,1033,0.964,1034,0.964,1035,1.719,1036,2.412,1037,0.964,1038,0.785,1039,0.964,1040,0.923,1041,3.155,1042,2.519,1043,0.77,1044,0.964,1045,0.732,1046,0.819,1047,0.89,1048,0.964,1049,0.964,1050,0.863,1051,0.964,1052,1.564,1053,0.756,1054,0.84,1055,0.66,1056,0.84,1057,0.522,1058,0.964,1059,0.9
164,1060,0.964,1061,0.964,1062,0.964,1063,0.923,1064,0.964,1065,0.964,1066,0.964,1067,0.964,1068,0.964,1069,0.964,1070,0.964,1071,0.964,2095,0.964,3310,6.123,3919,2.053]],["component/122",[6,0.35]],["keyword/122",[]],["title/123",[1072,71.94]],["name/123",[704,1.495]],["text/123",[0,1.526,6,1.718,7,2.066,9,2.017,19,1.309,22,1.638,24,0.96,28,1.309,32,3.482,34,1.165,35,2.679,38,1.825,41,2.157,51,1.191,68,1.526,69,2.019,70,1.029,81,0.949,86,3.436,98,1.091,99,3.064,111,1.129,113,1.337,125,1.808,133,0.991,144,2.054,146,1.165,147,2.475,153,2.103,160,1.452,162,2.629,164,1.859,165,3.235,168,2.986,170,3.227,205,0.953,211,2.461,221,1.112,223,1.905,228,1.282,239,1.769,251,1.975,255,1.198,256,1.3,261,3.515,262,4.152,269,3.233,286,1.997,292,2.979,309,1.414,310,0.983,312,0.964,314,1.249,328,1.3,347,3.096,351,3.09,356,1.165,363,2.695,366,2.453,370,2.156,375,2.019,377,0.922,383,1.096,385,1.833,387,1.358,392,1.007,407,1.147,408,1.212,409,1.452,411,3.488,412,1.769,413,1.832,414,2.573,416,1.816,420,2.581,428,1.578,437,1.309,439,3.85,454,2.556,459,1.39,466,1.402,471,1.776,495,2.016,496,1.915,512,2.638,514,1.71,519,0.953,520,0.878,524,2.862,532,2.396,536,1.542,547,1.466,564,1.578,568,1.198,573,3.278,585,1.007,587,1.147,594,1.51,604,0.912,631,3.973,632,3.317,649,0.869,664,1.414,682,2.475,686,1.081,691,1.212,696,1.426,699,1.426,701,2.115,702,1.656,704,2.297,709,1.184,717,1.51,730,1.684,748,2.475,772,1.578,829,3.69,849,1.466,931,2.03,963,1.526,992,1.337,1050,2.016,1057,1.219,1073,1.833,1074,2.016,1075,1.39,1076,2.252,1077,0.905,1078,1.66,1079,1.205,1080,2.522,1081,5.035,1082,2.016,1083,1.798,1084,1.414,1086,3.387,1087,2.252,1088,1.3,1089,3.807,1090,2.28,1091,1.39,1092,2.871,1093,1.871,1094,1.3,1095,1.961,1096,1.638,1097,2.252,1098,1.414,1099,2.547,1100,2.475,1101,1.684,1102,2.252,1103,1.833,1104,2.252,1106,1.578,1107,1.737,1108,1.766,1109,2.252,1110,2.129,1111,1.961,1112,1.51,1113,1.414,1114,2.016,1115,2.042,1116,1.896,1117,2.247,1118,1.578,1120,1.71,1121,1.833,1122,1.178,1123,1.48,1124,1.219,1125,1.913,1126,1.118,1127,1.358,1128,2.016,1129,3.011,1130,1.961,1131,1.684,1359,1.871,2057,1.766,2879,1.913]],["component/123",[6,0.35]],["keyword/123",[]],["title/124-1",[454,32.417]],["name/124-1",[]],["text/124-1",[]],["component/124-1",[]],["keyword/124-1",[]],["title/124-2",[242,40.877,911,42.674,3920,53.081]],["name/124-2",[]],["text/124-2",[]],["component/124-2",[]],["keyword/124-2",[]],["title/124-3",[6,16.704]],["name/124-3",[]],["text/124-3",[]],["component/124-3",[]],["keyword/124-3",[]],["title/124-4",[269,21.015,742,25.983,743,26.564]],["name/124-4",[]],["text/124-4",[]],["component/124-4",[]],["keyword/124-4",[]],["title/124-5",[251,23.708,411,19.835]],["name/124-5",[]],["text/124-5",[]],["component/124-5",[]],["keyword/124-5",[]],["title/124-6",[99,21.722,411,19.835]],["name/124-6",[]],["text/124-6",[]],["component/124-6",[]],["keyword/124-6",[]],["title/124-7",[399,37.174,400,40.363]],["name/124-7",[]],["text/124-7",[]],["component/124-7",[]],["keyword/124-7",[]],["title/124-8",[820,44.394,834,37.483]],["name/124-8",[]],["text/124-8",[]],["component/124-8",[]],["keyword/124-8",[]],["title/124-9",[194,27.503,351,17.916]],["name/124-9",[]],["text/124-9",[]],["component/124-9",[]],["keyword/124-9",[]],["title/124-10",[6,13.384,123,42.181]],["name/124-10",[]],["text/124-10",[]],["component/124-10",[]],["keyword/124-10",[]],["title/124-11",[1072,71.94]],["name/124-11",[]],["text/124-11",[]],["component/124-11",[]],["keyword/124-11",[]],["title/124-12",[1705,56.203]],["name/124-12",[]],["text/124-12",[]],["component/124-12",[]],["keyword/124-12",[]],["title/124",[125,23.66,186,30.516,712,27.689]],["name/124",[2686,2.175]],["text/124",[6,1.405,23,1.722,33,5.408,35,2.591,77,2.719,84,3.08,88,3.08,99,1.507,119,1.986,125,1.968,126,1.824,139,2.014,144,3.383,150,3.638,173,2.084,178,2.772,179,2.173,186,5.168,188,3.805,199,1.95,205,1.768,211,1.735,220,1.674,243,2.801,246,2.601,251,1.645,257,4.429,261,1.9,262,2.927,269,1.748,272,5.372,276,2.772,277,4.429,291,3.336,300,2.992,3
101,1.942,310,1.824,311,2.318,312,2.706,319,3.039,324,2.222,342,5.506,348,4.959,356,2.161,405,3.08,411,2.513,416,1.977,417,2.15,437,2.428,442,2.962,465,3.858,468,2.601,483,3.471,496,3.154,515,3.08,519,1.768,532,1.995,548,2.772,570,3.02,599,2.801,619,2.073,649,2.44,670,2.235,671,2.805,672,2.623,701,1.761,704,3.783,730,3.125,733,2.094,739,5.552,743,2.21,760,1.846,774,3.97,781,2.084,795,3.039,809,2.623,817,5.838,822,3.325,848,3.499,928,3.222,930,4.155,1031,2.248,1063,4,1081,3.55,1121,3.4,1138,3.638,1165,3,1195,3.219,1216,1.908,1219,2.694,1232,2.893,1288,3.739,1336,3.222,1356,3.08,1390,3.125,1400,3.471,1437,2.962,1513,4.177,1586,3.872,1817,3.739,1898,3.172,1963,4,2131,4.415,2204,4.429,2327,3.4,2349,3.638,2389,3.471,2658,3.125,2742,3.739,3310,5.838,3920,4.415,3921,4.777,3922,4.777,3923,4.777,3924,4.777,3925,4.777,3926,4.777,3927,4.777,3928,4.777,3929,4.777,3930,4.777,3931,4.777,3932,4.777,3933,4.777]],["component/124",[6,0.35]],["keyword/124",[]],["title/125-1",[10,48.908]],["name/125-1",[]],["text/125-1",[]],["component/125-1",[]],["keyword/125-1",[]],["title/125-2",[1190,44.3]],["name/125-2",[]],["text/125-2",[]],["component/125-2",[]],["keyword/125-2",[]],["title/125-3",[188,30.031,1191,38.822]],["name/125-3",[]],["text/125-3",[]],["component/125-3",[]],["keyword/125-3",[]],["title/125-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/125-4",[]],["text/125-4",[]],["component/125-4",[]],["keyword/125-4",[]],["title/125-5",[139,36.226]],["name/125-5",[]],["text/125-5",[]],["component/125-5",[]],["keyword/125-5",[]],["title/125-6",[523,26.178,1193,34.99]],["name/125-6",[]],["text/125-6",[]],["component/125-6",[]],["keyword/125-6",[]],["title/125-7",[351,14.945,1194,29.827,1195,25.571]],["name/125-7",[]],["text/125-7",[]],["component/125-7",[]],["keyword/125-7",[]],["title/125-8",[194,19.679,351,12.82,1196,43.077,1197,43.077]],["name/125-8",[]],["text/125-8",[]],["component/125-8",[]],["keyword/125-8",[]],["title/125-9",[512,31.666,701,25.382]],["name/125-9",[]],["text/125-9",[]],["component/125-9",[]],["keyword/125-9",[]],["title/125-10",[520,23.467,604,24.38]],["name/125-10",[]],["text/125-10",[]],["component/125-10",[]],["keyword/125-10",[]],["title/125-11",[604,24.38,1198,42.181]],["name/125-11",[]],["text/125-11",[]],["component/125-11",[]],["keyword/125-11",[]],["title/125-12",[584,29.163,604,24.38]],["name/125-12",[]],["text/125-12",[]],["component/125-12",[]],["keyword/125-12",[]],["title/125-13",[1115,39.972]],["name/125-13",[]],["text/125-13",[]],["component/125-13",[]],["keyword/125-13",[]],["title/125-14",[524,22.19]],["name/125-14",[]],["text/125-14",[]],["component/125-14",[]],["keyword/125-14",[]],["title/125-15",[404,32.989,524,17.779]],["name/125-15",[]],["text/125-15",[]],["component/125-15",[]],["keyword/125-15",[]],["title/125-16",[1199,43.368]],["name/125-16",[]],["text/125-16",[]],["component/125-16",[]],["keyword/125-16",[]],["title/125-17",[78,38.13,1199,34.748]],["name/125-17",[]],["text/125-17",[]],["component/125-17",[]],["keyword/125-17",[]],["title/125-18",[351,17.916,1077,24.208]],["name/125-18",[]],["text/125-18",[]],["component/125-18",[]],["keyword/125-18",[]],["title/125-19",[351,14.945,521,20.41,1077,20.194]],["name/125-19",[]],["text/125-19",[]],["component/125-19",[]],["keyword/125-19",[]],["title/125-20",[35,11.488,351,11.223,701,15.9,1077,15.165,1200,32.845]],["name/125-20",[]],["text/125-20",[]],["component/125-20",[]],["keyword/125-20",[]],["title/125-21",[454,25.973,1116,29.733]],["name/125-21",[]],["text/125-21",[]],["component/125-21",[]],["keyword/125-21",[]],["title/125-22",[454,25.973,1116,29.733]],["name/125-22",[]],["text/125-22",[]],["component/125-22",[]],["keyword/125-22",[]],["title/125-23",[32,15.215,439,18.3,454,18.585,1116,21.275]],["name/125-23",[]],["text/125-23",[]],["component/125-23",[]],["keyword/125-23",[]],["title/125-24",[1115,32.027,1350,46.44]],["name/125-24",[]],["text/125-24",[]],["component/125-24",[]],["keyword/125-24",[]],["title/125-25",[35,15.298,251,19.777,351,14.945]],["name/125-25",[]],["text/125-25",[]],["component/125-25",[]],["keyword/125-25",[]],["title/125-26",[520,16.792,604,17.445,1046,36.604,1201,29.185]],["name/125-26",[]],["text/125-26",[]],["component/125-26",[]],["keyword/125-26",[]],["title/125-27",[220,24.123,415,39.563]],["name/125-27",[]],["text/125-27",[]],["component/125-27",[]],["keyword/125-27",[]],["title/125",[194,27.503,351,17.916]],["name/125",[194,0.652,351,0.425]],["text/125",[4,0.871,6,1.374,7,0.581,9,0.626,13,0.363,14,0.786,18,0.491,22,0.41,23,2.479,24,1.024,27,4.844,29,0.302,30,0.348,32,2.681,33,0.766,35,2.4,38,0.74,40,0.578,46,0.71,50,1.092,51,1.055,66,0.879,69,0.296,70,0.257,73,0.4,75,0.442,77,0.703,81,0.455,82,0.309,83,0.348,88,0.416,92,0.74,98,0.273,99,0.72,101,0.337,111,0.283,118,0.468,119,0.74,120,0.927,121,0.225,122,0.568,124,1.572,125,0.94,126,1.048,127,0.961,133,1.378,138,0.348,140,0.568,141,0.36,144,0.832,152,0.898,155,0.3,156,0.422,157,1.174,159,0.615,167,0.37,169,0.41,173,2.157,174,0.33,178,0.374,179,1.038,184,0.302,185,0.801,187,0.766,188,1.725,194,1.269,197,0.823,198,1.055,199,1.615,200,0.33,205,0.844,211,2.095,213,0.69,214,0.342,216,0.335,217,0.416,218,0.985,220,1.254,223,0.28,226,0.386,230,0.351,231,1.965,232,0.684,234,0.784,239,0.717,242,0.879,244,0.363,246,0.351,251,1.803,255,0.3,257,0.395,261,0.491,262,1.398,268,0.351,271,0.967,273,0.54,275,0.307,276,1.033,277,1.398,279,0.748,288,0.801,290,3.065,294,0.71,300,2.167,301,0.502,303,0.422,306,0.33,308,0.479,309,0.354,310,1.367,311,1.107,312,1.481,317,0.468,318,0.367,324,1.84,327,0.342,328,0.325,334,0.296,337,0.766,340,0.4,344,1.437,347,1.254,351,3.19,355,0.315,361,0.468,363,1.573,371,0.374,372,0.367,374,0.315,377,0.637,379,0.833,383,0.274,388,0.651,392,0.892,393,0.37,395,0.553,401,0.39,404,1.316,406,1.033,408,0.837,410,0.521,411,2.088,412,0.498,413,2.568,416,0.267,417,1.026,418,0.34,420,0.29,424,0.325,426,0.37,427,1.459,429,0.635,430,0.34,432,0.54,437,0.904,438,0.805,439,0.661,440,0.29,445,0.55,450,0.556,451,0.374,454,2.861,462,0.36,463,0.853,468,1.242,471,1.449,473,0.818,474,0.863,491,0.976,496,0.539,497,0.335,499,3.325,501,0.936,503,0.542,504,0.54,507,0.36,512,1.049,519,1.016,520,2.691,521,0.229,523,0.676,524,2.556,525,0.34,527,0.863,532,2.41,537,0.39,538,0.757,542,1.311,547,1.298,556,0.345,557,1.093,565,2.157,568,0.828,570,1.147,575,0.354,584,2.334,585,1.074,589,0.619,590,1.406,591,2.587,592,1.147,593,0.428,594,0.378,599,0.724,603,0.4,604,2.896,606,0.382,614,0.656,615,0.45,616,0.382,617,0.41,619,1.379,632,0.281,633,0.374,647,1.832,649,0.927,655,0.879,660,0.977,666,0.311,670,0.832,671,0.885,673,0.491,676,0.311,681,0.678,684,0.39,686,3.041,692,0.788,693,0.678,697,0.39,700,
10.348,701,2.605,702,1.975,704,0.337,709,0.296,717,0.378,723,0.34,724,0.36,726,0.351,729,1.164,733,0.283,734,1.222,739,0.945,741,0.603,751,0.94,752,0.416,758,0.828,759,0.328,760,1.061,780,0.673,782,0.354,788,1.066,791,0.809,792,0.918,796,0.69,799,0.45,810,1.3,811,0.468,814,0.442,816,0.337,818,0.325,822,1.263,823,1.534,827,1.351,829,0.743,837,0.606,838,0.41,840,0.34,843,0.615,845,0.703,848,0.496,849,1.013,851,0.435,878,0.39,884,0.363,887,0.858,905,0.442,919,2.309,922,0.651,924,0.367,927,1.174,931,0.298,948,0.941,950,0.54,968,0.416,981,0.36,989,1.022,990,0.45,996,0.367,1012,0.491,1019,0.642,1031,0.581,1046,0.479,1055,0.386,1057,3.062,1077,3.337,1079,1.487,1086,1.372,1088,0.325,1089,0.296,1091,0.667,1098,0.977,1103,0.879,1106,0.395,1108,0.442,1110,0.599,1112,0.724,1113,0.354,1115,2.3,1116,4.425,1122,0.295,1123,0.37,1126,0.28,1138,0.491,1143,0.504,1144,1.043,1147,2.563,1151,0.345,1155,0.295,1156,0.342,1157,0.293,1161,0.428,1165,0.405,1166,1.164,1170,0.348,1178,0.459,1184,0.504,1185,0.656,1187,0.428,1189,0.717,1192,0.311,1195,2.453,1198,0.757,1199,4.195,1200,0.941,1201,1.883,1202,0.504,1203,0.564,1204,1.548,1205,0.564,1206,0.435,1207,0.673,1208,0.998,1209,0.985,1210,0.564,1211,0.374,1212,0.395,1213,1.22,1214,0.459,1215,0.328,1216,1.852,1217,0.378,1218,0.378,1219,1.003,1220,0.74,1221,0.468,1222,0.504,1223,1.495,1224,1.034,1225,0.776,1226,0.354,1227,0.435,1228,0.564,1229,0.504,1230,0.998,1232,1.924,1238,0.442,1239,4.825,1240,1.054,1242,0.319,1243,0.564,1244,0.732,1245,2.455,1246,0.382,1247,0.607,1248,2.739,1249,0.468,1250,0.564,1251,1.594,1252,0.564,1253,0.646,1254,0.378,1255,2.713,1256,1.054,1257,1.438,1258,2.736,1259,1.08,1260,4.069,1261,0.564,1262,0.564,1263,0.564,1264,0.564,1265,1.08,1266,0.757,1267,0.717,1268,1.08,1269,1.556,1270,3.477,1271,0.776,1272,1.663,1273,0.357,1274,0.468,1275,0.468,1276,0.564,1277,2.299,1278,0.52,1279,1.08,1280,0.564,1282,0.4,1283,0.564,1284,0.564,1285,0.54,1286,0.45,1287,0.382,1288,0.504,1289,0.863,1290,1.943,1291,3.371,1292,1.08,1293,1.355,1294,1.22,1295,0.918,1296,0.632,1297,1.266,1298,1.534,1299,1.22,1300,1.324,1301,0.564,1302,1.556,1303,1.003,1304,0.374,1305,1.275,1306,0.435,1307,0.435,1308,0.564,1309,0.328,1310,0.374,1311,0.833,1313,0.69,1314,0.435,1315,0.367,1316,0.378,1317,0.428,1318,0.395,1319,0.998,1320,1.08,1321,3.13,1322,0.564,1325,0.809,1326,0.564,1327,0.491,1328,1.08,1329,1.556,1330,0.564,1331,0.442,1332,1.22,1333,0.564,1335,0.564,1336,0.833,1337,0.382,1338,0.479,1339,0.428,1340,0.395,1341,0.363,1342,0.382,1343,0.74,1344,0.342,1346,0.564,1347,0.45,1348,0.564,1349,0.479,1353,0.564,1354,0.564,1355,0.564,1356,0.416,1357,0.337,1358,0.386,1359,0.468,1403,0.564,1409,0.354,1424,0.442,1466,0.311,1503,0.468,1509,0.45,1512,0.382,1527,0.37,1541,0.442,1567,0.607,1576,0.386,1577,0.52,1595,0.435,1615,0.435,1616,0.416,1617,0.37,1621,0.611,1632,0.4,1636,0.328,1666,0.416,1742,0.45,1748,0.808,1752,1.077,1941,0.435,1960,0.416,1978,0.459,2185,0.918,2332,0.45,2338,0.459,2386,2.021,2491,1.142,2644,0.808,2681,3.424,2686,2.42,2688,3.881,2689,2.66,2755,0.54,2768,0.491,2776,0.504,2788,0.428,2812,0.416,2834,0.428,2874,0.442,3060,0.564,3289,0.564,3315,1.142,3320,0.468,3326,1.08,3327,1.393,3336,0.564,3731,1.556,3916,0.596,3934,0.644,3935,0.644,3936,0.644,3937,0.644,3938,1.235,3939,1.235,3940,0.644,3941,0.644,3942,1.235,3943,1.235,3944,0.644,3945,1.235,3946,0.644,3947,2.281,3948,0.644,3949,0.644,3950,1.235,3951,0.644,3952,1.235]],["component/125",[6,0.35]],["keyword/125",[]],["title/126-1",[689,53.952]],["name/126-1",[]],["text/126-1",[]],["component/126-1",[]],["keyword/126-1",[]],["title/126-2",[701,25.382,801,42.691]],["name/126-2",[]],["text/126-2",[]],["component/126-2",[]],["keyword/126-2",[]],["title/126-3",[1118,42.181,1132,30.98]],["name/126-3",[]],["text/126-3",[]],["component/126-3",[]],["keyword/126-3",[]],["title/126-4",[524,14.831,632,25.051,1132,25.843]],["name/126-4",[]],["text/126-4",[]],["component/126-4",[]],["keyword/126-4",[]],["title/126",[32,17.738,573,22.748,1132,25.843]],["name/126",[1132,1.285]],["text/126",[4,0.92,6,0.806,9,1.458,17,3.471,23,1.968,24,0.898,32,3.803,34,4.432,35,1.104,38,1.724,50,1.649,70,1.656,78,1.334,84,1.553,89,2.456,98,2.312,99,2.519,113,1.251,120,4.221,122,1.108,125,2.248,126,0.92,139,3.365,140,1.108,146,1.876,157,1.773,164,3.095,168,1.628,179,2.482,197,1.918,200,1.233,220,1.453,228,1.2,229,1.358,232,1.334,244,3.077,251,0.83,255,1.929,269,1.997,288,1.084,300,0.997,306,1.233,310,3.047,312,1.552,338,3.472,351,2.456,356,1.09,376,1.963,377,1.484,383,1.025,392,3.122,395,1.078,407,1.073,408,1.951,411,2.822,412,0.971,413,1.324,416,1.716,429,1.946,438,1.09,439,0.895,440,1.084,449,1.2,471,0.975,473,1.108,508,1.576,519,2.02,521,1.473,522,1.261,523,0.916,524,2.854,527,2.648,568,1.121,573,4.298,575,1.323,576,1.29,585,0.942,597,1.412,613,1.653,632,1.051,652,1.682,659,1.476,664,1.323,670,1.127,671,0.935,687,2.186,693,1.323,699,1.334,701,2.39,702,3.225,723,1.27,730,1.576,733,1.056,742,1.09,743,1.114,745,1.476,755,1.224,758,1.929,759,2.107,760,2.109,773,2.571,782,1.323,783,1.251,791,1.886,801,3.384,802,2.092,806,5.803,816,1.261,837,1.413,884,1.358,901,1.835,927,4.441,932,1.625,975,1.532,1019,1.251,1077,1.919,1079,1.127,1085,1.459,1086,3.617,1088,2.092,1089,1.108,1090,3.795,1092,3.57,1096,1.532,1110,1.169,1127,1.27,1132,2.917,1133,3.157,1134,5.477,1135,3.245,1136,1.886,1137,1.835,1138,1.835,1139,1.835,1140,4.447,1141,4.055,1142,1.653,1143,1.886,1144,1.412,1145,5.669,1146,5.682,1147,2.539,1148,2.431,1149,2.107,1150,3.884,1151,1.29,1152,1.945,1153,3.245,1154,1.427,1155,1.102,1156,1.28,1157,2.949,1158,2.107,1159,1.886,1160,1.576,1161,1.6,1162,1.459,1163,2.107,1164,2.107,1165,2.603,1166,2.712,1167,1.945,1168,1.715,1169,1.532,1170,1.301,1171,1.682,1172,1.79,1173,1.682,1174,2.107,1175,4.24,1176,1.553,1177,2.107,1178,1.715,1179,1.653,1180,2.107,1181,1.513,1182,2.107,1183,1.312,1184,1.886,1185,1.28,1186,2.107,1187,1.6,1188,1.79,1189,1.398]],["component/126",[6,0.35]],["keyword/126",[]],["title/127-1",[689,53.952]],["name/127-1",[]],["text/127-1",[]],["component/127-1",[]],["keyword/127-1",[]],["title/127-2",[1190,44.3]],["name/127-2",[]],["text/127-2",[]],["component/127-2",[]],["keyword/127-2",[]],["title/127-3",[188,30.031,1191,38.822]],["name/127-3",[]],["text/127-3",[]],["component/127-3",[]],["keyword/127-3",[]],["title/127-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/127-4",[]],["text/127-4",[]],["component/127-4",[]],["keyword/127-4",[]],["title/127-5",[523,26.178,1193,34.99]],["name/127-5",[]],["text/127-5",[]],["component/127-5",[]],["keyword/127-5",[]],["title/127-6",[205,18.23,269,18.026,347,17.261,1127,25.973]],["name/127-6",[]],["text/127-6",[]],["component/127-6",[]],["keyword/127-6",[]],["title/127-7",[125,28.363,351,17.916]],["name/127-7",[]],["text/127-7",[]],["component/127-7",[]],["keyword/127-7",[]],["title/127-8",[524,17.779,701,25.382]],["name/127-8",[]],["text/127-8",[]],["component/127-8",[]],["keyword/127-8",[]],["title/127-9",[99,18.12,121,20.053,351,14.945]],["name/127-9",[]],["text/127-9",[]],["component/127-9",[]],["keyword/127-9",[]],["title/127-10",[351,14.945,454,21.666,3317,44.955]],["name/127-10",[]],["text/127-10",[]],["component/127-10",[]],["keyword/127-10",[]],["title/127-11",[351,17.916,3317,53.891]],["name/127-11",[]],["text/127-11",[]],["component/127-11",[]],["keyword/127-11",[]],["title/127-12",[351,17.916,454,25.973]],["name/127-12",[]],["text/127-12",[]],["component/127-12",[]],["keyword/127-12",[]],["title/127-13",[35,18.339,2685,50.022]],["name/127-13",[]],["text/127-13",[]],["component/127-13",[]],["keyword/127-13",[]],["title/127-14",[223,24.926,429,20.483,810,27.189]],["name/127-14",[]],["text/127-14",[]],["component/127-14",[]],["keyword/127-14",[]],["title/127-15",[155,32.027,210,30.183]],["name/127-15",[]],["text/127-15",[]],["component/127-15",[]],["keyword/127-15",[]],["title/127",[221,29.733,691,32.401]],["name/127",[221,0.705,691,0.768]],["text/127",[6,1.916,7,1.43,9,1.567,23,3.781,27,0.528,28,0.596,29,0.549,32,1.998,35,1.723,38,0.488,50,2.216,69,1.398,74,1.029,82,1.818,83,0.633,99,1.907,101,0.614,109,0.767,111,0.514,119,0.904,121,2.63,124,1.503,125,0.483,126,2.307,129,0.852,133,1.169,139,0.494,140,1.745,142,0.835,150,0.893,153,0.562,157,1.906,168,0.461,169,1.383,174,1.555,175,0.674,178,0.681,179,1.382,180,1.365,185,0.978,187,2.764,188,2.822,189,0.852,190,0.605,194,0.469,196,0.779,198,2.334,199,0.479,205,2.062,210,0.514,211,0.79,214,0.623,216,1.97,220,1.065,221,2.179,222,0.767,223,2.808,228,0.584,229,0.661,231,2.083,232,1.204,234,0.517,239,0.473,246,0.639,249,0.989,250,0.559,251,1.918,256,0.592,257,0.719,261,0.865,262,1.862,269,2.965,271,0.918,275,0.559,283,0.819,286,1.382,288,1.367,294,0.674,300,0.485,301,1.812,310,1.448,311,0.569,312,1.668,323,1.317,338,1.164,347,2.402,351,3.219,355,0.573,363,0.467,371,0.681,377,0.42,407,0.968,409,0.661,410,1.281,411,0.875,413,2.589,414,0.688,416,0.485,417,0.528,418,0.618,429,2.687,430,0.618,439,0.436,440,0.528,445,0.522,454,2.441,462,1.698,468,0.639,478,0.893,491,1.906,497,0.609,501,1.246,502,1.656,503,0.514,506,0.695,507,0.655,514,0.779,520,2.568,521,1.793,524,2.219,525,0.618,526,0.767,532,2.524,535,0.918,541,0.871,557,0.562,565,0.948,570,0.49,573,0.465,575,1.194,581,1.332,582,0.65,583,2.958,585,0.459,589,0.588,590,0.6,594,0.688,606,0.695,616,1.8,631,0.688,632,0.512,641,0.655,642,0.477,647,2.281,649,1.025,664,2.447,666,1.048,670,1.017,681,1.668,682,3.648,686,1.592,688,0.871,690,1.262,691,4.705,692,1.974,694,1.523,695,0.852,698,2.468,701,2.228,702,1.146,709,1,714,0.614,723,0.618,726,0.639,739,4.003,741,0.573,749,0.592,751,1.252,755,2.265,760,0.84,762,0.779,765,3.208,777,0.871,789,2.065,797,0.688,804,0.835,807,0.947,809,1.668,810,0.555,822,0.539,829,0.49,840,0.618,843,0.584,848,1.522,849,0.668,874,0.819,884,0.661,909,0.779,924,1.237,927,0.93,932,0.791,952,0.893,974,0.779,985,0.819,992,1.578,1019,0.609,1031,0.552,1053,0.805,1057,0.555,1077,3.562,1079,1.017,1086,0.45,1100,0.661,
11106,0.719,1110,1.055,1115,1.765,1116,3.114,1122,1.735,1127,1.146,1134,0.592,1147,1.414,1151,0.628,1155,2.039,1161,0.779,1168,2.7,1181,0.736,1183,0.639,1190,1.956,1193,0.596,1199,0.592,1211,2.201,1216,0.469,1247,0.576,1256,1.288,1258,1.382,1260,0.565,1271,0.736,1287,0.695,1295,1.615,1309,0.596,1310,1.764,1317,0.779,1331,0.805,1339,0.779,1340,1.332,1343,0.702,1344,0.623,1352,0.719,1357,1.59,1361,3.489,1394,3.473,1424,0.805,1442,1.302,1453,1.702,1463,0.596,1466,1.829,1497,1.194,1500,0.576,1502,0.746,1508,0.893,1511,1.467,1512,1.288,1527,0.674,1559,0.6,1567,0.576,1589,0.644,1593,1.383,1605,0.893,1617,3.473,1619,1.8,1621,0.58,1635,0.871,1650,0.623,1663,0.805,1664,0.695,1665,0.633,1667,0.779,1680,0.791,1713,0.727,1722,3.056,1736,2.413,1778,1.959,1850,0.791,1885,1.026,1893,0.852,1894,0.918,1938,0.71,1941,0.791,1960,0.756,1962,0.893,1964,0.791,1966,1.026,1989,1.026,2035,0.852,2060,2.889,2109,0.688,2111,1.988,2136,0.852,2179,1.026,2182,0.779,2196,0.819,2269,1.026,2274,1.026,2278,0.982,2323,1.756,2330,0.852,2338,1.547,2339,0.918,2372,0.727,2413,1.026,2482,0.644,2488,1.82,2632,0.746,2643,0.779,2686,2.889,2806,0.871,2811,0.893,2849,0.623,2851,2.756,2874,0.805,3248,0.947,3261,0.982,3317,1.702,3318,1.084,3319,1.084,3320,1.58,3321,1.084,3322,1.084,3323,1.084,3324,1.084,3325,2.009,3326,2.657,3327,2.969,3328,1.084,3329,1.084,3330,7.49,3331,1.084,3332,1.084,3333,1.084,3334,1.084,3335,1.084,3336,1.901,3337,2.009,3338,1.084,3339,1.084,3340,1.084,3341,1.084,3342,1.084,3343,1.084,3344,3.506,3345,2.009,3346,2.009,3347,2.809,3348,1.084,3349,1.084,3350,1.084,3351,2.009,3352,1.084,3353,2.009,3354,1.084,3355,2.809,3356,2.009,3357,1.084,3358,1.084,3359,2.009,3360,2.009,3361,1.084,3362,1.084,3363,2.009,3364,2.009,3365,1.084,3366,1.084,3367,1.084,3368,1.084,3369,0.982,3370,1.084,3371,2.009,3372,1.084,3373,1.084,3374,1.084,3375,1.084,3376,1.084,3377,1.084,3378,1.084,3379,0.918,3380,0.918,3381,1.084,3382,1.084,3383,1.084,3384,2.009,3385,1.084,3386,2.009,3387,1.084,3388,1.084,3389,1.084,3953,1.173,3954,1.173]],["component/127",[6,0.35]],["keyword/127",[]],["title/128-1",[10,39.186,733,30.183]],["name/128-1",[]],["text/128-1",[]],["component/128-1",[]],["keyword/128-1",[]],["title/128-2",[1190,44.3]],["name/128-2",[]],["text/128-2",[]],["component/128-2",[]],["keyword/128-2",[]],["title/128-3",[188,30.031,1191,38.822]],["name/128-3",[]],["text/128-3",[]],["component/128-3",[]],["keyword/128-3",[]],["title/128-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/128-4",[]],["text/128-4",[]],["component/128-4",[]],["keyword/128-4",[]],["title/128-5",[139,36.226]],["name/128-5",[]],["text/128-5",[]],["component/128-5",[]],["keyword/128-5",[]],["title/128-6",[523,26.178,1193,34.99]],["name/128-6",[]],["text/128-6",[]],["component/128-6",[]],["keyword/128-6",[]],["title/128-7",[445,30.654,1212,42.181]],["name/128-7",[]],["text/128-7",[]],["component/128-7",[]],["keyword/128-7",[]],["title/128-8",[524,22.19]],["name/128-8",[]],["text/128-8",[]],["component/128-8",[]],["keyword/128-8",[]],["title/128-9",[524,17.779,1248,43.794]],["name/128-9",[]],["text/128-9",[]],["component/128-9",[]],["keyword/128-9",[]],["title/128-10",[351,17.916,524,17.779]],["name/128-10",[]],["text/128-10",[]],["component/128-10",[]],["keyword/128-10",[]],["title/128-11",[484,21.666,702,21.666,1015,23.449]],["name/128-11",[]],["text/128-11",[]],["component/128-11",[]],["keyword/128-11",[]],["title/128-12",[426,39.563,1565,49.002]],["name/128-12",[]],["text/128-12",[]],["component/128-12",[]],["keyword/128-12",[]],["title/128-13",[1296,35.239,1566,40.788]],["name/128-13",[]],["text/128-13",[]],["component/128-13",[]],["keyword/128-13",[]],["title/128-14",[427,36.582,520,23.467]],["name/128-14",[]],["text/128-14",[]],["component/128-14",[]],["keyword/128-14",[]],["title/128-15",[210,37.672]],["name/128-15",[]],["text/128-15",[]],["component/128-15",[]],["keyword/128-15",[]],["title/128",[249,22.409,250,23.462,484,18.585,1015,20.113]],["name/128",[249,0.4,250,0.419,484,0.332,1015,0.359]],["text/128",[4,1.112,6,1.113,7,0.235,9,0.903,13,0.546,14,0.318,19,0.254,20,0.256,21,0.419,23,2.692,24,0.958,27,0.818,28,0.254,29,0.658,30,0.27,32,2.136,33,0.31,34,0.226,35,1.525,36,0.676,37,0.664,38,0.756,40,2.68,41,0.246,46,0.556,48,0.364,51,0.448,61,0.392,68,0.296,70,0.562,74,0.237,77,0.285,78,0.277,81,0.357,82,0.24,86,0.3,98,1.372,99,3.154,101,0.262,111,0.616,113,0.26,119,1.475,120,0.896,121,0.491,124,1.899,125,1.461,126,1.354,127,0.27,128,0.337,133,1.121,138,0.523,139,1.083,140,1.894,144,0.658,153,0.24,155,1.026,157,1.517,164,0.212,167,0.288,168,1.393,169,0.318,170,0.238,173,0.793,174,0.256,183,0.31,184,0.85,185,1.971,187,0.31,188,2.125,194,0.881,196,0.332,197,0.65,198,1.188,199,1.322,200,0.495,201,0.332,202,0.586,204,0.532,205,0.951,206,0.364,210,0.797,211,1.288,213,0.541,214,1.548,216,1.145,217,0.907,220,1.345,221,0.785,222,0.327,223,0.42,224,0.894,226,0.3,227,0.616,228,0.482,230,0.272,233,0.323,238,0.633,239,0.567,241,0.536,243,0.293,246,0.527,249,2.856,250,1.388,251,1.595,258,0.327,259,3.54,261,1.743,268,0.766,269,1.185,275,0.238,280,0.327,281,0.894,286,0.827,288,1.457,292,0.26,293,0.593,294,1.267,300,1.468,301,0.739,303,0.327,304,0.3,305,0.92,3
107,0.303,309,0.532,310,0.537,311,0.882,312,1.091,313,0.337,314,0.882,324,0.45,325,0.31,326,0.73,327,0.266,328,0.489,337,0.6,338,0.518,340,0.31,343,1.861,344,0.262,347,1.863,351,2.038,356,0.438,357,1.279,363,0.199,365,0.546,366,0.214,375,1.182,376,1.679,377,1.043,379,0.337,383,0.599,387,0.51,388,0.51,392,0.711,395,0.224,397,0.332,403,0.372,404,0.871,406,0.816,408,0.235,409,0.546,410,1.083,411,1.949,412,0.732,413,2.111,414,0.293,415,0.288,416,0.752,417,0.633,418,0.741,424,0.489,426,0.808,429,0.345,430,0.51,436,0.337,437,0.492,438,0.997,440,0.225,445,1.297,450,0.436,451,0.29,453,0.327,454,0.189,459,0.27,462,0.28,473,0.23,474,0.349,484,3.812,489,1.885,491,0.214,492,2.459,493,0.27,497,0.26,499,0.219,501,0.904,506,0.296,509,0.492,511,0.31,512,0.647,515,0.323,519,0.358,520,0.62,521,0.5,523,0.535,524,2.814,525,1.162,527,0.47,531,0.296,532,0.209,537,0.303,538,0.307,547,0.285,555,1.539,557,0.464,565,0.422,568,0.45,570,1.482,573,0.198,575,0.772,584,0.77,585,0.379,587,0.223,592,0.323,594,1.066,595,0.593,596,0.314,599,1.066,604,0.781,606,0.574,609,1.814,610,0.381,612,0.556,614,0.514,615,0.349,617,0.616,619,1.115,625,0.833,637,0.27,639,0.937,641,0.28,642,0.393,647,1.128,649,0.867,660,0.772,666,1.562,668,0.332,669,4.781,670,1.202,671,1.979,672,0.275,676,0.467,679,1.221,682,0.282,686,0.925,691,0.235,692,1.138,696,1.221,698,0.536,699,0.277,701,0.518,702,2.006,703,1.451,709,0.23,712,1.71,723,0.264,725,1.851,726,0.272,728,0.364,733,0.797,736,0.485,739,0.266,741,1.254,742,0.226,748,1.449,749,0.489,751,0.579,755,2.809,756,2.838,758,0.846,759,1.481,760,3.772,765,1.202,771,0.404,774,0.532,775,1.2,780,0.272,781,2.812,783,1.145,785,1.232,786,0.527,789,0.272,790,0.282,791,0.44,794,0.489,796,0.28,800,0.307,813,0.327,816,0.262,818,0.253,822,2.131,827,0.833,829,0.921,834,2.09,835,0.349,837,1.309,838,0.318,845,0.285,849,0.285,852,0.479,855,0.842,881,0.758,883,0.332,887,0.678,903,1.267,922,0.51,927,1.642,930,1.044,968,0.323,979,1.562,982,1.481,989,1.476,992,0.26,996,0.285,1015,4.464,1019,0.26,1031,0.235,1032,1.127,1045,0.332,1055,0.58,1077,2.081,1079,0.453,1080,1.267,1084,0.532,1086,3.35,1088,0.917,1089,0.23,1091,0.759,1098,0.772,1108,0.343,1110,0.682,1112,0.293,1113,0.275,1114,0.392,1116,0.418,1117,0.256,1120,0.332,1122,0.643,1124,0.458,1126,0.957,1127,0.51,1132,0.225,1134,0.489,1139,0.381,1144,0.568,1147,3.075,1148,1.292,1154,0.296,1155,2.333,1156,1.721,1157,0.64,1165,0.608,1179,0.343,1181,0.314,1183,1.586,1189,0.29,1190,0.258,1192,0.241,1194,0.26,1195,0.223,1202,0.392,1204,0.793,1207,0.99,1209,0.536,1211,2.389,1213,0.343,1215,0.924,1216,0.881,1217,0.293,1218,0.293,1219,0.546,1220,0.58,1223,0.272,1225,0.608,1226,1.21,1234,0.307,1237,0.318,1240,0.296,1241,0.282,1242,0.247,1244,0.296,1246,0.296,1247,0.246,1248,4.492,1251,1.055,1253,1.154,1254,0.824,1258,0.44,1273,0.277,1287,0.296,1289,0.676,1290,0.893,1296,0.495,1303,0.282,1309,0.715,1316,0.568,1325,0.64,1337,0.296,1339,0.332,1341,0.282,1344,0.514,1351,0.633,1356,0.907,1357,0.507,1364,0.332,1369,0.349,1377,0.824,1394,1.044,1400,0.364,1409,2.26,1433,0.314,1437,0.31,1439,0.624,1445,0.275,1460,1.172,1463,0.715,1466,2.349,1467,1.077,1468,1.306,1469,1.077,1470,1.077,1471,2.059,1472,1.306,1473,1.221,1474,1.306,1475,1.077,1476,1.077,1477,1.279,1478,2.228,1479,1.279,1481,3.429,1485,2.008,1488,1.491,1489,2.414,1490,2.426,1497,0.275,1500,0.246,1514,0.364,1540,0.356,1541,0.343,1549,0.356,1559,0.93,1565,0.356,1566,0.296,1567,0.691,1568,0.364,1569,0.719,1570,1.247,1571,0.404,1572,1.247,1573,0.676,1574,0.437,1575,0.392,1576,0.58,1577,0.404,1578,0.404,1579,0.381,1582,0.392,1583,1.613,1584,0.343,1585,0.593,1586,0.268,1587,0.71,1588,0.332,1589,0.275,1590,0.343,1591,0.653,1592,0.343,1593,0.616,1594,0.332,1595,0.337,1596,0.343,1597,0.303,1598,0.303,1599,0.719,1600,0.437,1601,0.364,1602,0.381,1603,0.437,1604,1.442,1605,0.381,1606,0.364,1607,0.437,1610,0.419,1611,0.758,1612,0.364,1613,0.437,1614,0.437,1615,0.337,1616,0.323,1617,1.861,1618,0.364,1619,1.306,1620,0.437,1621,0.247,1622,0.437,1623,0.356,1624,0.381,1625,0.437,1626,0.852,1627,2.522,1628,0.608,1629,0.437,1630,0.404,1631,0.437,1633,0.437,1634,0.381,1635,0.719,1636,1.803,1637,0.643,1638,0.437,1639,0.343,1640,0.437,1641,0.437,1642,0.392,1644,0.437,1645,0.392,1646,0.437,1647,0.332,1648,0.364,1650,0.266,1651,0.392,1657,0.6,1658,0.28,1660,0.364,1662,0.343,1663,0.343,1664,0.296,166
15,0.27,1666,0.323,1667,0.332,1669,0.664,1670,1.726,1671,2.476,1672,0.437,1673,0.437,1674,0.437,1675,0.437,1676,0.337,1677,0.372,1678,0.372,1679,1.867,1680,0.337,1681,0.419,1682,1.321,1687,3.791,1688,0.758,1689,0.437,1690,0.356,1691,0.437,1694,0.846,1695,1.177,1696,1.733,1697,1.589,1698,0.437,1699,0.437,1700,0.437,1701,0.437,1702,0.437,1703,0.437,1704,0.437,1705,0.327,1706,0.404,1707,0.332,1710,0.392,1711,0.3,1718,1.207,1719,0.437,1720,0.437,1721,1.001,1722,1.764,1723,1.23,1724,0.643,1725,0.327,1726,0.437,1727,0.676,1728,0.364,1729,0.381,1730,0.437,1731,0.689,1732,0.437,1733,0.437,1735,0.782,1737,0.372,1740,0.737,1741,0.392,1742,0.349,1743,0.356,1744,0.364,1745,0.437,1746,0.381,1747,0.392,1748,0.327,1749,0.689,1750,0.381,1752,1.101,1755,0.437,1756,0.419,1757,0.437,1758,0.437,1759,0.437,1760,0.689,1761,0.437,1762,0.437,1763,0.437,1764,2.262,1765,0.419,1770,0.419,1771,0.381,1772,0.392,1777,0.392,1778,0.323,1779,0.327,1780,0.314,1781,0.318,1783,0.323,1784,0.437,1785,0.437,1786,0.392,1787,0.518,1788,0.349,1789,0.437,1790,0.437,1791,0.437,1792,0.437,1793,0.437,1897,1.071,1930,1.487,1938,0.303,1947,0.404,2276,0.318,2482,0.772,2505,0.392,2685,0.364,2878,0.703,2902,0.404,2972,0.314,3190,0.372,3226,0.437,3256,0.404,3412,0.381,3433,0.462,3434,0.419,3435,0.462,3436,0.419,3437,1.726,3438,0.462,3439,0.419,3440,0.419,3441,0.419,3442,0.419,3443,0.419,3444,0.419,3445,0.419,3446,0.419,3447,0.419,3448,0.462,3449,0.462,3450,0.419,3451,0.419,3452,0.462,3453,0.419,3454,0.462,3455,0.462,3456,0.419,3457,0.462,3458,0.462,3459,0.462,3460,0.462,3461,0.419,3462,0.462,3463,0.462,3466,0.462,3467,0.462,3468,0.462,3469,0.462,3470,0.462,3471,0.462,3472,0.462,3473,2.011,3474,0.323,3475,0.323,3476,0.323,3477,0.643,3478,0.633,3479,0.343,3480,0.343,3591,0.392,3640,0.381,3955,0.437,3956,0.895]],["component/128",[6,0.35]],["keyword/128",[]],["title/129-1",[10,39.186,733,30.183]],["name/129-1",[]],["text/129-1",[]],["component/129-1",[]],["keyword/129-1",[]],["title/129-2",[1190,44.3]],["name/129-2",[]],["text/129-2",[]],["component/129-2",[]],["keyword/129-2",[]],["title/129-3",[188,30.031,1191,38.822]],["name/129-3",[]],["text/129-3",[]],["component/129-3",[]],["keyword/129-3",[]],["title/129-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/129-4",[]],["text/129-4",[]],["component/129-4",[]],["keyword/129-4",[]],["title/129-5",[139,36.226]],["name/129-5",[]],["text/129-5",[]],["component/129-5",[]],["keyword/129-5",[]],["title/129-6",[523,26.178,1193,34.99]],["name/129-6",[]],["text/129-6",[]],["component/129-6",[]],["keyword/129-6",[]],["title/129-7",[40,32.212,604,24.38]],["name/129-7",[]],["text/129-7",[]],["component/129-7",[]],["keyword/129-7",[]],["title/129-8",[28,34.99,221,29.733]],["name/129-8",[]],["text/129-8",[]],["component/129-8",[]],["keyword/129-8",[]],["title/129-9",[442,42.691,717,40.363]],["name/129-9",[]],["text/129-9",[]],["component/129-9",[]],["keyword/129-9",[]],["title/129-10",[32,21.264,411,19.835]],["name/129-10",[]],["text/129-10",[]],["component/129-10",[]],["keyword/129-10",[]],["title/129-11",[35,18.339,604,24.38]],["name/129-11",[]],["text/129-11",[]],["component/129-11",[]],["keyword/129-11",[]],["title/129-12",[99,21.722,855,41.232]],["name/129-12",[]],["text/129-12",[]],["component/129-12",[]],["keyword/129-12",[]],["title/129-13",[1296,35.239,1566,40.788]],["name/129-13",[]],["text/129-13",[]],["component/129-13",[]],["keyword/129-13",[]],["title/129-14",[427,36.582,520,23.467]],["name/129-14",[]],["text/129-14",[]],["component/129-14",[]],["keyword/129-14",[]],["title/129-15",[210,37.672]],["name/129-15",[]],["text/129-15",[]],["component/129-15",[]],["keyword/129-15",[]],["title/129",[249,26.124,250,27.352,604,20.337]],["name/129",[249,0.4,250,0.419,584,0.372,604,0.311]],["text/129",[4,1.225,6,1.026,13,0.612,14,0.358,19,0.286,20,0.288,23,3.599,24,0.585,27,2.145,28,1.443,29,0.507,30,0.586,32,2.75,33,0.673,34,0.255,35,1.587,38,1.016,40,0.734,51,0.26,62,1.012,74,0.266,81,0.901,82,0.52,98,0.665,99,1.88,111,0.247,113,0.292,119,0.84,120,0.993,121,0.706,122,0.259,124,1.76,125,1.17,126,1.359,127,0.304,133,1.728,138,0.304,139,1.03,140,1.637,141,1.13,146,0.491,154,0.265,155,0.73,156,0.368,157,1.522,165,0.885,167,0.323,168,0.96,170,0.268,173,0.246,174,0.555,179,0.256,183,0.973,184,0.507,185,1.601,188,1.831,196,0.374,197,0.726,198,1.313,199,0.825,200,0.288,201,1.042,202,0.657,204,0.596,205,2.727,206,0.409,210,0.247,211,0.204,213,0.315,214,1.509,216,1.269,217,1.012,218,0.312,220,0.708,221,1.226,222,0.368,223,0.681,224,0.358,226,0.337,227,0.358,228,0.782,230,0.306,232,0.601,238,0.368,239,0.632,240,0.455,241,0.312,243,0.92,244,0.885,246,0.306,249,4.354,250,1.851,251,2.122,256,0.284,258,0.368,259,2.532,261,1.786,268,1.331,269,2.641,276,0.629,279,0.341,280,0.368,281,0.358,283,0.757,285,0.363,286,0.714,288,1.278,292,0.292,294,0.902,300,1.973,301,0.638,307,0.341,310,0.414,311,1.377,312,1.063,313,0.38,314,0.273,319,0.358,324,0.262,328,0.284,330,0.418,334,0.499,337,1.254,343,0.323,344,0.568,347,1.762,351,1.241,356,1.285,357,0.911,365,0.612,366,0.464,374,0.53,375,0.93,377,0.388,383,0.24,388,0.828,395,0.252,404,0.752,408,0.51,409,0.612,411,2.034,412,0.437,413,2.148,414,0.33,416,0.233,417,0.253,424,0.547,427,0.576,430,0.572,438,0.71,440,0.253,445,0.9,450,0.253,451,0.327,454,0.592,466,0.306,468,0.59,473,0.722,479,0.282,483,0.409,484,1.992,489,1.299,491,0.865,492,2.637,499,0.247,501,0.445,506,0.333,508,0.368,509,1.027,511,1.991,512,0.722,514,0.374,515,0.363,519,0.748,520,1.8,523,0.597,524,1.004,527,0.762,531,0.643,537,0.341,542,0.323,555,1.096,556,0.581,557,0.52,570,0.453,571,0.471,573,0.43,575,0.862,576,0.301,581,0.345,584,3.058,585,0.956,592,1.576,593,0.72,594,0.33,597,1.185,598,0.401,599,1.433,601,0.665,603,0.349,604,2.442,605,0.38,606,0.333,609,2.217,612,0.323,614,0.576,615,0.393,619,0.877,625,0.333,626,0.386,631,0.33,639,0.29,640,0.418,641,0.606,642,0.441,647,3.049,649,0.958,660,0.309,664,0.309,670,1.328,671,1.508,679,0.869,682,0.885,683,0.38,684,0.341,686,0.455,687,0.572,690,0.327,691,1.675,692,0.249,693,0.309,696,0.869,697,0.341,698,0.869,700,0.304,701,1.433,702,2.602,703,1.007,708,0.418,709,0.259,711,0.363,713,0.65,714,0.295,724,0.606,725,1.369,726,0.306,733,0.247,736,0.787,741,0.766,748,1.378,749,0.284,751,1.007,755,3.588,756,4.773,758,1.953,759,2.133,760,2.598,765,2.101,774,0.596,780,0.306,781,0.882,783,0.815,785,0.877,789,1.101,790,0.317,791,0.92,794,0.547,795,
10.358,796,0.606,797,0.636,799,0.393,800,0.345,816,0.295,822,1.124,827,1.448,829,0.453,834,1.748,837,1.625,845,0.32,851,0.732,852,0.278,855,1.211,874,0.393,883,0.72,903,0.902,905,0.386,922,0.297,927,1.214,930,0.623,979,1.716,981,0.315,982,1.242,989,0.623,992,0.292,996,0.32,1011,0.828,1015,1.714,1031,0.265,1032,0.673,1055,0.337,1073,0.401,1077,2.829,1079,0.946,1080,0.902,1084,0.309,1086,0.216,1089,0.259,1091,0.586,1094,0.547,1098,0.862,1110,0.526,1112,1.185,1113,0.309,1116,1.537,1117,0.555,1124,0.266,1126,0.877,1127,2.909,1132,0.488,1134,0.547,1140,1.077,1144,0.636,1147,1.137,1148,0.33,1154,0.333,1156,0.576,1157,1.619,1178,0.401,1183,2.596,1185,0.299,1189,0.629,1190,0.29,1192,0.271,1195,0.483,1204,0.612,1209,1.572,1211,0.911,1212,0.345,1215,0.798,1216,1.904,1217,0.33,1218,0.33,1219,0.317,1220,0.337,1221,0.409,1222,0.441,1223,0.59,1225,0.353,1226,0.596,1229,0.441,1234,0.345,1238,0.386,1241,0.317,1242,0.278,1246,0.93,1247,0.533,1248,0.358,1249,0.409,1251,0.327,1253,0.821,1254,0.92,1257,0.491,1258,3.212,1266,0.665,1267,0.327,1271,0.353,1273,0.601,1278,0.455,1282,0.349,1296,0.555,1303,1.14,1309,2.133,1310,0.629,1311,0.38,1316,0.33,1317,0.374,1325,0.92,1340,0.345,1342,0.93,1344,0.299,1356,0.363,1357,0.295,1358,0.65,1377,0.636,1390,0.709,1394,2.891,1400,0.409,1409,1.763,1433,0.681,1439,0.363,1445,0.309,1452,0.849,1454,0.772,1456,0.72,1460,0.699,1461,0.849,1462,0.849,1463,1.027,1464,0.849,1465,0.826,1466,0.271,1467,0.643,1468,0.93,1469,0.643,1470,0.643,1471,1.648,1472,0.93,1473,0.869,1474,0.93,1475,0.643,1476,0.643,1477,0.911,1478,1.648,1479,0.911,1480,0.826,1485,4.059,1488,2.065,1489,2.633,1490,0.312,1497,2.899,1499,0.374,1500,0.533,1503,0.409,1514,0.788,1517,1.151,1527,2.891,1541,0.386,1549,0.772,1559,0.288,1562,0.673,1565,0.401,1567,0.533,1568,0.409,1569,1.166,1570,0.744,1572,1.077,1573,0.393,1582,0.441,1584,0.386,1585,1.239,1586,0.581,1587,1.233,1588,0.374,1589,0.309,1590,0.386,1591,0.732,1592,0.386,1593,0.358,1594,0.374,1595,0.38,1596,0.386,1597,0.341,1598,0.341,1599,0.806,1601,0.409,1602,0.826,1604,0.368,1616,0.363,1617,2.045,1619,2.303,1636,0.286,1645,0.441,1647,0.72,1648,0.788,1650,1.074,1651,0.849,1657,1.761,1658,1.13,1660,0.409,1662,0.386,1663,0.386,1664,1.198,1665,0.586,1667,0.374,1671,0.699,1676,0.732,1679,2.332,1682,0.788,1688,0.441,1705,0.368,1711,0.337,1713,1.515,1714,0.72,1718,0.72,1722,1.48,1725,0.368,1740,1.861,1744,1.14,1747,0.441,1748,0.368,1749,0.401,1752,0.951,1754,0.401,1764,2.485,1768,0.363,1772,1.913,1773,0.908,1774,1.314,1775,0.908,1776,0.908,1777,0.849,1778,1.576,1779,1.027,1780,1.534,1781,0.998,1783,0.363,1787,0.301,1795,0.492,1796,0.441,1797,0.492,1798,0.826,1799,0.441,1800,0.948,1801,0.948,1802,0.492,1803,0.492,1804,0.492,1805,0.948,1806,0.492,1807,0.492,1808,0.353,1809,0.492,1811,0.441,1818,1.768,1823,0.492,1824,0.471,1825,0.948,1827,0.441,1829,0.948,1835,2.483,1839,0.948,1841,0.492,1846,0.455,1848,0.386,1849,0.492,1850,0.38,1851,0.492,1852,0.492,1853,0.492,1854,0.492,1855,0.492,1856,0.492,1857,0.492,1858,2.137,1859,0.492,1860,0.492,1865,0.492,1866,0.492,1870,0.471,1872,0.492,1873,0.492,1892,0.69,1893,0.409,1894,0.441,1895,0.492,1896,0.368,1897,3.197,1898,0.374,1899,0.409,1900,0.492,1901,0.492,1902,0.492,1903,0.409,1905,0.876,1906,0.876,1907,0.492,1908,0.353,1909,0.492,1910,0.441,1911,0.492,1912,0.492,1913,0.492,1914,0.492,1915,0.471,1916,0.409,1917,0.492,1918,0.374,1919,0.948,1920,0.492,1921,0.393,1922,0.492,1923,0.492,1928,0.323,1930,1.648,1933,0.732,1936,0.757,1939,0.806,1962,0.429,1996,0.341,2017,0.409,2042,0.455,2059,0.623,2074,0.441,2088,0.363,2196,0.393,2239,0.849,2276,0.358,2301,1.412,2309,1.195,2312,1.195,2380,0.418,2490,0.492,2722,0.455,2735,0.455,2757,0.455,2798,0.401,2851,0.788,2934,0.418,3175,0.429,3256,0.455,3272,0.429,3394,0.409,3397,0.876,3404,4.373,3406,0.876,3407,0.826,3408,0.876,3412,1.195,3415,0.876,3434,0.471,3436,0.471,3437,1.229,3439,0.471,3440,0.471,3441,0.471,3442,0.471,3443,0.471,3444,0.471,3445,0.471,3446,0.471,3447,0.471,3450,0.471,3451,0.471,3453,0.471,3456,0.471,3473,5.883,3474,0.699,3475,0.699,3476,0.699,3477,1.342,3478,1.322,3479,1.387,3480,0.744,3481,0.52,3487,1.229,3490,0.948,3491,0.52,3492,0.52,3493,1.002,3494,0.52,3495,0.52,3496,0.908,3497,0.52,3498,0.52,3499,0.52,3500,0.52,3501,1.002,3502,0.52,3503,0.52,3504,0.52,3505,0.52,3506,0.52,3507,0.52,3508,0.52,3509,0.429,3510,0.52,3511,1.002,3512,0.52,3513,0.826,3514,0.826,3515,0.826,3516,0.826,3517,0.52,3518,0.52,3519,0.52,3520,0.52,3521,0.52,3522,0.52,3523,0.52,3524,1.002,3525,1.002,3526,0.52,3527,0.52,3528,0.52,3529,0.52,3530,1.002,3531,0.52,3532,0.52,3533,0.52,3534,0.52,3535,0.52,3536,0.52,3537,0.52,3538,0.52,3539,0.52,3540,0.52,3541,0.52,3542,0.52,3543,0.52,3591,0.441,3615,0.441,3617,0.441,3640,0.429,3955,0.492,3957,0.563,3958,0.563,3959,0.563,3960,0.563]],["component/129",[6,0.35]],["keyword/129",[]],["title/130-1",[10,48.908]],["name/130-1",[]],["text/130-1",[]],["component/130-1",[]],["keyword/130-1",[]],["title/130-2",[1190,44.3]],["name/130-2",[]],["text/130-2",[]],["component/130-2",[]],["keyword/130-2",[]],["title/130-3",[188,30.031,1191,38.822]],["name/130-3",[]],["text/130-3",[]],["component/130-3",[]],["keyword/130-3",[]],["title/130-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/130-4",[]],["text/130-4",[]],["component/130-4",[]],["keyword/130-4",[]],["title/130-5",[139,36.226]],["name/130-5",[]],["text/130-5",[]],["component/130-5",[]],["keyword/130-5",[]],["title/130-6",[523,26.178,1193,34.99]],["name/130-6",[]],["text/130-6",[]],["component/130-6",[]],["keyword/130-6",[]],["title/130-7",[205,25.478,1924,53.891]],["name/130-7",[]],["text/130-7",[]],["component/130-7",[]],["keyword/130-7",[]],["title/130-8",[232,31.808,311,27.863,324,26.716]],["name/130-8",[]],["text/130-8",[]],["component/130-8",[]],["keyword/130-8",[]],["title/130-9",[99,21.722,454,25.973]],["name/130-9",[]],["text/130-9",[]],["component/130-9",[]],["keyword/130-9",[]],["title/130-10",[144,32.212,507,38.47]],["name/130-10",[]],["text/130-10",[]],["component/130-10",[]],["keyword/130-10",[]],["title/130-11",[351,22.361]],["name/130-11",[]],["text/130-11",[]],["component/130-11",[]],["keyword/130-11",[]],["title/130-12",[220,24.123,1535,51.156
1]],["name/130-12",[]],["text/130-12",[]],["component/130-12",[]],["keyword/130-12",[]],["title/130-13",[1296,35.239,1566,40.788]],["name/130-13",[]],["text/130-13",[]],["component/130-13",[]],["keyword/130-13",[]],["title/130-14",[427,36.582,520,23.467]],["name/130-14",[]],["text/130-14",[]],["component/130-14",[]],["keyword/130-14",[]],["title/130-15",[210,37.672]],["name/130-15",[]],["text/130-15",[]],["component/130-15",[]],["keyword/130-15",[]],["title/130",[249,31.317,250,32.789]],["name/130",[249,0.742,250,0.777]],["text/130",[4,2.509,6,1.569,7,1.603,9,0.677,13,0.396,14,0.447,19,0.357,23,2.45,24,0.262,27,2.739,28,0.357,29,0.328,30,0.379,32,1.88,33,0.435,34,0.318,35,2.229,36,0.49,38,1.592,40,0.328,41,0.345,45,0.473,46,0.77,51,0.325,70,0.28,74,0.332,77,0.4,81,0.709,82,0.336,85,0.51,86,0.42,98,0.568,99,1.749,111,1.294,113,1.277,118,0.51,119,1.754,120,1,121,1.337,122,0.617,123,0.43,124,0.663,125,1.013,126,0.512,133,1.311,135,0.549,139,1.779,140,2.109,141,0.392,144,1.791,146,1.113,147,0.396,152,3.579,155,1.373,157,2.106,163,1.473,165,1.921,167,1.696,169,0.447,170,2.346,171,0.481,173,0.306,174,0.359,175,0.403,177,0.681,178,1.713,179,0.875,180,0.842,184,0.9,185,1.328,188,2.54,190,0.362,194,1.179,196,0.466,197,0.89,198,1.138,199,1.205,200,1.259,202,0.812,204,0.385,205,2.253,210,0.844,211,1.665,213,2.562,214,2.617,216,2.192,217,0.453,218,0.742,220,1.837,221,0.303,223,2.138,224,0.447,226,0.42,227,0.447,228,0.35,230,0.382,231,0.385,232,0.389,233,0.864,234,0.591,238,0.877,239,1.7,242,0.954,249,4.095,250,2.184,251,1.696,254,0.567,255,0.327,256,0.354,258,0.459,259,1.921,261,3.271,267,0.522,268,0.73,269,2.637,270,0.522,275,0.334,280,0.459,281,0.447,285,0.453,286,0.875,288,0.316,289,0.303,292,0.365,293,0.821,294,0.77,300,2.17,301,0.782,307,0.425,308,0.522,309,1.056,310,1.301,311,2.825,312,2.46,313,0.473,314,0.65,318,0.763,319,0.853,324,1.144,326,0.999,327,0.712,328,1.241,334,1.131,338,0.718,347,2.592,351,2.771,356,1.732,360,0.49,363,0.765,364,0.614,366,0.3,374,0.343,375,0.617,383,2.359,388,0.707,391,0.588,392,0.275,393,0.403,395,0.861,396,0.549,408,0.631,409,1.921,410,2.771,411,1.958,412,0.775,413,2.673,416,1.41,417,0.316,418,0.707,424,0.971,426,0.77,429,0.686,436,0.473,438,1.335,439,0.261,440,0.316,442,1.193,445,0.597,450,0.316,451,0.407,453,0.459,454,0.265,459,0.379,463,0.336,468,0.382,473,0.323,479,0.352,484,1.592,489,0.712,491,0.823,492,2.823,493,0.724,496,0.306,497,0.696,499,2.299,501,1.009,507,1.075,509,1.25,511,1.193,512,1.761,519,0.496,520,1.305,522,0.367,523,1.295,524,0.497,527,1.857,532,1.423,556,0.376,557,0.336,565,0.306,570,0.293,573,0.278,575,0.736,576,0.376,579,0.447,584,0.568,585,2.051,587,0.313,589,1.48,590,1.511,599,1.442,603,0.435,604,0.475,606,0.794,609,2.896,612,0.403,615,0.49,616,0.416,619,1.832,620,0.535,625,0.416,627,0.614,631,1.731,639,0.691,647,2.16,649,0.649,660,1.056,664,0.385,671,0.746,679,0.389,681,1.056,682,0.396,686,0.295,687,1.297,690,1.117,691,1.157,692,0.594,694,0.352,696,0.389,698,1.362,700,0.379,701,0.907,702,2.48,703,0.35,709,0.323,710,0.49,717,0.786,723,0.707,725,0.646,726,0.382,733,0.588,734,0.376,736,0.672,739,1.022,741,0.343,744,0.936,745,0.43,748,0.396,749,1.241,751,2.611,755,1.732,756,3.883,758,1.144,759,1.5,760,0.95,762,0.466,765,2.145,775,1.048,780,0.382,781,0.306,783,0.365,785,0.392,786,0.382,789,1.048,790,0.756,791,0.319,792,1.43,794,0.354,796,0.392,797,0.412,799,0.49,808,0.842,810,0.911,816,0.367,818,0.354,834,0.73,837,0.838,843,0.35,845,0.763,848,0.772,851,0.473,853,0.51,884,0.396,887,0.338,903,0.403,922,0.37,924,0.763,927,1.457,928,0.473,930,0.77,963,0.416,968,0.864,979,1.643,982,0.978,992,0.365,996,0.4,1011,0.37,1015,1.391,1032,0.435,1047,0.567,1055,0.42,1056,1.465,1057,0.635,1073,0.5,1074,0.549,1077,1.949,1080,3.642,1084,1.056,1086,0.269,1089,0.617,1091,1.594,1098,1.056,1106,0.43,1107,0.473,1108,0.92,1110,0.65,1113,0.385,1115,0.327,1116,0.579,1117,0.686,1122,0.88,1124,1.164,1134,0.354,1144,0.412,1146,0.5,1147,0.624,1148,0.786,1155,0.321,1157,0.61,1165,0.842,1170,0.379,1179,0.481,1181,0.842,1183,2.681,1185,0.373,1187,0.466,1189,0.778,1190,0.992,1192,0.338,1194,0.696,1195,1.095,1199,0.354,1204,1.085,1207,0.73,1208,0.567,1209,1.362,1211,3.944,1215,0.357,1216,0.536,1217,0.412,1218,0.412,1219,1.085,1220,0.42,1223,0.382,1225,0.842,1226,0.385,1227,0.473,1237,0.447,1238,0.481,1240,0.794,1242,0.663,1249,0.51,1253,1.287,1254,0.412,1257,0.606,1258,0.319,1271,0.441,1273,1.887,1289,0.49,1296,1.511,1309,0.681,1310,0.407,1313,0.392,1325,0.61,1336,0.904,1339,0.466,1341,0.396,1342,0.416,1344,2.034,1351,0.459,1356,1.241,1369,0.49,1377,1.442,1409,2.102,1423,0.51,1424,0.481,1433,0.842,1436,0.48
11,1437,1.193,1439,0.453,1460,0.453,1467,0.416,1468,0.416,1469,0.416,1470,0.416,1471,0.778,1472,0.416,1473,0.389,1474,0.416,1475,0.416,1476,0.416,1477,0.407,1478,0.778,1479,0.407,1485,0.831,1488,0.407,1489,0.786,1490,0.389,1500,0.345,1502,0.447,1517,0.4,1519,1.554,1527,0.403,1535,0.996,1536,0.567,1539,0.473,1561,0.522,1566,0.416,1567,0.945,1570,0.92,1584,0.481,1585,1.809,1586,0.376,1587,0.677,1588,0.466,1589,1.056,1590,0.481,1591,0.904,1592,0.481,1593,1.878,1594,0.466,1595,0.473,1596,0.481,1597,0.425,1598,0.425,1599,0.522,1601,0.51,1606,0.51,1609,0.614,1612,0.51,1616,0.453,1617,2.2,1621,0.347,1623,0.5,1635,0.522,1637,0.89,1657,0.831,1679,2.475,1680,0.473,1690,0.5,1692,0.588,1705,0.459,1707,0.466,1711,0.803,1714,0.466,1718,0.466,1728,0.974,1729,0.535,1731,0.954,1741,0.549,1742,0.49,1744,0.51,1750,0.535,1768,0.453,1787,0.376,1788,0.936,1796,1.049,1799,1.049,1811,0.549,1819,0.522,1842,0.567,1843,0.588,1864,0.535,1879,0.535,1896,0.459,1921,0.49,1924,1.049,1925,0.614,1926,0.588,1927,0.535,1928,0.77,1929,0.614,1930,0.473,1931,0.614,1932,0.549,1933,1.298,1934,1.172,1935,1.172,1936,0.936,1937,0.614,1938,0.812,1939,0.522,1940,0.954,1941,0.473,1942,1.172,1943,0.549,1944,0.614,1945,0.614,1946,0.614,1947,0.567,1948,0.614,1951,0.549,1952,1.172,1953,1.172,1954,0.614,1955,0.614,1956,0.614,1959,0.549,1961,0.614,1962,0.535,1967,0.936,1969,0.614,1970,0.567,1971,0.974,1976,0.614,1978,0.5,1979,0.614,1981,0.614,1982,0.588,1983,0.49,1984,0.614,1986,1.083,1987,0.549,1996,0.425,1997,0.614,1999,0.614,2000,0.614,2001,0.614,2014,1.172,2016,0.549,2017,0.51,2018,0.614,2019,0.614,2020,0.522,2021,0.567,2022,0.588,2023,0.549,2024,1.682,2026,0.5,2027,0.588,2028,0.614,2029,0.588,2032,0.614,2035,0.51,2168,0.614,2204,0.43,2276,0.853,2632,0.447,2695,0.549,2759,0.567,2936,0.549,2991,1.122,2992,1.049,3105,0.567,3175,0.535,3271,0.522,3369,1.611,3379,0.549,3380,0.549,3394,0.51,3404,0.535,3474,0.864,3475,0.864,3476,0.864,3477,0.89,3478,0.877,3496,0.588,3544,0.649,3545,0.649,3546,0.649,3547,0.649,3548,0.649,3549,0.649,3550,0.649,3551,1.239,3552,2.728,3553,1.239,3554,1.239,3555,1.239,3556,1.239,3557,2.728,3558,0.649,3559,0.649,3560,2.728,3561,0.649,3562,0.649,3563,0.649,3564,0.649,3565,0.649,3566,0.649,3567,0.649,3568,0.649,3569,0.649,3591,1.049,3640,1.021]],["component/130",[6,0.35]],["keyword/130",[]],["title/131-1",[205,25.478,473,31.666]],["name/131-1",[]],["text/131-1",[]],["component/131-1",[]],["keyword/131-1",[]],["title/131-2",[351,14.945,413,18.346,652,40.103]],["name/131-2",[]],["text/131-2",[]],["component/131-2",[]],["keyword/131-2",[]],["title/131-3",[351,14.945,1113,31.533,3570,50.22]],["name/131-3",[]],["text/131-3",[]],["component/131-3",[]],["keyword/131-3",[]],["title/131-4",[220,24.123,415,39.563]],["name/131-4",[]],["text/131-4",[]],["component/131-4",[]],["keyword/131-4",[]],["title/131",[691,32.401,698,38.13]],["name/131",[690,0.947,691,0.768]],["text/131",[4,2.478,6,0.651,9,1.177,19,0.668,23,3.593,31,0.917,32,1.499,35,1.6,46,1.387,50,0.523,51,0.608,70,0.964,78,0.728,81,0.89,92,0.787,99,1.31,101,1.752,109,0.859,111,1.058,119,0.546,120,1.361,125,1.38,126,0.921,132,0.917,133,1.289,138,0.709,139,1.018,140,1.54,141,0.734,155,1.558,157,1.776,160,0.741,164,1.418,179,1.523,185,0.591,188,0.573,190,1.244,193,0.815,197,2.244,198,1.921,199,0.536,200,0.672,205,2.707,210,0.576,211,1.216,215,0.872,216,0.682,218,0.728,220,0.46,221,1.794,223,1.453,229,1.361,232,0.728,244,1.888,246,1.314,249,5.345,250,4.075,251,1.671,256,0.663,259,2.736,261,2.582,269,3.131,275,0.626,285,0.847,286,0.598,288,4.334,289,0.567,300,1.719,301,0.981,304,0.787,306,0.672,307,0.796,310,0.501,312,0.904,325,0.815,334,0.604,336,0.825,347,2.8,351,3.145,356,1.515,374,0.641,377,0.864,385,0.935,393,1.387,395,1.08,404,0.629,408,1.576,409,1.361,410,2.737,411,0.695,413,3.076,427,0.698,429,1.194,430,0.693,438,1.092,439,1.244,449,1.202,450,1.507,454,0.496,463,1.157,468,2.642,472,0.872,473,0.604,484,1.263,489,1.283,492,2.421,496,1.053,500,0.847,501,0.539,503,0.576,506,0.778,508,0.859,519,0.486,520,0.448,521,0.858,522,0.687,523,0.499,524,0.623,527,0.637,532,0.549,550,1,552,2.021,563,0.886,568,1.123,570,0.549,576,1.293,581,1.479,585,0.944,591,0.859,596,0.825,601,0.805,605,0.886,608,1.1,609,1.83,619,0.57,637,0.709,647,3.075,649,0.443,655,2.383,666,0.633,671,1.611,676,2.897,679,0.728,682,0.741,687,0.693,690,3.487,691,3.055,693,0.721,696,0.728,698,4.739,699,1.337,701,3.674,702,1.83,703,1.202,709,0.604,713,0.787,714,0.687,723,0.693,724,2.321,725,1.615,733,2.127,740,0.836,741,0.641,745,0.805,748,0.74
11,749,1.218,751,0.994,755,2.466,757,1.686,758,1.558,759,2.111,760,1.875,765,1.567,774,1.325,781,1.053,783,0.682,785,0.734,786,0.715,788,0.787,791,0.598,797,0.77,812,0.935,818,1.218,822,1.11,829,0.549,834,1.314,837,1.863,838,0.836,849,0.748,903,0.755,905,0.901,909,0.872,927,1.432,928,0.886,930,1.387,931,1.549,979,2.002,982,1.227,989,1.387,1015,1.696,1018,1.603,1031,0.618,1032,1.497,1077,1.706,1080,0.755,1083,0.917,1088,0.663,1089,0.604,1091,0.709,1098,0.721,1111,1,1113,4.016,1116,1.042,1122,1.104,1124,1.585,1126,0.57,1127,1.766,1137,1,1147,1.932,1148,1.415,1157,0.598,1181,0.825,1183,0.715,1188,0.976,1189,0.762,1195,0.585,1199,0.663,1204,0.741,1207,1.314,1211,1.943,1215,1.227,1242,2.972,1247,0.646,1253,1.752,1256,3.846,1257,0.594,1260,1.164,1267,0.762,1273,3.027,1303,0.741,1309,1.227,1310,1.943,1313,0.734,1315,0.748,1316,0.77,1317,0.872,1318,0.805,1325,0.598,1339,1.603,1344,0.698,1357,0.687,1365,0.976,1409,1.325,1442,0.787,1460,1.556,1463,0.668,1467,0.778,1468,0.778,1469,0.778,1470,0.778,1471,1.401,1472,0.778,1473,0.728,1474,0.778,1475,0.778,1476,0.778,1477,0.762,1478,1.401,1479,0.762,1488,1.401,1489,0.77,1490,1.337,1538,2.028,1559,1.236,1562,0.815,1586,1.293,1617,1.924,1619,1.984,1621,1.194,1658,2.321,1690,0.935,1713,0.815,1715,1.686,1718,2.223,1742,2.338,1768,0.847,1779,0.859,1780,2.103,1781,0.836,1787,0.704,1819,0.976,1868,0.872,1876,1.149,1879,1,1892,0.836,1932,1.028,1949,1.149,1996,0.796,2036,1.149,2038,2.111,2039,2.928,2040,1.149,2041,1.028,2042,1.061,2043,1.149,2044,4.243,2045,2.111,2046,1.149,2048,4.779,2049,1.028,2050,2.928,2051,1.149,2052,1.718,2053,1.149,2054,1.149,2055,3.163,2057,0.901,2059,1.924,2065,2.928,2066,2.111,2067,1.149,2068,1.149,2069,1.061,2071,1.149,2072,0.872,2073,1.149,2133,0.886,2224,1.1,2329,0.836,2612,0.847,2685,0.954,2753,1.061,2811,1,3474,2.159,3475,2.159,3476,2.159,3477,2.223,3478,2.19,3479,2.849,3480,0.901,3571,1.214,3572,1.214,3573,1.214,3574,1.214,3575,1.214,3576,1.214,3577,1.214,3578,1.214,3579,3.095]],["component/131",[6,0.35]],["keyword/131",[]],["title/132-1",[1190,44.3]],["name/132-1",[]],["text/132-1",[]],["component/132-1",[]],["keyword/132-1",[]],["title/132-2",[188,30.031,1191,38.822]],["name/132-2",[]],["text/132-2",[]],["component/132-2",[]],["keyword/132-2",[]],["title/132-3",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/132-3",[]],["text/132-3",[]],["component/132-3",[]],["keyword/132-3",[]],["title/132-4",[139,36.226]],["name/132-4",[]],["text/132-4",[]],["component/132-4",[]],["keyword/132-4",[]],["title/132-5",[523,26.178,1193,34.99]],["name/132-5",[]],["text/132-5",[]],["component/132-5",[]],["keyword/132-5",[]],["title/132-6",[7,32.401,154,32.401]],["name/132-6",[]],["text/132-6",[]],["component/132-6",[]],["keyword/132-6",[]],["title/132-7",[6,11.164,286,26.124,809,31.533]],["name/132-7",[]],["text/132-7",[]],["component/132-7",[]],["keyword/132-7",[]],["title/132-8",[220,24.123,2141,48.074]],["name/132-8",[]],["text/132-8",[]],["component/132-8",[]],["keyword/132-8",[]],["title/132-9",[223,37.294]],["name/132-9",[]],["text/132-9",[]],["component/132-9",[]],["keyword/132-9",[]],["title/132-10",[121,30.002]],["name/132-10",[]],["text/132-10",[]],["component/132-10",[]],["keyword/132-10",[]],["title/132-11",[1296,35.239,1566,40.788]],["name/132-11",[]],["text/132-11",[]],["component/132-11",[]],["keyword/132-11",[]],["title/132-12",[427,36.582,520,23.467]],["name/132-12",[]],["text/132-12",[]],["component/132-12",[]],["keyword/132-12",[]],["title/132",[6,11.164,35,15.298,809,31.533]],["name/132",[6,0.317,809,0.896]],["text/132",[4,0.929,6,2.096,7,0.896,9,0.466,22,0.441,23,3.782,24,0.71,27,2.475,28,0.353,29,0.62,30,0.375,32,0.752,34,0.314,35,2.007,44,0.494,51,0.321,68,0.411,74,0.628,81,1.542,83,0.375,90,0.36,98,0.294,99,1.542,101,0.694,109,0.454,113,0.989,119,1.216,120,0.282,121,3.617,124,0.656,125,0.286,126,1.986,133,0.267,139,1.026,140,1.745,141,0.388,144,1.579,146,0.6,154,2.14,155,1.133,156,0.867,162,0.416,163,1.458,164,0.294,165,0.748,174,0.355,177,0.353,179,0.603,184,0.325,185,0.857,188,2.27,190,0.358,194,0.277,196,0.461,197,1.126,198,0.613,199,0.541,205,3.357,210,1.067,211,2.859,214,0.705,216,3.139,220,0.853,221,0.3,223,0.826,228,0.346,230,0.378,231,0.381,239,1.686,243,0.407,244,0.391,249,2.97,250,2.478,251,4.01,255,0.323,256,5.595,259,2.755,261,1.163,269,2.303,275,0.331,276,0.403,281,0.441,286,1.33,289,0.573,300,0.788,306,0.679,310,0.506,312,1.264,314,0.337,317,0.963,326,0.36,327,0.369,328,0.35,338,0.372,347,2.205,351,2.467,356,1.323,366,0.297,367,0.894,372,1.664,375,0.61,377,0.248,383,0.564,388,0.366,392,1.911,395,0.311,401,0.803,404,0.333,406,0.403,407,1.503,409,2.564,410,1.233,411,2.881,413,2.086,416,1.008,417,0.312,420,2.601,423,0.494,424,0.35,428,0.425,429,0.868,430,0.366,437,0.353,438,0.314,439,1.086,440,0.597,442,0.822,445,
10.59,453,0.454,454,0.5,459,0.375,468,0.722,471,0.771,473,0.319,478,1.01,484,1.103,489,1.294,491,1.041,492,3.354,494,0.777,496,0.303,497,0.36,500,0.448,501,0.544,503,0.304,506,0.411,507,1.634,509,0.674,512,0.319,519,0.491,520,0.452,522,0.363,523,0.724,524,0.492,533,0.516,542,0.399,564,0.425,568,0.323,573,0.275,576,0.372,581,0.425,582,0.384,597,0.407,599,0.777,604,0.246,609,3.469,614,1.294,631,0.777,639,0.982,641,0.388,642,0.282,644,0.581,647,2.501,649,1.28,670,2.574,671,1.472,676,1.627,679,0.734,686,0.291,691,0.896,692,0.843,694,0.348,696,0.734,699,0.384,701,0.489,702,1.273,703,0.66,709,1.12,725,1.174,726,0.378,733,0.835,741,0.93,745,0.425,748,0.748,749,2.112,751,2.781,755,2.483,756,3.704,758,1.765,759,1.928,760,2.01,765,1.775,774,0.381,775,2.475,783,0.689,785,0.741,788,0.416,789,0.378,790,0.748,794,0.35,795,0.441,809,5.759,810,0.628,818,1.229,822,0.319,829,0.29,834,1.326,837,0.649,840,0.366,845,0.395,848,1.824,874,0.485,903,0.762,922,0.366,927,0.567,930,0.762,931,0.321,952,0.529,969,0.461,979,3.034,981,0.388,982,2.796,989,0.399,996,0.395,1011,0.699,1015,1.549,1032,0.822,1053,0.476,1055,2.022,1077,1.187,1080,0.762,1084,1.045,1094,0.35,1099,0.403,1100,0.748,1101,0.454,1110,0.924,1116,1.807,1120,1.264,1124,0.329,1127,3.048,1128,0.543,1131,0.867,1147,1.36,1148,0.777,1151,2.435,1156,1.294,1162,0.42,1171,0.485,1183,1.592,1192,0.335,1193,0.353,1195,0.309,1204,1.373,1209,0.734,1211,0.77,1215,0.674,1217,0.407,1218,0.407,1219,0.391,1226,0.728,1237,1.549,1247,0.341,1256,1.128,1257,0.6,1271,0.436,1273,0.384,1282,0.822,1298,0.388,1300,1.413,1306,0.468,1307,0.468,1325,0.316,1331,0.91,1344,0.705,1357,0.363,1377,2.453,1390,0.867,1394,0.399,1409,2.297,1412,0.581,1418,1.071,1422,0.56,1423,0.504,1424,0.476,1445,1.337,1460,0.855,1467,0.786,1468,0.786,1469,0.786,1470,0.786,1471,1.413,1472,0.786,1473,0.734,1474,0.786,1475,0.786,1476,0.786,1477,0.77,1478,1.413,1479,0.77,1485,1.51,1488,1.413,1489,1.714,1490,0.734,1497,3.021,1499,0.461,1500,0.936,1527,3.161,1570,0.91,1585,0.425,1587,0.35,1589,1.853,1597,0.42,1598,0.42,1612,0.504,1615,0.468,1617,3.474,1619,0.786,1657,1.181,1658,0.741,1664,0.411,1676,0.468,1682,1.383,1711,0.794,1713,0.822,1718,0.88,1721,1.733,1724,1.264,1749,0.494,1764,0.926,1771,0.529,1781,1.211,1783,0.448,1868,0.461,1874,0.607,1906,0.56,1908,3.267,1927,0.529,1930,1.642,1933,0.894,1936,0.926,2052,0.494,2059,0.762,2072,0.461,2088,0.448,2091,3.503,2093,2.038,2094,1.594,2120,2.038,2123,1.11,2126,1.594,2133,0.894,2134,0.607,2136,0.504,2141,1.33,2142,1.038,2147,0.543,2149,1.16,2170,0.581,2174,0.607,2178,0.607,2181,0.607,2182,0.461,2183,1.67,2184,0.926,2193,1.665,2194,1.16,2213,0.543,2214,0.529,2215,0.607,2217,1.16,2218,1.16,2226,1.16,2228,2.129,2229,1.16,2243,0.88,2244,0.543,2245,0.454,2276,0.844,2286,0.516,2301,1.7,2309,1.45,2312,1.45,2339,0.543,2406,0.516,2447,2.361,2500,0.468,2521,0.581,2556,3.945,3032,0.516,3091,0.56,3122,0.529,3270,0.494,3320,0.504,3394,0.504,3437,1.038,3461,0.581,3474,0.855,3475,0.855,3476,0.855,3477,0.88,3478,0.867,3479,0.91,3480,0.91,3487,1.038,3509,0.529,3513,1.01,3514,1.01,3515,1.01,3516,1.01,3586,0.641,3587,0.641,3588,0.641,3589,0.641,3590,1.226,3591,1.038,3592,1.226,3593,1.226,3594,0.641,3595,1.226,3596,0.641,3597,0.641,3598,0.641,3599,0.641,3600,0.641,3601,1.226,3602,0.641,3603,0.641,3604,1.226,3605,0.581,3606,0.641,3607,1.226,3608,1.76,3609,1.226,3610,1.226,3611,1.594,3612,0.641,3613,0.641,3614,1.226,3615,0.543,3616,0.641,3617,0.543,3618,0.641,3619,0.641,3620,0.641,3621,1.226,3622,0.641,3623,0.641,3624,0.641,3625,0.641,3626,0.641,3627,0.641,3628,0.641,3629,0.641,3630,0.641,3631,0.641,3633,1.45,3634,0.641,3635,2.702,3636,1.226,3640,1.01,3961,1.326,3962,0.694]],["component/132",[6,0.35]],["keyword/132",[]],["title/133-1",[10,48.908]],["name/133-1",[]],["text/133-1",[]],["component/133-1",[]],["keyword/133-1",[]],["title/133-2",[1190,44.3]],["name/133-2",[]],["text/133-2",[]],["component/133-2",[]],["keyword/133-2",[]],["title/133-3",[188,30.031,1191,38.822]],["name/133-3",[]],["text/133-3",[]],["component/133-3",[]],["keyword/133-3",[]],["title/133-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/133-4",[]],["text/133-4",[]],["component/133-4",[]],["keyword/133-4",[]],["title/133-5",[139,36.226]],["name/133-5",[]],["text/133-5",[]],["component/133-5",[]],["keyword/133-5",[]],["title/133-6",[523,26.178,1193,34.99]],["name/133-6",[]],["text/133-6",[]],["component/133-6",[]],["keyword/133-6",[]],["title/133-7",[7,27.028,126,21.924,454,21.666]],["name/133-7",[]],["text/133-7",[]],["component/133-7",[]],["keyword/133-7",[]],["title/133-8",[301,27.985,3637,57.64]],["name/133-8",[]],["text/133-8",[]],["component/133-8",[]],["keyword/133-8",[]],["title/133-9",[220,24.123,1964,46.44]],["name/133-9",[]],["text/133-9",[]],["component/133-9",[]],["keyword/133-9",[]],["title/133-10",[269,18.026,351,12.82,742,22.287,743,22.786]],["name/133-10",[]],["text/133-10",[]],["component/133-10",[]],["keyword/133-10",[]],["title/133-11",[220,24.123,415,39.563]],["name/133-11",[]],["text/133-11",[]],["component/133-11",[]],["keyword/133-11",[]],["title/133",[269,21.015,742,25.983,743,26.564]],["name/133",[1169,1.817]],["text/133",[1,0.71,4,1.071,6,1.262,7,1.32,9,0.702,23,4.503,24,1.312,27,0.898,29,0.5,30,0.577,32,1.282,34,2.135,35,1.822,40,0.5,61,1.562,65,0.734,69,0.492,70,0.427,81,1.74,82,0.512,99,1.31,102,1.253,111,0.469,113,0.555,119,0.83,125,0.441,126,1.071,132,0.747,133,1.079,140,0.492,144,1.312,146,0.484,154,1.32,155,0.497,157,1.505,160,0.603,162,0.64,167,0.615,173,1.223,174,1.021,184,0.5,185,1.262,187,0.663,188,2.482,190,0.551,194,0.797,197,0.495,198,0.495,202,0.648,204,0.587,205,2.105,210,0.875,211,1.278,216,1.827,220,1.455,223,0.866,227,0.68,230,0.582,231,1.096,239,0.431,243,1.17,246,0.582,249,1.276,250,1.336,251,1.8,257,0.655,261,1.116,262,0.655,269,3.428,275,0.509,276,0.621,286,0.908,291,0.747,300,0.826,301,1.688,310,0.408,311,0.519,312,1.554,315,0.663,324,0.928,327,0.568,329,0.864,334,0.492,343,0.615,347,1.653,350,1.029,351,2.551,355,0.522,356,2.365,366,0.457,375,0.492,376,4.358,377,0.714,388,0.564,392,0.78,395,0.479,404,1.344,407,1.849,409,1.984,411,1.014,412,0.431,413,0.342,414,0.627,416,0.826,417,1.583,429,1,438,0.484,439,0.397,440,1.583,443,0.795,449,0.532,450,1.262,454,1.327,463,0.512,471,0.433,473,0.492,484,0.753,489,1.869,492,0.431,503,0.875,512,0.918,519,0.738,520,0.365,521,1.25,524,1.997,542,0.615,547,0.609,556,0.573,580,0.837,585,1.376,594,0.627,604,0.379,609,0.471,612,0.615,625,0.634,632,0.466,637,
11.077,641,0.598,647,2.125,649,1.187,670,0.5,671,1.088,676,0.962,679,0.592,681,0.587,684,1.208,686,0.449,689,0.671,691,0.503,692,0.474,693,0.587,694,0.536,696,0.592,701,0.736,702,1.327,703,0.993,723,2.756,724,0.598,725,2.275,731,1.45,736,0.536,739,4.6,741,0.522,742,3.823,743,5.485,744,0.747,749,1.776,751,2.516,755,2.398,758,0.497,759,0.544,760,2.767,762,1.862,775,0.582,781,1.811,782,0.587,789,1.527,799,0.747,802,0.54,810,3.072,816,1.841,818,0.54,822,0.918,827,0.634,829,3.337,834,1.527,837,0.365,845,1.136,848,0.429,884,0.603,927,0.853,935,0.814,975,0.68,979,0.516,982,0.544,996,0.609,1015,1.436,1019,0.555,1031,0.503,1077,0.986,1086,1.808,1090,2.45,1092,0.7,1094,0.54,1098,0.587,1100,0.603,1103,1.996,1110,0.519,1115,0.497,1117,3.126,1118,0.655,1122,0.913,1126,2.469,1127,1.052,1129,1.924,1132,1.583,1147,3.182,1157,0.486,1169,4.745,1170,1.077,1173,0.747,1189,0.621,1192,0.516,1204,0.603,1215,0.544,1216,1.12,1217,0.627,1218,0.627,1219,0.603,1225,0.671,1226,0.587,1227,0.721,1241,0.603,1246,0.634,1247,0.526,1253,0.56,1258,3.111,1266,0.655,1273,0.592,1287,0.634,1295,2.084,1297,1.42,1299,0.734,1300,0.621,1319,0.864,1331,0.734,1334,0.814,1341,1.125,1344,1.869,1352,0.655,1376,0.895,1390,0.7,1394,0.615,1409,1.54,1453,2.754,1463,0.544,1471,0.621,1477,1.628,1478,1.628,1479,2.042,1481,0.837,1485,1.237,1488,0.621,1489,0.627,1497,2.28,1500,0.98,1501,1.393,1540,0.761,1572,1.924,1597,0.648,1598,0.648,1605,0.814,1617,2.022,1619,0.634,1628,2.963,1650,0.568,1658,1.115,1664,0.634,1665,0.577,1711,0.64,1724,0.71,1736,1.269,1751,1.346,1788,0.747,1840,2.679,1897,2.679,1899,0.777,1916,0.777,1928,1.147,1930,0.721,1933,0.721,1936,0.747,1941,0.721,1983,0.747,1988,1.305,2035,0.777,2059,0.615,2243,0.71,2258,0.935,2260,0.795,2261,0.935,2276,0.68,2285,0.935,2286,0.795,2287,1.483,2288,0.747,2291,0.795,2301,1.393,2323,1.611,2328,0.895,2329,0.68,2330,0.777,2331,0.837,2332,1.393,2336,6.806,2338,4.619,2341,1.67,2342,1.67,2345,0.935,2346,0.935,2347,0.935,2349,4.943,2350,1.562,2351,1.562,2352,1.562,2353,1.611,2355,1.67,2358,0.935,2359,0.935,2360,0.935,2361,2.195,2367,0.895,2368,0.761,2369,0.837,2482,2.871,2556,2.265,2697,0.814,2792,1.237,2798,0.761,2838,0.777,2913,0.864,2962,0.864,2966,0.864,3320,1.45,3327,0.837,3429,0.935,3474,1.808,3475,1.808,3476,1.808,3513,0.814,3514,0.814,3515,0.814,3516,0.814,3605,0.895,3611,2.348,3615,0.837,3617,0.837,3637,2.945,3638,0.988,3639,0.988,3640,2.679,3641,1.844,3642,0.988,3643,0.988,3644,0.988,3645,0.988,3646,0.988,3647,0.988,3648,2.592,3649,0.988,3650,0.988,3651,0.988,3652,3.837,3653,3.252,3654,3.252,3655,2.592,3656,2.592,3657,1.844,3658,0.988,3659,0.864,3660,0.837,3661,0.814,3662,0.988,3663,0.988,3664,0.895,3665,0.895,3666,0.935,3667,0.988,3668,0.988,3669,0.988,3670,0.988,3671,1.67,3672,0.988,3673,0.895,3674,0.988,3675,0.988,3676,0.988,3677,0.895,3678,0.895,3679,0.988,3680,0.988,3681,1.844,3682,0.988,3683,1.844,3684,0.988,3685,0.988,3686,0.988,3687,0.988,3688,0.988,3689,0.988,3690,0.988,3691,0.988,3692,0.988,3693,0.988,3694,2.592,3695,0.988,3696,0.988,3697,0.988,3698,0.988,3699,0.988,3700,0.988,3701,0.988,3702,0.988,3703,0.988,3704,0.988,3705,0.988,3706,0.988,3707,0.988]],["component/133",[6,0.35]],["keyword/133",[]],["title/134-1",[121,20.053,524,14.831,2372,35.612]],["name/134-1",[]],["text/134-1",[]],["component/134-1",[]],["keyword/134-1",[]],["title/134-2",[99,18.12,121,20.053,251,19.777]],["name/134-2",[]],["text/134-2",[]],["component/134-2",[]],["keyword/134-2",[]],["title/134-3",[2243,57.052]],["name/134-3",[]],["text/134-3",[]],["component/134-3",[]],["keyword/134-3",[]],["title/134-4",[121,30.002]],["name/134-4",[]],["text/134-4",[]],["component/134-4",[]],["keyword/134-4",[]],["title/134-5",[121,24.038,1057,32.593]],["name/134-5",[]],["text/134-5",[]],["component/134-5",[]],["keyword/134-5",[]],["title/134-6",[41,28.221,351,14.945,1116,24.803]],["name/134-6",[]],["text/134-6",[]],["component/134-6",[]],["keyword/134-6",[]],["title/134-7",[28,29.188,121,20.053,1132,25.843]],["name/134-7",[]],["text/134-7",[]],["component/134-7",[]],["keyword/134-7",[]],["title/134",[121,24.038,992,35.755]],["name/134",[121,0.57,992,0.848]],["text/134",[4,1.373,6,0.699,9,1.693,19,1.04,23,3.616,24,1.795,27,2.166,28,1.04,32,2.574,35,2.22,37,1.404,50,1.915,74,1.703,81,0.755,83,1.105,89,2.131,98,0.867,99,3.478,102,1.285,121,4.114,124,1.012,138,1.105,146,0.926,154,0.963,164,2.039,168,2.591,200,1.048,211,1.748,220,1.261,234,0.902,249,2.19,251,3.796,255,0.952,269,0.749,286,0.931,295,1.239,300,0.847,306,1.841,310,1.838,311,0.993,312,1.347,344,1.071,347,1.687,351,2.869,377,0.733,392,0.801,393,1.176,410,0.863,411,1.901,413,2.663,416,0.847,426,1.176,429,0.73,438,0.926,439,1.336,440,2.166,454,1.816,462,2.01,463,2.306,466,1.959,471,0.828,479,1.803,482,1.559,484,2.489,490,1.165,491,0.875,492,3.16,501,0.839,509,2.944,519,1.331,520,1.641,521,0.727,523,0.778,524,2.36,526,1.339,542,1.176,557,0.981,565,0.893,573,1.425,582,1.133,583,2.109,584,1.524,585,0.801,597,1.2,604,2.051,609,1.585,616,1.212,632,2.1,649,2.226,660,1.124,666,0.987,670,3.67,671,1.396,676,0.987,692,0.906,701,0.755,702,1.357,726,1.114,733,0.897,751,1.482,758,3.382,759,2.944,760,3.875,781,3.986,786,1.114,794,1.033,798,1.404,800,2.204,801,1.269,802,1.033,8
110,0.969,823,1.144,837,2.249,840,1.079,848,1.443,887,0.987,921,2.561,922,1.079,927,0.875,981,1.144,989,1.176,1011,1.897,1015,2.694,1018,1.359,1023,1.521,1029,1.38,1057,3.123,1075,1.105,1077,2.32,1085,1.239,1086,0.784,1112,1.2,1115,2.239,1116,4.089,1122,1.645,1124,0.969,1132,0.921,1144,1.2,1147,3.069,1151,1.096,1155,2.202,1156,2.558,1185,1.087,1212,1.254,1214,1.457,1216,1.437,1223,1.114,1242,1.012,1246,1.212,1257,1.628,1258,2.19,1260,3.781,1303,1.154,1309,1.04,1315,1.165,1325,0.931,1340,2.204,1344,1.087,1466,1.734,1490,1.133,1511,1.38,1581,1.38,1585,1.254,1586,1.927,1587,1.816,1667,1.359,1678,1.521,1696,1.38,1707,1.359,1736,1.302,1748,1.339,1898,1.359,1908,4.142,1977,2.131,2141,1.429,2184,1.429,2204,1.254,2354,2.74,2372,1.269,2378,8.205,2379,4.534,2380,5.403,2381,4.534,2385,2.816,2386,2.288,2387,1.487,2394,1.602,2396,2.816,2397,2.673,2398,1.602,2399,1.602,2400,1.457,2401,1.457,2402,1.457,2403,1.602,2404,1.602,2681,3.148,2945,1.429,3217,2.816,3266,5.692,3267,1.713,3268,1.653,3269,1.653,3270,2.561,3271,2.673,3272,1.559,3273,1.653,3274,1.653,3275,1.602,3276,1.653,3277,1.653,3278,1.653,3279,1.653,3280,1.653]],["component/134",[6,0.35]],["keyword/134",[]],["title/135-1",[7,23.184,133,18.957,155,22.916,3215,39.78]],["name/135-1",[]],["text/135-1",[]],["component/135-1",[]],["keyword/135-1",[]],["title/135-2",[155,22.916,168,19.349,407,21.934,1567,24.207]],["name/135-2",[]],["text/135-2",[]],["component/135-2",[]],["keyword/135-2",[]],["title/135-3",[155,20.063,400,25.285,512,19.837,1342,25.551,3708,39.862]],["name/135-3",[]],["text/135-3",[]],["component/135-3",[]],["keyword/135-3",[]],["title/135-4",[155,20.063,400,25.285,512,19.837,1084,23.68,1342,25.551]],["name/135-4",[]],["text/135-4",[]],["component/135-4",[]],["keyword/135-4",[]],["title/135-5",[155,26.716,399,31.01,1815,43.738]],["name/135-5",[]],["text/135-5",[]],["component/135-5",[]],["keyword/135-5",[]],["title/135",[399,37.174,400,40.363]],["name/135",[399,0.881,400,0.957]],["text/135",[0,1.422,6,1.058,7,2.561,20,2.116,24,0.895,35,0.639,38,0.998,50,1.644,70,1.651,83,1.296,90,1.247,118,1.744,121,0.838,122,1.104,125,0.989,126,0.916,144,4.409,146,1.086,147,1.354,162,2.475,163,3.26,167,1.379,168,4.584,169,1.527,170,2.592,172,1.366,175,3.716,178,1.393,180,2.595,183,1.489,185,1.86,186,2.196,198,1.912,199,0.98,205,2.014,211,2.349,213,1.341,220,1.448,223,3.458,231,2.269,234,1.058,239,4.367,251,1.423,261,0.955,262,2.532,269,1.512,286,1.092,294,1.379,306,1.229,310,0.916,312,0.899,328,2.086,347,1.448,351,1.076,355,2.018,356,1.87,383,1.759,392,4.874,399,4.607,400,6.081,405,1.548,406,3.753,407,1.069,408,1.13,410,1.743,411,1.568,412,0.967,413,1.32,429,4.207,443,1.784,445,1.069,454,1.559,465,5.222,499,1.812,507,1.341,519,2.393,520,0.818,526,1.57,528,3.235,557,1.15,585,2.53,591,1.57,654,1.57,681,1.318,691,1.13,694,1.203,713,2.475,724,1.341,730,1.57,736,5.781,739,1.276,788,3.26,791,1.092,798,1.647,808,2.595,837,1.855,852,2.044,887,1.157,930,1.379,963,3.225,1019,2.147,1077,3.169,1079,1.123,1081,1.784,1101,1.57,1106,2.532,1110,1.165,1116,2.793,1157,1.092,1159,1.879,1170,1.296,1187,1.594,1188,1.784,1189,1.393,1193,1.22,1194,1.247,1258,4.718,1306,1.619,1314,1.619,1334,1.828,1394,1.379,1409,1.318,1433,1.507,1466,1.157,1520,1.938,1538,1.454,1539,2.788,1541,1.647,1553,2.01,1575,3.235,1588,1.594,1589,1.318,1626,1.454,1650,1.276,1768,1.548,1808,1.507,1822,2.099,1940,1.709,1963,2.01,1964,1.619,1977,1.422,2026,1.709,2059,1.379,2133,1.619,2148,2.099,2276,1.527,2288,1.676,2369,3.235,2409,2.01,2416,2.099,2418,4.759,2419,3.614,2436,2.099,2437,2.099,2439,2.099,2440,2.099,2441,2.099,2443,2.099,2445,3.614,2447,6.89,2475,3.614,2500,1.619,2511,2.01,2557,3.614,2560,2.099,2792,1.489,2834,1.594,2992,1.879,3149,2.01,3305,1.828,3320,3.003,3709,2.219,3710,2.219,3711,2.219,3712,2.01,3713,2.219,3714,2.219,3715,2.219,3716,2.219,3717,2.219,3718,2.219,3719,2.219,3720,2.219,3721,3.82,3722,2.219,3723,2.219,3724,5.031,3725,2.219,3726,2.219,3727,2.219,3728,2.219,3729,2.219,3730,2.219,3731,3.614,3732,2.219,3733,2.219,3734,2.219,3735,2.219,3736,2.219,3737,2.219,3738,2.219,3739,2.219,3740,2.219,3741,6.738,3742,2.219,3743,2.219,3744,2.219,3745,2.219,3746,2.219,3747,2.219]],["component/135",[6,0.35]],["keyword/135",[]],["title/136-1",[1190,44.3]],["name/136-1",[]],["text/136-1",[]],["component/136-1",[]],["keyword/136-1",[]],["title/136-2",[524,17.779,605,46.44]],["name/136-2",[]],["text/136-2",[]],["component/136-2",[]],["keyword/136-2",[]],["title/136-3",[1916,50.022,2482,37.801]],["name/136-3",[]],["text/136-3",[]],["component/136-3",[]],["keyword/136-3",[]],["title/136-4",[794,34.748,1357,36.024]],["name/136-4",[]],["text/136-4",[]],["component/136-4",[]],["keyword/136-4",[]],["title/136-5",[525,36.299,712,33.193]],["name/136-5",[]],["text/136-5",[]],["component/136-5",[]],["keyword/136-5",[]],["title/136-6",[143,39.394,1155,26.268,1466,27.689]],["name/136-6",[]],["text/136-6",[]],["component/136-6",[]],["keyword/136-6",[]],["title/136-7",[712,33.193,741,33.614]],["name/136-7",[]],["text/136-7",[]],["component/136-7",[]],["keyword/136-7",[]],["title/136-8",[69,22.658,437,25.037,787,29.503,1627,30.182]],["name/136-8",[]],["text/136-8",[]],["component/136-8",[]],["keyword/136-8",[]],["title/136-9",[98,29.163,802,34.748]],["name/136-9",[]],["text/136-9",[]],["component/136-9",[]],["keyword/136-9",[]],["title/136-10",[412,27.741,501,28.235]],["name/136-10",[]],["text/136-10",[]],["component/136-10",[]],["keyword/136-10",[]],["title/136-11",[35,15.298,524,14.831,1099,33.33]],["name/136-11",[]],["text/136-11",[]],["component/136-11",[]],["keyword/136-11",[]],["title/136-12",[210,37.672]],["name/136-12",[]],["text/136-12",[]],["component/136-12",[]],["keyword/136-12",[]],["title/136",[524,22.19]],["name/136",[524,0.738]],["text/136",[1,0.837,2,0.937,4,1.234,6,1.579,9,1.137,13,0.711,23,2.108,24,0.47,27,3.994,29,1.513,32,2.669,34,2.129,35,1.904,36,0.88,38,1.344,40,0.59,41,0.62,46,0.724,48,0.916,50,0.501,51,0.583,69,0.58,70,2.122,73,0.782,75,0.865,82,0.604,89,0.747,90,0.655,93,0.897,98,0.985,99,1.996,113,0.655,119,0.524,120,1.634,121,0.44,122,0.58,124,0.624,125,2.607,126,1.797,133,2.25,138,0.681,139,1.363,146,0.57,149,1.478,153,0.604,154,1.094,155,1.87,157,0.539,159,3.735,160,0.711,164,2.863,168,1.27,170,0.6,172,0.718,177,0.641,178,0.732,179,0.573,185,1.046,186,0.67,188,0.55,194,0.504,197,0.583,199,1.32,204,0.692,205,1.742,210,0.553,211,1.709,216,0.655,218,0.698,220,0.442,221,0.544,223,0.547,228,0.628,234,1.024,261,1.286,275,1.54,283,0.88,286,1.828,288,0.567,289,1.736,300,0.522,301,0.512,303,0.825,306,0.645,309,0.692,310,1.534,312,0.87,314,1.128,323,2.434,324,1.081,334,1.849,337,1.441,338,0.675,340,0.782,347,1.408,350,0.65,351,1.647,363,0.501,366,1.719,372,2.288,374,1.579,375,0.58,377,1.685,383,0.537,385,0.897,392,0.909,408,1.522,410,1.984,411,2.914,412,2.356,413,2.594,415,1.336,416,2.198,424,0.636,428,1.424,429,0.45,430,0.665,439,1.493,445,1.44,449,0.628,450,1.046,454,1.516,466,1.265,471,0.941,473,1.069,477,1.594,479,0.632,491,0.539,492,1.89
16,493,0.681,499,0.553,500,0.813,501,3.545,515,0.813,519,1.197,521,0.448,522,1.216,523,0.479,524,3.268,525,3.083,527,0.612,538,1.424,546,1.056,556,0.675,557,0.604,565,0.55,568,0.586,570,1.351,573,2.316,582,0.698,583,0.739,584,0.534,585,0.493,587,0.561,588,1.349,597,1.896,598,0.897,601,0.772,604,0.446,605,0.85,609,2.074,619,0.547,626,0.865,639,0.65,640,0.937,642,1.314,643,1.689,649,1.973,666,1.121,667,2.861,670,1.513,671,0.489,684,0.764,686,1.357,687,2.119,692,2.085,701,1.958,702,3.348,704,0.66,709,0.58,711,0.813,712,2.819,714,1.216,729,0.825,734,0.675,736,0.632,742,0.57,775,1.265,782,0.692,783,1.679,786,0.686,794,0.636,795,0.802,796,1.299,797,1.363,802,2.951,806,0.747,811,0.916,816,0.66,818,0.636,822,1.487,829,1.966,837,0.43,838,0.802,848,0.932,849,0.718,855,0.755,884,0.711,887,0.608,909,0.837,924,0.718,927,1.719,931,1.075,969,0.837,979,2.561,981,0.704,982,2.043,992,1.679,1029,0.85,1075,0.681,1077,2.056,1078,0.813,1079,1.513,1086,4.151,1088,1.632,1089,1.487,1090,0.655,1096,2.557,1099,3.394,1100,0.711,1107,0.85,1110,1.128,1117,0.645,1134,1.632,1140,2.218,1142,1.594,1147,1.081,1153,1.819,1154,0.747,1155,3.953,1156,1.235,1157,0.573,1170,0.681,1171,0.88,1172,0.937,1175,0.732,1176,0.813,1179,1.594,1187,0.837,1191,0.711,1193,0.641,1207,1.76,1226,0.692,1241,0.711,1242,0.624,1245,2.757,1253,2.103,1257,1.052,1260,1.559,1296,0.645,1313,0.704,1315,1.84,1323,0.865,1466,4.383,1567,1.142,1580,1.056,1583,0.792,1587,0.636,1604,0.825,1618,1.689,1621,0.624,1623,0.897,1626,0.764,1627,6.014,1628,4.243,1636,1.181,1639,1.594,1666,0.813,1713,0.782,1714,0.837,1727,1.623,1731,0.897,1783,0.813,1787,0.675,1808,0.792,1815,0.96,1928,1.336,1959,0.987,1960,0.813,1980,1.056,1996,0.764,2003,0.88,2012,1.654,2052,0.897,2072,0.837,2085,0.96,2112,0.88,2143,0.987,2144,0.96,2182,2.147,2208,4.722,2232,0.987,2329,2.994,2482,2.584,2500,0.85,2642,0.987,2643,2.147,2644,0.825,2645,2.827,2646,2.147,2648,1.102,2649,1.102,2650,1.102,2651,1.102,2652,2.032,2653,1.102,2654,1.102,2655,1.102,2656,1.102,2657,1.102,2658,0.825,2659,2.032,2660,2.827,2661,1.102,2662,1.018,2663,1.946,2664,1.102,2665,1.102,2666,2.827,2667,2.032,2669,1.102,2670,1.102,2671,0.96,2672,0.937,2673,0.987,2674,1.102,2675,1.018,2676,1.102,2677,0.987,2678,0.987,2679,0.987,2680,0.85,3963,1.261,3964,1.261]],["component/136",[6,0.35]],["keyword/136",[]],["title/137-1",[10,39.186,733,30.183]],["name/137-1",[]],["text/137-1",[]],["component/137-1",[]],["keyword/137-1",[]],["title/137-2",[1190,44.3]],["name/137-2",[]],["text/137-2",[]],["component/137-2",[]],["keyword/137-2",[]],["title/137-3",[188,30.031,1191,38.822]],["name/137-3",[]],["text/137-3",[]],["component/137-3",[]],["keyword/137-3",[]],["title/137-4",[177,25.037,184,23.049,791,22.409,1192,23.751]],["name/137-4",[]],["text/137-4",[]],["component/137-4",[]],["keyword/137-4",[]],["title/137-5",[139,36.226]],["name/137-5",[]],["text/137-5",[]],["component/137-5",[]],["keyword/137-5",[]],["title/137-6",[81,25.382,220,24.123]],["name/137-6",[]],["text/137-6",[]],["component/137-6",[]],["keyword/137-6",[]],["title/137-7",[413,21.993,621,46.44]],["name/137-7",[]],["text/137-7",[]],["component/137-7",[]],["keyword/137-7",[]],["title/137-8",[220,20.123,351,14.945,750,42.674]],["name/137-8",[]],["text/137-8",[]],["component/137-8",[]],["keyword/137-8",[]],["title/137-9",[351,17.916,2023,53.891]],["name/137-9",[]],["text/137-9",[]],["component/137-9",[]],["keyword/137-9",[]],["title/137-10",[520,23.467,604,24.38]],["name/137-10",[]],["text/137-10",[]],["component/137-10",[]],["keyword/137-10",[]],["title/137-11",[211,25.006,686,28.889]],["name/137-11",[]],["text/137-11",[]],["component/137-11",[]],["keyword/137-11",[]],["title/137-12",[119,28.623,458,45.711]],["name/137-12",[]],["text/137-12",[]],["component/137-12",[]],["keyword/137-12",[]],["title/137-13",[1116,37.11]],["name/137-13",[]],["text/137-13",[]],["component/137-13",[]],["keyword/137-13",[]],["title/137-14",[686,28.889,1239,43.794]],["name/137-14",[]],["text/137-14",[]],["component/137-14",[]],["keyword/137-14",[]],["title/137-15",[301,23.345,686,24.099,2681,37.564]],["name/137-15",[]],["text/137-15",[]],["component/137-15",[]],["keyword/137-15",[]],["title/137-16",[1296,35.239,1566,40.788]],["name/137-16",[]],["text/137-16",[]],["component/137-16",[]],["keyword/137-16",[]],["title/137-17",[427,36.582,520,23.467]],["name/137-17",[]],["text/137-17",[]],["component/137-17",[]],["keyword/137-17",[]],["title/137-18",[210,37.672]],["name/137-18",[]],["text/137-18",[]],["component/137-18",[]],["keyword/137-18",[]],["title/137",[119,28.623,173,30.031]],["name/137",[119,0.679,173,0.712]],["text/137",[4,1.11,6,0.855,7,0.568,9,0.425,13,0.355,14,0.588,20,0.322,23,3.055,24,0.235,27,1.827,28,0.752,29,0.15,30,0.174,31,0.224,32,2.723,34,0.145,35,1.445,38,0.384,40,0.433,41,0.158,50,0.48,51,0.428,56,0.269,57,0.234,66,0.229,70,0.369,74,0.572,81,0.445,82,0.443,86,0.37
17,92,0.377,98,1.862,99,2.572,111,0.276,119,0.384,120,0.601,121,0.78,122,0.289,124,1.541,125,0.259,126,2.731,130,0.252,133,0.569,138,0.174,139,1.56,140,0.801,146,0.145,149,0.204,153,0.154,154,0.568,155,1.252,157,0.744,159,0.16,163,0.193,164,0.627,165,0.181,167,0.185,168,1.525,170,0.153,173,1.174,174,0.473,177,0.32,178,0.365,179,0.42,183,1.079,184,0.294,185,1.11,188,1.076,190,0.477,194,0.369,196,0.213,197,1.441,198,0.291,199,1.434,200,0.757,202,0.381,204,0.508,205,1.076,206,0.457,208,0.229,210,0.276,211,2.961,213,0.18,214,1.058,216,0.627,217,0.207,218,0.349,220,1.482,221,0.752,222,0.412,223,0.524,224,0.4,226,0.193,228,0.313,230,0.175,231,0.177,233,0.207,238,0.21,239,0.254,241,0.349,243,1.02,244,0.355,246,0.503,249,0.286,250,0.3,251,1.073,258,0.21,259,2.479,261,1.07,268,0.657,269,1.354,272,0.239,275,0.44,276,0.187,277,0.197,279,0.381,280,0.21,286,0.673,288,0.896,289,0.272,290,0.448,292,0.167,294,0.185,300,1.751,301,1.002,306,0.165,308,0.239,309,0.346,310,0.664,311,0.718,312,1.385,314,0.305,319,0.204,324,0.927,325,0.199,326,0.167,328,0.318,334,0.289,337,0.199,340,0.199,347,1.092,351,2.503,355,0.157,356,0.418,363,0.25,365,0.521,366,0.395,375,0.555,377,0.432,387,0.169,388,0.332,392,0.362,395,0.144,401,0.195,403,0.239,405,0.207,406,0.536,408,0.937,409,0.981,410,0.509,411,0.711,412,0.372,413,1.893,416,0.5,417,0.283,418,0.332,420,0.145,424,0.318,426,0.185,427,0.171,429,0.224,430,0.487,434,0.269,435,0.269,436,0.217,437,0.47,438,0.669,439,0.234,440,0.145,445,0.538,449,0.16,450,0.783,451,0.187,454,1.015,459,0.174,468,0.175,471,0.13,473,0.555,478,0.704,479,0.161,484,1.943,489,1.31,491,1.243,492,2.238,496,0.275,499,0.529,503,0.276,506,0.19,508,0.412,509,0.163,511,0.199,512,0.289,515,0.207,516,0.418,520,2.987,521,0.429,523,0.239,524,2.417,527,0.305,531,0.373,532,0.386,543,0.493,544,0.221,547,0.183,557,0.154,562,0.239,565,0.974,568,0.293,570,0.263,575,0.508,576,0.172,583,0.188,584,1.792,585,1.052,587,0.28,588,1.156,592,0.207,593,0.213,594,0.188,599,0.708,601,0.566,604,1.103,606,0.19,609,1.462,612,0.362,614,0.171,619,0.273,621,1.507,632,0.275,637,0.174,642,0.256,647,1.019,649,0.212,652,0.224,660,0.346,664,0.663,670,2.658,671,1.128,674,0.479,676,0.155,679,0.669,681,1.822,682,0.181,684,0.195,686,5.084,687,0.169,688,0.239,689,0.202,691,0.937,692,0.279,693,0.177,694,0.161,696,0.512,697,1.054,698,0.512,700,0.174,701,0.642,702,1.015,703,0.46,709,0.148,715,0.448,717,0.188,723,0.332,725,0.96,728,0.234,733,0.276,736,0.605,739,0.334,741,0.451,742,0.145,743,0.149,747,0.493,748,0.681,749,0.318,751,0.717,755,2.234,756,0.386,758,2.396,759,1.477,760,1.935,765,2.132,774,0.346,775,0.657,779,0.252,781,2.121,783,0.48,785,0.675,789,0.657,790,0.181,791,0.549,795,0.768,796,0.352,797,0.369,800,0.386,806,0.19,810,0.298,812,0.859,816,0.168,818,0.747,822,1.616,823,1.854,827,0.876,829,1.546,834,0.948,835,1.215,837,0.761,845,0.183,848,0.371,849,0.183,852,0.159,853,0.234,883,0.418,884,0.181,896,0.239,903,0.531,919,3.843,927,0.516,931,0.149,979,1.6,982,1.135,989,0.362,996,0.183,1011,0.332,1015,2.37,1019,0.48,1031,0.296,1055,0.193,1057,1.838,1077,3.138,1078,0.207,1079,0.692,1080,0.531,1084,0.346,1086,3.702,1088,0.318,1089,0.148,1092,0.412,1094,0.609,1098,0.508,1099,0.187,1110,0.305,1115,0.927,1116,2.399,1117,0.473,1118,0.197,1122,0.147,1123,0.185,1126,0.273,1127,0.487,1132,0.783,1134,0.609,1142,4.907,1144,0.188,1147,2.584,1148,0.708,1151,0.337,1154,0.715,1155,2.155,1156,2.811,1157,0.673,1160,0.21,1162,0.381,1170,0.34,1178,0.229,1181,0.202,1183,0.175,1185,0.171,1189,0.365,1190,0.166,1192,0.155,1194,0.167,1199,1.245,1204,0.521,1207,0.175,1211,0.859,1213,0.221,1215,0.614,1216,1.075,1217,0.188,1218,0.188,1219,0.181,1220,0.723,1221,0.234,1223,0.343,1225,0.202,1227,0.424,1234,0.386,1239,4.189,1242,0.311,1244,0.19,1245,4.783,1246,0.373,1247,0.593,1248,4.189,1251,0.187,1253,0.632,1257,0.285,1258,3.214,1260,5.512,1266,0.74,1267,0.365,1273,0.819,1282,0.917,1287,0.19,1290,0.309,1296,0.165,1298,0.18,1300,0.701,1303,1.639,1309,0.885,1310,1.431,1313,0.517,1316,0.369,1317,0.213,1325,0.673,1331,0.432,1332,0.828,1344,0.334,1351,0.21,1357,0.329,1364,0.213,1369,0.224,1377,0.542,1380,0.204,1390,0.21,1394,0.85,1409,1.226,1433,0.202,1442,0.193,1445,0.508,1452,0.724,1454,0.658,1456,0.802,1461,0.724,1462,0.724,1463,0.32,1464,0.724,1465,0.704,1466,1.957,1467,0.715,1468,0.715,1469,0.715,1470,0.548,1471,
11.156,1472,0.715,1473,0.669,1474,0.715,1475,0.715,1476,0.715,1477,0.536,1478,1.01,1479,0.536,1480,0.704,1488,0.536,1489,1.704,1490,0.669,1497,1.711,1499,0.802,1500,0.309,1508,0.245,1515,0.239,1527,2.231,1559,0.473,1562,0.199,1567,0.158,1568,0.234,1573,0.224,1576,0.193,1581,0.217,1584,0.221,1585,0.566,1586,0.647,1587,0.162,1588,0.213,1589,0.177,1590,0.221,1591,0.424,1592,0.221,1593,0.204,1594,0.213,1595,0.217,1596,0.221,1597,0.195,1598,0.195,1604,0.21,1611,0.252,1615,0.217,1616,0.779,1617,0.531,1619,0.373,1626,0.195,1627,0.197,1636,1.974,1647,0.418,1648,0.457,1650,0.171,1657,0.39,1658,0.675,1660,1.265,1662,1.194,1663,1.194,1664,0.19,1665,0.34,1671,0.779,1680,0.217,1687,0.221,1707,0.213,1710,0.252,1711,0.193,1714,0.213,1721,0.229,1722,0.896,1725,0.21,1728,0.234,1737,0.239,1742,0.224,1752,0.195,1754,0.229,1764,0.843,1779,0.79,1780,1.402,1781,0.204,1786,0.252,1788,1.033,1798,0.245,1848,0.221,1896,0.21,1908,0.395,1921,0.224,1930,0.217,1933,0.217,1936,0.224,1938,0.381,1939,0.239,1940,0.448,1941,0.217,1960,0.406,1964,0.217,1975,0.269,1996,0.195,2003,0.224,2013,0.269,2026,0.448,2041,0.252,2049,0.252,2059,0.185,2182,0.614,2184,0.224,2213,0.252,2214,0.245,2225,0.269,2239,0.252,2246,0.252,2276,0.204,2288,0.439,2301,0.439,2309,0.245,2312,0.245,2373,0.269,2386,2.691,2387,0.672,2391,0.55,2406,0.468,2407,0.269,2410,0.252,2462,0.527,2505,0.252,2605,0.457,2608,0.269,2622,0.221,2644,0.412,2658,0.412,2673,0.252,2679,0.252,2681,7.467,2682,0.269,2683,0.281,2684,1.239,2685,0.457,2686,4.774,2687,1.742,2688,4.961,2689,3.542,2690,2.542,2691,0.55,2692,0.281,2694,0.281,2695,0.252,2696,0.281,2697,0.245,2698,0.281,2702,1.056,2710,0.281,2711,0.252,2712,0.281,2713,0.808,2714,1.056,2718,0.672,2721,0.281,2722,0.26,2723,0.281,2724,0.281,2725,0.26,2730,0.281,2731,1.294,2732,0.281,2733,2.725,2734,0.281,2735,0.508,2739,1.294,2740,1.294,2741,0.746,2742,0.252,2743,0.281,2745,0.55,2746,0.281,2747,0.281,2748,0.281,2749,0.281,2753,0.26,2754,0.26,2755,0.269,2756,0.281,2757,0.26,2758,0.281,2759,0.508,2760,0.281,2761,0.281,2765,0.281,2766,0.281,2767,3.396,2768,0.245,2773,0.281,2774,0.281,2775,0.281,2776,0.252,2777,0.281,2778,0.281,2779,0.252,2780,0.281,2781,0.281,2782,0.281,2783,0.281,2784,0.281,2785,0.281,2786,0.26,2834,0.418,2851,0.234,2866,0.508,2904,1.122,2905,0.468,3013,1.011,3223,0.508,3270,1.053,3379,0.493,3380,0.493,3394,0.234,3397,0.26,3404,5.884,3406,0.746,3407,0.704,3408,0.746,3412,1.127,3415,0.26,3473,3.311,3474,0.207,3475,0.207,3476,0.207,3477,0.418,3478,0.412,3479,0.221,3480,0.221,3487,0.252,3490,0.281,3509,0.92,3513,0.245,3514,0.245,3515,0.245,3516,0.245,3591,0.252,3615,0.252,3617,0.252,3633,0.479,3640,0.245,3748,0.297,3759,1.841,3767,1.116,3768,0.55,3769,0.582,3770,0.582,3771,1.116,3772,0.582,3773,0.582,3774,0.582,3775,0.582,3776,1.116,3777,0.582,3778,0.582,3779,0.854,3780,0.582,3781,0.297,3782,0.297,3783,0.582,3784,0.582,3785,0.582,3786,0.582,3787,0.582,3788,0.297,3789,0.297,3790,0.582,3791,0.297,3792,0.297,3793,0.297,3794,0.582,3795,0.297,3796,0.582,3797,0.582,3798,0.582,3799,0.582,3800,0.582,3801,0.582,3802,0.582,3803,0.582,3804,0.582,3805,0.582,3806,0.854,3807,0.297,3808,0.297,3809,0.297,3810,0.297,3811,0.297,3812,0.297,3813,0.297,3814,0.297,3815,1.116,3816,0.297,3817,0.582,3818,0.297,3819,0.582,3820,0.297,3821,0.297,3822,0.297,3955,0.281,3956,0.297,3965,0.321,3966,0.321,3967,0.321,3968,0.321,3969,0.321,3970,0.321,3971,0.321,3972,0.321,3973,0.321,3974,0.321,3975,0.321,3976,0.321,3977,0.321,3978,0.321,3979,0.321,3980,0.321]],["component/137",[6,0.35]],["keyword/137",[]],["title/138-1",[2787,57.961]],["name/138-1",[]],["text/138-1",[]],["component/138-1",[]],["keyword/138-1",[]],["title/138-2",[524,22.19]],["name/138-2",[]],["text/138-2",[]],["component/138-2",[]],["keyword/138-2",[]],["title/138-3",[9,24.208,632,30.031]],["name/138-3",[]],["text/138-3",[]],["component/138-3",[]],["keyword/138-3",[]],["title/138-4",[446,33.193,773,42.691]],["name/138-4",[]],["text/138-4",[]],["component/138-4",[]],["keyword/138-4",[]],["title/138",[368,47.224,2327,49.002]],["name/138",[368,1.12,2327,1.162]],["text/138",[4,1.199,6,1.721,9,2.856,23,1.869,24,1.171,29,0.821,32,3.426,34,0.794,35,0.468,38,1.306,40,0.821,46,1.009,50,1.249,51,0.812,68,1.04,70,1.254,73,1.089,74,0.831,81,1.571,88,1.132,98,0.744,99,2.684,104,1.374,111,1.377,119,1.306,122,0.807,124,0.868,125,3.167,126,1.199,127,0.948,133,1.639,138,0.948,139,0.74,140,1.444,141,0.981,146,1.421,153,0.841,154,1.478,157,0.751,159,0.874,164,0.744,168,2.601,172,0.999,173,0.766,178,1.019,179,1.938,185,1.413,197,0.812,198,1.452,200,0.899,201,1.166,204,3.273,205,0.65,210,1.377,211,2.165,214,0.933,220,1.493,221,1.356,223,1.363,229,0.99,234,0.774,239,1.265,241,0.972,248,1.305,251,1.081,261,1.695,268,0.956,269,2.181,279,1.063,286,1.428,292,0.912,300,0.727,301,1.276,304,1.051,310,1.979,312,1.595,319,1.117,325,1.947,326,0.912,334,0.807,340,1.089,344,2.229,347,2.52,350,1.619,351,1.723,356,1.421,365,0.99,366,0.751,367,1.184,368,1.204,374,0.857,376,2.017,377,1.856,392,1.666,393,1.009,399,1.696,404,0.841,406,1.019,408,1.478,409,0.99,410,0.74,411,3.073,412,1.717,413,3.096,415,3.425,416,0.727,420,1.413,426,1.805,427,0.933,428,1.076,429,2.362,439,0.652,440,1.413,442,1.947,445,1.897,446,2.054,449,1.563,454,0.662,458,1.166,459,0.948,463,1.505,471,1.724,473,0.807,479,0.88,483,1.276,484,0.662,491,1.343,492,1.265,493,1.696,494,2.498,501,1.747,503,0.77,514,1.166,519,0.65,520,0.598,522,1.643,523,0.668,524,3.006,525,1.656,564,1.076,565,0.766,570,1.312,573,2.361,574,1.089,579,1.117,584,0.744,585,1.666,588,1.019,591,1.148,604,1.112,609,1.384,616,1.04,619,0.762,622,2.193,625,1.04,632,3.861,647,0.899,649,1.749,659,1.076,670,0.821,672,0.964,693,0.964,699,0.972,701,3.137,702,2.249,711,1.132,712,3.192,717,1.029,729,1.148,733,0.77,736,2.988,738,1.305,739,1.669,743,2.398,749,0.886,751,1.294,755,0.892,758,0.817,760,1.213,772,1.076,773,3.215,781,0.766,786,0.956,787,1.051,794,0.886,796,0.981,802,1.585,810,2.017,829,0.733,848,0.704,862,1.25,878,1.063,887,0.846,927,0.751,931,0.812,979,1.514,981,0.981,982,1.596,1015,1.282,1019,0.912,1054,1.337,1077,0.617,1079,0.821,1082,1.374,1083,1.226,1086,3.393,1088,2.617,1089,1.959,1090,0.912,1096,1.997,1101,1.148,1106,2.61,1112,1.029,1117,0.899,1124,0.831,1126,1.363,1134,1.585,1155,3.029,1157,1.428,1161,1.166,1173,2.193,1175,1.019,1183,0.956,1198,1.076,1207,1.71,1209,0.972,1246,1.04,1247,0.863,1271,1.102,1273,0.972,1287,3.072,1311,1.184,1318,1.076,1337,1.86,1342,1.04,1358,1.051,1367,1.374,1466,3.192,1509,1.226,1512,1.04,1527,1.009,1539,2.118,1559,0.899,1581,1.184,1587,2.617,1589,0.964,1593,1.117,1621,0.868,1636,1.596,1687,1.204,1714,1.166,1760,1.25,1896,1.148,1908,1.102,1921,1.226,1971,1.276,1977,1.04,2003,1.226,2012,1.25,2037,1.47,2143,1.374,2147,1.374,2204,1.076,2233,1.47,2245,2.054,2293,1.418,2329,1.117,2332,1.226,2386,1.997,2482,4.22,2612,1.132,2632,1.997,2643,2.828,2644,1.148,2646,1.166,2671,1.337,2680,1.184,2776,1.374,2788,1.166,2789,1.535,2790,1.535,2791,1.535,2792,1.089,2793,1.418,2794,1.47,2795,1.47,2796,1.535,2797,1.535,2801,2.746,2802,1.47,2804,1.535,2805,1.535,2806,3.165,2807,1.535,2808,1.535,2809,1.535,2810,1.374,2811,1.337,2812,1.132,2813,1.535,2814,1.535,2815,1.535,2904,1.132,3034,1.374,3712,1.47,3823,1.623,3824,1.623,3825,1.623]],["component/138",[6,0.35]],["keyword/138",[]],["title/139",[9,24.208,632,30.031]],["name/139",[9,0.574,632,0.712]],["text/139",[4,2.36,6,1.697,9,3.867,32,3.719,35,2.325,40,2.892,67,4.838,70,4.043,81,2.279,99,3.66,122,2.843,153,2.962,154,2.909,164,3.698,168,2.428,186,3.284,199,3.564,220,2.166,251,3.485,255,2.875,289,2.669,310,2.36,347,4.064,411,3.168,413,1.974,420,2.781,454,2.332,509,3.141,524,3.196,565,2.696,573,4.902,587,2.752,625,3.662,632,5.252,701,2.279,712,2.98,733,2.71,772,3.787,1086,3.346,1089,5.335,1583,3.881,1621,3.057,1636,3.141,2245,4.043,2677,4.838,2678,4.838,2680,5.889,2816,7.634,2817,5.405]],["component/139",[6,0.35]],["keyword/139",[]],["title/140-1",[2849,45.658]],["name/140-1",[]],["text/140-1",[]],["component/140-1",[]],["keyword/140-1",[]],["title/140-2",[1445,47.18]],["name/140-2",[]],["text/140-2",[]],["component/140-2",[]],["keyword/140-2",[]],["title/140-3",[82,32.989,347,24.123]],["name/140-3",[]],["text/140-3",[]],["component/140-3",[]],["keyword/140-3",[]],["title/140-4",[168,27.042,649,23.232]],["name/140-4",[]],["text/140-4",[]],["component/140-4",[]],["keyword/140-4",[]],["title/140",[411,19.835,1086,26.387]],["name/140",[411,0.47,1086,0.626]],["text/140",[4,1.069,6,1.391,9,2.145,22,1.781,23,1.01,32,3.509,35,2.45,41,2.315,50,1.114,65,1.921,78,1.551,81,1.032,99,2.902,119,1.164,120,1.138,122,2.167,126,1.069,133,2.753,154,1.318,157,1.197,159,2.346,164,3.896,168,3.613,173,1.221,183,1.736,190,1.444,199,1.143,210,1.228,211,1.017,234,1.234,261,1.114,269,1.724,288,1.26,289,1.209,298,2.192,300,1.159,301,1.138,312,1.048,318,1.594,334,1.288,338,1.5,347,2.797,365,1.579,366,1.197,387,2.484,407,1.247,411,3.273,412,2.458,413,2.763,416,2.525,420,1.26,424,1.413,439,1.04,445,1.247,450,2.12,468,1.524,473,1.288,479,2.362,481,2.344,484,2.699,485,2.192,486,2.192,493,1.512,494,1.642,501,2.502,503,1.228,523,1.792,524,3.096,525,2.484,568,1.303,570,2.548,573,3.162,575,1.537,585,1.095,587,2.098,632,3.482,637,2.544,639,1.444,649,3.689,654,1.831,666,2.272,670,2.205,674,2.132,676,2.941,692,2.087,693,1.537,701,1.032,702,1.778,703,2.346,709,1.288,714,2.465,715,3.354,734,1.5,741,2.978,742,1.267,743,1.295,765,1.31,810,1.326,822,2.167,837,2.439,840,2.484,843,2.346,852,3.539,887,1.35,927,1.197,981,2.633,1038,1.993,1077,0.985,1078,1.805,1086,4.19,1088,3.079,1094,1.413,1099,1.625,1118,1.715,1126,1.215,1134,1.413,1147,2.192,1151,1.5,1154,1.659,1155,3.956,1156,1.488,1157,2.143,1193,2.395,1194,1.454,1260,3.848,1313,1.565,1325,1.274,1337,1.659,1375,2.887,1439,1.805,1442,1.677,1445,5.862,1463,1.423,1466,4.17,1559,1.433,1567,1.376,1627,3.738,1636,2.395,1722,1.696,1727,3.29,1766,3.805,1787,1.5,1928,2.708,1978,1.993,2136,2.034,2182,3.128,2334,2.344,2806,2.08,2812,1.805,2834,1.859,2838,2.034,2849,3.242,2859,2.448,2860,2.448,2861,2.192,2862,2.344,2863,2.261,2865,1.921,2866,2.261,2867,2.448,2869,2.261,2871,2.448,2872,2.448,2874,1.921,2875,2.448,3981,2.8,3982,2.588]],["component/140",[6,0.35]],["keyword/140",[]],["title/141-1",[2849,45.658]],["name/141-1",[]],["text/141-1",[]],["component/141-1",[]],["keyword/141-1",[]],["title/141-2",[521,20.41,525,30.28,1088,28.986]],["name/141-2",[]],["text/141-2",[]],["component/141-2",[]],["keyword/141-2",[]],["title/141-3",[521,24.467,524,17.779]],["name/141-3",[]],["text/141-3",[]],["component/141-3",[]],["keyword/141-3",[]],["title/141-4",[32,21.264,366,29.444]],["name/141-4",[]],["text/141-4",[]],["component/141-4",[]],["keyword/141-4",[]],["title/141-5",[449,34.279,471,27.862]],["name/141-5",[]],["text/141-5",[]],["component/141-5",[]],["keyword/141-5",[]],["title/141-6",[1309,43.671]],["name/141-6",[]],["text/141-6",[]],["component/141-6",[]],["keyword/141-6",[]],["title/141-7",[1517,48.908]],["name/141-7",[]],["text/141-7",[]],["component/141-7",[]],["keyword/141-7",[]],["title/141-8",[784,49.002,3832,55.594]],["name/141-8",[]],["text/141-8",[]],["component/141-8",[]],["keyword/141-8",[]],["title/141-9",[484,25.973,1015,28.11]],["name/141-9",[]],["text/141-9",[]],["component/141-9",[]],["keyword/141-9",[]],["title/141-10",[584,29.163,1258,31.317]],["name/141-10",[]],["text/141-10",[]],["component/141-10",[]],["keyword/141-10",[]],["title/141-11",[491,29.444,1258,31.317]],["name/141-11",[]],["text/141-11",[]],["component/141-11",[]],["keyword/141-11",[]],["title/141-12",[355,41.953]],["name/141-12",[]],["text/141-12",[]],["component/141-12",[]],["keyword/141-12",[]],["title/141-13",[239,34.623]],["name/141-13",[]],["text/141-13",[]],["component/141-13",[]],["keyword/141-13",[]],["title/141-14",[725,33.193,781,30.031]],["name/141-14",[]],["text/141-14",[]],["component/141-14",[]],["keyword/141-14",[]],["title/141-15",[363,34.179]],["name/141-15",[]],["text/141-15",[]],["component/141-15",[]],["keyword/141-15",[]],["title/141",[521,24.467,524,17.779]],["name/141",[521,0.58,524,0.421]],["text/141",[4,1.292,6,1.356,19,2.802,23,1.988,24,3.302,32,1.703,35,1.468,38,1.407,41,1.663,51,1.565,81,1.248,111,1.484,120,1.376,133,1.302,153,1.622,157,1.447,168,2.74,186,3.706,197,1.565,198,2.55,199,1.382,211,3.92,220,1.186,227,2.153,241,1.874,251,4.222,269,3.24,281,2.153,301,3.599,312,1.267,366,2.983,375,1.557,395,4.249,407,2.454,410,1.427,411,3.491,413,2.569,429,1.207,439,1.257,445,1.507,449,1.685,450,5.453,492,2.221,512,1.557,519,1.252,520,1.879,521,4.25,523,1.287,524,3.303,525,2.906,527,1.642,530,2.833,550,2.577,570,2.302,575,1.858,585,3.915,609,2.429,616,2.005,641,1.891,649,2.714,699,1.874,755,1.72,765,1.583,781,2.405,822,2.535,837,3.412,838,2.153,840,1.784,843,1.685,852,1.674,855,3.301,922,1.784,979,2.658,982,2.802,1031,3.283,1052,4.198,1088,4.059,1155,1.548,1157,1.539,1194,1.758,1204,1.908,1226,1.858,1244,2.005,1288,2.649,1290,2.709,1294,2.321,1297,3.924,1309,1.72,1366,2.098,1466,1.632,1497,1.858,1517,1.926,1636,2.802,1676,3.718,2017,2.459,2646,3.66,2725,2.733,2834,5.339,2840,2.577,3407,2.577,3478,2.214,3659,2.733,3660,4.315,3833,6.447,3834,5.095,3835,5.095,3836,3.128,3837,3.128,3839,3.128,3840,6.447,3841,4.198,3842,3.128,3843,3.128,3844,5.095]],["component/141",[6,0.35]],["keyword/141",[]],["title/142-1",[413,21.993,501,28.235]],["name/142-1",[]],["text/142-1",[]],["component/142-1",[]],["keyword/142-1",[]],["title/142-2",[501,23.554,524,14.831,1175,33.33]],["name/142-2",[]],["text/142-2",[]],["component/142-2",[]],["keyword/142-2",[]],["title/142-3",[366,24.562,412,23.141,501,23.554]],["name/142-3",[]],["text/142-3",[]],["component/142-3",[]],["keyword/142-3",[]],["title/142",[412,27.741,501,28.235]],["name/142",[412,0.658,501,0.669]],["text/142",[4,0.839,6,2.086,9,1.346,16,1.632,23,1.38,24,1.427,29,1.028,32,0.679,34,0.994,35,2.019,38,0.913,50,1.523,70,0.878,89,2.268,90,1.988,98,1.621,99,2.725,121,0.767,122,1.01,124,3.748,125,0.905,126,1.461,133,2.656,139,0.926,144,1.028,157,1.637,159,5.603,164,2.155,168,0.863,170,1.823,175,1.262,194,0.878,197,1.77,200,1.959,205,0.813,210,0.963,213,1.228,218,1.217,220,0.77,221,0.949,223,0.953,234,0.968,241,2.12,251,1.752,275,1.046,295,1.33,311,1.066,315,1.362,347,0.77,351,0.996,366,2.603,368,1.507,374,1.869,377,1.37,392,1.497,395,0.983,406,4.006,411,2.892,412,3.798,413,2.205,415,2.2,417,0.989,418,2.682,420,0.989,430,1.158,445,1.704,473,1.01,484,2.296,492,2.453,497,1.141,499,3.786,501,5.021,512,1.761,519,0.813,521,0.781,522,1.149,523,0.835,524,3.162,525,3.996,526,1.437,537,1.33,538,2.345,556,1.177,565,0.958,573,2.015,579,1.397,585,2.964,587,0.978,593,3.377,595,1.346,600,1.397,609,1.687,619,2.208,632,1.67,633,1.275,635,1.839,639,1.973,649,2.329,676,1.059,679,1.217,692,1.695,694,1.101,699,2.12,701,3.339,702,3.417,704,1.149,710,1.534,712,1.059,758,1.781,760,2.352,775,2.084,791,0.999,801,1.362,802,1.932,808,1.379,818,1.932,829,2.124,837,1.734,852,1.087,855,1.316,878,1.33,924,2.179,966,1.72,974,1.459,979,1.845,982,1.945,1077,1.346,1079,1.028,1086,3.612,1091,2.746,1113,2.102,1118,1.346,1121,1.564,1132,1.722,1147,1.781,1148,1.288,1151,3.26,1155,1.751,1156,2.703,1157,1.741,1168,1.564,1170,1.186,1175,2.952,1198,1.346,1220,1.316,1247,2.499,1251,1.275,1253,2.003,1256,1.302,1257,2.754,1260,1.059,1271,1.379,1298,1.228,1310,1.275,1311,2.582,1313,1.228,1314,1.482,1323,2.626,1325,0.999,1366,2.373,1442,1.316,1445,1.206,1466,2.935,1497,1.206,1549,1.564,1559,1.124,1567,1.08,1573,1.534,1616,1.417,1636,3.094,1677,1.632,1736,1.397,1752,1.33,1883,1.774,1899,1.596,1903,1.596,1910,1.72,2012,2.724,2072,1.459,2142,1.72,2244,1.72,2253,1.482,2329,1.397,2658,1.437,2672,1.632,2849,1.167,2861,4.765,2883,1.921,2884,1.921,2885,1.921,2886,3.347,2887,4.448,2888,1.921,2889,1.921,2890,1.839,2892,1.921,2893,1.632,2894,1.921,2896,1.921,2899,3.347,2900,1.921,2901,3.347,2902,1.774,2903,3.347,2904,1.417,2905,1.632,2906,1.921,2911,1.774,2912,1.921,2913,1.774,2914,1.921,2915,1.921,3266,4.765]],["component/142",[6,0.35]],["keyword/142",[]],["title/143-1",[392,26.93,671,26.709]],["name/143-1",[]],["text/143-1",[]],["component/143-1",[]],["keyword/143-1",[]],["title/143",[1751,57.961]],["name/143",[1751,1.927]],["text/143",[23,1.71,35,3.315,50,1.887,90,4.51,113,2.464,186,2.521,198,2.194,211,1.723,239,2.898,269,1.736,312,1.776,377,2.574,392,1.855,407,2.112,412,1.911,463,2.273,484,1.79,507,4.018,520,2.451,521,3.896,532,1.981,537,2.873,568,4.04,613,3.254,642,1.928,649,2.931,671,4.418,686,1.99,692,2.101,701,1.749,751,1.954,78
12,2.605,807,7.013,837,1.617,848,1.903,878,2.873,934,3.525,1086,1.818,1126,3.121,1134,5.257,1216,4.161,1272,5.26,1294,3.254,1463,2.411,1500,4.268,1501,3.312,1751,4.851,1769,4.515,1967,5.021,1988,6.339,2257,3.447,2260,7.201,2287,7.201,2294,3.103,2325,3.83,2392,6.453,2646,3.149,2793,3.83,2849,2.521,2935,3.447,2955,7.654,2956,4.148,2960,9.888,2961,3.83,2963,3.971,2969,6.021,2970,8.72,3008,4.148,3666,9.108,3868,4.148,3983,7.19,3984,7.19,3985,7.19,3986,7.19,3987,4.743,3988,4.743,3989,4.743,3990,4.743,3991,4.743]],["component/143",[6,0.35]],["keyword/143",[]],["title/144-1",[524,17.779,642,27.985]],["name/144-1",[]],["text/144-1",[]],["component/144-1",[]],["keyword/144-1",[]],["title/144-2",[2109,50.377]],["name/144-2",[]],["text/144-2",[]],["component/144-2",[]],["keyword/144-2",[]],["title/144-3",[351,17.916,642,27.985]],["name/144-3",[]],["text/144-3",[]],["component/144-3",[]],["keyword/144-3",[]],["title/144-4",[363,34.179]],["name/144-4",[]],["text/144-4",[]],["component/144-4",[]],["keyword/144-4",[]],["title/144-5",[3161,67.261]],["name/144-5",[]],["text/144-5",[]],["component/144-5",[]],["keyword/144-5",[]],["title/144-6",[2916,57.961]],["name/144-6",[]],["text/144-6",[]],["component/144-6",[]],["keyword/144-6",[]],["title/144-7",[168,27.042,642,27.985]],["name/144-7",[]],["text/144-7",[]],["component/144-7",[]],["keyword/144-7",[]],["title/144-8",[2917,62.432]],["name/144-8",[]],["text/144-8",[]],["component/144-8",[]],["keyword/144-8",[]],["title/144-9",[2918,62.432]],["name/144-9",[]],["text/144-9",[]],["component/144-9",[]],["keyword/144-9",[]],["title/144",[424,34.748,642,27.985]],["name/144",[424,0.824,642,0.663]],["text/144",[4,0.938,6,1.851,9,1.483,24,0.916,32,2.029,34,1.908,35,2.536,40,1.15,41,1.208,51,1.951,68,1.456,70,0.982,82,1.178,88,1.585,89,2.499,90,3.412,98,2.347,99,2.333,111,1.077,120,1.714,122,1.94,126,0.938,133,0.946,147,1.386,148,2.057,155,1.143,157,1.804,170,2.009,174,1.258,179,1.918,194,1.685,197,1.137,199,1.722,211,0.893,213,1.373,220,0.861,228,1.224,232,1.361,234,3.259,251,1.908,261,2.204,276,2.448,289,1.061,292,3.84,293,1.506,301,0.999,309,2.316,310,2.508,312,1.579,314,1.192,315,1.524,334,1.13,347,1.478,351,3.31,363,4.344,371,1.426,375,1.94,376,3.11,388,1.296,408,1.157,411,2.845,413,2.91,414,1.441,416,2.293,417,1.106,420,1.106,424,1.24,429,3.522,439,4.057,440,1.106,448,1.984,471,2.242,473,1.13,484,3.045,491,1.051,493,2.277,496,1.072,497,1.276,499,1.849,512,1.13,520,1.438,522,1.286,524,2.701,527,1.192,531,1.456,532,1.026,536,1.472,537,1.488,557,1.178,564,2.584,570,1.026,573,0.973,575,1.349,585,1.65,587,2.467,589,2.114,590,3.363,606,1.456,614,1.306,622,1.716,642,4.439,649,1.869,664,2.316,681,3.042,700,1.327,701,1.555,702,3.045,709,1.13,712,2.033,730,2.758,734,2.967,760,3.118,795,1.563,829,2.744,837,1.438,843,1.224,847,1.786,848,1.692,907,1.607,974,1.632,1015,1.003,1020,1.984,1075,3.547,1086,0.942,1089,1.94,1090,1.276,1091,1.327,1094,2.129,1116,1.061,1122,1.929,1123,1.412,1124,3.11,1155,1.124,1175,1.426,1195,2.467,1232,1.488,1256,1.456,1290,1.208,1298,3.095,1304,2.448,1305,2.357,1343,1.472,1356,1.585,1357,1.286,1358,1.472,1494,1.924,1512,1.456,1522,1.632,1559,4.131,1567,1.208,1632,1.524,1666,1.585,1808,2.648,1905,1.984,2109,3.248,2111,1.607,2133,1.658,2183,3.8,2245,1.607,2294,1.607,2372,1.524,2622,1.686,2788,1.632,2798,3.002,2865,1.686,2916,3.737,2917,1.786,2918,1.786,2919,2.758,2920,2.149,2921,1.984,2922,2.149,2923,2.149,2924,2.149,2927,1.924,2928,2.149,2929,1.786,2972,1.543,3161,3.301,3165,1.924,3190,5.495,3846,2.271,3847,2.271,3848,1.826,3849,2.057]],["component/144",[6,0.35]],["keyword/144",[]],["title/145",[848,34.474]],["name/145",[731,2.075]],["text/145",[]],["component/145",[6,0.35]],["keyword/145",[]],["title/146-1",[1086,26.387,1445,37.801]],["name/146-1",[]],["text/146-1",[]],["component/146-1",[]],["keyword/146-1",[]],["title/146-2",[524,14.831,702,21.666,837,19.576]],["name/146-2",[]],["text/146-2",[]],["component/146-2",[]],["keyword/146-2",[]],["title/146-3",[2109,50.377]],["name/146-3",[]],["text/146-3",[]],["component/146-3",[]],["keyword/146-3",[]],["title/146-4",[524,14.831,712,27.689,2812,37.033]],["name/146-4",[]],["text/146-4",[]],["component/146-4",[]],["keyword/146-4",[]],["title/146-5",[701,31.679]],["name/146-5",[]],["text/146-5",[]],["component/146-5",[]],["keyword/146-
15",[]],["title/146-6",[412,27.741,501,28.235]],["name/146-6",[]],["text/146-6",[]],["component/146-6",[]],["keyword/146-6",[]],["title/146-7",[6,13.384,524,17.779]],["name/146-7",[]],["text/146-7",[]],["component/146-7",[]],["keyword/146-7",[]],["title/146",[524,22.19]],["name/146",[524,0.738]],["text/146",[6,1.529,9,2.157,20,1.67,24,0.683,32,3.043,34,3.076,35,2.485,38,0.762,41,0.9,50,2.128,51,1.509,70,0.732,74,0.867,81,0.675,89,1.085,98,1.382,99,2.619,101,0.959,119,0.762,120,0.745,125,1.344,126,1.245,133,1.697,140,2.028,147,1.033,153,1.563,154,0.862,157,2.288,160,1.033,164,3.678,168,0.72,174,0.938,179,0.833,185,0.824,188,1.423,194,1.761,197,0.847,198,0.847,199,0.748,205,0.678,210,1.43,211,0.665,215,1.216,223,1.914,229,1.033,234,1.437,239,0.738,251,1.123,255,0.852,269,0.67,285,2.103,288,1.468,289,0.791,300,1.35,301,0.745,303,2.134,307,1.11,310,1.683,311,1.583,315,1.136,324,0.852,347,1.143,351,2.26,363,1.298,372,2.509,374,0.894,377,1.168,383,1.388,392,0.717,395,0.82,404,1.563,410,1.375,411,3.27,412,2.472,413,3.501,418,0.966,424,0.925,429,1.572,437,0.931,438,1.476,439,1.212,445,1.452,454,1.231,457,1.534,471,1.32,477,1.257,479,1.635,484,0.691,492,1.314,493,0.989,496,1.423,497,0.951,499,1.43,501,2.789,503,0.803,516,1.216,519,1.207,523,0.697,524,3.447,525,3.234,527,2.139,532,0.765,538,1.122,556,1.747,557,0.878,559,1.534,565,1.423,570,0.765,573,2.919,574,1.136,585,2.4,609,1.437,619,2.322,632,1.923,641,1.024,642,1.792,649,2.07,666,1.573,667,1.304,671,0.711,676,1.573,686,1.85,687,0.966,692,1.445,694,0.918,699,1.015,700,0.989,701,3.201,702,3.717,712,4.187,714,0.959,733,0.803,734,0.981,736,0.918,765,0.857,794,0.925,798,1.257,801,1.136,802,2.7,806,1.933,814,1.257,837,2.318,843,0.912,848,2.146,852,0.906,887,1.573,927,2.288,928,2.2,939,1.434,975,1.165,981,1.024,992,0.951,1031,0.862,1075,1.761,1077,0.644,1079,0.857,1086,3.942,1088,1.646,1090,2.29,1094,1.646,1096,1.165,1098,1.006,1113,1.006,1118,1.122,1132,0.824,1134,3.096,1140,2.237,1146,1.304,1150,3.138,1155,3.796,1157,0.833,1166,2.134,1175,1.063,1176,2.103,1194,0.951,1195,1.452,1209,1.015,1220,1.097,1226,1.006,1234,1.122,1240,1.085,1242,1.613,1244,1.085,1247,0.9,1258,0.833,1306,2.2,1314,1.236,1316,1.074,1318,1.122,1344,0.974,1445,1.006,1453,1.434,1454,1.304,1466,4.498,1512,1.085,1515,1.361,1561,1.361,1583,1.15,1587,2.225,1618,2.37,1627,1.122,1634,1.395,1636,0.931,1637,1.216,1662,1.257,1666,2.103,1687,1.257,1695,1.534,1787,0.981,1848,1.257,1868,1.216,1889,1.479,1928,1.874,1960,1.181,2008,1.479,2055,1.395,2109,1.912,2112,1.279,2196,1.279,2489,1.534,2632,1.165,2643,1.216,2647,1.395,2788,2.166,2812,1.181,2865,4.208,2930,1.602,2931,1.602,2932,1.602,2933,1.602,2934,1.361,2935,1.331,2936,2.553,2938,1.602,2939,1.602,2940,1.602,2941,1.602,2942,1.602,3166,1.693,3992,1.832,3993,1.832,3994,1.832]],["component/146",[6,0.35]],["keyword/146",[]],["title/147-1",[392,26.93,671,26.709]],["name/147-1",[]],["text/147-1",[]],["component/147-1",[]],["keyword/147-1",[]],["title/147-2",[521,24.467,2953,53.891]],["name/147-2",[]],["text/147-2",[]],["component/147-2",[]],["keyword/147-2",[]],["title/147",[356,31.147,547,39.186]],["name/147",[356,1.292]],["text/147",[6,0.626,9,2.745,20,1.649,35,3.296,50,1.282,57,4.899,73,1.998,81,4.124,82,1.544,90,6.038,111,2.322,170,1.535,186,3.582,198,1.49,211,1.923,239,2.134,269,2.467,289,1.392,312,1.206,347,1.856,356,4.196,377,2.413,392,2.071,407,3.002,411,0.928,413,2.963,417,1.45,450,1.45,463,3.231,471,2.143,476,2.293,484,1.216,489,2.814,520,1.805,521,3.768,532,1.346,547,1.834,568,1.499,585,2.071,642,1.31,649,2.275,670,1.508,671,2.054,672,3.702,686,2.222,702,1.998,725,3.251,751,2.777,810,3.697,837,1.805,840,1.699,848,1.293,927,1.378,931,1.49,1077,1.133,1086,3.756,1126,2.926,1133,2.454,1134,4.681,1135,2.522,1176,3.415,1216,3.705,1241,2.986,1290,2.602,1294,3.633,1375,1.974,1463,4.384,1473,2.933,1488,1.87,1500,4.558,1647,2.139,1658,3.767,1769,5.417,1967,2.25,1988,7.832,2257,2.341,2260,6.41,2287,6.892,2294,2.108,2301,2.25,2325,5.444,2632,2.05,2644,3.464,2646,2.139,2849,1.712,2854,8.206,2953,6.112,2954,4.631,2955,3.698,2958,2.818,2960,7.49,2961,2.602,2962,2.602,2963,8.206,2964,2.818,2966,4.276,2968,4.631,2969,4.434,2970,6.537,2981,2.818,2982,2.818,2983,2.818,2984,2.818,2985,2.818,2986,2.818,2987,2.818,3265,2.522,3852,2.978,3853,2.978,3854,2.978,3855,2.978,3856,2.978]],["component/147",[6,0.35]],["keyword/147",[]],["title/148-1",[2787,57.961]],["name/148-1",[]],["text/148-1",[]],["component/148-1",[]],["keyword/148-1",[]],["title/148-2",[35,22.889]],["name/148-2",[]],["text/148-2",[]],["component/148-2",[]],["keyword/148-2",[]],["title/148-3",[35,22.889]],["name/148-3",[]],["text/148-3",[]],["component/148-3",[]],["keyword/148-3",[]],["title/148-4",[3001,61.159]],["name/148-4",[]],["text/148-4",[]],["component/148-4",[]],["keyword/148-4",[]],["title/148-5",[503,30.183,1194,35.755]],["name/148-5",[]],["text/148-5",[]],["component/148-5",[]],["keyword/148-5",[]],["title/148",[363,22.844,1304,33.33,1305,32.091]],["name/148",[363,0.454,1304,0.663,1305,0.638]],["text/148",[9,2.739,27,3.506,32,2.406,35,2.075,40,3.645,119,3.239,120,3.167,140,3.583,153,3.733,251,3.52,301,3.167,351,3.272,363,5.002,365,4.393,411,2.945,417,4.599,420,5.45,456,4.831,520,2.656,584,3.3,589,3.905,590,5.232,649,2.629,672,4.278,709,4.701,751,3.209,837,2.656,924,5.818,1199,3.932,1238,5.344,1304,5.932,1305,4.353,1359,5.66,1624,5.933,2612,5.024,3002,6.812,3848,5.789]],["component/148",[6,0.35]],["keyword/148",[]],["title/149-1",[2742,67.261]],["name/149-1",[]],["text/149-1",[]],["component/149-1",[]],["keyword/149-1",[]],["title/149",[366,36.749]],["name/149",[366,1.222]],["text/149",[10,6.343,31,7.782,32,3.442]],["component/149",[6,0.35]],["keyword/149",[]],["title/150-1",[2787,57.961]],["name/150-1",[]],["text/150-1",[]],["component/150-1",[]],["keyword/150-1",[]],["title/150-2",[35,22.889]],["name/150-2",[]],["text/150-2",[]],["component/150-2",[]],["keyword/150-2",[]],["title/150-3",[35,22.889]],["name/150-3",[]],["text/150-3",[]],["component/150-3",[]],["keyword/150-3",[]],["title/150-4",[3001,61.159]],["name/150-4",[]],["text/150-4",[]],["component/150-4",[]],["keyword/150-4",[]],["title/150-5",[503,30.183,1194,35.755]],["name/150-5",[]],["text/150-5",[]],["component/150-5",[]],["keyword/150-5",[]],["title/150-6",[848,34.474]],["name/150-6",[]],["text/150-6",[]],["component/150-6",[]],["keyword/150-6",[]],["title/150",[363,22.844,411,16.546,590,29.396]],["name/150",[363,0.454,411,0.329,590,0.585]],["text/150",[6,1.957,32,2.352,35,3.197,120,3.095,127,4.111,146,3.445,251,2.622,3
105,4.98,312,2.85,351,3.337,361,5.532,363,4.965,365,4.294,401,4.611,411,2.901,420,3.426,423,5.42,440,3.426,499,4.414,520,3.845,521,3.578,584,3.225,589,5.047,590,5.774,604,2.696,619,3.305,626,5.223,709,4.631,733,3.338,734,4.078,1199,3.843,1201,4.511,1586,4.078,1918,5.056,1950,6.149,2768,5.799,3056,6.658]],["component/150",[6,0.35]],["keyword/150",[]],["title/151-1",[689,53.952]],["name/151-1",[]],["text/151-1",[]],["component/151-1",[]],["keyword/151-1",[]],["title/151-2",[173,37.482]],["name/151-2",[]],["text/151-2",[]],["component/151-2",[]],["keyword/151-2",[]],["title/151-3",[2336,62.432]],["name/151-3",[]],["text/151-3",[]],["component/151-3",[]],["keyword/151-3",[]],["title/151-4",[3059,67.261]],["name/151-4",[]],["text/151-4",[]],["component/151-4",[]],["keyword/151-4",[]],["title/151-5",[3062,67.261]],["name/151-5",[]],["text/151-5",[]],["component/151-5",[]],["keyword/151-5",[]],["title/151-6",[3862,71.94]],["name/151-6",[]],["text/151-6",[]],["component/151-6",[]],["keyword/151-6",[]],["title/151-7",[372,39.186,521,24.467]],["name/151-7",[]],["text/151-7",[]],["component/151-7",[]],["keyword/151-7",[]],["title/151",[634,48.014]],["name/151",[634,1.596]],["text/151",[0,1.731,1,1.94,4,1.115,23,2.268,24,1.821,32,1.943,35,2.722,38,1.215,40,1.367,69,1.344,70,2.513,90,1.517,93,2.079,98,2.068,119,1.215,120,3.323,133,1.124,140,1.344,144,1.367,146,1.322,147,1.647,157,2.088,185,1.315,186,1.552,194,1.951,199,1.193,202,1.769,211,1.773,218,2.704,220,1.024,223,1.268,228,1.455,241,2.704,244,1.647,248,3.628,251,2.531,255,2.926,256,1.475,269,1.069,289,1.262,291,3.41,303,1.911,311,1.417,312,1.094,317,2.123,323,1.769,336,1.834,348,2.004,366,1.249,372,4.654,374,1.426,376,2.312,377,1.046,383,1.243,387,2.574,404,3.918,407,1.301,410,1.232,413,2.997,416,1.209,417,3.307,429,2.916,439,1.085,440,1.315,442,1.812,445,2.174,454,1.102,463,1.4,472,1.94,473,1.344,490,2.779,492,1.177,496,1.274,497,1.517,503,1.281,521,2.906,522,2.555,523,1.111,527,1.417,531,1.731,534,2.287,536,1.75,563,1.971,565,2.744,567,2.446,568,4.112,573,1.934,583,1.713,584,1.238,588,1.696,595,1.79,600,1.858,634,6.832,642,1.985,647,1.495,649,0.986,676,1.409,692,2.786,693,1.604,702,1.842,703,2.431,709,1.344,717,1.713,718,2.079,724,1.632,735,2.225,743,2.259,772,1.79,780,1.591,794,1.475,822,1.344,829,2.039,837,3.595,887,1.409,912,1.911,931,3.782,1075,1.577,1077,2.584,1094,1.475,1110,1.417,1142,3.349,1162,2.957,1206,1.971,1216,1.167,1223,1.591,1227,1.971,1242,1.445,1247,1.436,1257,2.209,1289,3.41,1296,1.495,1298,2.728,1315,2.779,1316,1.713,1325,2.861,1336,1.971,1343,1.75,1366,1.812,1442,1.75,1473,1.618,1495,1.94,1512,3.727,1558,2.171,1562,1.812,1567,1.436,1589,2.681,1628,3.95,1715,2.04,1938,2.957,1977,1.731,1995,3.719,2005,2.446,2021,2.359,2059,1.679,2069,2.359,2268,2.04,2291,2.171,2329,1.858,2332,2.04,2336,5.34,2348,2.555,2368,2.079,2658,3.194,2684,2.079,2697,2.225,2711,2.287,2786,2.359,2850,2.287,2893,2.171,2921,2.359,3059,5.753,3062,3.822,3213,2.359,3305,2.225,3827,2.555,3828,2.555,3829,4.088,3830,4.27,3857,2.555,3862,5.267,3863,2.7,3864,5.814,3865,2.7,3866,2.7,3867,2.7,3868,2.555,3869,2.7,3870,2.7,3871,2.7,3872,2.7,3873,4.513,3874,2.7,3875,2.7,3876,2.7,3877,2.7,3878,2.7,3879,4.513,3880,2.7,3881,2.7,3882,2.7,3883,2.7]],["component/151",[6,0.35]],["keyword/151",[]],["title/152-1",[584,29.163,604,24.38]],["name/152-1",[]],["text/152-1",[]],["component/152-1",[]],["keyword/152-1",[]],["title/152-2",[520,23.467,604,24.38]],["name/152-2",[]],["text/152-2",[]],["component/152-2",[]],["keyword/152-2",[]],["title/152-3",[604,24.38,760,26.601]],["name/152-3",[]],["text/152-3",[]],["component/152-3",[]],["keyword/152-3",[]],["title/152-4",[151,50.022,239,27.741]],["name/152-4",[]],["text/152-4",[]],["component/152-4",[]],["keyword/152-4",[]],["title/152-5",[491,29.444,604,24.38]],["name/152-5",[]],["text/152-5",[]],["component/152-5",[]],["keyword/152-5",[]],["title/152",[604,30.428]],["name/152",[604,1.012]],["text/152",[4,1.508,6,1.373,9,2.483,24,1.473,27,2.354,29,1.849,32,3.596,35,2.213,38,1.643,41,1.12,50,0.906,68,1.35,69,2.871,74,1.079,77,1.297,84,2.548,92,1.365,98,0.965,122,1.048,124,1.127,127,2.133,133,0.877,138,1.23,143,4.843,149,1.449,151,1.656,168,0.895,173,0.994,199,0.93,205,0.843,211,1.435,225,1.784,231,1.251,239,0.918,243,1.336,261,2.483,275,1.085,277,1.396,288,1.025,289,0.984,292,1.183,301,0.926,310,0.87,312,0.853,324,1.06,343,3.587,344,4.346,347,1.833,351,2.014,355,1.113,357,1.322,360,1.591,363,2.809,375,2.871,377,1.414,395,1.02,408,1.072,411,3.07,412,2.108,413,1.262,429,2.518,439,0.846,444,1.693,445,1.759,454,0.86,471,1.599,473,1.048,484,2.919,489,1.211,491,1.69,492,1.592,496,2.723,519,1.462,520,2.638,521,1.404,522,1.192,523,0.866,524,2.472,565,3.375,570,1.65,582,1.262,584,4.513,585,2.442,587,1.015,603,1.413,604,4.243,609,1.741,613,1.563,619,2.27,649,3.107,669,1.735,671,2.029,672,1.251,673,4.754,702,1.491,726,1.241,740,1.449,751,0.939,760,3.822,765,1.066,780,3.399,781,1.724,823,1.273,829,2.607,837,2.407,852,1.127,887,1.099,907,1.49,922,1.201,931,1.054,1011,1.201,1015,3.391,1045,1.513,1057,1.079,1077,1.839,1094,1.15,1101,1.49,1115,3.285,1116,4.395,1122,1.042,1126,0.989,1151,2.116,1157,1.037,1162,1.38,1206,1.537,1215,2.659,1216,2.821,1231,1.622,1236,3.244,1253,1.192,1255,2.71,1257,4.718,1258,5.237,1260,3.01,1266,2.421,1282,1.413,1298,3.488,1325,1.797,
11337,1.35,1345,3.191,1347,1.591,1350,2.665,1357,1.192,1495,1.513,1502,1.449,1522,1.513,1572,1.563,1576,3.133,1606,1.656,1636,2.659,1671,1.469,1696,1.537,1850,3.529,2243,1.513,2400,1.622,2401,1.622,2402,1.622,2605,1.656,2622,4.282,2803,1.622,2810,1.784,2945,1.591,3083,1.993,3084,1.993,3085,3.455,3086,1.993,3087,1.993,3088,3.455,3089,3.455,3090,1.993,3091,1.84,3092,1.993,3093,1.993,3094,1.993,3095,1.993,3096,1.993,3100,1.908,3101,1.908,3102,1.993,3104,3.455,3105,1.84]],["component/152",[6,0.35]],["keyword/152",[]],["title/153-1",[2787,57.961]],["name/153-1",[]],["text/153-1",[]],["component/153-1",[]],["keyword/153-1",[]],["title/153-2",[35,22.889]],["name/153-2",[]],["text/153-2",[]],["component/153-2",[]],["keyword/153-2",[]],["title/153-3",[35,22.889]],["name/153-3",[]],["text/153-3",[]],["component/153-3",[]],["keyword/153-3",[]],["title/153-4",[3001,61.159]],["name/153-4",[]],["text/153-4",[]],["component/153-4",[]],["keyword/153-4",[]],["title/153-5",[503,30.183,1194,35.755]],["name/153-5",[]],["text/153-5",[]],["component/153-5",[]],["keyword/153-5",[]],["title/153-6",[848,34.474]],["name/153-6",[]],["text/153-6",[]],["component/153-6",[]],["keyword/153-6",[]],["title/153",[363,22.844,589,28.788,590,29.396]],["name/153",[363,0.454,589,0.573,590,0.585]],["text/153",[6,1.394,9,3.4,35,2.915,84,4.622,120,3.931,139,3.022,153,4.634,193,4.445,251,2.469,255,3.335,301,2.914,305,4.689,351,3.183,363,4.66,365,4.042,383,3.051,395,4.329,411,2.786,417,4.352,420,4.352,428,4.392,438,3.243,499,4.24,519,2.653,520,3.73,536,4.293,584,3.036,589,4.848,590,5.602,604,2.538,649,2.419,741,3.5,751,2.953,837,2.443,924,4.08,1199,3.618,1201,4.247,1918,4.759,3106,6.268,3107,5.788,3108,6.268,3109,4.835,3110,4.835,3111,6.002,3112,6.268,3113,6.268,3114,6.268,3848,5.326]],["component/153",[6,0.35]],["keyword/153",[]],["title/154",[32,21.264,411,19.835]],["name/154",[32,0.504,411,0.47]],["text/154",[6,0.887,9,1.603,23,3.567,24,1.004,32,3.836,35,2.53,41,1.324,69,1.239,70,1.076,73,1.67,81,0.993,111,1.999,119,1.896,126,1.028,143,1.848,144,1.26,150,2.051,153,1.291,173,1.175,185,1.212,199,1.862,220,0.944,255,1.253,257,1.65,261,1.071,269,2.17,289,1.163,300,2.454,301,1.095,310,1.028,318,1.533,324,1.253,343,2.621,347,2.735,363,1.071,374,1.315,376,1.275,377,1.632,392,1.054,395,2.041,411,3.236,413,0.86,418,1.42,429,0.961,439,1.001,440,1.212,462,1.505,484,3.583,491,2.536,492,1.837,496,1.175,511,1.67,519,1.688,520,2.661,523,1.024,524,2.452,531,1.596,565,2.587,568,1.253,573,1.067,576,1.443,584,2.956,587,1.199,604,2.1,609,2.009,619,1.169,632,1.175,642,2.411,649,2.001,654,1.762,668,1.788,692,1.193,733,1.181,742,4.884,760,3.822,780,1.466,781,2.587,789,1.466,791,1.225,802,1.359,823,1.505,829,1.125,837,0.918,840,1.42,843,1.341,852,5.21,883,3.028,927,1.152,931,1.246,1015,3.877,1057,1.275,1075,1.454,1077,2.981,1086,1.748,1088,1.359,1089,1.239,1115,1.253,1116,1.969,1126,4.685,1132,1.212,1154,1.596,1156,1.431,1206,3.076,1215,2.318,1216,4.884,1257,4.476,1258,4.91,1267,4.05,1272,1.631,1309,1.369,1347,1.881,1350,1.817,1364,1.788,1456,3.937,1463,1.369,1497,2.504,1500,2.241,1576,1.613,1636,2.318,1647,1.788,1650,1.431,1665,2.462,1671,1.737,1696,1.817,1769,1.691,1778,6.792,1892,1.713,1918,1.788,1943,2.108,1988,1.762,2254,2.255,2257,1.957,2389,1.957,2400,1.917,2401,1.917,2402,1.917,2482,1.479,2849,1.431,2874,1.848,2945,1.881,3100,2.255,3101,2.255,3115,2.355,3117,2.355,3118,2.255,3119,2.355,3120,2.355,3121,2.355,3305,2.051,3886,8.45,3887,2.49,3995,2.693,3996,2.693,3997,2.693]],["component/154",[6,0.35]],["keyword/154",[]],["title/155",[99,21.722,760,26.601]],["name/155",[99,0.515,760,0.631]],["text/155",[34,4.99,35,1.447,51,2.513,99,2.97,144,4.404,157,3.403,168,2.134,170,2.587,228,2.705,229,3.063,234,2.394,239,3.206,261,3.744,376,6.075,387,2.864,411,1.565,412,3.206,413,2.541,424,2.742,438,2.458,484,3.909,521,2.827,524,1.403,642,3.234,649,1.833,664,5.69,668,3.607,745,3.328,760,3.637,765,3.722,801,3.369,829,2.269,837,2.712,840,2.864,843,2.705,848,2.18,878,3.29,945,3.665,963,6.535,1015,2.218,1019,2.821,1045,3.607,1079,2.542,1090,4.132,1112,3.185,1132,2.445,1165,3.411,1166,3.553,1175,3.153,1215,2.761,1216,2.17,1236,5.837,1247,2.67,1254,3.185,1267,3.153,1420,3.867,1490,3.009,1495,3.607,1621,4.656,1669,8.167,1670,8.634,1671,3.503,1783,3.503,2196,3.794,2376,3.726,2392,4.037,2917,3.947,2918,3.947,2927,4.253,2929,5.781,3145,4.751,3146,4.751,3147,4.253,3148,4.037]],["component/155",[6,0.35]],["keyword/155",[]],["title/156-1",[99,21.722,1272,41.695]],["name/156-1",[]],["text/156-1",[]],["component/156-1",[]],["keyword/156-1",[]],["title/156",[99,21.722,411,19.835]],["name/156",[99,0.515,411,0.47]],["text/156",[0,3.058,4,2.925,6,1.489,19,2.623,20,2.642,23,1.861,32,1.594,35,2.041,38,2.146,70,2.062,78,2.859,99,4.053,111,2.263,120,2.098,144,2.415,168,2.027,190,2.661,239,2.08,347,3.201,395,2.31,396,5.997,411,3.111,429,1.841,439,2.846,454,1.947,484,3.814,496,3.342,519,1.91,521,1.834,524,2.611,541,3.836,544,3.541,573,3.035,574,3.201,582,2.859,619,3.965,632,2.252,649,3.083,702,1.947,709,3.524,742,3.466,751,3.156,758,4.703,760,2.96,781,5.362,794,2.605,837,1.759,843,2.57,852,3.79,1015,3.73,1077,2.694,1086,1.978,1089,2.374,1126,3.325,1154,3.058,1216,3.65,1272,6.123,1303,2.911,1307,3.482,1309,2.623,1586,2.765,1636,4.644,1778,4.94,1928,2.966,2376,3.541,2389,6.638,2482,2.834,2680,5.168,2695,5.997,2849,2.743,2955,3.604,3142,4.514,3886,4.041,3998,5.161,3999,5.161,4000,5.161,4001,5.161]],["component/156",[6,0.35]],["keyword/156",[]],["title/157-1",[383,36.572]],["name/157-1",[]],["text/157-1",[]],["component/157-1",[]],["keyword/157-1",[]],["title/157-2",[348,38.436,351,14.582,363,13.735,439,12.827,524,8.917]],["name/157-2",[]],["text/157-2",[]],["component/157-2",[]],["keyword/157-2",[]],["title/157-3",[351,
117.916,439,25.575]],["name/157-3",[]],["text/157-3",[]],["component/157-3",[]],["keyword/157-3",[]],["title/157-4",[351,17.916,532,28.755]],["name/157-4",[]],["text/157-4",[]],["component/157-4",[]],["keyword/157-4",[]],["title/157-5",[363,27.385,3107,55.594]],["name/157-5",[]],["text/157-5",[]],["component/157-5",[]],["keyword/157-5",[]],["title/157-6",[363,27.385,672,37.801]],["name/157-6",[]],["text/157-6",[]],["component/157-6",[]],["keyword/157-6",[]],["title/157-7",[351,17.916,524,17.779]],["name/157-7",[]],["text/157-7",[]],["component/157-7",[]],["keyword/157-7",[]],["title/157",[351,14.945,848,23.041,1185,30.516]],["name/157",[351,0.297,848,0.458,1185,0.607]],["text/157",[6,1.286,9,2.043,23,3.921,24,0.767,27,2.174,29,1.69,32,2.93,35,1.942,38,2.008,41,2.374,50,1.922,51,1.671,70,0.821,75,1.41,81,1.781,82,1.731,84,1.326,98,0.871,99,1.14,126,1.379,133,1.859,139,0.867,153,2.785,164,1.53,168,0.808,174,1.052,185,0.925,190,1.06,194,1.443,199,1.972,205,0.761,211,2.403,220,1.266,224,1.308,251,2.001,257,1.26,269,0.752,275,0.979,292,1.068,295,1.245,306,1.052,309,1.983,314,0.997,324,0.956,326,1.068,334,0.946,347,0.72,351,3.422,361,1.494,363,4.391,372,1.17,375,2.222,377,0.736,383,2.056,393,1.181,395,1.617,401,1.245,410,0.867,411,2.894,412,0.828,413,3.03,416,1.999,417,0.925,420,1.625,429,1.723,438,0.93,439,3.634,450,0.925,454,1.822,471,0.832,479,1.031,484,2.192,490,1.17,491,1.545,494,2.118,496,0.897,499,3.447,500,1.326,509,1.045,512,0.946,519,0.761,520,3.862,521,0.731,524,2.157,527,0.997,532,3.668,536,1.231,547,1.17,570,1.509,573,0.814,582,1.139,584,0.871,587,2.151,589,2.421,590,3.387,600,2.298,601,1.26,604,2.058,617,1.308,619,1.568,625,1.218,642,1.964,649,2.963,666,0.991,671,2.567,686,1.516,701,0.758,702,2.192,704,1.076,709,0.946,712,0.991,715,1.463,733,0.901,747,1.609,762,1.365,765,0.962,767,1.66,780,1.967,788,2.163,794,1.038,809,1.129,822,0.946,829,0.859,837,2.68,927,0.879,1012,1.566,1031,0.968,1043,1.436,1057,1.71,1075,1.95,1077,2.043,1078,1.326,1079,0.962,1086,1.852,1089,3.043,1091,1.11,1094,1.038,1122,1.652,1123,4.19,1124,3.133,1136,1.609,1161,1.365,1168,1.463,1170,1.95,1175,1.193,1195,3.501,1198,1.26,1199,2.438,1201,2.14,1224,1.721,1232,1.245,1240,1.218,1257,2.186,1258,1.643,1260,2.329,1282,2.24,1290,2.374,1298,1.149,1300,1.193,1304,2.096,1305,2.699,1310,2.096,1313,2.018,1315,1.17,1325,1.643,1337,1.218,1344,1.092,1364,1.365,1500,1.01,1559,1.052,1583,1.291,1624,1.566,1632,1.275,1650,1.092,1665,1.11,1765,1.721,1808,1.291,1938,1.245,1950,1.66,1951,1.609,1977,1.218,1996,1.245,2020,1.528,2057,1.41,2183,2.478,2865,1.41,2879,1.528,2916,2.436,2919,1.345,3109,1.387,3110,1.387,3111,1.721,3165,1.609,3175,1.566,3176,4.224,3177,3.158,3179,1.798,3180,3.024,3181,1.66,3182,1.609,3186,1.9,3190,2.684,3191,1.798,3193,1.798,3848,5.417,4002,2.056,4003,2.056,4004,2.056,4005,4.83,4006,2.056,4007,2.056,4008,2.056,4009,2.056]],["component/157",[6,0.35]],["keyword/157",[]],["title/158-1",[300,23.767,524,14.831,1169,36.532]],["name/158-1",[]],["text/158-1",[]],["component/158-1",[]],["keyword/158-1",[]],["title/158-2",[32,21.264,573,27.269]],["name/158-2",[]],["text/158-2",[]],["component/158-2",[]],["keyword/158-2",[]],["title/158-3",[413,21.993,723,36.299]],["name/158-3",[]],["text/158-3",[]],["component/158-3",[]],["keyword/158-3",[]],["title/158-4",[519,31.799]],["name/158-4",[]],["text/158-4",[]],["component/158-4",[]],["keyword/158-4",[]],["title/158-5",[493,31.01,524,14.831,573,22.748]],["name/158-5",[]],["text/158-5",[]],["component/158-5",[]],["keyword/158-5",[]],["title/158",[269,21.015,742,25.983,743,26.564]],["name/158",[269,0.418,742,0.517,743,0.528]],["text/158",[6,1.568,20,1.741,24,2.064,32,2.162,34,4.016,35,1.474,46,1.955,69,1.564,77,1.936,81,1.254,99,3.299,120,2.845,122,1.564,126,1.298,133,1.309,154,1.601,159,1.693,164,1.441,173,1.484,179,1.547,194,2.211,197,1.573,199,1.389,205,3.712,208,2.421,210,1.491,211,1.235,213,1.901,214,1.807,220,1.939,251,1.171,269,2.025,289,1.469,300,2.291,324,3.256,327,1.807,347,2.452,351,1.44,355,1.661,366,1.455,374,2.703,375,1.564,376,5.586,377,1.981,383,1.448,411,2.016,413,3.34,417,1.531,437,1.729,444,4.113,458,2.258,462,1.901,519,2.048,524,2.792,532,1.421,556,1.822,557,1.63,565,1.484,570,2.312,585,2.738,621,2.294,642,1.383,649,1.148,687,1.793,702,2.088,723,5.7,742,3.166,743,6.056,751,1.401,755,1.729,774,1.868,781,2.414,810,3.313,813,2.225,818,1.717,829,3.369,837,1.159,862,2.421,908,2.471,927,1.455,990,2.375,1011,1.793,1077,1.946,1086,2.683,1090,1.766,1117,5.688,1126,4.538,1132,1.531,1169,7.069,1194,1.766,1216,1.359,1226,1.868,1310,1.974,1325,1.547,1341,4.548,1366,2.109,1502,2.164,1511,2.294,1567,1.671,1621,1.682,1658,1.901,1716,2.848,1768,2.193,1828,2.662,1864,2.59,1964,3.734,1970,2.747,2016,4.333,2252,2.974,2349,5.33,2350,2.662,2351,2.662,2352,2.662,2353,2.747,2361,2.662,2397,2.527,2412,2.747,2607,4.634,2612,2.193,2647,2.59,2803,2.421,3122,2.59,3212,4.84,3213,2.747,3214,2.974,3215,2.747,3216,2.974,3219,2.974,4010,3.401]],["component/158",[6,0.35]],["keyword/158",[]],["title/159-1",[355,21.057,449,21.473,783,22.398,787,25.829,3661,32.845]],["name/159-1",[]],["text/159-1",[]],["component/159-1",[]],["keyword/159-1",[]],["title/159-2",[32,13.321,737,32.046,783,22.398,784,30.697,3841,32.845]],["name/159-2",[]],["text/159-2",[]],["component/159-2",[]],["keyword/159-2",[]],["title/159-3",[725,33.193,781,30.031]],["name/159-3",[]],["text/159-3",[]],["component/159-3",[]],["keyword/159-3",[]],["title/159",[251,23.708,411,19.835]],["name/159",[251,0.562,411,0.47]],["text/159",[4,0.601,6,1.075,9,1.944,20,0.806,23,1.406,24,0.587,32,1.204,35,2.147,40,1.824,46,0.905,50,1.133,70,1.138,81,3.506,98,0.667,99,2.42,101,1.49,102,0.989,121,0.994,125,0.649,133,1.096,140,1.31,149,1.002,157,2.044,162,1.706,168,1.531,172,1.621,178,0.914,185,0.709,194,1.138,199,1.951,200,0.806,205,1.443,211,1.736,223,2.074,230,0.857,234,1.255,239,1.148,241,0.872,251,2.641,256,0.795,257,0.965,259,3.118,269,3.56,275,0.75,293,0.965,300,0.652,301,1.585,323,0.954,324,0.733,340,0.977,347,2.534,348,1.08,351,1.607,356,1.764,361,1.144,363,1.133,374,0.769,377,1.019,392,3.525,395,0.705,399,0.85,408,0.741,409,0.888,411,3.132,413,3.647,416,2.556,420,1.754,429,1.016,438,1.288,439,1.058,449,3.819,450,2.779,463,0.755,471,2.727,479,0.789,484,2.542,487,2.722,489,1.513,491,1.667,492,1.571,497,0.818,499,0.69,501,1.96,503,0.69,520,1.629,521,3.295,524,2.737,534,1.233,537,
10.954,538,0.965,547,0.896,568,0.733,570,0.658,573,1.128,584,0.667,585,0.616,588,0.914,589,1.428,590,2.446,604,0.558,612,0.905,619,0.684,632,1.7,641,3.09,649,2.838,670,1.824,671,2.975,672,0.865,679,1.577,696,0.872,700,0.85,701,1.05,702,2.33,703,0.784,712,0.759,713,0.943,723,0.83,724,0.88,725,3.487,733,0.69,736,0.789,741,0.769,748,1.606,760,0.609,765,3.935,772,0.965,773,0.977,774,1.564,780,1.55,781,3.346,782,0.865,783,1.479,784,2.775,785,1.591,806,0.933,810,2.263,813,1.863,816,0.824,818,0.795,822,0.724,823,0.88,834,2.602,837,2.866,840,2.916,852,3.055,903,0.905,927,1.667,931,0.728,936,1.272,945,1.062,1015,2.258,1052,1.199,1057,0.746,1077,1.001,1079,1.332,1080,1.637,1086,0.604,1110,0.764,1115,0.733,1117,1.458,1124,0.746,1126,1.236,1127,0.83,1134,0.795,1148,0.923,1157,0.716,1193,0.8,1216,3.359,1234,0.965,1241,0.888,1247,0.774,1257,2.502,1258,0.716,1271,0.989,1286,1.1,1287,0.933,1290,1.399,1303,0.888,1304,0.914,1305,0.88,1309,1.981,1325,0.716,1341,0.888,1347,1.1,1366,2.417,1409,1.564,1436,1.08,1455,1.377,1463,0.8,1465,1.199,1467,0.933,1468,1.687,1469,0.933,1470,0.933,1471,1.653,1472,0.933,1473,1.577,1474,0.933,1475,0.933,1476,0.933,1477,0.914,1478,1.653,1479,0.914,1480,1.199,1495,1.046,1500,1.916,1509,1.1,1517,2.219,1632,2.964,1650,2.938,1658,0.88,1664,2.832,1665,0.85,1677,1.17,1769,1.788,1778,6.738,1892,1.812,1903,2.069,1967,1.1,2085,1.199,2088,1.016,2183,1.953,2293,1.272,2294,1.03,2482,2.624,2675,1.272,2681,1.03,2754,2.3,2779,1.233,2792,0.977,2798,1.121,2846,1.319,2849,1.513,2850,1.233,2878,1.144,2916,1.062,2919,1.863,2955,1.1,3034,1.233,3130,1.377,3180,1.319,3474,1.016,3475,1.836,3476,1.016,3477,1.046,3478,1.03,3479,1.08,3480,1.08,3509,1.199,3633,1.199,3659,1.272,3660,1.233,3661,1.199,3664,2.384,3665,1.319,3671,3.264,3673,1.319,3677,1.319,3678,1.319,3832,2.3,3841,3.64,3849,1.319,3886,2.229,3890,1.456,3891,1.456,3892,1.456,3893,1.456,3894,3.603,3895,1.456,3897,1.456,3898,1.456,3899,1.456,3900,2.632,3902,1.456,3903,2.632,3904,1.456,3905,1.377,3906,4.418,3907,1.456,3908,1.456,3909,1.456,3982,1.456,4011,1.575,4012,1.575,4013,1.575,4014,1.575,4015,1.575,4016,1.575]],["component/159",[6,0.35]],["keyword/159",[]],["title/160-1",[525,30.28,712,27.689,2812,37.033]],["name/160-1",[]],["text/160-1",[]],["component/160-1",[]],["keyword/160-1",[]],["title/160-2",[1639,47.224,1928,39.563]],["name/160-2",[]],["text/160-2",[]],["component/160-2",[]],["keyword/160-2",[]],["title/160-3",[99,21.722,621,46.44]],["name/160-3",[]],["text/160-3",[]],["component/160-3",[]],["keyword/160-3",[]],["title/160",[168,27.042,524,17.779]],["name/160",[168,0.641,524,0.421]],["text/160",[9,2.745,24,2.514,32,2.412,35,1.796,38,3.586,50,1.282,66,2.293,78,2.933,81,1.952,83,1.74,98,1.365,99,3.726,119,2.202,126,1.23,133,1.24,143,2.21,153,2.538,154,2.492,157,1.378,159,1.604,164,4.152,168,4.021,189,2.341,190,2.73,199,2.162,210,2.322,211,2.449,220,1.856,229,1.817,269,1.179,288,2.383,301,2.153,310,1.23,312,1.206,314,2.569,318,1.834,324,2.464,326,1.673,334,2.436,338,1.726,347,1.129,351,1.378,392,2.637,397,2.139,411,3.222,412,2.134,413,3.131,414,1.889,416,1.333,418,1.699,429,2.785,450,1.45,479,1.615,484,1.216,499,1.413,501,1.321,503,2.322,509,1.638,515,2.078,516,2.139,519,1.192,521,1.145,523,1.225,524,3.384,525,4.117,557,1.544,568,1.499,574,1.998,585,2.637,601,1.974,614,2.814,619,2.926,632,1.406,637,1.74,643,2.341,649,2.911,687,1.699,692,2.346,701,1.188,702,1.998,712,5.112,715,2.293,742,1.458,751,1.327,758,1.499,760,1.245,781,2.31,837,3.489,852,1.594,887,1.554,922,1.699,1032,1.998,1077,1.133,1086,3.756,1126,1.398,1155,4.483,1170,1.74,1173,2.25,1194,1.673,1198,1.974,1213,2.21,1272,4.083,1338,2.394,1466,4.159,1522,2.139,1540,2.293,1639,2.21,1642,4.145,1705,2.108,1727,2.25,1766,7.49,1808,2.023,1827,2.522,1903,3.848,1918,2.139,1928,5.33,2294,2.108,2482,2.908,2646,2.139,2681,2.108,2812,2.078,2865,2.21,2955,2.25,3225,2.978,3271,3.935,3768,2.818,3905,4.631,4017,3.222,4018,3.222,4019,3.222,4020,3.222]],["component/160",[6,0.35]],["keyword/160",[]],["title/161-1",[35,15.298,99,18.12,413,18.346]],["name/161-1",[]],["text/161-1",[]],["component/161-1",[]],["keyword/161-1",[]],["title/161-2",[35,15.298,99,18.12,387,30.28]],["name/161-2",[]],["text/161-2",[]],["component/161-2",[]],["keyword/161-2",[]],["title/161-3",[34,22.287,35,13.122,99,15.543,1090,25.584]],["name/161-3",[]],["text/161-3",[]],["component/161-3",[]],["keyword/161-3",[]],["title/161-4",[35,22.889]],["name/161-4",[]],["text/161-4",[]],["component/161-4",[]],["keyword/161-4",[]],["title/161",[99,21.722,376,32.593]],["name/161",[376,1.352]],["text/161",[4,1.737,19,2.313,23,1.641,34,4.292,35,2.255,78,2.521,99,3.745,127,2.457,139,1.919,168,2.737,179,2.07,197,2.105,198,3.223,205,1.684,223,1.975,239,2.808,251,1.567,257,2.788,261,1.81,289,1.966,312,1.704,315,4.321,334,2.093,355,2.222,374,2.222,376,5.482,377,1.629,387,5.002,392,1.78,411,1.311,413,3.586,471,2.82,484,3.194,490,2.59,519,1.684,523,1.73,524,1.799,527,2.208,536,2.726,566,3.562,576,3.732,585,2.725,595,4.269,619,1.975,641,2.543,668,3.022,682,3.929,702,2.629,733,3.055,742,2.059,758,2.117,760,3.665,781,1.985,806,4.128,829,2.91,837,2.375,931,2.105,969,3.022,975,2.895,1015,1.858,1038,3.239,1086,1.744,1090,3.619,1110,2.208,1126,4.438,1132,3.81,1134,3.517,1141,3.382,1150,3.239,1165,2.858,1215,2.313,1216,1.818,1226,2.499,1236,7.36,1241,2.566,1254,2.668,1272,2.756,1325,2.07,1341,3.929,1343,2.726,1456,3.022,1503,3.307,1512,2.696,1576,2.726,1586,2.438,1621,2.251,1632,4.321,1669,4.779,1817,3.562,2185,3.382,2376,3.122,2386,4.432,2499,3.81,2684,4.959,2693,3.466,2945,3.178,3147,3.562,3148,3.382,3198,3.81,3238,3.98,3239,6.093,3240,6.093,3241,3.98,3242,3.98,3244,3.98,4021,4.551]],["component/161",[6,0.35]],["keyword/161",[]],["title/162-1",[848,27.621,1185,36.582]],["name/162-1",[]],["text/162-1",[]],["component/162-1",[]],["keyword/162-1",[]],["title/162-2",[351,14.945,1122,26.268,1290,28.221]],["name/162-2",[]],["text/162-2",[]],["component/162-2",[]],["keyword/162-2",[]],["title/162-3",[351,
114.945,532,23.987,1195,25.571]],["name/162-3",[]],["text/162-3",[]],["component/162-3",[]],["keyword/162-3",[]],["title/162-4",[351,14.945,1124,27.189,1195,25.571]],["name/162-4",[]],["text/162-4",[]],["component/162-4",[]],["keyword/162-4",[]],["title/162-5",[234,30.338,848,27.621]],["name/162-5",[]],["text/162-5",[]],["component/162-5",[]],["keyword/162-5",[]],["title/162-6",[520,23.467,1216,27.503]],["name/162-6",[]],["text/162-6",[]],["component/162-6",[]],["keyword/162-6",[]],["title/162-7",[347,24.123,1115,32.027]],["name/162-7",[]],["text/162-7",[]],["component/162-7",[]],["keyword/162-7",[]],["title/162-8",[463,27.519,1115,26.716,1195,25.571]],["name/162-8",[]],["text/162-8",[]],["component/162-8",[]],["keyword/162-8",[]],["title/162-9",[524,17.779,701,25.382]],["name/162-9",[]],["text/162-9",[]],["component/162-9",[]],["keyword/162-9",[]],["title/162-10",[351,14.945,1077,20.194,1251,33.33]],["name/162-10",[]],["text/162-10",[]],["component/162-10",[]],["keyword/162-10",[]],["title/162-11",[1199,34.748,1251,39.956]],["name/162-11",[]],["text/162-11",[]],["component/162-11",[]],["keyword/162-11",[]],["title/162",[532,28.755,1195,30.654]],["name/162",[532,0.682,1195,0.727]],["text/162",[19,1.653,23,3.948,24,1.99,26,2.272,27,4.624,29,1.522,32,2.678,35,2.092,50,3.449,81,1.968,111,2.976,133,2.612,205,1.204,261,2.123,295,1.97,310,1.242,324,2.483,347,1.87,351,3.327,363,1.294,377,1.165,387,1.715,397,2.16,404,3.252,411,1.955,413,1.705,416,1.346,429,1.904,463,1.559,499,3.443,519,1.204,520,3.733,521,1.156,524,2.028,532,2.229,547,3.038,565,2.328,570,1.359,587,2.377,603,2.017,604,2.781,642,1.322,666,2.573,671,3.364,672,1.786,676,1.569,686,1.365,700,1.757,701,2.502,734,1.742,739,1.729,749,2.694,751,2.199,818,1.642,823,2.983,837,2.314,907,3.491,932,2.194,1011,1.715,1031,3.696,1057,2.527,1077,3.461,1113,1.786,1115,4.95,1116,2.305,1124,1.54,1147,3.157,1148,1.907,1151,1.742,1157,1.48,1199,4.376,1201,4.021,1216,3.722,1236,3.31,1239,3.395,1242,1.609,1244,1.927,1251,4.558,1255,3.661,1257,4.215,1258,1.48,1260,5.13,1267,1.888,1274,2.364,1275,2.364,1286,3.727,1287,3.162,1290,2.623,1291,4.178,1297,4.831,1300,3.098,1304,1.888,1305,3.793,1313,1.818,1318,1.993,1327,2.478,1332,2.232,1344,1.729,1352,1.993,1357,1.702,1358,1.948,1375,1.993,1380,4.317,1587,1.642,1650,2.836,1665,2.882,1725,3.491,1892,2.069,2088,2.098,2109,1.907,2253,3.6,2268,2.272,2338,2.316,2500,2.194,2718,2.364,2919,2.128,3109,2.194,3110,2.194,3182,4.178,3247,4.178,3248,2.627,3249,2.547,3250,2.547,3251,2.547,3252,2.547,3253,2.547,3254,2.547,3255,5.935]],["component/162",[6,0.35]],["keyword/162",[]],["title/163-1",[848,27.621,1185,36.582]],["name/163-1",[]],["text/163-1",[]],["component/163-1",[]],["keyword/163-1",[]],["title/163-2",[429,20.483,1122,26.268,1290,28.221]],["name/163-2",[]],["text/163-2",[]],["component/163-2",[]],["keyword/163-2",[]],["title/163-3",[351,14.945,1122,26.268,1290,28.221]],["name/163-3",[]],["text/163-3",[]],["component/163-3",[]],["keyword/163-3",[]],["title/163-4",[351,14.945,1124,27.189,1195,25.571]],["name/163-4",[]],["text/163-4",[]],["component/163-4",[]],["keyword/163-4",[]],["title/163-5",[234,30.338,848,27.621]],["name/163-5",[]],["text/163-5",[]],["component/163-5",[]],["keyword/163-5",[]],["title/163-6",[520,23.467,1216,27.503]],["name/163-6",[]],["text/163-6",[]],["component/163-6",[]],["keyword/163-6",[]],["title/163-7",[411,19.835,1115,32.027]],["name/163-7",[]],["text/163-7",[]],["component/163-7",[]],["keyword/163-7",[]],["title/163-8",[524,17.779,701,25.382]],["name/163-8",[]],["text/163-8",[]],["component/163-8",[]],["keyword/163-8",[]],["title/163",[1195,30.654,1232,41.695]],["name/163",[1195,0.727,1232,0.988]],["text/163",[9,1.104,19,1.596,23,2.387,24,1.171,32,2.627,35,2.047,50,2.633,74,2.454,82,1.504,119,1.305,133,1.995,194,1.254,205,1.162,211,1.883,249,1.428,250,1.495,261,2.062,295,1.901,301,1.276,310,2.527,312,1.175,324,1.46,347,1.1,351,3.346,363,1.249,392,1.228,397,2.084,411,2.919,413,1.003,429,1.849,463,3.172,466,1.709,471,1.271,492,2.668,499,3.369,519,1.162,520,3.781,522,1.643,523,1.194,524,1.985,532,3.21,547,1.787,570,2.765,587,2.948,603,1.947,604,2.722,609,2.917,642,1.276,654,3.39,666,1.514,671,3.553,672,1.724,676,1.514,686,2.778,700,1.695,701,2.833,704,2.712,734,1.681,749,1.585,751,1.293,774,1.724,818,1.585,822,1.444,837,1.767,843,1.563,907,3.39,942,4.058,1011,1.655,1031,4.942,1057,3.638,1077,3.562,111
15,5.16,1116,2.859,1123,1.804,1124,2.454,1147,1.46,1151,1.681,1193,1.596,1195,3.788,1199,3.341,1201,3.922,1216,3.398,1223,1.709,1232,3.139,1236,3.214,1239,1.997,1242,1.553,1244,3.071,1245,2.153,1255,5.272,1257,2.345,1258,1.428,1260,5.063,1267,1.822,1274,2.281,1275,2.281,1290,5.451,1300,1.822,1304,1.822,1305,1.754,1325,1.428,1332,2.153,1344,1.668,1352,1.924,1357,1.643,1358,1.88,1380,4.889,1500,1.543,1538,1.901,1587,1.585,1650,1.668,1665,1.695,1725,3.39,1746,2.391,1752,5.152,1892,3.297,2088,2.024,2109,1.841,2112,2.192,2253,2.118,2268,2.192,2294,2.053,2612,4.269,2718,2.281,2919,2.053,3109,2.118,3110,2.118,3247,2.458,3249,2.458,3250,2.458,3251,2.458,3252,2.458,3253,2.458,3254,2.458,3259,2.745,3260,2.745,3264,2.745]],["component/163",[6,0.35]],["keyword/163",[]],["title/164-1",[392,26.93,671,26.709]],["name/164-1",[]],["text/164-1",[]],["component/164-1",[]],["keyword/164-1",[]],["title/164-2",[407,25.571,454,21.666,1988,37.564]],["name/164-2",[]],["text/164-2",[]],["component/164-2",[]],["keyword/164-2",[]],["title/164",[399,31.01,407,25.571,2792,35.612]],["name/164",[2792,1.771]],["text/164",[35,2.65,50,2.382,81,3.147,90,3.11,141,3.346,186,3.182,198,2.77,234,2.639,239,2.413,289,2.586,312,2.242,347,2.991,377,3.055,392,3.339,404,2.87,411,1.725,417,2.695,446,2.887,463,2.87,471,2.424,484,2.259,489,4.536,520,2.041,521,3.034,532,3.565,649,2.88,671,4.623,686,4.174,810,2.835,837,2.041,840,3.157,848,2.403,1126,3.705,1216,4.331,1257,2.709,1294,4.108,1500,4.195,1604,3.917,1769,3.76,1967,4.182,1988,7.497,2257,4.351,2260,7.391,2287,6.343,2294,3.917,2646,3.976,2792,6.168,2849,3.182,2955,4.182,2960,8.032,2961,4.836,3190,4.45,3275,4.688,4022,5.988,4023,5.988,4024,5.988,4025,5.988,4026,5.988,4027,5.988,4028,5.988,4029,5.988,4030,5.988,4031,5.988,4032,5.988,4033,5.988,4034,5.988,4035,5.988,4036,5.988,4037,5.988,4038,5.988,4039,5.988,4040,5.988,4041,5.988,4042,5.988]],["component/164",[6,0.35]],["keyword/164",[]],["title/165-1",[121,20.053,524,14.831,2372,35.612]],["name/165-1",[]],["text/165-1",[]],["component/165-1",[]],["keyword/165-1",[]],["title/165-2",[99,18.12,121,20.053,251,19.777]],["name/165-2",[]],["text/165-2",[]],["component/165-2",[]],["keyword/165-2",[]],["title/165-3",[2243,57.052]],["name/165-3",[]],["text/165-3",[]],["component/165-3",[]],["keyword/165-3",[]],["title/165-4",[121,30.002]],["name/165-4",[]],["text/165-4",[]],["component/165-4",[]],["keyword/165-4",[]],["title/165-5",[121,24.038,1057,32.593]],["name/165-5",[]],["text/165-5",[]],["component/165-5",[]],["keyword/165-5",[]],["title/165-6",[41,28.221,351,14.945,1116,24.803]],["name/165-6",[]],["text/165-6",[]],["component/165-6",[]],["keyword/165-6",[]],["title/165-7",[28,29.188,121,20.053,1132,25.843]],["name/165-7",[]],["text/165-7",[]],["component/165-7",[]],["keyword/165-7",[]],["title/165",[121,24.038,992,35.755]],["name/165",[121,0.57,992,0.848]],["text/165",[4,1.373,6,0.699,9,1.693,19,1.04,23,3.616,24,1.795,27,2.166,28,1.04,32,2.574,35,2.22,37,1.404,50,1.915,74,1.703,81,0.755,83,1.105,89,2.131,98,0.867,99,3.478,102,1.285,121,4.114,124,1.012,138,1.105,146,0.926,154,0.963,164,2.039,168,2.591,200,1.048,211,1.748,220,1.261,234,0.902,249,2.19,251,3.796,255,0.952,269,0.749,286,0.931,295,1.239,300,0.847,306,1.841,310,1.838,311,0.993,312,1.347,344,1.071,347,1.687,351,2.869,377,0.733,392,0.801,393,1.176,410,0.863,411,1.901,413,2.663,416,0.847,426,1.176,429,0.73,438,0.926,439,1.336,440,2.166,454,1.816,462,2.01,463,2.306,466,1.959,471,0.828,479,1.803,482,1.559,484,2.489,490,1.165,491,0.875,492,3.16,501,0.839,509,2.944,519,1.331,520,1.641,521,0.727,523,0.778,524,2.36,526,1.339,542,1.176,557,0.981,565,0.893,573,1.425,582,1.133,583,2.109,584,1.524,585,0.801,597,1.2,604,2.051,609,1.585,616,1.212,632,2.1,649,2.226,660,1.124,666,0.987,670,3.67,671,1.396,676,0.987,692,0.906,701,0.755,702,1.357,726,1.114,733,0.897,751,1.482,758,3.382,759,2.944,760,3.875,781,3.986,786,1.114,794,1.033,798,1.404,800,2.204,801,1.269,802,1.033,810,0.969,823,1.144,837,2.249,840,1.079,848,1.443,887,0.987,921,2.561,922,1.079,927,0.875,981,1.144,989,1.176,1011,1.897,1015,2.694,1018,1.359,1023,1.521,1029,1.38,1057,3.123,1075,1.105,1077,2.32,1085,1.239,1086,0.784,1112,1.2,1115,2.239,1116,4.089,1122,1.645,1124,0.9
169,1132,0.921,1144,1.2,1147,3.069,1151,1.096,1155,2.202,1156,2.558,1185,1.087,1212,1.254,1214,1.457,1216,1.437,1223,1.114,1242,1.012,1246,1.212,1257,1.628,1258,2.19,1260,3.781,1303,1.154,1309,1.04,1315,1.165,1325,0.931,1340,2.204,1344,1.087,1466,1.734,1490,1.133,1511,1.38,1581,1.38,1585,1.254,1586,1.927,1587,1.816,1667,1.359,1678,1.521,1696,1.38,1707,1.359,1736,1.302,1748,1.339,1898,1.359,1908,4.142,1977,2.131,2141,1.429,2184,1.429,2204,1.254,2354,2.74,2372,1.269,2378,8.205,2379,4.534,2380,5.403,2381,4.534,2385,2.816,2386,2.288,2387,1.487,2394,1.602,2396,2.816,2397,2.673,2398,1.602,2399,1.602,2400,1.457,2401,1.457,2402,1.457,2403,1.602,2404,1.602,2681,3.148,2945,1.429,3217,2.816,3266,5.692,3267,1.713,3268,1.653,3269,1.653,3270,2.561,3271,2.673,3272,1.559,3273,1.653,3274,1.653,3275,1.602,3276,1.653,3277,1.653,3278,1.653,3279,1.653,3280,1.653]],["component/165",[6,0.35]],["keyword/165",[]],["title/166-1",[2742,67.261]],["name/166-1",[]],["text/166-1",[]],["component/166-1",[]],["keyword/166-1",[]],["title/166",[1123,39.563,1195,30.654]],["name/166",[1123,0.938,1195,
10.727]],["text/166",[10,6.343,31,7.782,32,3.442]],["component/166",[6,0.35]],["keyword/166",[]]],"invertedIndex":[["",{"_index":23,"title":{"6-11":{},"26-5":{},"26-6":{},"26-7":{},"26-8":{},"26-9":{},"26-10":{},"26-11":{},"26-12":{},"68-11":{},"122-11":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"32":{},"37":{},"38":{},"41":{},"46":{},"47":{},"48":{},"50":{},"52":{},"53":{},"54":{},"58":{},"59":{},"61":{},"63":{},"64":{},"65":{},"67":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{},"90":{},"94":{},"98":{},"100":{},"104":{},"106":{},"107":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"119":{},"120":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"143":{},"151":{},"154":{},"156":{},"157":{},"159":{},"161":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["0",{"_index":1300,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"15":{},"16":{},"18":{},"20":{},"38":{},"58":{},"59":{},"71":{},"73":{},"78":{},"79":{},"83":{},"114":{},"115":{},"125":{},"132":{},"133":{},"137":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["0.0",{"_index":2518,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["0.0.0.0",{"_index":3909,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["0.1.0",{"_index":1556,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["0.1.2.jar",{"_index":2485,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["0.10.13",{"_index":2425,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["0.2.0",{"_index":3593,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["0.3.7",{"_index":2949,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["0.5.0",{"_index":271,"title":{},"name":{},"text":{"2":{},"65":{},"72":{},"120":{},"125":{},"127":{}},"component":{},"keyword":{}}],["0.5.1",{"_index":273,"title":{},"name":{},"text":{"2":{},"65":{},"120":{},"125":{}},"component":{},"keyword":{}}],["0.5.1.jar",{"_index":3941,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["0.5.1.pom",{"_index":3940,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["0.5.33",{"_index":2427,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["0.6",{"_index":3265,"title":{},"name":{"100":{}},"text":{"60":{},"100":{},"101":{},"116":{},"147":{}},"component":{},"keyword":{}}],["0.6.0",{"_index":452,"title":{"4-10":{},"67-7":{}},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["0.6.1",{"_index":3640,"title":{},"name":{},"text":{"79":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["0.6.1.jar",{"_index":3557,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["0.6.1.pom",{"_index":3552,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["0.7",{"_index":545,"title":{"64-9":{}},"name":{},"text":{"3":{},"19":{},"24":{},"34":{},"48":{},"51":{},"60":{},"64":{},"91":{},"98":{},"100":{},"101":{},"106":{},"116":{},"119":{}},"component":{},"keyword":{}}],["0.7.0",{"_index":455,"title":{"4-4":{},"67-1":{}},"name":{},"text":{"3":{},"4":{},"67":{},"73":{}},"component":{},"keyword":{}}],["0.7.2",{"_index":3311,"title":{},"name":{},"text":{"66":{},"74":{},"75":{},"76":{},"78":{},"83":{},"96":{}},"component":{},"keyword":{}}],["0.7.x",{"_index":2946,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["0.8",{"_index":560,"title":{"51":{}},"name":{},"text":{"3":{},"4":{},"24":{},"28":{},"51":{},"64":{}},"component":{},"keyword":{}}],["0.8.0",{"_index":629,"title":{"4-1":{}},"name":{},"text":{"4":{},"27":{},"28":{},"37":{},"67":{}},"component":{},"keyword":{}}],["0.8.0.pom",{"_index":1992,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["0.8.2",{"_index":768,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"39":{}},"component":{},"keyword":{}}],["0.8.x",{"_index":2947,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["00:12:33",{"_index":2015,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["00:16:42",{"_index":1877,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["00:28:29",{"_index":3577,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["01",{"_index":3423,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["02t15:25:31.946z",{"_index":2304,"title":{},"name":{},"text":{"17":{},"20":{}},"component":{},"keyword":{}}],["03",{"_index":1524,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["04",{"_index":1931,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["06",{"_index":2303,"title":{},"name":{},"text":{"17":{},"20":{}},"component":{},"keyword":{}}],["0700",{"_index":1526,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["08",{"_index":3514,"title":{},"name":{},"text":{"75":{},"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["0800",{"_index":3425,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0_0_0_0",{"_index":2581,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}
1],["0s",{"_index":2569,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["0x16a475d3",{"_index":1533,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["0x1a183473",{"_index":3497,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x1a57fb49",{"_index":3452,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["0x1adcd53b",{"_index":3520,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x1cc1ddad",{"_index":3416,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x1dde2d1",{"_index":3757,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["0x1ea4d091",{"_index":3435,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["0x1fe24f79",{"_index":3788,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x20486b9d",{"_index":3535,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x23497c5e",{"_index":3798,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x265b5f05",{"_index":3802,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x26714a4a",{"_index":3402,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x278758da",{"_index":3979,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["0x28234bf2",{"_index":3457,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["0x29c808c8",{"_index":3800,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x2d4fe03b",{"_index":3814,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x2d579733",{"_index":2708,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x2d7956fb",{"_index":3502,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x2f8afb66",{"_index":3812,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x340f2def",{"_index":3534,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x351bfccc",{"_index":3499,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x389588b2",{"_index":3774,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x38f183e9",{"_index":3795,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x3b85a820",{"_index":1813,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["0x3d9b3fd",{"_index":1661,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["0x3e1ff1cf",{"_index":3772,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x41c22d59",{"_index":3779,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x4474a287",{"_index":3522,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x46a4eecd",{"_index":3413,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x47c90585",{"_index":3524,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x47caa1ff",{"_index":3760,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["0x4adfdcd0",{"_index":1838,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["0x4e27c500",{"_index":3491,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x4f9a0139",{"_index":3792,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x4fbdd61f",{"_index":2704,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x50091386",{"_index":3526,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x515f104c",{"_index":3754,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["0x525383f",{"_index":1836,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["0x54eaf69d",{"_index":2717,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x57e9122f",{"_index":3777,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x5cb077e3",{"_index":3974,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["0x5ea52724",{"_index":3781,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x614c7175",{"_index":3806,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x6182d451",{"_index":3562,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}
1],["0x63cd8f26",{"_index":2699,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x647b7f63",{"_index":2719,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x6593f4fd",{"_index":3448,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["0x6801b4a4",{"_index":2715,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0x6853bae",{"_index":3399,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x6916566d",{"_index":3804,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x6953f5fc",{"_index":3419,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x695dc0e6",{"_index":2010,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["0x6dbd38e8",{"_index":3494,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x6e3f108c",{"_index":1431,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["0x6f4fa62f",{"_index":1830,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["0x702ce13",{"_index":3531,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x723c7f2f",{"_index":3972,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["0x7330574d",{"_index":3765,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["0x737935a4",{"_index":3976,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["0x74cc13e0",{"_index":3532,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x74f47eab",{"_index":3809,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x7589371f",{"_index":3410,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["0x7cf6ea5b",{"_index":3528,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["0x7dfccbf2",{"_index":3785,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0x7e67b292",{"_index":1654,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["0x82bbbdc",{"_index":3807,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["0xb025f2f",{"_index":3762,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["0xc1add62",{"_index":3969,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["0xc7ba58d",{"_index":2706,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["0xd0b64a9",{"_index":3455,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}
1],["1",{"_index":492,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"29":{},"32":{},"37":{},"39":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"52":{},"55":{},"59":{},"61":{},"63":{},"64":{},"68":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"94":{},"96":{},"98":{},"100":{},"102":{},"104":{},"106":{},"108":{},"110":{},"115":{},"117":{},"118":{},"119":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"141":{},"142":{},"146":{},"151":{},"152":{},"154":{},"159":{},"163":{},"165":{}},"component":{},"keyword":{}}],["1.0.0",{"_index":2164,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["1.0.333.jar",{"_index":2479,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["1.0.371.jar",{"_index":2480,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["1.0.5",{"_index":3651,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["1.1.0",{"_index":3590,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["1.10",{"_index":3312,"title":{},"name":{},"text":{"66":{},"73":{}},"component":{},"keyword":{}}],["1.10.1",{"_index":3639,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["1.11",{"_index":770,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{},"keyword":{}}],["1.11.1",{"_index":3394,"title":{},"name":{},"text":{"73":{},"75":{},"76":{},"78":{},"83":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["1.12",{"_index":1374,"title":{},"name":{},"text":{"10":{},"13":{},"18":{},"21":{},"73":{}},"component":{},"keyword":{}}],["1.12.0",{"_index":1378,"title":{},"name":{},"text":{"10":{},"12":{},"16":{},"23":{},"73":{}},"component":{},"keyword":{}}],["1.14.1.jar",{"_index":2483,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["1.2",{"_index":2153,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["1.2.0",{"_index":2150,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["1.2.10",{"_index":3645,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["1.6",{"_index":2514,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["1.7",{"_index":3544,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["1.7.35",{"_index":3648,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["1.8.0_u40",{"_index":265,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["10",{"_index":1501,"title":{},"name":{},"text":{"10":{},"17":{},"18":{},"52":{},"53":{},"75":{},"79":{},"83":{},"108":{},"133":{},"143":{}},"component":{},"keyword":{}}],["10.8",{"_index":260,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["1000",{"_index":2352,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{}},"component":{},"keyword":{}}],["1006",{"_index":3301,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["101",{"_index":1062,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["10435194439566279050/webapp/,a=available,h=oeje10s.sessionhandler@418c5a9c{started}}{/var/lib/jetty/webapps/root.war",{"_index":2583,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["11",{"_index":548,"title":{"95":{}},"name":{},"text":{"3":{},"5":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"39":{},"52":{},"66":{},"69":{},"73":{},"74":{},"95":{},"96":{},"107":{},"108":{},"110":{},"124":{}},"component":{},"keyword":{}}],["11.0.18",{"_index":3482,"title":{},"name":{},"text":{"75":{},"83":{}},"component":{},"keyword":{}}],["11.0.19",{"_index":1929,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["11.0.19+7",{"_index":1936,"title":{},"name":{},"text":{"13":{},"75":{},"76":{},"78":{},"79":{},"83":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["11.0.19.7.1",{"_index":1935,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["12",{"_index":357,"title":{"38":{},"3-6":{}},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"10":{},"12":{},"17":{},"20":{},"24":{},"28":{},"35":{},"38":{},"39":{},"44":{},"50":{},"73":{},"74":{},"75":{},"102":{},"108":{},"128":{},"129":{},"152":{}},"component":{},"keyword":{}}],["12.0.22",{"_index":2302,"title":{},"name":{},"text":{"17":{},"20":{}},"component":{},"keyword":{}}],["12.0.22.jar",{"_index":2536,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["12.0.22.jar:/usr/local/jetty/lib/jetti",{"_index":2534,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["12.0.35",{"_index":2423,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["123123",{"_index":3084,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["12345",{"_index":1332,"title":{},"name":{},"text":{"9":{},"23":{},"58":{},"59":{},"71":{},"83":{},"114":{},"115":{},"125":{},"137":{},"162":{},"163":{}},"component":{},"keyword":{}}],["123545",{"_index":3253,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["1254",{"_index":1007,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["127.0.0.1",{"_index":1648,"title":{},"name":{},"text":{"11":{},"12":{},"20":{},"74":{},"75":{},"83":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["127.0.0.1:55832",{"_index":1656,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["127.0.0.1:63835",{"_index":1837,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["127.0.0.1:8890",{"_index":1655,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{},"keyword":{}}],["127.0.0.1],a",{"_index":2317,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["128",{"_index":1443,"title":{},"name":{},"text":{"10":{},"38":{},"73":{}},"component":{},"keyword":{}}],["13",{"_index":937,"title":{},"name":{},"text":{"6":{},"20":{},"68":{},"108":{},"122":{}},"component":{},"keyword":{}}],["137m",{"_index":1547,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["14",{"_index":1683,"title":{},"name":{},"text":{"11":{},"12":{},"13":{}},"component":{},"keyword":{}}],["150674m",{"_index":3630,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["156/fn",{"_index":3377,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["15614m",{"_index":3489,"title":{},"name":{},"text":{"75":{}},"component":{},"keyword":{}}],["157",{"_index":3378,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["15:33:53",{"_index":3569,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["16",{"_index":3508,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["16010m",{"_index":3957,"title":{},"name":{},"text":{"129":{}},"component":{},"keyword":{}}],["16147m",{"_index":3959,"title":{},"name":{},"text":{"129":{}},"component":{},"keyword":{}}],["1625",{"_index":997,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["16482m",{"_index":3965,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["16639m",{"_index":3968,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["167",{"_index":1457,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["16:12:48:691",{"_index":1525,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["16:32:45:144",{"_index":3424,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["16k",{"_index":3988,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}
1],["17",{"_index":1418,"title":{},"name":{},"text":{"10":{},"11":{},"73":{},"78":{},"132":{}},"component":{},"keyword":{}}],["1789.3",{"_index":987,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["1798.100",{"_index":972,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["17:16:35",{"_index":1685,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["17:43:51",{"_index":1734,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["17:44:52",{"_index":1738,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["17:45:10",{"_index":1739,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["17:45:24",{"_index":3506,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["17:54:46",{"_index":3530,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["18",{"_index":1932,"title":{},"name":{},"text":{"13":{},"14":{},"76":{},"77":{},"130":{},"131":{}},"component":{},"keyword":{}}],["18:52:06",{"_index":3421,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["18fa",{"_index":3019,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["19",{"_index":3576,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["1]:8080",{"_index":2600,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["1st",{"_index":2200,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["2",{"_index":609,"title":{},"name":{"15":{}},"text":{"3":{},"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"32":{},"37":{},"41":{},"47":{},"52":{},"59":{},"61":{},"63":{},"64":{},"68":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"88":{},"90":{},"94":{},"98":{},"102":{},"108":{},"115":{},"117":{},"118":{},"119":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"141":{},"142":{},"146":{},"152":{},"154":{},"163":{},"165":{}},"component":{},"keyword":{}}],["2.0.10",{"_index":3465,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"83":{}},"component":{},"keyword":{}}],["2.0.17",{"_index":1712,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{}},"component":{},"keyword":{}}],["2.0.17.jar:/usr/local/jetty/lib/logging/jetti",{"_index":2532,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["2.0.9",{"_index":3591,"title":{},"name":{},"text":{"78":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["2.1",{"_index":112,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["2.1.0",{"_index":3426,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["2.14.0",{"_index":1531,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["2.18.3.jar",{"_index":2481,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["2.4.0",{"_index":3956,"title":{},"name":{},"text":{"128":{},"137":{}},"component":{},"keyword":{}}],["2.5.0",{"_index":3464,"title":{},"name":{},"text":{"74":{},"83":{}},"component":{},"keyword":{}}],["2.5.1",{"_index":1708,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["2.5.2",{"_index":264,"title":{},"name":{},"text":{"2":{},"11":{},"23":{},"65":{},"120":{}},"component":{},"keyword":{}}],["20",{"_index":1864,"title":{},"name":{},"text":{"12":{},"54":{},"73":{},"76":{},"109":{},"130":{},"158":{}},"component":{},"keyword":{}}],["200",{"_index":759,"title":{},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"37":{},"61":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"117":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["201",{"_index":2687,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}
1],["2016",{"_index":722,"title":{},"name":{},"text":{"4":{},"52":{},"67":{},"108":{}},"component":{},"keyword":{}}],["2018",{"_index":976,"title":{},"name":{},"text":{"6":{},"34":{},"68":{},"91":{},"122":{}},"component":{},"keyword":{}}],["2019",{"_index":3568,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["202",{"_index":2691,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["2021",{"_index":1060,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["2022",{"_index":552,"title":{},"name":{},"text":{"3":{},"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["2023",{"_index":1930,"title":{},"name":{},"text":{"13":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["2024",{"_index":359,"title":{"3-6":{},"3-7":{},"3-8":{}},"name":{},"text":{"3":{},"73":{}},"component":{},"keyword":{}}],["2025",{"_index":346,"title":{"3-1":{},"3-2":{},"3-3":{},"3-4":{},"3-5":{}},"name":{},"text":{"3":{},"10":{},"11":{},"12":{},"13":{},"17":{},"20":{}},"component":{},"keyword":{}}],["20:43:21",{"_index":3438,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["21",{"_index":1493,"title":{},"name":{},"text":{"10":{},"20":{}},"component":{},"keyword":{}}],["21.0.4+7",{"_index":2306,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["21.0.7+6",{"_index":2564,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["21:51:05",{"_index":3463,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["22",{"_index":1419,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["22:06:52",{"_index":3469,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["22:07:18",{"_index":3470,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["22:08:07",{"_index":3471,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["22:22:25",{"_index":3622,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["22:23:22",{"_index":3631,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["23:04:20",{"_index":1459,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["23:06:12",{"_index":1491,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["23:27:34.455:info",{"_index":2562,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.476:info",{"_index":2565,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.482:info",{"_index":2570,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.768:info",{"_index":2574,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.788:info",{"_index":2578,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.827:info",{"_index":2584,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.829:info",{"_index":2586,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.836:info",{"_index":2588,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:27:34.846:info",{"_index":2592,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["23:37:30",{"_index":1820,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["23:41:49",{"_index":2046,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["23:42:09",{"_index":1833,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["23t19:29:37.669z",{"_index":3515,"title":{},"name":{},"text":{"75":{},"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["25",{"_index":1059,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["27",{"_index":1458,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["27701",{"_index":1070,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["27t02:14:36.036z",{"_index":3483,"title":{},"name":{},"text":{"75":{},"83":{}},"component":{},"keyword":{}}],["2nd",{"_index":2201,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["3",{"_index":979,"title":{},"name":{},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"32":{},"37":{},"52":{},"59":{},"63":{},"64":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"88":{},"90":{},"108":{},"115":{},"118":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"141":{},"142":{}},"component":{},"keyword":{}}],["3.10.0",{"_index":2162,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["300",{"_index":1067,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["302",{"_index":2284,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["3094m",{"_index":3684,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["310",{"_index":3114,"title":{},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["3196m",{"_index":3690,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["335c9ab44a5591f0ea941bf350e139b8c4f5537c",{"_index":2305,"title":{},"name":{},"text":{"17":{},"20":{}},"component":{},"keyword":{}}],["34",{"_index":1875,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["360038830750564",{"_index":1834,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["37",{"_index":3025,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["3d1535dd",{"_index":3018,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["3rd",{"_index":2202,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["4",{"_index":982,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"22":{},"23":{},"24":{},"32":{},"52":{},"63":{},"68":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"88":{},"90":{},"108":{},"118":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"141":{},"142":{}},"component":{},"keyword":{}}],["40",{"_index":1505,"title":{},"name":{},"text":{"10":{},"12":{},"13":{},"16":{},"23":{}},"component":{},"keyword":{}}],["400",{"_index":1311,"title":{},"name":{},"text":{"9":{},"12":{},"24":{},"32":{},"38":{},"71":{},"75":{},"84":{},"90":{},"125":{},"129":{},"138":{},"142":{}},"component":{},"keyword":{}}],["403",{"_index":3907,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["404",{"_index":1303,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"16":{},"19":{},"23":{},"30":{},"47":{},"48":{},"61":{},"71":{},"74":{},"75":{},"77":{},"80":{},"83":{},"106":{},"110":{},"117":{},"125":{},"128":{},"129":{},"131":{},"134":{},"137":{},"156":{},"159":{},"165":{}},"component":{},"keyword":{}}],["4047m",{"_index":2322,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["406",{"_index":1693,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["40f1",{"_index":3020,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["418",{"_index":2785,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["422",{"_index":3056,"title":{},"name":{},"text":{"42":{},"99":{},"150":{}},"component":{},"keyword":{}}],["43694m",{"_index":3616,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["43830m",{"_index":3620,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["443",{"_index":2961,"title":{},"name":{},"text":{"38":{},"95":{},"143":{},"147":{},"164":{}},"component":{},"keyword":{}}],["445",{"_index":1006,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["4614",{"_index":3382,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["4th",{"_index":2203,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["5",{"_index":775,"title":{},"name":{},"text":{"5":{},"6":{},"11":{},"13":{},"15":{},"16":{},"17":{},"18":{},"22":{},"23":{},"32":{},"52":{},"53":{},"63":{},"68":{},"74":{},"76":{},"78":{},"79":{},"82":{},"83":{},"90":{},"108":{},"118":{},"122":{},"128":{},"130":{},"132":{},"133":{},"136":{},"137":{},"142":{}},"component":{},"keyword":{}}],["5.0",{"_index":3313,"title":{},"name":{},"text":{"66":{}},"component":{},"keyword":{}}],["50",{"_index":1135,"title":{},"name":{},"text":{"8":{},"38":{},"70":{},"95":{},"126":{},"147":{}},"component":{},"keyword":{}}],["5210",{"_index":1010,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["54",{"_index":2207,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["57",{"_index":1984,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["57816m",{"_index":3752,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["5a9a771a9fbcb9d36993630850f612581b78c13f",{"_index":3484,"title":{},"name":{},"text":{"75":{},"83":{}},"component":{},"keyword":{}}],["5level",{"_index":3048,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["6",{"_index":1724,"title":{},"name":{},"text":{"11":{},"16":{},"17":{},"18":{},"52":{},"63":{},"74":{},"78":{},"79":{},"108":{},"118":{},"128":{},"132":{},"133":{}},"component":{},"keyword":{}}],["6.0.0.jar",{"_index":2478,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["60",{"_index":2263,"title":{},"name":{},"text":{"17":{},"38":{}},"component":{},"keyword":{}}
1],["64",{"_index":267,"title":{},"name":{},"text":{"2":{},"10":{},"13":{},"65":{},"73":{},"76":{},"120":{},"130":{}},"component":{},"keyword":{}}],["654778320605125",{"_index":1649,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["667023m",{"_index":3519,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["677m",{"_index":2594,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["7",{"_index":2286,"title":{},"name":{},"text":{"17":{},"18":{},"52":{},"78":{},"79":{},"108":{},"132":{},"133":{}},"component":{},"keyword":{}}],["763",{"_index":1832,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["78d7f44b0319",{"_index":3022,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["8",{"_index":2288,"title":{},"name":{},"text":{"17":{},"18":{},"19":{},"52":{},"79":{},"81":{},"83":{},"108":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["80",{"_index":3509,"title":{},"name":{},"text":{"75":{},"83":{},"110":{},"129":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["800",{"_index":1008,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["8080",{"_index":762,"title":{},"name":{},"text":{"5":{},"10":{},"17":{},"20":{},"52":{},"72":{},"73":{},"76":{},"79":{},"108":{},"127":{},"130":{},"133":{},"157":{}},"component":{},"keyword":{}}],["8080/hello",{"_index":1486,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["8080:8080",{"_index":2512,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["8294",{"_index":3373,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["83",{"_index":3422,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["8311",{"_index":3375,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["8443",{"_index":2285,"title":{},"name":{},"text":{"17":{},"79":{},"133":{}},"component":{},"keyword":{}}],["868",{"_index":3211,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["8890",{"_index":1657,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"21":{},"23":{},"47":{},"74":{},"75":{},"76":{},"78":{},"83":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["9",{"_index":547,"title":{"147":{}},"name":{},"text":{"3":{},"9":{},"17":{},"18":{},"52":{},"58":{},"59":{},"60":{},"71":{},"73":{},"79":{},"83":{},"108":{},"114":{},"115":{},"116":{},"123":{},"125":{},"128":{},"133":{},"137":{},"147":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["9.4.52.v20230823",{"_index":3513,"title":{},"name":{},"text":{"75":{},"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["9/9",{"_index":2515,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["90",{"_index":2266,"title":{},"name":{},"text":{"17":{},"78":{}},"component":{},"keyword":{}}],["916",{"_index":1005,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["919.283.2748",{"_index":1061,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["952",{"_index":1009,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["95834",{"_index":1003,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["95f8",{"_index":3021,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["99",{"_index":3085,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["9999",{"_index":2039,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["9999/hello",{"_index":2044,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["9999/hi",{"_index":2066,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["_",{"_index":1828,"title":{},"name":{},"text":{"12":{},"13":{},"15":{},"20":{},"109":{},"158":{}},"component":{},"keyword":{}}
1],["_channel",{"_index":2619,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["_context",{"_index":3221,"title":{},"name":{},"text":{"54":{}},"component":{},"keyword":{}}],["_method",{"_index":1347,"title":{},"name":{},"text":{"9":{},"44":{},"62":{},"71":{},"102":{},"104":{},"110":{},"125":{},"152":{},"154":{},"159":{}},"component":{},"keyword":{}}],["_proc",{"_index":2620,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["_request",{"_index":757,"title":{},"name":{},"text":{"5":{},"12":{},"13":{},"14":{},"15":{},"18":{},"20":{},"21":{},"37":{},"77":{},"131":{}},"component":{},"keyword":{}}],["a0b6a0f7e57710ba6b9f0aa3a62dd1f68e278f43",{"_index":2998,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["a:1.12",{"_index":1388,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["a:dev",{"_index":2063,"title":{},"name":{},"text":{"14":{},"26":{},"89":{}},"component":{},"keyword":{}}],["a:test",{"_index":3393,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["a:test:dev",{"_index":1425,"title":{},"name":{},"text":{"10":{},"16":{}},"component":{},"keyword":{}}],["a:test:otel",{"_index":1518,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["abbrevi",{"_index":1949,"title":{},"name":{},"text":{"13":{},"77":{},"131":{}},"component":{},"keyword":{}}],["abc123xyz",{"_index":3090,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["abcdef",{"_index":2718,"title":{},"name":{},"text":{"23":{},"58":{},"59":{},"83":{},"114":{},"115":{},"137":{},"162":{},"163":{}},"component":{},"keyword":{}}],["abdcda73818a1a2c705da276edb0bf6581e7997",{"_index":3516,"title":{},"name":{},"text":{"75":{},"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["abid",{"_index":4001,"title":{},"name":{},"text":{"156":{}},"component":{},"keyword":{}}],["abil",{"_index":1289,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"71":{},"74":{},"76":{},"100":{},"125":{},"128":{},"130":{},"151":{}},"component":{},"keyword":{}}],["abnorm",{"_index":2623,"title":{},"name":{},"text":{"21":{},"64":{}},"component":{},"keyword":{}}],["abort",{"_index":1302,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["abov",{"_index":1019,"title":{},"name":{},"text":{"6":{},"8":{},"9":{},"10":{},"11":{},"23":{},"24":{},"32":{},"41":{},"47":{},"48":{},"49":{},"58":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"77":{},"79":{},"81":{},"83":{},"84":{},"90":{},"98":{},"105":{},"106":{},"122":{},"125":{},"126":{},"127":{},"128":{},"133":{},"135":{},"137":{},"138":{},"155":{}},"component":{},"keyword":{}}],["absolut",{"_index":1339,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"14":{},"71":{},"72":{},"74":{},"76":{},"77":{},"125":{},"127":{},"128":{},"130":{},"131":{}},"component":{},"keyword":{}}],["abstract",{"_index":3007,"title":{},"name":{},"text":{"41":{},"43":{},"98":{}},"component":{},"keyword":{}}],["abus",{"_index":91,"title":{},"name":{},"text":{"1":{},"3":{}},"component":{},"keyword":{}}],["accept",{"_index":40,"title":{"12-7":{},"75-7":{},"129-7":{}},"name":{},"text":{"1":{},"2":{},"3":{},"6":{},"9":{},"11":{},"12":{},"13":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"37":{},"40":{},"51":{},"52":{},"55":{},"65":{},"68":{},"71":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"84":{},"85":{},"92":{},"94":{},"97":{},"100":{},"110":{},"112":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"138":{},"139":{},"144":{},"148":{},"151":{},"159":{}},"component":{},"keyword":{}}],["access",{"_index":714,"title":{"6-4":{},"6-7":{},"68-4":{},"68-7":{},"122-4":{},"122-7":{}},"name":{},"text":{"4":{},"6":{},"10":{},"12":{},"14":{},"16":{},"17":{},"22":{},"29":{},"37":{},"39":{},"43":{},"47":{},"50":{},"67":{},"68":{},"72":{},"75":{},"77":{},"82":{},"87":{},"94":{},"96":{},"107":{},"122":{},"127":{},"129":{},"131":{},"136":{},"140":{},"146":{}},"component":{},"keyword":{}}],["accident",{"_index":959,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["accomplish",{"_index":215,"title":{},"name":{},"text":{"2":{},"10":{},"14":{},"37":{},"55":{},"65":{},"73":{},"77":{},"89":{},"94":{},"112":{},"120":{},"131":{},"146":{}},"component":{},"keyword":{}}],["accord",{"_index":1045,"title":{},"name":{},"text":{"6":{},"11":{},"30":{},"38":{},"44":{},"49":{},"68":{},"74":{},"102":{},"105":{},"122":{},"128":{},"152":{},"155":{}},"component":{},"keyword":{}}],["accordingli",{"_index":2359,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["account",{"_index":896,"title":{},"name":{},"text":{"6":{},"19":{},"52":{},"68":{},"83":{},"108":{},"122":{},"137":{}},"component":{},"keyword":{}}],["accounts/*id",{"_index":3189,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["accur",{"_index":929,"title":{},"name":{},"text":{"6":{},"68":{},"73":{},"122":{}},"component":{},"keyword":{}}],["achiev",{"_index":608,"title":{},"name":{},"text":{"3":{},"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["acknowledg",{"_index":876,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["acquir",{"_index":901,"title":{},"name":{},"text":{"6":{},"8":{},"17":{},"68":{},"70":{},"122":{},"126":{}},"component":{},"keyword":{}}],["act",{"_index":945,"title":{},"name":{},"text":{"6":{},"7":{},"12":{},"15":{},"49":{},"51":{},"54":{},"68":{},"105":{},"110":{},"122":{},"155":{},"159":{}},"component":{},"keyword":{}}],["action",{"_index":290,"title":{},"name":{},"text":{"2":{},"9":{},"17":{},"23":{},"65":{},"71":{},"83":{},"120":{},"125":{},"137":{}},"component":{},"keyword":{}}],["activ",{"_index":964,"title":{},"name":{},"text":{"6":{},"10":{},"20":{},"43":{},"68":{},"101":{},"122":{}},"component":{},"keyword":{}}],["actual",{"_index":660,"title":{},"name":{},"text":{"4":{},"5":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"28":{},"49":{},"51":{},"52":{},"55":{},"61":{},"71":{},"74":{},"75":{},"76":{},"80":{},"83":{},"105":{},"117":{},"125":{},"128":{},"129":{},"130":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["ad",{"_index":450,"title":{"18-9":{},"21-9":{}},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"22":{},"23":{},"27":{},"28":{},"29":{},"30":{},"37":{},"38":{},"41":{},"46":{},"47":{},"50":{},"52":{},"55":{},"67":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"82":{},"83":{},"87":{},"88":{},"94":{},"95":{},"98":{},"104":{},"107":{},"108":{},"110":{},"112":{},"125":{},"128":{},"129":{},"130":{},"131":{},"133":{},"136":{},"137":{},"140":{},"141":{},"147":{},"157":{},"159":{},"160":{}},"component":{},"keyword":{}}
1],["adapt",{"_index":109,"title":{},"name":{},"text":{"1":{},"13":{},"14":{},"35":{},"37":{},"41":{},"53":{},"72":{},"77":{},"78":{},"96":{},"98":{},"127":{},"131":{},"132":{}},"component":{},"keyword":{}}],["adaptor",{"_index":3712,"title":{},"name":{},"text":{"81":{},"84":{},"135":{},"138":{}},"component":{},"keyword":{}}],["add",{"_index":301,"title":{"23-16":{},"79-8":{},"83-15":{},"133-8":{},"137-15":{}},"name":{},"text":{"2":{},"4":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"29":{},"30":{},"37":{},"39":{},"41":{},"44":{},"46":{},"47":{},"48":{},"50":{},"65":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"82":{},"83":{},"84":{},"87":{},"88":{},"92":{},"94":{},"96":{},"97":{},"98":{},"102":{},"103":{},"104":{},"106":{},"107":{},"110":{},"119":{},"120":{},"121":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"133":{},"136":{},"137":{},"138":{},"140":{},"141":{},"144":{},"146":{},"148":{},"152":{},"153":{},"154":{},"159":{},"160":{},"163":{}},"component":{},"keyword":{}}],["addapp",{"_index":2572,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["addcustom",{"_index":2985,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["addit",{"_index":503,"title":{"40-5":{},"42-5":{},"45-5":{},"53-5":{},"97-5":{},"99-5":{},"103-5":{},"148-5":{},"150-5":{},"153-5":{}},"name":{},"text":{"3":{},"4":{},"6":{},"9":{},"10":{},"13":{},"16":{},"19":{},"20":{},"23":{},"24":{},"27":{},"29":{},"35":{},"37":{},"39":{},"41":{},"43":{},"47":{},"51":{},"52":{},"55":{},"64":{},"67":{},"68":{},"71":{},"72":{},"73":{},"77":{},"78":{},"79":{},"83":{},"84":{},"87":{},"94":{},"96":{},"98":{},"100":{},"101":{},"108":{},"110":{},"112":{},"119":{},"122":{},"125":{},"127":{},"131":{},"132":{},"133":{},"137":{},"138":{},"140":{},"146":{},"151":{},"159":{},"160":{}},"component":{},"keyword":{}}],["addr",{"_index":1647,"title":{},"name":{},"text":{"11":{},"12":{},"38":{},"46":{},"74":{},"75":{},"83":{},"95":{},"104":{},"128":{},"129":{},"137":{},"147":{},"154":{}},"component":{},"keyword":{}}],["address",{"_index":73,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"9":{},"22":{},"38":{},"46":{},"68":{},"71":{},"82":{},"84":{},"95":{},"104":{},"122":{},"125":{},"136":{},"138":{},"147":{},"154":{}},"component":{},"keyword":{}}],["adjust",{"_index":475,"title":{},"name":{},"text":{"3":{},"39":{},"64":{},"96":{}},"component":{},"keyword":{}}],["admin",{"_index":3024,"title":{},"name":{},"text":{"41":{},"98":{},"108":{}},"component":{},"keyword":{}}],["adopt",{"_index":2137,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["adr",{"_index":373,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["advanc",{"_index":57,"title":{},"name":{},"text":{"1":{},"19":{},"23":{},"38":{},"64":{},"83":{},"95":{},"137":{},"147":{}},"component":{},"keyword":{}}],["advantag",{"_index":2776,"title":{},"name":{},"text":{"23":{},"83":{},"84":{},"125":{},"137":{},"138":{}},"component":{},"keyword":{}}],["advent",{"_index":2413,"title":{},"name":{},"text":{"20":{},"72":{},"127":{}},"component":{},"keyword":{}}],["advic",{"_index":1640,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["advis",{"_index":895,"title":{},"name":{},"text":{"6":{},"58":{},"59":{},"63":{},"68":{},"122":{}},"component":{},"keyword":{}}],["advisor",{"_index":902,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["aesthet",{"_index":3361,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["affair",{"_index":995,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["affect",{"_index":969,"title":{},"name":{},"text":{"6":{},"16":{},"22":{},"51":{},"57":{},"68":{},"77":{},"78":{},"82":{},"113":{},"122":{},"132":{},"136":{},"161":{}},"component":{},"keyword":{}}],["affili",{"_index":918,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["after:pag",{"_index":3088,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["after:storyid",{"_index":3089,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["ag",{"_index":936,"title":{},"name":{},"text":{"6":{},"68":{},"110":{},"122":{},"159":{}},"component":{},"keyword":{}}],["again",{"_index":1713,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"15":{},"16":{},"20":{},"22":{},"23":{},"72":{},"73":{},"75":{},"77":{},"78":{},"82":{},"127":{},"129":{},"131":{},"132":{},"136":{}},"component":{},"keyword":{}}],["against",{"_index":985,"title":{},"name":{},"text":{"6":{},"29":{},"32":{},"52":{},"53":{},"68":{},"72":{},"90":{},"108":{},"122":{},"127":{}},"component":{},"keyword":{}}],["age=31536000",{"_index":1474,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["agent",{"_index":1514,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"20":{},"73":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["aggreg",{"_index":3864,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["agnost",{"_index":771,"title":{},"name":{},"text":{"5":{},"39":{},"74":{},"96":{},"128":{}},"component":{},"keyword":{}}],["ago",{"_index":2748,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["agre",{"_index":844,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["agreement",{"_index":132,"title":{"2-12":{},"65-10":{},"120-10":{}},"name":{},"text":{"2":{},"14":{},"65":{},"77":{},"79":{},"120":{},"131":{},"133":{}},"component":{},"keyword":{}}],["ahead",{"_index":238,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"23":{},"65":{},"74":{},"75":{},"76":{},"83":{},"120":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["aim",{"_index":957,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["ajp",{"_index":3989,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["akin",{"_index":1163,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["algorithm",{"_index":3190,"title":{},"name":{},"text":{"52":{},"74":{},"92":{},"108":{},"128":{},"144":{},"157":{},"164":{}},"component":{},"keyword":{}}],["alia",{"_index":1436,"title":{},"name":{},"text":{"10":{},"13":{},"16":{},"17":{},"20":{},"26":{},"73":{},"76":{},"89":{},"110":{},"130":{},"159":{}},"component":{},"keyword":{}}],["alias",{"_index":171,"title":{},"name":{},"text":{"2":{},"10":{},"14":{},"16":{},"17":{},"20":{},"26":{},"73":{},"76":{},"78":{},"89":{},"130":{}},"component":{},"keyword":{}}],["align",{"_index":1551,"title":{},"name":{},"text":{"10":{},"16":{},"73":{}},"component":{},"keyword":{}}],["aliv",{"_index":2016,"title":{},"name":{},"text":{"13":{},"54":{},"76":{},"109":{},"130":{},"158":{}},"component":{},"keyword":{}}],["alloc",{"_index":3219,"title":{},"name":{},"text":{"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["allow",{"_index":471,"title":{"30-3":{},"88-6":{},"141-5":{}},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"15":{},"19":{},"22":{},"23":{},"24":{},"26":{},"27":{},"30":{},"32":{},"35":{},"37":{},"38":{},"41":{},"43":{},"44":{},"47":{},"50":{},"51":{},"52":{},"53":{},"54":{},"57":{},"58":{},"61":{},"62":{},"64":{},"66":{},"67":{},"69":{},"70":{},"71":{},"73":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"90":{},"92":{},"94":{},"95":{},"98":{},"101":{},"102":{},"107":{},"108":{},"110":{},"113":{},"114":{},"117":{},"119":{},"121":{},"123":{},"125":{},"126":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"144":{},"146":{},"147":{},"152":{},"157":{},"159":{},"161":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["allowunsafelegacyrenegoti",{"_index":4034,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}
1],["alon",{"_index":2683,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["along",{"_index":717,"title":{"12-9":{},"75-9":{},"129-9":{}},"name":{},"text":{"4":{},"7":{},"9":{},"13":{},"20":{},"23":{},"27":{},"28":{},"67":{},"69":{},"71":{},"76":{},"83":{},"84":{},"100":{},"123":{},"125":{},"130":{},"137":{},"138":{},"151":{}},"component":{},"keyword":{}}],["alongsid",{"_index":2813,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["alphabet",{"_index":3933,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["alpin",{"_index":2494,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["alpn",{"_index":3860,"title":{},"name":{},"text":{"96":{}},"component":{},"keyword":{}}],["alreadi",{"_index":1226,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"22":{},"37":{},"57":{},"71":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"88":{},"94":{},"109":{},"113":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"141":{},"146":{},"158":{},"161":{}},"component":{},"keyword":{}}],["alright",{"_index":209,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["alter",{"_index":444,"title":{},"name":{},"text":{"3":{},"9":{},"44":{},"90":{},"102":{},"109":{},"152":{},"158":{}},"component":{},"keyword":{}}],["altern",{"_index":371,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"14":{},"20":{},"26":{},"28":{},"32":{},"37":{},"52":{},"53":{},"54":{},"67":{},"71":{},"72":{},"73":{},"89":{},"90":{},"92":{},"101":{},"108":{},"125":{},"127":{},"144":{}},"component":{},"keyword":{}}],["although",{"_index":544,"title":{},"name":{},"text":{"3":{},"4":{},"20":{},"23":{},"41":{},"47":{},"48":{},"83":{},"98":{},"106":{},"137":{},"156":{}},"component":{},"keyword":{}}],["alway",{"_index":395,"title":{},"name":{},"text":{"3":{},"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"21":{},"23":{},"28":{},"32":{},"37":{},"41":{},"44":{},"45":{},"46":{},"48":{},"53":{},"64":{},"68":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"88":{},"90":{},"94":{},"98":{},"102":{},"103":{},"104":{},"106":{},"110":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"141":{},"142":{},"146":{},"152":{},"153":{},"154":{},"156":{},"157":{},"159":{}},"component":{},"keyword":{}}],["amaz",{"_index":3548,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["amazingli",{"_index":1862,"title":{},"name":{},"text":{"12":{},"15":{}},"component":{},"keyword":{}}],["amazon",{"_index":2526,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["amazoncorretto",{"_index":2495,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["amen",{"_index":3334,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["amend",{"_index":1044,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["amount",{"_index":1558,"title":{},"name":{},"text":{"10":{},"19":{},"20":{},"43":{},"73":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["analog",{"_index":3129,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["analyz",{"_index":2907,"title":{},"name":{},"text":{"32":{},"52":{},"90":{},"108":{}},"component":{},"keyword":{}}],["ancestor",{"_index":3672,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["and/or",{"_index":862,"title":{},"name":{},"text":{"6":{},"24":{},"51":{},"54":{},"68":{},"84":{},"109":{},"122":{},"138":{},"158":{}},"component":{},"keyword":{}}],["annot",{"_index":3289,"title":{},"name":{},"text":{"64":{},"71":{},"125":{}},"component":{},"keyword":{}}],["annoy",{"_index":665,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["anonym",{"_index":655,"title":{},"name":{},"text":{"4":{},"9":{},"26":{},"37":{},"63":{},"71":{},"77":{},"118":{},"125":{},"131":{}},"component":{},"keyword":{}}],["anoth",{"_index":1247,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"14":{},"16":{},"18":{},"19":{},"20":{},"23":{},"24":{},"32":{},"37":{},"41":{},"49":{},"55":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"83":{},"84":{},"90":{},"94":{},"98":{},"100":{},"105":{},"110":{},"125":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"137":{},"138":{},"142":{},"146":{},"151":{},"155":{},"159":{}},"component":{},"keyword":{}}],["answer",{"_index":2278,"title":{},"name":{},"text":{"17":{},"25":{},"72":{},"127":{}},"component":{},"keyword":{}}],["anti",{"_index":3832,"title":{"88-9":{},"141-8":{}},"name":{},"text":{"94":{},"110":{},"159":{}},"component":{},"keyword":{}}],["antipattern",{"_index":2081,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["antora",{"_index":3920,"title":{"124-2":{}},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["anyon",{"_index":2755,"title":{},"name":{},"text":{"23":{},"83":{},"125":{},"137":{}},"component":{},"keyword":{}}],["anyth",{"_index":734,"title":{},"name":{},"text":{"5":{},"9":{},"13":{},"19":{},"22":{},"23":{},"26":{},"28":{},"29":{},"35":{},"52":{},"58":{},"59":{},"66":{},"71":{},"76":{},"82":{},"86":{},"87":{},"92":{},"94":{},"99":{},"108":{},"114":{},"115":{},"125":{},"130":{},"136":{},"140":{},"144":{},"146":{},"150":{},"162":{},"163":{}},"component":{},"keyword":{}}],["anyway",{"_index":240,"title":{},"name":{},"text":{"2":{},"65":{},"75":{},"120":{},"129":{}},"component":{},"keyword":{}}
1],["anywher",{"_index":1677,"title":{},"name":{},"text":{"11":{},"32":{},"74":{},"90":{},"110":{},"128":{},"142":{},"159":{}},"component":{},"keyword":{}}],["aot",{"_index":2487,"title":{},"name":{},"text":{"20":{},"31":{}},"component":{},"keyword":{}}],["apach",{"_index":3008,"title":{},"name":{},"text":{"41":{},"98":{},"143":{}},"component":{},"keyword":{}}],["apart",{"_index":3538,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["api",{"_index":173,"title":{"23":{},"83":{},"137":{},"3-2":{},"100-2":{},"151-2":{}},"name":{"23":{},"83":{},"137":{}},"text":{"2":{},"3":{},"4":{},"5":{},"9":{},"11":{},"12":{},"13":{},"16":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"28":{},"29":{},"33":{},"35":{},"39":{},"41":{},"43":{},"44":{},"47":{},"50":{},"54":{},"55":{},"64":{},"66":{},"71":{},"74":{},"75":{},"76":{},"79":{},"83":{},"84":{},"87":{},"96":{},"98":{},"101":{},"102":{},"104":{},"107":{},"109":{},"112":{},"121":{},"124":{},"125":{},"128":{},"129":{},"130":{},"133":{},"137":{},"138":{},"140":{},"152":{},"154":{},"158":{}},"component":{},"keyword":{}}],["api/greet",{"_index":2115,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["api/hello",{"_index":2388,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["api/vers",{"_index":2950,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["api:default",{"_index":3995,"title":{},"name":{},"text":{"154":{}},"component":{},"keyword":{}}],["api:router[ns=io.pedestal.http.rout",{"_index":3851,"title":{},"name":{},"text":{"94":{}},"component":{},"keyword":{}}],["app",{"_index":788,"title":{},"name":{},"text":{"5":{},"9":{},"10":{},"14":{},"16":{},"20":{},"52":{},"58":{},"63":{},"66":{},"71":{},"77":{},"78":{},"81":{},"108":{},"118":{},"121":{},"125":{},"131":{},"132":{},"135":{},"157":{}},"component":{},"keyword":{}}],["app.components.greet",{"_index":2090,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["app.components.handl",{"_index":2100,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["app.css",{"_index":1406,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["app.pedest",{"_index":2118,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["app.pedestal/new",{"_index":2128,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["app.rout",{"_index":2114,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["app.route/rout",{"_index":2173,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["app.routes/rout",{"_index":2172,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["app.system",{"_index":2121,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["app.system/new",{"_index":2192,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["app.war",{"_index":2501,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["app@279fedbd[ee10,null,/var/lib/jetty/webapps/root.war",{"_index":2573,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["app_3_0.xsd",{"_index":2439,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["appear",{"_index":1676,"title":{},"name":{},"text":{"11":{},"12":{},"30":{},"52":{},"74":{},"75":{},"78":{},"88":{},"108":{},"128":{},"129":{},"132":{},"141":{}},"component":{},"keyword":{}}],["append",{"_index":1522,"title":{},"name":{},"text":{"10":{},"18":{},"35":{},"41":{},"44":{},"63":{},"73":{},"92":{},"98":{},"102":{},"118":{},"144":{},"152":{},"160":{}},"component":{},"keyword":{}}],["appli",{"_index":82,"title":{"29-4":{},"87-3":{},"140-3":{}},"name":{},"text":{"1":{},"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"22":{},"23":{},"30":{},"35":{},"37":{},"38":{},"43":{},"51":{},"52":{},"53":{},"59":{},"64":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"92":{},"94":{},"95":{},"108":{},"115":{},"121":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"144":{},"147":{},"157":{},"163":{}},"component":{},"keyword":{}}],["applic",{"_index":429,"title":{"16-14":{},"17-6":{},"17-7":{},"28-2":{},"59-2":{},"72-14":{},"115-2":{},"127-14":{},"163-2":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"35":{},"37":{},"38":{},"39":{},"43":{},"44":{},"46":{},"47":{},"48":{},"50":{},"51":{},"52":{},"55":{},"58":{},"59":{},"61":{},"62":{},"64":{},"66":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"88":{},"92":{},"94":{},"96":{},"100":{},"101":{},"102":{},"104":{},"106":{},"107":{},"108":{},"110":{},"112":{},"114":{},"115":{},"117":{},"119":{},"121":{},"122":{},"125":{},"126":{},"127":{},"128":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"141":{},"144":{},"146":{},"151":{},"152":{},"154":{},"156":{},"157":{},"159":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["application'",{"_index":3342,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["application/edn",{"_index":1671,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"44":{},"49":{},"74":{},"75":{},"83":{},"102":{},"105":{},"128":{},"129":{},"137":{},"152":{},"154":{},"155":{}},"component":{},"keyword":{}}],["application/edn\\r\\n\\r\\n",{"_index":3447,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["application/json",{"_index":1696,"title":{},"name":{},"text":{"11":{},"19":{},"44":{},"61":{},"74":{},"80":{},"102":{},"117":{},"128":{},"134":{},"152":{},"154":{},"165":{}},"component":{},"keyword":{}}],["application/octet",{"_index":1670,"title":{},"name":{},"text":{"11":{},"49":{},"74":{},"105":{},"128":{},"155":{}},"component":{},"keyword":{}}],["application/transit+json",{"_index":3100,"title":{},"name":{},"text":{"44":{},"102":{},"152":{},"154":{}},"component":{},"keyword":{}}],["application/transit+msgpack",{"_index":3101,"title":{},"name":{},"text":{"44":{},"102":{},"152":{},"154":{}},"component":{},"keyword":{}}],["application/x",{"_index":2400,"title":{},"name":{},"text":{"19":{},"44":{},"61":{},"80":{},"102":{},"117":{},"134":{},"152":{},"154":{},"165":{}},"component":{},"keyword":{}}],["application’",{"_index":2111,"title":{},"name":{},"text":{"15":{},"16":{},"20":{},"26":{},"30":{},"37":{},"41":{},"56":{},"72":{},"86":{},"92":{},"98":{},"111":{},"127":{},"144":{}},"component":{},"keyword":{}}],["appreci",{"_index":1608,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["approach",{"_index":466,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"10":{},"12":{},"15":{},"19":{},"20":{},"22":{},"23":{},"24":{},"41":{},"47":{},"59":{},"61":{},"64":{},"69":{},"71":{},"73":{},"75":{},"80":{},"82":{},"98":{},"115":{},"117":{},"123":{},"129":{},"134":{},"136":{},"163":{},"165":{}},"component":{},"keyword":{}}],["appropri",{"_index":102,"title":{},"name":{},"text":{"1":{},"6":{},"13":{},"18":{},"43":{},"56":{},"61":{},"68":{},"79":{},"80":{},"110":{},"111":{},"117":{},"122":{},"133":{},"134":{},"159":{},"165":{}},"component":{},"keyword":{}}],["approv",{"_index":1548,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["approxim",{"_index":3584,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["apr",{"_index":1684,"title":{},"name":{},"text":{"11":{},"12":{},"13":{}},"component":{},"keyword":{}}],["arbitrari",{"_index":2874,"title":{},"name":{},"text":{"29":{},"41":{},"46":{},"51":{},"72":{},"87":{},"98":{},"104":{},"125":{},"127":{},"140":{},"154":{}},"component":{},"keyword":{}}],["arcan",{"_index":1385,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["architectur",{"_index":368,"title":{"24":{},"84":{},"138":{}},"name":{"24":{},"84":{},"138":{}},"text":{"3":{},"32":{},"84":{},"90":{},"138":{},"142":{}},"component":{},"keyword":{}}],["archiv",{"_index":2409,"title":{"28-2":{}},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["area",{"_index":1040,"title":{},"name":{},"text":{"6":{},"16":{},"68":{},"122":{}},"component":{},"keyword":{}}],["aren’t",{"_index":1827,"title":{},"name":{},"text":{"12":{},"55":{},"75":{},"112":{},"129":{},"160":{}},"component":{},"keyword":{}}],["arg",{"_index":3815,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["argument",{"_index":1325,"title":{"19-4":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"21":{},"23":{},"29":{},"32":{},"44":{},"47":{},"52":{},"54":{},"57":{},"58":{},"59":{},"61":{},"64":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"83":{},"87":{},"90":{},"100":{},"102":{},"108":{},"109":{},"110":{},"113":{},"114":{},"115":{},"117":{},"119":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"137":{},"140":{},"142":{},"151":{},"152":{},"157":{},"158":{},"159":{},"161":{},"163":{},"165":{}},"component":{},"keyword":{}}],["aris",{"_index":2796,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["arithmeticexcept",{"_index":2901,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["ariti",{"_index":3903,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["around",{"_index":459,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"13":{},"16":{},"23":{},"24":{},"35":{},"39":{},"43":{},"46":{},"47":{},"50":{},"51":{},"52":{},"69":{},"74":{},"76":{},"78":{},"83":{},"84":{},"86":{},"96":{},"98":{},"101":{},"107":{},"119":{},"123":{},"128":{},"130":{},"132":{},"137":{},"138":{}},"component":{},"keyword":{}}],["arrang",{"_index":329,"title":{},"name":{},"text":{"2":{},"65":{},"79":{},"120":{},"133":{}},"component":{},"keyword":{}}],["array",{"_index":668,"title":{},"name":{},"text":{"4":{},"11":{},"46":{},"49":{},"57":{},"64":{},"74":{},"104":{},"105":{},"113":{},"128":{},"154":{},"155":{},"161":{}},"component":{},"keyword":{}}],["arriv",{"_index":1540,"title":{},"name":{},"text":{"10":{},"11":{},"16":{},"18":{},"73":{},"74":{},"79":{},"128":{},"133":{},"160":{}},"component":{},"keyword":{}}],["arrow",{"_index":1791,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["artifact",{"_index":1093,"title":{"39-1":{},"39-2":{},"96-1":{},"96-2":{}},"name":{},"text":{"7":{},"39":{},"69":{},"96":{},"123":{}},"component":{},"keyword":{}}],["asc",{"_index":3280,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["asc|desc",{"_index":3185,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["asid",{"_index":3275,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"164":{},"165":{}},"component":{},"keyword":{}}],["ask",{"_index":233,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"11":{},"20":{},"23":{},"65":{},"68":{},"74":{},"76":{},"83":{},"120":{},"122":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["aspect",{"_index":1438,"title":{},"name":{},"text":{"10":{},"15":{},"23":{}},"component":{},"keyword":{}}],["asreadonlybuff",{"_index":3303,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["assembl",{"_index":2754,"title":{},"name":{},"text":{"23":{},"83":{},"110":{},"137":{},"159":{}},"component":{},"keyword":{}}],["assert",{"_index":1423,"title":{},"name":{},"text":{"10":{},"13":{},"16":{},"19":{},"73":{},"76":{},"78":{},"130":{},"132":{}},"component":{},"keyword":{}}],["asset",{"_index":900,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["assign",{"_index":340,"title":{},"name":{},"text":{"2":{},"11":{},"16":{},"22":{},"23":{},"24":{},"65":{},"74":{},"82":{},"83":{},"84":{},"110":{},"120":{},"125":{},"128":{},"136":{},"137":{},"138":{},"159":{}},"component":{},"keyword":{}}],["assist",{"_index":680,"title":{},"name":{},"text":{"4":{},"6":{},"10":{},"19":{},"67":{},"68":{},"122":{}},"component":{},"keyword":{}}],["assoc",{"_index":1156,"title":{},"name":{},"text":{"8":{},"9":{},"11":{},"15":{},"16":{},"17":{},"19":{},"22":{},"23":{},"32":{},"46":{},"61":{},"70":{},"71":{},"74":{},"75":{},"78":{},"80":{},"82":{},"83":{},"90":{},"104":{},"117":{},"125":{},"126":{},"128":{},"129":{},"132":{},"134":{},"136":{},"137":{},"140":{},"142":{},"154":{},"165":{}},"component":{},"keyword":{}}],["associ",{"_index":2838,"title":{},"name":{},"text":{"26":{},"29":{},"47":{},"79":{},"87":{},"89":{},"94":{},"133":{},"140":{}},"component":{},"keyword":{}}],["assum",{"_index":575,"title":{},"name":{},"text":{"3":{},"8":{},"9":{},"11":{},"12":{},"13":{},"17":{},"23":{},"29":{},"35":{},"51":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"83":{},"87":{},"88":{},"92":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"137":{},"140":{},"141":{},"144":{}},"component":{},"keyword":{}}],["assumpt",{"_index":1191,"title":{"9-3":{},"11-3":{},"12-3":{},"13-3":{},"16-2":{},"17-1":{},"18-3":{},"21-3":{},"23-3":{},"71-3":{},"72-3":{},"74-3":{},"75-3":{},"76-3":{},"78-2":{},"79-3":{},"83-3":{},"125-3":{},"127-3":{},"128-3":{},"129-3":{},"130-3":{},"132-2":{},"133-3":{},"137-3":{}},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["asterisk",{"_index":1274,"title":{},"name":{},"text":{"9":{},"58":{},"59":{},"71":{},"114":{},"115":{},"125":{},"162":{},"163":{}},"component":{},"keyword":{}}],["async",{"_index":1132,"title":{"8":{},"70":{},"126":{},"8-3":{},"8-4":{},"19-11":{},"49-2":{},"61-7":{},"70-3":{},"70-4":{},"80-7":{},"105-1":{},"117-7":{},"126-3":{},"126-4":{},"134-7":{},"165-7":{}},"name":{"8":{},"70":{},"126":{}},"text":{"8":{},"11":{},"12":{},"18":{},"19":{},"23":{},"32":{},"37":{},"46":{},"49":{},"55":{},"57":{},"61":{},"70":{},"74":{},"75":{},"79":{},"80":{},"83":{},"90":{},"94":{},"104":{},"105":{},"109":{},"112":{},"113":{},"117":{},"121":{},"126":{},"128":{},"129":{},"133":{},"134":{},"137":{},"142":{},"146":{},"154":{},"155":{},"158":{},"161":{},"165":{}},"component":{},"keyword":{}}],["async/clos",{"_index":2353,"title":{},"name":{},"text":{"18":{},"79":{},"109":{},"133":{},"158":{}},"component":{},"keyword":{}}],["asynchron",{"_index":802,"title":{"22-9":{},"82-9":{},"136-9":{}},"name":{},"text":{"5":{},"8":{},"18":{},"19":{},"22":{},"24":{},"25":{},"32":{},"37":{},"39":{},"46":{},"47":{},"49":{},"50":{},"61":{},"64":{},"66":{},"70":{},"79":{},"80":{},"82":{},"84":{},"90":{},"94":{},"96":{},"104":{},"107":{},"117":{},"119":{},"121":{},"126":{},"133":{},"134":{},"136":{},"138":{},"142":{},"146":{},"154":{},"165":{}},"component":{},"keyword":{}}
1],["asynchroun",{"_index":3080,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["atom",{"_index":1780,"title":{},"name":{},"text":{"11":{},"12":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{},"50":{},"74":{},"75":{},"77":{},"83":{},"107":{},"128":{},"129":{},"131":{},"137":{}},"component":{},"keyword":{}}],["attach",{"_index":1636,"title":{},"name":{},"text":{"11":{},"12":{},"22":{},"23":{},"24":{},"25":{},"29":{},"32":{},"37":{},"44":{},"46":{},"48":{},"64":{},"74":{},"75":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"90":{},"94":{},"102":{},"104":{},"106":{},"110":{},"125":{},"128":{},"129":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"146":{},"152":{},"154":{},"156":{}},"component":{},"keyword":{}}],["attack",{"_index":64,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["attempt",{"_index":458,"title":{"23-12":{},"83-12":{},"137-12":{}},"name":{},"text":{"3":{},"11":{},"23":{},"24":{},"37":{},"47":{},"84":{},"94":{},"109":{},"138":{},"158":{}},"component":{},"keyword":{}}],["attent",{"_index":56,"title":{},"name":{},"text":{"1":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["attr",{"_index":3159,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["attribut",{"_index":3,"title":{"1-4":{}},"name":{},"text":{"5":{},"43":{},"66":{}},"component":{},"keyword":{}}],["audienc",{"_index":335,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["auditor",{"_index":899,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["augment",{"_index":2489,"title":{},"name":{},"text":{"20":{},"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["august",{"_index":1058,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["auth",{"_index":1294,"title":{},"name":{},"text":{"9":{},"38":{},"41":{},"71":{},"88":{},"95":{},"98":{},"125":{},"141":{},"143":{},"147":{},"164":{}},"component":{},"keyword":{}}],["auth/authent",{"_index":3836,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["auth/author",{"_index":3837,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["authent",{"_index":2646,"title":{},"name":{},"text":{"22":{},"24":{},"38":{},"82":{},"84":{},"88":{},"95":{},"136":{},"138":{},"141":{},"143":{},"147":{},"160":{},"164":{}},"component":{},"keyword":{}}],["authn",{"_index":3834,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["author",{"_index":1052,"title":{},"name":{},"text":{"6":{},"68":{},"88":{},"110":{},"122":{},"141":{},"159":{}},"component":{},"keyword":{}}],["authz",{"_index":3835,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["autom",{"_index":2269,"title":{},"name":{},"text":{"17":{},"72":{},"127":{}},"component":{},"keyword":{}}],["automat",{"_index":780,"title":{},"name":{},"text":{"5":{},"9":{},"12":{},"13":{},"14":{},"15":{},"20":{},"26":{},"37":{},"44":{},"52":{},"66":{},"71":{},"74":{},"75":{},"76":{},"94":{},"100":{},"102":{},"104":{},"108":{},"110":{},"121":{},"125":{},"128":{},"129":{},"130":{},"151":{},"152":{},"154":{},"157":{},"159":{}},"component":{},"keyword":{}}],["avail",{"_index":113,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"8":{},"9":{},"10":{},"12":{},"13":{},"16":{},"17":{},"22":{},"32":{},"46":{},"47":{},"51":{},"65":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"108":{},"120":{},"123":{},"126":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"143":{}},"component":{},"keyword":{}}],["averag",{"_index":3880,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["avoid",{"_index":601,"title":{},"name":{},"text":{"3":{},"12":{},"14":{},"15":{},"22":{},"23":{},"43":{},"47":{},"52":{},"75":{},"77":{},"82":{},"83":{},"108":{},"129":{},"131":{},"136":{},"137":{},"157":{},"160":{}},"component":{},"keyword":{}}],["aw",{"_index":3305,"title":{},"name":{},"text":{"64":{},"81":{},"100":{},"104":{},"135":{},"151":{},"154":{}},"component":{},"keyword":{}}],["awar",{"_index":946,"title":{},"name":{},"text":{"6":{},"14":{},"16":{},"51":{},"68":{},"77":{},"122":{}},"component":{},"keyword":{}}],["away",{"_index":2013,"title":{},"name":{},"text":{"13":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["awesom",{"_index":2197,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["b",{"_index":2462,"title":{},"name":{},"text":{"20":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["b/creat",{"_index":2469,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["babashka.f",{"_index":2458,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["babashka/f",{"_index":2426,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["back",{"_index":733,"title":{"11-1":{},"12-1":{},"23-1":{},"74-1":{},"75-1":{},"83-1":{},"128-1":{},"129-1":{},"137-1":{}},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"21":{},"23":{},"25":{},"37":{},"46":{},"52":{},"57":{},"61":{},"66":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"83":{},"84":{},"85":{},"94":{},"99":{},"104":{},"108":{},"110":{},"113":{},"117":{},"121":{},"124":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"137":{},"138":{},"139":{},"146":{},"150":{},"154":{},"157":{},"159":{},"161":{},"165":{}},"component":{},"keyword":{}}],["backend",{"_index":1143,"title":{},"name":{},"text":{"8":{},"9":{},"70":{},"71":{},"125":{},"126":{}},"component":{},"keyword":{}}],["background",{"_index":17,"title":{},"name":{},"text":{"1":{},"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["backslash",{"_index":1821,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["backtick",{"_index":3572,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["backup",{"_index":956,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["backward",{"_index":579,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"24":{},"32":{},"51":{},"52":{},"58":{},"59":{},"63":{},"67":{},"76":{},"84":{},"90":{},"130":{},"138":{},"142":{}},"component":{},"keyword":{}}],["bad",{"_index":593,"title":{"12-13":{}},"name":{},"text":{"3":{},"9":{},"12":{},"23":{},"32":{},"71":{},"75":{},"83":{},"90":{},"125":{},"129":{},"137":{},"142":{}},"component":{},"keyword":{}}],["badli",{"_index":3580,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["bag",{"_index":2078,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["ball",{"_index":2079,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["band",{"_index":3692,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["bar",{"_index":2252,"title":{},"name":{},"text":{"16":{},"109":{},"158":{}},"component":{},"keyword":{}}],["bare",{"_index":1196,"title":{"9-8":{},"71-8":{},"125-8":{}},"name":{},"text":{},"component":{},"keyword":{}}],["barest",{"_index":2382,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["base",{"_index":440,"title":{},"name":{},"text":{"3":{},"5":{},"6":{},"8":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"23":{},"24":{},"33":{},"40":{},"41":{},"42":{},"47":{},"51":{},"52":{},"53":{},"61":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"83":{},"84":{},"92":{},"97":{},"98":{},"99":{},"100":{},"108":{},"113":{},"117":{},"121":{},"122":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"137":{},"138":{},"144":{},"150":{},"151":{},"154":{},"165":{}},"component":{},"keyword":{}}],["baselin",{"_index":3324,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["basi",{"_index":502,"title":{},"name":{},"text":{"3":{},"6":{},"20":{},"68":{},"72":{},"122":{},"127":{}},"component":{},"keyword":{}}],["basic",{"_index":1098,"title":{},"name":{},"text":{"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"18":{},"20":{},"21":{},"23":{},"37":{},"69":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"83":{},"94":{},"123":{},"125":{},"128":{},"129":{},"130":{},"131":{},"133":{},"137":{},"146":{}},"component":{},"keyword":{}}],["be",{"_index":246,"title":{},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"18":{},"19":{},"23":{},"26":{},"32":{},"41":{},"53":{},"65":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"79":{},"83":{},"86":{},"90":{},"98":{},"120":{},"124":{},"125":{},"127":{},"128":{},"129":{},"131":{},"133":{},"137":{}},"component":{},"keyword":{}}],["beanstalk",{"_index":3711,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["bear",{"_index":3015,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["beat",{"_index":3214,"title":{},"name":{},"text":{"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["beauti",{"_index":1979,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}
1],["becom",{"_index":2622,"title":{},"name":{},"text":{"21":{},"23":{},"35":{},"44":{},"63":{},"83":{},"92":{},"102":{},"118":{},"137":{},"144":{},"152":{}},"component":{},"keyword":{}}],["befor",{"_index":523,"title":{"9-6":{},"11-6":{},"12-6":{},"13-6":{},"16-5":{},"17-4":{},"71-6":{},"72-5":{},"74-6":{},"75-6":{},"76-6":{},"78-5":{},"79-6":{},"125-6":{},"127-5":{},"128-6":{},"129-6":{},"130-6":{},"132-5":{},"133-6":{}},"name":{},"text":{"3":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"19":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"32":{},"37":{},"41":{},"43":{},"44":{},"46":{},"53":{},"57":{},"59":{},"61":{},"64":{},"68":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"94":{},"98":{},"100":{},"102":{},"104":{},"110":{},"113":{},"115":{},"117":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"146":{},"151":{},"152":{},"154":{},"160":{},"161":{},"163":{},"165":{}},"component":{},"keyword":{}}],["begin",{"_index":1193,"title":{"9-6":{},"11-6":{},"12-6":{},"13-6":{},"16-5":{},"17-4":{},"71-6":{},"72-5":{},"74-6":{},"75-6":{},"76-6":{},"78-5":{},"79-6":{},"125-6":{},"127-5":{},"128-6":{},"129-6":{},"130-6":{},"132-5":{},"133-6":{}},"name":{},"text":{"10":{},"16":{},"22":{},"29":{},"59":{},"64":{},"72":{},"73":{},"78":{},"81":{},"82":{},"87":{},"110":{},"115":{},"127":{},"132":{},"135":{},"136":{},"140":{},"159":{},"163":{}},"component":{},"keyword":{}}],["beginn",{"_index":1584,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"83":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["behav",{"_index":1158,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["behavior",{"_index":51,"title":{},"name":{},"text":{"1":{},"3":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"19":{},"22":{},"23":{},"24":{},"26":{},"31":{},"32":{},"35":{},"37":{},"41":{},"49":{},"53":{},"64":{},"69":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"84":{},"86":{},"88":{},"89":{},"90":{},"92":{},"94":{},"98":{},"105":{},"113":{},"121":{},"123":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"138":{},"141":{},"144":{},"146":{},"155":{},"157":{}},"component":{},"keyword":{}}],["behaviour",{"_index":3891,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["behind",{"_index":1989,"title":{},"name":{},"text":{"13":{},"72":{},"127":{}},"component":{},"keyword":{}}],["belief",{"_index":870,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["believ",{"_index":708,"title":{},"name":{},"text":{"4":{},"6":{},"19":{},"67":{},"68":{},"75":{},"122":{},"129":{}},"component":{},"keyword":{}}],["belong",{"_index":2455,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["below",{"_index":840,"title":{},"name":{},"text":{"6":{},"9":{},"10":{},"19":{},"20":{},"29":{},"38":{},"46":{},"49":{},"61":{},"68":{},"71":{},"72":{},"73":{},"78":{},"80":{},"87":{},"88":{},"95":{},"104":{},"105":{},"110":{},"117":{},"122":{},"125":{},"127":{},"132":{},"134":{},"140":{},"141":{},"147":{},"154":{},"155":{},"159":{},"164":{},"165":{}},"component":{},"keyword":{}}],["benchmark",{"_index":3194,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["beneath",{"_index":2169,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["benefit",{"_index":1667,"title":{},"name":{},"text":{"11":{},"12":{},"61":{},"64":{},"72":{},"74":{},"75":{},"80":{},"117":{},"127":{},"128":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["besid",{"_index":1966,"title":{},"name":{},"text":{"13":{},"72":{},"127":{}},"component":{},"keyword":{}}],["best",{"_index":45,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"9":{},"10":{},"11":{},"16":{},"66":{},"71":{},"73":{},"76":{},"121":{},"130":{}},"component":{},"keyword":{}}],["beta",{"_index":769,"title":{},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"39":{}},"component":{},"keyword":{}}],["better",{"_index":276,"title":{},"name":{},"text":{"2":{},"3":{},"9":{},"10":{},"12":{},"16":{},"18":{},"23":{},"35":{},"52":{},"65":{},"71":{},"75":{},"78":{},"79":{},"83":{},"92":{},"120":{},"124":{},"125":{},"129":{},"132":{},"133":{},"137":{},"144":{}},"component":{},"keyword":{}}],["between",{"_index":437,"title":{"22-8":{},"82-8":{},"136-8":{}},"name":{},"text":{"3":{},"7":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"20":{},"21":{},"23":{},"37":{},"39":{},"50":{},"53":{},"54":{},"55":{},"64":{},"69":{},"71":{},"74":{},"78":{},"83":{},"94":{},"96":{},"107":{},"109":{},"112":{},"119":{},"123":{},"124":{},"125":{},"128":{},"132":{},"137":{},"146":{},"158":{}},"component":{},"keyword":{}}],["beverag",{"_index":2019,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["beyond",{"_index":2368,"title":{},"name":{},"text":{"18":{},"19":{},"21":{},"55":{},"79":{},"100":{},"110":{},"112":{},"133":{},"151":{}},"component":{},"keyword":{}}],["bi",{"_index":3823,"title":{},"name":{}
1,"text":{"84":{},"138":{}},"component":{},"keyword":{}}],["bidirect",{"_index":2330,"title":{},"name":{},"text":{"18":{},"21":{},"24":{},"64":{},"72":{},"79":{},"119":{},"127":{},"133":{}},"component":{},"keyword":{}}],["big",{"_index":201,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"15":{},"16":{},"24":{},"65":{},"74":{},"75":{},"84":{},"120":{},"128":{},"129":{},"138":{}},"component":{},"keyword":{}}],["bin/bash",{"_index":2507,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["binari",{"_index":2611,"title":{},"name":{},"text":{"21":{},"38":{},"64":{},"119":{}},"component":{},"keyword":{}}],["bind",{"_index":1445,"title":{"29-3":{},"37-1":{},"87-2":{},"94-1":{},"121-5":{},"140-2":{},"146-1":{}},"name":{},"text":{"10":{},"12":{},"20":{},"23":{},"26":{},"29":{},"32":{},"37":{},"73":{},"74":{},"75":{},"78":{},"83":{},"86":{},"87":{},"90":{},"94":{},"128":{},"129":{},"132":{},"137":{},"140":{},"142":{},"146":{}},"component":{},"keyword":{}}],["biometr",{"_index":872,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["bit",{"_index":268,"title":{},"name":{},"text":{"2":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"18":{},"20":{},"23":{},"24":{},"41":{},"59":{},"65":{},"67":{},"71":{},"73":{},"74":{},"75":{},"76":{},"83":{},"84":{},"98":{},"115":{},"120":{},"125":{},"128":{},"129":{},"130":{},"137":{},"138":{}},"component":{},"keyword":{}}],["bitten",{"_index":3540,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["blah",{"_index":4005,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["bleed",{"_index":2994,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["blindli",{"_index":2383,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["block",{"_index":806,"title":{},"name":{},"text":{"5":{},"8":{},"12":{},"19":{},"22":{},"27":{},"33":{},"37":{},"41":{},"57":{},"70":{},"82":{},"83":{},"94":{},"98":{},"110":{},"113":{},"126":{},"136":{},"137":{},"146":{},"159":{},"161":{}},"component":{},"keyword":{}}],["blog",{"_index":1285,"title":{},"name":{},"text":{"9":{},"53":{},"71":{},"125":{}},"component":{},"keyword":{}}],["blog/:id",{"_index":3205,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["blueant",{"_index":1396,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["blueprint",{"_index":3890,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["blvd",{"_index":1000,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["bob",{"_index":252,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["bodi",{"_index":760,"title":{"49":{},"105":{},"155":{},"19-6":{},"30-8":{},"44-3":{},"102-3":{},"152-3":{}},"name":{"49":{},"105":{},"155":{}},"text":{"5":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"30":{},"32":{},"35":{},"37":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"55":{},"57":{},"61":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"90":{},"92":{},"94":{},"102":{},"104":{},"105":{},"106":{},"107":{},"110":{},"112":{},"113":{},"117":{},"122":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"142":{},"144":{},"152":{},"154":{},"155":{},"156":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["bodies.th",{"_index":3097,"title":{},"name":{},"text":{"44":{}},"component":{},"keyword":{}}],["boil",{"_index":2814,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["bookmark",{"_index":3927,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["boolean",{"_index":1769,"title":{},"name":{},"text":{"11":{},"26":{},"27":{},"31":{},"38":{},"46":{},"50":{},"86":{},"89":{},"95":{},"104":{},"107":{},"110":{},"143":{},"147":{},"154":{},"159":{},"164":{}},"component":{},"keyword":{}}
1],["boot",{"_index":263,"title":{},"name":{},"text":{"2":{},"10":{},"65":{},"73":{},"120":{}},"component":{},"keyword":{}}],["bootstrap",{"_index":1521,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["bore",{"_index":627,"title":{},"name":{},"text":{"3":{},"76":{},"130":{}},"component":{},"keyword":{}}],["both",{"_index":557,"title":{},"name":{},"text":{"3":{},"5":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"21":{},"22":{},"23":{},"37":{},"39":{},"41":{},"47":{},"61":{},"64":{},"71":{},"72":{},"74":{},"75":{},"76":{},"80":{},"81":{},"82":{},"83":{},"92":{},"94":{},"96":{},"98":{},"101":{},"109":{},"117":{},"125":{},"127":{},"128":{},"129":{},"130":{},"134":{},"135":{},"136":{},"137":{},"144":{},"146":{},"158":{},"160":{},"165":{}},"component":{},"keyword":{}}],["bottom",{"_index":1971,"title":{},"name":{},"text":{"13":{},"15":{},"16":{},"32":{},"76":{},"84":{},"90":{},"130":{},"138":{}},"component":{},"keyword":{}}],["bounc",{"_index":1645,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["bound",{"_index":1151,"title":{},"name":{},"text":{"8":{},"16":{},"23":{},"29":{},"32":{},"41":{},"44":{},"58":{},"59":{},"61":{},"70":{},"72":{},"78":{},"80":{},"83":{},"87":{},"90":{},"98":{},"102":{},"114":{},"115":{},"117":{},"125":{},"126":{},"127":{},"132":{},"134":{},"137":{},"140":{},"142":{},"152":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["box",{"_index":3034,"title":{},"name":{},"text":{"41":{},"84":{},"98":{},"110":{},"138":{},"159":{}},"component":{},"keyword":{}}],["brace",{"_index":1956,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["bracket",{"_index":1975,"title":{},"name":{},"text":{"13":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["branch",{"_index":298,"title":{},"name":{},"text":{"2":{},"29":{},"65":{},"87":{},"120":{},"140":{}},"component":{},"keyword":{}}],["break",{"_index":795,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"22":{},"23":{},"66":{},"75":{},"78":{},"82":{},"83":{},"92":{},"124":{},"129":{},"132":{},"136":{},"137":{},"144":{}},"component":{},"keyword":{}}],["breakpoint",{"_index":2132,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["brew",{"_index":2625,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["bridg",{"_index":403,"title":{},"name":{},"text":{"3":{},"20":{},"55":{},"74":{},"83":{},"112":{},"128":{},"137":{}},"component":{},"keyword":{}}],["bridge</param",{"_index":2451,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["brief",{"_index":1435,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["brigad",{"_index":1631,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["bring",{"_index":744,"title":{},"name":{},"text":{"5":{},"16":{},"18":{},"20":{},"39":{},"66":{},"76":{},"79":{},"96":{},"130":{},"133":{}},"component":{},"keyword":{}}],["broad",{"_index":3063,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["broadli",{"_index":3210,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["broken",{"_index":291,"title":{},"name":{},"text":{"2":{},"18":{},"32":{},"65":{},"79":{},"90":{},"100":{},"120":{},"124":{},"133":{},"151":{}},"component":{},"keyword":{}}],["brows",{"_index":1603,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["browser",{"_index":1502,"title":{},"name":{},"text":{"10":{},"17":{},"18":{},"21":{},"38":{},"44":{},"54":{},"64":{},"72":{},"73":{},"76":{},"102":{},"109":{},"127":{},"130":{},"152":{},"158":{}},"component":{},"keyword":{}}],["bubbl",{"_index":2883,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["bucket",{"_index":1630,"title":{},"name":{},"text":{"11":{},"43":{},"74":{},"101":{},"128":{}},"component":{},"keyword":{}}],["buffer",{"_index":2392,"title":{},"name":{},"text":{"19":{},"38":{},"47":{},"49":{},"64":{},"105":{},"143":{},"155":{}},"component":{},"keyword":{}}],["bug",{"_index":128,"title":{"2-8":{},"65-7":{},"120-7":{}},"name":{},"text":{"2":{},"11":{},"23":{},"39":{},"64":{},"65":{},"74":{},"96":{},"120":{},"128":{}},"component":{},"keyword":{}}],["build",{"_index":512,"title":{"9-9":{},"10-6":{},"71-9":{},"73-6":{},"81-3":{},"81-4":{},"125-9":{},"135-3":{},"135-4":{}},"name":{},"text":{"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"23":{},"32":{},"35":{},"41":{},"51":{},"52":{},"66":{},"69":{},"71":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"88":{},"90":{},"92":{},"98":{},"108":{},"110":{},"121":{},"123":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"141":{},"142":{},"144":{},"157":{}},"component":{},"keyword":{}}],["build.clj",{"_index":1392,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["build/build.clj",{"_index":2457,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["builder",{"_index":3066,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["built",{"_index":375,"title":{"43-5":{},"52-5":{},"101-3":{}},"name":{},"text":{"3":{},"5":{},"7":{},"11":{},"12":{},"13":{},"16":{},"17":{},"20":{},"22":{},"23":{},"39":{},"41":{},"43":{},"44":{},"51":{},"52":{},"54":{},"56":{},"64":{},"66":{},"69":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"83":{},"86":{},"88":{},"92":{},"96":{},"98":{},"101":{},"102":{},"108":{},"109":{},"110":{},"111":{},"121":{},"123":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"137":{},"141":{},"144":{},"152":{},"157":{},"158":{}},"component":{},"keyword":{}}],["builtin",{"_index":3107,"title":{"108-5":{},"157-5":{}},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["bulk",{"_index":2802,"title":{},"name":{},"text":{"24":{},"53":{},"84":{},"138":{}},"component":{},"keyword":{}}],["bump",{"_index":546,"title":{},"name":{},"text":{"3":{},"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["bundl",{"_index":1367,"title":{},"name":{},"text":{"10":{},"20":{},"24":{},"73":{},"84":{},"138":{}},"component":{},"keyword":{}}],["buri",{"_index":2721,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["busi",{"_index":921,"title":{},"name":{},"text":{"6":{},"19":{},"23":{},"61":{},"68":{},"80":{},"117":{},"122":{},"134":{},"165":{}},"component":{},"keyword":{}}],["buy",{"_index":3831,"title":{},"name":{},"text":{"87":{}},"component":{},"keyword":{}}],["buyer",{"_index":3023,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["bypass",{"_index":4020,"title":{},"name":{},"text":{"160":{}},"component":{},"keyword":{}}],["byte",{"_index":1669,"title":{},"name":{},"text":{"11":{},"19":{},"21":{},"49":{},"57":{},"64":{},"74":{},"105":{},"113":{},"128":{},"155":{},"161":{}},"component":{},"keyword":{}}],["bytebuff",{"_index":3148,"title":{},"name":{},"text":{"49":{},"57":{},"64":{},"105":{},"113":{},"119":{},"155":{},"161":{}},"component":{},"keyword":{}}],["bytebufferpool.xml",{"_index":2548,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["bytebuffer’",{"_index":3302,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["c",{"_index":2026,"title":{},"name":{},"text":{"13":{},"20":{},"21":{},"23":{},"76":{},"81":{},"83":{},"130":{},"135":{},"137":{}},"component":{},"keyword":{}}],["ca",{"_index":1002,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["cach",{"_index":534,"title":{},"name":{},"text":{"3":{},"47":{},"100":{},"110":{},"151":{},"159":{}},"component":{},"keyword":{}}],["calcul",{"_index":1186,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}
1],["california",{"_index":826,"title":{"6-8":{},"68-8":{},"122-8":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["call",{"_index":585,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"30":{},"32":{},"35":{},"37":{},"38":{},"39":{},"41":{},"43":{},"44":{},"51":{},"52":{},"54":{},"55":{},"57":{},"61":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"88":{},"90":{},"92":{},"94":{},"95":{},"96":{},"98":{},"101":{},"102":{},"108":{},"109":{},"110":{},"112":{},"113":{},"117":{},"122":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"144":{},"146":{},"147":{},"152":{},"158":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["callback",{"_index":1628,"title":{},"name":{},"text":{"11":{},"18":{},"21":{},"22":{},"32":{},"38":{},"54":{},"64":{},"74":{},"79":{},"82":{},"90":{},"100":{},"119":{},"128":{},"133":{},"136":{},"151":{}},"component":{},"keyword":{}}],["caller",{"_index":2653,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["came",{"_index":321,"title":{},"name":{},"text":{"2":{},"19":{},"65":{},"120":{}},"component":{},"keyword":{}}],["camel",{"_index":2764,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["canon",{"_index":2921,"title":{},"name":{},"text":{"35":{},"92":{},"100":{},"144":{},"151":{}},"component":{},"keyword":{}}],["can’t",{"_index":2406,"title":{},"name":{},"text":{"19":{},"23":{},"52":{},"78":{},"83":{},"108":{},"132":{},"137":{}},"component":{},"keyword":{}}],["capabl",{"_index":804,"title":{},"name":{},"text":{"5":{},"15":{},"17":{},"24":{},"64":{},"66":{},"72":{},"119":{},"121":{},"127":{}},"component":{},"keyword":{}}],["capit",{"_index":1914,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["capstanfil",{"_index":3943,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["captur",{"_index":1256,"title":{"14-2":{}},"name":{},"text":{"9":{},"10":{},"14":{},"16":{},"23":{},"32":{},"43":{},"52":{},"71":{},"72":{},"73":{},"77":{},"78":{},"90":{},"92":{},"108":{},"125":{},"127":{},"131":{},"132":{},"142":{},"144":{}},"component":{},"keyword":{}}],["card",{"_index":3110,"title":{},"name":{},"text":{"45":{},"52":{},"53":{},"58":{},"59":{},"103":{},"108":{},"114":{},"115":{},"153":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["care",{"_index":318,"title":{},"name":{},"text":{"2":{},"6":{},"9":{},"13":{},"17":{},"20":{},"21":{},"29":{},"41":{},"46":{},"47":{},"55":{},"65":{},"68":{},"71":{},"76":{},"87":{},"98":{},"104":{},"112":{},"120":{},"122":{},"125":{},"130":{},"140":{},"154":{},"160":{}},"component":{},"keyword":{}}],["carefulli",{"_index":1035,"title":{},"name":{},"text":{"6":{},"68":{},"94":{},"122":{}},"component":{},"keyword":{}}],["cargo",{"_index":2627,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["carri",{"_index":1691,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["case",{"_index":619,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"19":{},"22":{},"23":{},"24":{},"32":{},"37":{},"41":{},"42":{},"44":{},"46":{},"48":{},"51":{},"52":{},"53":{},"54":{},"55":{},"57":{},"63":{},"64":{},"67":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"84":{},"90":{},"94":{},"98":{},"99":{},"102":{},"104":{},"106":{},"108":{},"110":{},"112":{},"113":{},"118":{},"124":{},"125":{},"128":{},"129":{},"130":{},"131":{},"136":{},"137":{},"138":{},"142":{},"146":{},"150":{},"152":{},"154":{},"156":{},"157":{},"159":{},"160":{},"161":{}},"component":{},"keyword":{}}],["catch",{"_index":1198,"title":{"9-11":{},"71-11":{},"125-11":{}},"name":{},"text":{"9":{},"24":{},"32":{},"39":{},"41":{},"55":{},"71":{},"84":{},"90":{},"96":{},"98":{},"112":{},"125":{},"138":{},"142":{},"157":{},"160":{}},"component":{},"keyword":{}}],["categori",{"_index":978,"title":{},"name":{},"text":{"6":{},"19":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["caught",{"_index":2672,"title":{},"name":{},"text":{"22":{},"32":{},"41":{},"82":{},"90":{},"98":{},"136":{},"142":{}},"component":{},"keyword":{}}],["caus",{"_index":516,"title":{},"name":{},"text":{"3":{},"4":{},"12":{},"23":{},"32":{},"37":{},"50":{},"64":{},"83":{},"94":{},"107":{},"137":{},"146":{},"160":{}},"component":{},"keyword":{}}],["cautiou",{"_index":1184,"title":{},"name":{},"text":{"8":{},"9":{},"70":{},"71":{},"125":{},"126":{}},"component":{},"keyword":{}}],["caveat",{"_index":3001,"title":{"40-4":{},"42-4":{},"45-4":{},"53-4":{},"97-4":{},"99-4":{},"103-4":{},"148-4":{},"150-4":{},"153-4":{}},"name":{},"text":{},"component":{},"keyword":{}}],["ccpa",{"_index":977,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["cd",{"_index":1941,"title":{},"name":{},"text":{"13":{},"18":{},"21":{},"23":{},"72":{},"76":{},"79":{},"83":{},"125":{},"127":{},"130":{},"133":{},"137":{}},"component":{},"keyword":{}}],["ceas",{"_index":967,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["center",{"_index":2077,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["central",{"_index":514,"title":{},"name":{},"text":{"3":{},"7":{},"12":{},"24":{},"41":{},"69":{},"72":{},"75":{},"84":{},"98":{},"123":{},"127":{},"129":{},"138":{}},"component":{},"keyword":{}}],["cert",{"_index":3120,"title":{},"name":{},"text":{"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["certain",{"_index":574,"title":{},"name":{},"text":{"3":{},"6":{},"16":{},"24":{},"31":{},"32":{},"37":{},"48":{},"68":{},"84":{},"90":{},"94":{},"106":{},"112":{},"122":{},"138":{},"146":{},"156":{},"160":{}},"component":{},"keyword":{}}],["certainli",{"_index":3946,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["certif",{"_index":2257,"title":{},"name":{},"text":{"17":{},"38":{},"46":{},"95":{},"104":{},"143":{},"147":{},"154":{},"164":{}},"component":{},"keyword":{}}],["ch",{"_index":2666,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["ch.qos.logback.core.consoleappend",{"_index":3038,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["ch.qos.logback/logback",{"_index":3644,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["chain",{"_index":632,"title":{"25":{},"85":{},"139":{},"4-8":{},"8-4":{},"67-5":{},"70-4":{},"84-3":{},"126-4":{},"138-3":{}},"name":{"25":{},"85":{},"139":{}},"text":{"4":{},"7":{},"8":{},"9":{},"11":{},"16":{},"19":{},"23":{},"24":{},"25":{},"27":{},"28":{},"29":{},"32":{},"37":{},"48":{},"55":{},"61":{},"64":{},"67":{},"69":{},"70":{},"71":{},"72":{},"79":{},"80":{},"83":{},"84":{},"85":{},"87":{},"90":{},"94":{},"104":{},"106":{},"110":{},"112":{},"117":{},"123":{},"125":{},"126":{},"127":{},"133":{},"134":{},"137":{},"138":{},"139":{},"140":{},"142":{},"146":{},"154":{},"156":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["chain/bind",{"_index":2870,"title":{},"name":{},"text":{"29":{},"87":{}},"component":{},"keyword":{}}],["chain/execut",{"_index":2385,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["chain/unbind",{"_index":2873,"title":{},"name":{},"text":{"29":{},"87":{}},"component":{},"keyword":{}}],["challeng",{"_index":385,"title":{},"name":{},"text":{"3":{},"7":{},"14":{},"22":{},"69":{},"77":{},"82":{},"123":{},"131":{},"136":{}},"component":{},"keyword":{}}],["chan",{"_index":2349,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"109":{},"124":{},"133":{},"158":{}},"component":{},"keyword":{}}],["chan/clos",{"_index":3683,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["chang",{"_index":288,"title":{"51":{}},"name":{"51":{}},"text":{"2":{},"3":{},"4":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"21":{},"22":{},"23":{},"27":{},"29":{},"31":{},"37":{},"44":{},"46":{},"47":{},"51":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"87":{},"89":{},"94":{},"100":{},"102":{},"120":{},"122":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"136":{},"137":{},"140":{},"146":{},"152":{},"160":{}},"component":{},"keyword":{}}],["changelog.md",{"_index":1393,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["channel",{"_index":34,"title":{"49-1":{},"49-2":{},"57-3":{},"105-1":{},"113-3":{}
1,"161-3":{}},"name":{},"text":{"1":{},"7":{},"8":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"22":{},"23":{},"24":{},"25":{},"32":{},"35":{},"37":{},"49":{},"54":{},"57":{},"64":{},"69":{},"70":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"83":{},"84":{},"90":{},"92":{},"94":{},"105":{},"109":{},"113":{},"123":{},"126":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"137":{},"138":{},"142":{},"144":{},"146":{},"155":{},"158":{},"161":{}},"component":{},"keyword":{}}],["chapel",{"_index":1064,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["char",{"_index":380,"title":{},"name":{},"text":{"3":{},"4":{},"26":{}},"component":{},"keyword":{}}],["charact",{"_index":1267,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"46":{},"49":{},"52":{},"58":{},"59":{},"71":{},"75":{},"77":{},"83":{},"104":{},"105":{},"108":{},"114":{},"115":{},"125":{},"129":{},"131":{},"137":{},"154":{},"155":{},"162":{},"163":{}},"component":{},"keyword":{}}],["characterist",{"_index":3200,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["charg",{"_index":1577,"title":{},"name":{},"text":{"11":{},"71":{},"74":{},"125":{},"128":{}},"component":{},"keyword":{}}],["chat",{"_index":2606,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["cheat",{"_index":2732,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["check",{"_index":190,"title":{},"name":{},"text":{"2":{},"6":{},"9":{},"10":{},"13":{},"16":{},"17":{},"23":{},"29":{},"32":{},"37":{},"38":{},"41":{},"65":{},"68":{},"71":{},"72":{},"73":{},"76":{},"77":{},"78":{},"79":{},"83":{},"86":{},"87":{},"90":{},"98":{},"120":{},"122":{},"127":{},"130":{},"131":{},"132":{},"133":{},"137":{},"140":{},"156":{},"157":{},"160":{}},"component":{},"keyword":{}}],["checkout",{"_index":117,"title":{"2-2":{},"65-2":{},"120-2":{}},"name":{},"text":{},"component":{},"keyword":{}}],["cheshir",{"_index":378,"title":{},"name":{},"text":{"3":{},"4":{},"20":{},"26":{}},"component":{},"keyword":{}}],["child",{"_index":942,"title":{},"name":{},"text":{"6":{},"59":{},"68":{},"115":{},"122":{},"163":{}},"component":{},"keyword":{}}],["children",{"_index":935,"title":{},"name":{},"text":{"6":{},"63":{},"68":{},"79":{},"118":{},"122":{},"133":{}},"component":{},"keyword":{}}],["children’",{"_index":819,"title":{"6-6":{},"68-6":{},"122-6":{}},"name":{},"text":{},"component":{},"keyword":{}}],["choic",{"_index":1334,"title":{},"name":{},"text":{"9":{},"18":{},"21":{},"79":{},"81":{},"133":{},"135":{}},"component":{},"keyword":{}}],["choos",{"_index":847,"title":{},"name":{},"text":{"6":{},"10":{},"12":{},"51":{},"68":{},"73":{},"92":{},"122":{},"144":{}},"component":{},"keyword":{}}],["chosen",{"_index":1729,"title":{},"name":{},"text":{"11":{},"13":{},"24":{},"74":{},"76":{},"128":{},"130":{}},"component":{},"keyword":{}}],["chunk",{"_index":1718,"title":{},"name":{},"text":{"11":{},"14":{},"20":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"128":{},"129":{},"130":{},"131":{},"132":{}},"component":{},"keyword":{}}],["ci/cd",{"_index":1552,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["cipher",{"_index":4038,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["circuit",{"_index":1638,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["circumst",{"_index":103,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["civil",{"_index":970,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["class",{"_index":175,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"10":{},"13":{},"15":{},"16":{},"20":{},"22":{},"26":{},"32":{},"37":{},"47":{},"52":{},"64":{},"72":{},"73":{},"76":{},"81":{},"82":{},"86":{},"90":{},"127":{},"130":{},"135":{},"142":{}},"component":{},"keyword":{}}],["class=\"ch.qos.logback.core.consoleappend",{"_index":3047,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["class>io.pedestal.servlet.clojurevarservlet</servlet",{"_index":3722,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["class>io.pedestal.servlet.connectorservlet</servlet",{"_index":2446,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["classic",{"_index":2913,"title":{},"name":{},"text":{"32":{},"79":{},"90":{},"133":{},"142":{}},"component":{},"keyword":{}}],["classload",{"_index":2420,"title":{},"name":{},"text":{"20":{},"47":{}},"component":{},"keyword":{}}],["classnotfoundexcept",{"_index":158,"title":{},"name":{},"text":{"2":{}},"component":{},"keyword":{}}],["classpath",{"_index":1437,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"16":{},"20":{},"26":{},"28":{},"41":{},"47":{},"50":{},"73":{},"74":{},"76":{},"86":{},"98":{},"107":{},"124":{},"128":{},"130":{}},"component":{},"keyword":{}}],["claus",{"_index":1251,"title":{"58-11":{},"58-12":{},"114-10":{},"114-11":{},"162-10":{},"162-11":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"23":{},"32":{},"58":{},"71":{},"74":{},"75":{},"83":{},"90":{},"114":{},"125":{},"128":{},"129":{},"137":{},"142":{},"162":{}},"component":{},"keyword":{}}],["clean",{"_index":1964,"title":{"79-9":{},"133-9":{}},"name":{},"text":{"13":{},"23":{},"54":{},"72":{},"81":{},"83":{},"109":{},"127":{},"135":{},"137":{},"158":{}},"component":{},"keyword":{}}],["cleanup",{"_index":1447,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["clear",{"_index":498,"title":{},"name":{},"text":{"3":{},"47":{},"64":{},"108":{}},"component":{},"keyword":{}}],["cleartext",{"_index":2964,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["cli",{"_index":1927,"title":{},"name":{},"text":{"13":{},"16":{},"17":{},"76":{},"78":{},"130":{},"132":{}},"component":{},"keyword":{}}],["click",{"_index":1544,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["client",{"_index":1126,"title":{},"name":{},"text":{"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"19":{},"21":{},"23":{},"24":{},"29":{},"30":{},"32":{},"38":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"54":{},"55":{},"57":{},"62":{},"64":{},"69":{},"71":{},"74":{},"75":{},"77":{},"79":{},"83":{},"84":{},"87":{},"90":{},"95":{},"101":{},"102":{},"104":{},"106":{},"107":{},"109":{},"110":{},"112":{},"113":{},"119":{},"123":{},"125":{},"128":{},"129":{},"131":{},"133":{},"137":{},"138":{},"140":{},"143":{},"147":{},"152":{},"154":{},"156":{},"158":{},"159":{},"160":{},"161":{},"164":{}},"component":{},"keyword":{}}],["client/serv",{"_index":2333,"title":{},"name":{},"text":{"18":{},"62":{}},"component":{},"keyword":{}}],["clientcertprovid",{"_index":4035,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["clientendpoint",{"_index":3288,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["client’",{"_index":1600,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["clj",{"_index":165,"title":{},"name":{},"text":{"2":{},"7":{},"10":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"26":{},"65":{},"69":{},"73":{},"75":{},"76":{},"78":{},"83":{},"89":{},"120":{},"123":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["clock",{"_index":2248,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["clojar",{"_index":152,"title":{},"name":{},"text":{"2":{},"10":{},"13":{},"39":{},"73":{},"76":{},"96":{},"125":{},"130":{}},"component":{},"keyword":{}}
1],["clojur",{"_index":261,"title":{"20-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"33":{},"35":{},"37":{},"39":{},"41":{},"44":{},"49":{},"50":{},"56":{},"57":{},"58":{},"59":{},"64":{},"65":{},"66":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"92":{},"96":{},"98":{},"102":{},"105":{},"107":{},"110":{},"111":{},"113":{},"114":{},"115":{},"120":{},"123":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"140":{},"144":{},"152":{},"154":{},"155":{},"161":{},"162":{},"163":{}},"component":{},"keyword":{}}],["clojure'",{"_index":3918,"title":{},"name":{},"text":{"121":{}},"component":{},"keyword":{}}],["clojure.cor",{"_index":1870,"title":{},"name":{},"text":{"12":{},"13":{},"75":{},"129":{}},"component":{},"keyword":{}}],["clojure.core$constantly$fn__5740@4f9a0139",{"_index":3793,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["clojure.core$constantly$fn__6443@6182d451",{"_index":3563,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["clojure.core$name@6b202ecb",{"_index":1878,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["clojure.core.async",{"_index":2341,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"133":{}},"component":{},"keyword":{}}],["clojure.core.async.impl.protocol",{"_index":3681,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["clojure.core.async/clos",{"_index":2345,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["clojure.core.async/go",{"_index":2665,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["clojure.core/nam",{"_index":1873,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["clojure.core/pr",{"_index":3239,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["clojure.core/upd",{"_index":3430,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["clojure.data.json",{"_index":1694,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["clojure.edn",{"_index":2723,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["clojure.java.io",{"_index":3341,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["clojure.lang.apersistentmap",{"_index":2923,"title":{},"name":{},"text":{"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["clojure.lang.apersistentset",{"_index":2924,"title":{},"name":{},"text":{"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["clojure.lang.apersistentvector",{"_index":2922,"title":{},"name":{},"text":{"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["clojure.lang.persistentqueue@1",{"_index":3796,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["clojure.pprint",{"_index":2460,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["clojure.str",{"_index":1915,"title":{},"name":{},"text":{"12":{},"16":{},"75":{},"129":{}},"component":{},"keyword":{}}],["clojure.test",{"_index":2217,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["clojure.test/run",{"_index":3962,"title":{},"name":{},"text":{"132":{}},"component":{},"keyword":{}}],["clojure.test/test",{"_index":675,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["clojure.tools.build.api",{"_index":2461,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["clojure/data/json.clj",{"_index":1703,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["clojure/data/json.cljc",{"_index":1704,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["clojure/data/json__init.class",{"_index":1702,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["clojure/deps.edn",{"_index":1373,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["clojurevarservlet",{"_index":176,"title":{},"name":{},"text":{"2":{}},"component":{},"keyword":{}}],["clojure’",{"_index":745,"title":{},"name":{},"text":{"5":{},"8":{},"13":{},"16":{},"17":{},"49":{},"56":{},"66":{},"70":{},"76":{},"77":{},"78":{},"105":{},"110":{},"111":{},"126":{},"130":{},"131":{},"132":{},"155":{}},"component":{},"keyword":{}}],["clojurian",{"_index":1597,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["clone",{"_index":136,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["close",{"_index":1341,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"18":{},"21":{},"38":{},"43":{},"54":{},"57":{},"63":{},"64":{},"71":{},"74":{},"76":{},"79":{},"101":{},"109":{},"110":{},"113":{},"118":{},"119":{},"125":{},"128":{},"130":{},"133":{},"158":{},"159":{},"161":{}},"component":{},"keyword":{}}],["closer",{"_index":3367,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["closereason",{"_index":3912,"title":{},"name":{},"text":{"119":{}},"component":{},"keyword":{}}],["code",{"_index":4,"title":{"1":{},"15-6":{}},"name":{"1":{}},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"32":{},"35":{},"39":{},"41":{},"44":{},"47":{},"48":{},"57":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"68":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"90":{},"92":{},"96":{},"98":{},"100":{},"102":{},"106":{},"110":{},"113":{},"117":{},"118":{},"120":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"151":{},"152":{},"156":{},"159":{},"161":{},"165":{}},"component":{},"keyword":{}}],["coerc",{"_index":669,"title":{},"name":{},"text":{"4":{},"11":{},"44":{},"74":{},"102":{},"128":{},"152":{}},"component":{},"keyword":{}}],["coercion",{"_index":3997,"title":{},"name":{},"text":{"154":{}},"component":{},"keyword":{}}],["cognitect",{"_index":3310,"title":{"122-5":{}},"name":{},"text":{"65":{},"120":{},"122":{},"124":{}},"component":{},"keyword":{}}],["cognitect.test",{"_index":2166,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["cognitect’",{"_index":3919,"title":{},"name":{},"text":{"122":{}},"component":{},"keyword":{}}],["coll",{"_index":3353,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}
1],["collabor",{"_index":2608,"title":{},"name":{},"text":{"21":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["collect",{"_index":387,"title":{"6-1":{},"57-2":{},"68-1":{},"113-2":{},"122-1":{},"161-2":{}},"name":{},"text":{"3":{},"6":{},"10":{},"11":{},"13":{},"23":{},"29":{},"30":{},"49":{},"57":{},"58":{},"68":{},"69":{},"73":{},"74":{},"83":{},"87":{},"100":{},"105":{},"113":{},"114":{},"122":{},"123":{},"128":{},"137":{},"140":{},"151":{},"155":{},"161":{},"162":{}},"component":{},"keyword":{}}],["collis",{"_index":2662,"title":{},"name":{},"text":{"22":{},"29":{},"47":{},"82":{},"136":{}},"component":{},"keyword":{}}],["colon",{"_index":1275,"title":{},"name":{},"text":{"9":{},"58":{},"59":{},"71":{},"114":{},"115":{},"125":{},"162":{},"163":{}},"component":{},"keyword":{}}],["color",{"_index":2236,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["column",{"_index":2912,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["com",{"_index":1395,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["com.blueant",{"_index":1381,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["com.blueant.peripheral.main",{"_index":1498,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["com.blueant.peripheral.routes/greet",{"_index":3395,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["com.blueant.peripheral.routes/hello",{"_index":3396,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["com.blueant.peripheral.servic",{"_index":1421,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["com.blueant.peripheral.service$service_map$fn__17845@7589371f",{"_index":3411,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["com.blueant/peripher",{"_index":1383,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["com.codahale.metrics.metricregistri",{"_index":3883,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["com.stuartsierra.compon",{"_index":2091,"title":{},"name":{},"text":{"15":{},"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["com.stuartsierra.component.repl",{"_index":3608,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["com.stuartsierra/compon",{"_index":2149,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["com.stuartsierra/component.repl",{"_index":3592,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["combin",{"_index":564,"title":{},"name":{},"text":{"3":{},"7":{},"10":{},"13":{},"16":{},"19":{},"23":{},"24":{},"47":{},"51":{},"52":{},"69":{},"73":{},"78":{},"84":{},"92":{},"123":{},"132":{},"138":{},"144":{}},"component":{},"keyword":{}}],["combinators.match",{"_index":2222,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["combinators.test",{"_index":2221,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["come",{"_index":309,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"9":{},"11":{},"13":{},"15":{},"16":{},"20":{},"22":{},"23":{},"35":{},"52":{},"65":{},"69":{},"71":{},"74":{},"76":{},"82":{},"83":{},"92":{},"108":{},"120":{},"123":{},"125":{},"128":{},"130":{},"136":{},"137":{},"144":{},"157":{}},"component":{},"keyword":{}}],["comfort",{"_index":3368,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["command",{"_index":180,"title":{"10-6":{},"73-6":{}},"name":{},"text":{"2":{},"10":{},"11":{},"13":{},"16":{},"20":{},"26":{},"72":{},"73":{},"76":{},"78":{},"81":{},"89":{},"127":{},"130":{},"135":{}},"component":{},"keyword":{}}],["comment",{"_index":61,"title":{},"name":{},"text":{"1":{},"11":{},"74":{},"79":{},"128":{},"133":{}},"component":{},"keyword":{}}],["commerci",{"_index":980,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["commit",{"_index":8,"title":{"2-11":{}},"name":{},"text":{"1":{},"2":{},"6":{},"65":{},"68":{},"120":{},"122":{}},"component":{},"keyword":{}}],["common",{"_index":404,"title":{"9-15":{},"29-2":{},"71-15":{},"125-15":{}},"name":{},"text":{"3":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"24":{},"27":{},"29":{},"37":{},"39":{},"41":{},"52":{},"53":{},"58":{},"68":{},"71":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"84":{},"94":{},"96":{},"98":{},"100":{},"108":{},"114":{},"119":{},"122":{},"125":{},"128":{},"129":{},"131":{},"132":{},"133":{},"138":{},"146":{},"151":{},"162":{},"164":{}},"component":{},"keyword":{}}],["commonli",{"_index":1314,"title":{},"name":{},"text":{"9":{},"32":{},"37":{},"50":{},"71":{},"81":{},"90":{},"94":{},"107":{},"125":{},"135":{},"142":{},"146":{}},"component":{},"keyword":{}}],["commons.human",{"_index":2092,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["commons/human",{"_index":2152,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}
1],["commun",{"_index":22,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"13":{},"17":{},"29":{},"68":{},"69":{},"78":{},"87":{},"121":{},"122":{},"123":{},"125":{},"132":{},"140":{}},"component":{},"keyword":{}}],["comp",{"_index":3357,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["compact",{"_index":1746,"title":{},"name":{},"text":{"11":{},"12":{},"59":{},"74":{},"115":{},"128":{},"163":{}},"component":{},"keyword":{}}],["compani",{"_index":316,"title":{},"name":{},"text":{"2":{},"6":{},"65":{},"68":{},"120":{},"122":{}},"component":{},"keyword":{}}],["company’",{"_index":3171,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["compar",{"_index":2232,"title":{},"name":{},"text":{"16":{},"22":{},"52":{},"82":{},"108":{},"136":{}},"component":{},"keyword":{}}],["comparison",{"_index":1916,"title":{"22-3":{},"82-3":{},"136-3":{}},"name":{},"text":{"12":{},"18":{},"75":{},"79":{},"129":{},"133":{}},"component":{},"keyword":{}}],["compat",{"_index":425,"title":{"101-4":{}},"name":{},"text":{"3":{},"4":{},"9":{},"46":{},"51":{},"52":{},"58":{},"59":{},"63":{},"67":{},"108":{}},"component":{},"keyword":{}}],["compet",{"_index":1050,"title":{},"name":{},"text":{"6":{},"7":{},"68":{},"69":{},"122":{},"123":{}},"component":{},"keyword":{}}],["compil",{"_index":169,"title":{},"name":{},"text":{"2":{},"3":{},"11":{},"13":{},"20":{},"26":{},"31":{},"72":{},"74":{},"76":{},"81":{},"86":{},"125":{},"127":{},"128":{},"130":{},"135":{}},"component":{},"keyword":{}}],["compl",{"_index":2880,"title":{},"name":{},"text":{"31":{}},"component":{},"keyword":{}}],["complaint",{"_index":95,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["complement",{"_index":3358,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["complet",{"_index":338,"title":{},"name":{},"text":{"2":{},"3":{},"8":{},"11":{},"13":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"29":{},"55":{},"57":{},"64":{},"65":{},"70":{},"72":{},"74":{},"76":{},"78":{},"80":{},"82":{},"87":{},"112":{},"120":{},"126":{},"127":{},"128":{},"130":{},"132":{},"136":{},"140":{},"160":{}},"component":{},"keyword":{}}],["complete=\"tru",{"_index":3715,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["complex",{"_index":1358,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"24":{},"58":{},"59":{},"71":{},"75":{},"84":{},"92":{},"110":{},"114":{},"115":{},"125":{},"129":{},"138":{},"144":{},"162":{},"163":{}},"component":{},"keyword":{}}],["compli",{"_index":925,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["compliant",{"_index":991,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["complic",{"_index":1692,"title":{},"name":{},"text":{"11":{},"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["compon",{"_index":809,"title":{"15":{},"16":{},"78":{},"132":{},"15-1":{},"16-7":{},"16-8":{},"16-9":{},"16-12":{},"78-7":{},"132-7":{}},"name":{"15":{},"16":{},"78":{},"132":{}},"text":{"5":{},"13":{},"15":{},"16":{},"19":{},"27":{},"29":{},"52":{},"66":{},"72":{},"78":{},"108":{},"124":{},"127":{},"132":{},"157":{}},"component":{},"keyword":{}}],["component.repl",{"_index":3609,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["component/lifecycl",{"_index":2094,"title":{},"name":{},"text":{"15":{},"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["component/start",{"_index":2193,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["component/stop",{"_index":2194,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["component/system",{"_index":2123,"title":{},"name":{},"text":{"15":{},"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["component/us",{"_index":2126,"title":{},"name":{},"text":{"15":{},"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["components/lifecycl",{"_index":2175,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["component’",{"_index":2229,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["compos",{"_index":729,"title":{"5-7":{},"66-7":{},"121-6":{}},"name":{},"text":{"22":{},"24":{},"39":{},"63":{},"71":{},"82":{},"84":{},"96":{},"118":{},"125":{},"136":{},"138":{}},"component":{},"keyword":{}}],["compris",{"_index":386,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["compromis",{"_index":3124,"title":{},"name":{},"text":{"47":{},"62":{}},"component":{},"keyword":{}}],["comput",{"_index":1146,"title":{},"name":{},"text":{"8":{},"13":{},"20":{},"37":{},"70":{},"76":{},"94":{},"126":{},"130":{},"146":{}},"component":{},"keyword":{}}],["con",{"_index":2939,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["concaten",{"_index":1851,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["concept",{"_index":515,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"22":{},"23":{},"28":{},"74":{},"75":{},"82":{},"83":{},"124":{},"128":{},"129":{},"136":{},"137":{},"160":{}},"component":{},"keyword":{}}],["conceptu",{"_index":2884,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["concern",{"_index":597,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"8":{},"10":{},"12":{},"15":{},"22":{},"61":{},"68":{},"70":{},"75":{},"78":{},"80":{},"82":{},"117":{},"122":{},"126":{},"129":{},"132":{},"134":{},"136":{},"165":{}},"component":{},"keyword":{}}],["concis",{"_index":1121,"title":{},"name":{},"text":{"7":{},"11":{},"13":{},"15":{},"32":{},"69":{},"90":{},"123":{},"124":{},"142":{}},"component":{},"keyword":{}}
1],["conclus",{"_index":1363,"title":{"10-7":{},"20-9":{},"73-7":{}},"name":{},"text":{},"component":{},"keyword":{}}],["concret",{"_index":624,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["concurr",{"_index":1092,"title":{},"name":{},"text":{"7":{},"8":{},"18":{},"23":{},"38":{},"52":{},"69":{},"70":{},"79":{},"83":{},"108":{},"123":{},"126":{},"133":{},"137":{}},"component":{},"keyword":{}}],["cond",{"_index":1764,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"74":{},"75":{},"78":{},"83":{},"128":{},"129":{},"132":{},"137":{}},"component":{},"keyword":{}}],["condit",{"_index":855,"title":{"12-14":{},"75-12":{},"129-12":{}},"name":{},"text":{"6":{},"11":{},"12":{},"22":{},"23":{},"32":{},"54":{},"68":{},"74":{},"75":{},"82":{},"88":{},"90":{},"122":{},"128":{},"129":{},"136":{},"141":{},"142":{}},"component":{},"keyword":{}}],["condition",{"_index":1797,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["condition[1",{"_index":1904,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["condition[1]and",{"_index":3543,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["conduct",{"_index":5,"title":{"1":{}},"name":{"1":{}},"text":{"1":{}},"component":{},"keyword":{}}],["confidenti",{"_index":106,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["config",{"_index":2834,"title":{},"name":{"26":{},"86":{}},"text":{"26":{},"29":{},"81":{},"83":{},"86":{},"87":{},"88":{},"125":{},"135":{},"137":{},"140":{},"141":{}},"component":{},"keyword":{}}],["config.edn",{"_index":1405,"title":{},"name":{},"text":{"10":{},"26":{},"73":{},"86":{}},"component":{},"keyword":{}}],["configur",{"_index":407,"title":{"26":{},"86":{},"164":{},"26-1":{},"26-2":{},"26-3":{},"26-4":{},"43-3":{},"81-2":{},"86-1":{},"86-2":{},"86-3":{},"135-2":{},"164-2":{}},"name":{},"text":{"3":{},"7":{},"8":{},"10":{},"16":{},"17":{},"18":{},"20":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"35":{},"38":{},"41":{},"43":{},"52":{},"58":{},"62":{},"64":{},"69":{},"70":{},"72":{},"73":{},"78":{},"79":{},"81":{},"86":{},"87":{},"88":{},"95":{},"98":{},"100":{},"101":{},"119":{},"123":{},"126":{},"127":{},"132":{},"133":{},"135":{},"140":{},"141":{},"143":{},"147":{},"151":{}},"component":{},"keyword":{}}],["configuringssl/tl",{"_index":3855,"title":{},"name":{},"text":{"95":{},"147":{}},"component":{},"keyword":{}}],["confin",{"_index":3228,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["confirm",{"_index":2614,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["conflict",{"_index":528,"title":{},"name":{},"text":{"3":{},"12":{},"52":{},"53":{},"81":{},"135":{}},"component":{},"keyword":{}}],["conform",{"_index":421,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["confus",{"_index":1824,"title":{},"name":{},"text":{"12":{},"51":{},"75":{},"129":{}},"component":{},"keyword":{}}],["congratul",{"_index":2784,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["conj",{"_index":1297,"title":{},"name":{},"text":{"9":{},"58":{},"71":{},"79":{},"88":{},"114":{},"125":{},"133":{},"141":{},"162":{}},"component":{},"keyword":{}}],["conn",{"_index":752,"title":{},"name":{},"text":{"5":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"47":{},"71":{},"125":{}},"component":{},"keyword":{}}],["conn/default",{"_index":761,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"47":{}},"component":{},"keyword":{}}],["conn/option",{"_index":2119,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["conn/start",{"_index":766,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["conn/stop",{"_index":1782,"title":{},"name":{},"text":{"11":{},"12":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["conn/with",{"_index":763,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"47":{}},"component":{},"keyword":{}}],["connect",{"_index":810,"title":{"18-11":{},"21-11":{},"64-5":{},"72-14":{},"127-14":{}},"name":{},"text":{"5":{},"9":{},"13":{},"16":{},"18":{},"20":{},"21":{},"23":{},"24":{},"27":{},"29":{},"38":{},"52":{},"54":{},"61":{},"62":{},"64":{},"66":{},"71":{},"72":{},"76":{},"78":{},"79":{},"80":{},"83":{},"84":{},"87":{},"95":{},"109":{},"110":{},"117":{},"119":{},"121":{},"125":{},"127":{},"130":{},"132":{},"133":{},"134":{},"137":{},"138":{},"140":{},"147":{},"158":{},"159":{},"164":{},"165":{}},"component":{},"keyword":{}}],["connectionfactori",{"_index":2967,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["connector",{"_index":446,"title":{"27":{},"28":{},"24-5":{},"27-1":{},"27-4":{},"84-4":{},"138-4":{}},"name":{"27":{},"28":{}},"text":{"3":{},"5":{},"7":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"33":{},"35":{},"37":{},"38":{},"39":{},"40":{},"42":{},"45":{},"46":{},"47":{},"49":{},"52":{},"53":{},"56":{},"64":{},"84":{},"138":{},"164":{}},"component":{},"keyword":{}}],["connector.clj",{"_index":1410,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["connector_test.clj",{"_index":1415,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["connectorbridg",{"_index":2435,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["connectorservlet",{"_index":2452,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["connector’",{"_index":2858,"title":{},"name":{},"text":{"28":{}},"component":{},"keyword":{}}],["conquer",{"_index":3209,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["consent",{"_index":825,"title":{"6-7":{},"68-7":{},"122-7":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["consequ",{"_index":4019,"title":{},"name":{},"text":{"160":{}},"component":{},"keyword":{}}],["consequenti",{"_index":886,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["consid",{"_index":78,"title":{"9-17":{},"71-17":{},"125-17":{}},"name":{},"text":{"1":{},"6":{},"8":{},"11":{},"12":{},"14":{},"15":{},"21":{},"29":{},"40":{},"53":{},"57":{},"68":{},"70":{},"74":{},"77":{},"87":{},"97":{},"113":{},"122":{},"126":{},"128":{},"131":{},"140":{},"156":{},"160":{},"161":{}},"component":{},"keyword":{}}],["consider",{"_index":658,"title":{},"name":{},"text":{"4":{},"100":{}},"component":{},"keyword":{}}],["consist",{"_index":1352,"title":{},"name":{},"text":{"9":{},"12":{},"13":{},"18":{},"19":{},"23":{},"46":{},"53":{},"54":{},"58":{},"59":{},"71":{},"72":{},"79":{},"114":{},"115":{},"127":{},"133":{},"162":{},"163":{}},"component":{},"keyword":{}}],["consol",{"_index":683,"title":{},"name":{},"text":{"4":{},"10":{},"12":{},"13":{},"14":{},"16":{},"41":{},"67":{},"73":{},"75":{},"77":{},"98":{},"129":{}},"component":{},"keyword":{}}],["console.log(",{"_index":3699,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}
1],["console.log(\"connect",{"_index":2639,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["console.log(\"count",{"_index":2365,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["console.log(\"receiv",{"_index":2637,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["const",{"_index":2362,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["constant",{"_index":1950,"title":{},"name":{},"text":{"13":{},"42":{},"99":{},"150":{},"157":{}},"component":{},"keyword":{}}],["constantli",{"_index":2225,"title":{},"name":{},"text":{"16":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["constrain",{"_index":1360,"title":{},"name":{},"text":{"9":{}},"component":{},"keyword":{}}],["constraint",{"_index":1199,"title":{"9-16":{},"9-17":{},"58-12":{},"71-16":{},"71-17":{},"114-11":{},"125-16":{},"125-17":{},"162-11":{}},"name":{},"text":{"9":{},"40":{},"42":{},"45":{},"51":{},"52":{},"53":{},"58":{},"59":{},"63":{},"71":{},"72":{},"76":{},"77":{},"83":{},"97":{},"99":{},"103":{},"108":{},"114":{},"115":{},"118":{},"125":{},"127":{},"130":{},"131":{},"137":{},"148":{},"150":{},"153":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["constraints[1",{"_index":3889,"title":{},"name":{},"text":{"108":{}},"component":{},"keyword":{}}],["construct",{"_index":41,"title":{"61-6":{},"80-6":{},"117-6":{},"134-6":{},"165-6":{}},"name":{},"text":{"1":{},"3":{},"7":{},"9":{},"10":{},"11":{},"13":{},"22":{},"23":{},"29":{},"35":{},"37":{},"44":{},"46":{},"52":{},"69":{},"73":{},"74":{},"76":{},"82":{},"83":{},"87":{},"88":{},"92":{},"94":{},"102":{},"104":{},"108":{},"119":{},"123":{},"128":{},"130":{},"136":{},"137":{},"140":{},"141":{},"144":{},"146":{},"152":{},"154":{},"157":{}},"component":{},"keyword":{}}],["constructor",{"_index":2183,"title":{},"name":{},"text":{"16":{},"20":{},"27":{},"52":{},"78":{},"92":{},"108":{},"110":{},"132":{},"144":{},"157":{},"159":{}},"component":{},"keyword":{}}],["consult",{"_index":2369,"title":{},"name":{},"text":{"18":{},"21":{},"79":{},"81":{},"133":{},"135":{}},"component":{},"keyword":{}}],["consum",{"_index":975,"title":{},"name":{},"text":{"6":{},"8":{},"18":{},"37":{},"52":{},"57":{},"68":{},"70":{},"79":{},"94":{},"108":{},"113":{},"122":{},"126":{},"133":{},"146":{},"161":{}},"component":{},"keyword":{}}],["contact",{"_index":94,"title":{"6-13":{},"68-13":{},"122-13":{}},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["contain",{"_index":392,"title":{"38-1":{},"95-1":{},"143-1":{},"147-1":{},"164-1":{}},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"16":{},"17":{},"20":{},"22":{},"23":{},"24":{},"27":{},"32":{},"37":{},"38":{},"39":{},"41":{},"43":{},"48":{},"49":{},"51":{},"52":{},"53":{},"57":{},"59":{},"61":{},"63":{},"64":{},"66":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"76":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"90":{},"94":{},"95":{},"96":{},"98":{},"101":{},"106":{},"108":{},"110":{},"113":{},"115":{},"117":{},"118":{},"119":{},"121":{},"122":{},"123":{},"125":{},"126":{},"128":{},"130":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"142":{},"143":{},"146":{},"147":{},"154":{},"159":{},"160":{},"161":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["container’",{"_index":3149,"title":{},"name":{},"text":{"49":{},"52":{},"81":{},"135":{}},"component":{},"keyword":{}}],["content",{"_index":1015,"title":{"11":{},"74":{},"128":{},"11-11":{},"30-6":{},"74-11":{},"88-10":{},"128-11":{},"141-9":{}},"name":{"11":{},"74":{},"128":{}},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"30":{},"35":{},"44":{},"46":{},"48":{},"49":{},"50":{},"55":{},"57":{},"61":{},"64":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"92":{},"94":{},"102":{},"104":{},"105":{},"106":{},"107":{},"110":{},"113":{},"117":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"144":{},"152":{},"154":{},"155":{},"156":{},"159":{},"161":{},"165":{}},"component":{},"keyword":{}}],["context",{"_index":1086,"title":{"29":{},"87":{},"140":{},"37-1":{},"41-10":{},"94-1":{},"98-9":{},"146-1":{}},"name":{"29":{},"87":{},"140":{}},"text":{"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"29":{},"30":{},"32":{},"37":{},"38":{},"41":{},"46":{},"47":{},"48":{},"52":{},"54":{},"55":{},"61":{},"64":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"95":{},"98":{},"104":{},"106":{},"108":{},"109":{},"110":{},"112":{},"117":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"143":{},"144":{},"146":{},"147":{},"154":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}
1],["contexthandlerclass=org.eclipse.jetty.ee10.webapp.webappcontext",{"_index":2561,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["continu",{"_index":556,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"12":{},"13":{},"16":{},"18":{},"20":{},"22":{},"32":{},"37":{},"40":{},"48":{},"54":{},"68":{},"71":{},"75":{},"76":{},"79":{},"82":{},"90":{},"94":{},"97":{},"106":{},"109":{},"122":{},"125":{},"129":{},"130":{},"133":{},"136":{},"142":{},"146":{},"158":{}},"component":{},"keyword":{}}],["contract",{"_index":2008,"title":{},"name":{},"text":{"13":{},"37":{},"51":{},"94":{},"146":{}},"component":{},"keyword":{}}],["contrast",{"_index":1159,"title":{},"name":{},"text":{"8":{},"28":{},"70":{},"81":{},"126":{},"135":{}},"component":{},"keyword":{}}],["contribut",{"_index":123,"title":{"2":{},"65":{},"120":{},"2-5":{},"65-4":{},"120-4":{},"124-10":{}},"name":{"2":{},"65":{},"120":{}},"text":{"2":{},"3":{},"10":{},"13":{},"50":{},"65":{},"76":{},"107":{},"120":{},"130":{}},"component":{},"keyword":{}}],["contributing.md",{"_index":3308,"title":{},"name":{},"text":{"65":{},"120":{}},"component":{},"keyword":{}}],["contributor",{"_index":25,"title":{},"name":{},"text":{"1":{},"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["contributor’",{"_index":131,"title":{"2-12":{},"65-10":{},"120-10":{}},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["control",{"_index":924,"title":{},"name":{},"text":{"6":{},"9":{},"10":{},"13":{},"20":{},"22":{},"32":{},"38":{},"40":{},"45":{},"68":{},"71":{},"72":{},"76":{},"82":{},"90":{},"97":{},"103":{},"110":{},"122":{},"125":{},"127":{},"130":{},"136":{},"142":{},"148":{},"153":{}},"component":{},"keyword":{}}],["contructor",{"_index":2925,"title":{},"name":{},"text":{"35":{},"51":{}},"component":{},"keyword":{}}],["conveni",{"_index":1271,"title":{},"name":{},"text":{"9":{},"32":{},"71":{},"72":{},"75":{},"76":{},"78":{},"84":{},"90":{},"110":{},"125":{},"127":{},"129":{},"130":{},"132":{},"138":{},"142":{},"159":{}},"component":{},"keyword":{}}],["convent",{"_index":1768,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"54":{},"75":{},"76":{},"77":{},"81":{},"109":{},"129":{},"130":{},"131":{},"135":{},"158":{}},"component":{},"keyword":{}}],["convers",{"_index":212,"title":{},"name":{},"text":{"2":{},"19":{},"65":{},"120":{}},"component":{},"keyword":{}}],["convert",{"_index":496,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"19":{},"23":{},"24":{},"26":{},"35":{},"37":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"51":{},"52":{},"54":{},"55":{},"57":{},"58":{},"59":{},"62":{},"63":{},"67":{},"69":{},"71":{},"76":{},"77":{},"78":{},"83":{},"86":{},"92":{},"94":{},"98":{},"100":{},"102":{},"104":{},"106":{},"108":{},"110":{},"112":{},"115":{},"118":{},"123":{},"124":{},"125":{},"130":{},"131":{},"132":{},"137":{},"144":{},"146":{},"151":{},"152":{},"154":{},"156":{},"157":{}},"component":{},"keyword":{}}],["convey",{"_index":1096,"title":{},"name":{},"text":{"7":{},"8":{},"22":{},"24":{},"37":{},"49":{},"64":{},"69":{},"70":{},"82":{},"84":{},"94":{},"123":{},"126":{},"136":{},"138":{},"146":{}},"component":{},"keyword":{}}],["cooki",{"_index":813,"title":{"6-3":{},"68-3":{},"122-3":{}},"name":{},"text":{"6":{},"11":{},"50":{},"68":{},"74":{},"107":{},"109":{},"110":{},"122":{},"128":{},"158":{},"159":{}},"component":{},"keyword":{}}],["cooper",{"_index":3846,"title":{},"name":{},"text":{"92":{},"144":{}},"component":{},"keyword":{}}],["coordin",{"_index":1898,"title":{"39-1":{},"39-2":{},"96-1":{},"96-2":{}},"name":{},"text":{"12":{},"19":{},"61":{},"75":{},"80":{},"117":{},"124":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["copi",{"_index":963,"title":{},"name":{},"text":{"6":{},"7":{},"10":{},"11":{},"13":{},"20":{},"41":{},"49":{},"64":{},"65":{},"68":{},"69":{},"73":{},"76":{},"81":{},"98":{},"105":{},"120":{},"122":{},"123":{},"130":{},"135":{},"155":{}},"component":{},"keyword":{}}],["copyright",{"_index":341,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["cor",{"_index":3661,"title":{"110-3":{},"159-1":{}},"name":{},"text":{"79":{},"110":{},"121":{},"133":{},"159":{}},"component":{},"keyword":{}}
1],["cordial",{"_index":1803,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["core",{"_index":794,"title":{"22-4":{},"49-2":{},"82-4":{},"105-1":{},"136-4":{}},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"16":{},"20":{},"22":{},"37":{},"41":{},"52":{},"61":{},"66":{},"74":{},"75":{},"76":{},"78":{},"80":{},"82":{},"84":{},"94":{},"96":{},"98":{},"100":{},"108":{},"117":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"138":{},"146":{},"151":{},"156":{},"157":{},"165":{}},"component":{},"keyword":{}}],["core.async",{"_index":1090,"title":{"57-3":{},"113-3":{},"161-3":{}},"name":{},"text":{"7":{},"8":{},"18":{},"22":{},"24":{},"25":{},"35":{},"37":{},"41":{},"49":{},"54":{},"57":{},"64":{},"69":{},"70":{},"79":{},"82":{},"84":{},"92":{},"94":{},"96":{},"98":{},"105":{},"109":{},"113":{},"123":{},"126":{},"133":{},"136":{},"138":{},"144":{},"146":{},"155":{},"158":{},"161":{}},"component":{},"keyword":{}}],["core.async'",{"_index":2668,"title":{},"name":{},"text":{"22":{},"82":{}},"component":{},"keyword":{}}],["core.async’",{"_index":3963,"title":{},"name":{},"text":{"136":{}},"component":{},"keyword":{}}],["core.match",{"_index":2896,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["corpor",{"_index":923,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["correct",{"_index":582,"title":{},"name":{},"text":{"3":{},"6":{},"12":{},"14":{},"16":{},"19":{},"22":{},"43":{},"44":{},"48":{},"61":{},"68":{},"72":{},"77":{},"78":{},"80":{},"82":{},"102":{},"106":{},"108":{},"117":{},"122":{},"127":{},"132":{},"134":{},"136":{},"152":{},"156":{},"157":{},"165":{}},"component":{},"keyword":{}}],["correctli",{"_index":1214,"title":{},"name":{},"text":{"9":{},"16":{},"19":{},"61":{},"71":{},"80":{},"117":{},"125":{},"134":{},"165":{}},"component":{},"keyword":{}}],["correl",{"_index":2863,"title":{},"name":{},"text":{"29":{},"41":{},"87":{},"98":{},"140":{}},"component":{},"keyword":{}}],["correspond",{"_index":1337,"title":{},"name":{},"text":{"9":{},"11":{},"15":{},"22":{},"24":{},"29":{},"32":{},"44":{},"58":{},"71":{},"74":{},"82":{},"84":{},"87":{},"90":{},"102":{},"108":{},"125":{},"128":{},"138":{},"140":{},"152":{},"157":{}},"component":{},"keyword":{}}],["correspondng",{"_index":2103,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["corretto",{"_index":1934,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["corretto/bin/java",{"_index":2527,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["cors/allow",{"_index":4011,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["cost",{"_index":510,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["count",{"_index":1893,"title":{},"name":{},"text":{"12":{},"15":{},"16":{},"43":{},"72":{},"75":{},"101":{},"127":{},"129":{}},"component":{},"keyword":{}}],["countdown",{"_index":3222,"title":{},"name":{},"text":{"54":{}},"component":{},"keyword":{}}],["counter",{"_index":2336,"title":{"100-3":{},"151-3":{}},"name":{},"text":{"18":{},"43":{},"79":{},"100":{},"101":{},"133":{},"151":{}},"component":{},"keyword":{}}],["counter.innerhtml",{"_index":3702,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["counterel",{"_index":3700,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["countri",{"_index":938,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["country(i",{"_index":1037,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["coupl",{"_index":1213,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"23":{},"71":{},"74":{},"83":{},"108":{},"125":{},"128":{},"137":{},"160":{}},"component":{},"keyword":{}}],["cours",{"_index":222,"title":{},"name":{},"text":{"2":{},"6":{},"11":{},"23":{},"62":{},"65":{},"68":{},"72":{},"83":{},"120":{},"122":{},"127":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["coven",{"_index":110,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["covenant.org/version/2/1/code_of_conduct",{"_index":115,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["cover",{"_index":884,"title":{},"name":{},"text":{"6":{},"8":{},"9":{},"12":{},"13":{},"18":{},"20":{},"22":{},"23":{},"62":{},"64":{},"68":{},"70":{},"71":{},"72":{},"73":{},"76":{},"79":{},"82":{},"83":{},"122":{},"125":{},"126":{},"127":{},"130":{},"133":{},"136":{},"137":{}},"component":{},"keyword":{}}],["coverag",{"_index":2367,"title":{},"name":{},"text":{"18":{},"21":{},"79":{},"133":{}},"component":{},"keyword":{}}],["cp",{"_index":2557,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["cpu",{"_index":1182,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["craft",{"_index":1324,"title":{},"name":{},"text":{"9":{},"71":{}},"component":{},"keyword":{}}],["crash",{"_index":3955,"title":{},"name":{},"text":{"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["creat",{"_index":211,"title":{"10-2":{},"16-17":{},"20-6":{},"23-11":{},"27-4":{},"73-2":{},"83-11":{},"137-11":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"37":{},"38":{},"43":{},"44":{},"46":{},"47":{},"50":{},"52":{},"55":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"92":{},"94":{},"95":{},"100":{},"101":{},"102":{},"107":{},"108":{},"109":{},"110":{},"112":{},"115":{},"117":{},"119":{},"120":{},"121":{},"123":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"143":{},"144":{},"146":{},"147":{},"151":{},"152":{},"157":{},"158":{},"159":{},"160":{},"163":{},"165":{}},"component":{},"keyword":{}}],["creation",{"_index":2184,"title":{},"name":{},"text":{"16":{},"23":{},"61":{},"78":{},"80":{},"83":{},"117":{},"132":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["cred",{"_index":3904,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["credenti",{"_index":3905,"title":{},"name":{},"text":{"110":{},"159":{},"160":{}},"component":{},"keyword":{}}],["crepl",{"_index":3613,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["crepl/start",{"_index":3614,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["crepl/stop",{"_index":3623,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["criteria",{"_index":1020,"title":{},"name":{},"text":{"6":{},"68":{},"92":{},"122":{},"144":{}},"component":{},"keyword":{}}],["critic",{"_index":42,"title":{},"name":{},"text":{"1":{},"41":{},"62":{},"98":{}},"component":{},"keyword":{}}],["crlfile",{"_index":4036,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["cross",{"_index":783,"title":{"110-3":{},"110-4":{},"159-1":{},"159-2":{}},"name":{},"text":{"5":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"22":{},"23":{},"27":{},"43":{},"66":{},"70":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"101":{},"110":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"159":{}},"component":{},"keyword":{}}],["csrf",{"_index":3841,"title":{"110-4":{},"159-2":{}},"name":{},"text":{"88":{},"110":{},"121":{},"141":{},"159":{}},"component":{},"keyword":{}}],["csrf/anti",{"_index":4012,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["ctrl",{"_index":2025,"title":{},"name":{},"text":{"13":{},"20":{},"21":{}},"component":{},"keyword":{}}],["ctrl+c",{"_index":3693,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["ctx",{"_index":3266,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"142":{},"165":{}},"component":{},"keyword":{}}],["cumbersom",{"_index":1959,"title":{},"name":{},"text":{"13":{},"22":{},"76":{},"82":{},"130":{},"136":{}},"component":{},"keyword":{}}],["curerntli",{"_index":2145,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["curl",{"_index":1485,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"16":{},"18":{},"20":{},"21":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"128":{},"129":{},"130":{},"132":{},"133":{}},"component":{},"keyword":{}}],["curl/7.47.0",{"_index":3539,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["curl/8.1.2",{"_index":3450,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["curl/8.7.1",{"_index":1652,"title":{},"name":{},"text":{"11":{},"12":{},"20":{}},"component":{},"keyword":{}}],["curli",{"_index":1955,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["current",{"_index":774,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"23":{},"26":{},"27":{},"47":{},"52":{},"54":{},"59":{},"64":{},"74":{},"75":{},"77":{},"78":{},"83":{},"86":{},"109":{},"110":{},"115":{},"124":{},"128":{},"129":{},"131":{},"132":{},"137":{},"158":{},"159":{},"163":{}},"component":{},"keyword":{}}],["cursiv",{"_index":2130,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["custom",{"_index":672,"title":{"108-6":{},"157-6":{}},"name":{},"text":{"4":{},"5":{},"11":{},"16":{},"26":{},"38":{},"40":{},"44":{},"58":{},"59":{},"66":{},"74":{},"84":{},"86":{},"95":{},"97":{},"102":{},"110":{},"114":{},"115":{},"124":{},"128":{},"138":{},"147":{},"148":{},"152":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}
1],["cut",{"_index":2645,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["cvf",{"_index":3743,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["cycl",{"_index":2052,"title":{},"name":{},"text":{"14":{},"16":{},"22":{},"51":{},"77":{},"78":{},"82":{},"131":{},"132":{},"136":{}},"component":{},"keyword":{}}],["cygwin",{"_index":3737,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["d",{"_index":2387,"title":{},"name":{},"text":{"19":{},"23":{},"61":{},"80":{},"83":{},"117":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["d0cf2b4",{"_index":274,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["d\\n",{"_index":2186,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["daemon",{"_index":2954,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["damag",{"_index":889,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["danc",{"_index":1853,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["dang",{"_index":1865,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["data",{"_index":829,"title":{"6-10":{},"68-10":{},"122-10":{}},"name":{},"text":{"6":{},"7":{},"9":{},"10":{},"11":{},"12":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"27":{},"29":{},"30":{},"32":{},"35":{},"41":{},"44":{},"46":{},"47":{},"49":{},"50":{},"51":{},"52":{},"54":{},"57":{},"64":{},"68":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"90":{},"92":{},"98":{},"100":{},"102":{},"105":{},"107":{},"108":{},"109":{},"113":{},"122":{},"123":{},"125":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"142":{},"144":{},"151":{},"152":{},"154":{},"155":{},"157":{},"158":{},"161":{}},"component":{},"keyword":{}}],["databas",{"_index":1142,"title":{},"name":{},"text":{"8":{},"22":{},"23":{},"29":{},"70":{},"82":{},"83":{},"100":{},"126":{},"136":{},"137":{},"151":{}},"component":{},"keyword":{}}],["datahik",{"_index":2727,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["datalevin",{"_index":2728,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["date",{"_index":930,"title":{},"name":{},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"52":{},"65":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"81":{},"108":{},"120":{},"122":{},"124":{},"128":{},"129":{},"130":{},"131":{},"132":{},"135":{}},"component":{},"keyword":{}}],["datom",{"_index":2726,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["day",{"_index":2264,"title":{},"name":{},"text":{"17":{},"50":{},"107":{}},"component":{},"keyword":{}}],["db",{"_index":1245,"title":{},"name":{},"text":{"9":{},"22":{},"23":{},"59":{},"71":{},"82":{},"83":{},"115":{},"125":{},"136":{},"137":{},"163":{}},"component":{},"keyword":{}}],["db/get",{"_index":2667,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["dbval",{"_index":2767,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["de",{"_index":2940,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["dead",{"_index":638,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["deal",{"_index":592,"title":{},"name":{},"text":{"3":{},"9":{},"12":{},"16":{},"23":{},"24":{},"41":{},"71":{},"74":{},"75":{},"83":{},"98":{},"125":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["debug",{"_index":1439,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"15":{},"29":{},"41":{},"73":{},"74":{},"75":{},"76":{},"87":{},"98":{},"128":{},"129":{},"130":{},"140":{}},"component":{},"keyword":{}}],["dec",{"_index":358,"title":{"3-6":{}},"name":{},"text":{},"component":{},"keyword":{}}],["decid",{"_index":968,"title":{},"name":{},"text":{"6":{},"9":{},"10":{},"13":{},"20":{},"41":{},"54":{},"68":{},"71":{},"73":{},"74":{},"76":{},"122":{},"125":{},"128":{},"130":{}},"component":{},"keyword":{}}],["decis",{"_index":365,"title":{"3":{}},"name":{"3":{}},"text":{"3":{},"11":{},"12":{},"23":{},"24":{},"29":{},"40":{},"42":{},"45":{},"53":{},"74":{},"75":{},"83":{},"84":{},"87":{},"97":{},"99":{},"103":{},"128":{},"129":{},"137":{},"138":{},"140":{},"148":{},"150":{},"153":{}},"component":{},"keyword":{}}],["declar",{"_index":1680,"title":{},"name":{},"text":{"11":{},"13":{},"15":{},"23":{},"72":{},"74":{},"76":{},"83":{},"119":{},"127":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["declin",{"_index":966,"title":{},"name":{},"text":{"6":{},"32":{},"68":{},"90":{},"122":{},"142":{}},"component":{},"keyword":{}}],["decod",{"_index":1266,"title":{"88-17":{}},"name":{},"text":{"9":{},"10":{},"18":{},"23":{},"37":{},"44":{},"71":{},"73":{},"75":{},"79":{},"83":{},"88":{},"94":{},"102":{},"125":{},"129":{},"133":{},"137":{},"152":{}},"component":{},"keyword":{}}],["decompos",{"_index":3467,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["decreas",{"_index":2881,"title":{},"name":{},"text":{"31":{}},"component":{},"keyword":{}}],["dedic",{"_index":3546,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["deduc",{"_index":3256,"title":{},"name":{},"text":{"58":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["deem",{"_index":100,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["deep",{"_index":206,"title":{},"name":{},"text":{"2":{},"23":{},"64":{},"65":{},"83":{},"120":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["deeper",{"_index":1222,"title":{},"name":{},"text":{"9":{},"12":{},"71":{},"75":{},"125":{},"129":{}},"component":{},"keyword":{}}],["deepli",{"_index":1760,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"24":{},"52":{},"74":{},"84":{},"108":{},"128":{},"138":{}},"component":{},"keyword":{}}],["def",{"_index":1147,"title":{},"name":{},"text":{"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"21":{},"22":{},"23":{},"29":{},"32":{},"37":{},"54":{},"58":{},"59":{},"61":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"87":{},"90":{},"109":{},"114":{},"115":{},"117":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"140":{},"142":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["default",{"_index":521,"title":{"30":{},"88":{},"141":{},"5-3":{},"9-19":{}
1,"26-8":{},"27-2":{},"38-2":{},"41-9":{},"66-3":{},"71-19":{},"88-2":{},"88-3":{},"95-2":{},"98-8":{},"100-7":{},"110-2":{},"121-3":{},"125-19":{},"141-2":{},"141-3":{},"147-2":{},"151-7":{}},"name":{"30":{},"88":{},"141":{}},"text":{"3":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"26":{},"27":{},"30":{},"32":{},"37":{},"38":{},"41":{},"43":{},"44":{},"46":{},"47":{},"49":{},"50":{},"51":{},"52":{},"53":{},"55":{},"58":{},"61":{},"62":{},"70":{},"71":{},"72":{},"73":{},"74":{},"77":{},"79":{},"80":{},"82":{},"83":{},"86":{},"88":{},"90":{},"94":{},"95":{},"98":{},"99":{},"100":{},"101":{},"102":{},"104":{},"105":{},"107":{},"108":{},"110":{},"112":{},"114":{},"117":{},"125":{},"126":{},"127":{},"128":{},"131":{},"133":{},"134":{},"136":{},"137":{},"141":{},"142":{},"143":{},"147":{},"150":{},"151":{},"152":{},"155":{},"156":{},"157":{},"159":{},"160":{},"162":{},"164":{},"165":{}},"component":{},"keyword":{}}],["defect",{"_index":2781,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["defer",{"_index":652,"title":{"77-2":{},"131-2":{}},"name":{},"text":{"4":{},"8":{},"23":{},"67":{},"70":{},"77":{},"83":{},"126":{},"137":{}},"component":{},"keyword":{}}],["defin",{"_index":194,"title":{"9":{},"71":{},"125":{},"9-8":{},"16-11":{},"71-8":{},"124-9":{},"125-8":{}},"name":{"9":{},"71":{},"125":{}},"text":{"2":{},"3":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"21":{},"22":{},"23":{},"26":{},"32":{},"37":{},"40":{},"43":{},"46":{},"47":{},"51":{},"52":{},"53":{},"54":{},"55":{},"58":{},"59":{},"62":{},"63":{},"64":{},"65":{},"68":{},"71":{},"72":{},"74":{},"76":{},"78":{},"79":{},"82":{},"83":{},"90":{},"92":{},"94":{},"97":{},"100":{},"101":{},"108":{},"109":{},"110":{},"112":{},"114":{},"115":{},"118":{},"119":{},"120":{},"122":{},"125":{},"127":{},"128":{},"130":{},"132":{},"133":{},"136":{},"137":{},"142":{},"144":{},"146":{},"151":{},"157":{},"158":{},"159":{},"163":{}},"component":{},"keyword":{}}],["definit",{"_index":1357,"title":{"22-4":{},"82-4":{},"136-4":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"38":{},"44":{},"51":{},"52":{},"58":{},"71":{},"72":{},"74":{},"75":{},"77":{},"78":{},"83":{},"92":{},"102":{},"114":{},"125":{},"127":{},"128":{},"129":{},"131":{},"132":{},"137":{},"144":{},"152":{},"162":{},"163":{}},"component":{},"keyword":{}}],["definterceptor",{"_index":2101,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["defmacro",{"_index":2226,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["defn",{"_index":755,"title":{},"name":{},"text":{"5":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"24":{},"37":{},"47":{},"54":{},"70":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"88":{},"109":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{},"141":{},"158":{}},"component":{},"keyword":{}}],["defonc",{"_index":1779,"title":{},"name":{},"text":{"11":{},"12":{},"14":{},"16":{},"18":{},"21":{},"23":{},"74":{},"75":{},"77":{},"83":{},"128":{},"129":{},"131":{},"137":{}},"component":{},"keyword":{}}],["defrecord",{"_index":2093,"title":{},"name":{},"text":{"15":{},"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["defrout",{"_index":4010,"title":{},"name":{},"text":{"158":{}},"component":{},"keyword":{}}],["deftest",{"_index":2218,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["degre",{"_index":488,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["delay",{"_index":3570,"title":{"77-3":{},"131-3":{}},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["deleg",{"_index":2801,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["delet",{"_index":823,"title":{"6-7":{},"68-7":{},"122-7":{}},"name":{},"text":{"6":{},"9":{},"19":{},"23":{},"44":{},"58":{},"61":{},"62":{},"68":{},"71":{},"80":{},"83":{},"102":{},"104":{},"110":{},"114":{},"117":{},"122":{},"125":{},"134":{},"137":{},"152":{},"154":{},"159":{},"162":{},"165":{}},"component":{},"keyword":{}}],["delimit",{"_index":1846,"title":{},"name":{},"text":{"12":{},"52":{},"75":{},"108":{},"129":{}},"component":{},"keyword":{}}],["deliv",{"_index":1166,"title":{},"name":{},"text":{"8":{},"9":{},"37":{},"49":{},"55":{},"70":{},"71":{},"94":{},"105":{},"112":{},"121":{},"125":{},"126":{},"146":{},"155":{}},"component":{},"keyword":{}}],["deliveri",{"_index":3081,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["delta",{"_index":3872,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["demand",{"_index":1104,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["demo",{"_index":2337,"title":{},"name":{},"text":{"18":{},"20":{},"21":{}},"component":{},"keyword":{}}],["demo/restart",{"_index":2356,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["demo/start",{"_index":2343,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["demonstr",{"_index":542,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"12":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"47":{},"61":{},"68":{},"71":{},"75":{},"78":{},"79":{},"80":{},"117":{},"122":{},"125":{},"129":{},"132":{},"133":{},"134":{},"165":{}},"component":{},"keyword":{}}],["deni",{"_index":1467,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["denot",{"_index":2006,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["deny\\r\\nx",{"_index":3441,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["dep",{"_index":790,"title":{"10-1":{},"73-1":{}},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"39":{},"66":{},"73":{},"74":{},"75":{},"76":{},"78":{},"83":{},"96":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["depart",{"_index":994,"title":{},"name":{},"text":{"6":{},"41":{},"52":{},"68":{},"98":{},"108":{},"122":{}},"component":{},"keyword":{}}],["department/:id/employe",{"_index":3183,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["depend",{"_index":144,"title":{"13-10":{},"16-6":{},"17-5":{},"20-3":{},"76-10":{},"130-10":{}},"name":{},"text":{"2":{},"3":{},"6":{},"7":{},"9":{},"10":{},"11":{},"13":{},"15":{},"16":{},"20":{},"32":{},"33":{},"39":{},"41":{},"43":{},"46":{},"47":{},"49":{},"68":{},"69":{},"71":{},"73":{},"74":{},"76":{},"78":{},"79":{},"81":{},"90":{},"96":{},"98":{},"100":{},"104":{},"105":{},"122":{},"123":{},"124":{},"125":{},"128":{},"130":{},"132":{},"133":{},"135":{},"142":{},"151":{},"154":{},"155":{},"156":{}},"component":{},"keyword":{}}],["dependency:copi",{"_index":3739,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["deploy",{"_index":399,"title":{"20":{},"81":{},"135":{},"164":{},"20-5":{},"81-5":{},"124-7":{},"135-5":{}},"name":{"20":{},"81":{},"135":{}},"text":{"3":{},"5":{},"10":{},"13":{},"14":{},"17":{},"20":{},"24":{},"26":{},"28":{},"31":{},"46":{},"66":{},"73":{},"81":{},"84":{},"86":{},"110":{},"121":{},"135":{},"138":{},"159":{}},"component":{},"keyword":{}}],["deploy.xml",{"_index":2551,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["deprec",{"_index":539,"title":{"4":{},"67":{},"100":{},"26-10":{}},"name":{"4":{},"67":{}},"text":{"3":{},"4":{},"26":{},"37":{},"64":{},"67":{},"86":{},"94":{},"96":{},"98":{},"101":{}},"component":{},"keyword":{}}],["deps.edn",{"_index":1084,"title":{"81-4":{},"135-4":{}},"name":{},"text":{"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"26":{},"39":{},"69":{},"73":{},"74":{},"75":{},"76":{},"78":{},"83":{},"89":{},"96":{},"123":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["deps/root",{"_index":2999,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["depth",{"_index":3060,"title":{},"name":{},"text":{"43":{},"101":{},"125":{}},"component":{},"keyword":{}}],["deref",{"_index":3579,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["derefer",{"_index":1816,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["deriv",{"_index":2879,"title":{},"name":{},"text":{"31":{},"37":{},"63":{},"69":{},"89":{},"118":{},"123":{},"157":{}},"component":{},"keyword":{}}],["derogatori",{"_index":60,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["describ",{"_index":843,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"13":{},"15":{},"16":{},"19":{},"20":{},"28":{},"29":{},"37":{},"46":{},"48":{},"49":{},"53":{},"56":{},"59":{},"68":{},"71":{},"72":{},"76":{},"87":{},"88":{},"92":{},"94":{},"100":{},"104":{},"105":{},"106":{},"111":{},"115":{},"119":{},"122":{},"125":{},"127":{},"130":{},"140":{},"141":{},"144":{},"146":{},"154":{},"155":{},"156":{},"163":{}},"component":{},"keyword":{}}],["descript",{"_index":2849,"title":{"29-1":{},"87-1":{},"88-1":{},"140-1":{},"141-1":{}},"name":{},"text":{"27":{},"29":{},"32":{},"38":{},"39":{},"43":{},"46":{},"47":{},"48":{},"59":{},"64":{},"72":{},"87":{},"90":{},"95":{},"96":{},"104":{},"106":{},"110":{},"115":{},"119":{},"127":{},"140":{},"142":{},"143":{},"147":{},"154":{},"156":{},"159":{},"164":{}},"component":{},"keyword":{}}],["description>pedest",{"_index":3716,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["descriptor",{"_index":2408,"title":{"20-5":{}},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["deserv",{"_index":2176,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["design",{"_index":367,"title":{},"name":{},"text":{"3":{},"6":{},"13":{},"15":{},"19":{},"24":{},"68":{},"78":{},"84":{},"121":{},"122":{},"132":{},"138":{}},"component":{},"keyword":{}}],["desir",{"_index":1889,"title":{},"name":{},"text":{"12":{},"19":{},"77":{},"94":{},"146":{}},"component":{},"keyword":{}}],["destroy",{"_index":3734,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["destroy</param",{"_index":3729,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["destruct",{"_index":961,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["destructur",{"_index":2663,"title":{},"name":{},"text":{"22":{},"23":{},"82":{},"136":{}},"component":{},"keyword":{}}],["detail",{"_index":234,"title":{"58-6":{},"59-5":{},"114-5":{},"115-5":{},"162-5":{},"163-5":{}},"name":{},"text":{"2":{},"6":{},"9":{},"10":{},"12":{},"13":{},"18":{},"20":{},"21":{},"22":{},"24":{},"28":{},"29":{},"32":{},"35":{},"37":{},"41":{},"48":{},"49":{},"50":{},"61":{},"65":{},"68":{},"71":{},"72":{},"73":{},"76":{},"80":{},"81":{},"82":{},"84":{},"87":{},"90":{},"92":{},"94":{},"98":{},"105":{},"106":{},"107":{},"110":{},"117":{},"119":{},"120":{},"122":{},"125":{},"127":{},"130":{},"134":{},"135":{},"136":{},"138":{},"140":{},"142":{},"144":{},"146":{},"155":{},"159":{},"164":{},"165":{}},"component":{},"keyword":{}}],["detect",{"_index":908,"title":{},"name":{},"text":{"6":{},"16":{},"27":{},"53":{},"54":{},"68":{},"109":{},"122":{},"158":{}},"component":{},"keyword":{}}],["determin",{"_index":2878,"title":{},"name":{},"text":{"30":{},"32":{},"52":{},"74":{},"90":{},"108":{},"110":{},"128":{},"159":{}},"component":{},"keyword":{}}],["detour",{"_index":2415,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["dev",{"_index":1394,"title":{},"name":{"31":{},"89":{}},"text":{"10":{},"14":{},"15":{},"16":{},"26":{},"27":{},"31":{},"72":{},"73":{},"74":{},"75":{},"78":{},"79":{},"81":{},"83":{},"89":{},"94":{},"127":{},"128":{},"129":{},"132":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["dev.clj",{"_index":1398,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["develop",{"_index":221,"title":{"31":{},"72":{},"89":{},"127":{},"12-8":{},"14-3":{},"16-15":{},"27-5":{},"75-8":{},"129-8":{}},"name":{"72":{},"127":{}},"text":{"2":{},"4":{},"5":{},"6":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"31":{},"32":{},"38":{},"41":{},"51":{},"52":{},"53":{},"65":{},"66":{},"67":{},"68":{},"69":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"84":{},"86":{},"89":{},"90":{},"96":{},"98":{},"120":{},"122":{},"123":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"138":{},"142":{}},"component":{},"keyword":{}}],["developer’",{"_index":3144,"title":{},"name":{},"text":{"48":{},"106":{}},"component":{},"keyword":{}}],["deviat",{"_index":3876,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["devil",{"_index":145,"title":{},"name":{},"text":{"2":{}},"component":{},"keyword":{}}],["dfb30dd",{"_index":2160,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["diagnos",{"_index":858,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["diagnost",{"_index":3006,"title":{"41-10":{},"98-9":{}},"name":{},"text":{},"component":{},"keyword":{}}],["diagram",{"_index":2143,"title":{},"name":{},"text":{"16":{},"22":{},"82":{},"84":{},"136":{},"138":{}},"component":{},"keyword":{}}],["dial",{"_index":3923,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["didn’t",{"_index":3567,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["differ",{"_index":38,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"28":{},"29":{},"31":{},"32":{},"33":{},"37":{},"41":{},"43":{},"44":{},"51":{},"52":{},"54":{},"55":{},"62":{},"65":{},"68":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"81":{},"82":{},"83":{},"84":{},"88":{},"89":{},"90":{},"94":{},"98":{},"100":{},"101":{},"102":{},"108":{},"112":{},"120":{},"121":{},"122":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"135":{},"136":{},"137":{},"138":{},"141":{},"142":{},"146":{},"151":{},"152":{},"156":{},"157":{},"160":{}},"component":{},"keyword":{}}],["differenti",{"_index":3168,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["difficult",{"_index":607,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["dig",{"_index":1221,"title":{},"name":{},"text":{"9":{},"12":{},"23":{},"71":{},"75":{},"83":{},"125":{},"129":{},"137":{}},"component":{},"keyword":{}}],["dimens",{"_index":248,"title":{},"name":{},"text":{"2":{},"24":{},"65":{},"84":{},"100":{},"120":{},"138":{},"151":{}},"component":{},"keyword":{}}],["dio.pedestal.dev",{"_index":2061,"title":{},"name":{},"text":{"14":{},"16":{},"26":{},"89":{}},"component":{},"keyword":{}}
1],["dir",{"_index":2463,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["direct",{"_index":878,"title":{},"name":{},"text":{"6":{},"9":{},"13":{},"14":{},"20":{},"32":{},"41":{},"49":{},"64":{},"68":{},"71":{},"84":{},"90":{},"98":{},"105":{},"122":{},"125":{},"138":{},"142":{},"143":{},"155":{}},"component":{},"keyword":{}}],["directli",{"_index":479,"title":{},"name":{},"text":{"3":{},"7":{},"10":{},"11":{},"12":{},"13":{},"15":{},"19":{},"22":{},"23":{},"29":{},"37":{},"39":{},"51":{},"52":{},"58":{},"61":{},"64":{},"73":{},"75":{},"76":{},"80":{},"82":{},"83":{},"84":{},"87":{},"94":{},"96":{},"108":{},"110":{},"117":{},"129":{},"130":{},"134":{},"136":{},"137":{},"138":{},"140":{},"146":{},"157":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["directori",{"_index":163,"title":{},"name":{},"text":{"2":{},"10":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"47":{},"65":{},"73":{},"76":{},"78":{},"81":{},"83":{},"96":{},"120":{},"130":{},"132":{},"135":{},"137":{}},"component":{},"keyword":{}}],["dirti",{"_index":2456,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["disabl",{"_index":1349,"title":{},"name":{},"text":{"9":{},"17":{},"37":{},"41":{},"47":{},"71":{},"98":{},"125":{}},"component":{},"keyword":{}}],["disambigu",{"_index":1301,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["disclos",{"_index":839,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["disclosur",{"_index":842,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["disconnect",{"_index":3242,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["discourag",{"_index":2895,"title":{},"name":{},"text":{"32":{}},"component":{},"keyword":{}}],["discrep",{"_index":3309,"title":{},"name":{},"text":{"65":{},"120":{}},"component":{},"keyword":{}}],["discret",{"_index":3155,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["discrimin",{"_index":984,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["discuss",{"_index":33,"title":{},"name":{},"text":{"1":{},"2":{},"9":{},"11":{},"12":{},"13":{},"19":{},"20":{},"65":{},"71":{},"74":{},"75":{},"76":{},"120":{},"124":{},"125":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["disk",{"_index":1141,"title":{},"name":{},"text":{"8":{},"10":{},"57":{},"70":{},"73":{},"113":{},"126":{},"161":{}},"component":{},"keyword":{}}],["dispatch",{"_index":1175,"title":{"32-2":{},"90-2":{},"142-2":{}},"name":{},"text":{"8":{},"22":{},"24":{},"32":{},"37":{},"49":{},"70":{},"82":{},"84":{},"90":{},"92":{},"94":{},"105":{},"108":{},"126":{},"136":{},"138":{},"142":{},"144":{},"146":{},"155":{},"157":{}},"component":{},"keyword":{}}],["display",{"_index":3718,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["disproportion",{"_index":951,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["dissoc",{"_index":2182,"title":{},"name":{},"text":{"16":{},"22":{},"23":{},"29":{},"72":{},"78":{},"82":{},"83":{},"87":{},"127":{},"132":{},"136":{},"137":{},"140":{}},"component":{},"keyword":{}}],["distinct",{"_index":1643,"title":{},"name":{},"text":{"11":{},"13":{}},"component":{},"keyword":{}}],["distinguish",{"_index":1200,"title":{"9-20":{},"71-20":{},"125-20":{}},"name":{},"text":{"9":{},"53":{},"71":{},"125":{}},"component":{},"keyword":{}}],["distract",{"_index":1844,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["ditch",{"_index":2903,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["div",{"_index":3706,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["divis",{"_index":993,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["djava.io.tmpdir=/tmp/jetti",{"_index":2528,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["djetty.base=/var/lib/jetti",{"_index":2530,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["djetty.home=/usr/local/jetti",{"_index":2529,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["dn",{"_index":2299,"title":{},"name":{},"text":{"17":{},"38":{}},"component":{},"keyword":{}}],["do",{"_index":508,"title":{},"name":{},"text":{"3":{},"8":{},"12":{},"20":{},"23":{},"41":{},"70":{},"75":{},"77":{},"83":{},"98":{},"126":{},"129":{},"131":{},"137":{}},"component":{},"keyword":{}}],["doc",{"_index":1400,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"73":{},"74":{},"75":{},"124":{},"128":{},"129":{}},"component":{},"keyword":{}}],["docker",{"_index":1509,"title":{"20-7":{}},"name":{},"text":{"10":{},"20":{},"24":{},"73":{},"84":{},"110":{},"121":{},"125":{},"138":{},"159":{}},"component":{},"keyword":{}}],["docker.io/library/war",{"_index":2519,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["docker:desktop",{"_index":2516,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["dockerfil",{"_index":2491,"title":{},"name":{},"text":{"20":{},"125":{}},"component":{},"keyword":{}}],["docstr",{"_index":287,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["document",{"_index":186,"title":{"124":{}},"name":{},"text":{"2":{},"3":{},"5":{},"18":{},"19":{},"21":{},"22":{},"25":{},"30":{},"38":{},"43":{},"50":{},"52":{},"65":{},"66":{},"81":{},"82":{},"85":{},"88":{},"95":{},"100":{},"101":{},"107":{},"108":{},"120":{},"124":{},"135":{},"136":{},"139":{},"141":{},"143":{},"147":{},"151":{},"164":{}},"component":{},"keyword":{}}],["document.getelementbyid(\\\"count",{"_index":3701,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["doesn’t",{"_index":1253,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"20":{},"22":{},"23":{},"27":{},"32":{},"37":{},"44":{},"52":{},"71":{},"74":{},"75":{},"76":{},"77":{},"79":{},"82":{},"83":{},"90":{},"94":{},"102":{},"108":{},"125":{},"128":{},"129":{},"130":{},"131":{},"133":{},"136":{},"137":{},"142":{},"152":{}},"component":{},"keyword":{}}],["domain",{"_index":748,"title":{},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"37":{},"66":{},"69":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"123":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["donat",{"_index":331,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["done",{"_index":1586,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"18":{},"19":{},"20":{},"23":{},"26":{},"42":{},"48":{},"57":{},"61":{},"74":{},"75":{},"76":{},"77":{},"80":{},"83":{},"99":{},"106":{},"113":{},"117":{},"124":{},"128":{},"129":{},"130":{},"131":{},"134":{},"137":{},"150":{},"156":{},"161":{},"165":{}},"component":{},"keyword":{}}],["don’t",{"_index":599,"title":{},"name":{},"text":{"3":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"21":{},"23":{},"64":{},"71":{},"73":{},"74":{},"75":{},"76":{},"78":{},"83":{},"124":{},"125":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["doseq",{"_index":2472,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["dot",{"_index":3173,"title":{},"name":{},"text":{"52":{}},"component":{},"keyword":{}}],["dotim",{"_index":2350,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{}},"component":{},"keyword":{}}],["doubl",{"_index":2846,"title":{},"name":{},"text":{"26":{},"43":{},"110":{},"159":{}},"component":{},"keyword":{}}],["doutputdirectory=target/war/web",{"_index":3740,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["down",{"_index":325,"title":{},"name":{},"text":{"2":{},"10":{},"11":{},"16":{},"17":{},"23":{},"24":{},"64":{},"65":{},"73":{},"74":{},"77":{},"83":{},"84":{},"120":{},"128":{},"131":{},"137":{},"138":{}},"component":{},"keyword":{}}],["download",{"_index":1080,"title":{},"name":{},"text":{"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"69":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"123":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}
1],["downstream",{"_index":2647,"title":{},"name":{},"text":{"22":{},"37":{},"82":{},"94":{},"109":{},"146":{},"158":{}},"component":{},"keyword":{}}],["downtim",{"_index":2976,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["dozen",{"_index":2004,"title":{},"name":{},"text":{"13":{},"15":{},"16":{}},"component":{},"keyword":{}}],["drive",{"_index":662,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["driven",{"_index":3032,"title":{},"name":{},"text":{"41":{},"52":{},"62":{},"64":{},"78":{},"98":{},"108":{},"132":{}},"component":{},"keyword":{}}],["drop",{"_index":1543,"title":{},"name":{},"text":{"10":{},"51":{},"73":{},"101":{}},"component":{},"keyword":{}}],["dropwizard",{"_index":3857,"title":{},"name":{},"text":{"96":{},"100":{},"151":{}},"component":{},"keyword":{}}],["due",{"_index":2375,"title":{},"name":{},"text":{"19":{},"46":{}},"component":{},"keyword":{}}],["duplic",{"_index":2757,"title":{},"name":{},"text":{"23":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["durat",{"_index":1022,"title":{},"name":{},"text":{"6":{},"43":{},"68":{},"101":{},"122":{}},"component":{},"keyword":{}}],["dure",{"_index":666,"title":{},"name":{},"text":{"4":{},"9":{},"11":{},"14":{},"22":{},"26":{},"29":{},"31":{},"37":{},"38":{},"41":{},"43":{},"46":{},"52":{},"55":{},"58":{},"59":{},"61":{},"64":{},"71":{},"72":{},"74":{},"77":{},"80":{},"82":{},"86":{},"87":{},"89":{},"94":{},"98":{},"101":{},"108":{},"112":{},"114":{},"115":{},"117":{},"121":{},"125":{},"127":{},"128":{},"131":{},"134":{},"136":{},"140":{},"146":{},"157":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["durham",{"_index":1068,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["dynam",{"_index":741,"title":{"22-7":{},"82-7":{},"136-7":{}},"name":{},"text":{"5":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"29":{},"41":{},"45":{},"47":{},"64":{},"66":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"87":{},"98":{},"103":{},"110":{},"119":{},"121":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"140":{},"153":{},"159":{}},"component":{},"keyword":{}}],["e",{"_index":3028,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["e.data",{"_index":3703,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["e.g",{"_index":257,"title":{},"name":{},"text":{"2":{},"9":{},"46":{},"57":{},"65":{},"71":{},"72":{},"79":{},"104":{},"110":{},"113":{},"120":{},"124":{},"125":{},"127":{},"133":{},"154":{},"157":{},"159":{},"161":{}},"component":{},"keyword":{}}],["each",{"_index":570,"title":{},"name":{},"text":{"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"30":{},"32":{},"35":{},"37":{},"38":{},"44":{},"47":{},"51":{},"52":{},"53":{},"54":{},"58":{},"59":{},"63":{},"64":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"102":{},"108":{},"109":{},"110":{},"114":{},"115":{},"118":{},"121":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"136":{},"137":{},"138":{},"140":{},"141":{},"144":{},"146":{},"152":{},"157":{},"158":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["earli",{"_index":1639,"title":{"160-2":{}},"name":{},"text":{"11":{},"22":{},"23":{},"25":{},"55":{},"74":{},"82":{},"112":{},"128":{},"136":{},"160":{}},"component":{},"keyword":{}}],["earlier",{"_index":477,"title":{},"name":{},"text":{"3":{},"16":{},"17":{},"22":{},"37":{},"46":{},"51":{},"73":{},"82":{},"94":{},"136":{},"146":{}},"component":{},"keyword":{}}],["eas",{"_index":2190,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["easi",{"_index":726,"title":{"5-4":{},"66-4":{}},"name":{},"text":{"5":{},"9":{},"11":{},"12":{},"13":{},"16":{},"19":{},"41":{},"44":{},"61":{},"66":{},"72":{},"74":{},"75":{},"76":{},"78":{},"80":{},"98":{},"102":{},"117":{},"121":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"152":{},"165":{}},"component":{},"keyword":{}}],["easier",{"_index":1234,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"16":{},"19":{},"23":{},"37":{},"52":{},"64":{},"71":{},"74":{},"75":{},"83":{},"94":{},"108":{},"128":{},"129":{},"137":{},"146":{},"159":{}},"component":{},"keyword":{}}],["easiest",{"_index":3141,"title":{},"name":{},"text":{"48":{},"106":{}},"component":{},"keyword":{}}],["easili",{"_index":2003,"title":{},"name":{},"text":{"13":{},"16":{},"22":{},"23":{},"24":{},"82":{},"83":{},"84":{},"136":{},"137":{},"138":{}},"component":{},"keyword":{}}],["echo",{"_index":1248,"title":{"11-9":{},"74-9":{},"128-9":{}},"name":{},"text":{"9":{},"11":{},"12":{},"21":{},"23":{},"64":{},"71":{},"74":{},"75":{},"83":{},"125":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["eclips",{"_index":3638,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["econom",{"_index":1039,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["ecosystem",{"_index":1109,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["ed",{"_index":481,"title":{},"name":{},"text":{"3":{},"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["edg",{"_index":2995,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}
1],["edit",{"_index":2609,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["editor",{"_index":1962,"title":{},"name":{},"text":{"13":{},"72":{},"75":{},"76":{},"127":{},"129":{},"130":{}},"component":{},"keyword":{}}],["edn",{"_index":1576,"title":{"26-3":{},"86-2":{}},"name":{},"text":{"11":{},"12":{},"19":{},"23":{},"26":{},"41":{},"44":{},"57":{},"74":{},"83":{},"86":{},"98":{},"102":{},"113":{},"125":{},"128":{},"137":{},"152":{},"154":{},"161":{}},"component":{},"keyword":{}}],["ee",{"_index":2535,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["ee10",{"_index":2422,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["eea",{"_index":1042,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["effect",{"_index":797,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"22":{},"23":{},"52":{},"53":{},"66":{},"72":{},"75":{},"76":{},"77":{},"82":{},"83":{},"127":{},"129":{},"130":{},"131":{},"136":{},"137":{}},"component":{},"keyword":{}}],["effici",{"_index":536,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"41":{},"45":{},"49":{},"52":{},"57":{},"66":{},"69":{},"92":{},"98":{},"100":{},"103":{},"108":{},"113":{},"123":{},"144":{},"151":{},"153":{},"157":{},"161":{}},"component":{},"keyword":{}}],["effort",{"_index":474,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"11":{},"68":{},"71":{},"74":{},"100":{},"122":{},"125":{},"128":{}},"component":{},"keyword":{}}],["eight",{"_index":1177,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["elaps",{"_index":2660,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["elast",{"_index":3710,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["element",{"_index":1119,"title":{},"name":{},"text":{"7":{},"29":{},"64":{}},"component":{},"keyword":{}}],["elimin",{"_index":3931,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["else[2",{"_index":2696,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["elsewher",{"_index":1082,"title":{},"name":{},"text":{"7":{},"24":{},"69":{},"84":{},"123":{},"138":{}},"component":{},"keyword":{}}],["email",{"_index":72,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["embed",{"_index":405,"title":{"10":{},"73":{},"28-1":{}},"name":{"10":{},"73":{}},"text":{"3":{},"10":{},"20":{},"23":{},"28":{},"73":{},"81":{},"83":{},"124":{},"135":{},"137":{}},"component":{},"keyword":{}}],["embrac",{"_index":793,"title":{},"name":{},"text":{"5":{},"15":{}},"component":{},"keyword":{}}],["emerg",{"_index":894,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["emit",{"_index":595,"title":{},"name":{},"text":{"3":{},"4":{},"11":{},"26":{},"32":{},"41":{},"43":{},"57":{},"67":{},"74":{},"86":{},"90":{},"98":{},"100":{},"101":{},"113":{},"128":{},"142":{},"151":{},"161":{}},"component":{},"keyword":{}}],["empathi",{"_index":47,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["emphasi",{"_index":3179,"title":{},"name":{},"text":{"52":{},"108":{},"157":{}},"component":{},"keyword":{}}],["employe",{"_index":914,"title":{},"name":{},"text":{"6":{},"52":{},"68":{},"108":{},"122":{}},"component":{},"keyword":{}}],["empower",{"_index":746,"title":{},"name":{},"text":{"5":{},"66":{}},"component":{},"keyword":{}}],["empti",{"_index":511,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"15":{},"19":{},"23":{},"46":{},"47":{},"74":{},"75":{},"76":{},"83":{},"104":{},"128":{},"129":{},"130":{},"137":{},"154":{}},"component":{},"keyword":{}}],["enabl",{"_index":782,"title":{},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"14":{},"16":{},"19":{},"20":{},"22":{},"26":{},"27":{},"31":{},"38":{},"41":{},"47":{},"66":{},"70":{},"71":{},"73":{},"79":{},"82":{},"89":{},"98":{},"110":{},"113":{},"125":{},"126":{},"133":{},"136":{},"143":{},"159":{}},"component":{},"keyword":{}}],["encapsul",{"_index":2926,"title":{},"name":{},"text":{"35":{},"52":{},"108":{}},"component":{},"keyword":{}}],["enclos",{"_index":1741,"title":{},"name":{},"text":{"11":{},"13":{},"74":{},"76":{},"128":{},"130":{}},"component":{},"keyword":{}}],["encod",{"_index":1215,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"14":{},"18":{},"19":{},"20":{},"23":{},"41":{},"44":{},"46":{},"49":{},"50":{},"57":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"98":{},"102":{},"104":{},"105":{},"107":{},"113":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"152":{},"154":{},"155":{},"161":{}},"component":{},"keyword":{}}],["encoding=\"utf",{"_index":3714,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["encourag",{"_index":1014,"title":{},"name":{},"text":{"6":{},"17":{},"19":{},"29":{},"68":{},"122":{}},"component":{},"keyword":{}}],["encrypt",{"_index":2295,"title":{},"name":{},"text":{"17":{},"50":{},"107":{}},"component":{},"keyword":{}}],["end",{"_index":509,"title":{},"name":{},"text":{"3":{},"5":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"24":{},"25":{},"41":{},"47":{},"51":{},"52":{},"61":{},"64":{},"66":{},"73":{},"74":{},"75":{},"76":{},"78":{},"80":{},"85":{},"98":{},"108":{},"117":{},"121":{},"128":{},"129":{},"130":{},"132":{},"134":{},"137":{},"139":{},"157":{},"160":{},"165":{}},"component":{},"keyword":{}}],["end::test",{"_index":2241,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["endeavor",{"_index":926,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["endpoint",{"_index":462,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"11":{},"15":{},"16":{},"19":{},"21":{},"23":{},"46":{},"52":{},"54":{},"61":{},"64":{},"71":{},"72":{},"74":{},"80":{},"104":{},"109":{},"117":{},"119":{},"125":{},"127":{},"128":{},"134":{},"154":{},"158":{},"165":{}},"component":{},"keyword":{}}],["endpointconfig",{"_index":3911,"title":{},"name":{},"text":{"119":{}},"component":{},"keyword":{}}],["enforc",{"_index":2,"title":{"1-3":{}},"name":{},"text":{"6":{},"22":{},"64":{},"68":{},"82":{},"122":{},"136":{}},"component":{},"keyword":{}}],["english",{"_index":1789,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["enhanc",{"_index":1569,"title":{},"name":{},"text":{"11":{},"12":{},"50":{},"74":{},"75":{},"107":{},"128":{},"129":{}},"component":{},"keyword":{}}],["enough",{"_index":1178,"title":{},"name":{},"text":{"8":{},"16":{},"23":{},"70":{},"75":{},"83":{},"125":{},"126":{},"129":{},"137":{}},"component":{},"keyword":{}}],["enqueu",{"_index":2865,"title":{},"name":{},"text":{"29":{},"37":{},"52":{},"87":{},"92":{},"94":{},"108":{},"140":{},"144":{},"146":{},"157":{},"160":{}},"component":{},"keyword":{}}],["ensur",{"_index":306,"title":{},"name":{},"text":{"2":{},"6":{},"8":{},"9":{},"14":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"31":{},"41":{},"43":{},"61":{},"65":{},"68":{},"70":{},"71":{},"73":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"98":{},"117":{},"120":{},"122":{},"125":{},"126":{},"131":{},"132":{},"134":{},"135":{},"136":{},"137":{},"157":{},"165":{}},"component":{},"keyword":{}}],["entail",{"_index":1629,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["entangl",{"_index":1902,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["enter",{"_index":1155,"title":{"22-6":{},"82-6":{},"136-6":{}},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"29":{},"30":{},"32":{},"37":{},"54":{},"55":{},"61":{},"70":{},"71":{},"72":{},"73":{},"74":{},"76":{},"80":{},"82":{},"83":{},"84":{},"87":{},"88":{},"90":{},"92":{},"94":{},"112":{},"117":{},"125":{},"126":{},"127":{},"128":{},"130":{},"134":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"144":{},"146":{},"160":{},"165":{}},"component":{},"keyword":{}}],["entic",{"_index":431,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["entir",{"_index":576,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"12":{},"13":{},"14":{},"16":{},"19":{},"23":{},"40":{},"46":{},"56":{},"57":{},"64":{},"67":{},"70":{},"75":{},"76":{},"77":{},"78":{},"83":{},"97":{},"101":{},"104":{},"111":{},"113":{},"126":{},"129":{},"130":{},"131":{},"132":{},"137":{},"154":{},"161":{}},"component":{},"keyword":{}}],["entiti",{"_index":919,"title":{"23-15":{}},"name":{},"text":{"6":{},"23":{},"62":{},"68":{},"83":{},"122":{},"125":{},"137":{}},"component":{},"keyword":{}}],["entitl",{"_index":988,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["entri",{"_index":1336,"title":{},"name":{},"text":{"9":{},"13":{},"20":{},"26":{},"64":{},"71":{},"76":{},"86":{},"100":{},"124":{},"125":{},"130":{},"151":{}},"component":{},"keyword":{}}],["entrypoint",{"_index":1105,"title":{},"name":{},"text":{"7":{}},"component":{},"keyword":{}}],["env",{"_index":2556,"title":{},"name":{},"text":{"20":{},"78":{},"79":{},"132":{},"133":{}},"component":{},"keyword":{}}],["environ",{"_index":1589,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"17":{},"23":{},"24":{},"26":{},"41":{},"43":{},"72":{},"74":{},"75":{},"76":{},"78":{},"81":{},"83":{},"84":{},"86":{},"98":{},"100":{},"101":{},"127":{},"128":{},"129":{},"130":{},"132":{},"135":{},"137":{},"138":{},"151":{}},"component":{},"keyword":{}}],["eol",{"_index":553,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["equal",{"_index":1923,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["equival",{"_index":1365,"title":{},"name":{},"text":{"10":{},"19":{},"26":{},"52":{},"73":{},"77":{},"86":{},"131":{}},"component":{},"keyword":{}}],["ergonom",{"_index":618,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["error",{"_index":501,"title":{"32":{},"90":{},"142":{},"22-10":{},"32-1":{},"32-2":{},"37-6":{},"82-10":{},"90-1":{},"90-2":{},"94-7":{},"136-10":{},"142-1":{},"142-2":{},"142-3":{},"146-6":{}},"name":{"32":{},"90":{},"142":{}},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"22":{},"24":{},"29":{},"32":{},"37":{},"39":{},"41":{},"43":{},"53":{},"55":{},"61":{},"64":{},"67":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"82":{},"84":{},"87":{},"90":{},"94":{},"96":{},"98":{},"101":{},"110":{},"112":{},"117":{},"119":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"136":{},"138":{},"140":{},"142":{},"146":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["escap",{"_index":1863,"title":{},"name":{},"text":{"12":{},"47":{}},"component":{},"keyword":{}}],["especi",{"_index":149,"title":{},"name":{},"text":{"2":{},"13":{},"14":{},"20":{},"22":{},"23":{},"44":{},"47":{},"77":{},"82":{},"83":{},"102":{},"110":{},"136":{},"137":{},"152":{},"159":{}},"component":{},"keyword":{}}
1],["essenc",{"_index":2650,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["essens",{"_index":3258,"title":{},"name":{},"text":{"59":{},"115":{}},"component":{},"keyword":{}}],["essenti",{"_index":1626,"title":{},"name":{},"text":{"11":{},"13":{},"16":{},"19":{},"22":{},"25":{},"41":{},"51":{},"52":{},"64":{},"74":{},"81":{},"82":{},"83":{},"98":{},"108":{},"119":{},"128":{},"135":{},"136":{},"137":{}},"component":{},"keyword":{}}],["establish",{"_index":461,"title":{},"name":{},"text":{"3":{},"10":{},"13":{},"18":{},"21":{},"64":{},"119":{}},"component":{},"keyword":{}}],["et",{"_index":973,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["etc",{"_index":2204,"title":{},"name":{},"text":{"16":{},"24":{},"48":{},"52":{},"53":{},"61":{},"63":{},"76":{},"80":{},"84":{},"96":{},"106":{},"108":{},"117":{},"118":{},"124":{},"130":{},"134":{},"138":{},"165":{}},"component":{},"keyword":{}}],["ethnic",{"_index":866,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["euo",{"_index":2508,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["european",{"_index":831,"title":{"6-11":{},"68-11":{},"122-11":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["eval",{"_index":696,"title":{},"name":{},"text":{"4":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"67":{},"69":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"123":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["evalu",{"_index":1113,"title":{"77-3":{},"131-3":{}},"name":{},"text":{"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"32":{},"37":{},"41":{},"58":{},"69":{},"71":{},"74":{},"75":{},"76":{},"77":{},"90":{},"94":{},"98":{},"114":{},"123":{},"125":{},"128":{},"129":{},"130":{},"131":{},"142":{},"146":{},"162":{}},"component":{},"keyword":{}}],["even",{"_index":275,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"9":{},"11":{},"13":{},"14":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"32":{},"35":{},"41":{},"43":{},"44":{},"47":{},"50":{},"65":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"90":{},"98":{},"102":{},"107":{},"110":{},"120":{},"121":{},"125":{},"127":{},"128":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"142":{},"152":{},"157":{},"159":{}},"component":{},"keyword":{}}],["event",{"_index":743,"title":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{},"18-5":{},"18-9":{},"41-2":{},"41-9":{},"79-10":{},"98-2":{},"98-8":{},"124-4":{},"133-10":{}},"name":{"54":{},"109":{},"158":{}},"text":{"5":{},"6":{},"8":{},"18":{},"19":{},"21":{},"23":{},"24":{},"26":{},"28":{},"29":{},"33":{},"37":{},"41":{},"49":{},"54":{},"64":{},"66":{},"68":{},"70":{},"79":{},"83":{},"84":{},"86":{},"87":{},"98":{},"100":{},"109":{},"121":{},"122":{},"124":{},"126":{},"133":{},"137":{},"138":{},"140":{},"151":{},"158":{}},"component":{},"keyword":{}}],["event.data",{"_index":2366,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["events.server/cr",{"_index":3658,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["events.servic",{"_index":3653,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["eventsourc",{"_index":2361,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{}},"component":{},"keyword":{}}],["eventsource(\"/count",{"_index":2363,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["eventsource(\\\"http://localhost:8080/count",{"_index":3696,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["eventsource.addeventlistener(\"count",{"_index":2364,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["eventsource.addeventlistener(\\\"count",{"_index":3697,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["eventu",{"_index":1179,"title":{},"name":{},"text":{"8":{},"11":{},"16":{},"22":{},"70":{},"74":{},"76":{},"82":{},"126":{},"128":{},"130":{},"136":{}},"component":{},"keyword":{}}],["everyon",{"_index":15,"title":{},"name":{},"text":{"1":{},"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["everyth",{"_index":178,"title":{},"name":{},"text":{"2":{},"13":{},"20":{},"22":{},"23":{},"37":{},"65":{},"72":{},"76":{},"81":{},"82":{},"83":{},"84":{},"110":{},"120":{},"121":{},"124":{},"125":{},"127":{},"130":{},"135":{},"136":{},"137":{},"138":{},"159":{}},"component":{},"keyword":{}}],["everywher",{"_index":2743,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["evid",{"_index":2766,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["evolut",{"_index":3191,"title":{},"name":{},"text":{"52":{},"108":{},"157":{}},"component":{},"keyword":{}}],["evolv",{"_index":448,"title":{},"name":{},"text":{"3":{},"10":{},"73":{},"92":{},"144":{}},"component":{},"keyword":{}}],["ex",{"_index":2887,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["exact",{"_index":1420,"title":{},"name":{},"text":{"10":{},"13":{},"30":{},"43":{},"49":{},"53":{},"73":{},"76":{},"105":{},"155":{}},"component":{},"keyword":{}}],["exactli",{"_index":1960,"title":{},"name":{},"text":{"13":{},"14":{},"15":{},"16":{},"22":{},"23":{},"37":{},"72":{},"82":{},"83":{},"94":{},"125":{},"127":{},"136":{},"137":{},"146":{}},"component":{},"keyword":{}}],["examin",{"_index":1511,"title":{},"name":{},"text":{"10":{},"11":{},"61":{},"64":{},"72":{},"73":{},"80":{},"109":{},"117":{},"127":{},"134":{},"158":{},"165":{}},"component":{},"keyword":{}}],["exampl",{"_index":519,"title":{"41-11":{},"54-4":{},"98-10":{},"109-4":{},"158-4":{}},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"28":{},"29":{},"32":{},"37":{},"39":{},"41":{},"44":{},"45":{},"46":{},"48":{},"51":{},"52":{},"53":{},"54":{},"57":{},"58":{},"59":{},"61":{},"64":{},"67":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"84":{},"86":{},"88":{},"90":{},"94":{},"96":{},"98":{},"102":{},"103":{},"104":{},"106":{},"108":{},"109":{},"113":{},"114":{},"115":{},"117":{},"122":{},"123":{},"124":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"138":{},"141":{},"142":{},"146":{},"152":{},"153":{},"154":{},"156":{},"157":{},"158":{},"160":{},"161":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["example.com",{"_index":3182,"title":{},"name":{},"text":{"52":{},"58":{},"108":{},"114":{},"157":{},"162":{}},"component":{},"keyword":{}}],["exce",{"_index":3140,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["exceed",{"_index":3300,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["excel",{"_index":1114,"title":{},"name":{},"text":{"7":{},"11":{},"69":{},"74":{},"123":{},"128":{}},"component":{},"keyword":{}}],["except",{"_index":159,"title":{"32-3":{},"41-4":{},"90-3":{},"98-4":{}},"name":{},"text":{"2":{},"6":{},"9":{},"13":{},"19":{},"22":{},"23":{},"24":{},"29":{},"32":{},"37":{},"41":{},"43":{},"47":{},"48":{},"55":{},"64":{},"68":{},"71":{},"82":{},"83":{},"84":{},"86":{},"87":{},"90":{},"98":{},"101":{},"106":{},"109":{},"112":{},"119":{},"122":{},"125":{},"136":{},"137":{},"138":{},"140":{},"142":{},"158":{},"160":{}},"component":{},"keyword":{}}],["exceptioninfo",{"_index":2886,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["exception’",{"_index":2889,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["exclud",{"_index":3116,"title":{},"name":{},"text":{"46":{}},"component":{},"keyword":{}}],["exclus",{"_index":3646,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["exec",{"_index":2165,"title":{},"name":{},"text":{"16":{},"17":{},"78":{}},"component":{},"keyword":{}}],["execut",{"_index":164,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"29":{},"31":{},"32":{},"37":{},"43":{},"48":{},"52":{},"53":{},"55":{},"61":{},"64":{},"65":{},"67":{},"69":{},"70":{},"71":{},"73":{},"74":{},"77":{},"78":{},"80":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"89":{},"90":{},"94":{},"101":{},"106":{},"108":{},"109":{},"112":{},"117":{},"120":{},"123":{},"126":{},"128":{},"131":{},"132":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"146":{},"157":{},"158":{},"160":{},"165":{}},"component":{},"keyword":{}}],["exemplari",{"_index":885,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["exept",{"_index":2952,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["exercis",{"_index":800,"title":{},"name":{},"text":{"5":{},"6":{},"11":{},"12":{},"16":{},"19":{},"23":{},"61":{},"68":{},"74":{},"75":{},"80":{},"83":{},"117":{},"122":{},"128":{},"129":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["exhaust",{"_index":685,"title":{},"name":{},"text":{"4":{},"52":{},"67":{},"108":{}},"component":{},"keyword":{}}],["exist",{"_index":588,"title":{},"name":{},"text":{"3":{},"6":{},"10":{},"13":{},"14":{},"22":{},"23":{},"24":{},"29":{},"58":{},"59":{},"63":{},"68":{},"82":{},"83":{},"84":{},"87":{},"100":{},"110":{},"122":{},"136":{},"137":{},"138":{},"151":{},"159":{}},"component":{},"keyword":{}}],["exit",{"_index":1549,"title":{},"name":{},"text":{"10":{},"11":{},"32":{},"73":{},"74":{},"75":{},"90":{},"128":{},"129":{},"142":{}},"component":{},"keyword":{}}],["expand",{"_index":1124,"title":{"58-5":{},"59-4":{},"114-4":{},"115-4":{},"162-4":{},"163-4":{}},"name":{},"text":{"7":{},"9":{},"11":{},"12":{},"14":{},"15":{},"20":{},"24":{},"35":{},"47":{},"51":{},"52":{},"58":{},"59":{},"61":{},"63":{},"69":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"84":{},"92":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"123":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"138":{},"144":{},"157":{},"159":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["expandablerout",{"_index":2916,"title":{"35-4":{},"51-4":{},"92-6":{},"144-6":{}},"name":{},"text":{"35":{},"51":{},"52":{},"92":{},"108":{},"110":{},"144":{},"157":{},"159":{}},"component":{},"keyword":{}}],["expans",{"_index":2055,"title":{},"name":{},"text":{"14":{},"35":{},"37":{},"77":{},"94":{},"131":{},"146":{}},"component":{},"keyword":{}}],["expect",{"_index":20,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"11":{},"12":{},"13":{},"15":{},"16":{},"22":{},"23":{},"37":{},"38":{},"41":{},"43":{},"48":{},"54":{},"65":{},"67":{},"74":{},"75":{},"77":{},"81":{},"82":{},"83":{},"94":{},"95":{},"98":{},"106":{},"109":{},"110":{},"120":{},"128":{},"129":{},"135":{},"137":{},"146":{},"147":{},"156":{},"158":{},"159":{}},"component":{},"keyword":{}}],["experi",{"_index":14,"title":{},"name":{},"text":{"1":{},"9":{},"11":{},"12":{},"13":{},"15":{},"23":{},"71":{},"74":{},"75":{},"76":{},"83":{},"125":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["experienc",{"_index":1753,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["expiri",{"_index":2267,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["explain",{"_index":838,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"14":{},"22":{},"68":{},"71":{},"74":{},"77":{},"82":{},"88":{},"122":{},"125":{},"128":{},"131":{},"136":{},"141":{}},"component":{},"keyword":{}}],["explan",{"_index":2786,"title":{},"name":{},"text":{"23":{},"83":{},"100":{},"137":{},"151":{}},"component":{},"keyword":{}}],["explicit",{"_index":75,"title":{},"name":{},"text":{"1":{},"9":{},"15":{},"22":{},"23":{},"37":{},"53":{},"71":{},"82":{},"125":{},"136":{},"157":{}},"component":{},"keyword":{}}],["explicitli",{"_index":1318,"title":{},"name":{},"text":{"9":{},"14":{},"24":{},"32":{},"37":{},"52":{},"56":{},"58":{},"77":{},"84":{},"90":{},"94":{},"108":{},"111":{},"114":{},"125":{},"131":{},"138":{},"146":{},"162":{}},"component":{},"keyword":{}}],["explod",{"_index":2791,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["explor",{"_index":1361,"title":{"10-3":{},"73-3":{}},"name":{},"text":{"10":{},"72":{},"73":{},"127":{}},"component":{},"keyword":{}}],["export",{"_index":2429,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["expos",{"_index":533,"title":{},"name":{},"text":{"3":{},"43":{},"47":{},"52":{},"78":{},"101":{},"108":{},"132":{}},"component":{},"keyword":{}}],["expr",{"_index":2228,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["express",{"_index":1091,"title":{},"name":{},"text":{"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"23":{},"32":{},"41":{},"51":{},"52":{},"63":{},"69":{},"71":{},"74":{},"75":{},"76":{},"77":{},"90":{},"92":{},"98":{},"108":{},"118":{},"123":{},"125":{},"128":{},"129":{},"130":{},"131":{},"142":{},"144":{},"157":{}},"component":{},"keyword":{}}],["expressli",{"_index":602,"title":{},"name":{},"text":{"3":{},"6":{},"16":{},"68":{},"122":{}},"component":{},"keyword":{}}],["extend",{"_index":1075,"title":{},"name":{},"text":{"7":{},"15":{},"16":{},"19":{},"20":{},"22":{},"35":{},"37":{},"41":{},"46":{},"50":{},"52":{},"61":{},"69":{},"80":{},"82":{},"92":{},"94":{},"98":{},"100":{},"104":{},"107":{},"108":{},"117":{},"123":{},"134":{},"136":{},"144":{},"146":{},"151":{},"154":{},"157":{},"165":{}},"component":{},"keyword":{}}],["extens",{"_index":730,"title":{"5-7":{},"66-7":{}},"name":{},"text":{"7":{},"8":{},"30":{},"35":{},"69":{},"70":{},"81":{},"92":{},"123":{},"124":{},"126":{},"135":{},"144":{}},"component":{},"keyword":{}}],["extern",{"_index":148,"title":{},"name":{},"text":{"2":{},"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["extra",{"_index":336,"title":{},"name":{},"text":{"2":{},"10":{},"14":{},"16":{},"23":{},"41":{},"43":{},"50":{},"65":{},"73":{},"77":{},"78":{},"98":{},"100":{},"107":{},"120":{},"131":{},"151":{}},"component":{},"keyword":{}}],["extract",{"_index":1282,"title":{},"name":{},"text":{"9":{},"12":{},"15":{},"23":{},"46":{},"51":{},"52":{},"62":{},"75":{},"78":{},"83":{},"102":{},"108":{},"125":{},"129":{},"132":{},"137":{},"152":{},"157":{}},"component":{},"keyword":{}}],["extraordinari",{"_index":803,"title":{},"name":{},"text":{"5":{},"66":{}},"component":{},"keyword":{}}],["extrem",{"_index":954,"title":{},"name":{},"text":{"6":{},"19":{},"68":{},"122":{}},"component":{},"keyword":{}}],["ey",{"_index":1737,"title":{},"name":{},"text":{"11":{},"23":{},"26":{},"74":{},"83":{},"86":{},"128":{},"137":{}},"component":{},"keyword":{}}],["f",{"_index":3384,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["f7296a450ab2bfad684451ed7e0ed22125c0743f79e9675c4e15f593570986d",{"_index":1516,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["facad",{"_index":1130,"title":{},"name":{},"text":{"7":{},"39":{},"41":{},"69":{},"96":{},"98":{},"123":{}},"component":{},"keyword":{}}],["face",{"_index":3170,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["facil",{"_index":932,"title":{},"name":{},"text":{"6":{},"8":{},"47":{},"58":{},"64":{},"68":{},"70":{},"72":{},"114":{},"122":{},"126":{},"127":{},"162":{}},"component":{},"keyword":{}}],["facilit",{"_index":3217,"title":{},"name":{},"text":{"54":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["fact",{"_index":307,"title":{},"name":{},"text":{"2":{},"3":{},"11":{},"12":{},"13":{},"14":{},"20":{},"37":{},"43":{},"49":{},"74":{},"75":{},"76":{},"77":{},"94":{},"105":{},"128":{},"129":{},"130":{},"131":{},"146":{}},"component":{},"keyword":{}}],["factor",{"_index":1748,"title":{},"name":{},"text":{"11":{},"12":{},"27":{},"52":{},"61":{},"74":{},"75":{},"80":{},"108":{},"117":{},"125":{},"128":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["factori",{"_index":2854,"title":{},"name":{},"text":{"27":{},"38":{},"95":{},"147":{}},"c
1omponent":{},"keyword":{}}],["fail",{"_index":156,"title":{},"name":{},"text":{"2":{},"9":{},"12":{},"16":{},"37":{},"41":{},"48":{},"71":{},"75":{},"78":{},"98":{},"106":{},"125":{},"129":{},"132":{}},"component":{},"keyword":{}}],["failur",{"_index":500,"title":{"16-20":{}},"name":{},"text":{"3":{},"10":{},"14":{},"16":{},"22":{},"52":{},"73":{},"77":{},"78":{},"82":{},"108":{},"131":{},"132":{},"136":{},"157":{}},"component":{},"keyword":{}}],["fair",{"_index":1770,"title":{},"name":{},"text":{"11":{},"16":{},"74":{},"128":{}},"component":{},"keyword":{}}],["fairli",{"_index":1745,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["fall",{"_index":361,"title":{"3-7":{}},"name":{},"text":{"9":{},"71":{},"99":{},"110":{},"125":{},"150":{},"157":{},"159":{}},"component":{},"keyword":{}}],["fallback",{"_index":1725,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"58":{},"59":{},"74":{},"75":{},"83":{},"114":{},"115":{},"128":{},"129":{},"137":{},"162":{},"163":{}},"component":{},"keyword":{}}],["fals",{"_index":1658,"title":{},"name":{},"text":{"11":{},"12":{},"17":{},"23":{},"26":{},"27":{},"38":{},"41":{},"54":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"83":{},"95":{},"98":{},"109":{},"110":{},"128":{},"129":{},"131":{},"132":{},"133":{},"137":{},"147":{},"158":{},"159":{}},"component":{},"keyword":{}}],["false/non",{"_index":1922,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["familiar",{"_index":1055,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"23":{},"68":{},"71":{},"74":{},"75":{},"76":{},"78":{},"83":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["far",{"_index":427,"title":{"11-14":{},"12-16":{},"13-14":{},"15-7":{},"16-22":{},"23-18":{},"74-14":{},"75-14":{},"76-14":{},"78-12":{},"83-17":{},"128-14":{},"129-14":{},"130-14":{},"132-12":{},"137-17":{}},"name":{},"text":{"3":{},"9":{},"10":{},"12":{},"14":{},"20":{},"23":{},"24":{},"71":{},"73":{},"75":{},"77":{},"83":{},"84":{},"125":{},"129":{},"131":{},"137":{},"138":{}},"component":{},"keyword":{}}],["fashion",{"_index":2885,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["fast",{"_index":393,"title":{"50-3":{},"107-3":{}},"name":{},"text":{"3":{},"9":{},"13":{},"14":{},"19":{},"33":{},"47":{},"52":{},"53":{},"61":{},"71":{},"76":{},"77":{},"80":{},"84":{},"108":{},"117":{},"125":{},"130":{},"131":{},"134":{},"138":{},"157":{},"165":{}},"component":{},"keyword":{}}],["faster",{"_index":543,"title":{},"name":{},"text":{"3":{},"23":{},"47":{},"53":{},"83":{},"137":{}},"component":{},"keyword":{}}],["fastest",{"_index":1353,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["favicon.ico",{"_index":1506,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["favor",{"_index":656,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["favorit",{"_index":2042,"title":{},"name":{},"text":{"14":{},"75":{},"77":{},"129":{},"131":{}},"component":{},"keyword":{}}],["featur",{"_index":127,"title":{"2-7":{},"5-1":{},"65-6":{},"66-1":{},"120-6":{},"121-1":{}},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"15":{},"20":{},"21":{},"24":{},"41":{},"42":{},"68":{},"71":{},"74":{},"75":{},"84":{},"98":{},"99":{},"102":{},"113":{},"122":{},"125":{},"128":{},"129":{},"138":{},"150":{},"152":{},"161":{}},"component":{},"keyword":{}}],["feature/bugfix",{"_index":299,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["feb",{"_index":352,"title":{"3-3":{}},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["feed",{"_index":1128,"title":{},"name":{},"text":{"7":{},"23":{},"69":{},"78":{},"123":{},"132":{}},"component":{},"keyword":{}}],["feedback",{"_index":1018,"title":{},"name":{},"text":{"6":{},"14":{},"19":{},"53":{},"61":{},"68":{},"77":{},"80":{},"117":{},"121":{},"122":{},"131":{},"134":{},"165":{}},"component":{},"keyword":{}}],["feel",{"_index":226,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"9":{},"11":{},"13":{},"16":{},"23":{},"65":{},"68":{},"71":{},"74":{},"75":{},"76":{},"83":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["few",{"_index":174,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"9":{},"11":{},"12":{},"13":{},"16":{},"18":{},"19":{},"21":{},"23":{},"27":{},"37":{},"52":{},"66":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"92":{},"94":{},"108":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"144":{},"146":{},"157":{}},"component":{},"keyword":{}}],["fewer",{"_index":434,"title":{},"name":{},"text":{"3":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["fictici",{"_index":3187,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["field",{"_index":1721,"title":{},"name":{},"text":{"11":{},"15":{},"16":{},"23":{},"74":{},"78":{},"83":{},"128":{},"132":{},"137":{}},"component":{},"keyword":{}}],["fifteen",{"_index":3881,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["figur",{"_index":1249,"title":{},"name":{},"text":{"9":{},"12":{},"71":{},"75":{},"76":{},"108":{},"125":{},"129":{},"130":{}},"component":{},"keyword":{}}],["file",{"_index":239,"title":{"20-2":{},"20-6":{},"26-3":{},"44-4":{},"86-2":{},"88-14":{},"102-4":{},"141-13":{},"152-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"19":{},"20":{},"23":{},"24":{},"26":{},"28":{},"30":{},"37":{},"38":{},"39":{},"41":{},"44":{},"47":{},"48":{},"49":{},"50":{},"57":{},"65":{},"66":{},"69":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"81":{},"83":{},"84":{},"86":{},"89":{},"94":{},"95":{},"96":{},"98":{},"102":{},"105":{},"106":{},"107":{},"110":{},"113":{},"120":{},"121":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"135":{},"137":{},"138":{},"143":{},"146":{},"147":{},"152":{},"155":{},"156":{},"159":{},"161":{},"164":{}},"component":{},"keyword":{}}],["file'",{"_index":3462,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["file:///var/lib/jetty/webapp",{"_index":2568,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["filenam",{"_index":1948,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["filenotfoundexcept",{"_index":1699,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["fill",{"_index":504,"title":{},"name":{},"text":{"3":{},"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["filter",{"_index":2488,"title":{},"name":{},"text":{"20":{},"53":{},"72":{},"127":{}},"component":{},"keyword":{}}],["final",{"_index":614,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"11":{},"12":{},"16":{},"18":{},"19":{},"20":{},"23":{},"24":{},"26":{},"37":{},"52":{},"55":{},"58":{},"64":{},"68":{},"71":{},"74":{},"75":{},"78":{},"83":{},"86":{},"92":{},"108":{},"112":{},"122":{},"125":{},"128":{},"129":{},"132":{},"137":{},"144":{},"160":{}},"component":{},"keyword":{}}],["find",{"_index":681,"title":{},"name":{},"text":{"4":{},"6":{},"9":{},"10":{},"11":{},"13":{},"18":{},"19":{},"20":{},"23":{},"37":{},"47":{},"67":{},"68":{},"71":{},"72":{},"73":{},"76":{},"79":{},"81":{},"83":{},"92":{},"110":{},"122":{},"125":{},"127":{},"130":{},"133":{},"135":{},"137":{},"144":{}},"component":{},"keyword":{}}],["finder",{"_index":2379,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["fine",{"_index":1188,"title":{},"name":{},"text":{"8":{},"14":{},"70":{},"77":{},"81":{},"126":{},"131":{},"135":{}},"component":{},"keyword":{}}],["finish",{"_index":208,"title":{},"name":{},"text":{"2":{},"20":{},"23":{},"54":{},"65":{},"83":{},"109":{},"120":{},"137":{},"158":{}},"component":{},"keyword":{}}],["finit",{"_index":3138,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["fire",{"_index":1424,"title":{},"name":{},"text":{"10":{},"13":{},"16":{},"17":{},"72":{},"73":{},"76":{},"78":{},"125":{},"127":{},"130":{},"132":{}},"component":{},"keyword":{}}],["firewal",{"_index":1990,"title":{},"name":{},"text":{"13":{},"52":{},"108":{}},"component":{},"keyword":{}}
1],["first",{"_index":119,"title":{"23":{},"83":{},"137":{},"2-3":{},"23-12":{},"83-12":{},"137-12":{}},"name":{"23":{},"83":{},"137":{}},"text":{"2":{},"4":{},"5":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"29":{},"32":{},"37":{},"40":{},"41":{},"46":{},"53":{},"58":{},"59":{},"64":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"87":{},"90":{},"94":{},"97":{},"100":{},"104":{},"115":{},"119":{},"121":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"140":{},"146":{},"148":{},"151":{},"154":{},"160":{},"163":{}},"component":{},"keyword":{}}],["fit",{"_index":620,"title":{},"name":{},"text":{"3":{},"5":{},"13":{},"64":{},"66":{},"76":{},"130":{}},"component":{},"keyword":{}}],["five",{"_index":2021,"title":{},"name":{},"text":{"13":{},"76":{},"100":{},"130":{},"151":{}},"component":{},"keyword":{}}],["fix",{"_index":2934,"title":{},"name":{},"text":{"37":{},"39":{},"75":{},"94":{},"96":{},"119":{},"129":{},"146":{}},"component":{},"keyword":{}}],["flash",{"_index":3151,"title":{"50-2":{},"107-2":{}},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["flat",{"_index":2084,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["flatten",{"_index":3261,"title":{},"name":{},"text":{"59":{},"72":{},"115":{},"127":{}},"component":{},"keyword":{}}],["flavor",{"_index":1592,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"83":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["fledg",{"_index":3603,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["flexibl",{"_index":811,"title":{},"name":{},"text":{"5":{},"9":{},"22":{},"66":{},"71":{},"82":{},"121":{},"125":{},"136":{}},"component":{},"keyword":{}}],["flip",{"_index":1208,"title":{},"name":{},"text":{"9":{},"71":{},"76":{},"125":{},"130":{}},"component":{},"keyword":{}}],["flow",{"_index":2329,"title":{},"name":{},"text":{"18":{},"21":{},"22":{},"24":{},"32":{},"77":{},"79":{},"82":{},"84":{},"90":{},"100":{},"131":{},"133":{},"136":{},"138":{},"142":{},"151":{}},"component":{},"keyword":{}}],["fluid",{"_index":3070,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["flurri",{"_index":663,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["fn",{"_index":670,"title":{},"name":{},"text":{"4":{},"8":{},"9":{},"11":{},"16":{},"17":{},"18":{},"19":{},"21":{},"22":{},"23":{},"24":{},"27":{},"29":{},"37":{},"38":{},"54":{},"55":{},"61":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"87":{},"90":{},"94":{},"95":{},"110":{},"112":{},"117":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"147":{},"159":{},"165":{}},"component":{},"keyword":{}}],["fn</param",{"_index":2449,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fnservlet",{"_index":513,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["focu",{"_index":44,"title":{},"name":{},"text":{"1":{},"4":{},"5":{},"16":{},"51":{},"66":{},"78":{},"100":{},"121":{},"132":{}},"component":{},"keyword":{}}],["focus",{"_index":1579,"title":{},"name":{},"text":{"11":{},"15":{},"19":{},"24":{},"47":{},"74":{},"128":{}},"component":{},"keyword":{}}],["fold",{"_index":2782,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["folder",{"_index":2503,"title":{},"name":{},"text":{"20":{},"47":{}},"component":{},"keyword":{}}],["follow",{"_index":50,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"8":{},"9":{},"10":{},"11":{},"14":{},"17":{},"19":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"32":{},"37":{},"38":{},"41":{},"44":{},"47":{},"49":{},"52":{},"53":{},"54":{},"55":{},"58":{},"59":{},"61":{},"63":{},"64":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"77":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"94":{},"95":{},"98":{},"102":{},"108":{},"110":{},"112":{},"114":{},"115":{},"117":{},"118":{},"120":{},"122":{},"125":{},"126":{},"127":{},"131":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"142":{},"143":{},"146":{},"147":{},"152":{},"157":{},"159":{},"160":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["foo",{"_index":2397,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"109":{},"117":{},"134":{},"158":{},"165":{}},"component":{},"keyword":{}}],["foo/:bar",{"_index":3112,"title":{},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["foo/baz",{"_index":3113,"title":{},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["foo\\\":\\\"bar",{"_index":2398,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["foobar",{"_index":2381,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["footnote:\">that’",{"_index":3472,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["footnote:[thi",{"_index":3245,"title":{},"name":{},"text":{"58":{}},"component":{},"keyword":{}}],["forbid",{"_index":1355,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["forbidden",{"_index":1801,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["forc",{"_index":1678,"title":{},"name":{},"text":{"11":{},"61":{},"74":{},"80":{},"117":{},"128":{},"134":{},"165":{}},"component":{},"keyword":{}}],["forego",{"_index":875,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["foreign",{"_index":1034,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["forese",{"_index":890,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["forev",{"_index":3481,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["forgeri",{"_index":784,"title":{"88-9":{},"110-4":{},"141-8":{},"159-2":{}},"name":{},"text":{"5":{},"27":{},"66":{},"94":{},"110":{},"159":{}},"component":{},"keyword":{}}],["forget",{"_index":2735,"title":{},"name":{},"text":{"23":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["forgot",{"_index":1625,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["fork",{"_index":296,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["form",{"_index":565,"title":{"9-24":{}},"name":{},"text":{"3":{},"5":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"19":{},"22":{},"23":{},"24":{},"25":{},"32":{},"37":{},"41":{},"44":{},"46":{},"47":{},"50":{},"52":{},"54":{},"58":{},"61":{},"62":{},"64":{},"66":{},"71":{},"72":{},"73":{},"74":{},"76":{},"80":{},"82":{},"83":{},"84":{},"85":{},"90":{},"94":{},"98":{},"100":{},"102":{},"104":{},"107":{},"108":{},"109":{},"114":{},"117":{},"119":{},"125":{},"127":{},"128":{},"130":{},"134":{},"136":{},"137":{},"138":{},"139":{},"142":{},"146":{},"151":{},"152":{},"154":{},"158":{},"162":{},"165":{}},"component":{},"keyword":{}}],["formal",{"_index":3575,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["format",{"_index":1122,"title":{"58-3":{},"59-2":{},"59-3":{},"114-2":{},"115-2":{},"115-3":{},"162-2":{},"163-2":{},"163-3":{}},"name":{},"text":{"7":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"23":{},"26":{},"32":{},"35":{},"41":{},"44":{},"52":{},"59":{},"61":{},"63":{},"69":{},"72":{},"74":{},"76":{},"77":{},"79":{},"80":{},"83":{},"86":{},"92":{},"98":{},"102":{},"108":{},"115":{},"117":{},"118":{},"123":{},"125":{},"127":{},"128":{},"130":{},"131":{},"133":{},"134":{},"137":{},"144":{},"152":{},"157":{},"165":{}},"component":{},"keyword":{}}],["formatt",{"_index":3005,"title":{"41-9":{},"98-8":{}},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["forth",{"_index":487,"title":{},"name":{},"text":{"3":{},"6":{},"13":{},"16":{},"40":{},"52":{},"68":{},"97":{},"110":{},"122":{},"159":{}},"component":{},"keyword":{}}],["forthcom",{"_index":3747,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["fortun",{"_index":1690,"title":{},"name":{},"text":{"11":{},"13":{},"14":{},"16":{},"74":{},"76":{},"77":{},"128":{},"130":{},"131":{}},"component":{},"keyword":{}}],["forward",{"_index":1364,"title":{},"name":{},"text":{"10":{},"11":{},"23":{},"41":{},"46":{},"73":{},"74":{},"83":{},"98":{},"104":{},"128":{},"137":{},"154":{},"157":{}},"component":{},"keyword":{}}],["found",{"_index":1309,"title":{"30-4":{},"88-7":{},"141-6":{}},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"19":{},"23":{},"30":{},"41":{},"47":{},"61":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"80":{},"83":{},"88":{},"98":{},"110":{},"117":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"134":{},"137":{},"141":{},"154":{},"156":{},"159":{},"165":{}},"component":{},"keyword":{}}],["found\\n",{"_index":1777,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["four",{"_index":1815,"title":{"81-5":{},"135-5":{}},"name":{},"text":{"12":{},"22":{},"37":{},"82":{},"136":{}},"component":{},"keyword":{}}
1],["fourth",{"_index":2682,"title":{},"name":{},"text":{"23":{},"53":{},"83":{},"137":{}},"component":{},"keyword":{}}],["fraction",{"_index":3196,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["fragment",{"_index":360,"title":{"3-7":{},"51-3":{}},"name":{},"text":{"3":{},"13":{},"44":{},"51":{},"52":{},"76":{},"102":{},"130":{},"152":{}},"component":{},"keyword":{}}],["frame",{"_index":679,"title":{},"name":{},"text":{"4":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"32":{},"67":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"90":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"142":{},"159":{}},"component":{},"keyword":{}}],["framework",{"_index":204,"title":{},"name":{},"text":{"2":{},"3":{},"11":{},"12":{},"13":{},"18":{},"22":{},"23":{},"24":{},"41":{},"43":{},"50":{},"65":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"84":{},"98":{},"107":{},"120":{},"121":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"138":{}},"component":{},"keyword":{}}],["fraud",{"_index":910,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["free",{"_index":13,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"6":{},"9":{},"11":{},"12":{},"13":{},"22":{},"23":{},"47":{},"65":{},"66":{},"68":{},"71":{},"74":{},"75":{},"76":{},"82":{},"83":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"136":{},"137":{}},"component":{},"keyword":{}}],["freed",{"_index":3295,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["frequent",{"_index":389,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["fresh",{"_index":470,"title":{},"name":{},"text":{"3":{},"14":{},"16":{}},"component":{},"keyword":{}}],["fri",{"_index":1819,"title":{},"name":{},"text":{"12":{},"13":{},"14":{},"73":{},"76":{},"77":{},"130":{},"131":{}},"component":{},"keyword":{}}],["friction",{"_index":517,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["friendli",{"_index":1798,"title":{},"name":{},"text":{"12":{},"23":{},"27":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["friendlier",{"_index":3348,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["front",{"_index":750,"title":{"23-8":{},"83-8":{},"137-8":{}},"name":{},"text":{"5":{},"11":{},"17":{},"66":{},"121":{}},"component":{},"keyword":{}}],["fruit",{"_index":628,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["frustrat",{"_index":1871,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["fs",{"_index":2459,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/copi",{"_index":2467,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/creat",{"_index":2471,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/delet",{"_index":2470,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/directori",{"_index":2474,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/file",{"_index":2473,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/path",{"_index":2465,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["fs/zip",{"_index":2476,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["ftp",{"_index":3119,"title":{},"name":{},"text":{"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["full",{"_index":497,"title":{},"name":{},"text":{"3":{},"5":{},"9":{},"10":{},"11":{},"13":{},"16":{},"19":{},"21":{},"32":{},"35":{},"37":{},"41":{},"47":{},"51":{},"66":{},"71":{},"72":{},"73":{},"74":{},"76":{},"78":{},"90":{},"92":{},"94":{},"98":{},"100":{},"110":{},"125":{},"127":{},"128":{},"130":{},"132":{},"142":{},"144":{},"146":{},"151":{},"159":{}},"component":{},"keyword":{}}],["fulli",{"_index":490,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"9":{},"15":{},"19":{},"20":{},"21":{},"26":{},"27":{},"41":{},"46":{},"57":{},"61":{},"64":{},"80":{},"98":{},"100":{},"104":{},"108":{},"113":{},"117":{},"134":{},"151":{},"157":{},"161":{},"165":{}},"component":{},"keyword":{}}],["function",{"_index":413,"title":{"23-7":{},"32-1":{},"49-3":{},"51-2":{},"52-2":{},"54-3":{},"57-1":{},"77-2":{},"83-7":{},"90-1":{},"105-2":{},"109-3":{},"113-1":{},"131-2":{},"137-7":{},"142-1":{},"158-3":{},"161-1":{}},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"35":{},"37":{},"38":{},"39":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"61":{},"62":{},"64":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"92":{},"94":{},"95":{},"96":{},"98":{},"100":{},"101":{},"102":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"117":{},"119":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"146":{},"147":{},"151":{},"152":{},"154":{},"155":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["function(",{"_index":3698,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["function[clojure.core/constantly/fn",{"_index":3381,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["function[io.pedestal.interceptor.helpers/on",{"_index":3371,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["function[io.pedestal.interceptor/eval155/fn",{"_index":3376,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}
1],["functions[1",{"_index":2648,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["function’",{"_index":2693,"title":{},"name":{},"text":{"23":{},"37":{},"49":{},"57":{},"105":{},"113":{},"161":{}},"component":{},"keyword":{}}],["fund",{"_index":2783,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["fundament",{"_index":952,"title":{},"name":{},"text":{"6":{},"68":{},"72":{},"78":{},"122":{},"127":{},"132":{}},"component":{},"keyword":{}}],["funki",{"_index":2778,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["further",{"_index":493,"title":{"109-5":{},"158-5":{}},"name":{},"text":{"3":{},"11":{},"13":{},"19":{},"22":{},"24":{},"29":{},"37":{},"41":{},"50":{},"53":{},"59":{},"64":{},"74":{},"76":{},"77":{},"82":{},"84":{},"87":{},"92":{},"94":{},"98":{},"107":{},"115":{},"128":{},"130":{},"136":{},"138":{},"140":{},"144":{},"146":{}},"component":{},"keyword":{}}],["futur",{"_index":659,"title":{"6-12":{},"68-12":{},"122-12":{}},"name":{},"text":{"4":{},"6":{},"8":{},"18":{},"24":{},"29":{},"37":{},"67":{},"68":{},"70":{},"84":{},"87":{},"98":{},"101":{},"122":{},"126":{},"138":{}},"component":{},"keyword":{}}],["gain",{"_index":821,"title":{"6-7":{},"68-7":{},"122-7":{}},"name":{},"text":{},"component":{},"keyword":{}}],["gamut",{"_index":3281,"title":{},"name":{},"text":{"62":{}},"component":{},"keyword":{}}],["gateway",{"_index":3887,"title":{},"name":{},"text":{"104":{},"154":{}},"component":{},"keyword":{}}],["gather",{"_index":1362,"title":{"10-5":{},"73-5":{}},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["gaug",{"_index":3059,"title":{"100-4":{},"151-4":{}},"name":{},"text":{"43":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["gave",{"_index":254,"title":{},"name":{},"text":{"2":{},"65":{},"76":{},"120":{},"130":{}},"component":{},"keyword":{}}],["gear",{"_index":2656,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["geeta",{"_index":1857,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["gen",{"_index":3339,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["gener",{"_index":454,"title":{"9-21":{},"9-22":{},"9-23":{},"13-9":{},"71-21":{},"71-22":{},"71-23":{},"72-10":{},"72-12":{},"76-9":{},"79-7":{},"124-1":{},"125-21":{},"125-22":{},"125-23":{},"127-10":{},"127-12":{},"130-9":{},"133-7":{},"164-2":{}},"name":{},"text":{"3":{},"6":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"32":{},"37":{},"38":{},"39":{},"41":{},"44":{},"48":{},"51":{},"52":{},"53":{},"61":{},"63":{},"68":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"90":{},"94":{},"96":{},"98":{},"100":{},"102":{},"106":{},"108":{},"117":{},"118":{},"122":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"146":{},"151":{},"152":{},"156":{},"157":{},"165":{}},"component":{},"keyword":{}}],["genet",{"_index":871,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["gensym",{"_index":2740,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["gentlemen",{"_index":3329,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["get",{"_index":791,"title":{"9-4":{},"11-4":{},"12-4":{},"13-4":{},"16-3":{},"17-2":{},"18-4":{},"21-4":{},"23-4":{},"71-4":{},"72-4":{},"74-4":{},"75-4":{},"76-4":{},"78-3":{},"79-4":{},"83-4":{},"125-4":{},"127-4":{},"128-4":{},"129-4":{},"130-4":{},"132-3":{},"133-4":{},"137-4":{}},"name":{},"text":{"5":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"23":{},"26":{},"32":{},"46":{},"66":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"81":{},"83":{},"86":{},"90":{},"104":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"135":{},"137":{},"142":{},"154":{}},"component":{},"keyword":{}}],["get│/*path│:io.pedestal.service.resources/get",{"_index":1426,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["get│/api/greet│:greet",{"_index":2210,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["get│/greet│:greet",{"_index":2195,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["get│/hello│:com.blueant.peripheral.routes/hello",{"_index":1428,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["get│/hello│:org.example.hello/hello",{"_index":2070,"title":{},"name":{},"text":{"14":{}},"component":{},"keyword":{}}],["giant",{"_index":1982,"title":{},"name":{},"text":{"13":{},"23":{},"76":{},"130":{}},"component":{},"keyword":{}}],["gist",{"_index":278,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["git",{"_index":1390,"title":{"39-2":{},"96-2":{}},"name":{},"text":{"10":{},"17":{},"20":{},"73":{},"75":{},"78":{},"79":{},"83":{},"124":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["git/sha",{"_index":2159,"title":{},"name":{},"text":{"16":{},"39":{},"78":{},"96":{}},"component":{},"keyword":{}}],["git/tag",{"_index":2157,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["git/url",{"_index":2996,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["git/url’",{"_index":3000,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["github",{"_index":85,"title":{},"name":{},"text":{"1":{},"2":{},"13":{},"39":{},"65":{},"76":{},"96":{},"120":{},"130":{}},"component":{},"keyword":{}}],["give",{"_index":218,"title":{},"name":{},"text":{"2":{},"5":{},"9":{},"12":{},"13":{},"16":{},"22":{},"23":{},"32":{},"53":{},"65":{},"66":{},"71":{},"75":{},"76":{},"77":{},"82":{},"83":{},"90":{},"100":{},"120":{},"121":{},"125":{},"129":{},"130":{},"131":{},"136":{},"137":{},"142":{},"151":{}},"component":{},"keyword":{}}],["given",{"_index":616,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"11":{},"19":{},"24":{},"61":{},"67":{},"71":{},"72":{},"76":{},"77":{},"80":{},"84":{},"88":{},"117":{},"125":{},"127":{},"130":{},"134":{},"138":{},"141":{},"165":{}},"component":{},"keyword":{}}],["glad",{"_index":1925,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["glanc",{"_index":1235,"title":{},"name":{},"text":{"9":{},"12":{},"71":{}},"component":{},"keyword":{}}],["glob",{"_index":3504,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["global",{"_index":1338,"title":{},"name":{},"text":{"9":{},"16":{},"41":{},"71":{},"73":{},"98":{},"125":{},"160":{}},"component":{},"keyword":{}}
1],["glue",{"_index":2692,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["glyph.png",{"_index":1408,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["gmt",{"_index":1460,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"128":{},"129":{},"130":{},"131":{},"132":{}},"component":{},"keyword":{}}],["gmt\\r\\nstrict",{"_index":3439,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["go",{"_index":139,"title":{"9-5":{},"11-5":{},"12-5":{},"13-5":{},"16-4":{},"17-3":{},"18-6":{},"21-6":{},"23-5":{},"71-5":{},"74-5":{},"75-5":{},"76-5":{},"78-4":{},"79-5":{},"83-5":{},"125-5":{},"128-5":{},"129-5":{},"130-5":{},"132-4":{},"133-5":{},"137-5":{}},"name":{},"text":{"2":{},"3":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"22":{},"23":{},"24":{},"32":{},"45":{},"52":{},"57":{},"65":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"84":{},"90":{},"103":{},"108":{},"113":{},"120":{},"124":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"138":{},"142":{},"153":{},"157":{},"161":{}},"component":{},"keyword":{}}],["goal",{"_index":605,"title":{"22-2":{},"82-2":{},"136-2":{}},"name":{},"text":{"3":{},"12":{},"14":{},"22":{},"75":{},"77":{},"82":{},"129":{},"131":{},"136":{}},"component":{},"keyword":{}}],["goe",{"_index":1351,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"16":{},"19":{},"23":{},"25":{},"71":{},"74":{},"76":{},"83":{},"121":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["gone",{"_index":1229,"title":{},"name":{},"text":{"9":{},"12":{},"71":{},"75":{},"125":{},"129":{}},"component":{},"keyword":{}}],["good",{"_index":138,"title":{},"name":{},"text":{"2":{},"3":{},"11":{},"14":{},"15":{},"16":{},"19":{},"22":{},"24":{},"44":{},"47":{},"61":{},"65":{},"74":{},"75":{},"77":{},"80":{},"82":{},"83":{},"84":{},"102":{},"117":{},"120":{},"125":{},"128":{},"129":{},"131":{},"134":{},"136":{},"137":{},"138":{},"152":{},"165":{}},"component":{},"keyword":{}}],["goodby",{"_index":2630,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["govern",{"_index":1013,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["grab",{"_index":1602,"title":{},"name":{},"text":{"11":{},"12":{},"15":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["gracefulli",{"_index":43,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["gradual",{"_index":1609,"title":{},"name":{},"text":{"11":{},"76":{},"130":{}},"component":{},"keyword":{}}],["grander",{"_index":2377,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["great",{"_index":1593,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"24":{},"72":{},"74":{},"75":{},"76":{},"83":{},"84":{},"127":{},"128":{},"129":{},"130":{},"137":{},"138":{}},"component":{},"keyword":{}}],["greater",{"_index":535,"title":{},"name":{},"text":{"3":{},"9":{},"15":{},"38":{},"72":{},"127":{}},"component":{},"keyword":{}}],["greek",{"_index":2914,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["green",{"_index":2238,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["greet",{"_index":756,"title":{"12-12":{}},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"20":{},"23":{},"74":{},"75":{},"76":{},"78":{},"83":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["greet?name=michael",{"_index":1823,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["greeter",{"_index":2074,"title":{"15-1":{},"16-12":{}},"name":{},"text":{"15":{},"16":{},"75":{},"129":{}},"component":{},"keyword":{}}],["greeter/gener",{"_index":2102,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["greeter/new",{"_index":2124,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["ground",{"_index":2029,"title":{},"name":{},"text":{"13":{},"24":{},"76":{},"130":{}},"component":{},"keyword":{}}],["group",{"_index":1379,"title":{},"name":{},"text":{"10":{},"39":{},"52":{},"73":{},"96":{},"108":{}},"component":{},"keyword":{}}],["grow",{"_index":1053,"title":{},"name":{},"text":{"6":{},"10":{},"15":{},"16":{},"68":{},"72":{},"73":{},"78":{},"110":{},"122":{},"127":{},"132":{}},"component":{},"keyword":{}}],["grown",{"_index":657,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["grudgingli",{"_index":3866,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["guarante",{"_index":2909,"title":{},"name":{},"text":{"32":{}},"component":{},"keyword":{}}],["guardian",{"_index":941,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["guess",{"_index":1278,"title":{},"name":{},"text":{"9":{},"71":{},"75":{},"125":{},"129":{}},"component":{},"keyword":{}}],["guid",{"_index":188,"title":{"9-3":{},"11-3":{},"12-3":{},"13-3":{},"16-2":{},"17-1":{},"18-3":{},"21-3":{},"23-3":{},"71-3":{},"72-3":{},"74-3":{},"75-3":{},"76-3":{},"78-2":{},"79-3":{},"83-3":{},"125-3":{},"127-3":{},"128-3":{},"129-3":{},"130-3":{},"132-2":{},"133-3":{},"137-3":{}},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"28":{},"37":{},"65":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"94":{},"120":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"146":{}},"component":{},"keyword":{}}],["h",{"_index":1735,"title":{},"name":{},"text":{"11":{},"15":{},"16":{},"74":{},"128":{}},"component":{},"keyword":{}}],["h/ordin",{"_index":2097,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["h2",{"_index":2966,"title":{},"name":{},"text":{"38":{},"79":{},"95":{},"133":{},"147":{}},"component":{},"keyword":{}}],["h2c",{"_index":2962,"title":{},"name":{},"text":{"38":{},"79":{},"95":{},"133":{},"147":{}},"component":{},"keyword":{}}],["h2c)}{127.0.0.1:8080",{"_index":2314,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["h2c)}{localhost:8080",{"_index":3689,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["h2c)}{localhost:8890",{"_index":3487,"title":{},"name":{},"text":{"75":{},"78":{},"83":{},"129":{},"132":{},"137":{}},"component":{},"keyword":{}}],["h2c]}{localhost:8890",{"_index":3625,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["hack",{"_index":116,"title":{"2-1":{},"65-1":{},"120-1":{}},"name":{},"text":{},"component":{},"keyword":{}}],["half",{"_index":1890,"title":{},"name":{},"text":{"12":{},"39":{},"96":{}},"component":{},"keyword":{}}],["halloway",{"_index":1886,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["hand",{"_index":1219,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"31":{},"47":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"89":{},"124":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["handi",{"_index":1611,"title":{},"name":{},"text":{"11":{},"16":{},"74":{},"83":{},"128":{},"137":{}},"component":{},"keyword":{}}],["handl",{"_index":412,"title":{"32":{},"90":{},"142":{},"12-13":{},"22-10":{},"37-6":{},"82-10":{},"94-7":{},"136-10":{},"142-3":{},"146-6":{}},"name":{"32":{},"90":{},"142":{}},"text":{"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"21":{},"22":{},"23":{},"24":{},"29":{},"32":{},"37":{},"44":{},"49":{},"52":{},"53":{},"55":{},"64":{},"66":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"79":{},"81":{},"82":{},"83":{},"84":{},"87":{},"90":{},"94":{},"102":{},"105":{},"108":{},"112":{},"121":{},"122":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"133":{},"135":{},"136":{},"137":{},"138":{},"140":{},"142":{},"143":{},"146":{},"152":{},"155":{},"157":{},"160":{}},"component":{},"keyword":{}}],["handler",{"_index":701,"title":{"8-2":{},"9-9":{},"9-20":{},"15-2":{}
1,"26-8":{},"37-5":{},"58-10":{},"59-8":{},"70-2":{},"71-9":{},"71-20":{},"72-8":{},"94-5":{},"114-9":{},"115-8":{},"125-9":{},"125-20":{},"126-2":{},"127-8":{},"146-5":{},"162-9":{},"163-8":{}},"name":{},"text":{"4":{},"5":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"29":{},"32":{},"37":{},"48":{},"50":{},"58":{},"59":{},"61":{},"63":{},"67":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"106":{},"107":{},"110":{},"114":{},"115":{},"117":{},"118":{},"119":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"143":{},"144":{},"146":{},"157":{},"159":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["handler/get",{"_index":2125,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["handlers/new",{"_index":2127,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["handler’",{"_index":1243,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["handling/log",{"_index":2906,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["handshak",{"_index":2971,"title":{},"name":{},"text":{"38":{},"64":{}},"component":{},"keyword":{}}],["hang",{"_index":3505,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["haphazard",{"_index":572,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["happen",{"_index":244,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"8":{},"9":{},"12":{},"14":{},"17":{},"20":{},"23":{},"25":{},"65":{},"67":{},"70":{},"71":{},"75":{},"77":{},"78":{},"83":{},"100":{},"120":{},"125":{},"126":{},"129":{},"131":{},"132":{},"137":{},"151":{}},"component":{},"keyword":{}}],["harass",{"_index":12,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["hard",{"_index":1212,"title":{"11-7":{},"74-7":{},"128-7":{}},"name":{},"text":{"9":{},"11":{},"26":{},"52":{},"59":{},"61":{},"71":{},"75":{},"80":{},"86":{},"108":{},"115":{},"117":{},"125":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["hardcod",{"_index":1901,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["harder",{"_index":2086,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["harm",{"_index":2932,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["hash",{"_index":3385,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["have",{"_index":526,"title":{},"name":{},"text":{"3":{},"23":{},"32":{},"41":{},"61":{},"72":{},"81":{},"90":{},"98":{},"117":{},"127":{},"134":{},"135":{},"142":{},"165":{}},"component":{},"keyword":{}}],["haven’t",{"_index":1225,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"23":{},"71":{},"74":{},"75":{},"76":{},"79":{},"83":{},"125":{},"128":{},"129":{},"130":{},"133":{},"137":{}},"component":{},"keyword":{}}],["head",{"_index":1287,"title":{},"name":{},"text":{"9":{},"11":{},"24":{},"26":{},"47":{},"58":{},"62":{},"71":{},"72":{},"74":{},"79":{},"84":{},"86":{},"110":{},"114":{},"125":{},"127":{},"128":{},"133":{},"137":{},"138":{},"159":{},"162":{}},"component":{},"keyword":{}}],["header",{"_index":781,"title":{"19-5":{},"30-9":{},"88-15":{},"110-5":{},"141-14":{},"159-3":{}},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"21":{},"23":{},"24":{},"27":{},"30":{},"44":{},"46":{},"48":{},"54":{},"55":{},"57":{},"61":{},"64":{},"66":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"83":{},"84":{},"88":{},"102":{},"104":{},"106":{},"109":{},"110":{},"112":{},"113":{},"117":{},"121":{},"124":{},"128":{},"129":{},"130":{},"131":{},"133":{},"134":{},"137":{},"138":{},"141":{},"152":{},"154":{},"156":{},"158":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["headers/secur",{"_index":1465,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{},"159":{}},"component":{},"keyword":{}}],["head│/*path│:io.pedestal.service.resources/head",{"_index":1427,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["health",{"_index":854,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["hear",{"_index":1595,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"83":{},"125":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["heart",{"_index":1716,"title":{},"name":{},"text":{"11":{},"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["heartbeat",{"_index":3216,"title":{},"name":{},"text":{"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["heavi",{"_index":1750,"title":{},"name":{},"text":{"11":{},"13":{},"20":{},"74":{},"76":{},"128":{},"130":{}},"component":{},"keyword":{}}],["heavili",{"_index":2775,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["heirarchi",{"_index":2110,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["held",{"_index":2942,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["hell",{"_index":390,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["hello",{"_index":249,"title":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"name":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"text":{"2":{},"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"59":{},"61":{},"65":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"115":{},"117":{},"120":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"163":{},"165":{}},"component":{},"keyword":{}}],["hello.clj",{"_index":1599,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["hello.clj:2",{"_index":1701,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["hello.clj:55:3",{"_index":1622,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["hello/eval140$load",{"_index":1700,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["hello/greet",{"_index":1998,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["hello/respond",{"_index":3558,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["hello/restart",{"_index":1829,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["hello/rout",{"_index":3560,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["hello/start",{"_index":1811,"title":{},"name":{},"text":{"12":{},"13":{},"75":{},"76":{},"129":{},"130":{}},"component":{},"keyword":{}}
1],["help",{"_index":184,"title":{"9-4":{},"11-4":{},"12-4":{},"13-4":{},"16-3":{},"17-2":{},"18-4":{},"21-4":{},"23-4":{},"71-4":{},"72-4":{},"74-4":{},"75-4":{},"76-4":{},"78-3":{},"79-4":{},"83-4":{},"125-4":{},"127-4":{},"128-4":{},"129-4":{},"130-4":{},"132-3":{},"133-4":{},"137-4":{}},"name":{},"text":{"2":{},"3":{},"6":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"65":{},"68":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["help.adoc",{"_index":3954,"title":{},"name":{},"text":{"127":{}},"component":{},"keyword":{}}],["helper",{"_index":1908,"title":{},"name":{},"text":{"12":{},"16":{},"19":{},"23":{},"24":{},"61":{},"75":{},"78":{},"80":{},"83":{},"84":{},"117":{},"129":{},"132":{},"134":{},"137":{},"138":{},"165":{}},"component":{},"keyword":{}}],["henc",{"_index":1947,"title":{},"name":{},"text":{"13":{},"74":{},"76":{},"128":{},"130":{}},"component":{},"keyword":{}}],["here",{"_index":197,"title":{},"name":{},"text":{"2":{},"3":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"32":{},"37":{},"54":{},"57":{},"65":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"88":{},"90":{},"92":{},"94":{},"108":{},"109":{},"113":{},"120":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"141":{},"142":{},"144":{},"146":{},"158":{},"161":{}},"component":{},"keyword":{}}],["here,th",{"_index":1250,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["herein",{"_index":965,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["here’",{"_index":1246,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"16":{},"23":{},"24":{},"61":{},"71":{},"74":{},"75":{},"79":{},"80":{},"83":{},"84":{},"117":{},"125":{},"128":{},"129":{},"133":{},"134":{},"137":{},"138":{},"165":{}},"component":{},"keyword":{}}],["hi",{"_index":2065,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["hiccup",{"_index":3637,"title":{"79-8":{},"133-8":{}},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["hiccup.cor",{"_index":3695,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["hiccup/html",{"_index":3704,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["hidden",{"_index":2246,"title":{},"name":{},"text":{"16":{},"23":{},"59":{},"83":{},"115":{},"137":{}},"component":{},"keyword":{}}],["hierarch",{"_index":3315,"title":{},"name":{},"text":{"71":{},"125":{}},"component":{},"keyword":{}}],["hierarchi",{"_index":3950,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["high",{"_index":2020,"title":{"24-2":{}},"name":{},"text":{"13":{},"33":{},"52":{},"76":{},"108":{},"130":{},"157":{}},"component":{},"keyword":{}}],["higher",{"_index":2138,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["highest",{"_index":2168,"title":{},"name":{},"text":{"16":{},"76":{},"130":{}},"component":{},"keyword":{}}],["highli",{"_index":2244,"title":{},"name":{},"text":{"16":{},"32":{},"78":{},"90":{},"132":{},"142":{}},"component":{},"keyword":{}}],["highlight",{"_index":2239,"title":{},"name":{},"text":{"16":{},"23":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["hill",{"_index":1065,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["hint",{"_index":3071,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["his/her",{"_index":983,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["histogram",{"_index":3062,"title":{"100-5":{},"151-5":{}},"name":{},"text":{"43":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["histor",{"_index":3227,"title":{},"name":{},"text":{"55":{}},"component":{},"keyword":{}}],["hit",{"_index":2024,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["hk",{"_index":754,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["hk/creat",{"_index":764,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["hold",{"_index":928,"title":{},"name":{},"text":{"6":{},"13":{},"14":{},"37":{},"68":{},"76":{},"77":{},"94":{},"122":{},"124":{},"130":{},"131":{},"146":{}},"component":{},"keyword":{}}],["home",{"_index":2338,"title":{},"name":{},"text":{"18":{},"21":{},"58":{},"72":{},"79":{},"114":{},"125":{},"127":{},"133":{},"162":{}},"component":{},"keyword":{}}],["honor",{"_index":1686,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["hood",{"_index":1610,"title":{},"name":{},"text":{"11":{},"14":{},"74":{},"128":{}},"component":{},"keyword":{}}],["hook",{"_index":1535,"title":{"13-12":{},"76-12":{},"130-12":{}},"name":{},"text":{"10":{},"13":{},"73":{},"76":{},"130":{}},"component":{},"keyword":{}}],["hop",{"_index":1217,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["hope",{"_index":1909,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["host",{"_index":1650,"title":{},"name":{},"text":{"11":{},"12":{},"17":{},"20":{},"27":{},"38":{},"46":{},"52":{},"58":{},"59":{},"63":{},"72":{},"73":{},"74":{},"75":{},"79":{},"81":{},"83":{},"104":{},"108":{},"110":{},"114":{},"115":{},"118":{},"127":{},"128":{},"129":{},"133":{},"135":{},"137":{},"154":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["hostnam",{"_index":2850,"title":{},"name":{},"text":{"27":{},"53":{},"100":{},"110":{},"151":{},"159":{}},"component":{},"keyword":{}}],["host’",{"_index":3123,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["hot",{"_index":2018,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}
1],["hotspot",{"_index":266,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["hous",{"_index":3596,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["howard",{"_index":253,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["howard’",{"_index":3926,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["href",{"_index":1210,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["hst",{"_index":3908,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["html",{"_index":1572,"title":{},"name":{},"text":{"11":{},"12":{},"44":{},"74":{},"75":{},"79":{},"102":{},"121":{},"128":{},"129":{},"133":{},"152":{}},"component":{},"keyword":{}}],["http",{"_index":347,"title":{"33":{},"3-2":{},"24-4":{},"29-4":{},"58-8":{},"72-6":{},"87-3":{},"114-7":{},"127-6":{},"140-3":{},"162-7":{}},"name":{"33":{}},"text":{"3":{},"4":{},"5":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"29":{},"32":{},"33":{},"37":{},"38":{},"39":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"54":{},"55":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"95":{},"96":{},"102":{},"104":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"114":{},"115":{},"117":{},"118":{},"119":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"144":{},"146":{},"147":{},"152":{},"154":{},"156":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["http.rout",{"_index":3276,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["http.routes/expand",{"_index":3279,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["http.routes/url",{"_index":3278,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["http.xml",{"_index":2555,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["http/1.1",{"_index":1488,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"17":{},"20":{},"38":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"95":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"147":{}},"component":{},"keyword":{}}],["http/1.1)}{0.0.0.0:8080",{"_index":2591,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["http/1.1)}{127.0.0.1:8443",{"_index":2320,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["http/2",{"_index":2963,"title":{},"name":{},"text":{"38":{},"95":{},"143":{},"147":{}},"component":{},"keyword":{}}],["http/allow",{"_index":3664,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["http/chain",{"_index":3893,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/contain",{"_index":3678,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["http/creat",{"_index":3478,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"88":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"141":{},"159":{}},"component":{},"keyword":{}}],["http/default",{"_index":3659,"title":{},"name":{},"text":{"79":{},"88":{},"133":{},"141":{},"159":{}},"component":{},"keyword":{}}],["http/enabl",{"_index":3894,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/file",{"_index":3895,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/host",{"_index":3677,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["http/html",{"_index":3656,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["http/http",{"_index":2857,"title":{},"name":{},"text":{"28":{}},"component":{},"keyword":{}}],["http/initi",{"_index":3896,"title":{},"name":{},"text":{"110":{}},"component":{},"keyword":{}}],["http/interceptor",{"_index":3660,"title":{},"name":{},"text":{"79":{},"88":{},"110":{},"133":{},"141":{},"159":{}},"component":{},"keyword":{}}],["http/join",{"_index":3479,"title":{},"name":{},"text":{"74":{},"75":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/method",{"_index":3897,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/mime",{"_index":3898,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/not",{"_index":3900,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/port",{"_index":3476,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/resourc",{"_index":3673,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["http/rout",{"_index":3474,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/router",{"_index":3849,"title":{},"name":{},"text":{"92":{},"110":{},"144":{},"159":{}},"component":{},"keyword":{}}],["http/secur",{"_index":3671,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["http/servic",{"_index":3633,"title":{},"name":{},"text":{"78":{},"83":{},"110":{},"112":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/servlet",{"_index":3902,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["http/start",{"_index":3477,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/stop",{"_index":3480,"title":{},"name":{},"text":{"74":{},"75":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/type",{"_index":3475,"title":{},"name":{},"text":{"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["http/websocket",{"_index":648,"title":{},"name":{},"text":{"4":{},"110":{}},"component":{},"keyword":{}}],["http2",{"_index":2956,"title":{},"name":{},"text":{"38":{},"96":{},"143":{}},"component":{},"keyword":{}}],["http2c",{"_index":2957,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["http://127.0.0.1:8890/greet",{"_index":2014,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["http://java.sun.com/xml/ns/javaee/web",{"_index":2441,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["http://localhost:8080",{"_index":2323,"title":{},"name":{},"text":{"17":{},"72":{},"79":{},"127":{},"133":{}},"component":{},"keyword":{}}],["http://localhost:8080/about",{"_index":3387,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["http://localhost:8080/count",{"_index":3691,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["http://localhost:8080/hello",{"_index":1542,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["http://localhost:8080/index.html",{"_index":1434,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["http://localhost:8890",{"_index":2344,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["http://localhost:8890/api/greet",{"_index":2211,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["http://localhost:8890/count",{"_index":2357,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["http://localhost:8890/echo",{"_index":1646,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet",{"_index":1682,"title":{},"name":{},"text":{"11":{},"12":{},"16":{},"74":{},"75":{},"78":{},"128":{},"129":{},"132":{}},"component":{},"keyword":{}}
1],["http://localhost:8890/greet?name=michael",{"_index":1804,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?nam",{"_index":1858,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=geeta",{"_index":1856,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=he%20who%20must%20not%20be%20nam",{"_index":1913,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=michael",{"_index":1818,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=no%20one%20to%20be%20trifled%20with",{"_index":1859,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=pankaj",{"_index":1854,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=rumplestiltskin",{"_index":1911,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://localhost:8890/greet\\?name=voldemort",{"_index":1912,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["http://pedestal.io/reference/architectur",{"_index":3675,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["http:;\\r\\ncontent",{"_index":3446,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["httpconfigur",{"_index":2953,"title":{"38-2":{},"95-2":{},"147-2":{}},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["httpie",{"_index":2043,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["httpinputoverhttp@20486b9d[c=0,q=0,[0]=null,s=stream",{"_index":3536,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["httpinputoverhttp@28234bf2[c=0,q=0,[0]=null,s=stream",{"_index":3458,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["httprouter",{"_index":3106,"title":{},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["https://%s:%s%s%",{"_index":2282,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["https://content",{"_index":3668,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["https://github.com/pedestal/pedest",{"_index":137,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["https://github.com/pedestal/pedestal.git",{"_index":2997,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["https://github.com/pedestal/pedestal/issues/499",{"_index":3670,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["https://localhost:8443",{"_index":2324,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["https://www.contributor",{"_index":114,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["https://www.slf4j.org/codes.html#noprovid",{"_index":3012,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["httpservlet",{"_index":402,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["httpservletrequest",{"_index":485,"title":{},"name":{},"text":{"3":{},"20":{},"29":{},"46":{},"87":{},"140":{}},"component":{},"keyword":{}}],["httpservletrespons",{"_index":486,"title":{},"name":{},"text":{"3":{},"20":{},"29":{},"46":{},"87":{},"140":{}},"component":{},"keyword":{}}],["huge",{"_index":1842,"title":{},"name":{},"text":{"12":{},"13":{},"76":{},"121":{},"130":{}},"component":{},"keyword":{}}],["human",{"_index":1578,"title":{},"name":{},"text":{"11":{},"41":{},"74":{},"98":{},"128":{}},"component":{},"keyword":{}}],["hundr",{"_index":2005,"title":{},"name":{},"text":{"13":{},"47":{},"100":{},"151":{}},"component":{},"keyword":{}}],["hurt",{"_index":1613,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}
1],["hygien",{"_index":2664,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["hyperlink",{"_index":1326,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["hyphen",{"_index":1944,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["i.",{"_index":2945,"title":{},"name":{},"text":{"37":{},"61":{},"80":{},"102":{},"104":{},"117":{},"134":{},"152":{},"154":{},"161":{},"165":{}},"component":{},"keyword":{}}],["i/o",{"_index":1150,"title":{},"name":{},"text":{"8":{},"16":{},"37":{},"57":{},"70":{},"94":{},"113":{},"126":{},"146":{},"161":{}},"component":{},"keyword":{}}],["id",{"_index":1260,"title":{},"name":{},"text":{"9":{},"10":{},"13":{},"14":{},"18":{},"19":{},"22":{},"23":{},"29":{},"32":{},"41":{},"44":{},"46":{},"50":{},"52":{},"53":{},"54":{},"58":{},"59":{},"61":{},"71":{},"72":{},"73":{},"77":{},"80":{},"82":{},"83":{},"87":{},"90":{},"98":{},"102":{},"107":{},"108":{},"114":{},"115":{},"117":{},"125":{},"127":{},"131":{},"134":{},"136":{},"137":{},"140":{},"142":{},"152":{},"157":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["id+for",{"_index":3682,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["id/:item",{"_index":2689,"title":{},"name":{},"text":{"23":{},"83":{},"125":{},"137":{}},"component":{},"keyword":{}}
1],["id/priv",{"_index":1292,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["id/profil",{"_index":1330,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["id/profile/*subpag",{"_index":1276,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["id/timelin",{"_index":1328,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["id=\"webapp_id",{"_index":2442,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["idea",{"_index":2147,"title":{},"name":{},"text":{"16":{},"24":{},"78":{},"84":{},"132":{},"138":{}},"component":{},"keyword":{}}],["ideal",{"_index":2943,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["idempot",{"_index":3602,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["ident",{"_index":18,"title":{},"name":{},"text":{"1":{},"6":{},"9":{},"68":{},"71":{},"122":{},"125":{}},"component":{},"keyword":{}}],["identifi",{"_index":587,"title":{},"name":{},"text":{"3":{},"6":{},"10":{},"11":{},"13":{},"16":{},"19":{},"22":{},"23":{},"25":{},"26":{},"29":{},"30":{},"32":{},"35":{},"41":{},"43":{},"44":{},"46":{},"47":{},"50":{},"52":{},"58":{},"59":{},"63":{},"68":{},"69":{},"73":{},"74":{},"76":{},"82":{},"83":{},"85":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"98":{},"101":{},"102":{},"104":{},"107":{},"108":{},"114":{},"115":{},"118":{},"122":{},"123":{},"128":{},"130":{},"136":{},"137":{},"139":{},"140":{},"142":{},"144":{},"152":{},"154":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["idiom",{"_index":3600,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["idiomat",{"_index":3091,"title":{},"name":{},"text":{"44":{},"78":{},"102":{},"132":{},"152":{}},"component":{},"keyword":{}}],["idl",{"_index":2977,"title":{},"name":{},"text":{"38":{},"64":{},"119":{}},"component":{},"keyword":{}}],["id’",{"_index":2910,"title":{},"name":{},"text":{"32":{}},"component":{},"keyword":{}}],["if`",{"_index":1762,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["ignor",{"_index":1241,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"16":{},"19":{},"22":{},"32":{},"38":{},"48":{},"53":{},"57":{},"64":{},"74":{},"75":{},"79":{},"82":{},"90":{},"95":{},"106":{},"110":{},"113":{},"128":{},"129":{},"133":{},"136":{},"147":{},"159":{},"161":{}},"component":{},"keyword":{}}],["ii",{"_index":863,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["illustr",{"_index":2394,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["imag",{"_index":2499,"title":{},"name":{},"text":{"20":{},"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["imageri",{"_index":54,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["imagin",{"_index":2076,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["immedi",{"_index":229,"title":{},"name":{},"text":{"2":{},"6":{},"8":{},"10":{},"14":{},"18":{},"20":{},"27":{},"37":{},"49":{},"65":{},"68":{},"70":{},"72":{},"77":{},"84":{},"94":{},"105":{},"120":{},"121":{},"122":{},"126":{},"127":{},"131":{},"138":{},"146":{},"155":{},"160":{}},"component":{},"keyword":{}}],["immut",{"_index":1751,"title":{"34":{},"91":{},"143":{}},"name":{"34":{},"91":{},"143":{}},"text":{"11":{},"34":{},"79":{},"91":{},"121":{},"133":{},"143":{}},"component":{},"keyword":{}}],["imper",{"_index":1757,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["impl",{"_index":2533,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["implement",{"_index":420,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"9":{},"11":{},"15":{},"16":{},"20":{},"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"32":{},"35":{},"40":{},"41":{},"43":{},"45":{},"47":{},"50":{},"51":{},"52":{},"53":{},"64":{},"68":{},"69":{},"71":{},"78":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"97":{},"98":{},"99":{},"100":{},"101":{},"103":{},"107":{},"108":{},"110":{},"122":{},"123":{},"125":{},"132":{},"137":{},"138":{},"139":{},"140":{},"142":{},"144":{},"148":{},"150":{},"153":{},"157":{},"159":{}},"component":{},"keyword":{}}],["impli",{"_index":2294,"title":{},"name":{},"text":{"17":{},"35":{},"38":{},"59":{},"92":{},"95":{},"110":{},"115":{},"143":{},"144":{},"147":{},"159":{},"160":{},"163":{},"164":{}},"component":{},"keyword":{}}],["implic",{"_index":1174,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["import",{"_index":424,"title":{"35":{},"92":{},"144":{}},"name":{"35":{},"92":{},"144":{}},"text":{"3":{},"9":{},"11":{},"12":{},"13":{},"16":{},"22":{},"23":{},"29":{},"35":{},"37":{},"49":{},"62":{},"64":{},"71":{},"74":{},"75":{},"76":{},"78":{},"82":{},"83":{},"87":{},"92":{},"94":{},"105":{},"125":{},"128":{},"129":{},"130":{},"132":{},"136":{},"137":{},"140":{},"144":{},"146":{},"155":{}},"component":{},"keyword":{}}],["importantli",{"_index":1173,"title":{},"name":{},"text":{"8":{},"16":{},"18":{},"24":{},"70":{},"79":{},"84":{},"126":{},"133":{},"138":{},"160":{}},"component":{},"keyword":{}}],["imposs",{"_index":2738,"title":{},"name":{},"text":{"23":{},"52":{},"108":{}},"component":{},"keyword":{}}],["impract",{"_index":955,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["improc",{"_index":3314,"title":{},"name":{},"text":{"67":{}},"component":{},"keyword":{}}],["improperli",{"_index":4017,"title":{},"name":{},"text":{"160":{}},"component":{},"keyword":{}}],["improv",{"_index":617,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"11":{},"27":{},"37":{},"47":{},"51":{},"52":{},"68":{},"74":{},"94":{},"108":{},"122":{},"125":{},"128":{},"157":{}},"component":{},"keyword":{}}],["impur",{"_index":2187,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["inaccuraci",{"_index":947,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["inact",{"_index":2980,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["inadvert",{"_index":943,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["inam",{"_index":3356,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["inappropri",{"_index":79,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["inc",{"_index":2095,"title":{},"name":{},"text":{"15":{},"16":{},"122":{}},"component":{},"keyword":{}}],["incid",{"_index":108,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["incident",{"_index":880,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["includ",{"_index":24,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"28":{},"30":{},"32":{},"37":{},"41":{},"44":{},"46":{},"47":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"61":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"88":{},"90":{},"92":{},"94":{},"98":{},"100":{},"102":{},"104":{},"108":{},"109":{},"110":{},"111":{},"112":{},"114":{},"115":{},"117":{},"120":{},"122":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"141":{},"142":{},"144":{},"146":{},"151":{},"152":{},"154":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["include::partial$get",{"_index":3953,"title":{},"name":{},"text":{"127":{}},"component":{},"keyword":{}}],["includesubdomain",{"_index":1475,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["includesubdomains\\r\\nx",{"_index":3440,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["inclus",{"_index":11,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["incom",{"_index":1089,"title":{},"name":{},"text":{"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"28":{},"30":{},"37":{},"38":{},"43":{},"46":{},"48":{},"52":{},"55":{},"69":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"84":{},"85":{},"92":{},"94":{},"101":{},"104":{},"106":{},"108":{},"112":{},"119":{},"121":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"136":{},"137":{},"138":{},"139":{},"144":{},"154":{},"156":{},"157":{}},"component":{},"keyword":{}}],["inconsist",{"_index":518,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["incorpor",{"_index":3388,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["incorrect",{"_index":3922,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["increas",{"_index":2268,"title":{},"name":{},"text":{"17":{},"43":{},"58":{},"59":{},"100":{},"101":{},"114":{},"115":{},"151":{},"162":{},"163":{}},"component":{},"keyword":{}}
1],["increment",{"_index":2697,"title":{},"name":{},"text":{"23":{},"79":{},"83":{},"100":{},"133":{},"137":{},"151":{}},"component":{},"keyword":{}}],["indent",{"_index":1843,"title":{},"name":{},"text":{"12":{},"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["independ",{"_index":1012,"title":{},"name":{},"text":{"6":{},"52":{},"68":{},"108":{},"122":{},"125":{},"157":{}},"component":{},"keyword":{}}],["index",{"_index":731,"title":{},"name":{"5":{},"36":{},"66":{},"93":{},"121":{},"145":{}},"text":{"47":{},"79":{},"133":{}},"component":{},"keyword":{}}],["index.htm",{"_index":3133,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["index.html",{"_index":1407,"title":{},"name":{},"text":{"10":{},"47":{},"73":{}},"component":{},"keyword":{}}],["indic",{"_index":1366,"title":{},"name":{},"text":{"10":{},"11":{},"17":{},"29":{},"32":{},"38":{},"64":{},"73":{},"86":{},"88":{},"90":{},"100":{},"109":{},"110":{},"141":{},"142":{},"151":{},"158":{},"159":{}},"component":{},"keyword":{}}],["indirect",{"_index":879,"title":{"94-6":{}},"name":{},"text":{"6":{},"68":{},"94":{},"122":{}},"component":{},"keyword":{}}],["indirectli",{"_index":1668,"title":{},"name":{},"text":{"11":{},"13":{},"23":{}},"component":{},"keyword":{}}],["individu",{"_index":88,"title":{},"name":{},"text":{"1":{},"6":{},"11":{},"13":{},"15":{},"24":{},"41":{},"68":{},"84":{},"92":{},"98":{},"122":{},"124":{},"125":{},"138":{},"144":{}},"component":{},"keyword":{}}],["individual’",{"_index":864,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["industri",{"_index":1203,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["inf",{"_index":2475,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["inf/class",{"_index":2418,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["inf/lib",{"_index":2419,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["inf/web.xml",{"_index":2417,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["infer",{"_index":1252,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["influenti",{"_index":2805,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["info",{"_index":1497,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"23":{},"30":{},"32":{},"41":{},"46":{},"72":{},"73":{},"74":{},"75":{},"78":{},"79":{},"83":{},"88":{},"90":{},"98":{},"104":{},"127":{},"128":{},"129":{},"132":{},"133":{},"137":{},"141":{},"142":{},"154":{}},"component":{},"keyword":{}}],["inform",{"_index":69,"title":{"6-1":{},"6-2":{},"6-4":{},"6-5":{},"6-7":{},"22-8":{},"68-1":{},"68-2":{},"68-4":{},"68-5":{},"68-7":{},"82-8":{},"122-1":{},"122-2":{},"122-4":{},"122-5":{},"122-7":{},"136-8":{}},"name":{},"text":{"1":{},"6":{},"7":{},"9":{},"12":{},"13":{},"17":{},"20":{},"22":{},"24":{},"27":{},"37":{},"44":{},"46":{},"47":{},"52":{},"54":{},"62":{},"68":{},"69":{},"71":{},"72":{},"79":{},"82":{},"100":{},"102":{},"104":{},"108":{},"109":{},"122":{},"123":{},"125":{},"127":{},"133":{},"136":{},"151":{},"152":{},"154":{},"158":{}},"component":{},"keyword":{}}],["infring",{"_index":1048,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["ingeni",{"_index":3547,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["inher",{"_index":1580,"title":{},"name":{},"text":{"11":{},"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["inherit",{"_index":495,"title":{},"name":{},"text":{"3":{},"7":{},"59":{},"69":{},"115":{},"123":{}},"component":{},"keyword":{}}],["init",{"_index":2447,"title":{},"name":{},"text":{"20":{},"78":{},"81":{},"132":{},"135":{}},"component":{},"keyword":{}}],["init</param",{"_index":3725,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["initi",{"_index":154,"title":{"78-6":{},"132-6":{}},"name":{},"text":{"2":{},"3":{},"10":{},"13":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"25":{},"27":{},"29":{},"37":{},"43":{},"53":{},"54":{},"55":{},"61":{},"64":{},"73":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"94":{},"101":{},"109":{},"110":{},"112":{},"117":{},"119":{},"121":{},"129":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"146":{},"158":{},"160":{},"165":{}},"component":{},"keyword":{}}],["inject",{"_index":1293,"title":{"16-9":{}},"name":{},"text":{"9":{},"11":{},"15":{},"16":{},"71":{},"125":{}},"component":{},"keyword":{}}],["injector",{"_index":3770,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["inlin",{"_index":1479,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["inner",{"_index":3428,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["inot",{"_index":3316,"title":{},"name":{},"text":{"71":{}},"component":{},"keyword":{}}],["input",{"_index":1112,"title":{"12-13":{}},"name":{},"text":{"7":{},"11":{},"12":{},"16":{},"24":{},"49":{},"52":{},"61":{},"69":{},"74":{},"75":{},"80":{},"84":{},"105":{},"117":{},"123":{},"125":{},"128":{},"129":{},"134":{},"138":{},"155":{},"165":{}},"component":{},"keyword":{}}],["inputstream",{"_index":2376,"title":{},"name":{},"text":{"19":{},"22":{},"48":{},"49":{},"57":{},"82":{},"105":{},"106":{},"113":{},"155":{},"156":{},"161":{}},"component":{},"keyword":{}}],["insecur",{"_index":2271,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["insensit",{"_index":1917,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["insid",{"_index":408,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"20":{},"22":{},"23":{},"24":{},"28":{},"35":{},"39":{},"43":{},"44":{},"46":{},"52":{},"54":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"81":{},"82":{},"83":{},"84":{},"92":{},"96":{},"102":{},"108":{},"110":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"135":{},"136":{},"137":{},"138":{},"144":{},"152":{},"159":{}},"component":{},"keyword":{}}],["inspect",{"_index":2806,"title":{},"name":{},"text":{"24":{},"29":{},"72":{},"84":{},"87":{},"127":{},"138":{},"140":{}},"component":{},"keyword":{}}],["inspir",{"_index":3152,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["instal",{"_index":167,"title":{},"name":{},"text":{"2":{},"9":{},"10":{},"11":{},"12":{},"13":{},"20":{},"21":{},"23":{},"65":{},"71":{},"73":{},"74":{},"75":{},"76":{},"79":{},"81":{},"83":{},"120":{},"125":{},"128":{},"129":{},"130":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["instanc",{"_index":90,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"15":{},"16":{},"20":{},"22":{},"26":{},"32":{},"37":{},"38":{},"41":{},"43":{},"46":{},"47":{},"68":{},"78":{},"81":{},"82":{},"86":{},"90":{},"92":{},"95":{},"98":{},"100":{},"108":{},"110":{},"119":{},"122":{},"132":{},"135":{},"136":{},"142":{},"143":{},"144":{},"147":{},"151":{},"164":{}},"component":{},"keyword":{}}],["instanti",{"_index":469,"title":{},"name":{},"text":{"3":{},"20":{}},"component":{},"keyword":{}}],["instead",{"_index":1157,"title":{},"name":{},"text":{"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"32":{},"37":{},"41":{},"42":{},"48":{},"51":{},"58":{},"64":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"79":{},"81":{},"82":{},"83":{},"84":{},"87":{},"88":{},"90":{},"94":{},"98":{},"102":{},"106":{},"110":{},"114":{},"119":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"133":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"146":{},"152":{},"159":{},"162":{}},"component":{},"keyword":{}}],["instruct",{"_index":118,"title":{"2-2":{},"65-2":{},"120-2":{}},"name":{},"text":{"13":{},"76":{},"81":{},"125":{},"130":{},"135":{}},"component":{},"keyword":{}}],["instrument",{"_index":1537,"title":{},"name":{},"text":{"10":{},"56":{},"73":{},"110":{},"111":{}},"component":{},"keyword":{}}],["insuffici",{"_index":569,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["insult",{"_index":59,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["insur",{"_index":897,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["int",{"_index":3118,"title":{},"name":{},"text":{"46":{},"64":{},"104":{},"154":{}},"component":{},"keyword":{}}
1],["intact",{"_index":2602,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["integ",{"_index":2955,"title":{},"name":{},"text":{"38":{},"48":{},"95":{},"106":{},"110":{},"143":{},"147":{},"156":{},"159":{},"160":{},"164":{}},"component":{},"keyword":{}}],["integr",{"_index":777,"title":{},"name":{},"text":{"5":{},"6":{},"16":{},"19":{},"66":{},"68":{},"122":{},"127":{}},"component":{},"keyword":{}}],["intellij",{"_index":2131,"title":{},"name":{},"text":{"15":{},"124":{}},"component":{},"keyword":{}}],["intend",{"_index":1743,"title":{},"name":{},"text":{"11":{},"27":{},"30":{},"32":{},"54":{},"62":{},"64":{},"74":{},"119":{},"128":{}},"component":{},"keyword":{}}],["intent",{"_index":562,"title":{},"name":{},"text":{"3":{},"23":{},"26":{},"41":{},"83":{},"86":{},"98":{},"137":{}},"component":{},"keyword":{}}],["intention",{"_index":940,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["inter",{"_index":2135,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["interact",{"_index":28,"title":{"12-8":{},"61-7":{},"75-8":{},"80-7":{},"117-7":{},"129-8":{},"134-7":{},"165-7":{}},"name":{},"text":{"1":{},"6":{},"7":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"23":{},"61":{},"62":{},"68":{},"69":{},"72":{},"74":{},"75":{},"76":{},"78":{},"80":{},"83":{},"117":{},"122":{},"123":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["intercept",{"_index":2674,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["interceptor",{"_index":524,"title":{"22":{},"30":{},"37":{},"55":{},"82":{},"88":{},"94":{},"112":{},"136":{},"141":{},"146":{},"160":{},"4-5":{},"4-8":{},"8-4":{},"9-14":{},"9-15":{},"11-8":{},"11-9":{},"11-10":{},"19-1":{},"19-2":{},"22-2":{},"22-11":{},"24-3":{},"27-2":{},"30-1":{},"32-2":{},"35-1":{},"37-2":{},"37-4":{},"37-7":{},"52-2":{},"52-6":{},"54-1":{},"58-10":{},"59-8":{},"61-1":{},"67-2":{},"67-5":{},"70-4":{},"71-14":{},"71-15":{},"72-8":{},"74-8":{},"74-9":{},"74-10":{},"80-1":{},"82-2":{},"82-11":{},"84-2":{},"88-3":{},"88-4":{},"90-2":{},"92-1":{},"94-2":{},"94-4":{},"94-6":{},"94-8":{},"108-2":{},"108-7":{},"109-1":{},"109-5":{},"110-2":{},"114-9":{},"115-8":{},"117-1":{},"125-14":{},"125-15":{},"126-4":{},"127-8":{},"128-8":{},"128-9":{},"128-10":{},"134-1":{},"136-2":{},"136-11":{},"138-2":{},"141-3":{},"142-2":{},"144-1":{},"146-2":{},"146-4":{},"146-7":{},"157-2":{},"157-7":{},"158-1":{},"158-5":{},"162-9":{},"163-8":{},"165-1":{}},"name":{"22":{},"30":{},"37":{},"55":{},"82":{},"88":{},"94":{},"112":{},"136":{},"141":{},"146":{},"160":{}},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"35":{},"37":{},"39":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"90":{},"92":{},"94":{},"96":{},"101":{},"102":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"115":{},"117":{},"118":{},"121":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"146":{},"152":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["interceptor.spec",{"_index":3231,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["interceptor/async",{"_index":3079,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["interceptor/bas",{"_index":3074,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["interceptor/except",{"_index":3405,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["interceptor/interceptor",{"_index":2354,"title":{},"name":{},"text":{"18":{},"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["interceptor/r",{"_index":3223,"title":{"55-2":{},"112-2":{}},"name":{},"text":{"73":{},"83":{},"137":{}},"component":{},"keyword":{}}],["interceptor/stylob",{"_index":2905,"title":{"55-1":{},"112-1":{}},"name":{},"text":{"32":{},"73":{},"83":{},"90":{},"137":{},"142":{}},"component":{},"keyword":{}}],["interceptor/termin",{"_index":3769,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["interceptor[4",{"_index":3459,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["interceptorfn",{"_index":653,"title":{},"name":{},"text":{"4":{},"67":{},"94":{}},"component":{},"keyword":{}}],["interceptors[ns=io.pedestal.http.rout",{"_index":3996,"title":{},"name":{},"text":{"154":{}},"component":{},"keyword":{}}],["interceptor{:nam",{"_index":3404,"title":{},"name":{},"text":{"73":{},"75":{},"76":{},"83":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["interceptor’",{"_index":1727,"title":{},"name":{},"text":{"11":{},"22":{},"29":{},"37":{},"74":{},"82":{},"87":{},"128":{},"136":{},"140":{},"160":{}},"component":{},"keyword":{}}],["interest",{"_index":183,"title":{},"name":{},"text":{"2":{},"6":{},"12":{},"17":{},"23":{},"29":{},"65":{},"68":{},"75":{},"81":{},"83":{},"87":{},"120":{},"122":{},"128":{},"129":{},"135":{},"137":{},"140":{}},"component":{},"keyword":{}}],["interfac",{"_index":622,"title":{},"name":{},"text":{"3":{},"10":{},"20":{},"24":{},"41":{},"73":{},"84":{},"92":{},"98":{},"138":{},"144":{}},"component":{},"keyword":{}}],["interfer",{"_index":2071,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["intermedi",{"_index":2331,"title":{},"name":{},"text":{"18":{},"21":{},"59":{},"79":{},"115":{},"133":{}},"component":{},"keyword":{}}],["intern",{"_index":147,"title":{"6-11":{},"68-11":{},"122-11":{}},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"13":{},"14":{},"16":{},"20":{},"35":{},"37":{},"39":{},"51":{},"69":{},"76":{},"81":{},"92":{},"94":{},"96":{},"100":{},"123":{},"130":{},"135":{},"144":{},"146":{},"151":{}},"component":{},"keyword":{}}],["interpol",{"_index":2758,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["interpos",{"_index":3354,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["interpret",{"_index":2788,"title":{},"name":{},"text":{"24":{},"26":{},"35":{},"37":{},"51":{},"54":{},"84":{},"86":{},"92":{},"94":{},"125":{},"138":{},"144":{},"146":{}},"component":{},"keyword":{}}
1],["interrog",{"_index":3318,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["interrum",{"_index":549,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["interv",{"_index":2291,"title":{},"name":{},"text":{"17":{},"18":{},"20":{},"38":{},"79":{},"100":{},"133":{},"151":{}},"component":{},"keyword":{}}],["intointerceptor",{"_index":2109,"title":{"35-2":{},"37-3":{},"92-2":{},"94-3":{},"144-2":{},"146-3":{}},"name":{},"text":{"15":{},"35":{},"37":{},"52":{},"58":{},"59":{},"72":{},"92":{},"94":{},"108":{},"110":{},"114":{},"115":{},"127":{},"144":{},"146":{},"162":{},"163":{}},"component":{},"keyword":{}}],["intra",{"_index":3586,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["intro",{"_index":3924,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["intro.md",{"_index":1401,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["introduc",{"_index":1615,"title":{},"name":{},"text":{"11":{},"16":{},"20":{},"23":{},"39":{},"74":{},"78":{},"83":{},"96":{},"125":{},"128":{},"132":{},"137":{}},"component":{},"keyword":{}}],["introduct",{"_index":689,"title":{"8-1":{},"70-1":{},"72-1":{},"100-1":{},"126-1":{},"127-1":{},"151-1":{}},"name":{},"text":{"4":{},"18":{},"21":{},"23":{},"50":{},"67":{},"79":{},"83":{},"107":{},"133":{},"137":{}},"component":{},"keyword":{}}],["introspect",{"_index":3335,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["intrus",{"_index":2134,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["invalid",{"_index":1918,"title":{},"name":{},"text":{"12":{},"42":{},"45":{},"48":{},"53":{},"75":{},"99":{},"103":{},"106":{},"129":{},"150":{},"153":{},"154":{},"160":{}},"component":{},"keyword":{}}],["investig",{"_index":97,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["invis",{"_index":2056,"title":{},"name":{},"text":{"14":{}},"component":{},"keyword":{}}],["invoc",{"_index":2811,"title":{},"name":{},"text":{"24":{},"72":{},"77":{},"84":{},"127":{},"131":{},"138":{}},"component":{},"keyword":{}}],["invok",{"_index":692,"title":{},"name":{},"text":{"4":{},"9":{},"11":{},"12":{},"13":{},"15":{},"18":{},"19":{},"20":{},"22":{},"23":{},"29":{},"32":{},"37":{},"43":{},"46":{},"49":{},"50":{},"51":{},"52":{},"54":{},"61":{},"62":{},"64":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"82":{},"83":{},"86":{},"87":{},"90":{},"94":{},"100":{},"104":{},"105":{},"107":{},"108":{},"117":{},"119":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"136":{},"137":{},"140":{},"142":{},"143":{},"146":{},"151":{},"154":{},"160":{},"165":{}},"component":{},"keyword":{}}],["invoked[2",{"_index":1633,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["invokesth",{"_index":2453,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["involv",{"_index":1160,"title":{},"name":{},"text":{"8":{},"10":{},"16":{},"23":{},"26":{},"41":{},"52":{},"70":{},"73":{},"83":{},"98":{},"108":{},"110":{},"126":{},"137":{}},"component":{},"keyword":{}}],["inward",{"_index":3172,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["io",{"_index":807,"title":{},"name":{},"text":{"5":{},"20":{},"72":{},"127":{},"143":{}},"component":{},"keyword":{}}],["io.example.hello/hello",{"_index":3585,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["io.github.clojure/tools.build",{"_index":2424,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["io.github.cognitect",{"_index":2154,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["io.github.pedestal/pedest",{"_index":1389,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.github.pedestal/pedestal%embedded%io.pedestal/embed",{"_index":3391,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.github.pedestal/pedestal%embedded%io.pedestal/embedded#0.7.2",{"_index":3390,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.github.pedestal/pedestal%embedded%io.pedestal/embedded#0.8.2",{"_index":1387,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["io.github.seancorfield/dep",{"_index":1371,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.github.tonsky/clj",{"_index":2163,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["io.opentelemetry.api.globalopentelemetry.getmeter(java.lang.str",{"_index":2845,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["io.opentelemetry.api.globalopentelemetry.gettracer(java.lang.str",{"_index":2848,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["io.opentelemetry.javaagent.tooling.versionlogg",{"_index":1528,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedest",{"_index":2993,"title":{},"name":{},"text":{"39":{},"41":{},"96":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.connector",{"_index":447,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"28":{},"47":{}},"component":{},"keyword":{}}],["io.pedestal.connector.dev",{"_index":2856,"title":{},"name":{},"text":{"27":{},"28":{}},"component":{},"keyword":{}}],["io.pedestal.connector.servlet",{"_index":2432,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["io.pedestal.connector.spec",{"_index":3229,"title":{},"name":{},"text":{"56":{}},"component":{},"keyword":{}}],["io.pedestal.connector.test",{"_index":2219,"title":{},"name":{},"text":{"16":{},"23":{}},"component":{},"keyword":{}}],["io.pedestal.connector/with",{"_index":1957,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["io.pedestal.dev",{"_index":2058,"title":{"26-5":{}},"name":{},"text":{"14":{},"89":{}},"component":{},"keyword":{}}],["io.pedestal.http",{"_index":409,"title":{},"name":{},"text":{"3":{},"4":{},"19":{},"27":{},"56":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"101":{},"110":{},"123":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{},"159":{}},"component":{},"keyword":{}}],["io.pedestal.http.bodi",{"_index":1453,"title":{},"name":{},"text":{"10":{},"72":{},"79":{},"127":{},"133":{},"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.cont",{"_index":1695,"title":{},"name":{},"text":{"11":{},"74":{},"128":{},"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.cor",{"_index":3993,"title":{},"name":{},"text":{"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.cors/dev",{"_index":1441,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.cors/origin",{"_index":3073,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal.http.csrf",{"_index":3994,"title":{},"name":{},"text":{"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.http",{"_index":753,"title":{},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__15862@3b85a820",{"_index":1814,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__15862@63cd8f26",{"_index":2700,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__15862@695dc0e6",{"_index":2011,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__15862@6f4fa62f",{"_index":1831,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__17907@6e3f108c",{"_index":1432,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit$create_connector$reify__17973@16a475d3",{"_index":1534,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit.impl$mock_channel$reify__15583@4fbdd61f",{"_index":2705,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["io.pedestal.http.http_kit.impl$mock_channel$reify__15583@6801b4a4",{"_index":2716,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet",{"_index":2904,"title":{"55-1":{},"55-2":{},"112-1":{},"112-2":{}},"name":{},"text":{"32":{},"43":{},"56":{},"73":{},"83":{},"84":{},"90":{},"101":{},"111":{},"137":{},"138":{},"142":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@1adcd53b",{"_index":3521,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@4e27c500",{"_index":3492,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@c1add62",{"_index":3970,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14892@515f104c",{"_index":3755,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__17265@6853ba",{"_index":3400,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$servlet_async_qmark_@23497c5",{"_index":3799,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$start_servlet_async@7dfccbf2",{"_index":3786,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@1fe24f79",{"_index":3789,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@74f47eab",{"_index":3810,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetti",{"_index":2281,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15089@4474a287",{"_index":3523,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15089@6dbd38e8",{"_index":3495,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15091@2d7956fb",{"_index":3503,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15091@7cf6ea5b",{"_index":3529,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15231@723c7f2f",{"_index":3973,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15233@278758da",{"_index":3980,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15680@1dde2d1",{"_index":3758,"t
1itle":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__15682@7330574d",{"_index":3766,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__17934@26714a4a",{"_index":3403,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty$server$fn__17936@6953f5fc",{"_index":3420,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty.spec",{"_index":3232,"title":{},"name":{},"text":{"56":{}},"component":{},"keyword":{}}],["io.pedestal.http.jetty/http",{"_index":3856,"title":{},"name":{},"text":{"95":{},"147":{}},"component":{},"keyword":{}}],["io.pedestal.http.r",{"_index":1454,"title":{},"name":{},"text":{"10":{},"50":{},"73":{},"75":{},"83":{},"94":{},"107":{},"129":{},"137":{},"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.request.lazi",{"_index":705,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["io.pedestal.http.request.zerocopi",{"_index":706,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["io.pedestal.http.resourc",{"_index":3131,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["io.pedestal.http.rout",{"_index":1344,"title":{},"name":{},"text":{"9":{},"23":{},"52":{},"58":{},"59":{},"61":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"108":{},"114":{},"115":{},"117":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"146":{},"157":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["io.pedestal.http.route.definition.t",{"_index":3248,"title":{},"name":{},"text":{"58":{},"72":{},"114":{},"127":{},"162":{}},"component":{},"keyword":{}}],["io.pedestal.http.route.prefix",{"_index":3379,"title":{},"name":{},"text":{"72":{},"76":{},"83":{},"127":{},"130":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route.prefix_tree$add_satisfies_constraints_qmark_$fn__11533@2f8afb66",{"_index":3813,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route.rout",{"_index":3166,"title":{},"name":{},"text":{"51":{},"146":{}},"component":{},"keyword":{}}],["io.pedestal.http.route.specs/rout",{"_index":3188,"title":{},"name":{},"text":{"52":{}},"component":{},"keyword":{}}],["io.pedestal.http.route/*url",{"_index":3783,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route/method",{"_index":3408,"title":{},"name":{},"text":{"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route/path",{"_index":1462,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route/queri",{"_index":1452,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.route/rout",{"_index":1461,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.secur",{"_index":1464,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@1a183473",{"_index":3498,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@265b5f05",{"_index":3803,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@389588b2",{"_index":3775,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@46a4eecd",{"_index":3414,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@47c90585",{"_index":3525,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@47caa1ff",{"_index":3761,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@5cb077e3",{"_index":3975,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["io.pedestal.http.servlet.fnservlet@6593f4fd",{"_index":3449,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["io.pedestal.http.spec",{"_index":3233,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["io.pedestal.http.ss",{"_index":2342,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"133":{}},"component":{},"keyword":{}}],["io.pedestal.http.sse/act",{"_index":3078,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal.http.sse/payload",{"_index":3077,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal.http.tracing/otel",{"_index":1446,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.tracing/prior",{"_index":1448,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.tracing/span",{"_index":1450,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.http.tracing/trac",{"_index":1444,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.http/allow",{"_index":3839,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/cr",{"_index":3271,"title":{},"name":{},"text":{"61":{},"76":{},"80":{},"117":{},"130":{},"134":{},"160":{},"165":{}},"component":{},"keyword":{}}],["io.pedestal.http/en",{"_index":3840,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/fil",{"_index":3843,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/html",{"_index":3360,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["io.pedestal.http/interceptor",{"_index":3833,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/log",{"_index":3406,"title":{},"name":{},"text":{"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.http/not",{"_index":3407,"title":{},"name":{},"text":{"73":{},"75":{},"83":{},"88":{},"129":{},"137":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/path",{"_index":3845,"title":{},"name":{},"text":{"88":{}},"component":{},"keyword":{}}],["io.pedestal.http/request",{"_index":3072,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal.http/resourc",{"_index":3842,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/rout",{"_index":3848,"title":{},"name":{},"text":{"92":{},"97":{},"103":{},"108":{},"144":{},"148":{},"153":{},"157":{}},"component":{},"keyword":{}}],["io.pedestal.http/secur",{"_index":3844,"title":{},"name":{},"text":{"88":{},"141":{}},"component":{},"keyword":{}}],["io.pedestal.http/servic",{"_index":3270,"title":{},"name":{},"text":{"61":{},"78":{},"80":{},"83":{},"90":{},"117":{},"132":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["io.pedestal.http/start",{"_index":3571,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["io.pedestal.http/trac",{"_index":3838,"title":{},"name":{},"text":{"88":{}},"component":{},"keyword":{}}],["io.pedestal.http/websocket",{"_index":3307,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["io.pedestal.http{:port",{"_index":3397,"title":{},"name":{},"text":{"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor",{"_index":651,"title":{},"name":{},"text":{"4":{},"15":{},"18":{},"54":{},"67":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain.debug",{"_index":1440,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/error",{"_index":2861,"title":{},"name":{},"text":{"29":{},"32":{},"87":{},"90":{},"140":{},"142":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/execut",{"_index":674,"title":{},"name":{},"text":{"4":{},"29":{},"67":{},"83":{},"87":{},"137":{},"140":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/queu",{"_index":715,"title":{},"name":{},"text":{"4":{},"29":{},"67":{},"73":{},"83":{},"87":{},"137":{},"140":{},"157":{},"160":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/queue[1",{"_index":2864,"title":{},"name":{},"text":{"29":{},"87":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/stack",{"_index":3768,"title":{},"name":{},"text":{"83":{},"137":{},"160":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/suppress",{"_index":2894,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.chain/termin",{"_index":2866,"title":{},"name":{},"text":{"29":{},"83":{},"87":{},"137":{},"140":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.dis",{"_index":2823,"title":{"26-8":{}},"name":{},"text":{},"component":{},"keyword":{}}],["io.pedestal.interceptor.help",{"_index":720,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.spec",{"_index":3234,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["io.pedestal.interceptor.trac",{"_index":716,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["io.pedestal.jetty.contain",{"_index":645,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["io.pedestal.jetty.util",{"_index":646,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["io.pedestal.json",{"_index":2825,"title":{"26-9":{}},"name":{},"text":{},"component":{},"keyword":{}}],["io.pedestal.json.protocols/jsonprocessor",{"_index":2842,"title":{},"name":{},"text":{"26":{}},"component":{},"keyword":{}}],["io.pedestal.log",{"_index":718,"title":{},"name":{},"text":{"4":{},"7":{},"17":{},"41":{},"67":{},"69":{},"98":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["io.pedestal.log.defaultmetricsrecord",{"_index":3827,"title":{},"name":{},"text":{"86":{},"100":{},"151":{}},"component":{},"keyword":{}}],["io.pedestal.log.formatt",{"_index":2821,"title":{"26-7":{}},"name":{},"text":{"41":{},"86":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.log.overridelogg",{"_index":2819,"title":{"26-6":{}},"name":{},"text":{"26":{},"41":{},"86":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.log/formatt",{"_index":3031,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.log/logg",{"_index":3030,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.log/mdc",{"_index":3041,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["io.pedestal.metr",{"_index":3058,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.metrics.spi",{"_index":3082,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.metrics/configur",{"_index":3065,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.metrics/descript",{"_index":3067,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.metrics/unit",{"_index":3068,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.metrics/valu",{"_index":3069,"title":{},"name":{},"text":{"43":{}},"component":{},"keyword":{}}],["io.pedestal.route.spec",{"_index":3235,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["io.pedestal.service.interceptor",{"_index":1504,"title":{},"name":{},"text":{"10":{},"12":{},"13":{},"16":{},"23":{}},"component":{},"keyword":{}}],["io.pedestal.service.interceptors/log",{"_index":1451,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["io.pedestal.service.interceptors/not",{"_index":1482,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["io.pedestal.service.resourc",{"_index":3126,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}
1],["io.pedestal.service.websocket",{"_index":2616,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["io.pedestal.servlet.clojurevarservlet",{"_index":161,"title":{},"name":{},"text":{"2":{}},"component":{},"keyword":{}}],["io.pedestal.suppress",{"_index":2827,"title":{"26-10":{}},"name":{},"text":{},"component":{},"keyword":{}}],["io.pedestal.telemetry.metr",{"_index":2829,"title":{"26-11":{},"26-12":{}},"name":{},"text":{"86":{}},"component":{},"keyword":{}}],["io.pedestal.telemetry.trac",{"_index":2832,"title":{"26-13":{}},"name":{},"text":{"86":{}},"component":{},"keyword":{}}],["io.pedestal.test",{"_index":478,"title":{},"name":{},"text":{"3":{},"72":{},"78":{},"83":{},"127":{},"132":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test$test_servlet_request$reify__15071@57e9122f",{"_index":3778,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test$test_servlet_request$reify__15071@6916566d",{"_index":3805,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test$test_servlet_response$reify__15083@29c808c8",{"_index":3801,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test$test_servlet_response$reify__15083@3e1ff1cf",{"_index":3773,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test.proxy$javax.servlet.servletinputstream$ff19274a@5ea52724",{"_index":3782,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test.proxy$javax.servlet.servletinputstream$ff19274a@82bbbdc",{"_index":3808,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.test/respons",{"_index":3817,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal.websocket",{"_index":650,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["io.pedestal.websocket.spec",{"_index":3236,"title":{},"name":{},"text":{"56":{},"111":{}},"component":{},"keyword":{}}],["io.pedestal/act",{"_index":3075,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal/embed",{"_index":1391,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.error",{"_index":2897,"title":{},"name":{},"text":{"32":{},"90":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.http",{"_index":1709,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"21":{},"23":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.immut",{"_index":3642,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.jetti",{"_index":2276,"title":{},"name":{},"text":{"17":{},"39":{},"74":{},"75":{},"76":{},"78":{},"79":{},"81":{},"83":{},"96":{},"128":{},"129":{},"130":{},"132":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.rout",{"_index":2951,"title":{},"name":{},"text":{"37":{},"94":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.servic",{"_index":443,"title":{},"name":{},"text":{"3":{},"13":{},"37":{},"79":{},"81":{},"94":{},"133":{},"135":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.servlet",{"_index":441,"title":{},"name":{},"text":{"3":{},"20":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.telemetri",{"_index":3057,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["io.pedestal/pedestal.tomcat",{"_index":3643,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["io.undertow.undertow$build",{"_index":3991,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.interceptor/0.6.1/pedestal.interceptor",{"_index":3556,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.jetty/0.6.1/pedestal.jetti",{"_index":3551,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.jetty/0.8.0/pedestal.jetti",{"_index":1991,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.log/0.6.1/pedestal.log",{"_index":3554,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.log/0.8.0/pedestal.log",{"_index":1994,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.route/0.6.1/pedestal.rout",{"_index":3555,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.service/0.6.1/pedestal.servic",{"_index":3553,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["io/pedestal/pedestal.service/0.8.0/pedestal.servic",{"_index":1993,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["ip",{"_index":3117,"title":{},"name":{},"text":{"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["ipv4",{"_index":2599,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["ipv6",{"_index":2598,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["iseq",{"_index":3142,"title":{},"name":{},"text":{"48":{},"106":{},"156":{}},"component":{},"keyword":{}}],["ish",{"_index":2867,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["island’",{"_index":3322,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["isn’t",{"_index":1562,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"23":{},"28":{},"41":{},"73":{},"75":{},"77":{},"83":{},"98":{},"100":{},"129":{},"131":{},"137":{},"151":{}},"component":{},"keyword":{}}],["isol",{"_index":2372,"title":{"19-1":{},"61-1":{},"80-1":{},"117-1":{},"134-1":{},"165-1":{}},"name":{},"text":{"19":{},"35":{},"41":{},"61":{},"72":{},"80":{},"92":{},"98":{},"117":{},"127":{},"134":{},"144":{},"165":{}},"component":{},"keyword":{}}],["issu",{"_index":30,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"21":{},"23":{},"37":{},"65":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}
1],["item",{"_index":2681,"title":{"23-16":{},"83-15":{},"137-15":{}},"name":{},"text":{"23":{},"61":{},"80":{},"83":{},"110":{},"117":{},"125":{},"134":{},"137":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["iter",{"_index":1230,"title":{},"name":{},"text":{"9":{},"16":{},"20":{},"71":{},"125":{}},"component":{},"keyword":{}}],["itself",{"_index":122,"title":{"2-4":{},"65-3":{},"120-3":{}},"name":{},"text":{"2":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"22":{},"23":{},"24":{},"25":{},"29":{},"32":{},"34":{},"37":{},"41":{},"44":{},"50":{},"65":{},"70":{},"71":{},"75":{},"76":{},"81":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"91":{},"92":{},"94":{},"98":{},"102":{},"107":{},"109":{},"110":{},"120":{},"125":{},"126":{},"129":{},"130":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"144":{},"152":{},"158":{}},"component":{},"keyword":{}}],["it’",{"_index":140,"title":{},"name":{},"text":{"2":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"20":{},"23":{},"24":{},"37":{},"40":{},"41":{},"47":{},"52":{},"53":{},"65":{},"66":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"94":{},"97":{},"98":{},"100":{},"108":{},"110":{},"120":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{},"146":{},"148":{},"151":{},"159":{}},"component":{},"keyword":{}}],["it’ll",{"_index":1614,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["i’d",{"_index":3542,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["i’ll",{"_index":2722,"title":{},"name":{},"text":{"23":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["i’m",{"_index":1939,"title":{},"name":{},"text":{"13":{},"23":{},"75":{},"76":{},"83":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["i’v",{"_index":1744,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["j",{"_index":2837,"title":{},"name":{},"text":{"26":{},"89":{}},"component":{},"keyword":{}}],["jackson",{"_index":382,"title":{},"name":{},"text":{"3":{},"20":{}},"component":{},"keyword":{}}],["jaeger",{"_index":1510,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["jaeger.sh",{"_index":1414,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["jakarta",{"_index":398,"title":{},"name":{},"text":{"3":{},"5":{},"20":{},"24":{},"35":{},"64":{}},"component":{},"keyword":{}}],["jakarta.servlet.servlet",{"_index":2877,"title":{},"name":{},"text":{"29":{},"87":{},"110":{}},"component":{},"keyword":{}}],["jakarta.servlet.servlet.servic",{"_index":3901,"title":{},"name":{},"text":{"110":{}},"component":{},"keyword":{}}],["jakarta.servlet.servletconfig",{"_index":2876,"title":{},"name":{},"text":{"29":{},"87":{}},"component":{},"keyword":{}}],["jakarta.servlet.servletoutputstream",{"_index":3237,"title":{},"name":{},"text":{"57":{},"113":{}},"component":{},"keyword":{}}],["jakarta.websocket.server.serverendpointconfig.build",{"_index":3299,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["jam",{"_index":1180,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["jan",{"_index":354,"title":{"3-4":{},"3-5":{}},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["jar",{"_index":1539,"title":{},"name":{},"text":{"10":{},"13":{},"16":{},"20":{},"24":{},"73":{},"76":{},"81":{},"84":{},"121":{},"130":{},"135":{},"138":{}},"component":{},"keyword":{}}],["jargon",{"_index":3433,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["java",{"_index":170,"title":{"64-2":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"10":{},"11":{},"12":{},"13":{},"20":{},"22":{},"23":{},"32":{},"35":{},"38":{},"39":{},"41":{},"47":{},"49":{},"55":{},"64":{},"65":{},"66":{},"69":{},"73":{},"74":{},"75":{},"76":{},"81":{},"82":{},"83":{},"90":{},"92":{},"95":{},"96":{},"98":{},"105":{},"112":{},"120":{},"121":{},"123":{},"128":{},"129":{},"130":{},"135":{},"136":{},"137":{},"142":{},"144":{},"147":{},"155":{}},"component":{},"keyword":{}}],["java.io.fil",{"_index":1672,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["java.io.inputstream",{"_index":1673,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}
1],["java.io.inputstream$1@2d579733",{"_index":2709,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["java.io.inputstream$1@647b7f63",{"_index":2720,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["java.io.outputstream",{"_index":2928,"title":{},"name":{},"text":{"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["java.io.tmpdir=/tmp/jetti",{"_index":2538,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["java.lang.arithmeticexcept",{"_index":2899,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["java.lang.except",{"_index":3027,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["java.lang.outputstream",{"_index":3150,"title":{},"name":{},"text":{"49":{},"105":{}},"component":{},"keyword":{}}],["java.lang.throw",{"_index":3026,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["java.nio.bytebuff",{"_index":1675,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["java.nio.channel.channel",{"_index":3139,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["java.nio.channels.filechannel",{"_index":3160,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["java.nio.channels.readablebytechannel",{"_index":1674,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["java.security.cert.x509certif",{"_index":3121,"title":{},"name":{},"text":{"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["java.security.keystor",{"_index":2970,"title":{},"name":{},"text":{"38":{},"95":{},"143":{},"147":{}},"component":{},"keyword":{}}],["java.util.log",{"_index":3010,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["java.version=21.0.7",{"_index":2539,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["javaag",{"_index":1530,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["javascript",{"_index":1840,"title":{"18-11":{},"21-11":{}},"name":{},"text":{"12":{},"18":{},"21":{},"79":{},"133":{}},"component":{},"keyword":{}}],["javax",{"_index":3930,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["javax.net.ssl.keymanag",{"_index":3985,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["javax.net.ssl.sslcontext",{"_index":3984,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["javax.net.ssl.trustmanag",{"_index":3986,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["javax.servlet.servlet",{"_index":3982,"title":{},"name":{},"text":{"140":{},"159":{}},"component":{},"keyword":{}}],["javax.servlet.servlet.servic",{"_index":4016,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["javax.servlet.servletconfig",{"_index":3981,"title":{},"name":{},"text":{"140":{}},"component":{},"keyword":{}}],["javax.servlet.servletoutputstream",{"_index":4021,"title":{},"name":{},"text":{"161":{}},"component":{},"keyword":{}}],["java’",{"_index":805,"title":{},"name":{},"text":{"5":{},"66":{}},"component":{},"keyword":{}}],["jbake",{"_index":3921,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["jboss",{"_index":3709,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["jdk21",{"_index":2493,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetti",{"_index":356,"title":{"38":{},"95":{},"147":{},"3-6":{},"20-7":{},"20-8":{},"64-6":{}},"name":{"38":{},"95":{},"147":{}},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"10":{},"17":{},"20":{},"24":{},"27":{},"28":{},"35":{},"38":{},"39":{},"41":{},"50":{},"64":{},"69":{},"70":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"84":{},"95":{},"96":{},"98":{},"107":{},"110":{},"119":{},"121":{},"123":{},"124":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"137":{},"138":{},"147":{},"159":{}},"component":{},"keyword":{}}],["jetty(12.0.22",{"_index":2601,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty.base.uri=file:///var/lib/jetti",{"_index":2541,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty.base=/var/lib/jetti",{"_index":2540,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty.home.uri=file:///usr/local/jetti",{"_index":2543,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty.home=/usr/local/jetti",{"_index":2542,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty.webapp.addhiddenclasses=org.eclipse.jetty.logging.,file:///usr/local/jetty/lib/logging/,org.slf4j",{"_index":2544,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty/cr",{"_index":2292,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["jetty/servlet",{"_index":3932,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["jetty:12.0.22",{"_index":2492,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jetty’",{"_index":2326,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}
1],["jm",{"_index":2677,"title":{},"name":{},"text":{"22":{},"25":{},"82":{},"85":{},"136":{},"139":{}},"component":{},"keyword":{}}],["jmx",{"_index":3830,"title":{},"name":{},"text":{"86":{},"100":{},"151":{}},"component":{},"keyword":{}}],["job",{"_index":594,"title":{},"name":{},"text":{"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"16":{},"18":{},"23":{},"52":{},"69":{},"71":{},"72":{},"74":{},"75":{},"79":{},"83":{},"123":{},"125":{},"127":{},"128":{},"129":{},"133":{},"137":{}},"component":{},"keyword":{}}],["join",{"_index":2851,"title":{},"name":{},"text":{"27":{},"72":{},"73":{},"75":{},"83":{},"110":{},"127":{},"129":{},"137":{}},"component":{},"keyword":{}}],["js",{"_index":3694,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["jserv",{"_index":3990,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["json",{"_index":343,"title":{"3-1":{},"4-3":{}},"name":{},"text":{"3":{},"4":{},"10":{},"11":{},"12":{},"18":{},"19":{},"22":{},"26":{},"41":{},"44":{},"57":{},"73":{},"74":{},"75":{},"79":{},"82":{},"98":{},"102":{},"128":{},"129":{},"133":{},"152":{},"154":{}},"component":{},"keyword":{}}],["json/writ",{"_index":1723,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["jsonprocessor",{"_index":2843,"title":{},"name":{},"text":{"26":{}},"component":{},"keyword":{}}],["jsp",{"_index":2576,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["jul",{"_index":345,"title":{"3-1":{}},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["jump",{"_index":196,"title":{},"name":{},"text":{"2":{},"13":{},"16":{},"65":{},"72":{},"76":{},"78":{},"120":{},"127":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["june",{"_index":551,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["jvm",{"_index":2059,"title":{},"name":{},"text":{"14":{},"15":{},"16":{},"17":{},"20":{},"26":{},"43":{},"50":{},"75":{},"77":{},"78":{},"79":{},"81":{},"83":{},"86":{},"89":{},"100":{},"101":{},"107":{},"129":{},"131":{},"132":{},"133":{},"135":{},"137":{},"151":{}},"component":{},"keyword":{}}],["kafka",{"_index":2678,"title":{},"name":{},"text":{"22":{},"25":{},"82":{},"85":{},"136":{},"139":{}},"component":{},"keyword":{}}],["kebab",{"_index":1942,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["keep",{"_index":818,"title":{"6-5":{},"68-5":{},"122-5":{}},"name":{},"text":{"6":{},"11":{},"13":{},"15":{},"16":{},"18":{},"22":{},"23":{},"32":{},"54":{},"58":{},"59":{},"68":{},"74":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"90":{},"109":{},"110":{},"114":{},"115":{},"122":{},"125":{},"128":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"142":{},"158":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["kept",{"_index":3122,"title":{},"name":{},"text":{"46":{},"51":{},"54":{},"78":{},"109":{},"132":{},"158":{}},"component":{},"keyword":{}}],["key",{"_index":649,"title":{"26-4":{},"27-1":{},"29-2":{},"29-5":{},"41-5":{},"86-3":{},"87-4":{},"98-5":{},"110-1":{},"140-4":{}},"name":{},"text":{"4":{},"5":{},"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"32":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"53":{},"54":{},"55":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"69":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"100":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"115":{},"117":{},"118":{},"119":{},"123":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"143":{},"144":{},"146":{},"147":{},"148":{},"151":{},"152":{},"153":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"164":{},"165":{}},"component":{},"keyword":{}}],["key/valu",{"_index":2007,"title":{},"name":{},"text":{"13":{},"19":{},"23":{},"41":{},"51":{}},"component":{},"keyword":{}}],["keyalia",{"_index":4030,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["keypass",{"_index":4040,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["keystor",{"_index":2260,"title":{},"name":{},"text":{"17":{},"38":{},"79":{},"95":{},"133":{},"143":{},"147":{},"164":{}},"component":{},"keyword":{}}],["keystore/certif",{"_index":2975,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["keystoreprovid",{"_index":4031,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["keystoretyp",{"_index":4023,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["keyword",{"_index":1257,"title":{},"name":{},"text":{"9":{},"12":{},"13":{},"16":{},"19":{},"21":{},"22":{},"23":{},"26":{},"27":{},"29":{},"32":{},"37":{},"41":{},"44":{},"46":{},"52":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"71":{},"75":{},"76":{},"77":{},"78":{},"80":{},"82":{},"83":{},"86":{},"90":{},"100":{},"102":{},"104":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"125":{},"129":{},"130":{},"131":{},"132":{},"134":{},"136":{},"137":{},"142":{},"151":{},"152":{},"154":{},"157":{},"159":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["kick",{"_index":2189,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["kill",{"_index":2027,"title":{},"name":{},"text":{"13":{},"16":{},"76":{},"130":{}},"component":{},"keyword":{}}],["kind",{"_index":1094,"title":{},"name":{},"text":{"7":{},"9":{},"12":{},"13":{},"16":{},"18":{},"19":{},"20":{},"23":{},"26":{},"29":{},"35":{},"37":{},"41":{},"52":{},"53":{},"56":{},"64":{},"69":{},"75":{},"78":{},"79":{},"83":{},"87":{},"92":{},"94":{},"98":{},"100":{},"102":{},"108":{},"111":{},"123":{},"129":{},"132":{},"133":{},"137":{},"140":{},"144":{},"146":{},"151":{},"152":{},"157":{}},"component":{},"keyword":{}}],["kit",{"_index":422,"title":{"33":{}},"name":{"33":{}},"text":{"3":{},"4":{},"5":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"21":{},"23":{},"24":{},"27":{},"28":{},"33":{},"39":{},"49":{},"64":{}},"component":{},"keyword":{}}],["kit.spec",{"_index":3230,"title":{},"name":{},"text":{"56":{}},"component":{},"keyword":{}}],["kit/async",{"_index":1484,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["kit/respons",{"_index":1483,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["know",{"_index":243,"title":{},"name":{},"text":{"2":{},"12":{},"14":{},"18":{},"21":{},"23":{},"37":{},"65":{},"75":{},"77":{},"78":{},"79":{},"83":{},"94":{},"102":{},"108":{},"120":{},"124":{},"128":{},"129":{},"132":{},"133":{},"137":{},"152":{}},"component":{},"keyword":{}}],["known",{"_index":142,"title":{},"name":{},"text":{"2":{},"6":{},"38":{},"47":{},"62":{},"68":{},"72":{},"108":{},"122":{},"127":{}},"component":{},"keyword":{}}],["kondo",{"_index":1545,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["kondo.impl.analysis.java",{"_index":3431,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["kondo.impl.utils/upd",{"_index":3432,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["l",{"_index":2741,"title":{},"name":{},"text":{"23":{},"41":{},"83":{},"98":{},"137":{}},"component":{},"keyword":{}}],["l/debug",{"_index":3017,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["l/error",{"_index":3029,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["l15385",{"_index":3820,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["l15892",{"_index":2751,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["l15895",{"_index":2752,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["label",{"_index":192,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["labs/test",{"_index":2155,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["ladi",{"_index":3328,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["lambda",{"_index":3321,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["land",{"_index":2769,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["languag",{"_index":36,"title":{},"name":{},"text":{"1":{},"11":{},"12":{},"13":{},"22":{},"74":{},"76":{},"82":{},"128":{},"130":{},"136":{}},"component":{},"keyword":{}}],["larg",{"_index":315,"title":{},"name":{},"text":{"2":{},"3":{},"32":{},"37":{},"47":{},"57":{},"64":{},"65":{},"79":{},"90":{},"92":{},"94":{},"113":{},"120":{},"133":{},"142":{},"144":{},"146":{},"161":{}},"component":{},"keyword":{}}],["larger",{"_index":566,"title":{},"name":{},"text":{"3":{},"50":{},"57":{},"107":{},"113":{},"161":{}},"component":{},"keyword":{}}],["largest",{"_index":333,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["last",{"_index":418,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"23":{},"32":{},"37":{},"46":{},"52":{},"53":{},"55":{},"67":{},"68":{},"71":{},"72":{},"74":{},"76":{},"83":{},"90":{},"94":{},"104":{},"112":{},"122":{},"125":{},"127":{},"128":{},"130":{},"137":{},"142":{},"146":{},"154":{},"160":{}},"component":{},"keyword":{}}],["late",{"_index":2835,"title":{"121-5":{}},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["latenc",{"_index":3878,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["later",{"_index":687,"title":{},"name":{},"text":{"4":{},"5":{},"8":{},"9":{},"10":{},"12":{},"13":{},"14":{},"16":{},"22":{},"23":{},"32":{},"37":{},"54":{},"64":{},"66":{},"67":{},"70":{},"71":{},"75":{},"76":{},"77":{},"82":{},"83":{},"90":{},"94":{},"109":{},"126":{},"129":{},"130":{},"131":{},"136":{},"137":{},"146":{},"158":{},"160":{}},"component":{},"keyword":{}}],["latest",{"_index":1369,"title":{},"name":{},"text":{"10":{},"11":{},"14":{},"23":{},"73":{},"74":{},"76":{},"83":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["latter",{"_index":2931,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["launch",{"_index":1508,"title":{},"name":{},"text":{"10":{},"20":{},"23":{},"72":{},"83":{},"127":{},"137":{}},"component":{},"keyword":{}}],["law",{"_index":904,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["lawyer",{"_index":898,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["lay",{"_index":3589,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["layer",{"_index":396,"title":{},"name":{},"text":{"3":{},"14":{},"43":{},"76":{},"130":{},"156":{}},"component":{},"keyword":{}}],["layout",{"_index":2148,"title":{},"name":{},"text":{"16":{},"81":{},"135":{}},"component":{},"keyword":{}}],["lazi",{"_index":3240,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["lead",{"_index":472,"title":{},"name":{},"text":{"3":{},"4":{},"12":{},"14":{},"19":{},"52":{},"53":{},"64":{},"67":{},"77":{},"100":{},"108":{},"131":{},"151":{}},"component":{},"keyword":{}}],["leak",{"_index":3581,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["lean",{"_index":2770,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["learn",{"_index":1190,"title":{"9-2":{},"11-2":{},"12-2":{},"13-2":{},"16-1":{},"18-2":{},"21-2":{},"22-1":{},"23-2":{},"71-2":{},"72-2":{},"74-2":{},"75-2":{},"76-2":{},"78-1":{},"79-2":{},"82-1":{},"83-2":{},"125-2":{},"127-2":{},"128-2":{},"129-2":{},"130-2":{},"132-1":{},"133-2":{},"136-1":{},"137-2":{}},"name":{},"text":{"11":{},"12":{},"13":{},"72":{},"74":{},"75":{},"76":{},"127":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["leav",{"_index":1466,"title":{"22-6":{},"82-6":{},"136-6":{}},"name":{},"text":{"10":{},"11":{},"15":{},"19":{},"20":{},"22":{},"23":{},"24":{},"29":{},"30":{},"32":{},"37":{},"55":{},"61":{},"64":{},"71":{},"72":{},"73":{},"74":{},"75":{},"80":{},"81":{},"82":{},"83":{},"84":{},"87":{},"88":{},"90":{},"94":{},"112":{},"117":{},"125":{},"127":{},"128":{},"129":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"146":{},"160":{},"165":{}},"component":{},"keyword":{}}],["led",{"_index":3824,"title":{},"name":{}
1,"text":{"84":{},"138":{}},"component":{},"keyword":{}}],["left",{"_index":1154,"title":{},"name":{},"text":{"8":{},"11":{},"12":{},"20":{},"22":{},"23":{},"29":{},"48":{},"70":{},"74":{},"75":{},"82":{},"83":{},"87":{},"106":{},"126":{},"128":{},"129":{},"136":{},"137":{},"140":{},"154":{},"156":{}},"component":{},"keyword":{}}],["leftov",{"_index":1335,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["legal",{"_index":907,"title":{},"name":{},"text":{"6":{},"35":{},"44":{},"58":{},"59":{},"68":{},"92":{},"102":{},"114":{},"115":{},"122":{},"144":{},"152":{},"162":{},"163":{}},"component":{},"keyword":{}}],["legitim",{"_index":1027,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["lein",{"_index":3320,"title":{},"name":{},"text":{"72":{},"78":{},"79":{},"81":{},"125":{},"127":{},"132":{},"133":{},"135":{}},"component":{},"keyword":{}}],["leinigen",{"_index":3708,"title":{"81-3":{},"135-3":{}},"name":{},"text":{},"component":{},"keyword":{}}],["leiningen",{"_index":262,"title":{},"name":{},"text":{"2":{},"7":{},"9":{},"10":{},"39":{},"65":{},"69":{},"71":{},"72":{},"73":{},"79":{},"81":{},"96":{},"120":{},"123":{},"124":{},"125":{},"127":{},"133":{},"135":{}},"component":{},"keyword":{}}],["length",{"_index":1456,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"46":{},"57":{},"75":{},"83":{},"104":{},"113":{},"129":{},"137":{},"154":{},"161":{}},"component":{},"keyword":{}}],["lengthi",{"_index":1145,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["less",{"_index":193,"title":{},"name":{},"text":{"2":{},"10":{},"12":{},"17":{},"20":{},"41":{},"45":{},"52":{},"53":{},"62":{},"65":{},"73":{},"77":{},"98":{},"103":{},"108":{},"120":{},"131":{},"153":{}},"component":{},"keyword":{}}],["let",{"_index":799,"title":{},"name":{},"text":{"5":{},"16":{},"66":{},"75":{},"76":{},"79":{},"121":{},"125":{},"129":{},"130":{},"133":{}},"component":{},"keyword":{}}],["letfn",{"_index":3352,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["letsencrypt",{"_index":2265,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["letter",{"_index":1945,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["let’",{"_index":1617,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"20":{},"21":{},"23":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["levarag",{"_index":2384,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["level",{"_index":19,"title":{"24-2":{}},"name":{},"text":{"1":{},"7":{},"11":{},"12":{},"14":{},"16":{},"28":{},"30":{},"41":{},"50":{},"57":{},"58":{},"59":{},"61":{},"64":{},"69":{},"74":{},"75":{},"76":{},"77":{},"80":{},"88":{},"98":{},"107":{},"113":{},"114":{},"115":{},"117":{},"123":{},"128":{},"129":{},"130":{},"131":{},"134":{},"141":{},"156":{},"161":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["level=\"debug",{"_index":3050,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["level=\"warn",{"_index":3054,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["leverag",{"_index":423,"title":{},"name":{},"text":{"3":{},"5":{},"15":{},"23":{},"42":{},"66":{},"78":{},"99":{},"132":{},"150":{}},"component":{},"keyword":{}}],["liabil",{"_index":850,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["liabl",{"_index":877,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["lib",{"_index":1370,"title":{},"name":{},"text":{"10":{},"20":{},"73":{}},"component":{},"keyword":{}}],["librari",{"_index":383,"title":{"39":{},"96":{},"52-1":{},"108-1":{},"157-1":{}},"name":{"39":{},"96":{}},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"15":{},"16":{},"19":{},"20":{},"22":{},"24":{},"26":{},"28":{},"32":{},"37":{},"39":{},"41":{},"43":{},"45":{},"47":{},"50":{},"52":{},"54":{},"66":{},"67":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"78":{},"81":{},"82":{},"86":{},"90":{},"94":{},"96":{},"98":{},"100":{},"101":{},"103":{},"107":{},"108":{},"109":{},"121":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"132":{},"135":{},"136":{},"146":{},"151":{},"153":{},"157":{},"158":{}},"component":{},"keyword":{}}],["library’",{"_index":1706,"title":{},"name":{},"text":{"11":{},"39":{},"74":{},"96":{},"128":{}},"component":{},"keyword":{}}],["licens",{"_index":1402,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["lieu",{"_index":3094,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["life",{"_index":874,"title":{},"name":{},"text":{"6":{},"12":{},"16":{},"68":{},"72":{},"75":{},"78":{},"122":{},"127":{},"129":{},"132":{}},"component":{},"keyword":{}}],["lifecycl",{"_index":2133,"title":{"16-10":{},"64-1":{}},"name":{},"text":{"16":{},"21":{},"28":{},"77":{},"78":{},"81":{},"92":{},"131":{},"132":{},"135":{},"144":{}},"component":{},"keyword":{}}],["lifecyl",{"_index":3292,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["lifetim",{"_index":3383,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["lifeycl",{"_index":2129,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["lift",{"_index":1926,"title":{},"name":{},"text":{"13":{},"20":{},"76":{},"130":{}},"component":{},"keyword":{}}],["light",{"_index":1097,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["lighter",{"_index":369,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["lightn",{"_index":2036,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["likewis",{"_index":711,"title":{},"name":{},"text":{"4":{},"12":{},"13":{},"22":{},"24":{},"35":{},"37":{},"51":{},"64":{},"67":{},"75":{},"82":{},"84":{},"129":{},"136":{},"138":{}},"component":{},"keyword":{}}],["limit",{"_index":494,"title":{},"name":{},"text":{"3":{},"6":{},"16":{},"21":{},"24":{},"27":{},"29":{},"41":{},"47":{},"52":{},"56":{},"64":{},"68":{},"78":{},"84":{},"87":{},"98":{},"108":{},"111":{},"122":{},"132":{},"138":{},"140":{},"157":{}},"component":{},"keyword":{}}],["limiti",{"_index":3285,"title":{"64-8":{}},"name":{},"text":{},"component":{},"keyword":{}}],["line",{"_index":789,"title":{},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"16":{},"21":{},"23":{},"26":{},"41":{},"46":{},"54":{},"66":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"89":{},"98":{},"104":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"154":{}},"component":{},"keyword":{}}],["linear",{"_index":1304,"title":{"40":{},"97":{},"148":{}},"name":{"40":{},"97":{},"148":{}},"text":{"9":{},"40":{},"52":{},"58":{},"59":{},"71":{},"92":{},"97":{},"108":{},"110":{},"114":{},"115":{},"125":{},"144":{},"148":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["link",{"_index":277,"title":{"6-9":{},"68-9":{},"122-9":{}},"name":{},"text":{"2":{},"6":{},"9":{},"13":{},"20":{},"44":{},"62":{},"65":{},"68":{},"71":{},"102":{},"120":{},"122":{},"124":{},"125":{},"137":{},"152":{}},"component":{},"keyword":{}}],["lint",{"_index":302,"title":{},"name":{},"text":{"2":{},"10":{},"73":{}},"component":{},"keyword":{}}],["linter",{"_index":1550,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["linux",{"_index":1591,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"20":{},"23":{},"74":{},"75":{},"76":{},"83":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["list",{"_index":686,"title":{"23-11":{},"23-14":{},"23-16":{},"83-11":{},"83-14":{},"83-15":{},"137-11":{},"137-14":{},"137-15":{}},"name":{},"text":{"4":{},"6":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"22":{},"23":{},"26":{},"32":{},"37":{},"38":{},"39":{},"51":{},"58":{},"59":{},"62":{},"63":{},"64":{},"67":{},"68":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"83":{},"86":{},"90":{},"94":{},"95":{},"96":{},"108":{},"110":{},"114":{},"115":{},"118":{},"122":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"137":{},"143":{},"146":{},"147":{},"157":{},"162":{},"163":{},"164":{}},"component":{},"keyword":{}}],["listen",{"_index":1967,"title":{},"name":{},"text":{"13":{},"27":{},"38":{},"76":{},"95":{},"110":{},"130":{},"143":{},"147":{},"159":{},"164":{}},"component":{},"keyword":{}}],["liter",{"_index":603,"title":{},"name":{},"text":{"3":{},"9":{},"12":{},"44":{},"53":{},"58":{},"59":{},"71":{},"75":{},"76":{},"102":{},"114":{},"115":{},"125":{},"129":{},"130":{},"152":{},"162":{},"163":{}},"component":{},"keyword":{}}],["littl",{"_index":1181,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"14":{},"16":{},"23":{},"70":{},"72":{},"74":{},"76":{},"77":{},"83":{},"126":{},"127":{},"128":{},"130":{},"131":{},"137":{}},"component":{},"keyword":{}}],["live",{"_index":690,"title":{},"name":{"14":{},"77":{},"131":{}},"text":{"4":{},"12":{},"13":{},"14":{},"16":{},"21":{},"31":{},"32":{},"37":{},"67":{},"72":{},"75":{},"76":{},"77":{},"89":{},"90":{},"94":{},"121":{},"127":{},"129":{},"130":{},"131":{}},"component":{},"keyword":{}}],["load",{"_index":1538,"title":{},"name":{},"text":{"10":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"28":{},"41":{},"56":{},"59":{},"73":{},"77":{},"81":{},"110":{},"111":{},"115":{},"131":{},"135":{},"163":{}},"component":{},"keyword":{}}],["loader",{"_index":1520,"title":{},"name":{},"text":{"10":{},"47":{},"73":{},"81":{},"135":{}},"component":{},"keyword":{}}],["local",{"_index":172,"title":{},"name":{},"text":{"2":{},"10":{},"12":{},"13":{},"15":{},"16":{},"22":{},"24":{},"26":{},"27":{},"31":{},"38":{},"41":{},"73":{},"77":{},"81":{},"82":{},"84":{},"86":{},"89":{},"96":{},"98":{},"110":{},"135":{},"136":{},"138":{},"159":{}},"component":{},"keyword":{}}],["localhost",{"_index":1664,"title":{},"name":{},"text":{"11":{},"12":{},"17":{},"19":{},"20":{},"23":{},"27":{},"38":{},"72":{},"73":{},"74":{},"75":{},"78":{},"79":{},"83":{},"110":{},"127":{},"128":{},"129":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["localhost:8080",{"_index":2597,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["localhost:8080/hello",{"_index":2596,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["localhost:8890",{"_index":1651,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["localhost:8890/echo)@1a57fb49",{"_index":3454,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}
1],["localhost:8890/greet?name=michael)@74cc13e0",{"_index":3533,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["locat",{"_index":835,"title":{},"name":{},"text":{"6":{},"11":{},"17":{},"23":{},"47":{},"68":{},"74":{},"83":{},"122":{},"128":{},"137":{}},"component":{},"keyword":{}}],["lock",{"_index":2179,"title":{},"name":{},"text":{"16":{},"72":{},"127":{}},"component":{},"keyword":{}}],["lodg",{"_index":1049,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["log",{"_index":366,"title":{"3":{},"41":{},"98":{},"149":{},"30-2":{},"32-3":{},"41-3":{},"41-6":{},"88-5":{},"90-3":{},"98-3":{},"141-4":{},"142-3":{}},"name":{"3":{},"41":{},"98":{},"149":{}},"text":{"4":{},"7":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"32":{},"39":{},"41":{},"43":{},"64":{},"67":{},"69":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"96":{},"98":{},"100":{},"101":{},"109":{},"123":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"151":{},"158":{}},"component":{},"keyword":{}}],["log/debug",{"_index":2661,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["log/info",{"_index":2283,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["log32(n",{"_index":4006,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["log4j",{"_index":3009,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["logarithm",{"_index":3108,"title":{},"name":{},"text":{"45":{},"103":{},"153":{}},"component":{},"keyword":{}}],["logback",{"_index":1416,"title":{"41-11":{},"98-10":{}},"name":{},"text":{"10":{},"41":{},"73":{},"98":{}},"component":{},"keyword":{}}],["logback.xml",{"_index":1404,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["logger",{"_index":2840,"title":{},"name":{},"text":{"26":{},"30":{},"41":{},"86":{},"88":{},"98":{},"141":{}},"component":{},"keyword":{}}],["loggersourc",{"_index":2839,"title":{"41-8":{},"98-7":{}},"name":{},"text":{"26":{},"41":{},"86":{},"98":{}},"component":{},"keyword":{}}],["loggingmdc",{"_index":3042,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["logic",{"_index":1587,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"16":{},"19":{},"22":{},"23":{},"24":{},"32":{},"37":{},"50":{},"51":{},"58":{},"59":{},"61":{},"74":{},"75":{},"76":{},"78":{},"80":{},"82":{},"83":{},"84":{},"90":{},"94":{},"107":{},"110":{},"114":{},"115":{},"117":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"137":{},"138":{},"146":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["login",{"_index":2399,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["long",{"_index":374,"title":{},"name":{},"text":{"3":{},"6":{},"12":{},"13":{},"14":{},"16":{},"20":{},"22":{},"24":{},"26":{},"32":{},"37":{},"38":{},"43":{},"46":{},"47":{},"54":{},"57":{},"64":{},"68":{},"75":{},"76":{},"77":{},"82":{},"84":{},"90":{},"94":{},"100":{},"104":{},"109":{},"110":{},"113":{},"119":{},"122":{},"125":{},"129":{},"130":{},"131":{},"136":{},"138":{},"142":{},"146":{},"151":{},"154":{},"158":{},"159":{},"161":{}},"component":{},"keyword":{}}],["longer",{"_index":1868,"title":{},"name":{},"text":{"12":{},"16":{},"29":{},"37":{},"58":{},"59":{},"63":{},"77":{},"78":{},"87":{},"94":{},"131":{},"132":{},"146":{}},"component":{},"keyword":{}}],["look",{"_index":124,"title":{"2-6":{},"16-20":{},"65-5":{},"120-5":{}},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"22":{},"23":{},"24":{},"32":{},"44":{},"61":{},"65":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"80":{},"82":{},"83":{},"84":{},"90":{},"102":{},"117":{},"120":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"137":{},"138":{},"142":{},"152":{},"165":{}},"component":{},"keyword":{}}],["lookup",{"_index":2768,"title":{},"name":{},"text":{"23":{},"42":{},"83":{},"99":{},"125":{},"137":{},"150":{}},"component":{},"keyword":{}}],["loop",{"_index":1111,"title":{},"name":{},"text":{"7":{},"14":{},"64":{},"69":{},"77":{},"123":{},"131":{}},"component":{},"keyword":{}}],["lose",{"_index":2407,"title":{},"name":{},"text":{"19":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["lost",{"_index":881,"title":{},"name":{},"text":{"6":{},"11":{},"68":{},"74":{},"122":{},"128":{}},"component":{},"keyword":{}}],["lot",{"_index":319,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"20":{},"24":{},"65":{},"75":{},"76":{},"83":{},"84":{},"120":{},"121":{},"124":{},"129":{},"130":{},"137":{},"138":{}},"component":{},"keyword":{}}],["loud",{"_index":1790,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["love",{"_index":280,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"23":{},"65":{},"74":{},"75":{},"76":{},"83":{},"120":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["low",{"_index":1125,"title":{},"name":{},"text":{"7":{},"28":{},"50":{},"57":{},"64":{},"69":{},"107":{},"123":{}},"component":{},"keyword":{}}],["lower",{"_index":2389,"title":{},"name":{},"text":{"19":{},"23":{},"46":{},"48":{},"104":{},"106":{},"124":{},"154":{},"156":{}},"component":{},"keyword":{}}],["lowercas",{"_index":1943,"title":{},"name":{},"text":{"13":{},"46":{},"76":{},"104":{},"130":{},"154":{}},"component":{},"keyword":{}}],["lowest",{"_index":3193,"title":{},"name":{},"text":{"52":{},"108":{},"157":{}},"component":{},"keyword":{}}],["ls",{"_index":3942,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["lt",{"_index":1933,"title":{},"name":{},"text":{"13":{},"17":{},"20":{},"75":{},"76":{},"78":{},"79":{},"83":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["m",{"_index":2223,"title":{},"name":{},"text":{"16":{},"17":{}},"component":{},"keyword":{}}],["m/via",{"_index":2230,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["m:run",{"_index":2300,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["mac",{"_index":1590,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"83":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["machin",{"_index":1536,"title":{},"name":{},"text":{"10":{},"13":{},"73":{},"76":{},"130":{}},"component":{},"keyword":{}}],["machineri",{"_index":1899,"title":{},"name":{},"text":{"12":{},"18":{},"32":{},"75":{},"79":{},"90":{},"129":{},"133":{},"142":{}},"component":{},"keyword":{}}],["machinery[3",{"_index":3821,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["machinery[4",{"_index":2762,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}
1],["maco",{"_index":2626,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["macro",{"_index":639,"title":{"41-3":{},"41-6":{},"41-7":{},"98-3":{},"98-6":{}},"name":{},"text":{"4":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"22":{},"27":{},"29":{},"31":{},"32":{},"37":{},"41":{},"47":{},"51":{},"67":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"87":{},"89":{},"90":{},"98":{},"128":{},"129":{},"130":{},"132":{},"136":{},"140":{},"142":{}},"component":{},"keyword":{}}],["made",{"_index":453,"title":{},"name":{},"text":{"3":{},"11":{},"13":{},"16":{},"24":{},"32":{},"50":{},"51":{},"74":{},"76":{},"78":{},"107":{},"128":{},"130":{},"132":{}},"component":{},"keyword":{}}],["magic",{"_index":1606,"title":{},"name":{},"text":{"11":{},"20":{},"44":{},"74":{},"76":{},"102":{},"128":{},"130":{},"152":{}},"component":{},"keyword":{}}],["mail",{"_index":996,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["main",{"_index":1527,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"16":{},"17":{},"20":{},"22":{},"23":{},"65":{},"72":{},"73":{},"75":{},"76":{},"78":{},"82":{},"83":{},"84":{},"120":{},"121":{},"125":{},"127":{},"129":{},"130":{},"132":{},"137":{},"138":{}},"component":{},"keyword":{}}],["main.clj",{"_index":1411,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["main/*connector",{"_index":2701,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["main/*databas",{"_index":2750,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["main/databas",{"_index":3819,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["main/restart",{"_index":3818,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["main/serv",{"_index":3767,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["main/start",{"_index":2698,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["main/test",{"_index":2713,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["mainli",{"_index":2941,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["maintain",{"_index":26,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"9":{},"52":{},"58":{},"68":{},"108":{},"114":{},"122":{},"162":{}},"component":{},"keyword":{}}],["major",{"_index":1494,"title":{},"name":{},"text":{"10":{},"35":{},"51":{},"92":{},"110":{},"144":{}},"component":{},"keyword":{}}],["make",{"_index":300,"title":{"54-1":{},"109-1":{},"158-1":{}},"name":{},"text":{"2":{},"3":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"37":{},"46":{},"54":{},"58":{},"61":{},"62":{},"64":{},"65":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"94":{},"101":{},"104":{},"109":{},"110":{},"117":{},"120":{},"121":{},"122":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"146":{},"154":{},"158":{},"159":{},"165":{}},"component":{},"keyword":{}}],["malici",{"_index":960,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["man",{"_index":3964,"title":{},"name":{},"text":{"136":{}},"component":{},"keyword":{}}],["manag",{"_index":507,"title":{"13-10":{},"16-17":{},"76-10":{},"130-10":{}},"name":{},"text":{"3":{},"6":{},"7":{},"13":{},"15":{},"16":{},"24":{},"28":{},"41":{},"50":{},"52":{},"68":{},"72":{},"76":{},"78":{},"81":{},"98":{},"107":{},"122":{},"125":{},"127":{},"130":{},"132":{},"135":{},"143":{}},"component":{},"keyword":{}}],["manager.xml",{"_index":2553,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["mandatori",{"_index":1025,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["mani",{"_index":146,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"8":{},"10":{},"12":{},"13":{},"15":{},"16":{},"22":{},"23":{},"24":{},"27":{},"37":{},"39":{},"41":{},"42":{},"46":{},"47":{},"51":{},"61":{},"64":{},"65":{},"67":{},"69":{},"70":{},"73":{},"75":{},"76":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"94":{},"96":{},"98":{},"99":{},"100":{},"104":{},"110":{},"117":{},"120":{},"123":{},"126":{},"129":{},"130":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"150":{},"151":{},"165":{}},"component":{},"keyword":{}}],["manifest",{"_index":245,"title":{},"name":{},"text":{"2":{},"3":{},"65":{},"120":{}},"component":{},"keyword":{}}],["manipul",{"_index":2812,"title":{"37-4":{},"94-4":{},"146-4":{},"160-1":{}},"name":{},"text":{"24":{},"29":{},"37":{},"71":{},"84":{},"87":{},"94":{},"125":{},"138":{},"140":{},"146":{},"160":{}},"component":{},"keyword":{}}],["manner",{"_index":958,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["manual",{"_index":2505,"title":{},"name":{},"text":{"20":{},"23":{},"74":{},"83":{},"128":{},"137":{}},"component":{},"keyword":{}}],["map",{"_index":411,"title":{"27":{},"29":{},"42":{},"46":{},"48":{},"87":{},"99":{},"104":{},"106":{},"110":{},"140":{},"150":{},"154":{},"156":{},"159":{},"12-10":{},"16-7":{},"19-8":{},"27-1":{},"41-10":{},"59-7":{},"75-10":{},"98-9":{},"110-1":{},"110-6":{},"115-7":{},"124-5":{},"124-6":{},"129-10":{},"163-7":{}},"name":{"27":{},"29":{},"42":{},"46":{},"48":{},"87":{},"99":{},"104":{},"106":{},"110":{},"140":{},"150":{},"154":{},"156":{},"159":{}},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"117":{},"118":{},"119":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"146":{},"147":{},"148":{},"150":{},"152":{},"153":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["map.adoc",{"_index":3999,"title":{},"name":{},"text":{"156":{}},"component":{},"keyword":{}}],["map.us",{"_index":3103,"title":{},"name":{},"text":{"44":{}},"component":{},"keyword":{}}],["map’",{"_index":3461,"title":{},"name":{},"text":{"74":{},"78":{},"128":{},"132":{}},"component":{},"keyword":{}}],["mar",{"_index":349,"title":{"3-2":{}},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["mark",{"_index":195,"title":{},"name":{},"text":{"2":{},"13":{},"51":{},"64":{},"65":{},"120":{}},"component":{},"keyword":{}}],["marker",{"_index":3599,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["market",{"_index":999,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["master",{"_index":1792,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["masteri",{"_index":1755,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["match",{"_index":499,"title":{},"name":{},"text":{"3":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"19":{},"20":{},"22":{},"23":{},"29":{},"30":{},"32":{},"37":{},"39":{},"40":{},"41":{},"42":{},"45":{},"47":{},"51":{},"52":{},"53":{},"58":{},"59":{},"63":{},"71":{},"73":{},"74":{},"75":{},"76":{},"81":{},"82":{},"83":{},"90":{},"92":{},"94":{},"96":{},"97":{},"98":{},"99":{},"103":{},"108":{},"110":{},"114":{},"115":{},"118":{},"125":{},"128":{},"129":{},"130":{},"135":{},"136":{},"137":{},"142":{},"144":{},"146":{},"150":{},"153":{},"157":{},"159":{},"160":{},"162":{},"163":{}},"component":{},"keyword":{}}],["matcher",{"_index":2220,"title":{},"name":{},"text":{"16":{},"19":{}},"component":{},"keyword":{}}],["materi",{"_index":3338,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["matter",{"_index":2500,"title":{},"name":{},"text":{"20":{},"22":{},"41":{},"58":{},"78":{},"81":{},"82":{},"98":{},"114":{},"132":{},"135":{},"136":{},"162":{}},"component":{},"keyword":{}}],["matur",{"_index":3550,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["maven",{"_index":1081,"title":{},"name":{},"text":{"7":{},"10":{},"69":{},"73":{},"81":{},"123":{},"124":{},"135":{}},"component":{},"keyword":{}}],["max",{"_index":1473,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"38":{},"64":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"95":{},"100":{},"110":{},"119":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"147":{},"151":{},"159":{}},"component":{},"keyword":{}}],["maximum",{"_index":1133,"title":{},"name":{},"text":{"8":{},"38":{},"64":{},"70":{},"95":{},"126":{},"147":{}},"component":{},"keyword":{}}],["mayb",{"_index":1320,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["mb",{"_index":2486,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["mdc",{"_index":2869,"title":{},"name":{},"text":{"29":{},"41":{},"87":{},"98":{},"140":{}},"component":{},"keyword":{}}],["mdn",{"_index":2370,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["mean",{"_index":527,"title":{},"name":{},"text":{"3":{},"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"22":{},"23":{},"28":{},"30":{},"37":{},"39":{},"43":{},"52":{},"57":{},"68":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"88":{},"92":{},"94":{},"96":{},"100":{},"108":{},"113":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"136":{},"137":{},"141":{},"144":{},"146":{},"151":{},"157":{},"161":{}},"component":{},"keyword":{}}],["meaning",{"_index":2373,"title":{},"name":{},"text":{"19":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["meanwhil",{"_index":4000,"title":{},"name":{},"text":{"156":{}},"component":{},"keyword":{}}],["measur",{"_index":2395,"title":{},"name":{},"text":{"19":{},"43":{},"73":{},"101":{}},"component":{},"keyword":{}}],["mechan",{"_index":2803,"title":{},"name":{},"text":{"24":{},"29":{},"31":{},"44":{},"54":{},"89":{},"102":{},"109":{},"152":{},"158":{}},"component":{},"keyword":{}}],["median",{"_index":3875,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["medic",{"_index":860,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["meet",{"_index":905,"title":{},"name":{},"text":{"6":{},"9":{},"12":{},"14":{},"68":{},"71":{},"75":{},"77":{},"122":{},"125":{},"129":{},"131":{}},"component":{},"keyword":{}}],["member",{"_index":49,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["memori",{"_index":2684,"title":{},"name":{},"text":{"23":{},"47":{},"57":{},"64":{},"83":{},"100":{},"113":{},"137":{},"151":{},"161":{}},"component":{},"keyword":{}}],["mental",{"_index":853,"title":{},"name":{},"text":{"6":{},"13":{},"23":{},"68":{},"76":{},"83":{},"122":{},"130":{},"137":{}},"component":{},"keyword":{}}],["mention",{"_index":2414,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["merg",{"_index":1850,"title":{},"name":{},"text":{"12":{},"44":{},"51":{},"52":{},"63":{},"72":{},"75":{},"102":{},"110":{},"118":{},"127":{},"129":{},"152":{}},"component":{},"keyword":{}}],["mess",{"_index":2490,"title":{},"name":{},"text":{"20":{},"75":{},"129":{}},"component":{},"keyword":{}}],["messag",{"_index":1621,"title":{"64-7":{}},"name":{},"text":{"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"21":{},"22":{},"24":{},"25":{},"38":{},"41":{},"43":{},"49":{},"50":{},"54":{},"57":{},"64":{},"72":{},"74":{},"76":{},"77":{},"82":{},"84":{},"85":{},"98":{},"101":{},"105":{},"107":{},"109":{},"113":{},"119":{},"125":{},"127":{},"128":{},"130":{},"131":{},"136":{},"138":{},"139":{},"155":{},"158":{},"161":{}},"component":{},"keyword":{}}],["met",{"_index":2209,"title":{},"name":{},"text":{"16":{},"52":{},"108":{}},"component":{},"keyword":{}}],["meta",{"_index":2744,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["metadata",{"_index":654,"title":{},"name":{},"text":{"4":{},"29":{},"37":{},"46":{},"59":{},"67":{},"81":{},"87":{},"94":{},"104":{},"115":{},"135":{},"140":{},"154":{},"163":{}},"component":{},"keyword":{}}],["metaphor",{"_index":2250,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["meter",{"_index":3862,"title":{"100-6":{},"151-6":{}},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["method",{"_index":491,"title":{"44-5":{},"88-12":{},"102-5":{},"141-11":{},"152-5":{}},"name":{},"text":{"3":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"40":{},"41":{},"43":{},"44":{},"46":{},"47":{},"51":{},"52":{},"53":{},"59":{},"61":{},"62":{},"64":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"82":{},"83":{},"84":{},"92":{},"94":{},"97":{},"98":{},"102":{},"104":{},"108":{},"110":{},"115":{},"117":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"137":{},"138":{},"144":{},"152":{},"154":{},"157":{},"159":{},"165":{}},"component":{},"keyword":{}}],["metric",{"_index":634,"title":{"43":{},"100":{},"101":{},"151":{},"4-9":{},"43-1":{},"43-3":{},"43-5":{},"67-6":{},"98-11":{},"101-1":{},"101-3":{}},"name":{"43":{},"100":{},"101":{},"151":{}},"text":{"4":{},"24":{},"26":{},"39":{},"43":{},"52":{},"67":{},"86":{},"96":{},"98":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["metricrecord",{"_index":3882,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["metricsourc",{"_index":2844,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["michael",{"_index":1835,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["micro",{"_index":611,"title":{},"name":{},"text":{"3":{},"53":{}},"component":{},"keyword":{}}],["microservic",{"_index":3915,"title":{},"name":{},"text":{"121":{}},"component":{},"keyword":{}}],["middlewar",{"_index":2643,"title":{"50":{},"107":{}},"name":{},"text":{"22":{},"24":{},"50":{},"72":{},"82":{},"84":{},"94":{},"107":{},"127":{},"136":{},"138":{},"146":{}},"component":{},"keyword":{}}],["middlewares/cont",{"_index":1480,"title":{},"name":{},"text":{"10":{},"73":{},"75":{},"83":{},"129":{},"137":{},"159":{}},"component":{},"keyword":{}}],["middlewares/fil",{"_index":4014,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["middlewares/resourc",{"_index":1455,"title":{},"name":{},"text":{"10":{},"73":{},"159":{}},"component":{},"keyword":{}}],["middlewares/sess",{"_index":4013,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["migrat",{"_index":3885,"title":{},"name":{},"text":{"101":{}},"component":{},"keyword":{}}],["miken",{"_index":1265,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["milli",{"_index":3195,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["millisecond",{"_index":2979,"title":{},"name":{},"text":{"38":{},"47":{},"64":{}},"component":{},"keyword":{}}],["mime",{"_index":3899,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["min",{"_index":3874,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["mind",{"_index":2088,"title":{},"name":{},"text":{"15":{},"16":{},"41":{},"58":{},"59":{},"75":{},"78":{},"98":{},"110":{},"114":{},"115":{},"129":{},"132":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["minim",{"_index":1983,"title":{},"name":{},"text":{"13":{},"16":{},"18":{},"20":{},"21":{},"41":{},"76":{},"79":{},"98":{},"130":{},"133":{}},"component":{},"keyword":{}}],["minimum",{"_index":1197,"title":{"9-8":{},"71-8":{},"125-8":{}},"name":{},"text":{},"component":{},"keyword":{}}],["minor",{"_index":2247,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["minut",{"_index":1227,"title":{},"name":{},"text":{"9":{},"13":{},"23":{},"71":{},"76":{},"79":{},"83":{},"100":{},"125":{},"130":{},"133":{},"137":{},"151":{}},"component":{},"keyword":{}}],["mirror",{"_index":1907,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["mislead",{"_index":1308,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["mismatch",{"_index":2235,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["miss",{"_index":1705,"title":{"124-12":{}},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"30":{},"64":{},"74":{},"75":{},"76":{},"110":{},"128":{},"129":{},"130":{},"160":{}},"component":{},"keyword":{}}],["mistak",{"_index":1874,"title":{},"name":{},"text":{"12":{},"78":{},"132":{}},"component":{},"keyword":{}}],["mistakenli",{"_index":3597,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["mix",{"_index":1896,"title":{},"name":{},"text":{"12":{},"13":{},"16":{},"23":{},"24":{},"52":{},"58":{},"75":{},"76":{},"83":{},"84":{},"129":{},"130":{},"137":{},"138":{}},"component":{},"keyword":{}}],["mkdir",{"_index":1940,"title":{},"name":{},"text":{"13":{},"18":{},"21":{},"23":{},"76":{},"81":{},"83":{},"130":{},"135":{},"137":{}},"component":{},"keyword":{}}],["mock",{"_index":482,"title":{},"name":{},"text":{"3":{},"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["mode",{"_index":694,"title":{"31":{},"89":{},"14-3":{},"26-5":{},"27-5":{}},"name":{"31":{},"89":{}},"text":{"4":{},"10":{},"13":{},"14":{},"15":{},"16":{},"20":{},"23":{},"26":{},"27":{},"28":{},"31":{},"32":{},"37":{},"52":{},"67":{},"72":{},"73":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"86":{},"89":{},"90":{},"94":{},"127":{},"130":{},"132":{},"133":{},"135":{},"137":{},"142":{},"146":{}},"component":{},"keyword":{}}],["mode=block",{"_index":1469,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["mode=block\\r\\nx",{"_index":3443,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["mode=tru",{"_index":2062,"title":{},"name":{},"text":{"14":{},"16":{},"26":{},"89":{}},"component":{},"keyword":{}}],["mode[1",{"_index":3826,"title":{},"name":{},"text":{"86":{}},"component":{},"keyword":{}}],["model",{"_index":428,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"22":{},"24":{},"45":{},"50":{},"66":{},"69":{},"78":{},"82":{},"84":{},"103":{},"107":{},"121":{},"123":{},"132":{},"136":{},"138":{},"153":{}},"component":{},"keyword":{}}],["modern",{"_index":2412,"title":{},"name":{},"text":{"20":{},"54":{},"62":{},"109":{},"158":{}},"component":{},"keyword":{}}],["modif",{"_index":1756,"title":{},"name":{},"text":{"11":{},"37":{},"74":{},"128":{}},"component":{},"keyword":{}}],["modifi",{"_index":1088,"title":{"88-2":{},"141-2":{}},"name":{},"text":{"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"16":{},"19":{},"22":{},"23":{},"24":{},"29":{},"37":{},"43":{},"46":{},"64":{},"69":{},"70":{},"71":{},"74":{},"77":{},"82":{},"83":{},"84":{},"87":{},"88":{},"94":{},"104":{},"123":{},"125":{},"126":{},"128":{},"131":{},"136":{},"137":{},"138":{},"140":{},"141":{},"146":{},"154":{}},"component":{},"keyword":{}}],["modul",{"_index":135,"title":{},"name":{},"text":{"2":{},"3":{},"65":{},"76":{},"120":{},"130":{}},"component":{},"keyword":{}}],["modules=ee10",{"_index":2497,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["moment",{"_index":1601,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["monitor",{"_index":2567,"title":{},"name":{},"text":{"20":{},"64":{}},"component":{},"keyword":{}}],["moral",{"_index":1887,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["more",{"_index":310,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"28":{},"32":{},"35":{},"37":{},"44":{},"46":{},"47":{},"48":{},"51":{},"52":{},"53":{},"58":{},"59":{},"61":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"90":{},"92":{},"94":{},"102":{},"104":{},"106":{},"108":{},"114":{},"115":{},"117":{},"119":{},"120":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"144":{},"146":{},"152":{},"154":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["mostli",{"_index":330,"title":{},"name":{},"text":{"2":{},"3":{},"12":{},"20":{},"65":{},"75":{},"120":{},"129":{}},"component":{},"keyword":{}}],["motion",{"_index":2347,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["motiv",{"_index":2787,"title":{"24-1":{},"40-1":{},"42-1":{},"45-1":{},"53-1":{},"84-1":{},"97-1":{},"99-1":{},"103-1":{},"138-1":{},"148-1":{},"150-1":{},"153-1":{}},"name":{},"text":{},"component":{},"keyword":{}}],["move",{"_index":442,"title":{"12-9":{},"75-9":{}
1,"129-9":{}},"name":{},"text":{"3":{},"4":{},"13":{},"16":{},"19":{},"59":{},"76":{},"78":{},"84":{},"100":{},"115":{},"124":{},"130":{},"132":{},"138":{},"151":{}},"component":{},"keyword":{}}],["ms",{"_index":2208,"title":{},"name":{},"text":{"16":{},"22":{},"82":{},"119":{},"136":{}},"component":{},"keyword":{}}],["msg",{"_index":1499,"title":{},"name":{},"text":{"10":{},"12":{},"13":{},"16":{},"23":{},"41":{},"73":{},"75":{},"78":{},"83":{},"98":{},"129":{},"132":{},"137":{}},"component":{},"keyword":{}}],["msg%n</pattern",{"_index":3049,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["msgpack",{"_index":3102,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["much",{"_index":228,"title":{},"name":{},"text":{"2":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"22":{},"23":{},"35":{},"49":{},"50":{},"51":{},"53":{},"65":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"82":{},"83":{},"92":{},"100":{},"105":{},"107":{},"110":{},"120":{},"123":{},"126":{},"127":{},"128":{},"129":{},"130":{},"132":{},"136":{},"137":{},"144":{},"151":{},"155":{}},"component":{},"keyword":{}}],["mud",{"_index":2080,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["multi",{"_index":2410,"title":{},"name":{},"text":{"20":{},"23":{},"50":{},"83":{},"107":{},"137":{}},"component":{},"keyword":{}}],["multipart",{"_index":3104,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["multipl",{"_index":1223,"title":{"19-2":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"18":{},"19":{},"23":{},"39":{},"47":{},"54":{},"59":{},"61":{},"71":{},"74":{},"75":{},"76":{},"80":{},"83":{},"96":{},"100":{},"115":{},"117":{},"125":{},"128":{},"129":{},"130":{},"134":{},"137":{},"151":{},"163":{},"165":{}},"component":{},"keyword":{}}],["multithread",{"_index":2809,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["mutabl",{"_index":505,"title":{},"name":{},"text":{"3":{},"12":{},"16":{},"23":{},"64":{}},"component":{},"keyword":{}}],["mutat",{"_index":1759,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["mvn",{"_index":3738,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["mvn/version",{"_index":1377,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"39":{},"73":{},"74":{},"75":{},"76":{},"78":{},"83":{},"96":{},"128":{},"129":{},"130":{},"132":{},"137":{}},"component":{},"keyword":{}}],["mxyzptlk",{"_index":1775,"title":{},"name":{},"text":{"11":{},"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["myapp",{"_index":3731,"title":{},"name":{},"text":{"81":{},"125":{},"135":{}},"component":{},"keyword":{}}],["myapp.serv",{"_index":3732,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["myapp.servic",{"_index":3247,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["myapp.service/list",{"_index":3262,"title":{},"name":{},"text":{"59":{},"115":{}},"component":{},"keyword":{}}],["myapp.war",{"_index":3735,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["n",{"_index":1778,"title":{},"name":{},"text":{"11":{},"12":{},"15":{},"16":{},"72":{},"74":{},"75":{},"104":{},"106":{},"110":{},"127":{},"128":{},"129":{},"154":{},"156":{},"159":{}},"component":{},"keyword":{}}],["na",{"_index":817,"title":{"6-5":{},"68-5":{}},"name":{},"text":{"6":{},"68":{},"124":{}},"component":{},"keyword":{}}],["name",{"_index":1077,"title":{"9-18":{},"9-19":{},"9-20":{},"12-12":{},"26-8":{},"58-11":{},"71-18":{},"71-19":{},"71-20":{},"114-10":{},"125-18":{},"125-19":{},"125-20":{},"162-10":{}},"name":{},"text":{"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"29":{},"30":{},"32":{},"37":{},"38":{},"39":{},"41":{},"44":{},"46":{},"47":{},"48":{},"50":{},"51":{},"52":{},"54":{},"55":{},"58":{},"59":{},"61":{},"62":{},"63":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"90":{},"94":{},"95":{},"96":{},"98":{},"100":{},"102":{},"104":{},"106":{},"107":{},"108":{},"109":{},"110":{},"114":{},"115":{},"117":{},"118":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"142":{},"146":{},"147":{},"151":{},"152":{},"154":{},"156":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["name/valu",{"_index":1847,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["name=\"io.pedest",{"_index":3055,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["name=\"org.eclipse.jetti",{"_index":3053,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["name=\"pedest",{"_index":1487,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["name=\"stdout",{"_index":3046,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}
1],["name=michael",{"_index":1839,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["name>connector</servlet",{"_index":2444,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["name>destroy</param",{"_index":3728,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["name>init</param",{"_index":3723,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["name>io.pedestal.connector.bridg",{"_index":2448,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["name>pedest",{"_index":3719,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["name>pedestalservlet</servlet",{"_index":3721,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["name>service</param",{"_index":3726,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["namespac",{"_index":410,"title":{"15-2":{},"15-3":{},"15-4":{},"15-5":{},"16-13":{}},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"28":{},"29":{},"37":{},"41":{},"43":{},"47":{},"50":{},"51":{},"52":{},"56":{},"61":{},"67":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"88":{},"98":{},"100":{},"101":{},"107":{},"108":{},"110":{},"111":{},"117":{},"125":{},"127":{},"128":{},"130":{},"131":{},"132":{},"134":{},"135":{},"136":{},"137":{},"138":{},"141":{},"146":{},"151":{},"157":{},"165":{}},"component":{},"keyword":{}}],["nasti",{"_index":1620,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["nativ",{"_index":3565,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["natur",{"_index":1026,"title":{},"name":{},"text":{"6":{},"52":{},"68":{},"108":{},"122":{}},"component":{},"keyword":{}}],["navig",{"_index":1605,"title":{},"name":{},"text":{"11":{},"72":{},"74":{},"79":{},"127":{},"128":{},"133":{}},"component":{},"keyword":{}}],["na’",{"_index":916,"title":{},"name":{},"text":{"6":{},"68":{}},"component":{},"keyword":{}}],["nc",{"_index":1069,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["ndate",{"_index":3436,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["nearli",{"_index":610,"title":{},"name":{},"text":{"3":{},"11":{},"19":{},"47":{},"53":{},"74":{},"128":{}},"component":{},"keyword":{}}],["necessari",{"_index":101,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"9":{},"10":{},"11":{},"14":{},"15":{},"16":{},"17":{},"19":{},"20":{},"23":{},"26":{},"37":{},"39":{},"47":{},"64":{},"68":{},"71":{},"72":{},"73":{},"74":{},"77":{},"78":{},"86":{},"94":{},"96":{},"110":{},"122":{},"125":{},"127":{},"128":{},"131":{},"132":{},"146":{},"159":{}},"component":{},"keyword":{}}],["necessit",{"_index":435,"title":{},"name":{},"text":{"3":{},"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["need",{"_index":312,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"35":{},"38":{},"39":{},"43":{},"44":{},"47":{},"51":{},"52":{},"57":{},"59":{},"61":{},"64":{},"65":{},"66":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"92":{},"94":{},"95":{},"96":{},"99":{},"100":{},"101":{},"102":{},"108":{},"110":{},"113":{},"115":{},"117":{},"120":{},"121":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"143":{},"144":{},"147":{},"150":{},"151":{},"152":{},"160":{},"161":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["negoti",{"_index":1687,"title":{},"name":{},"text":{"11":{},"23":{},"24":{},"64":{},"74":{},"83":{},"84":{},"94":{},"128":{},"137":{},"138":{},"146":{}},"component":{},"keyword":{}}],["negotiation/negoti",{"_index":1697,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["nest",{"_index":1752,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"32":{},"52":{},"59":{},"63":{},"71":{},"74":{},"75":{},"83":{},"90":{},"108":{},"115":{},"118":{},"125":{},"128":{},"129":{},"137":{},"142":{},"163":{}},"component":{},"keyword":{}}],["netti",{"_index":2794,"title":{},"name":{},"text":{"24":{},"84":{},"121":{},"138":{}},"component":{},"keyword":{}}
1],["network",{"_index":773,"title":{"84-4":{},"138-4":{}},"name":{},"text":{"5":{},"7":{},"8":{},"13":{},"24":{},"27":{},"28":{},"35":{},"37":{},"49":{},"64":{},"70":{},"84":{},"110":{},"126":{},"138":{},"159":{}},"component":{},"keyword":{}}],["never",{"_index":150,"title":{},"name":{},"text":{"2":{},"46":{},"72":{},"104":{},"124":{},"127":{},"154":{}},"component":{},"keyword":{}}],["new",{"_index":126,"title":{"2-7":{},"10-1":{},"10-3":{},"51-3":{},"65-6":{},"73-1":{},"73-3":{},"79-7":{},"120-6":{},"133-7":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"29":{},"32":{},"35":{},"37":{},"41":{},"46":{},"50":{},"51":{},"52":{},"54":{},"55":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"87":{},"90":{},"92":{},"94":{},"98":{},"101":{},"104":{},"107":{},"108":{},"109":{},"112":{},"120":{},"122":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"140":{},"142":{},"144":{},"146":{},"154":{},"157":{},"158":{},"160":{}},"component":{},"keyword":{}}],["newer",{"_index":1233,"title":{},"name":{},"text":{"9":{},"24":{},"71":{}},"component":{},"keyword":{}}],["newest",{"_index":3174,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["newli",{"_index":644,"title":{},"name":{},"text":{"4":{},"67":{},"78":{},"132":{}},"component":{},"keyword":{}}],["next",{"_index":210,"title":{"11-15":{},"12-17":{},"13-15":{},"22-12":{},"23-19":{},"72-15":{},"74-15":{},"75-15":{},"76-15":{},"82-12":{},"83-18":{},"127-15":{},"128-15":{},"129-15":{},"130-15":{},"136-12":{},"137-18":{}},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"20":{},"22":{},"23":{},"24":{},"29":{},"32":{},"37":{},"50":{},"54":{},"64":{},"65":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"87":{},"90":{},"94":{},"107":{},"109":{},"120":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"140":{},"142":{},"146":{},"158":{},"160":{}},"component":{},"keyword":{}}],["nginx",{"_index":3917,"title":{},"name":{},"text":{"121":{}},"component":{},"keyword":{}}],["nice",{"_index":1616,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"32":{},"74":{},"75":{},"76":{},"83":{},"90":{},"125":{},"128":{},"129":{},"130":{},"137":{},"142":{}},"component":{},"keyword":{}}],["nil",{"_index":765,"title":{},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"21":{},"23":{},"26":{},"29":{},"32":{},"37":{},"44":{},"47":{},"49":{},"52":{},"64":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"86":{},"87":{},"88":{},"90":{},"94":{},"102":{},"105":{},"108":{},"110":{},"119":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"140":{},"141":{},"146":{},"152":{},"155":{},"157":{},"159":{}},"component":{},"keyword":{}}],["nio",{"_index":2929,"title":{"49-1":{}},"name":{},"text":{"35":{},"49":{},"66":{},"92":{},"105":{},"121":{},"144":{},"155":{}},"component":{},"keyword":{}}],["nm",{"_index":3473,"title":{},"name":{},"text":{"74":{},"75":{},"83":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["nois",{"_index":661,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["nomin",{"_index":623,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["non",{"_index":641,"title":{},"name":{},"text":{"4":{},"5":{},"11":{},"12":{},"16":{},"33":{},"37":{},"57":{},"59":{},"67":{},"72":{},"74":{},"75":{},"78":{},"79":{},"88":{},"94":{},"110":{},"113":{},"115":{},"127":{},"128":{},"129":{},"132":{},"133":{},"141":{},"146":{},"159":{},"161":{}},"component":{},"keyword":{}}],["none",{"_index":489,"title":{},"name":{},"text":{"3":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"20":{},"23":{},"38":{},"44":{},"53":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"95":{},"102":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"147":{},"152":{},"159":{},"164":{}},"component":{},"keyword":{}}],["none\\r\\ncont",{"_index":3445,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["nonetheless",{"_index":1016,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["noopen",{"_index":1470,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["noopen\\r\\nx",{"_index":3444,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["nop",{"_index":3011,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["nope",{"_index":2749,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["normal",{"_index":699,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"19":{},"20":{},"21":{},"24":{},"32":{},"37":{},"52":{},"67":{},"69":{},"70":{},"74":{},"77":{},"78":{},"84":{},"88":{},"90":{},"94":{},"108":{},"123":{},"126":{},"128":{},"131":{},"132":{},"138":{},"141":{},"142":{},"146":{}},"component":{},"keyword":{}}],["north",{"_index":998,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["nosniff",{"_index":1476,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["nosniff\\r\\nx",{"_index":3442,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["notat",{"_index":3559,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["note",{"_index":1194,"title":{"9-7":{},"40-5":{},"42-5":{},"45-5":{},"47-2":{},"53-5":{},"71-7":{},"97-5":{},"99-5":{},"103-5":{},"125-7":{},"148-5":{},"150-5":{},"153-5":{}},"name":{},"text":{"11":{},"13":{},"23":{},"29":{},"37":{},"41":{},"74":{},"76":{},"81":{},"83":{},"87":{},"88":{},"94":{},"98":{},"109":{},"128":{},"130":{},"135":{},"137":{},"140":{},"141":{},"146":{},"158":{},"160":{}},"component":{},"keyword":{}}],["noth",{"_index":1144,"title":{},"name":{},"text":{"8":{},"9":{},"11":{},"12":{},"13":{},"19":{},"23":{},"61":{},"70":{},"71":{},"74":{},"75":{},"76":{},"80":{},"83":{},"117":{},"125":{},"126":{},"128":{},"129":{},"130":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["notic",{"_index":989,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"23":{},"61":{},"68":{},"71":{},"73":{},"74":{},"75":{},"77":{},"78":{},"80":{},"83":{},"117":{},"122":{},"125":{},"128":{},"129":{},"131":{},"132":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}
1],["notif",{"_index":2607,"title":{},"name":{},"text":{"21":{},"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["notori",{"_index":384,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["nov",{"_index":2045,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["now",{"_index":647,"title":{},"name":{},"text":{"4":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"24":{},"37":{},"51":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"86":{},"100":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{},"151":{}},"component":{},"keyword":{}}],["ns",{"_index":749,"title":{},"name":{},"text":{"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"24":{},"41":{},"47":{},"54":{},"58":{},"59":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"96":{},"98":{},"114":{},"115":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{},"162":{},"163":{}},"component":{},"keyword":{}}],["nubank",{"_index":342,"title":{"6-5":{},"68-5":{}},"name":{},"text":{"2":{},"3":{},"6":{},"68":{},"124":{}},"component":{},"keyword":{}}],["nubank/match",{"_index":2161,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["null",{"_index":2002,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["nullpointerexcept",{"_index":2296,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["number",{"_index":568,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"11":{},"13":{},"14":{},"16":{},"17":{},"22":{},"23":{},"27":{},"29":{},"38":{},"41":{},"43":{},"46":{},"47":{},"51":{},"52":{},"53":{},"63":{},"69":{},"70":{},"71":{},"74":{},"77":{},"78":{},"82":{},"83":{},"87":{},"95":{},"98":{},"100":{},"101":{},"104":{},"108":{},"110":{},"118":{},"123":{},"125":{},"126":{},"128":{},"131":{},"132":{},"136":{},"137":{},"140":{},"143":{},"147":{},"151":{},"154":{},"159":{},"160":{}},"component":{},"keyword":{}}],["numer",{"_index":1270,"title":{},"name":{},"text":{"9":{},"43":{},"71":{},"101":{},"125":{}},"component":{},"keyword":{}}],["o(n",{"_index":4009,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@1227013b{/,null,avail",{"_index":3958,"title":{},"name":{},"text":{"129":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@1227013b{/,null,stop",{"_index":3512,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@17c4dcc6{/,null,unavail",{"_index":3626,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@185d151b{/,null,avail",{"_index":3628,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@38f183e9{/,null,avail",{"_index":3686,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@51e28071{/,null,avail",{"_index":3966,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@549db1c6{/,null,avail",{"_index":3485,"title":{},"name":{},"text":{"75":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@699a53d4{/,null,avail",{"_index":3517,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@6c8f2e4e{/,null,avail",{"_index":3749,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["o.e.j.s.servletcontexthandler@b1078f2{/,null,avail",{"_index":3618,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["o.e.j.server.handler.con[texthandl",{"_index":3685,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["o.e.jetty.server.abstractconnector",{"_index":3687,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["obey",{"_index":3948,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["object",{"_index":703,"title":{},"name":{},"text":{"4":{},"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"20":{},"21":{},"23":{},"27":{},"29":{},"38":{},"43":{},"46":{},"52":{},"64":{},"67":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"87":{},"100":{},"110":{},"119":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"140":{},"151":{},"159":{}},"component":{},"keyword":{}}],["object[clojure.core$constantly$fn__5740",{"_index":3791,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[clojure.core$constantly$fn__6443",{"_index":3561,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["object[clojure.lang.delay",{"_index":1660,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"74":{},"75":{},"83":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["object[clojure.lang.persistentqueu",{"_index":3794,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[com.blueant.peripheral.service$service_map$fn__17845",{"_index":3409,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.http_kit$create_connector$reify__15862",{"_index":1812,"title":{},"name":{},"text":{"12":{},"13":{},"23":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.http_kit$create_connector$reify__17907",{"_index":1430,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.http_kit$create_connector$reify__17973",{"_index":1532,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.http_kit.impl$mock_channel$reify__15583",{"_index":2703,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl",{"_index":3427,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835",{"_index":3490,"title":{},"name":{},"text":{"75":{},"129":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14892",{"_index":3753,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__17265",{"_index":3398,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$servlet_async_qmark_",{"_index":3797,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$start_servlet_async",{"_index":3784,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810",{"_index":3787,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15089",{"_index":3493,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15091",{"_index":3501,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15231",{"_index":3971,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15233",{"_index":3978,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15680",{"_index":3756,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__15682",{"_index":3764,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__17934",{"_index":3401,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.jetty$server$fn__17936",{"_index":3418,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.route.prefix_tree$add_satisfies_constraints_qmark_$fn__11533",{"_index":3811,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.http.servlet.fnservlet",{"_index":3412,"title":{},"name":{},"text":{"73":{},"74":{},"75":{},"83":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.test$test_servlet_request$reify__15071",{"_index":3776,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[io.pedestal.test$test_servlet_response$reify__15083",{"_index":3771,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}
1],["object[io.pedestal.test.proxy$javax.servlet.servletinputstream$ff19274a",{"_index":3780,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["object[java.io.inputstream$1",{"_index":2707,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["object[org.eclipse.jetty.server.httpinputoverhttp",{"_index":3456,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["object[org.eclipse.jetty.server.request",{"_index":3451,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["object[org.eclipse.jetty.server.respons",{"_index":3434,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["object[org.eclipse.jetty.server.serv",{"_index":3415,"title":{},"name":{},"text":{"73":{},"75":{},"83":{},"129":{},"137":{}},"component":{},"keyword":{}}],["object[org.httpkit.server.asyncchannel",{"_index":1653,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{},"keyword":{}}],["oblig",{"_index":105,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["observ",{"_index":2711,"title":{},"name":{},"text":{"23":{},"24":{},"83":{},"100":{},"137":{},"151":{}},"component":{},"keyword":{}}],["obtain",{"_index":1043,"title":{},"name":{},"text":{"6":{},"15":{},"17":{},"26":{},"41":{},"68":{},"86":{},"98":{},"108":{},"122":{},"157":{}},"component":{},"keyword":{}}],["obviou",{"_index":1869,"title":{},"name":{},"text":{"12":{},"52":{},"108":{}},"component":{},"keyword":{}}],["obvious",{"_index":1866,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["occasion",{"_index":1054,"title":{},"name":{},"text":{"6":{},"24":{},"26":{},"68":{},"84":{},"122":{},"138":{}},"component":{},"keyword":{}}],["occupi",{"_index":3238,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["occur",{"_index":522,"title":{},"name":{},"text":{"3":{},"8":{},"13":{},"16":{},"22":{},"24":{},"32":{},"35":{},"41":{},"44":{},"47":{},"55":{},"59":{},"70":{},"76":{},"77":{},"78":{},"82":{},"84":{},"90":{},"92":{},"98":{},"100":{},"102":{},"112":{},"115":{},"126":{},"130":{},"131":{},"132":{},"136":{},"138":{},"142":{},"144":{},"151":{},"152":{},"163":{}},"component":{},"keyword":{}}],["oct",{"_index":3437,"title":{},"name":{},"text":{"74":{},"75":{},"78":{},"128":{},"129":{},"132":{}},"component":{},"keyword":{}}],["odd",{"_index":2810,"title":{},"name":{},"text":{"24":{},"44":{},"84":{},"102":{},"138":{},"152":{}},"component":{},"keyword":{}}],["oejd.deploymentmanager:main",{"_index":2571,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejdp.scanningappprovider:main",{"_index":2566,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oeje10s.servletcontexthandler@16c2da2c{root,/,b=null,a=available,h=oeje10s.sessionhandler@94b4ce6{start",{"_index":2310,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["oeje10w.webappcontext@5a5338df{root,/,b=file:///tmp/jetti",{"_index":2580,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejes.servletcontexthandler:main",{"_index":2585,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejew.standarddescriptorprocessor:main",{"_index":2575,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejs.abstractconnector:main",{"_index":2589,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejs.defaultsessionidmanager:main",{"_index":2587,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejs.server:main",{"_index":2563,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejs.server@43f41fe0{starting}[12.0.22,sto=0",{"_index":2321,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["oejs.server@8f4ea7c{starting}[12.0.22,sto=0",{"_index":2593,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oejsh.contexthandler:main",{"_index":2579,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["oeprat",{"_index":2393,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["off",{"_index":3177,"title":{},"name":{},"text":{"52":{},"108":{},"157":{}},"component":{},"keyword":{}}],["offer",{"_index":1573,"title":{},"name":{},"text":{"11":{},"12":{},"32":{},"74":{},"75":{},"83":{},"90":{},"128":{},"129":{},"137":{},"142":{}},"component":{},"keyword":{}}],["offici",{"_index":2859,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["oh",{"_index":2747,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["ok",{"_index":1489,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["old",{"_index":1237,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"51":{},"52":{},"71":{},"73":{},"74":{},"76":{},"78":{},"108":{},"128":{},"130":{},"132":{}},"component":{},"keyword":{}}],["older",{"_index":1231,"title":{},"name":{},"text":{"9":{},"20":{},"28":{},"44":{},"50":{},"53":{},"71":{},"102":{},"107":{},"152":{}},"component":{},"keyword":{}}],["oldest",{"_index":3181,"title":{},"name":{},"text":{"52":{},"63":{},"108":{},"118":{},"157":{}},"component":{},"keyword":{}}],["omit",{"_index":1316,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"14":{},"15":{},"19":{},"23":{},"37":{},"52":{},"71":{},"74":{},"75":{},"77":{},"83":{},"94":{},"100":{},"110":{},"125":{},"128":{},"129":{},"131":{},"137":{},"146":{},"151":{}},"component":{},"keyword":{}}],["on",{"_index":133,"title":{"81-1":{},"135-1":{}},"name":{},"text":{"2":{},"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"32":{},"37":{},"41":{},"43":{},"44":{},"47":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"58":{},"59":{},"65":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"98":{},"100":{},"101":{},"102":{},"107":{},"108":{},"109":{},"110":{},"114":{},"115":{},"119":{},"120":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"144":{},"146":{},"151":{},"152":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{}},"component":{},"keyword":{}}],["onc",{"_index":1787,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"21":{},"22":{},"23":{},"26":{},"27":{},"28":{},"29":{},"37":{},"53":{},"64":{},"74":{},"75":{},"76":{},"77":{},"82":{},"86":{},"87":{},"94":{},"119":{},"128":{},"129":{},"130":{},"131":{},"136":{},"140":{},"146":{}},"component":{},"keyword":{}}],["onent",{"_index":2105,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["onerror",{"_index":2107,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["ongo",{"_index":1087,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["onleav",{"_index":2106,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["onlin",{"_index":339,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["onopen",{"_index":3290,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["onto",{"_index":1666,"title":{},"name":{},"text":{"11":{},"19":{},"22":{},"35":{},"37":{},"41":{},"74":{},"82":{},"92":{},"94":{},"98":{},"125":{},"128":{},"136":{},"144":{},"146":{}},"component":{},"keyword":{}}],["op",{"_index":3013,"title":{},"name":{},"text":{"41":{},"83":{},"98":{},"137":{}},"component":{},"keyword":{}}],["opaqu",{"_index":2862,"title":{},"name":{},"text":{"29":{},"32":{},"87":{},"140":{}},"component":{},"keyword":{}}],["open",{"_index":327,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"10":{},"11":{},"13":{},"17":{},"18":{},"21":{},"30":{},"39":{},"43":{},"54":{},"64":{},"65":{},"66":{},"67":{},"73":{},"74":{},"76":{},"78":{},"79":{},"96":{},"98":{},"101":{},"109":{},"119":{},"120":{},"125":{},"128":{},"130":{},"132":{},"133":{},"158":{}},"component":{},"keyword":{}}
1],["open/message/clos",{"_index":2640,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["openjdk",{"_index":1519,"title":{},"name":{},"text":{"10":{},"13":{},"73":{},"76":{},"130":{}},"component":{},"keyword":{}}],["opentelemetri",{"_index":1529,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["oper",{"_index":255,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"9":{},"10":{},"13":{},"14":{},"16":{},"19":{},"25":{},"26":{},"31":{},"37":{},"41":{},"45":{},"46":{},"50":{},"52":{},"53":{},"57":{},"61":{},"65":{},"66":{},"69":{},"70":{},"71":{},"73":{},"76":{},"77":{},"78":{},"80":{},"85":{},"86":{},"89":{},"94":{},"98":{},"100":{},"103":{},"104":{},"107":{},"117":{},"120":{},"123":{},"125":{},"126":{},"130":{},"132":{},"134":{},"139":{},"146":{},"151":{},"153":{},"154":{},"165":{}},"component":{},"keyword":{}}],["operation",{"_index":2799,"title":{},"name":{},"text":{"24":{}},"component":{},"keyword":{}}],["opinion",{"_index":867,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["opportun",{"_index":1288,"title":{},"name":{},"text":{"9":{},"71":{},"88":{},"124":{},"125":{},"141":{}},"component":{},"keyword":{}}],["oppos",{"_index":3274,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["opposit",{"_index":1634,"title":{},"name":{},"text":{"11":{},"37":{},"53":{},"74":{},"94":{},"128":{},"146":{}},"component":{},"keyword":{}}],["opt",{"_index":2060,"title":{},"name":{},"text":{"14":{},"16":{},"17":{},"26":{},"72":{},"89":{},"127":{}},"component":{},"keyword":{}}],["optim",{"_index":626,"title":{},"name":{},"text":{"3":{},"4":{},"12":{},"22":{},"42":{},"67":{},"75":{},"82":{},"99":{},"129":{},"136":{},"150":{}},"component":{},"keyword":{}}],["option",{"_index":671,"title":{"38-1":{},"47-2":{},"47-3":{},"58-2":{},"64-4":{},"64-5":{},"64-6":{},"95-1":{},"143-1":{},"147-1":{},"164-1":{}},"name":{},"text":{"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"26":{},"27":{},"30":{},"38":{},"44":{},"47":{},"50":{},"52":{},"56":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"67":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"88":{},"89":{},"90":{},"94":{},"95":{},"102":{},"107":{},"108":{},"110":{},"111":{},"114":{},"115":{},"117":{},"118":{},"119":{},"121":{},"124":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"143":{},"146":{},"147":{},"152":{},"157":{},"159":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["orchestr",{"_index":3825,"title":{},"name":{},"text":{"84":{},"138":{}},"component":{},"keyword":{}}],["order",{"_index":1031,"title":{"26-2":{},"86-1":{}},"name":{},"text":{"6":{},"9":{},"10":{},"11":{},"12":{},"18":{},"23":{},"24":{},"26":{},"30":{},"32":{},"37":{},"41":{},"47":{},"50":{},"52":{},"53":{},"58":{},"59":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"79":{},"83":{},"86":{},"88":{},"90":{},"94":{},"98":{},"107":{},"108":{},"114":{},"115":{},"122":{},"124":{},"125":{},"127":{},"128":{},"129":{},"131":{},"133":{},"137":{},"141":{},"146":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["order/:id",{"_index":3263,"title":{},"name":{},"text":{"59":{},"115":{}},"component":{},"keyword":{}}],["orderli",{"_index":1965,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["ordin",{"_index":2199,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["ordinari",{"_index":1978,"title":{},"name":{},"text":{"13":{},"21":{},"29":{},"62":{},"71":{},"76":{},"87":{},"125":{},"130":{},"140":{}},"component":{},"keyword":{}}],["org",{"_index":3952,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["org.apache.catalina.connector.connector",{"_index":4041,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["org.clj",{"_index":2151,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["org.clojure/clojur",{"_index":1376,"title":{},"name":{},"text":{"10":{},"73":{},"79":{},"133":{}},"component":{},"keyword":{}}],["org.clojure/core.match",{"_index":3858,"title":{},"name":{},"text":{"96":{}},"component":{},"keyword":{}}],["org.clojure/data.json",{"_index":1710,"title":{},"name":{},"text":{"11":{},"23":{},"74":{},"83":{},"128":{},"137":{}},"component":{},"keyword":{}}],["org.clojure/data.xml",{"_index":3861,"title":{},"name":{},"text":{"96":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.ee10.jsp.jettyjspservlet",{"_index":2577,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.ee10.servlet.servletcontexthandl",{"_index":2311,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.ee10.websocket/jetti",{"_index":2421,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.abstractconnector",{"_index":2312,"title":{},"name":{},"text":{"17":{},"75":{},"78":{},"83":{},"129":{},"132":{},"137":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.connectionfactori",{"_index":3854,"title":{},"name":{},"text":{"95":{},"147":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.handler.contexthandl",{"_index":2309,"title":{},"name":{},"text":{"17":{},"75":{},"78":{},"83":{},"129":{},"132":{},"137":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.httpconfigur",{"_index":3853,"title":{},"name":{},"text":{"95":{},"147":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.securerequestcustom",{"_index":2984,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.server.serv",{"_index":2301,"title":{},"name":{},"text":{"17":{},"75":{},"78":{},"79":{},"83":{},"95":{},"129":{},"132":{},"133":{},"137":{},"147":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.servlet.servletcontexthandl",{"_index":3852,"title":{},"name":{},"text":{"95":{},"147":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.session.defaultsessionidmanag",{"_index":2307,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.util.log",{"_index":3615,"title":{},"name":{},"text":{"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.util.log.slf4jlog",{"_index":3617,"title":{},"name":{},"text":{"78":{},"79":{},"129":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.util.ssl.sslcontextfactori",{"_index":2315,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["org.eclipse.jetty.xml.xmlconfigur",{"_index":2537,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["org.example.app/employe",{"_index":3184,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["org.example.app/new",{"_index":4002,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["org.example.hello",{"_index":2038,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["org.example.hello/hello",{"_index":2050,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["org.example.middlewar",{"_index":2807,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["org.example.myapp.publ",{"_index":3134,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["org.example.rout",{"_index":3016,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["org.example.servic",{"_index":3125,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["org.example.ss",{"_index":3220,"title":{},"name":{},"text":{"54":{}},"component":{},"keyword":{}}],["org.example.war.servic",{"_index":2431,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["org.example.war.service/cr",{"_index":2454,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["org.slf4j.logg",{"_index":3036,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["org.slf4j.loggerfactory.getlogger(java.lang.str",{"_index":2841,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["org.slf4j/jcl",{"_index":3649,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["org.slf4j/jul",{"_index":3647,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["org.slf4j/log4j",{"_index":3650,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["org.slf4j/slf4j",{"_index":1711,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["org/*todo",{"_index":3951,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["org/example/myapp/publ",{"_index":3135,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["organ",{"_index":317,"title":{},"name":{},"text":{"2":{},"16":{},"65":{},"78":{},"100":{},"120":{},"125":{},"132":{},"151":{}},"component":{},"keyword":{}}],["orient",{"_index":740,"title":{"16-15":{}},"name":{},"text":{"5":{},"6":{},"10":{},"13":{},"16":{},"44":{},"50":{},"66":{},"68":{},"73":{},"77":{},"102":{},"107":{},"122":{},"131":{},"152":{}},"component":{},"keyword":{}}],["origin",{"_index":449,"title":{"30-3":{},"88-6":{}
1,"110-3":{},"141-5":{},"159-1":{}},"name":{},"text":{"3":{},"5":{},"6":{},"8":{},"10":{},"11":{},"14":{},"16":{},"22":{},"23":{},"24":{},"27":{},"30":{},"32":{},"43":{},"50":{},"66":{},"68":{},"70":{},"73":{},"77":{},"79":{},"82":{},"83":{},"84":{},"88":{},"94":{},"101":{},"107":{},"110":{},"122":{},"126":{},"131":{},"133":{},"136":{},"137":{},"138":{},"141":{},"159":{}},"component":{},"keyword":{}}],["os",{"_index":258,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"23":{},"65":{},"74":{},"75":{},"76":{},"83":{},"120":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["osv",{"_index":3944,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["otel",{"_index":1449,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["otel.javaag",{"_index":1523,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["other",{"_index":68,"title":{},"name":{},"text":{"1":{},"6":{},"7":{},"16":{},"24":{},"51":{},"52":{},"68":{},"69":{},"74":{},"78":{},"84":{},"92":{},"96":{},"102":{},"108":{},"122":{},"123":{},"128":{},"132":{},"138":{},"144":{},"152":{}},"component":{},"keyword":{}}],["otherwis",{"_index":92,"title":{},"name":{},"text":{"1":{},"6":{},"9":{},"12":{},"14":{},"16":{},"23":{},"39":{},"44":{},"55":{},"68":{},"71":{},"77":{},"83":{},"96":{},"102":{},"112":{},"122":{},"125":{},"131":{},"137":{},"152":{}},"component":{},"keyword":{}}],["ourselv",{"_index":2725,"title":{},"name":{},"text":{"23":{},"83":{},"88":{},"137":{},"141":{}},"component":{},"keyword":{}}],["out",{"_index":185,"title":{"18-10":{},"21-10":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"20":{},"22":{},"23":{},"37":{},"41":{},"46":{},"51":{},"52":{},"64":{},"65":{},"66":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"94":{},"98":{},"100":{},"104":{},"108":{},"110":{},"120":{},"121":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"146":{},"151":{},"154":{},"157":{},"159":{}},"component":{},"keyword":{}}],["outer",{"_index":247,"title":{},"name":{},"text":{"2":{},"65":{},"73":{},"120":{}},"component":{},"keyword":{}}],["outgo",{"_index":2680,"title":{},"name":{},"text":{"22":{},"24":{},"25":{},"30":{},"48":{},"82":{},"84":{},"85":{},"106":{},"136":{},"138":{},"139":{},"156":{}},"component":{},"keyword":{}}],["outlin",{"_index":933,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["output",{"_index":664,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"10":{},"13":{},"14":{},"16":{},"23":{},"35":{},"41":{},"49":{},"67":{},"69":{},"70":{},"72":{},"73":{},"75":{},"76":{},"77":{},"83":{},"92":{},"98":{},"105":{},"123":{},"126":{},"127":{},"129":{},"130":{},"137":{},"144":{},"155":{}},"component":{},"keyword":{}}],["outset",{"_index":2852,"title":{},"name":{},"text":{"27":{}},"component":{},"keyword":{}}],["outsid",{"_index":456,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"13":{},"20":{},"39":{},"40":{},"43":{},"52":{},"64":{},"67":{},"68":{},"86":{},"96":{},"97":{},"101":{},"108":{},"122":{},"148":{}},"component":{},"keyword":{}}],["outstand",{"_index":540,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["outward",{"_index":3169,"title":{},"name":{},"text":{"52":{},"108":{}},"component":{},"keyword":{}}],["over",{"_index":417,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"32":{},"38":{},"40":{},"41":{},"43":{},"45":{},"47":{},"51":{},"53":{},"54":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"90":{},"92":{},"95":{},"97":{},"98":{},"100":{},"101":{},"103":{},"109":{},"122":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"142":{},"144":{},"147":{},"148":{},"151":{},"153":{},"157":{},"158":{},"164":{}},"component":{},"keyword":{}}],["overal",{"_index":2085,"title":{},"name":{},"text":{"15":{},"22":{},"53":{},"82":{},"110":{},"136":{},"159":{}},"component":{},"keyword":{}}],["overhead",{"_index":3269,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["overlap",{"_index":3132,"title":{},"name":{},"text":{"47":{},"73":{}},"component":{},"keyword":{}}],["overrid",{"_index":1375,"title":{"41-8":{},"41-9":{},"98-7":{},"98-8":{}},"name":{},"text":{"10":{},"11":{},"26":{},"29":{},"38":{},"41":{},"58":{},"73":{},"86":{},"87":{},"95":{},"98":{},"114":{},"140":{},"147":{},"162":{}},"component":{},"keyword":{}}],["overridden",{"_index":2893,"title":{},"name":{},"text":{"32":{},"41":{},"43":{},"90":{},"98":{},"100":{},"142":{},"151":{}},"component":{},"keyword":{}}],["overrridden",{"_index":2836,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["overview",{"_index":2327,"title":{"24":{},"84":{},"138":{},"18-5":{},"20-1":{},"21-5":{}},"name":{"24":{},"84":{},"138":{}},"text":{"124":{}},"component":{},"keyword":{}}],["overview#_chain_provid",{"_index":3676,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["overwhelmingli",{"_index":2710,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["overwrit",{"_index":1747,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["own",{"_index":322,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["p",{"_index":2511,"title":{},"name":{},"text":{"20":{},"21":{},"81":{},"135":{}},"component":{},"keyword":{}}],["packag",{"_index":1106,"title":{},"name":{},"text":{"7":{},"13":{},"20":{},"24":{},"26":{},"28":{},"41":{},"69":{},"72":{},"76":{},"81":{},"84":{},"86":{},"98":{},"123":{},"125":{},"127":{},"130":{},"135":{},"138":{}},"component":{},"keyword":{}}],["page",{"_index":739,"title":{},"name":{},"text":{"5":{},"6":{},"10":{},"11":{},"13":{},"18":{},"21":{},"23":{},"24":{},"50":{},"58":{},"66":{},"68":{},"72":{},"73":{},"74":{},"76":{},"79":{},"81":{},"83":{},"84":{},"107":{},"114":{},"121":{},"122":{},"124":{},"125":{},"127":{},"128":{},"130":{},"133":{},"135":{},"137":{},"138":{},"162":{}},"component":{},"keyword":{}}],["pain",{"_index":313,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"15":{},"65":{},"74":{},"75":{},"76":{},"120":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["pair",{"_index":1848,"title":{},"name":{},"text":{"12":{},"13":{},"16":{},"19":{},"23":{},"51":{},"75":{},"83":{},"94":{},"129":{},"137":{},"146":{}},"component":{},"keyword":{}}],["pankaj",{"_index":1855,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["parallel",{"_index":1905,"title":{},"name":{},"text":{"12":{},"75":{},"92":{},"129":{},"144":{}},"component":{},"keyword":{}}],["param",{"_index":1258,"title":{"30-7":{},"30-8":{},"88-11":{},"88-12":{},"88-17":{},"141-10":{},"141-11":{}},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"19":{},"20":{},"23":{},"30":{},"37":{},"44":{},"46":{},"52":{},"58":{},"59":{},"61":{},"62":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"79":{},"80":{},"81":{},"83":{},"88":{},"94":{},"102":{},"104":{},"108":{},"110":{},"114":{},"115":{},"117":{},"125":{},"127":{},"128":{},"129":{},"130":{},"133":{},"134":{},"135":{},"137":{},"146":{},"152":{},"154":{},"157":{},"159":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["paramet",{"_index":604,"title":{"12":{},"44":{},"75":{},"102":{},"129":{},"152":{},"9-10":{},"9-11":{},"9-12":{},"9-26":{},"12-7":{},"12-11":{},"23-10":{},"44-1":{},"44-2":{},"44-3":{},"44-5":{},"71-10":{},"71-11":{},"71-12":{},"71-26":{},"75-7":{},"75-11":{},"83-10":{},"102-1":{},"102-2":{},"102-3":{},"102-5":{},"125-10":{},"125-11":{},"125-12":{},"125-26":{},"129-7":{},"129-11":{},"137-10":{},"152-1":{},"152-2":{},"152-3":{},"152-5":{}},"name":{"12":{},"44":{},"75":{},"102":{},"129":{},"152":{}},"text":{"3":{},"7":{},"9":{},"11":{},"12":{},"13":{},"18":{},"19":{},"22":{},"23":{},"24":{},"27":{},"37":{},"40":{},"41":{},"42":{},"44":{},"45":{},"46":{},"47":{},"51":{},"52":{},"53":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"69":{},"71":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"94":{},"97":{},"99":{},"102":{},"103":{},"104":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"123":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"150":{},"152":{},"153":{},"154":{},"157":{},"159":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["parameters.instead",{"_index":3098,"title":{},"name":{},"text":{"44":{}},"component":{},"keyword":{}}],["params/bodi",{"_index":1295,"title":{},"name":{},"text":{"9":{},"10":{},"71":{},"72":{},"79":{},"125":{},"127":{},"133":{}},"component":{},"keyword":{}}],["params[1",{"_index":3099,"title":{},"name":{},"text":{"44":{}},"component":{},"keyword":{}}],["pare",{"_index":1607,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["paren",{"_index":1953,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["parent",{"_index":917,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["parenthes",{"_index":1952,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["park",{"_index":2938,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["pars",{"_index":344,"title":{"3-1":{},"4-3":{}},"name":{},"text":{"3":{},"4":{},"9":{},"11":{},"12":{},"13":{},"19":{},"22":{},"23":{},"24":{},"27":{},"30":{},"41":{},"44":{},"46":{},"50":{},"61":{},"71":{},"74":{},"75":{},"80":{},"82":{},"84":{},"98":{},"102":{},"104":{},"107":{},"117":{},"125":{},"128":{},"129":{},"134":{},"138":{},"152":{},"165":{}},"component":{},"keyword":{}}],["parser",{"_index":673,"title":{},"name":{},"text":{"4":{},"22":{},"44":{},"82":{},"102":{},"125":{},"152":{}},"component":{},"keyword":{}}],["part",{"_index":199,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{},"11":{},"12":{},"13":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"28":{},"29":{},"35":{},"37":{},"41":{},"44":{},"46":{},"50":{},"51":{},"52":{},"54":{},"55":{},"56":{},"65":{},"66":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"81":{},"82":{},"83":{},"85":{},"87":{},"88":{},"92":{},"94":{},"98":{},"100":{},"102":{},"104":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"119":{},"120":{},"121":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"135":{},"136":{},"137":{},"139":{},"140":{},"141":{},"144":{},"146":{},"151":{},"152":{},"154":{},"157":{},"158":{},"159":{},"160":{}},"component":{},"keyword":{}}],["parti",{"_index":815,"title":{"6-4":{},"68-4":{},"122-4":{}},"name":{},"text":{"6":{},"21":{},"64":{},"68":{},"119":{},"122":{}},"component":{},"keyword":{}}],["partial",{"_index":621,"title":{"23-7":{},"55-3":{},"83-7":{},"112-3":{},"137-7":{},"160-3":{}},"name":{},"text":{"3":{},"23":{},"64":{},"83":{},"109":{},"137":{},"158":{}},"component":{},"keyword":{}}],["particip",{"_index":21,"title":{},"name":{},"text":{"1":{},"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["particular",{"_index":1170,"title":{},"name":{},"text":{"8":{},"9":{},"12":{},"13":{},"15":{},"18":{},"20":{},"21":{},"22":{},"23":{},"32":{},"41":{},"43":{},"70":{},"71":{},"76":{},"79":{},"81":{},"82":{},"83":{},"86":{},"90":{},"98":{},"125":{},"126":{},"130":{},"133":{},"135":{},"136":{},"137":{},"142":{},"157":{},"160":{}},"component":{},"keyword":{}}],["particularili",{"_index":586,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["particularli",{"_index":1571,"title":{},"name":{},"text":{"11":{},"16":{},"47":{},"74":{},"128":{}},"component":{},"keyword":{}}],["partli",{"_index":1880,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["pass",{"_index":416,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"32":{},"35":{},"37":{},"41":{},"43":{},"47":{},"52":{},"54":{},"58":{},"61":{},"64":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"90":{},"92":{},"98":{},"100":{},"108":{},"110":{},"114":{},"117":{},"119":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"144":{},"151":{},"157":{},"159":{},"160":{},"162":{},"165":{}},"component":{},"keyword":{}}],["password",{"_index":2287,"title":{},"name":{},"text":{"17":{},"38":{},"79":{},"95":{},"133":{},"143":{},"147":{},"164":{}},"component":{},"keyword":{}}],["past",{"_index":851,"title":{},"name":{},"text":{"6":{},"9":{},"13":{},"53":{},"64":{},"68":{},"71":{},"75":{},"76":{},"122":{},"125":{},"129":{},"130":{}},"component":{},"keyword":{}}],["patch",{"_index":1286,"title":{},"name":{},"text":{"9":{},"50":{},"58":{},"62":{},"71":{},"107":{},"110":{},"114":{},"125":{},"159":{},"162":{}},"component":{},"keyword":{}}],["path",{"_index":520,"title":{"9-10":{},"9-26":{},"11-14":{},"12-16":{},"13-14":{},"15-7":{},"16-22":{},"23-10":{},"23-18":{},"44-2":{},"58-7":{},"59-6":{},"71-10":{},"71-26":{},"74-14":{},"75-14":{},"76-14":{},"78-12":{},"83-10":{},"83-17":{},"88-17":{},"102-2":{},"114-6":{},"115-6":{},"125-10":{},"125-26":{},"128-14":{},"129-14":{},"130-14":{},"132-12":{},"137-10":{},"137-17":{},"152-2":{},"162-6":{},"163-6":{}},"name":{},"text":{"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"37":{},"38":{},"40":{},"42":{},"44":{},"45":{},"46":{},"47":{},"50":{},"51":{},"52":{},"53":{},"58":{},"59":{},"61":{},"63":{},"64":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"83":{},"84":{},"88":{},"92":{},"94":{},"95":{},"97":{},"99":{},"101":{},"102":{},"103":{},"104":{},"107":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"119":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"137":{},"138":{},"141":{},"143":{},"144":{},"147":{},"148":{},"150":{},"152":{},"153":{},"154":{},"157":{},"159":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["path/:wild",{"_index":4007,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["path/to/resource?after:page=12&after:storyid=abc123xyz&user%20id=99",{"_index":3087,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["path/to/resource?after=123123%2099",{"_index":3083,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["path/us",{"_index":4008,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["pattern",{"_index":406,"title":{},"name":{},"text":{"3":{},"9":{},"11":{},"13":{},"16":{},"20":{},"23":{},"24":{},"32":{},"41":{},"71":{},"74":{},"78":{},"81":{},"83":{},"84":{},"90":{},"98":{},"125":{},"128":{},"132":{},"135":{},"137":{},"138":{},"142":{}},"component":{},"keyword":{}}],["pattern>/*</url",{"_index":2445,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["pattern>/myapp/*</url",{"_index":3736,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["paus",{"_index":1970,"title":{},"name":{},"text":{"13":{},"76":{},"109":{},"130":{},"158":{}},"component":{},"keyword":{}}],["payload",{"_index":2396,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["payment",{"_index":857,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["pb",{"_index":2048,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["pedest",{"_index":6,"title":{"2":{},"5":{},"15":{},"16":{},"17":{},"28":{},"39":{},"65":{},"66":{},"78":{},"96":{},"120":{},"121":{},"132":{},"2-1":{},"2-4":{},"2-5":{},"15-4":{},"16-8":{},"24-5":{},"27-4":{},"37-7":{},"64-3":{},"64-9":{},"65-1":{},"65-3":{},"65-4":{},"78-7":{},"94-8":{},"120-1":{},"120-3":{},"120-4":{},"124-3":{},"124-10":{},"
1132-7":{},"146-7":{}},"name":{"15":{},"16":{},"17":{},"78":{},"132":{}},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"34":{},"35":{},"37":{},"38":{},"39":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"56":{},"59":{},"60":{},"61":{},"63":{},"64":{},"65":{},"66":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"94":{},"95":{},"96":{},"98":{},"99":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"146":{},"147":{},"150":{},"152":{},"153":{},"154":{},"156":{},"157":{},"158":{},"159":{},"165":{}},"component":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"143":{},"144":{},"145":{},"146":{},"147":{},"148":{},"149":{},"150":{},"151":{},"152":{},"153":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"164":{},"165":{},"166":{}},"keyword":{}}],["pedestal.clj",{"_index":3594,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["pedestal.common",{"_index":2988,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["pedestal.error",{"_index":2990,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["pedestal.http",{"_index":1985,"title":{},"name":{},"text":{"13":{},"39":{}},"component":{},"keyword":{}}],["pedestal.interceptor",{"_index":2989,"title":{},"name":{},"text":{"39":{},"96":{}},"component":{},"keyword":{}}],["pedestal.jetti",{"_index":2992,"title":{},"name":{},"text":{"39":{},"76":{},"81":{},"96":{},"130":{},"135":{}},"component":{},"keyword":{}}],["pedestal.log",{"_index":1987,"title":{},"name":{},"text":{"13":{},"39":{},"76":{},"86":{},"96":{},"130":{}},"component":{},"keyword":{}}],["pedestal.rout",{"_index":2991,"title":{},"name":{},"text":{"39":{},"76":{},"96":{},"130":{}},"component":{},"keyword":{}}],["pedestal.servic",{"_index":1986,"title":{},"name":{},"text":{"13":{},"39":{},"76":{},"96":{},"130":{}},"component":{},"keyword":{}}],["pedestal.servlet",{"_index":2428,"title":{},"name":{},"text":{"20":{},"39":{}},"component":{},"keyword":{}}],["pedestal.telemetri",{"_index":719,"title":{},"name":{},"text":{"4":{},"39":{},"67":{},"96":{},"101":{}},"component":{},"keyword":{}}],["pedestal/http",{"_index":1492,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{}},"component":{},"keyword":{}}],["pedestal/new",{"_index":3610,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["pedestal/pedestal.servic",{"_index":707,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["pedestal_dev_mod",{"_index":2818,"title":{"26-5":{}},"name":{},"text":{},"component":{},"keyword":{}}],["pedestal_dev_mode=tru",{"_index":2064,"title":{},"name":{},"text":{"14":{}},"component":{},"keyword":{}}],["pedestal_disable_default_handler_nam",{"_index":2824,"title":{"26-8":{}},"name":{},"text":{},"component":{},"keyword":{}}],["pedestal_json_processor",{"_index":2826,"title":{"26-9":{}},"name":{},"text":{},"component":{},"keyword":{}}],["pedestal_log_formatt",{"_index":2822,"title":{"26-7":{}},"name":{},"text":{"41":{},"86":{},"98":{}},"component":{},"keyword":{}}],["pedestal_logg",{"_index":2820,"title":{"26-6":{}},"name":{},"text":{"41":{},"86":{},"98":{}},"component":{},"keyword":{}}],["pedestal_metrics_record",{"_index":3828,"title":{},"name":{},"text":{"86":{},"100":{},"151":{}},"component":{},"keyword":{}}],["pedestal_metrics_sourc",{"_index":2830,"title":{"26-11":{}},"name":{},"text":{"86":{}},"component":{},"keyword":{}}],["pedestal_metrics_value_typ",{"_index":2831,"title":{"26-12":{}},"name":{},"text":{},"component":{},"keyword":{}}],["pedestal_suppress_deprecation_warn",{"_index":2828,"title":{"26-10":{}},"name":{},"text":{},"component":{},"keyword":{}}],["pedestal_tracing_sourc",{"_index":2833,"title":{"26-13":{}},"name":{},"text":{"86":{}},"component":{},"keyword":{}}],["pedestalconnector",{"_index":2855,"title":{"35-6":{}},"name":{},"text":{"27":{},"28":{}},"component":{},"keyword":{}}],["pedestal’",{"_index":709,"title":{},"name":{},"text":{"4":{},"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"22":{},"23":{},"26":{},"28":{},"29":{},"35":{},"40":{},"52":{},"55":{},"56":{},"66":{},"67":{},"69":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"86":{},"87":{},"92":{},"97":{},"99":{},"100":{},"108":{},"111":{},"112":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"140":{},"144":{},"148":{},"150":{},"151":{},"156":{},"157":{}},"component":{},"keyword":{}}],["pedrepl",{"_index":3325,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["pedrepl.serv",{"_index":3330,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["pedrepl.servic",{"_index":3340,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["pedrepl.service/about",{"_index":3346,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["pedrepl.service/hom",{"_index":3345,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["peek",{"_index":2233,"title":{},"name":{},"text":{"16":{},"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["pem",{"_index":2272,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["pend",{"_index":1662,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"37":{},"74":{},"75":{},"83":{},"94":{},"128":{},"129":{},"137":{},"146":{}},"component":{},"keyword":{}}],["peopl",{"_index":1799,"title":{},"name":{},"text":{"12":{},"13":{},"75":{},"76":{},"129":{},"130":{}},"component":{},"keyword":{}}],["per",{"_index":613,"title":{},"name":{},"text":{"3":{},"8":{},"30":{},"41":{},"44":{},"54":{},"70":{},"98":{},"102":{},"126":{},"143":{},"152":{}},"component":{},"keyword":{}}],["percentil",{"_index":3877,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["perfectli",{"_index":1187,"title":{},"name":{},"text":{"8":{},"13":{},"22":{},"52":{},"70":{},"76":{},"81":{},"82":{},"108":{},"125":{},"126":{},"130":{},"135":{},"136":{}},"component":{},"keyword":{}}],["perform",{"_index":153,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"11":{},"14":{},"16":{},"22":{},"23":{},"24":{},"25":{},"31":{},"33":{},"37":{},"38":{},"40":{},"41":{},"45":{},"52":{},"53":{},"55":{},"64":{},"69":{},"72":{},"74":{},"82":{},"83":{},"84":{},"85":{},"88":{},"94":{},"97":{},"98":{},"103":{},"104":{},"108":{},"112":{},"123":{},"127":{},"128":{},"136":{},"137":{},"138":{},"139":{},"141":{},"146":{},"148":{},"153":{},"154":{},"157":{},"160":{}},"component":{},"keyword":{}}],["perhap",{"_index":1161,"title":{},"name":{},"text":{"8":{},"9":{},"20":{},"24":{},"70":{},"71":{},"72":{},"84":{},"108":{},"125":{},"126":{},"127":{},"138":{},"157":{}},"component":{},"keyword":{}}],["period",{"_index":3213,"title":{},"name":{},"text":{"54":{},"100":{},"109":{},"151":{},"158":{}},"component":{},"keyword":{}}],["peripher",{"_index":1382,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["permiss",{"_index":76,"title":{},"name":{},"text":{"1":{},"12":{}},"component":{},"keyword":{}}],["permit",{"_index":903,"title":{},"name":{},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}
1],["persist",{"_index":2605,"title":{},"name":{},"text":{"21":{},"23":{},"44":{},"50":{},"83":{},"102":{},"107":{},"137":{},"152":{}},"component":{},"keyword":{}}],["person",{"_index":62,"title":{"6-2":{},"6-4":{},"68-2":{},"68-4":{},"122-2":{},"122-4":{}},"name":{},"text":{"1":{},"6":{},"12":{},"15":{},"41":{},"68":{},"75":{},"98":{},"122":{},"129":{}},"component":{},"keyword":{}}],["person’",{"_index":203,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["pervas",{"_index":1102,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["phase",{"_index":1627,"title":{"22-8":{},"82-8":{},"136-8":{}},"name":{},"text":{"11":{},"16":{},"22":{},"23":{},"29":{},"37":{},"64":{},"74":{},"82":{},"83":{},"87":{},"94":{},"128":{},"136":{},"137":{},"140":{},"146":{}},"component":{},"keyword":{}}],["philosoph",{"_index":869,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["philosophi",{"_index":3929,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["photos/blu",{"_index":1280,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["physic",{"_index":71,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["pick",{"_index":1317,"title":{},"name":{},"text":{"9":{},"14":{},"18":{},"21":{},"71":{},"72":{},"75":{},"77":{},"83":{},"125":{},"127":{},"129":{},"131":{},"137":{}},"component":{},"keyword":{}}],["picki",{"_index":1698,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["pictur",{"_index":1730,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["piec",{"_index":293,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"11":{},"13":{},"20":{},"65":{},"66":{},"68":{},"74":{},"76":{},"92":{},"110":{},"120":{},"121":{},"122":{},"128":{},"130":{},"144":{},"159":{}},"component":{},"keyword":{}}],["pilot",{"_index":2804,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["pipe",{"_index":1095,"title":{},"name":{},"text":{"7":{},"32":{},"43":{},"69":{},"90":{},"101":{},"123":{}},"component":{},"keyword":{}}],["pipefail",{"_index":2509,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["pipelin",{"_index":1099,"title":{"22-11":{},"82-11":{},"136-11":{}},"name":{},"text":{"7":{},"10":{},"22":{},"23":{},"28":{},"29":{},"37":{},"39":{},"57":{},"69":{},"73":{},"78":{},"82":{},"83":{},"87":{},"94":{},"96":{},"123":{},"132":{},"136":{},"137":{},"140":{}},"component":{},"keyword":{}}],["pivot",{"_index":561,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["place",{"_index":232,"title":{"13-8":{},"76-8":{},"130-8":{}},"name":{},"text":{"2":{},"8":{},"9":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"29":{},"65":{},"70":{},"71":{},"72":{},"75":{},"76":{},"77":{},"92":{},"110":{},"120":{},"125":{},"126":{},"127":{},"129":{},"130":{},"131":{},"144":{}},"component":{},"keyword":{}}],["placehold",{"_index":2742,"title":{"149-1":{},"166-1":{}},"name":{},"text":{"23":{},"83":{},"124":{},"137":{}},"component":{},"keyword":{}}],["plain",{"_index":1570,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"47":{},"74":{},"75":{},"76":{},"78":{},"128":{},"129":{},"130":{},"132":{}},"component":{},"keyword":{}}],["plan",{"_index":559,"title":{},"name":{},"text":{"3":{},"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["platform",{"_index":235,"title":{},"name":{},"text":{"2":{},"43":{},"65":{},"101":{},"120":{}},"component":{},"keyword":{}}],["platform’",{"_index":3145,"title":{},"name":{},"text":{"49":{},"105":{},"155":{}},"component":{},"keyword":{}}],["play",{"_index":2920,"title":{},"name":{},"text":{"35":{},"92":{},"144":{}},"component":{},"keyword":{}}],["pleas",{"_index":845,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["plu",{"_index":2779,"title":{},"name":{},"text":{"23":{},"52":{},"83":{},"110":{},"137":{},"159":{}},"component":{},"keyword":{}}],["plug",{"_index":3468,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["pluggabl",{"_index":3033,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["plugin",{"_index":1963,"title":{},"name":{},"text":{"13":{},"81":{},"124":{},"135":{}},"component":{},"keyword":{}}],["plumb",{"_index":2339,"title":{},"name":{},"text":{"18":{},"21":{},"72":{},"78":{},"127":{},"132":{}},"component":{},"keyword":{}}],["point",{"_index":473,"title":{"14-1":{},"77-1":{},"131-1":{}},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"22":{},"23":{},"24":{},"29":{},"32":{},"44":{},"64":{},"67":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"87":{},"90":{},"92":{},"100":{},"102":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"138":{},"140":{},"142":{},"144":{},"151":{},"152":{}},"component":{},"keyword":{}}],["pojo",{"_index":3287,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["poke",{"_index":2023,"title":{"23-9":{},"83-9":{},"137-9":{}},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["polici",{"_index":834,"title":{"6":{},"68":{},"122":{},"124-8":{}},"name":{},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["policy.com",{"_index":3669,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["polit",{"_index":63,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["poll",{"_index":3212,"title":{},"name":{},"text":{"54":{},"109":{},"158":{}},"component":{},"keyword":{}}
1],["pom",{"_index":1553,"title":{},"name":{},"text":{"10":{},"73":{},"81":{},"135":{}},"component":{},"keyword":{}}],["pom.xml",{"_index":1554,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["pool",{"_index":1176,"title":{},"name":{},"text":{"8":{},"22":{},"29":{},"37":{},"38":{},"41":{},"49":{},"70":{},"82":{},"94":{},"95":{},"98":{},"126":{},"136":{},"146":{},"147":{}},"component":{},"keyword":{}}],["poorli",{"_index":3226,"title":{},"name":{},"text":{"55":{},"74":{},"128":{}},"component":{},"keyword":{}}],["pop",{"_index":1618,"title":{},"name":{},"text":{"11":{},"22":{},"37":{},"74":{},"82":{},"94":{},"128":{},"136":{},"146":{}},"component":{},"keyword":{}}],["popul",{"_index":1564,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["popular",{"_index":1101,"title":{},"name":{},"text":{"7":{},"13":{},"16":{},"24":{},"44":{},"69":{},"78":{},"81":{},"84":{},"102":{},"123":{},"132":{},"135":{},"138":{},"152":{}},"component":{},"keyword":{}}],["port",{"_index":1500,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"19":{},"20":{},"23":{},"27":{},"38":{},"46":{},"47":{},"52":{},"53":{},"58":{},"59":{},"63":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"95":{},"104":{},"108":{},"110":{},"115":{},"118":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"143":{},"147":{},"154":{},"157":{},"159":{},"163":{},"164":{}},"component":{},"keyword":{}}],["portabl",{"_index":1047,"title":{},"name":{},"text":{"6":{},"68":{},"76":{},"122":{},"130":{}},"component":{},"keyword":{}}],["portion",{"_index":571,"title":{},"name":{},"text":{"3":{},"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["posit",{"_index":1244,"title":{},"name":{},"text":{"9":{},"11":{},"23":{},"37":{},"48":{},"53":{},"58":{},"59":{},"71":{},"74":{},"83":{},"88":{},"94":{},"106":{},"114":{},"115":{},"125":{},"128":{},"137":{},"141":{},"146":{},"162":{},"163":{}},"component":{},"keyword":{}}],["possibl",{"_index":334,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"9":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"22":{},"23":{},"26":{},"29":{},"39":{},"41":{},"47":{},"51":{},"52":{},"57":{},"62":{},"64":{},"65":{},"67":{},"71":{},"75":{},"76":{},"77":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"92":{},"96":{},"98":{},"108":{},"110":{},"113":{},"119":{},"120":{},"125":{},"129":{},"130":{},"131":{},"133":{},"136":{},"137":{},"138":{},"140":{},"144":{},"157":{},"160":{},"161":{}},"component":{},"keyword":{}}],["post",{"_index":1057,"title":{"19-10":{},"61-5":{},"80-5":{},"117-5":{},"134-5":{},"165-5":{}},"name":{},"text":{"6":{},"7":{},"9":{},"10":{},"13":{},"19":{},"23":{},"44":{},"50":{},"52":{},"58":{},"59":{},"61":{},"62":{},"63":{},"68":{},"69":{},"71":{},"72":{},"73":{},"76":{},"80":{},"83":{},"102":{},"104":{},"107":{},"108":{},"110":{},"114":{},"115":{},"117":{},"118":{},"122":{},"123":{},"125":{},"127":{},"130":{},"134":{},"137":{},"152":{},"154":{},"157":{},"159":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["post’",{"_index":3273,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["post│/hello│:com.blueant.peripheral.routes/greet",{"_index":1429,"title":{},"name":{},"text":{"10":{}},"component":{},"keyword":{}}],["potenti",{"_index":3198,"title":{},"name":{},"text":{"53":{},"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["power",{"_index":792,"title":{},"name":{},"text":{"5":{},"9":{},"13":{},"66":{},"71":{},"76":{},"125":{},"130":{}},"component":{},"keyword":{}}],["powerfulli",{"_index":2034,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["pr",{"_index":305,"title":{},"name":{},"text":{"2":{},"11":{},"26":{},"41":{},"42":{},"45":{},"53":{},"74":{},"86":{},"98":{},"99":{},"103":{},"128":{},"150":{},"153":{}},"component":{},"keyword":{}}],["practic",{"_index":786,"title":{},"name":{},"text":{"5":{},"6":{},"11":{},"13":{},"14":{},"15":{},"22":{},"23":{},"24":{},"41":{},"50":{},"61":{},"66":{},"68":{},"74":{},"76":{},"77":{},"80":{},"82":{},"84":{},"98":{},"107":{},"117":{},"121":{},"122":{},"128":{},"130":{},"131":{},"134":{},"136":{},"138":{},"165":{}},"component":{},"keyword":{}}],["pre",{"_index":3349,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["preced",{"_index":1765,"title":{},"name":{},"text":{"11":{},"74":{},"128":{},"157":{}},"component":{},"keyword":{}}],["precis",{"_index":1624,"title":{},"name":{},"text":{"11":{},"40":{},"74":{},"97":{},"128":{},"148":{},"157":{}},"component":{},"keyword":{}}],["predic",{"_index":1766,"title":{},"name":{},"text":{"11":{},"29":{},"87":{},"140":{},"160":{}},"component":{},"keyword":{}}],["prefer",{"_index":304,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"11":{},"13":{},"14":{},"17":{},"24":{},"28":{},"41":{},"47":{},"52":{},"53":{},"67":{},"74":{},"77":{},"84":{},"98":{},"108":{},"128":{},"131":{},"138":{}},"component":{},"keyword":{}}],["prefix",{"_index":589,"title":{"45":{},"103":{},"153":{}},"name":{"45":{},"103":{},"153":{}},"text":{"3":{},"9":{},"12":{},"13":{},"20":{},"21":{},"27":{},"39":{},"40":{},"42":{},"45":{},"47":{},"51":{},"52":{},"53":{},"58":{},"59":{},"71":{},"72":{},"76":{},"92":{},"96":{},"97":{},"99":{},"103":{},"108":{},"110":{},"115":{},"125":{},"127":{},"130":{},"144":{},"148":{},"150":{},"153":{},"157":{},"159":{}},"component":{},"keyword":{}}],["prepar",{"_index":3215,"title":{"81-1":{},"135-1":{}},"name":{},"text":{"54":{},"109":{},"158":{}},"component":{},"keyword":{}}],["prepend",{"_index":3224,"title":{},"name":{},"text":{"55":{},"58":{},"112":{}},"component":{},"keyword":{}}],["prescript",{"_index":861,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["presenc",{"_index":1825,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["present",{"_index":852,"title":{},"name":{},"text":{"6":{},"10":{},"11":{},"12":{},"13":{},"17":{},"23":{},"29":{},"30":{},"32":{},"37":{},"44":{},"46":{},"48":{},"55":{},"68":{},"73":{},"74":{},"75":{},"81":{},"83":{},"87":{},"88":{},"90":{},"94":{},"102":{},"104":{},"106":{},"110":{},"112":{},"119":{},"122":{},"128":{},"129":{},"135":{},"137":{},"140":{},"141":{},"142":{},"146":{},"152":{},"154":{},"156":{},"159":{},"160":{}},"component":{},"keyword":{}}],["preserv",{"_index":2875,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}
1],["press",{"_index":2631,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["presum",{"_index":3137,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["pretti",{"_index":1356,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"16":{},"35":{},"71":{},"74":{},"75":{},"76":{},"92":{},"124":{},"125":{},"128":{},"129":{},"130":{},"144":{}},"component":{},"keyword":{}}],["prettier",{"_index":2198,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["prevent",{"_index":909,"title":{},"name":{},"text":{"6":{},"14":{},"17":{},"22":{},"32":{},"68":{},"72":{},"77":{},"82":{},"90":{},"122":{},"127":{},"131":{},"136":{}},"component":{},"keyword":{}}],["previou",{"_index":1604,"title":{},"name":{},"text":{"11":{},"12":{},"15":{},"16":{},"22":{},"23":{},"74":{},"75":{},"82":{},"83":{},"128":{},"129":{},"136":{},"137":{},"164":{}},"component":{},"keyword":{}}],["previous",{"_index":643,"title":{},"name":{},"text":{"4":{},"22":{},"51":{},"60":{},"67":{},"82":{},"116":{},"136":{},"160":{}},"component":{},"keyword":{}}],["primari",{"_index":1972,"title":{},"name":{},"text":{"13":{},"20":{},"110":{}},"component":{},"keyword":{}}],["primarili",{"_index":1085,"title":{},"name":{},"text":{"7":{},"8":{},"15":{},"24":{},"26":{},"28":{},"41":{},"46":{},"51":{},"53":{},"55":{},"61":{},"70":{},"80":{},"86":{},"98":{},"112":{},"117":{},"126":{},"134":{},"165":{}},"component":{},"keyword":{}}],["prime",{"_index":191,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["print",{"_index":682,"title":{},"name":{},"text":{"4":{},"7":{},"10":{},"12":{},"13":{},"14":{},"16":{},"23":{},"41":{},"57":{},"67":{},"69":{},"72":{},"74":{},"75":{},"76":{},"77":{},"83":{},"98":{},"113":{},"123":{},"127":{},"128":{},"129":{},"130":{},"131":{},"137":{},"161":{}},"component":{},"keyword":{}}],["println",{"_index":2466,"title":{},"name":{},"text":{"20":{},"21":{}},"component":{},"keyword":{}}],["prior",{"_index":451,"title":{},"name":{},"text":{"3":{},"4":{},"11":{},"12":{},"13":{},"15":{},"23":{},"26":{},"31":{},"37":{},"41":{},"48":{},"74":{},"75":{},"76":{},"83":{},"86":{},"98":{},"106":{},"119":{},"125":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["priorit",{"_index":3197,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["privaci",{"_index":820,"title":{"6":{},"68":{},"122":{},"6-6":{},"6-8":{},"68-6":{},"68-8":{},"122-6":{},"122-8":{},"124-8":{}},"name":{"6":{},"68":{},"122":{}},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["privat",{"_index":66,"title":{"51-2":{}},"name":{},"text":{"1":{},"9":{},"23":{},"51":{},"71":{},"83":{},"125":{},"137":{},"160":{}},"component":{},"keyword":{}}],["probabl",{"_index":217,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"23":{},"65":{},"74":{},"75":{},"76":{},"83":{},"120":{},"125":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["problem",{"_index":279,"title":{"14-2":{}},"name":{},"text":{"2":{},"9":{},"10":{},"14":{},"23":{},"24":{},"37":{},"53":{},"62":{},"65":{},"71":{},"73":{},"75":{},"83":{},"84":{},"120":{},"125":{},"129":{},"137":{},"138":{}},"component":{},"keyword":{}}],["problemat",{"_index":457,"title":{},"name":{},"text":{"3":{},"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["proce",{"_index":2142,"title":{},"name":{},"text":{"16":{},"32":{},"78":{},"90":{},"132":{},"142":{}},"component":{},"keyword":{}}],["procedur",{"_index":2765,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["process",{"_index":573,"title":{"8":{},"70":{},"126":{},"19-11":{},"54-2":{},"109-2":{},"109-5":{},"158-2":{},"158-5":{}},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"32":{},"37":{},"43":{},"46":{},"48":{},"49":{},"52":{},"57":{},"61":{},"64":{},"66":{},"68":{},"69":{},"70":{},"72":{},"74":{},"75":{},"76":{},"78":{},"80":{},"82":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"100":{},"101":{},"104":{},"106":{},"108":{},"110":{},"117":{},"119":{},"122":{},"123":{},"126":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"138":{},"139":{},"140":{},"142":{},"144":{},"146":{},"151":{},"154":{},"156":{},"157":{},"159":{},"165":{}},"component":{},"keyword":{}}],["processor",{"_index":934,"title":{"26-9":{}},"name":{},"text":{"6":{},"26":{},"41":{},"68":{},"98":{},"122":{},"143":{}},"component":{},"keyword":{}}],["prod",{"_index":3611,"title":{},"name":{},"text":{"78":{},"79":{},"132":{},"133":{}},"component":{},"keyword":{}}],["produc",{"_index":1512,"title":{},"name":{},"text":{"10":{},"19":{},"24":{},"35":{},"41":{},"43":{},"57":{},"72":{},"73":{},"84":{},"92":{},"94":{},"98":{},"100":{},"101":{},"113":{},"125":{},"127":{},"138":{},"144":{},"146":{},"151":{},"161":{}},"component":{},"keyword":{}}],["product",{"_index":724,"title":{"5-2":{},"66-2":{},"121-2":{}},"name":{},"text":{"12":{},"13":{},"14":{},"16":{},"17":{},"26":{},"27":{},"31":{},"41":{},"52":{},"75":{},"77":{},"79":{},"81":{},"86":{},"89":{},"98":{},"100":{},"110":{},"125":{},"129":{},"131":{},"133":{},"135":{},"151":{},"159":{}},"component":{},"keyword":{}}],["profession",{"_index":80,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["profil",{"_index":1277,"title":{},"name":{},"text":{"9":{},"53":{},"71":{},"125":{}},"component":{},"keyword":{}}],["profit",{"_index":882,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["program",{"_index":1083,"title":{},"name":{},"text":{"7":{},"16":{},"24":{},"41":{},"69":{},"77":{},"84":{},"98":{},"123":{},"131":{},"138":{}},"component":{},"keyword":{}}],["programm",{"_index":3545,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["programmat",{"_index":3350,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["progress",{"_index":3076,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["project",{"_index":7,"title":{"10-2":{},"10-3":{},"16-6":{},"17-5":{},"73-2":{},"73-3":{},"78-6":{},"79-7":{},"81-1":{},"132-6":{},"133-7":{},"135-1":{}},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"9":{},"10":{},"11":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"27":{},"32":{},"47":{},"52":{},"65":{},"69":{},"71":{},"72":{},"73":{},"74":{},"76":{},"78":{},"79":{},"81":{},"83":{},"90":{},"108":{},"120":{},"123":{},"125":{},"127":{},"128":{},"130":{},"132":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["project.clj",{"_index":1103,"title":{},"name":{},"text":{"7":{},"10":{},"39":{},"69":{},"73":{},"79":{},"96":{},"123":{},"125":{},"133":{}},"component":{},"keyword":{}}],["project’",{"_index":2170,"title":{},"name":{},"text":{"16":{},"17":{},"78":{},"132":{}},"component":{},"keyword":{}}],["prometheu",{"_index":3867,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["promis",{"_index":1164,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["prompt",{"_index":2032,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["prone",{"_index":2054,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["proper",{"_index":1307,"title":{"23-13":{}},"name":{},"text":{"9":{},"16":{},"19":{},"48":{},"59":{},"71":{},"78":{},"106":{},"115":{},"125":{},"132":{},"156":{}},"component":{},"keyword":{}}],["properli",{"_index":580,"title":{},"name":{},"text":{"3":{},"12":{},"16":{},"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["properti",{"_index":912,"title":{},"name":{},"text":{"6":{},"14":{},"26":{},"31":{},"41":{},"43":{},"46":{},"68":{},"86":{},"89":{},"98":{},"100":{},"101":{},"122":{},"151":{}},"component":{},"keyword":{}}],["protect",{"_index":785,"title":{},"name":{},"text":{"5":{},"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"66":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"121":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["protected/encrypt",{"_index":2256,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["protocol",{"_index":642,"title":{"35":{},"92":{},"144":{},"16-10":{},"35-1":{},"35-3":{},"35-5":{},"35-7":{},"51-5":{},"51-6":{},"92-1":{},"92-3":{},"92-7":{},"144-1":{},"144-3":{},"144-7":{}},"name":{"35":{},"92":{},"144":{}},"text":{"4":{},"5":{},"11":{},"15":{},"16":{},"17":{},"19":{},"21":{},"22":{},"26":{},"28":{},"35":{},"37":{},"38":{},"41":{},"43":{},"46":{},"49":{},"51":{},"52":{},"54":{},"58":{},"59":{},"64":{},"66":{},"67":{},"72":{},"74":{},"75":{},"78":{},"82":{},"83":{},"92":{},"94":{},"95":{},"98":{},"100":{},"104":{},"105":{},"108":{},"109":{},"110":{},"114":{},"115":{},"119":{},"121":{},"127":{},"128":{},"129":{},"132":{},"136":{},"137":{},"143":{},"144":{},"146":{},"147":{},"151":{},"154":{},"155":{},"157":{},"158":{},"162":{},"163":{}},"component":{},"keyword":{}}],["prove",{"_index":2948,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["proven",{"_index":320,"title":{},"name":{},"text":{"2":{},"3":{},"65":{},"120":{}},"component":{},"keyword":{}}],["provid",{"_index":9,"title":{"25":{},"85":{},"139":{},"23-13":{},"84-3":{},"138-3":{}},"name":{"25":{},"85":{},"139":{}},"text":{"1":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"50":{},"51":{},"52":{},"53":{},"55":{},"58":{},"59":{},"61":{},"64":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"101":{},"102":{},"103":{},"104":{},"107":{},"108":{},"110":{},"112":{},"115":{},"117":{},"122":{},"123":{},"125":{},"126":{},"127":{},"128":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"144":{},"146":{},"147":{},"148":{},"152":{},"153":{},"154":{},"157":{},"159":{},"160":{},"163":{},"165":{}},"component":{},"keyword":{}}],["provider/serv",{"_index":3674,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["provider’",{"_index":2817,"title":{},"name":{},"text":{"25":{},"85":{},"139":{}},"component":{},"keyword":{}}],["provis",{"_index":856,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["provision",{"_index":2730,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["proxi",{"_index":2254,"title":{},"name":{},"text":{"17":{},"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["public",{"_index":65,"title":{},"name":{},"text":{"1":{},"6":{},"10":{},"28":{},"29":{},"68":{},"73":{},"79":{},"87":{},"122":{},"133":{},"140":{}},"component":{},"keyword":{}}],["publish",{"_index":67,"title":{},"name":{},"text":{"1":{},"25":{},"54":{},"85":{},"86":{},"139":{}},"component":{},"keyword":{}}],["pull",{"_index":31,"title":{},"name":{},"text":{"1":{},"2":{},"23":{},"65":{},"77":{},"83":{},"120":{},"131":{},"137":{},"149":{},"166":{}},"component":{},"keyword":{}}],["punctuat",{"_index":1845,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["punish",{"_index":1884,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["punit",{"_index":888,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["puppi",{"_index":2188,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["pure",{"_index":1749,"title":{},"name":{},"text":{"11":{},"12":{},"16":{},"20":{},"74":{},"75":{},"78":{},"128":{},"129":{},"132":{}},"component":{},"keyword":{}}],["purpos",{"_index":981,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"13":{},"16":{},"22":{},"24":{},"29":{},"37":{},"54":{},"61":{},"68":{},"75":{},"78":{},"82":{},"84":{},"87":{},"94":{},"117":{},"122":{},"125":{},"129":{},"132":{},"134":{},"136":{},"138":{},"140":{},"146":{},"165":{}},"component":{},"keyword":{}}],["pursuant",{"_index":986,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["push",{"_index":303,"title":{},"name":{},"text":{"2":{},"11":{},"22":{},"37":{},"65":{},"74":{},"82":{},"94":{},"100":{},"120":{},"125":{},"128":{},"136":{},"146":{},"151":{}},"component":{},"keyword":{}}],["put",{"_index":324,"title":{"13-8":{},"76-8":{},"130-8":{}},"name":{},"text":{"2":{},"9":{},"11":{},"13":{},"17":{},"18":{},"20":{},"22":{},"23":{},"37":{},"44":{},"47":{},"54":{},"55":{},"57":{},"58":{},"59":{},"62":{},"65":{},"71":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"94":{},"102":{},"104":{},"109":{},"110":{},"112":{},"114":{},"115":{},"120":{},"124":{},"125":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"146":{},"152":{},"154":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{}},"component":{},"keyword":{}}],["pwd",{"_index":2404,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["q",{"_index":1284,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["qabout\\",{"_index":3370,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["qdepartment\\e/([^/]+)/\\qemployees\\",{"_index":3888,"title":{},"name":{},"text":{"108":{}},"component":{},"keyword":{}}],["qgreet\\",{"_index":3496,"title":{},"name":{},"text":{"75":{},"76":{},"129":{},"130":{}},"component":{},"keyword":{}}],["qtodo\\",{"_index":3759,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["qtodo\\\\",{"_index":3790,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["qtp",{"_index":3510,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["qtp81639554",{"_index":3507,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["qualifi",{"_index":1315,"title":{},"name":{},"text":{"9":{},"15":{},"19":{},"22":{},"26":{},"29":{},"37":{},"41":{},"52":{},"61":{},"71":{},"77":{},"80":{},"82":{},"86":{},"98":{},"100":{},"108":{},"110":{},"117":{},"125":{},"131":{},"134":{},"136":{},"151":{},"157":{},"165":{}},"component":{},"keyword":{}}],["queri",{"_index":584,"title":{"9-12":{},"30-7":{},"44-1":{},"71-12":{},"88-11":{},"102-1":{},"125-12":{},"141-10":{},"152-1":{}},"name":{"12":{},"75":{},"129":{}},"text":{"3":{},"9":{},"11":{},"12":{},"13":{},"17":{},"19":{},"22":{},"23":{},"24":{},"27":{},"30":{},"37":{},"40":{},"42":{},"44":{},"45":{},"46":{},"52":{},"53":{},"58":{},"59":{},"61":{},"62":{},"63":{},"71":{},"74":{},"75":{},"76":{},"80":{},"82":{},"83":{},"84":{},"94":{},"97":{},"99":{},"100":{},"102":{},"103":{},"104":{},"108":{},"110":{},"117":{},"118":{},"125":{},"128":{},"129":{},"130":{},"134":{},"136":{},"137":{},"138":{},"148":{},"150":{},"151":{},"152":{},"153":{},"154":{},"157":{},"159":{},"165":{}},"component":{},"keyword":{}}],["question",{"_index":541,"title":{},"name":{},"text":{"3":{},"6":{},"25":{},"68":{},"72":{},"122":{},"127":{},"156":{}},"component":{},"keyword":{}}],["queu",{"_index":1136,"title":{},"name":{},"text":{"8":{},"9":{},"70":{},"71":{},"126":{},"157":{}},"component":{},"keyword":{}}],["queue",{"_index":712,"title":{"124":{},"22-5":{},"22-7":{},"37-4":{},"82-5":{},"82-7":{},"94-4":{},"136-5":{},"136-7":{},"146-4":{},"160-1":{}},"name":{},"text":{"4":{},"9":{},"11":{},"22":{},"23":{},"24":{},"25":{},"29":{},"32":{},"35":{},"37":{},"43":{},"52":{},"55":{},"67":{},"71":{},"74":{},"82":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"101":{},"108":{},"110":{},"112":{},"128":{},"136":{},"138":{},"139":{},"142":{},"144":{},"146":{},"157":{},"159":{},"160":{}},"component":{},"keyword":{}}],["quick",{"_index":1185,"title":{"52":{},"108":{},"157":{},"58-1":{},"59-1":{},"114-1":{},"115-1":{},"162-1":{},"163-1":{}},"name":{"52":{},"108":{},"157":{}},"text":{"8":{},"9":{},"12":{},"13":{},"16":{},"19":{},"20":{},"23":{},"61":{},"70":{},"71":{},"75":{},"76":{},"80":{},"83":{},"117":{},"125":{},"126":{},"129":{},"130":{},"134":{
1},"137":{},"165":{}},"component":{},"keyword":{}}],["quickli",{"_index":1817,"title":{},"name":{},"text":{"12":{},"16":{},"57":{},"113":{},"124":{},"161":{}},"component":{},"keyword":{}}],["quickview",{"_index":2524,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["quietli",{"_index":2108,"title":{},"name":{},"text":{"15":{},"16":{},"32":{},"59":{},"90":{},"115":{}},"component":{},"keyword":{}}],["quit",{"_index":430,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"12":{},"15":{},"16":{},"22":{},"23":{},"32":{},"41":{},"47":{},"51":{},"67":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"82":{},"83":{},"90":{},"98":{},"110":{},"125":{},"127":{},"128":{},"129":{},"131":{},"132":{},"136":{},"137":{},"142":{}},"component":{},"keyword":{}}],["quot",{"_index":1742,"title":{},"name":{},"text":{"11":{},"13":{},"74":{},"76":{},"77":{},"83":{},"125":{},"128":{},"130":{},"131":{},"137":{}},"component":{},"keyword":{}}],["quser\\",{"_index":3186,"title":{},"name":{},"text":{"52":{},"157":{}},"component":{},"keyword":{}}],["r",{"_index":3742,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["race",{"_index":865,"title":{},"name":{},"text":{"6":{},"23":{},"68":{},"122":{}},"component":{},"keyword":{}}],["rack",{"_index":3153,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["rail",{"_index":4004,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["rais",{"_index":1218,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["ramp",{"_index":727,"title":{"5-4":{},"66-4":{}},"name":{},"text":{},"component":{},"keyword":{}}],["ran",{"_index":1422,"title":{},"name":{},"text":{"10":{},"16":{},"73":{},"78":{},"132":{}},"component":{},"keyword":{}}],["random",{"_index":2871,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["rang",{"_index":1172,"title":{},"name":{},"text":{"8":{},"22":{},"43":{},"70":{},"82":{},"101":{},"126":{},"136":{}},"component":{},"keyword":{}}],["rare",{"_index":1808,"title":{},"name":{},"text":{"12":{},"22":{},"35":{},"52":{},"55":{},"75":{},"81":{},"82":{},"92":{},"94":{},"108":{},"112":{},"129":{},"135":{},"136":{},"144":{},"157":{},"160":{}},"component":{},"keyword":{}}],["rate",{"_index":3879,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["rational",{"_index":381,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["raw",{"_index":3337,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["re",{"_index":1310,"title":{},"name":{},"text":{"9":{},"14":{},"16":{},"32":{},"52":{},"54":{},"71":{},"72":{},"73":{},"75":{},"76":{},"77":{},"83":{},"90":{},"108":{},"109":{},"125":{},"127":{},"129":{},"130":{},"131":{},"137":{},"142":{},"157":{},"158":{}},"component":{},"keyword":{}}],["reach",{"_index":990,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"52":{},"68":{},"71":{},"108":{},"109":{},"122":{},"125":{},"158":{}},"component":{},"keyword":{}}],["read",{"_index":1110,"title":{},"name":{},"text":{"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"31":{},"52":{},"57":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"81":{},"82":{},"83":{},"89":{},"100":{},"108":{},"110":{},"113":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"135":{},"136":{},"137":{},"151":{},"159":{},"161":{}},"component":{},"keyword":{}}],["read/eval/print/loop",{"_index":2031,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["readabl",{"_index":1754,"title":{},"name":{},"text":{"11":{},"13":{},"17":{},"23":{},"41":{},"75":{},"83":{},"98":{},"129":{},"137":{}},"component":{},"keyword":{}}],["readablebytechannel",{"_index":3147,"title":{},"name":{},"text":{"49":{},"57":{},"105":{},"113":{},"155":{},"161":{}},"component":{},"keyword":{}}],["reader",{"_index":3093,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["readi",{"_index":723,"title":{"5-2":{},"54-3":{},"66-2":{},"109-3":{},"121-2":{},"158-3":{}},"name":{},"text":{"5":{},"8":{},"11":{},"13":{},"14":{},"16":{},"18":{},"20":{},"23":{},"54":{},"66":{},"70":{},"72":{},"74":{},"76":{},"77":{},"79":{},"83":{},"109":{},"110":{},"125":{},"126":{},"127":{},"128":{},"130":{},"131":{},"133":{},"137":{},"158":{},"159":{}},"component":{},"keyword":{}}],["readme.md",{"_index":1403,"title":{},"name":{},"text":{"10":{},"73":{},"125":{}},"component":{},"keyword":{}}],["real",{"_index":697,"title":{},"name":{},"text":{"4":{},"9":{},"10":{},"12":{},"15":{},"16":{},"21":{},"23":{},"43":{},"51":{},"64":{},"67":{},"71":{},"73":{},"75":{},"83":{},"101":{},"119":{},"125":{},"129":{},"137":{}},"component":{},"keyword":{}}],["realist",{"_index":2146,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["realiti",{"_index":2736,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["realiz",{"_index":3241,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["realli",{"_index":337,"title":{},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"20":{},"22":{},"23":{},"65":{},"71":{},"74":{},"75":{},"82":{},"83":{},"120":{},"125":{},"128":{},"129":{},"136":{},"137":{}},"component":{},"keyword":{}}],["ream",{"_index":3014,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["reason",{"_index":77,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"9":{},"11":{},"21":{},"44":{},"46":{},"47":{},"52":{},"54":{},"55":{},"64":{},"68":{},"71":{},"74":{},"76":{},"102":{},"109":{},"121":{},"122":{},"124":{},"125":{},"128":{},"130":{},"152":{},"158":{}},"component":{},"keyword":{}}],["reassembl",{"_index":3218,"title":{},"name":{},"text":{"54":{}},"component":{},"keyword":{}}],["reattach",{"_index":2902,"title":{},"name":{},"text":{"32":{},"74":{},"90":{},"128":{},"142":{}},"component":{},"keyword":{}}],["rebuild",{"_index":3583,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["rebuilt",{"_index":1167,"title":{},"name":{},"text":{"8":{},"15":{},"52":{},"70":{},"126":{}},"component":{},"keyword":{}}],["recal",{"_index":2213,"title":{},"name":{},"text":{"16":{},"23":{},"78":{},"83":{},"132":{},"137":{}},"component":{},"keyword":{}}],["receipt",{"_index":1023,"title":{},"name":{},"text":{"6":{},"61":{},"68":{},"80":{},"117":{},"122":{},"134":{},"165":{}},"component":{},"keyword":{}}],["receiv",{"_index":816,"title":{"6-4":{},"68-4":{},"122-4":{}},"name":{},"text":{"6":{},"8":{},"11":{},"13":{},"16":{},"18":{},"20":{},"21":{},"22":{},"23":{},"27":{},"28":{},"38":{},"64":{},"68":{},"70":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"110":{},"119":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"159":{}},"component":{},"keyword":{}}],["recent",{"_index":1078,"title":{},"name":{},"text":{"7":{},"20":{},"22":{},"23":{},"29":{},"52":{},"69":{},"82":{},"83":{},"87":{},"108":{},"123":{},"136":{},"137":{},"140":{},"157":{}},"component":{},"keyword":{}}],["recogn",{"_index":1168,"title":{},"name":{},"text":{"8":{},"20":{},"32":{},"70":{},"72":{},"90":{},"126":{},"127":{},"142":{},"157":{}},"component":{},"keyword":{}}],["recognit",{"_index":3317,"title":{"72-10":{},"72-11":{},"127-10":{},"127-11":{}},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["recommend",{"_index":295,"title":{},"name":{},"text":{"2":{},"20":{},"32":{},"52":{},"58":{},"59":{},"61":{},"65":{},"80":{},"90":{},"108":{},"114":{},"115":{},"117":{},"120":{},"134":{},"142":{},"157":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["recompil",{"_index":1809,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["reconnect",{"_index":2346,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["record",{"_index":372,"title":{"100-7":{},"151-7":{}},"name":{},"text":{"3":{},"6":{},"9":{},"15":{},"16":{},"22":{},"37":{},"52":{},"63":{},"68":{},"71":{},"78":{},"82":{},"86":{},"94":{},"100":{},"108":{},"118":{},"122":{},"125":{},"132":{},"136":{},"146":{},"151":{},"157":{}},"component":{},"keyword":{}}
1],["recours",{"_index":2657,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["red",{"_index":2237,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["redact",{"_index":3037,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["redef",{"_index":3634,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["redefin",{"_index":2033,"title":{},"name":{},"text":{"13":{},"64":{}},"component":{},"keyword":{}}],["redirect",{"_index":2270,"title":{},"name":{},"text":{"17":{},"50":{},"107":{}},"component":{},"keyword":{}}],["redund",{"_index":3180,"title":{},"name":{},"text":{"52":{},"108":{},"157":{},"159":{}},"component":{},"keyword":{}}],["redux",{"_index":2075,"title":{"15":{}},"name":{},"text":{},"component":{},"keyword":{}}],["ref",{"_index":3051,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["ref=\"stdout",{"_index":3052,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["refactor",{"_index":1565,"title":{"11-12":{},"74-12":{},"128-12":{}},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"119":{},"128":{},"129":{}},"component":{},"keyword":{}}],["refer",{"_index":848,"title":{"36":{},"52":{},"93":{},"108":{},"145":{},"157":{},"42-6":{},"45-6":{},"53-6":{},"58-1":{},"58-6":{},"59-1":{},"59-5":{},"99-6":{},"103-6":{},"114-1":{},"114-5":{},"115-1":{},"115-5":{},"150-6":{},"153-6":{},"162-1":{},"162-5":{},"163-1":{},"163-5":{}},"name":{"52":{},"108":{},"157":{}},"text":{"6":{},"9":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"21":{},"22":{},"23":{},"24":{},"26":{},"35":{},"37":{},"38":{},"46":{},"49":{},"54":{},"61":{},"64":{},"68":{},"71":{},"72":{},"73":{},"76":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"89":{},"92":{},"94":{},"95":{},"104":{},"105":{},"117":{},"122":{},"124":{},"125":{},"127":{},"130":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"143":{},"144":{},"146":{},"147":{},"155":{},"164":{},"165":{}},"component":{},"keyword":{}}],["referenc",{"_index":2112,"title":{},"name":{},"text":{"15":{},"16":{},"22":{},"37":{},"59":{},"82":{},"94":{},"115":{},"136":{},"146":{},"163":{}},"component":{},"keyword":{}}],["reference:request",{"_index":3960,"title":{},"name":{},"text":{"129":{}},"component":{},"keyword":{}}],["refin",{"_index":1642,"title":{},"name":{},"text":{"11":{},"55":{},"74":{},"112":{},"128":{},"160":{}},"component":{},"keyword":{}}],["reflect",{"_index":2057,"title":{},"name":{},"text":{"14":{},"27":{},"37":{},"43":{},"52":{},"69":{},"77":{},"94":{},"108":{},"123":{},"131":{},"157":{}},"component":{},"keyword":{}}],["reformat",{"_index":3537,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["refresh",{"_index":1563,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["refus",{"_index":3627,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["regard",{"_index":107,"title":{},"name":{},"text":{"1":{},"6":{},"17":{},"68":{},"122":{}},"component":{},"keyword":{}}],["regardless",{"_index":16,"title":{},"name":{},"text":{"1":{},"6":{},"21":{},"32":{},"68":{},"90":{},"122":{},"142":{}},"component":{},"keyword":{}}],["region",{"_index":3868,"title":{},"name":{},"text":{"100":{},"143":{},"151":{}},"component":{},"keyword":{}}],["regist",{"_index":3870,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["registri",{"_index":3829,"title":{},"name":{},"text":{"86":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["regul",{"_index":906,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["regular",{"_index":1299,"title":{},"name":{},"text":{"9":{},"18":{},"41":{},"52":{},"63":{},"71":{},"79":{},"98":{},"108":{},"118":{},"125":{},"133":{}},"component":{},"keyword":{}}],["regulatori",{"_index":1033,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["reifi",{"_index":480,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["reject",{"_index":948,"title":{},"name":{},"text":{"6":{},"9":{},"47":{},"68":{},"71":{},"122":{},"125":{}},"component":{},"keyword":{}}],["rel",{"_index":1340,"title":{},"name":{},"text":{"9":{},"10":{},"12":{},"17":{},"19":{},"20":{},"61":{},"65":{},"71":{},"72":{},"73":{},"75":{},"80":{},"117":{},"120":{},"125":{},"127":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["relat",{"_index":160,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"6":{},"7":{},"13":{},"14":{},"20":{},"22":{},"30":{},"37":{},"46":{},"51":{},"67":{},"68":{},"69":{},"77":{},"79":{},"82":{},"94":{},"98":{},"104":{},"122":{},"123":{},"131":{},"133":{},"136":{},"146":{}},"component":{},"keyword":{}}],["relationship",{"_index":1028,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["releas",{"_index":379,"title":{},"name":{},"text":{"3":{},"4":{},"11":{},"29":{},"37":{},"64":{},"67":{},"74":{},"87":{},"98":{},"101":{},"125":{},"128":{}},"component":{},"keyword":{}}],["relev",{"_index":483,"title":{},"name":{},"text":{"3":{},"12":{},"24":{},"38":{},"75":{},"84":{},"124":{},"129":{},"138":{}},"component":{},"keyword":{}}],["reli",{"_index":695,"title":{},"name":{},"text":{"4":{},"19":{},"43":{},"64":{},"67":{},"72":{},"101":{},"110":{},"127":{}},"component":{},"keyword":{}}],["reliabl",{"_index":237,"title":{},"name":{},"text":{"2":{},"5":{},"65":{},"120":{}},"component":{},"keyword":{}}],["religi",{"_index":868,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["reload",{"_index":698,"title":{"14":{},"77":{},"131":{}},"name":{},"text":{"4":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{},"37":{},"38":{},"67":{},"72":{},"74":{},"75":{},"76":{},"77":{},"83":{},"94":{},"127":{},"128":{},"129":{},"130":{},"131":{},"137":{}},"component":{},"keyword":{}}],["reload.cor",{"_index":2191,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["reload.core/reload",{"_index":2205,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["remain",{"_index":538,"title":{},"name":{},"text":{"3":{},"9":{},"11":{},"16":{},"22":{},"32":{},"37":{},"71":{},"74":{},"82":{},"90":{},"94":{},"110":{},"119":{},"125":{},"128":{},"136":{},"142":{},"146":{},"159":{}},"component":{},"keyword":{}}],["rememb",{"_index":2072,"title":{},"name":{},"text":{"14":{},"16":{},"19":{},"22":{},"23":{},"32":{},"77":{},"78":{},"82":{},"90":{},"131":{},"132":{},"136":{},"142":{}},"component":{},"keyword":{}}],["remind",{"_index":1805,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["remot",{"_index":883,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"46":{},"68":{},"74":{},"75":{},"83":{},"104":{},"122":{},"128":{},"129":{},"137":{},"154":{}},"component":{},"keyword":{}}],["remov",{"_index":637,"title":{},"name":{},"text":{"4":{},"6":{},"10":{},"11":{},"14":{},"16":{},"23":{},"27":{},"29":{},"34":{},"41":{},"51":{},"60":{},"64":{},"67":{},"68":{},"73":{},"74":{},"77":{},"79":{},"83":{},"87":{},"91":{},"98":{},"101":{},"116":{},"122":{},"128":{},"131":{},"133":{},"137":{},"140":{},"160":{}},"component":{},"keyword":{}}],["render",{"_index":2386,"title":{},"name":{},"text":{"19":{},"23":{},"24":{},"57":{},"61":{},"80":{},"83":{},"84":{},"113":{},"117":{},"121":{},"125":{},"134":{},"137":{},"138":{},"161":{},"165":{}},"component":{},"keyword":{}}],["render’",{"_index":2780,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["repeat",{"_index":3355,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["repeatedli",{"_index":2180,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["repetit",{"_index":950,"title":{},"name":{},"text":{"6":{},"68":{},"122":{},"125":{}},"component":{},"keyword":{}}],["repl",{"_index":691,"title":{"14":{},"72":{},"77":{},"127":{},"131":{},"16-15":{}},"name":{"14":{},"72":{},"77":{},"127":{},"131":{}},"text":{"4":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"21":{},"23":{},"26":{},"27":{},"31":{},"37":{},"41":{},"67":{},"69":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"89":{},"94":{},"98":{},"123":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["repl:1:1",{"_index":1997,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["replac",{"_index":713,"title":{},"name":{},"text":{"4":{},"12":{},"15":{},"17":{},"22":{},"26":{},"27":{},"30":{},"38":{},"51":{},"67":{},"73":{},"75":{},"77":{},"81":{},"82":{},"98":{},"110":{},"129":{},"131":{},"135":{},"159":{}},"component":{},"keyword":{}}],["repli",{"_index":2279,"title":{},"name":{},"text":{"17":{},"21":{}},"component":{},"keyword":{}}],["repo",{"_index":297,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["report",{"_index":93,"title":{},"name":{},"text":{"1":{},"10":{},"22":{},"52":{},"53":{},"73":{},"82":{},"100":{},"136":{},"151":{}},"component":{},"keyword":{}}],["repositori",{"_index":86,"title":{},"name":{},"text":{"1":{},"2":{},"7":{},"10":{},"11":{},"12":{},"13":{},"23":{},"39":{},"65":{},"69":{},"73":{},"74":{},"75":{},"76":{},"83":{},"96":{},"120":{},"123":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["repres",{"_index":89,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"8":{},"16":{},"22":{},"32":{},"35":{},"61":{},"70":{},"80":{},"82":{},"90":{},"92":{},"94":{},"117":{},"126":{},"134":{},"136":{},"142":{},"144":{},"146":{},"165":{}},"component":{},"keyword":{}}],["represent",{"_index":2196,"title":{},"name":{},"text":{"16":{},"37":{},"49":{},"72":{},"75":{},"94":{},"105":{},"127":{},"129":{},"146":{},"155":{}},"component":{},"keyword":{}}],["reproduc",{"_index":236,"title":{},"name":{},"text":{"2":{},"23":{},"65":{},"120":{}},"component":{},"keyword":{}}],["request",{"_index":32,"title":{"8":{},"46":{},"70":{},"104":{},"126":{},"154":{},"9-23":{},"12-10":{},"16-18":{},"19-9":{},"30-1":{},"30-2":{},"54-2":{},"71-23":{},"75-10":{},"88-4":{},"88-5":{},"109-2":{},"110-4":{},"125-23":{},"129-10":{},"141-4":{},"158-2":{},"159-2":{}},"name":{"46":{},"104":{},"154":{}},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"29":{},"30":{},"32":{},"37":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"53":{},"54":{},"55":{},"57":{},"58":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"90":{},"92":{},"94":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"104":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"114":{},"115":{},"117":{},"119":{},"120":{},"121":{},"122":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"144":{},"146":{},"148":{},"149":{},"150":{},"151":{},"152":{},"154":{},"156":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{},"165":{},"166":{}},"component":{},"keyword":{}}],["request(get",{"_index":3453,"title":{},"name":{},"text":{"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["request/fn",{"_index":3372,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}
1],["request/respons",{"_index":2676,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["requestbodycoercion",{"_index":2390,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["request’",{"_index":1206,"title":{},"name":{},"text":{"9":{},"30":{},"44":{},"46":{},"51":{},"71":{},"100":{},"102":{},"104":{},"125":{},"151":{},"152":{},"154":{}},"component":{},"keyword":{}}],["requir",{"_index":751,"title":{},"name":{},"text":{"5":{},"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"28":{},"30":{},"38":{},"40":{},"41":{},"45":{},"46":{},"47":{},"52":{},"54":{},"55":{},"58":{},"59":{},"61":{},"63":{},"66":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"84":{},"95":{},"97":{},"98":{},"102":{},"103":{},"108":{},"109":{},"112":{},"114":{},"115":{},"117":{},"118":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"143":{},"147":{},"148":{},"152":{},"153":{},"156":{},"158":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["require/reload",{"_index":3331,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["required/reload",{"_index":3332,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["reset",{"_index":1781,"title":{},"name":{},"text":{"11":{},"12":{},"14":{},"16":{},"18":{},"21":{},"23":{},"74":{},"75":{},"77":{},"78":{},"83":{},"128":{},"129":{},"131":{},"132":{},"137":{}},"component":{},"keyword":{}}],["resid",{"_index":939,"title":{},"name":{},"text":{"6":{},"37":{},"68":{},"94":{},"122":{},"146":{}},"component":{},"keyword":{}}],["residu",{"_index":962,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["resolut",{"_index":3192,"title":{},"name":{},"text":{"52":{}},"component":{},"keyword":{}}],["resolv",{"_index":1240,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"13":{},"14":{},"20":{},"26":{},"37":{},"52":{},"63":{},"71":{},"73":{},"74":{},"76":{},"86":{},"94":{},"108":{},"118":{},"125":{},"128":{},"130":{},"146":{},"157":{}},"component":{},"keyword":{}}],["resons",{"_index":3243,"title":{},"name":{},"text":{"57":{}},"component":{},"keyword":{}}],["resourc",{"_index":355,"title":{"47":{},"3-5":{},"47-1":{},"50-3":{},"88-13":{},"107-3":{}
1,"110-3":{},"141-12":{},"159-1":{}},"name":{"47":{}},"text":{"3":{},"5":{},"9":{},"10":{},"17":{},"20":{},"23":{},"26":{},"28":{},"44":{},"47":{},"50":{},"54":{},"57":{},"64":{},"66":{},"71":{},"72":{},"73":{},"79":{},"81":{},"83":{},"86":{},"102":{},"107":{},"109":{},"110":{},"113":{},"119":{},"125":{},"127":{},"133":{},"135":{},"137":{},"152":{},"158":{},"161":{}},"component":{},"keyword":{}}],["resources/fil",{"_index":3127,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["resp",{"_index":1897,"title":{},"name":{},"text":{"12":{},"74":{},"75":{},"79":{},"128":{},"129":{},"133":{}},"component":{},"keyword":{}}],["resp/respons",{"_index":3655,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["respect",{"_index":37,"title":{},"name":{},"text":{"1":{},"6":{},"11":{},"61":{},"68":{},"74":{},"80":{},"117":{},"122":{},"128":{},"134":{},"165":{}},"component":{},"keyword":{}}],["respond",{"_index":1183,"title":{},"name":{},"text":{"8":{},"10":{},"11":{},"16":{},"18":{},"20":{},"23":{},"24":{},"48":{},"50":{},"53":{},"70":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"84":{},"106":{},"107":{},"121":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"138":{}},"component":{},"keyword":{}}],["respons",{"_index":99,"title":{"48":{},"49":{},"57":{},"105":{},"106":{},"113":{},"155":{},"156":{},"161":{},"12-14":{},"13-9":{},"19-3":{},"19-4":{},"19-8":{},"23-13":{},"55-2":{},"55-3":{},"57-1":{},"57-2":{},"57-3":{},"61-2":{},"72-9":{},"75-12":{},"76-9":{},"80-2":{},"112-2":{},"112-3":{},"113-1":{},"113-2":{},"113-3":{},"117-2":{},"124-6":{},"127-9":{},"129-12":{},"130-9":{},"134-2":{},"156-1":{},"160-3":{},"161-1":{},"161-2":{},"161-3":{},"165-2":{}},"name":{"48":{},"49":{},"105":{},"106":{},"155":{},"156":{}},"text":{"1":{},"3":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"29":{},"30":{},"32":{},"33":{},"35":{},"37":{},"38":{},"41":{},"43":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"54":{},"55":{},"57":{},"61":{},"64":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"90":{},"92":{},"94":{},"98":{},"101":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"117":{},"119":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"139":{},"140":{},"142":{},"144":{},"146":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["response/fn",{"_index":3374,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["rest",{"_index":1220,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"23":{},"25":{},"32":{},"37":{},"71":{},"74":{},"75":{},"76":{},"83":{},"90":{},"94":{},"125":{},"128":{},"129":{},"130":{},"137":{},"142":{},"146":{}},"component":{},"keyword":{}}],["restart",{"_index":1619,"title":{},"name":{},"text":{"11":{},"12":{},"14":{},"15":{},"16":{},"18":{},"21":{},"23":{},"27":{},"72":{},"74":{},"75":{},"77":{},"78":{},"79":{},"83":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["restart/reload",{"_index":1852,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["restor",{"_index":3040,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["restrict",{"_index":1046,"title":{"9-26":{},"71-26":{},"125-26":{}},"name":{},"text":{"6":{},"47":{},"68":{},"122":{},"125":{}},"component":{},"keyword":{}}],["resuabl",{"_index":1717,"title":{},"name":{},"text":{"11":{}},"component":{},"keyword":{}}],["result",{"_index":98,"title":{"22-9":{},"82-9":{},"136-9":{}},"name":{},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"19":{},"22":{},"23":{},"24":{},"31":{},"32":{},"35":{},"37":{},"41":{},"44":{},"47":{},"52":{},"55":{},"61":{},"64":{},"68":{},"69":{},"70":{},"71":{},"74":{},"75":{},"76":{},"78":{},"80":{},"82":{},"83":{},"84":{},"89":{},"90":{},"92":{},"94":{},"98":{},"100":{},"102":{},"108":{},"110":{},"112":{},"117":{},"122":{},"123":{},"125":{},"126":{},"128":{},"129":{},"130":{},"132":{},"134":{},"136":{},"137":{},"138":{},"142":{},"144":{},"146":{},"151":{},"152":{},"157":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["resum",{"_index":1153,"title":{},"name":{},"text":{"8":{},"22":{},"70":{},"82":{},"126":{},"136":{}},"component":{},"keyword":{}}],["retain",{"_index":721,"title":{},"name":{},"text":{"4":{},"6":{},"64":{},"67":{},"68":{},"119":{},"122":{}},"component":{},"keyword":{}}],["retent",{"_index":830,"title":{"6-10":{},"68-10":{},"122-10":{}},"name":{},"text":{},"component":{},"keyword":{}}],["retest",{"_index":2047,"title":{},"name":{},"text":{"14":{}},"component":{},"keyword":{}}],["rethrow",{"_index":2891,"title":{},"name":{},"text":{"32":{}},"component":{},"keyword":{}}],["retriev",{"_index":2185,"title":{},"name":{},"text":{"16":{},"23":{},"50":{},"57":{},"107":{},"113":{},"125":{},"161":{}},"component":{},"keyword":{}}],["return",{"_index":702,"title":{"11-11":{},"37-2":{},"74-11":{},"94-2":{},"128-11":{},"146-2":{}},"name":{},"text":{"4":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"19":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"32":{},"35":{},"37":{},"38":{},"41":{},"43":{},"44":{},"47":{},"48":{},"49":{},"51":{},"52":{},"54":{},"57":{},"61":{},"64":{},"67":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"90":{},"92":{},"94":{},"95":{},"98":{},"100":{},"102":{},"106":{},"108":{},"109":{},"110":{},"113":{},"117":{},"119":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"142":{},"144":{},"146":{},"147":{},"151":{},"152":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}
1],["reus",{"_index":2644,"title":{},"name":{},"text":{"22":{},"23":{},"24":{},"38":{},"64":{},"71":{},"82":{},"83":{},"84":{},"95":{},"125":{},"136":{},"137":{},"138":{},"147":{}},"component":{},"keyword":{}}],["reusabl",{"_index":2771,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["revalu",{"_index":2087,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["revamp",{"_index":353,"title":{"3-4":{}},"name":{},"text":{},"component":{},"keyword":{}}],["revers",{"_index":530,"title":{},"name":{},"text":{"3":{},"30":{},"88":{},"141":{}},"component":{},"keyword":{}}],["review",{"_index":96,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["revis",{"_index":833,"title":{"6-12":{},"68-12":{},"122-12":{}},"name":{},"text":{"6":{},"15":{},"68":{},"122":{}},"component":{},"keyword":{}}],["rework",{"_index":577,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["rewrit",{"_index":3225,"title":{},"name":{},"text":{"55":{},"160":{}},"component":{},"keyword":{}}],["rhyme",{"_index":1806,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["rich",{"_index":1920,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}
1],["right",{"_index":827,"title":{"6-8":{},"68-8":{},"122-8":{}},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"21":{},"23":{},"68":{},"71":{},"74":{},"75":{},"79":{},"83":{},"122":{},"125":{},"128":{},"129":{},"133":{},"137":{}},"component":{},"keyword":{}}],["ring",{"_index":2482,"title":{"50":{},"107":{},"22-3":{},"82-3":{},"136-3":{}},"name":{"50":{},"107":{}},"text":{"20":{},"22":{},"24":{},"46":{},"50":{},"55":{},"72":{},"74":{},"79":{},"82":{},"84":{},"94":{},"104":{},"107":{},"112":{},"127":{},"128":{},"133":{},"136":{},"138":{},"154":{},"156":{},"159":{},"160":{}},"component":{},"keyword":{}}],["ring.middleware.session.memory/memori",{"_index":3158,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["ring.middleware.session.store/sessionstor",{"_index":3157,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["ring.util.respons",{"_index":3654,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["ring/r",{"_index":3859,"title":{},"name":{},"text":{"96":{}},"component":{},"keyword":{}}],["ring’",{"_index":3154,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["rippl",{"_index":1807,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["risk",{"_index":953,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["rname",{"_index":3351,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["road",{"_index":1976,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["robust",{"_index":3319,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["role",{"_index":2642,"title":{},"name":{},"text":{"22":{},"23":{},"41":{},"82":{},"98":{},"136":{}},"component":{},"keyword":{}}],["roman",{"_index":2915,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["room",{"_index":2649,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["root",{"_index":162,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"16":{},"17":{},"19":{},"20":{},"41":{},"47":{},"50":{},"69":{},"78":{},"79":{},"81":{},"98":{},"107":{},"110":{},"123":{},"132":{},"133":{},"135":{},"159":{}},"component":{},"keyword":{}}],["root.war",{"_index":2504,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["root_war",{"_index":2582,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["round",{"_index":2760,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["rout",{"_index":351,"title":{"9":{},"51":{},"52":{},"71":{},"108":{},"125":{},"157":{},"3-3":{},"3-5":{},"3-7":{},"9-7":{},"9-8":{},"9-18":{},"9-19":{},"9-20":{},"9-24":{},"9-25":{},"11-10":{},"13-11":{},"15-3":{},"16-11":{},"18-9":{},"21-9":{},"23-8":{},"23-9":{},"27-3":{},"35-3":{},"47-1":{},"47-3":{},"51-1":{},"51-3":{},"52-2":{},"52-3":{},"52-4":{},"52-6":{},"58-3":{},"58-4":{},"58-5":{},"58-11":{},"59-3":{},"59-4":{},"61-6":{},"71-7":{},"71-8":{},"71-18":{},"71-19":{},"71-20":{},"71-25":{},"72-7":{},"72-9":{},"72-10":{},"72-11":{},"72-12":{},"74-10":{},"76-11":{},"77-2":{},"77-3":{},"77-4":{},"79-10":{},"80-6":{},"83-8":{},"83-9":{},"92-3":{},"108-2":{},"108-3":{},"108-4":{},"108-7":{},"114-2":{},"114-3":{},"114-4":{},"114-10":{},"115-3":{},"115-4":{},"117-6":{},"124-9":{},"125-7":{},"125-8":{},"125-18":{},"125-19":{},"125-20":{},"125-25":{},"127-7":{},"127-9":{},"127-10":{},"127-11":{},"127-12":{},"128-10":{},"130-11":{},"131-2":{},"131-3":{},"133-10":{},"134-6":{},"137-8":{},"137-9":{},"144-3":{},"157-2":{},"157-3":{},"157-4":{},"157-7":{},"162-2":{},"162-3":{},"162-4":{},"162-10":{},"163-3":{},"163-4":{},"165-6":{}},"name":{"9":{},"51":{},"52":{},"71":{},"108":{},"125":{},"157":{}},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"29":{},"30":{},"31":{},"32":{},"35":{},"37":{},"39":{},"40":{},"42":{},"44":{},"45":{},"46":{},"47":{},"51":{},"52":{},"53":{},"54":{},"56":{},"58":{},"59":{},"61":{},"63":{},"64":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"90":{},"92":{},"94":{},"96":{},"97":{},"99":{},"102":{},"103":{},"108":{},"109":{},"110":{},"111":{},"114":{},"115":{},"117":{},"118":{},"119":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"142":{},"144":{},"146":{},"148":{},"150":{},"152":{},"153":{},"157":{},"158":{},"159":{},"160":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["route/expand",{"_index":1148,"title":{},"name":{},"text":{"8":{},"9":{},"32":{},"52":{},"58":{},"70":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"90":{},"114":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"142":{},"159":{},"162":{}},"component":{},"keyword":{}}],["route/form",{"_index":1346,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["route/print",{"_index":3343,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["route/rout",{"_index":3582,"title":{},"name":{},"text":{"77":{}},"component":{},"keyword":{}}],["route/tri",{"_index":3369,"title":{},"name":{},"text":{"72":{},"76":{},"127":{},"130":{}},"component":{},"keyword":{}}],["route/url",{"_index":1331,"title":{},"name":{},"text":{"9":{},"23":{},"71":{},"72":{},"78":{},"79":{},"83":{},"125":{},"127":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["router",{"_index":363,"title":{"40":{},"42":{},"45":{},"53":{},"97":{},"99":{},"103":{},"148":{},"150":{},"153":{},"3-8":{},"51-6":{},"52-5":{},"88-16":{},"92-4":{},"108-2":{},"108-5":{},"108-6":{},"141-15":{},"144-4":{},"157-2":{},"157-5":{},"157-6":{}},"name":{"40":{},"42":{},"45":{},"53":{},"97":{},"99":{},"103":{},"148":{},"150":{},"153":{}},"text":{"3":{},"4":{},"7":{},"9":{},"22":{},"23":{},"27":{},"35":{},"37":{},"40":{},"42":{},"45":{},"51":{},"52":{},"53":{},"58":{},"59":{},"67":{},"69":{},"71":{},"72":{},"74":{},"76":{},"82":{},"83":{},"92":{},"94":{},"97":{},"99":{},"102":{},"103":{},"108":{},"110":{},"114":{},"115":{},"121":{},"123":{},"125":{},"127":{},"128":{},"130":{},"136":{},"137":{},"144":{},"146":{},"148":{},"150":{},"152":{},"153":{},"154":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["router/rout",{"_index":4015,"title":{},"name":{},"text":{"159":{}},"component":{},"keyword":{}}],["routerspecif",{"_index":3161,"title":{"51-5":{},"92-5":{},"144-5":{}},"name":{},"text":{"51":{},"92":{},"144":{}},"component":{},"keyword":{}}],["routes.clj",{"_index":1412,"title":{},"name":{},"text":{"10":{},"73":{},"78":{},"132":{}},"component":{},"keyword":{}}],["routes/interceptor",{"_index":3587,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["routes/rout",{"_index":2120,"title":{},"name":{},"text":{"15":{},"51":{},"78":{},"132":{}},"component":{},"keyword":{}}],["routespecif",{"_index":3163,"title":{},"name":{},"text":{"51":{}},"component":{},"keyword":{}}],["routessourc",{"_index":2116,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["route’",{"_index":3283,"title":{},"name":{},"text":{"63":{},"118":{}},"component":{},"keyword":{}}],["routingfrag",{"_index":3164,"title":{},"name":{},"text":{"51":{}},"component":{},"keyword":{}}],["row",{"_index":1321,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["royal",{"_index":1689,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["rte",{"_index":3359,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["rubi",{"_index":1951,"title":{},"name":{},"text":{"13":{},"50":{},"76":{},"107":{},"130":{},"157":{}},"component":{},"keyword":{}}],["rudimentari",{"_index":1784,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["rule",{"_index":591,"title":{},"name":{},"text":{"3":{},"6":{},"13":{},"24":{},"41":{},"68":{},"77":{},"81":{},"84":{},"98":{},"122":{},"125":{},"131":{},"135":{},"138":{}},"component":{},"keyword":{}}],["rumplestiltskin",{"_index":1776,"title":{},"name":{},"text":{"11":{},"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["run",{"_index":223,"title":{"16-14":{},"16-18":{},"17-7":{},"20-8":{},"72-14":{},"78-9":{},"127-14":{},"132-9":{}},"name":{},"text":{"2":{},"5":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"28":{},"32":{},"37":{},"57":{},"65":{},"66":{},"69":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"90":{},"94":{},"100":{},"110":{},"113":{},"120":{},"121":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"142":{},"146":{},"151":{},"159":{},"161":{}},"component":{},"keyword":{}}],["run.sh",{"_index":2506,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["runner",{"_index":2156,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["runner.api/test",{"_index":2167,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["running[1",{"_index":3598,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["runtim",{"_index":808,"title":{},"name":{},"text":{"5":{},"13":{},"26":{},"28":{},"32":{},"37":{},"41":{},"43":{},"51":{},"76":{},"81":{},"86":{},"90":{},"98":{},"101":{},"130":{},"135":{},"142":{}},"component":{},"keyword":{}}],["runtime.feature.alpn=tru",{"_index":2545,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}
1],["rust",{"_index":2628,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["s",{"_index":1736,"title":{},"name":{},"text":{"11":{},"15":{},"16":{},"17":{},"19":{},"32":{},"61":{},"72":{},"79":{},"80":{},"90":{},"117":{},"127":{},"133":{},"134":{},"142":{},"165":{}},"component":{},"keyword":{}}],["s3",{"_index":3244,"title":{},"name":{},"text":{"57":{},"113":{},"161":{}},"component":{},"keyword":{}}],["sacramento",{"_index":1001,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["sacrif",{"_index":578,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["safe",{"_index":3130,"title":{},"name":{},"text":{"47":{},"110":{},"159":{}},"component":{},"keyword":{}}],["safeguard",{"_index":1036,"title":{},"name":{},"text":{"6":{},"29":{},"68":{},"122":{}},"component":{},"keyword":{}}],["safeti",{"_index":913,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["sake",{"_index":3323,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["same",{"_index":1079,"title":{},"name":{},"text":{"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"21":{},"22":{},"23":{},"24":{},"32":{},"37":{},"39":{},"43":{},"49":{},"50":{},"52":{},"53":{},"62":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"77":{},"81":{},"82":{},"83":{},"84":{},"90":{},"94":{},"96":{},"105":{},"107":{},"108":{},"110":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"135":{},"136":{},"137":{},"138":{},"142":{},"146":{},"155":{},"157":{},"159":{}},"component":{},"keyword":{}}],["sampl",{"_index":2332,"title":{},"name":{},"text":{"18":{},"21":{},"41":{},"79":{},"84":{},"98":{},"100":{},"125":{},"133":{},"138":{},"151":{}},"component":{},"keyword":{}}],["sat",{"_index":1876,"title":{},"name":{},"text":{"12":{},"77":{},"131":{}},"component":{},"keyword":{}}],["satisfi",{"_index":2919,"title":{},"name":{},"text":{"35":{},"41":{},"58":{},"59":{},"92":{},"98":{},"108":{},"110":{},"114":{},"115":{},"144":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["satisifi",{"_index":2898,"title":{},"name":{},"text":{"32":{},"90":{}},"component":{},"keyword":{}}],["save",{"_index":2759,"title":{},"name":{},"text":{"23":{},"76":{},"83":{},"130":{},"137":{}},"component":{},"keyword":{}}],["saw",{"_index":688,"title":{},"name":{},"text":{"4":{},"15":{},"23":{},"67":{},"72":{},"83":{},"127":{},"137":{}},"component":{},"keyword":{}}],["sawtooth",{"_index":362,"title":{"53":{},"3-8":{}},"name":{"53":{}},"text":{"3":{},"9":{},"27":{},"51":{},"52":{},"53":{}},"component":{},"keyword":{}}],["sawtooth’",{"_index":3199,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["say",{"_index":2651,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["scaffold",{"_index":1372,"title":{},"name":{},"text":{"10":{},"27":{},"30":{},"73":{}},"component":{},"keyword":{}}],["scal",{"_index":2290,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["scale",{"_index":767,"title":{},"name":{},"text":{"5":{},"16":{},"23":{},"66":{},"157":{}},"component":{},"keyword":{}}],["scan",{"_index":2974,"title":{},"name":{},"text":{"38":{},"41":{},"98":{}},"component":{},"keyword":{}}],["scan=\"tru",{"_index":3044,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["scanperiod=\"1",{"_index":3045,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["scatter",{"_index":2756,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["scenario",{"_index":2671,"title":{},"name":{},"text":{"22":{},"32":{},"82":{},"84":{},"90":{},"136":{},"138":{}},"component":{},"keyword":{}}],["schedul",{"_index":558,"title":{},"name":{},"text":{"3":{},"29":{},"52":{},"87":{},"108":{}},"component":{},"keyword":{}}],["schema",{"_index":3246,"title":{},"name":{},"text":{"58":{},"63":{},"118":{}},"component":{},"keyword":{}}],["scheme",{"_index":1665,"title":{},"name":{},"text":{"11":{},"12":{},"17":{},"19":{},"23":{},"46":{},"47":{},"52":{},"53":{},"58":{},"59":{},"63":{},"72":{},"74":{},"75":{},"79":{},"83":{},"104":{},"108":{},"110":{},"114":{},"115":{},"118":{},"127":{},"128":{},"129":{},"133":{},"137":{},"154":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["scheme://host:port",{"_index":3665,"title":{},"name":{},"text":{"79":{},"110":{},"133":{},"159":{}},"component":{},"keyword":{}}],["scope",{"_index":1,"title":{"1-2":{}},"name":{},"text":{"12":{},"18":{},"19":{},"21":{},"22":{},"43":{},"79":{},"82":{},"100":{},"101":{},"133":{},"136":{},"151":{}},"component":{},"keyword":{}}],["scout",{"_index":2523,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["scrape",{"_index":3869,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["scratch",{"_index":1924,"title":{"13-7":{},"76-7":{},"130-7":{}},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["script",{"_index":1477,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["search",{"_index":1305,"title":{"40":{},"97":{},"148":{}},"name":{"40":{},"97":{},"148":{}},"text":{"9":{},"26":{},"40":{},"47":{},"52":{},"53":{},"58":{},"59":{},"71":{},"86":{},"92":{},"97":{},"108":{},"110":{},"114":{},"115":{},"125":{},"144":{},"148":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["search?q=blog",{"_index":1283,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["season",{"_index":2774,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["sec",{"_index":971,"title":{},"name":{},"text":{"6":{},"64":{},"68":{},"122":{}},"component":{},"keyword":{}}],["second",{"_index":612,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"38":{},"41":{},"53":{},"64":{},"74":{},"75":{},"76":{},"79":{},"83":{},"98":{},"110":{},"128":{},"129":{},"130":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["secondari",{"_index":636,"title":{},"name":{},"text":{"4":{}},"component":{},"keyword":{}}],["secret",{"_index":2297,"title":{},"name":{},"text":{"17":{},"47":{}},"component":{},"keyword":{}}
1],["section",{"_index":684,"title":{},"name":{},"text":{"4":{},"6":{},"9":{},"18":{},"22":{},"23":{},"26":{},"67":{},"68":{},"71":{},"75":{},"79":{},"82":{},"83":{},"86":{},"122":{},"125":{},"129":{},"133":{},"136":{},"137":{}},"component":{},"keyword":{}}],["secur",{"_index":725,"title":{"5-3":{},"6-5":{},"30-9":{},"66-3":{},"68-5":{},"88-15":{},"110-5":{},"121-3":{},"122-5":{},"141-14":{},"159-3":{}},"name":{},"text":{"5":{},"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"20":{},"23":{},"24":{},"27":{},"30":{},"38":{},"66":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"95":{},"110":{},"121":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"147":{},"159":{}},"component":{},"keyword":{}}],["secureport",{"_index":2986,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["secureschem",{"_index":2987,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["see",{"_index":157,"title":{},"name":{},"text":{"2":{},"3":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"29":{},"30":{},"32":{},"35":{},"37":{},"41":{},"48":{},"49":{},"50":{},"65":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"82":{},"83":{},"84":{},"87":{},"88":{},"90":{},"92":{},"94":{},"98":{},"100":{},"105":{},"106":{},"107":{},"110":{},"120":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"133":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"144":{},"146":{},"151":{},"155":{},"159":{},"160":{}},"component":{},"keyword":{}}],["seed",{"_index":1560,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["seek",{"_index":1017,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["seem",{"_index":615,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"125":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["seen",{"_index":2212,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["segment",{"_index":1255,"title":{},"name":{},"text":{"9":{},"44":{},"58":{},"59":{},"71":{},"102":{},"114":{},"115":{},"125":{},"152":{},"162":{},"163":{}},"component":{},"keyword":{}}],["select",{"_index":600,"title":{},"name":{},"text":{"3":{},"10":{},"11":{},"24":{},"32":{},"39":{},"41":{},"64":{},"73":{},"90":{},"96":{},"98":{},"100":{},"108":{},"142":{},"151":{},"157":{}},"component":{},"keyword":{}}],["self",{"_index":391,"title":{},"name":{},"text":{"3":{},"17":{},"76":{},"130":{}},"component":{},"keyword":{}}],["sell",{"_index":915,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["semant",{"_index":2695,"title":{},"name":{},"text":{"23":{},"76":{},"83":{},"130":{},"137":{},"156":{}},"component":{},"keyword":{}}],["semicolon",{"_index":1954,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["send",{"_index":1117,"title":{},"name":{},"text":{"7":{},"10":{},"11":{},"12":{},"13":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"32":{},"43":{},"54":{},"64":{},"69":{},"73":{},"74":{},"75":{},"76":{},"79":{},"82":{},"83":{},"84":{},"90":{},"101":{},"109":{},"110":{},"119":{},"123":{},"128":{},"129":{},"130":{},"133":{},"136":{},"137":{},"138":{},"158":{},"159":{}},"component":{},"keyword":{}}],["senddatehead",{"_index":2981,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["sender",{"_index":2358,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["sendserververs",{"_index":2983,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["sendxpoweredbi",{"_index":2982,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["sens",{"_index":598,"title":{},"name":{},"text":{"3":{},"12":{},"19":{},"22":{},"58":{},"64":{},"75":{},"82":{},"129":{},"136":{}},"component":{},"keyword":{}}],["sensibl",{"_index":2274,"title":{},"name":{},"text":{"17":{},"72":{},"127":{}},"component":{},"keyword":{}}],["sensit",{"_index":1681,"title":{},"name":{},"text":{"11":{},"48":{},"74":{},"128":{}},"component":{},"keyword":{}}],["sent",{"_index":742,"title":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{},"18-5":{},"18-9":{},"79-10":{},"124-4":{},"133-10":{}},"name":{"54":{},"109":{},"158":{}},"text":{"5":{},"8":{},"10":{},"11":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"28":{},"29":{},"33":{},"43":{},"46":{},"48":{},"49":{},"54":{},"57":{},"64":{},"66":{},"70":{},"73":{},"74":{},"79":{},"82":{},"83":{},"87":{},"101":{},"104":{},"106":{},"109":{},"113":{},"121":{},"126":{},"128":{},"133":{},"136":{},"137":{},"140":{},"154":{},"156":{},"158":{},"160":{},"161":{}},"component":{},"keyword":{}}],["sentenc",{"_index":1891,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["sep",{"_index":364,"title":{"3-8":{}},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["separ",{"_index":1011,"title":{},"name":{},"text":{"6":{},"10":{},"12":{},"13":{},"16":{},"23":{},"44":{},"52":{},"54":{},"58":{},"59":{},"61":{},"68":{},"73":{},"75":{},"76":{},"77":{},"78":{},"80":{},"83":{},"102":{},"109":{},"114":{},"115":{},"117":{},"122":{},"129":{},"130":{},"132":{},"134":{},"137":{},"152":{},"158":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["seq",{"_index":974,"title":{},"name":{},"text":{"6":{},"32":{},"35":{},"51":{},"52":{},"58":{},"68":{},"72":{},"90":{},"92":{},"122":{},"127":{},"142":{},"144":{}},"component":{},"keyword":{}}],["sequenc",{"_index":1632,"title":{"24-2":{}},"name":{},"text":{"11":{},"12":{},"52":{},"53":{},"57":{},"59":{},"63":{},"92":{},"108":{},"110":{},"113":{},"115":{},"118":{},"125":{},"144":{},"157":{},"159":{},"161":{}},"component":{},"keyword":{}}],["seri",{"_index":625,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"24":{},"25":{},"26":{},"52":{},"74":{},"75":{},"76":{},"79":{},"84":{},"85":{},"86":{},"108":{},"128":{},"129":{},"130":{},"133":{},"138":{},"139":{},"157":{}},"component":{},"keyword":{}}],["serial",{"_index":2927,"title":{},"name":{},"text":{"35":{},"49":{},"92":{},"105":{},"144":{},"155":{}},"component":{},"keyword":{}}],["serv",{"_index":187,"title":{},"name":{},"text":{"2":{},"3":{},"9":{},"11":{},"17":{},"20":{},"54":{},"62":{},"65":{},"71":{},"72":{},"74":{},"79":{},"120":{},"121":{},"125":{},"127":{},"128":{},"133":{}},"component":{},"keyword":{}}
1],["server",{"_index":269,"title":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{},"18-5":{},"18-9":{},"72-6":{},"79-10":{},"110-6":{},"124-4":{},"127-6":{},"133-10":{}},"name":{"54":{},"109":{},"158":{}},"text":{"2":{},"5":{},"6":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"28":{},"29":{},"33":{},"34":{},"37":{},"38":{},"43":{},"46":{},"49":{},"52":{},"54":{},"61":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"84":{},"86":{},"87":{},"88":{},"91":{},"94":{},"95":{},"96":{},"100":{},"101":{},"104":{},"108":{},"109":{},"110":{},"112":{},"117":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"137":{},"138":{},"140":{},"141":{},"143":{},"146":{},"147":{},"151":{},"154":{},"157":{},"158":{},"159":{},"160":{},"165":{}},"component":{},"keyword":{}}],["server.clj",{"_index":3326,"title":{},"name":{},"text":{"72":{},"125":{},"127":{}},"component":{},"keyword":{}}],["server.p12",{"_index":2273,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["server/cr",{"_index":3365,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["server/servic",{"_index":3364,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["server/stop",{"_index":3333,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["server@1cc1ddad{started}[11.0.18,sto=0",{"_index":3417,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["server@3255707f[provider=null,keystore=file:///.../server.p12,truststore=nul",{"_index":2318,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["server@351bfccc{started}[9.4.52.v20230823",{"_index":3500,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["server@50091386{started}[9.4.52.v20230823",{"_index":3527,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["server@5770b59f{starting}[11.0.18,sto=0",{"_index":3488,"title":{},"name":{},"text":{"75":{}},"component":{},"keyword":{}}],["server@737935a4{started}[9.4.52.v20230823",{"_index":3977,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["server@b025f2f{started}[11.0.18,sto=0",{"_index":3763,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["server@b025f2f{starting}[11.0.18,sto=0",{"_index":3751,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["serverconnector@1432a683{http/1.1",{"_index":3750,"title":{},"name":{},"text":{"83":{}},"component":{},"keyword":{}}],["serverconnector@2796aeae{http/1.1",{"_index":2590,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["serverconnector@2d3b708a{http/1.1",{"_index":3486,"title":{},"name":{},"text":{"75":{}},"component":{},"keyword":{}}],["serverconnector@44ca5127{http/1.1",{"_index":3967,"title":{},"name":{},"text":{"137":{}},"component":{},"keyword":{}}],["serverconnector@49b7eb3{http/1.1,[http/1.1",{"_index":3624,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["serverconnector@4ab4f6d7{http/1.1",{"_index":3511,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["serverconnector@5dce3e{http/1.1",{"_index":3629,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["serverconnector@62832e24{http/1.1",{"_index":3518,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["serverconnector@70ab102c{http/1.1",{"_index":3619,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["serverconnector@8f340ff{http/1.1",{"_index":2313,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["serverconnector@b439e50{http/1.1",{"_index":3688,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["serverconnector@e01664e{ssl",{"_index":2319,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["servercontainer.addendpoint",{"_index":460,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["serverendpointconfig$build",{"_index":3914,"title":{},"name":{},"text":{"119":{}},"component":{},"keyword":{}}],["serverendpointconfig.build",{"_index":3298,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["server’",{"_index":2069,"title":{},"name":{},"text":{"14":{},"77":{},"100":{},"131":{},"151":{}},"component":{},"keyword":{}}],["servetcontainer.upgradehttptowebsocket",{"_index":467,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["servic",{"_index":251,"title":{"110":{},"159":{},"4-6":{},"4-7":{},"9-25":{},"10-4":{},"19-3":{},"20-4":{},"35-5":{},"61-2":{},"67-3":{},"67-4":{},"71-25":{},"73-4":{},"80-2":{},"110-1":{},"117-2":{},"124-5":{},"125-25":{},"134-2":{},"165-2":{}},"name":{"110":{},"159":{}},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"23":{},"25":{},"27":{},"28":{},"32":{},"37":{},"38":{},"39":{},"40":{},"42":{},"52":{},"54":{},"55":{},"57":{},"61":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"88":{},"90":{},"92":{},"94":{},"96":{},"97":{},"99":{},"100":{},"103":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"117":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"137":{},"138":{},"139":{},"141":{},"142":{},"144":{},"146":{},"148":{},"150":{},"151":{},"153":{},"157":{},"158":{},"159":{},"161":{},"165":{}},"component":{},"keyword":{}}],["service.clj",{"_index":3327,"title":{},"name":{},"text":{"72":{},"73":{},"79":{},"125":{},"127":{},"133":{}},"component":{},"keyword":{}}],["service/about",{"_index":3386,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["service/appl",{"_index":3667,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["service/hom",{"_index":3347,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["service/lein",{"_index":3938,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["service/rout",{"_index":3344,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["service/servic",{"_index":3366,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["service</param",{"_index":3727,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["service[5",{"_index":3460,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["service_test.clj",{"_index":3392,"title":{},"name":{},"text":{"73":{}},"component":{},"keyword":{}}],["service’",{"_index":1503,"title":{},"name":{},"text":{"10":{},"12":{},"57":{},"73":{},"75":{},"113":{},"125":{},"129":{},"161":{}},"component":{},"keyword":{}}],["servlet",{"_index":168,"title":{"55":{},"112":{},"160":{},"3-2":{},"24-4":{},"29-5":{},"35-7":{},"81-2":{},"87-4":{},"92-7":{},"135-2":{},"140-4":{},"144-7":{}},"name":{"55":{},"112":{},"160":{}},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"10":{},"20":{},"22":{},"24":{},"25":{},"28":{},"29":{},"32":{},"33":{},"35":{},"37":{},"39":{},"43":{},"46":{},"47":{},"49":{},"52":{},"55":{},"57":{},"61":{},"66":{},"69":{},"70":{},"72":{},"73":{},"74":{},"75":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"90":{},"94":{},"96":{},"101":{},"102":{},"105":{},"108":{},"110":{},"112":{},"113":{},"117":{},"123":{},"126":{},"127":{},"128":{},"129":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"146":{},"152":{},"155":{},"156":{},"157":{},"159":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["servlet/chain",{"_index":3362,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["servlet/cr",{"_index":2433,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["servlet</descript",{"_index":3717,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["servlet</display",{"_index":3720,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["servletcontexthandl",{"_index":2959,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}
1],["servletinputstream",{"_index":3115,"title":{},"name":{},"text":{"46":{},"104":{},"154":{}},"component":{},"keyword":{}}],["session",{"_index":1517,"title":{"30-5":{},"50-1":{},"88-8":{},"107-1":{},"141-7":{}},"name":{},"text":{"10":{},"12":{},"17":{},"20":{},"26":{},"27":{},"30":{},"38":{},"50":{},"64":{},"73":{},"75":{},"76":{},"88":{},"89":{},"107":{},"110":{},"119":{},"129":{},"130":{},"141":{},"159":{}},"component":{},"keyword":{}}],["sessioncaches",{"_index":4029,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["sessionstor",{"_index":3156,"title":{},"name":{},"text":{"50":{},"107":{}},"component":{},"keyword":{}}],["sessiontimeout",{"_index":4022,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["set",{"_index":81,"title":{"10-1":{},"18-7":{},"21-7":{},"23-6":{},"73-1":{},"83-6":{},"137-6":{}},"name":{},"text":{"1":{},"2":{},"6":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"35":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"45":{},"47":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"58":{},"61":{},"64":{},"66":{},"68":{},"69":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"84":{},"85":{},"87":{},"88":{},"89":{},"94":{},"95":{},"98":{},"104":{},"107":{},"108":{},"109":{},"110":{},"112":{},"114":{},"117":{},"119":{},"121":{},"122":{},"123":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"139":{},"140":{},"141":{},"146":{},"147":{},"154":{},"157":{},"158":{},"159":{},"160":{},"162":{},"164":{},"165":{}},"component":{},"keyword":{}}],["setattribut",{"_index":4042,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["settl",{"_index":1205,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["setup",{"_index":1100,"title":{"43-2":{},"101-2":{}},"name":{},"text":{"7":{},"10":{},"11":{},"13":{},"16":{},"17":{},"18":{},"19":{},"21":{},"22":{},"27":{},"28":{},"43":{},"64":{},"69":{},"72":{},"73":{},"78":{},"79":{},"82":{},"101":{},"123":{},"127":{},"132":{},"133":{},"136":{}},"component":{},"keyword":{}}],["set’",{"_index":3578,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["sever",{"_index":292,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"12":{},"13":{},"18":{},"23":{},"24":{},"35":{},"41":{},"44":{},"50":{},"52":{},"65":{},"69":{},"74":{},"75":{},"76":{},"83":{},"84":{},"86":{},"92":{},"94":{},"96":{},"98":{},"102":{},"107":{},"108":{},"120":{},"123":{},"128":{},"129":{},"130":{},"137":{},"138":{},"144":{},"152":{},"157":{}},"component":{},"keyword":{}}],["sex",{"_index":873,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["sexual",{"_index":53,"title":{},"name":{},"text":{"1":{},"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["sha256:5b54af80cb94b25da6b86f7e82fa6115eca301c11fedafae120275122ad74664",{"_index":2517,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["shadow",{"_index":1872,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["shallow",{"_index":3304,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["shape",{"_index":1906,"title":{},"name":{},"text":{"12":{},"75":{},"78":{},"129":{},"132":{}},"component":{},"keyword":{}}],["share",{"_index":787,"title":{"22-8":{},"82-8":{}
1,"110-3":{},"136-8":{},"159-1":{}},"name":{},"text":{"5":{},"6":{},"9":{},"10":{},"15":{},"21":{},"23":{},"24":{},"53":{},"64":{},"66":{},"68":{},"71":{},"73":{},"84":{},"122":{},"138":{}},"component":{},"keyword":{}}],["shebang",{"_index":1566,"title":{"11-13":{},"12-15":{},"13-13":{},"16-21":{},"18-12":{},"21-12":{},"23-17":{},"74-13":{},"75-13":{},"76-13":{},"78-11":{},"83-16":{},"128-13":{},"129-13":{},"130-13":{},"132-11":{},"137-16":{}},"name":{},"text":{"11":{},"13":{},"74":{},"76":{},"128":{},"130":{}},"component":{},"keyword":{}}],["shell",{"_index":1822,"title":{},"name":{},"text":{"12":{},"81":{},"135":{}},"component":{},"keyword":{}}],["shift",{"_index":2673,"title":{},"name":{},"text":{"22":{},"23":{},"82":{},"83":{},"136":{},"137":{}},"component":{},"keyword":{}}],["ship",{"_index":3336,"title":{},"name":{},"text":{"72":{},"125":{},"127":{}},"component":{},"keyword":{}}],["short",{"_index":1637,"title":{},"name":{},"text":{"11":{},"13":{},"18":{},"20":{},"37":{},"50":{},"62":{},"74":{},"76":{},"94":{},"107":{},"128":{},"130":{},"146":{}},"component":{},"keyword":{}}],["shortli",{"_index":1980,"title":{},"name":{},"text":{"13":{},"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["shoulder",{"_index":1981,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["show",{"_index":46,"title":{},"name":{},"text":{"1":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"22":{},"54":{},"71":{},"74":{},"76":{},"77":{},"82":{},"84":{},"109":{},"110":{},"125":{},"128":{},"130":{},"131":{},"136":{},"138":{},"158":{},"159":{}},"component":{},"keyword":{}}],["shown",{"_index":1306,"title":{},"name":{},"text":{"9":{},"12":{},"14":{},"16":{},"37":{},"71":{},"78":{},"81":{},"94":{},"125":{},"132":{},"135":{},"146":{}},"component":{},"keyword":{}}],["shut",{"_index":2224,"title":{},"name":{},"text":{"16":{},"64":{},"77":{},"131":{}},"component":{},"keyword":{}}],["side",{"_index":796,"title":{},"name":{},"text":{"5":{},"9":{},"11":{},"12":{},"13":{},"20":{},"21":{},"22":{},"23":{},"24":{},"62":{},"64":{},"66":{},"71":{},"74":{},"75":{},"76":{},"82":{},"83":{},"84":{},"119":{},"121":{},"125":{},"128":{},"129":{},"130":{},"136":{},"137":{},"138":{}},"component":{},"keyword":{}}],["sidequest",{"_index":1794,"title":{"12-12":{}},"name":{},"text":{},"component":{},"keyword":{}}],["sideway",{"_index":1732,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["sierra’",{"_index":3389,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["sign",{"_index":130,"title":{"2-11":{}},"name":{},"text":{"2":{},"65":{},"83":{},"120":{},"137":{}},"component":{},"keyword":{}}],["signatur",{"_index":3293,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["signific",{"_index":640,"title":{},"name":{},"text":{"4":{},"12":{},"22":{},"51":{},"75":{},"82":{},"129":{},"136":{}},"component":{},"keyword":{}}],["silent",{"_index":3201,"title":{},"name":{},"text":{"53":{},"64":{}},"component":{},"keyword":{}}],["similar",{"_index":1108,"title":{},"name":{},"text":{"7":{},"11":{},"13":{},"19":{},"53":{},"69":{},"74":{},"76":{},"123":{},"125":{},"128":{},"130":{}},"component":{},"keyword":{}}],["similarli",{"_index":2275,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["simpl",{"_index":286,"title":{"17-6":{},"18-8":{},"21-8":{},"78-7":{},"132-7":{}},"name":{},"text":{"2":{},"5":{},"7":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"39":{},"41":{},"61":{},"65":{},"66":{},"69":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"96":{},"98":{},"117":{},"120":{},"121":{},"123":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"165":{}},"component":{},"keyword":{}}],["simpler",{"_index":432,"title":{},"name":{},"text":{"3":{},"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["simplest",{"_index":1238,"title":{},"name":{},"text":{"9":{},"12":{},"13":{},"40":{},"71":{},"75":{},"76":{},"97":{},"125":{},"129":{},"130":{},"148":{}},"component":{},"keyword":{}}],["simpli",{"_index":323,"title":{},"name":{},"text":{"2":{},"9":{},"14":{},"19":{},"22":{},"41":{},"50":{},"51":{},"65":{},"71":{},"72":{},"82":{},"98":{},"100":{},"107":{},"110":{},"120":{},"127":{},"136":{},"151":{},"159":{}},"component":{},"keyword":{}}],["simplic",{"_index":747,"title":{},"name":{},"text":{"5":{},"23":{},"66":{},"83":{},"137":{},"157":{}},"component":{},"keyword":{}}],["simplifi",{"_index":2035,"title":{},"name":{},"text":{"13":{},"20":{},"72":{},"76":{},"77":{},"79":{},"127":{},"130":{},"133":{}},"component":{},"keyword":{}}],["simul",{"_index":3268,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["simulatan",{"_index":2737,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["simultan",{"_index":3816,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["singl",{"_index":179,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"8":{},"9":{},"12":{},"13":{},"16":{},"18":{},"19":{},"22":{},"23":{},"24":{},"35":{},"37":{},"47":{},"51":{},"52":{},"54":{},"57":{},"63":{},"64":{},"66":{},"68":{},"70":{},"71":{},"72":{},"73":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"84":{},"92":{},"94":{},"108":{},"109":{},"113":{},"118":{},"119":{},"122":{},"124":{},"125":{},"126":{},"127":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"138":{},"144":{},"146":{},"158":{},"161":{}},"component":{},"keyword":{}}],["singularli",{"_index":1999,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["site",{"_index":737,"title":{"110-4":{},"159-2":{}},"name":{},"text":{"5":{},"6":{},"27":{},"66":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["situat",{"_index":2655,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["six",{"_index":1895,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["size",{"_index":2935,"title":{},"name":{},"text":{"37":{},"38":{},"43":{},"47":{},"64":{},"94":{},"101":{},"143":{},"146":{}},"component":{},"keyword":{}}],["sketch",{"_index":2670,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["skewer",{"_index":1946,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["skill",{"_index":1793,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["skimp",{"_index":2434,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["skip",{"_index":227,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"18":{},"65":{},"74":{},"75":{},"76":{},"79":{},"88":{},"120":{},"128":{},"129":{},"130":{},"133":{},"141":{}},"component":{},"keyword":{}}],["sla",{"_index":2073,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["slack",{"_index":1598,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["slap",{"_index":1881,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["slash",{"_index":1380,"title":{},"name":{},"text":{"10":{},"19":{},"23":{},"47":{},"52":{},"58":{},"59":{},"63":{},"73":{},"83":{},"108":{},"114":{},"115":{},"118":{},"137":{},"162":{},"163":{}},"component":{},"keyword":{}}],["slate",{"_index":554,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["sleep",{"_index":2694,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["sleev",{"_index":2815,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["slf4j",{"_index":1129,"title":{"41-1":{},"41-10":{},"98-1":{},"98-9":{}},"name":{},"text":{"7":{},"20":{},"41":{},"69":{},"79":{},"98":{},"123":{},"133":{}},"component":{},"keyword":{}}],["slf4j.version=2.0.17",{"_index":2546,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["slf4j’",{"_index":3035,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["sli",{"_index":2724,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["slice",{"_index":1849,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["slightli",{"_index":1541,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"19":{},"51":{},"74":{},"75":{},"81":{},"125":{},"128":{},"129":{},"135":{}},"component":{},"keyword":{}}],["slow",{"_index":2053,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["slowest",{"_index":3002,"title":{},"name":{},"text":{"40":{},"97":{},"148":{}},"component":{},"keyword":{}}],["small",{"_index":388,"title":{},"name":{},"text":{"3":{},"5":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"24":{},"33":{},"43":{},"66":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"92":{},"101":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"144":{}},"component":{},"keyword":{}}],["smaller",{"_index":433,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["smallest",{"_index":2604,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["smart",{"_index":1574,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["smarter",{"_index":1800,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["smuggl",{"_index":1350,"title":{"62":{},"71-24":{},"125-24":{}},"name":{"62":{}},"text":{"9":{},"44":{},"46":{},"58":{},"62":{},"102":{},"104":{},"152":{},"154":{}},"component":{},"keyword":{}}],["snag",{"_index":2028,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["snap",{"_index":2712,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["snapshot",{"_index":272,"title":{},"name":{},"text":{"2":{},"20":{},"23":{},"65":{},"83":{},"120":{},"124":{},"137":{}},"component":{},"keyword":{}}],["snapshot.jar",{"_index":1557,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["sni",{"_index":2289,"title":{},"name":{},"text":{"17":{},"38":{}},"component":{},"keyword":{}}],["snippet",{"_index":2140,"title":{},"name":{},"text":{"16":{},"20":{}},"component":{},"keyword":{}}
1],["socket",{"_index":2632,"title":{},"name":{},"text":{"21":{},"24":{},"37":{},"38":{},"62":{},"64":{},"72":{},"76":{},"84":{},"94":{},"95":{},"119":{},"127":{},"130":{},"138":{},"146":{},"147":{}},"component":{},"keyword":{}}],["socket.addeventlistener(\"clos",{"_index":2638,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["socket.addeventlistener(\"messag",{"_index":2636,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["socket.addeventlistener(\"open",{"_index":2634,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["socket.send(\"hello",{"_index":2635,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["solut",{"_index":550,"title":{},"name":{},"text":{"3":{},"43":{},"77":{},"88":{},"101":{},"131":{},"141":{}},"component":{},"keyword":{}}],["solv",{"_index":2037,"title":{},"name":{},"text":{"14":{},"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["someon",{"_index":2773,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["someth",{"_index":200,"title":{},"name":{},"text":{"2":{},"5":{},"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"19":{},"23":{},"24":{},"26":{},"32":{},"61":{},"65":{},"66":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"80":{},"83":{},"84":{},"90":{},"117":{},"120":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"134":{},"137":{},"138":{},"142":{},"159":{},"165":{}},"component":{},"keyword":{}}],["sometim",{"_index":1921,"title":{},"name":{},"text":{"12":{},"13":{},"23":{},"75":{},"76":{},"83":{},"84":{},"129":{},"130":{},"137":{},"138":{}},"component":{},"keyword":{}}],["somewhat",{"_index":1162,"title":{},"name":{},"text":{"8":{},"10":{},"13":{},"23":{},"33":{},"41":{},"44":{},"52":{},"70":{},"73":{},"78":{},"83":{},"98":{},"100":{},"102":{},"108":{},"126":{},"132":{},"137":{},"151":{},"152":{}},"component":{},"keyword":{}}],["somewher",{"_index":2753,"title":{},"name":{},"text":{"23":{},"77":{},"83":{},"131":{},"137":{}},"component":{},"keyword":{}}],["soon",{"_index":1635,"title":{},"name":{},"text":{"11":{},"13":{},"72":{},"74":{},"76":{},"127":{},"128":{},"130":{}},"component":{},"keyword":{}}],["sorri",{"_index":2249,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["sort",{"_index":1581,"title":{},"name":{},"text":{"11":{},"20":{},"23":{},"24":{},"61":{},"80":{},"83":{},"84":{},"117":{},"134":{},"137":{},"138":{},"165":{}},"component":{},"keyword":{}}],["sound",{"_index":2800,"title":{},"name":{},"text":{"24":{}},"component":{},"keyword":{}}],["sourc",{"_index":328,"title":{"26-11":{},"26-13":{}},"name":{},"text":{"2":{},"6":{},"7":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"26":{},"41":{},"43":{},"65":{},"68":{},"69":{},"73":{},"74":{},"75":{},"76":{},"78":{},"81":{},"83":{},"86":{},"98":{},"101":{},"120":{},"122":{},"123":{},"125":{},"128":{},"129":{},"130":{},"132":{},"135":{},"137":{}},"component":{},"keyword":{}}],["source(",{"_index":3663,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["spa",{"_index":2797,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["space",{"_index":84,"title":{},"name":{},"text":{"1":{},"8":{},"12":{},"44":{},"45":{},"52":{},"70":{},"102":{},"103":{},"108":{},"121":{},"124":{},"126":{},"152":{},"153":{},"157":{}},"component":{},"keyword":{}}],["span",{"_index":3429,"title":{},"name":{},"text":{"73":{},"79":{},"133":{}},"component":{},"keyword":{}}],["span#count",{"_index":3707,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["spath",{"_index":2030,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["speak",{"_index":2936,"title":{},"name":{},"text":{"37":{},"53":{},"76":{},"94":{},"130":{},"146":{}},"component":{},"keyword":{}}],["spec",{"_index":2972,"title":{"56":{},"111":{},"110-7":{}},"name":{"56":{},"111":{}},"text":{"38":{},"46":{},"56":{},"58":{},"59":{},"74":{},"92":{},"110":{},"111":{},"114":{},"115":{},"128":{},"144":{}},"component":{},"keyword":{}}],["specfic",{"_index":2944,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["special",{"_index":887,"title":{"41-5":{},"98-5":{}},"name":{},"text":{"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"19":{},"20":{},"21":{},"22":{},"24":{},"29":{},"37":{},"41":{},"44":{},"61":{},"64":{},"68":{},"71":{},"73":{},"74":{},"76":{},"80":{},"81":{},"82":{},"84":{},"86":{},"87":{},"94":{},"98":{},"100":{},"102":{},"117":{},"122":{},"125":{},"128":{},"130":{},"134":{},"135":{},"136":{},"138":{},"140":{},"146":{},"151":{},"152":{},"160":{},"165":{}},"component":{},"keyword":{}}],["specic",{"_index":3850,"title":{},"name":{},"text":{"94":{}},"component":{},"keyword":{}}],["specif",{"_index":439,"title":{"9-23":{},"52-2":{},"52-3":{},"64-6":{},"71-23":{},"108-2":{},"108-3":{},"125-23":{},"157-2":{},"157-3":{}},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"32":{},"35":{},"37":{},"39":{},"41":{},"44":{},"46":{},"47":{},"50":{},"51":{},"52":{},"54":{},"56":{},"61":{},"62":{},"63":{},"64":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"92":{},"94":{},"98":{},"100":{},"102":{},"104":{},"107":{},"108":{},"110":{},"111":{},"117":{},"118":{},"119":{},"122":{},"123":{},"125":{},"126":{},"127":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"141":{},"144":{},"146":{},"151":{},"152":{},"154":{},"156":{},"157":{},"159":{},"165":{}},"component":{},"keyword":{}}],["specifi",{"_index":463,"title":{"58-9":{},"114-8":{},"162-8":{}},"name":{},"text":{"3":{},"9":{},"13":{},"14":{},"19":{},"23":{},"24":{},"26":{},"29":{},"32":{},"38":{},"41":{},"43":{},"58":{},"59":{},"61":{},"64":{},"71":{},"76":{},"77":{},"79":{},"80":{},"84":{},"86":{},"90":{},"95":{},"98":{},"100":{},"110":{},"114":{},"115":{},"117":{},"119":{},"125":{},"130":{},"131":{},"133":{},"134":{},"138":{},"143":{},"147":{},"151":{},"159":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["specification(",{"_index":3178,"title":{},"name":{},"text":{"52":{}},"component":{},"keyword":{}}],["speed",{"_index":1354,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["spell",{"_index":3175,"title":{},"name":{},"text":{"52":{},"75":{},"76":{},"108":{},"129":{},"130":{},"157":{}},"component":{},"keyword":{}}],["spend",{"_index":1139,"title":{},"name":{},"text":{"8":{},"11":{},"53":{},"70":{},"74":{},"126":{},"128":{}},"component":{},"keyword":{}}],["spi",{"_index":3004,"title":{"41-7":{},"98-6":{}},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["spin",{"_index":3267,"title":{},"name":{},"text":{"61":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["split",{"_index":436,"title":{},"name":{},"text":{"3":{},"11":{},"23":{},"39":{},"50":{},"74":{},"76":{},"83":{},"96":{},"107":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["spoken",{"_index":1900,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["spot",{"_index":3937,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["squar",{"_index":1974,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["src",{"_index":1409,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"110":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"137":{},"159":{}},"component":{},"keyword":{}}],["src/app/components/greeter.clj",{"_index":2089,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["src/app/components/handlers.clj",{"_index":2099,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["src/app/pedestal.clj",{"_index":2117,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["src/app/routes.clj",{"_index":2113,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["src/app/system.clj",{"_index":2122,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["src/hello.clj",{"_index":1679,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"component":{},"keyword":{}}],["src/hello_ssl.clj",{"_index":2280,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}
1],["src/main.clj",{"_index":2690,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["src/myapp",{"_index":3945,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["src/myapp/server.clj",{"_index":3733,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["src/myapp/service.clj",{"_index":3947,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["src/org/example/war/service.clj",{"_index":2430,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["src/pedestal.clj",{"_index":3595,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["src/routes.clj",{"_index":3604,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["src/server_sent_events/service.clj",{"_index":3652,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["src/sse_demo.clj",{"_index":2340,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["src/system.clj",{"_index":3607,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["src/system_test.clj",{"_index":3961,"title":{},"name":{},"text":{"132":{}},"component":{},"keyword":{}}],["src/websocket_demo.clj",{"_index":2615,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["sse",{"_index":1169,"title":{"19-12":{},"54-1":{},"109-1":{},"158-1":{}},"name":{"18":{},"79":{},"133":{}},"text":{"8":{},"18":{},"21":{},"54":{},"70":{},"79":{},"109":{},"126":{},"133":{},"158":{}},"component":{},"keyword":{}}],["sse/start",{"_index":2355,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"133":{}},"component":{},"keyword":{}}],["ssl",{"_index":1988,"title":{"17":{},"164-2":{}},"name":{"17":{}},"text":{"13":{},"17":{},"38":{},"46":{},"79":{},"95":{},"104":{},"133":{},"143":{},"147":{},"154":{},"164":{}},"component":{},"keyword":{}}],["ssl/start",{"_index":2277,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["ssl/tl",{"_index":2259,"title":{},"name":{},"text":{"17":{},"38":{}},"component":{},"keyword":{}}],["sslcontextfactori",{"_index":2968,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["sslimplementationnam",{"_index":4027,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["stab",{"_index":1720,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["stabl",{"_index":1707,"title":{},"name":{},"text":{"11":{},"13":{},"23":{},"61":{},"74":{},"76":{},"80":{},"83":{},"117":{},"128":{},"130":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["stack",{"_index":525,"title":{"22-5":{},"82-5":{},"88-2":{},"136-5":{},"141-2":{},"160-1":{}},"name":{},"text":{"3":{},"4":{},"5":{},"11":{},"19":{},"22":{},"24":{},"29":{},"32":{},"37":{},"66":{},"67":{},"72":{},"74":{},"82":{},"84":{},"87":{},"88":{},"90":{},"94":{},"125":{},"127":{},"128":{},"136":{},"138":{},"140":{},"141":{},"142":{},"146":{},"160":{}},"component":{},"keyword":{}}],["stage",{"_index":1442,"title":{},"name":{},"text":{"10":{},"14":{},"23":{},"26":{},"29":{},"32":{},"52":{},"72":{},"73":{},"77":{},"83":{},"86":{},"87":{},"90":{},"100":{},"108":{},"127":{},"131":{},"137":{},"140":{},"142":{},"151":{}},"component":{},"keyword":{}}],["stamp",{"_index":3863,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["stand",{"_index":2734,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["standalon",{"_index":776,"title":{},"name":{},"text":{"5":{},"28":{},"66":{}},"component":{},"keyword":{}}],["standard",{"_index":0,"title":{"1-1":{}},"name":{},"text":{"2":{},"4":{},"7":{},"16":{},"18":{},"20":{},"21":{},"48":{},"50":{},"53":{},"65":{},"67":{},"69":{},"81":{},"100":{},"106":{},"107":{},"120":{},"123":{},"135":{},"151":{},"156":{}},"component":{},"keyword":{}}],["start",{"_index":205,"title":{"10-4":{},"13-7":{},"14-1":{},"18-8":{},"21-8":{},"72-6":{},"73-4":{},"76-7":{},"77-1":{},"127-6":{},"130-7":{},"131-1":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"32":{},"35":{},"37":{},"38":{},"44":{},"47":{},"52":{},"53":{},"54":{},"57":{},"58":{},"59":{},"63":{},"64":{},"65":{},"66":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"89":{},"90":{},"94":{},"102":{},"108":{},"109":{},"110":{},"113":{},"114":{},"115":{},"118":{},"119":{},"120":{},"121":{},"123":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"142":{},"146":{},"152":{},"157":{},"158":{},"159":{},"161":{},"162":{},"163":{}},"component":{},"keyword":{}}],["start/stop",{"_index":3601,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["startup",{"_index":563,"title":{},"name":{},"text":{"3":{},"10":{},"14":{},"16":{},"43":{},"53":{},"73":{},"77":{},"89":{},"100":{},"101":{},"131":{},"151":{}},"component":{},"keyword":{}}],["stat",{"_index":3255,"title":{},"name":{},"text":{"58":{},"114":{},"162":{}},"component":{},"keyword":{}}],["state",{"_index":506,"title":{},"name":{},"text":{"3":{},"6":{},"11":{},"14":{},"16":{},"21":{},"23":{},"41":{},"68":{},"72":{},"74":{},"75":{},"77":{},"78":{},"83":{},"98":{},"122":{},"127":{},"128":{},"129":{},"131":{},"132":{},"137":{}},"component":{},"keyword":{}}],["statement",{"_index":1758,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["static",{"_index":401,"title":{},"name":{},"text":{"3":{},"5":{},"9":{},"10":{},"16":{},"20":{},"23":{},"42":{},"47":{},"53":{},"66":{},"71":{},"78":{},"83":{},"99":{},"121":{},"125":{},"132":{},"137":{},"150":{},"157":{}},"component":{},"keyword":{}}],["statu",{"_index":758,"title":{},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"32":{},"37":{},"48":{},"52":{},"57":{},"61":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"84":{},"90":{},"106":{},"113":{},"117":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"142":{},"156":{},"160":{},"161":{},"165":{}},"component":{},"keyword":{}}],["status",{"_index":2973,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["statut",{"_index":1021,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["stay",{"_index":2334,"title":{},"name":{},"text":{"18":{},"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["steam",{"_index":3910,"title":{},"name":{},"text":{"113":{}},"component":{},"keyword":{}}],["step",{"_index":155,"title":{"72-15":{},"81-1":{},"81-2":{},"81-3":{},"81-4":{},"81-5":{},"127-15":{},"135-1":{},"135-2":{},"135-3":{},"135-4":{},"135-5":{}},"name":{},"text":{"2":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"59":{},"65":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"92":{},"115":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{},"144":{}},"component":{},"keyword":{}}],["stick",{"_index":3936,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["still",{"_index":468,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"12":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"23":{},"29":{},"52":{},"71":{},"72":{},"75":{},"76":{},"77":{},"78":{},"83":{},"87":{},"108":{},"121":{},"124":{},"125":{},"127":{},"129":{},"130":{},"131":{},"132":{},"137":{},"140":{}},"component":{},"keyword":{}}],["stimuli",{"_index":2816,"title":{},"name":{},"text":{"25":{},"85":{},"139":{}},"component":{},"keyword":{}}],["stock",{"_index":3992,"title":{},"name":{},"text":{"146":{}},"component":{},"keyword":{}}],["stop",{"_index":1127,"title":{"72-6":{},"127-6":{}},"name":{},"text":{"7":{},"8":{},"10":{},"11":{},"12":{},"14":{},"15":{},"16":{},"18":{},"20":{},"21":{},"23":{},"35":{},"69":{},"70":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"83":{},"110":{},"123":{},"126":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["storag",{"_index":2729,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["store",{"_index":931,"title":{},"name":{},"text":{"6":{},"7":{},"9":{},"11":{},"12":{},"14":{},"16":{},"17":{},"19":{},"22":{},"23":{},"24":{},"26":{},"29":{},"31":{},"38":{},"41":{},"44":{},"46":{},"47":{},"50":{},"51":{},"57":{},"68":{},"69":{},"71":{},"77":{},"78":{},"82":{},"83":{},"84":{},"86":{},"87":{},"89":{},"95":{},"98":{},"100":{},"102":{},"104":{},"107":{},"110":{},"113":{},"122":{},"123":{},"125":{},"131":{},"132":{},"136":{},"137":{},"138":{},"147":{},"151":{},"152":{},"154":{},"159":{},"161":{}},"component":{},"keyword":{}}],["stori",{"_index":1888,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["str",{"_index":1722,"title":{},"name":{},"text":{"11":{},"12":{},"17":{},"21":{},"23":{},"26":{},"29":{},"41":{},"54":{},"72":{},"74":{},"75":{},"83":{},"86":{},"87":{},"98":{},"127":{},"128":{},"129":{},"137":{},"140":{}},"component":{},"keyword":{}}],["straight",{"_index":224,"title":{},"name":{},"text":{"2":{},"10":{},"11":{},"23":{},"41":{},"65":{},"73":{},"74":{},"76":{},"83":{},"98":{},"120":{},"128":{},"129":{},"130":{},"137":{},"157":{}},"component":{},"keyword":{}}],["straighten",{"_index":3162,"title":{},"name":{},"text":{"51":{}},"component":{},"keyword":{}}],["strang",{"_index":1879,"title":{},"name":{},"text":{"12":{},"13":{},"14":{},"76":{},"77":{},"130":{},"131":{}},"component":{},"keyword":{}}],["strategi",{"_index":3165,"title":{},"name":{},"text":{"51":{},"52":{},"92":{},"108":{},"144":{},"157":{}},"component":{},"keyword":{}}],["stream",{"_index":376,"title":{"57":{},"113":{},"161":{},"5-6":{},"66-6":{},"121-4":{}},"name":{"57":{},"113":{},"161":{}},"text":{"3":{},"4":{},"8":{},"11":{},"13":{},"18":{},"19":{},"21":{},"24":{},"33":{},"35":{},"38":{},"43":{},"46":{},"49":{},"50":{},"54":{},"55":{},"57":{},"64":{},"70":{},"74":{},"79":{},"84":{},"92":{},"100":{},"101":{},"104":{},"105":{},"107":{},"109":{},"112":{},"113":{},"126":{},"128":{},"133":{},"138":{},"144":{},"151":{},"154":{},"155":{},"158":{},"161":{}},"component":{},"keyword":{}}],["streamlin",{"_index":2104,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["street",{"_index":1066,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["strict",{"_index":1471,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["strictli",{"_index":2293,"title":{},"name":{},"text":{"17":{},"84":{},"110":{},"138":{},"159":{}},"component":{},"keyword":{}}],["string",{"_index":1216,"title":{"41-2":{},"58-7":{},"59-6":{},"98-2":{},"114-6":{},"115-6":{},"162-6":{},"163-6":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"19":{},"23":{},"26":{},"27":{},"30":{},"38":{},"41":{},"43":{},"44":{},"46":{},"48":{},"49":{},"50":{},"52":{},"53":{},"54":{},"57":{},"58":{},"59":{},"61":{},"63":{},"64":{},"71":{},"72":{},"74":{},"75":{},"76":{},"79":{},"80":{},"83":{},"86":{},"95":{},"98":{},"100":{},"102":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"113":{},"114":{},"115":{},"117":{},"118":{},"119":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"133":{},"134":{},"137":{},"143":{},"147":{},"151":{},"152":{},"154":{},"155":{},"156":{},"158":{},"159":{},"161":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["string(",{"_index":3662,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["string/trim",{"_index":2231,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["stringifi",{"_index":3272,"title":{},"name":{},"text":{"61":{},"75":{},"80":{},"117":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["strip",{"_index":3871,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["structur",{"_index":1559,"title":{"20-2":{}},"name":{},"text":{"10":{},"11":{},"12":{},"14":{},"15":{},"16":{},"20":{},"23":{},"24":{},"29":{},"32":{},"35":{},"51":{},"52":{},"56":{},"59":{},"72":{},"73":{},"74":{},"75":{},"77":{},"83":{},"84":{},"87":{},"90":{},"92":{},"108":{},"111":{},"115":{},"127":{},"128":{},"129":{},"131":{},"137":{},"138":{},"140":{},"142":{},"144":{},"157":{}},"component":{},"keyword":{}}],["stuart",{"_index":1885,"title":{},"name":{},"text":{"12":{},"72":{},"127":{}},"component":{},"keyword":{}}],["stuck",{"_index":1192,"title":{"9-4":{},"11-4":{},"12-4":{},"13-4":{},"16-3":{},"17-2":{},"18-4":{},"21-4":{},"23-4":{},"71-4":{},"72-4":{},"74-4":{},"75-4":{},"76-4":{},"78-3":{},"79-4":{},"83-4":{},"125-4":{},"127-4":{},"128-4":{},"129-4":{},"130-4":{},"132-3":{},"133-4":{},"137-4":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{}},"component":{},"keyword":{}}],["studi",{"_index":3588,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["stuff",{"_index":242,"title":{"124-2":{}},"name":{},"text":{"2":{},"9":{},"13":{},"65":{},"71":{},"76":{},"120":{},"125":{},"130":{}},"component":{},"keyword":{}}],["sturdi",{"_index":732,"title":{},"name":{},"text":{"5":{}},"component":{},"keyword":{}}],["style",{"_index":426,"title":{"11-12":{},"74-12":{},"128-12":{}},"name":{},"text":{"3":{},"9":{},"11":{},"13":{},"19":{},"20":{},"23":{},"24":{},"61":{},"71":{},"74":{},"76":{},"80":{},"83":{},"84":{},"117":{},"125":{},"128":{},"130":{},"134":{},"137":{},"138":{},"165":{}},"component":{},"keyword":{}}],["stylob",{"_index":2911,"title":{},"name":{},"text":{"32":{},"55":{},"90":{},"112":{},"142":{}},"component":{},"keyword":{}}],["sub",{"_index":2464,"title":{},"name":{},"text":{"20":{},"26":{},"47":{},"59":{},"86":{},"96":{},"115":{},"119":{}},"component":{},"keyword":{}}],["subdirectori",{"_index":1384,"title":{},"name":{},"text":{"10":{},"39":{},"73":{}},"component":{},"keyword":{}}],["subdivid",{"_index":3208,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["subject",{"_index":1038,"title":{},"name":{},"text":{"6":{},"16":{},"29":{},"57":{},"68":{},"87":{},"113":{},"122":{},"140":{},"161":{}},"component":{},"keyword":{}}],["submiss",{"_index":891,"title":{},"name":{},"text":{"6":{},"19":{},"50":{},"62":{},"68":{},"107":{},"122":{}},"component":{},"keyword":{}}],["submit",{"_index":230,"title":{},"name":{},"text":{"2":{},"6":{},"9":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"65":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"83":{},"110":{},"120":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["subpag",{"_index":1279,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["subproject",{"_index":134,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}
1],["subprotocol",{"_index":2641,"title":{},"name":{},"text":{"21":{},"64":{},"119":{}},"component":{},"keyword":{}}],["subsequ",{"_index":1029,"title":{},"name":{},"text":{"6":{},"13":{},"21":{},"22":{},"61":{},"68":{},"80":{},"82":{},"117":{},"122":{},"134":{},"136":{},"165":{}},"component":{},"keyword":{}}],["subset",{"_index":2144,"title":{},"name":{},"text":{"16":{},"22":{},"47":{},"53":{},"82":{},"110":{},"136":{}},"component":{},"keyword":{}}],["subsidiari",{"_index":920,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["substitut",{"_index":3105,"title":{},"name":{},"text":{"44":{},"76":{},"102":{},"130":{},"152":{}},"component":{},"keyword":{}}],["subsystem",{"_index":1594,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"26":{},"74":{},"75":{},"76":{},"83":{},"86":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["subtl",{"_index":3541,"title":{},"name":{},"text":{"75":{},"129":{}},"component":{},"keyword":{}}],["subtre",{"_index":1224,"title":{},"name":{},"text":{"9":{},"71":{},"125":{},"157":{}},"component":{},"keyword":{}}],["subvert",{"_index":3143,"title":{},"name":{},"text":{"48":{},"106":{}},"component":{},"keyword":{}}],["succe",{"_index":2777,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["succeed",{"_index":1596,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"83":{},"128":{},"129":{},"130":{},"137":{}},"component":{},"keyword":{}}],["success",{"_index":1996,"title":{},"name":{},"text":{"13":{},"14":{},"16":{},"22":{},"23":{},"46":{},"51":{},"52":{},"64":{},"75":{},"76":{},"77":{},"82":{},"83":{},"108":{},"129":{},"130":{},"131":{},"136":{},"137":{},"157":{}},"component":{},"keyword":{}}],["succinctli",{"_index":1973,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["such",{"_index":70,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"31":{},"32":{},"35":{},"37":{},"39":{},"41":{},"43":{},"47":{},"48":{},"50":{},"52":{},"57":{},"62":{},"64":{},"65":{},"68":{},"69":{},"70":{},"71":{},"74":{},"76":{},"77":{},"79":{},"81":{},"82":{},"83":{},"84":{},"85":{},"90":{},"92":{},"94":{},"96":{},"98":{},"100":{},"101":{},"104":{},"106":{},"107":{},"110":{},"119":{},"120":{},"122":{},"123":{},"125":{},"126":{},"128":{},"130":{},"131":{},"133":{},"135":{},"136":{},"137":{},"138":{},"139":{},"142":{},"144":{},"146":{},"151":{},"154":{},"156":{},"157":{},"159":{}},"component":{},"keyword":{}}],["suffici",{"_index":284,"title":{},"name":{},"text":{"2":{},"3":{},"38":{},"49":{},"65":{},"120":{}},"component":{},"keyword":{}}],["suffix",{"_index":1767,"title":{},"name":{},"text":{"11":{},"16":{}},"component":{},"keyword":{}}],["suit",{"_index":710,"title":{},"name":{},"text":{"4":{},"6":{},"23":{},"32":{},"67":{},"68":{},"76":{},"90":{},"122":{},"130":{},"142":{}},"component":{},"keyword":{}}],["suitabl",{"_index":1726,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["sum",{"_index":2374,"title":{},"name":{},"text":{"19":{}},"component":{},"keyword":{}}],["summari",{"_index":2521,"title":{},"name":{},"text":{"20":{},"39":{},"96":{},"132":{}},"component":{},"keyword":{}}],["supervisori",{"_index":1051,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["supplement",{"_index":1024,"title":{},"name":{},"text":{"6":{},"27":{},"68":{},"122":{}},"component":{},"keyword":{}}],["suppli",{"_index":1298,"title":{},"name":{},"text":{"9":{},"11":{},"16":{},"23":{},"27":{},"32":{},"41":{},"43":{},"44":{},"57":{},"59":{},"71":{},"78":{},"83":{},"90":{},"92":{},"98":{},"100":{},"102":{},"108":{},"115":{},"125":{},"132":{},"137":{},"142":{},"144":{},"151":{},"152":{},"157":{}},"component":{},"keyword":{}}],["support",{"_index":377,"title":{"43-1":{},"101-1":{}},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"28":{},"30":{},"31":{},"32":{},"33":{},"34":{},"37":{},"38":{},"39":{},"41":{},"43":{},"46":{},"47":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"63":{},"64":{},"66":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"86":{},"89":{},"90":{},"91":{},"94":{},"95":{},"96":{},"98":{},"100":{},"101":{},"102":{},"104":{},"107":{},"108":{},"109":{},"110":{},"111":{},"113":{},"114":{},"116":{},"117":{},"119":{},"121":{},"123":{},"125":{},"126":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"142":{},"143":{},"146":{},"147":{},"151":{},"152":{},"154":{},"157":{},"158":{},"159":{},"161":{},"162":{},"164":{},"165":{}},"component":{},"keyword":{}}],["[email protected]",{"_index":944,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["suppos",{"_index":1319,"title":{},"name":{},"text":{"9":{},"71":{},"79":{},"125":{},"133":{}},"component":{},"keyword":{}}],["suppress",{"_index":630,"title":{"4-2":{}},"name":{},"text":{"4":{},"26":{}},"component":{},"keyword":{}}],["sure",{"_index":1189,"title":{},"name":{},"text":{"8":{},"9":{},"11":{},"12":{},"13":{},"16":{},"23":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"79":{},"81":{},"83":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"133":{},"135":{},"137":{}},"component":{},"keyword":{}}],["surpris",{"_index":1719,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["surviv",{"_index":2041,"title":{},"name":{},"text":{"14":{},"23":{},"77":{},"83":{},"131":{},"137":{}},"component":{},"keyword":{}}],["sut",{"_index":3635,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["swap",{"_index":812,"title":{},"name":{},"text":{"5":{},"15":{},"16":{},"23":{},"66":{},"77":{},"83":{},"121":{},"131":{},"137":{}},"component":{},"keyword":{}}],["switch",{"_index":667,"title":{},"name":{},"text":{"4":{},"21":{},"22":{},"26":{},"37":{},"82":{},"89":{},"94":{},"136":{},"146":{}},"component":{},"keyword":{}}],["switzerland",{"_index":1041,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["sym",{"_index":2227,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["symbol",{"_index":1242,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"22":{},"23":{},"26":{},"37":{},"41":{},"58":{},"59":{},"61":{},"63":{},"71":{},"74":{},"75":{},"76":{},"77":{},"80":{},"82":{},"83":{},"86":{},"94":{},"98":{},"100":{},"114":{},"115":{},"117":{},"118":{},"125":{},"128":{},"129":{},"130":{},"131":{},"134":{},"136":{},"137":{},"146":{},"151":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["symbol’",{"_index":1810,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["synchron",{"_index":801,"title":{"8-2":{},"70-2":{},"126-2":{}},"name":{},"text":{"5":{},"8":{},"32":{},"49":{},"61":{},"70":{},"90":{},"94":{},"105":{},"117":{},"126":{},"134":{},"142":{},"146":{},"155":{},"165":{}},"component":{},"keyword":{}}],["syntax",{"_index":1195,"title":{"58":{},"59":{},"63":{},"114":{},"115":{},"118":{},"162":{},"163":{},"166":{},"9-7":{},"58-4":{},"58-5":{},"58-9":{},"59-4":{},"71-7":{},"114-3":{},"114-4":{},"114-8":{},"115-4":{},"125-7":{},"162-3":{},"162-4":{},"162-8":{},"163-4":{}},"name":{"58":{},"59":{},"63":{},"114":{},"115":{},"118":{},"162":{},"163":{},"166":{}},"text":{"9":{},"11":{},"13":{},"35":{},"37":{},"52":{},"59":{},"63":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"92":{},"94":{},"108":{},"115":{},"118":{},"124":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"144":{},"146":{},"157":{},"163":{}},"component":{},"keyword":{}}],["system",{"_index":256,"title":{"15-5":{},"16-7":{},"16-17":{}},"name":{},"text":{"2":{},"3":{},"6":{},"7":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"26":{},"31":{},"41":{},"43":{},"47":{},"65":{},"68":{},"69":{},"72":{},"75":{},"76":{},"77":{},"78":{},"86":{},"89":{},"98":{},"100":{},"101":{},"110":{},"120":{},"122":{},"123":{},"127":{},"129":{},"130":{},"131":{},"132":{},"151":{},"159":{}},"component":{},"keyword":{}}],["system.clj",{"_index":3606,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}
1],["system/currenttimemilli",{"_index":2659,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["system/new",{"_index":3636,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["system_test.clj",{"_index":2215,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["system_test.clj:34",{"_index":2234,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["systemmap",{"_index":2171,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["t",{"_index":2510,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["t:build",{"_index":166,"title":{},"name":{},"text":{"2":{},"10":{},"20":{},"73":{}},"component":{},"keyword":{}}],["tabl",{"_index":532,"title":{"58":{},"114":{},"162":{},"47-3":{},"51-1":{},"51-3":{},"52-4":{},"58-2":{},"58-4":{},"108-4":{},"114-3":{},"157-4":{},"162-3":{}},"name":{"58":{},"114":{},"162":{}},"text":{"3":{},"7":{},"9":{},"10":{},"11":{},"13":{},"14":{},"16":{},"23":{},"35":{},"37":{},"38":{},"39":{},"41":{},"47":{},"51":{},"52":{},"53":{},"54":{},"58":{},"59":{},"63":{},"64":{},"69":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"83":{},"92":{},"94":{},"95":{},"96":{},"98":{},"108":{},"109":{},"110":{},"114":{},"115":{},"118":{},"119":{},"123":{},"124":{},"125":{},"127":{},"128":{},"130":{},"131":{},"137":{},"143":{},"144":{},"146":{},"147":{},"157":{},"158":{},"162":{},"163":{},"164":{}},"component":{},"keyword":{}}],["table/t",{"_index":1327,"title":{},"name":{},"text":{"9":{},"51":{},"58":{},"71":{},"114":{},"125":{},"162":{}},"component":{},"keyword":{}}],["tabular",{"_index":3605,"title":{},"name":{},"text":{"78":{},"79":{},"132":{},"133":{}},"component":{},"keyword":{}}],["tackl",{"_index":1771,"title":{},"name":{},"text":{"11":{},"13":{},"16":{},"74":{},"78":{},"128":{},"132":{}},"component":{},"keyword":{}}],["tag",{"_index":2513,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["tag::test2",{"_index":2242,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["tail",{"_index":1641,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["take",{"_index":927,"title":{},"name":{},"text":{"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"29":{},"37":{},"38":{},"41":{},"46":{},"47":{},"50":{},"51":{},"61":{},"68":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"87":{},"94":{},"95":{},"98":{},"104":{},"107":{},"108":{},"109":{},"110":{},"117":{},"122":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"136":{},"137":{},"138":{},"140":{},"146":{},"147":{},"154":{},"157":{},"158":{},"159":{},"165":{}},"component":{},"keyword":{}}],["takeaway",{"_index":1826,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["taken",{"_index":1345,"title":{},"name":{},"text":{"9":{},"44":{},"47":{},"102":{},"152":{}},"component":{},"keyword":{}}],["talk",{"_index":1796,"title":{},"name":{},"text":{"12":{},"13":{},"75":{},"76":{},"129":{},"130":{}},"component":{},"keyword":{}}],["target",{"_index":1515,"title":{},"name":{},"text":{"10":{},"23":{},"37":{},"73":{},"83":{},"94":{},"137":{},"146":{}},"component":{},"keyword":{}}],["target/app.war",{"_index":2477,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["target/arch",{"_index":2468,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["target/com.blueant/peripher",{"_index":1555,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["target/war",{"_index":3745,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["target/war/web",{"_index":3741,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["target/your_application.war",{"_index":3744,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["task",{"_index":189,"title":{},"name":{},"text":{"2":{},"53":{},"55":{},"65":{},"72":{},"112":{},"120":{},"127":{},"160":{}},"component":{},"keyword":{}}],["tast",{"_index":1582,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["tbd",{"_index":3847,"title":{},"name":{},"text":{"92":{},"144":{}},"component":{},"keyword":{}}
1],["tcp",{"_index":2610,"title":{},"name":{},"text":{"21":{},"64":{}},"component":{},"keyword":{}}],["tcp/ip",{"_index":1968,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["team",{"_index":104,"title":{},"name":{},"text":{"1":{},"24":{},"50":{},"84":{},"107":{},"138":{}},"component":{},"keyword":{}}],["teardown",{"_index":2181,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["technic",{"_index":911,"title":{"124-2":{}},"name":{},"text":{"6":{},"16":{},"23":{},"37":{},"68":{},"94":{},"122":{}},"component":{},"keyword":{}}],["techniqu",{"_index":2685,"title":{"72-13":{},"127-13":{}},"name":{},"text":{"23":{},"74":{},"77":{},"83":{},"128":{},"131":{},"137":{}},"component":{},"keyword":{}}],["technolog",{"_index":1074,"title":{},"name":{},"text":{"7":{},"13":{},"69":{},"76":{},"123":{},"130":{}},"component":{},"keyword":{}}],["telementri",{"_index":1507,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["telemetri",{"_index":778,"title":{"10-5":{},"73-5":{}},"name":{},"text":{"5":{},"10":{},"30":{},"39":{},"43":{},"64":{},"66":{},"73":{},"96":{},"98":{},"101":{}},"component":{},"keyword":{}}],["telemetry_init.clj",{"_index":1413,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["telemetry_test_init.clj",{"_index":1397,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["telephon",{"_index":1004,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["tell",{"_index":213,"title":{},"name":{},"text":{"2":{},"9":{},"11":{},"13":{},"23":{},"32":{},"35":{},"54":{},"65":{},"71":{},"73":{},"74":{},"75":{},"76":{},"81":{},"83":{},"90":{},"92":{},"109":{},"120":{},"125":{},"128":{},"129":{},"130":{},"135":{},"137":{},"142":{},"144":{},"158":{}},"component":{},"keyword":{}}],["templat",{"_index":231,"title":{"10":{},"73":{}},"name":{"10":{},"73":{}},"text":{"2":{},"5":{},"9":{},"10":{},"13":{},"23":{},"44":{},"65":{},"66":{},"71":{},"72":{},"73":{},"76":{},"78":{},"79":{},"81":{},"83":{},"102":{},"120":{},"125":{},"127":{},"130":{},"132":{},"133":{},"135":{},"137":{},"152":{}},"component":{},"keyword":{}}],["template/0.5.1/lein",{"_index":3939,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["temporari",{"_index":3564,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["tempserv",{"_index":3363,"title":{},"name":{},"text":{"72":{},"127":{}},"component":{},"keyword":{}}],["tempt",{"_index":1867,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["ten",{"_index":2348,"title":{},"name":{},"text":{"18":{},"100":{},"151":{}},"component":{},"keyword":{}}],["tenant",{"_index":2411,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["tend",{"_index":3254,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["term",{"_index":704,"title":{},"name":{"7":{},"69":{},"123":{}},"text":{"4":{},"6":{},"7":{},"9":{},"13":{},"16":{},"20":{},"22":{},"28":{},"32":{},"50":{},"52":{},"53":{},"58":{},"59":{},"64":{},"67":{},"68":{},"69":{},"71":{},"82":{},"86":{},"90":{},"107":{},"108":{},"115":{},"122":{},"123":{},"124":{},"125":{},"136":{},"142":{},"157":{},"163":{}},"component":{},"keyword":{}}],["termin",{"_index":1928,"title":{"160-2":{}},"name":{},"text":{"13":{},"16":{},"17":{},"18":{},"22":{},"23":{},"25":{},"29":{},"37":{},"55":{},"75":{},"76":{},"79":{},"82":{},"87":{},"94":{},"112":{},"129":{},"130":{},"133":{},"136":{},"140":{},"146":{},"156":{},"160":{}},"component":{},"keyword":{}}],["terminolog",{"_index":1072,"title":{"7":{},"69":{},"123":{},"124-11":{}},"name":{},"text":{},"component":{},"keyword":{}}],["ters",{"_index":1232,"title":{"59":{},"115":{},"163":{}},"name":{"59":{},"115":{},"163":{}},"text":{"9":{},"35":{},"37":{},"51":{},"52":{},"59":{},"71":{},"92":{},"108":{},"115":{},"124":{},"125":{},"144":{},"157":{},"163":{}},"component":{},"keyword":{}}],["terse/vector",{"_index":3657,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["test",{"_index":121,"title":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{},"2-4":{},"2-9":{},"3-4":{},"16-16":{},"16-19":{},"19-1":{},"19-2":{},"19-3":{},"19-9":{},"19-10":{},"19-11":{},"19-12":{},"61-1":{},"61-2":{},"61-4":{},"61-5":{},"61-7":{},"65-3":{},"65-8":{},"72-9":{},"78-10":{},"80-1":{},"80-2":{},"80-4":{},"80-5":{},"80-7":{},"117-1":{},"117-2":{},"117-4":{},"117-5":{},"117-7":{},"120-3":{},"120-8":{},"127-9":{},"132-10":{},"134-1":{},"134-2":{},"134-4":{},"134-5":{},"134-7":{},"165-1":{},"165-2":{},"165-4":{},"165-5":{},"165-7":{}},"name":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"26":{},"27":{},"32":{},"35":{},"41":{},"50":{},"56":{},"61":{},"65":{},"66":{},"67":{},"68":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"86":{},"90":{},"98":{},"107":{},"110":{},"111":{},"117":{},"120":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"135":{},"136":{},"137":{},"142":{},"159":{},"165":{}},"component":{},"keyword":{}}],["test.xml",{"_index":1417,"title":{"41-11":{},"98-10":{}},"name":{},"text":{"10":{},"41":{},"73":{},"98":{}},"component":{},"keyword":{}}],["test/app/system_test.clj",{"_index":2216,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["test/fn",{"_index":678,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["test/hp/keystore.jk",{"_index":3679,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["test/respons",{"_index":2702,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["test/system_test.clj",{"_index":3632,"title":{},"name":{},"text":{"78":{}},"component":{},"keyword":{}}],["test/user.clj",{"_index":2240,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["testabl",{"_index":728,"title":{"5-5":{},"66-5":{}},"name":{},"text":{"5":{},"11":{},"23":{},"74":{},"83":{},"128":{},"137":{}},"component":{},"keyword":{}}],["text",{"_index":1254,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"18":{},"20":{},"21":{},"38":{},"49":{},"57":{},"64":{},"71":{},"74":{},"75":{},"76":{},"105":{},"113":{},"119":{},"125":{},"128":{},"129":{},"130":{},"155":{},"161":{}},"component":{},"keyword":{}}],["text/ev",{"_index":2335,"title":{},"name":{},"text":{"18":{}},"component":{},"keyword":{}}],["text/html",{"_index":1481,"title":{},"name":{},"text":{"10":{},"11":{},"74":{},"79":{},"128":{},"133":{}},"component":{},"keyword":{}}],["text/javascript",{"_index":3705,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["text/plain",{"_index":1490,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"20":{},"23":{},"49":{},"61":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"83":{},"105":{},"117":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"137":{},"155":{},"165":{}},"component":{},"keyword":{}}],["thank",{"_index":182,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["that’",{"_index":1273,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"20":{},"23":{},"24":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"84":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"138":{}},"component":{},"keyword":{}}],["theme",{"_index":3928,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["themselv",{"_index":2360,"title":{},"name":{},"text":{"18":{},"79":{},"133":{}},"component":{},"keyword":{}}],["theori",{"_index":2082,"title":{},"name":{},"text":{"15":{}},"component":{},"keyword":{}}],["therefor",{"_index":798,"title":{},"name":{},"text":{"5":{},"37":{},"61":{},"66":{},"80":{},"81":{},"94":{},"117":{},"134":{},"135":{},"146":{},"165":{}},"component":{},"keyword":{}}],["there’",{"_index":1207,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"21":{},"22":{},"23":{},"24":{},"43":{},"47":{},"59":{},"64":{},"71":{},"73":{},"74":{},"76":{},"77":{},"82":{},"83":{},"84":{},"115":{},"125":{},"128":{},"130":{},"131":{},"136":{},"137":{},"138":{}},"component":{},"keyword":{}}],["they’r",{"_index":283,"title":{},"name":{},"text":{"2":{},"12":{},"22":{},"65":{},"72":{},"75":{},"82":{},"120":{},"127":{},"129":{},"136":{}},"component":{},"keyword":{}}],["thing",{"_index":311,"title":{"13-8":{},"76-8":{},"130-8":{}},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"13":{},"14":{},"18":{},"19":{},"20":{},"23":{},"32":{},"37":{},"41":{},"43":{},"61":{},"65":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"83":{},"90":{},"94":{},"98":{},"100":{},"101":{},"117":{},"120":{},"124":{},"125":{},"127":{},"128":{},"129":{},"130":{},"133":{},"134":{},"137":{},"142":{},"146":{},"151":{},"165":{}},"component":{},"keyword":{}}],["think",{"_index":202,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"13":{},"16":{},"18":{},"23":{},"65":{},"74":{},"75":{},"76":{},"79":{},"83":{},"100":{},"120":{},"128":{},"129":{},"130":{},"133":{},"137":{},"151":{}},"component":{},"keyword":{}}],["third",{"_index":814,"title":{"6-4":{},"68-4":{},"122-4":{}},"name":{},"text":{"6":{},"9":{},"53":{},"68":{},"71":{},"94":{},"122":{},"125":{},"146":{}},"component":{},"keyword":{}}],["thorough",{"_index":2371,"title":{},"name":{},"text":{"18":{},"21":{}},"component":{},"keyword":{}}],["those",{"_index":438,"title":{},"name":{},"text":{"3":{},"5":{},"6":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"18":{},"20":{},"23":{},"28":{},"37":{},"39":{},"43":{},"45":{},"49":{},"51":{},"52":{},"53":{},"61":{},"64":{},"66":{},"68":{},"70":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"94":{},"96":{},"101":{},"103":{},"105":{},"108":{},"110":{},"117":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"146":{},"153":{},"155":{},"157":{},"159":{},"165":{}},"component":{},"keyword":{}}],["though",{"_index":1209,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"16":{},"20":{},"22":{},"24":{},"33":{},"37":{},"41":{},"47":{},"63":{},"71":{},"74":{},"75":{},"76":{},"78":{},"82":{},"84":{},"94":{},"98":{},"118":{},"125":{},"128":{},"129":{},"130":{},"132":{},"138":{},"146":{}},"component":{},"keyword":{}}],["thought",{"_index":207,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}
1],["thousand",{"_index":3865,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["thread",{"_index":1134,"title":{},"name":{},"text":{"8":{},"11":{},"16":{},"22":{},"23":{},"24":{},"27":{},"29":{},"37":{},"38":{},"41":{},"47":{},"49":{},"57":{},"70":{},"72":{},"74":{},"75":{},"76":{},"82":{},"83":{},"84":{},"87":{},"94":{},"95":{},"98":{},"110":{},"113":{},"126":{},"127":{},"128":{},"129":{},"130":{},"136":{},"137":{},"138":{},"140":{},"143":{},"146":{},"147":{},"159":{},"161":{}},"component":{},"keyword":{}}],["thread/sleep",{"_index":2351,"title":{},"name":{},"text":{"18":{},"54":{},"79":{},"109":{},"133":{},"158":{}},"component":{},"keyword":{}}],["threadpool",{"_index":2958,"title":{},"name":{},"text":{"38":{},"95":{},"147":{}},"component":{},"keyword":{}}],["threadpool.xml",{"_index":2549,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["three",{"_index":1342,"title":{"81-3":{},"81-4":{},"135-3":{},"135-4":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"19":{},"20":{},"23":{},"24":{},"52":{},"53":{},"71":{},"75":{},"76":{},"84":{},"108":{},"125":{},"129":{},"130":{},"138":{}},"component":{},"keyword":{}}],["threw",{"_index":2888,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["through",{"_index":29,"title":{},"name":{},"text":{"1":{},"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"28":{},"32":{},"44":{},"50":{},"52":{},"58":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"84":{},"90":{},"102":{},"107":{},"108":{},"110":{},"114":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"136":{},"137":{},"138":{},"142":{},"152":{},"157":{},"162":{}},"component":{},"keyword":{}}],["throughout",{"_index":3466,"title":{},"name":{},"text":{"74":{},"128":{}},"component":{},"keyword":{}}],["throughput",{"_index":1137,"title":{},"name":{},"text":{"8":{},"14":{},"47":{},"70":{},"77":{},"126":{},"131":{}},"component":{},"keyword":{}}],["throw",{"_index":2012,"title":{},"name":{},"text":{"13":{},"22":{},"24":{},"32":{},"82":{},"84":{},"90":{},"136":{},"138":{},"142":{}},"component":{},"keyword":{}}],["throwabl",{"_index":2890,"title":{},"name":{},"text":{"32":{},"90":{},"119":{},"142":{}},"component":{},"keyword":{}}],["thrown",{"_index":1323,"title":{},"name":{},"text":{"9":{},"22":{},"32":{},"43":{},"48":{},"71":{},"82":{},"90":{},"101":{},"106":{},"136":{},"142":{}},"component":{},"keyword":{}}],["thu",{"_index":555,"title":{},"name":{},"text":{"3":{},"10":{},"11":{},"41":{},"59":{},"74":{},"75":{},"98":{},"115":{},"128":{},"129":{}},"component":{},"keyword":{}}],["thumb",{"_index":219,"title":{},"name":{},"text":{"2":{},"65":{},"120":{}},"component":{},"keyword":{}}],["thumbnail",{"_index":2669,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["ti",{"_index":2675,"title":{},"name":{},"text":{"22":{},"82":{},"110":{},"136":{},"159":{}},"component":{},"keyword":{}}],["tick",{"_index":3574,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["tigri",{"_index":2484,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["time",{"_index":120,"title":{"2-3":{}},"name":{},"text":{"2":{},"3":{},"4":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"21":{},"22":{},"23":{},"27":{},"29":{},"35":{},"37":{},"38":{},"40":{},"42":{},"43":{},"45":{},"47":{},"48":{},"49":{},"51":{},"53":{},"54":{},"62":{},"64":{},"65":{},"67":{},"68":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"87":{},"88":{},"92":{},"94":{},"97":{},"99":{},"100":{},"101":{},"103":{},"106":{},"109":{},"119":{},"120":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"136":{},"137":{},"140":{},"141":{},"144":{},"146":{},"148":{},"150":{},"151":{},"153":{},"156":{},"158":{}},"component":{},"keyword":{}}],["time\\n",{"_index":2096,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["timelin",{"_index":1329,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["timeout",{"_index":2978,"title":{},"name":{},"text":{"38":{},"64":{},"119":{}},"component":{},"keyword":{}}],["timer",{"_index":3061,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["timestamp",{"_index":3043,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["tini",{"_index":735,"title":{},"name":{},"text":{"5":{},"10":{},"15":{},"66":{},"73":{},"100":{},"151":{}},"component":{},"keyword":{}}],["tire",{"_index":2022,"title":{},"name":{},"text":{"13":{},"16":{},"76":{},"130":{}},"component":{},"keyword":{}}],["tissu",{"_index":2139,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["titl",{"_index":2380,"title":{},"name":{},"text":{"19":{},"61":{},"75":{},"80":{},"117":{},"129":{},"134":{},"165":{}},"component":{},"keyword":{}}],["tl",{"_index":2960,"title":{},"name":{},"text":{"38":{},"95":{},"143":{},"147":{},"164":{}},"component":{},"keyword":{}}],["tnew",{"_index":1386,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["today",{"_index":3257,"title":{},"name":{},"text":{"58":{},"59":{},"63":{}},"component":{},"keyword":{}}
1],["todo",{"_index":2686,"title":{},"name":{"124":{}},"text":{"23":{},"72":{},"83":{},"125":{},"127":{},"137":{}},"component":{},"keyword":{}}],["todo/:list",{"_index":2688,"title":{},"name":{},"text":{"23":{},"83":{},"125":{},"137":{}},"component":{},"keyword":{}}],["todo/abcdef/12345",{"_index":2714,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["todo/l15892",{"_index":2772,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["todo/l15959",{"_index":2763,"title":{},"name":{},"text":{"23":{}},"component":{},"keyword":{}}],["todo/l30488",{"_index":3822,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["todo?name=a",{"_index":2745,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["togeth",{"_index":1938,"title":{},"name":{},"text":{"13":{},"15":{},"16":{},"19":{},"20":{},"23":{},"47":{},"51":{},"52":{},"72":{},"74":{},"76":{},"83":{},"100":{},"108":{},"127":{},"128":{},"130":{},"137":{},"151":{},"157":{}},"component":{},"keyword":{}}],["token",{"_index":3906,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["told",{"_index":2001,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["tomcat",{"_index":2792,"title":{"60":{},"116":{},"164":{}},"name":{"60":{},"116":{},"164":{}},"text":{"24":{},"60":{},"79":{},"81":{},"84":{},"110":{},"116":{},"121":{},"133":{},"135":{},"138":{},"159":{},"164":{}},"component":{},"keyword":{}}],["ton",{"_index":3748,"title":{},"name":{},"text":{"83":{},"137":{}},"component":{},"keyword":{}}],["took",{"_index":1546,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["tool",{"_index":631,"title":{"4-7":{},"67-4":{}},"name":{},"text":{"4":{},"7":{},"10":{},"12":{},"13":{},"14":{},"16":{},"17":{},"67":{},"69":{},"72":{},"73":{},"75":{},"76":{},"78":{},"96":{},"121":{},"123":{},"127":{},"129":{},"130":{},"132":{}},"component":{},"keyword":{}}],["tools.dep",{"_index":1076,"title":{},"name":{},"text":{"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["top",{"_index":397,"title":{},"name":{},"text":{"3":{},"11":{},"16":{},"32":{},"58":{},"59":{},"74":{},"90":{},"114":{},"115":{},"128":{},"160":{},"162":{},"163":{}},"component":{},"keyword":{}}],["topic",{"_index":2679,"title":{},"name":{},"text":{"22":{},"23":{},"82":{},"83":{},"136":{},"137":{}},"component":{},"keyword":{}}],["topmost",{"_index":1733,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["total",{"_index":3873,"title":{},"name":{},"text":{"100":{},"151":{}},"component":{},"keyword":{}}],["touch",{"_index":1202,"title":{},"name":{},"text":{"9":{},"11":{},"71":{},"74":{},"125":{},"128":{}},"component":{},"keyword":{}}],["toward",{"_index":48,"title":{},"name":{},"text":{"1":{},"11":{},"22":{},"26":{},"74":{},"82":{},"86":{},"128":{},"136":{}},"component":{},"keyword":{}}],["toy",{"_index":2083,"title":{},"name":{},"text":{"15":{},"16":{}},"component":{},"keyword":{}}],["trace",{"_index":633,"title":{"4-9":{},"30-1":{},"67-6":{},"88-4":{},"98-11":{}},"name":{},"text":{"4":{},"10":{},"24":{},"26":{},"27":{},"32":{},"39":{},"41":{},"43":{},"54":{},"62":{},"67":{},"73":{},"86":{},"90":{},"96":{},"98":{},"101":{},"125":{},"142":{}},"component":{},"keyword":{}}],["tracingsourc",{"_index":2847,"title":{},"name":{},"text":{"26":{},"86":{}},"component":{},"keyword":{}}],["track",{"_index":2658,"title":{},"name":{},"text":{"22":{},"23":{},"30":{},"32":{},"43":{},"82":{},"83":{},"90":{},"100":{},"101":{},"124":{},"136":{},"137":{},"142":{},"151":{}},"component":{},"keyword":{}}],["tracker",{"_index":87,"title":{},"name":{},"text":{"1":{},"96":{}},"component":{},"keyword":{}}],["trade",{"_index":3176,"title":{},"name":{},"text":{"52":{},"108":{},"157":{}},"component":{},"keyword":{}}],["tradeoff",{"_index":1359,"title":{},"name":{},"text":{"9":{},"15":{},"40":{},"69":{},"71":{},"97":{},"123":{},"125":{},"148":{}},"component":{},"keyword":{}}],["tradit",{"_index":738,"title":{},"name":{},"text":{"5":{},"12":{},"23":{},"24":{},"57":{},"66":{},"84":{},"138":{}},"component":{},"keyword":{}}],["tradition",{"_index":394,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["trail",{"_index":1568,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"74":{},"75":{},"83":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["transact",{"_index":2731,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["transfer",{"_index":1032,"title":{},"name":{},"text":{"6":{},"14":{},"20":{},"55":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"112":{},"122":{},"128":{},"129":{},"130":{},"131":{},"132":{},"160":{}},"component":{},"keyword":{}}],["transform",{"_index":1583,"title":{},"name":{},"text":{"11":{},"16":{},"19":{},"22":{},"25":{},"28":{},"37":{},"52":{},"74":{},"82":{},"85":{},"94":{},"108":{},"128":{},"136":{},"139":{},"146":{},"157":{}},"component":{},"keyword":{}}],["transit",{"_index":143,"title":{"22-6":{},"82-6":{},"136-6":{}},"name":{},"text":{"2":{},"20":{},"39":{},"44":{},"96":{},"102":{},"152":{},"154":{},"160":{}},"component":{},"keyword":{}}],["translat",{"_index":1728,"title":{},"name":{},"text":{"11":{},"13":{},"23":{},"74":{},"76":{},"83":{},"128":{},"130":{},"137":{}},"component":{},"keyword":{}}],["transmiss",{"_index":3306,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["transmit",{"_index":3284,"title":{"64-7":{}},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["transpar",{"_index":2262,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["transport",{"_index":1472,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["trash",{"_index":2068,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["treat",{"_index":700,"title":{},"name":{},"text":{"4":{},"9":{},"12":{},"13":{},"19":{},"23":{},"35":{},"37":{},"40":{},"47":{},"53":{},"58":{},"59":{},"67":{},"71":{},"75":{},"76":{},"83":{},"92":{},"94":{},"97":{},"110":{},"114":{},"115":{},"125":{},"129":{},"130":{},"137":{},"144":{},"146":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["treatment",{"_index":859,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["tree",{"_index":590,"title":{"42":{},"45":{},"99":{},"103":{},"150":{},"153":{}},"name":{"42":{},"45":{},"99":{},"103":{},"150":{},"153":{}},"text":{"3":{},"9":{},"10":{},"20":{},"40":{},"42":{},"45":{},"52":{},"53":{},"71":{},"72":{},"73":{},"76":{},"92":{},"97":{},"99":{},"103":{},"108":{},"110":{},"125":{},"127":{},"130":{},"144":{},"148":{},"150":{},"153":{},"157":{},"159":{}},"component":{},"keyword":{}}],["tree/satisfi",{"_index":3380,"title":{},"name":{},"text":{"72":{},"76":{},"83":{},"127":{},"130":{},"137":{}},"component":{},"keyword":{}}],["trend",{"_index":3064,"title":{},"name":{},"text":{"43":{},"101":{}},"component":{},"keyword":{}}],["tri",{"_index":214,"title":{"18-10":{},"21-10":{}},"name":{},"text":{"2":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"24":{},"41":{},"54":{},"65":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"83":{},"84":{},"98":{},"109":{},"120":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"137":{},"138":{},"158":{}},"component":{},"keyword":{}}],["trick",{"_index":1714,"title":{},"name":{},"text":{"11":{},"12":{},"22":{},"24":{},"75":{},"76":{},"82":{},"83":{},"84":{},"129":{},"130":{},"136":{},"137":{},"138":{}},"component":{},"keyword":{}}],["tricki",{"_index":1763,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["trifl",{"_index":1860,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["trigger",{"_index":1118,"title":{"8-3":{},"70-3":{},"126-3":{}},"name":{},"text":{"7":{},"23":{},"29":{},"32":{},"37":{},"69":{},"79":{},"83":{},"87":{},"90":{},"94":{},"123":{},"133":{},"137":{},"140":{},"142":{},"146":{}},"component":{},"keyword":{}}],["trip",{"_index":2761,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["tripli",{"_index":3934,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["trivial",{"_index":285,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"14":{},"37":{},"51":{},"65":{},"75":{},"76":{},"77":{},"94":{},"120":{},"129":{},"130":{},"131":{},"146":{}},"component":{},"keyword":{}}],["troll",{"_index":58,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["troubl",{"_index":1688,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["true",{"_index":1463,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"14":{},"16":{},"17":{},"26":{},"27":{},"29":{},"38":{},"41":{},"46":{},"47":{},"50":{},"62":{},"72":{},"73":{},"74":{},"75":{},"77":{},"79":{},"83":{},"87":{},"89":{},"94":{},"95":{},"98":{},"104":{},"107":{},"110":{},"127":{},"128":{},"129":{},"131":{},"133":{},"137":{},"140":{},"143":{},"147":{},"154":{},"159":{}},"component":{},"keyword":{}}],["true.http/2",{"_index":2965,"title":{},"name":{},"text":{"38":{}},"component":{},"keyword":{}}],["truest",{"_index":1958,"title":{},"name":{},"text":{"13":{}},"component":{},"keyword":{}}],["truli",{"_index":2405,"title":{},"name":{},"text":{"19":{},"64":{},"119":{}},"component":{},"keyword":{}}],["trusstor",{"_index":3983,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["trust",{"_index":2325,"title":{},"name":{},"text":{"17":{},"38":{},"95":{},"143":{},"147":{}},"component":{},"keyword":{}}],["trustmanagerclassnam",{"_index":4039,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["trustmaxcertlength",{"_index":4037,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truststor",{"_index":2969,"title":{},"name":{},"text":{"38":{},"95":{},"143":{},"147":{}},"component":{},"keyword":{}}],["truststorealgorithm",{"_index":4033,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truststorefil",{"_index":4032,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truststorepass",{"_index":4025,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truststoreprovid",{"_index":4028,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truststoretyp",{"_index":4024,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["truth",{"_index":1785,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["truthi",{"_index":1903,"title":{},"name":{},"text":{"12":{},"32":{},"75":{},"90":{},"110":{},"129":{},"142":{},"159":{},"160":{}},"component":{},"keyword":{}}],["ttool",{"_index":1368,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["tue",{"_index":3621,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["tune",{"_index":3666,"title":{},"name":{},"text":{"79":{},"133":{},"143":{}},"component":{},"keyword":{}}],["tupl",{"_index":3167,"title":{},"name":{},"text":{"51":{}},"component":{},"keyword":{}}],["turn",{"_index":606,"title":{},"name":{},"text":{"3":{},"9":{},"11":{},"13":{},"23":{},"24":{},"31":{},"55":{},"71":{},"72":{},"74":{},"75":{},"76":{},"83":{},"89":{},"92":{},"125":{},"127":{},"128":{},"129":{},"130":{},"137":{},"144":{}},"component":{},"keyword":{}}],["tutori",{"_index":1788,"title":{},"name":{},"text":{"11":{},"13":{},"23":{},"74":{},"76":{},"79":{},"83":{},"128":{},"130":{},"133":{},"137":{}},"component":{},"keyword":{}}],["two",{"_index":1567,"title":{"81-2":{},"135-2":{}},"name":{},"text":{"11":{},"12":{},"13":{},"15":{},"16":{},"22":{},"23":{},"29":{},"31":{},"32":{},"35":{},"51":{},"52":{},"54":{},"55":{},"62":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"82":{},"83":{},"87":{},"89":{},"90":{},"92":{},"100":{},"108":{},"109":{},"121":{},"125":{},"127":{},"128":{},"129":{},"130":{},"136":{},"137":{},"140":{},"142":{},"144":{},"151":{},"158":{}},"component":{},"keyword":{}}],["tx",{"_index":2733,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["type",{"_index":484,"title":{"11":{},"74":{},"128":{},"11-11":{},"26-12":{},"30-6":{},"43-1":{},"43-4":{},"74-11":{},"88-10":{},"101-1":{},"128-11":{},"141-9":{}},"name":{"11":{},"74":{},"128":{}},"text":{"3":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"32":{},"35":{},"37":{},"38":{},"43":{},"44":{},"46":{},"48":{},"49":{},"50":{},"51":{},"52":{},"55":{},"57":{},"61":{},"64":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"83":{},"84":{},"87":{},"90":{},"92":{},"94":{},"95":{},"102":{},"104":{},"105":{},"106":{},"107":{},"108":{},"110":{},"113":{},"117":{},"119":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"137":{},"138":{},"140":{},"142":{},"143":{},"144":{},"146":{},"147":{},"152":{},"154":{},"155":{},"156":{},"157":{},"159":{},"160":{},"161":{},"164":{},"165":{}},"component":{},"keyword":{}}],["typic",{"_index":1977,"title":{},"name":{},"text":{"13":{},"16":{},"17":{},"18":{},"19":{},"24":{},"26":{},"30":{},"43":{},"58":{},"61":{},"80":{},"81":{},"84":{},"86":{},"100":{},"117":{},"134":{},"135":{},"138":{},"151":{},"157":{},"165":{}},"component":{},"keyword":{}}],["ugh",{"_index":2051,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["ugli",{"_index":1919,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["uh",{"_index":2746,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["ui",{"_index":1513,"title":{},"name":{},"text":{"10":{},"73":{},"124":{}},"component":{},"keyword":{}}],["ultim",{"_index":414,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"12":{},"13":{},"18":{},"55":{},"63":{},"69":{},"72":{},"74":{},"75":{},"79":{},"92":{},"112":{},"118":{},"119":{},"123":{},"127":{},"128":{},"129":{},"133":{},"144":{},"160":{}},"component":{},"keyword":{}}],["unabl",{"_index":1623,"title":{},"name":{},"text":{"11":{},"13":{},"22":{},"64":{},"74":{},"76":{},"82":{},"128":{},"130":{},"136":{}},"component":{},"keyword":{}}],["unaccept",{"_index":52,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["unari",{"_index":2930,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["unavoid",{"_index":2937,"title":{},"name":{},"text":{"37":{}},"component":{},"keyword":{}}],["unbind",{"_index":2868,"title":{},"name":{},"text":{"29":{},"87":{}},"component":{},"keyword":{}}],["unbound",{"_index":1152,"title":{},"name":{},"text":{"8":{},"64":{},"70":{},"119":{},"126":{}},"component":{},"keyword":{}}],["uncaught",{"_index":2882,"title":{"32-3":{},"90-3":{}},"name":{},"text":{"43":{},"55":{},"101":{},"112":{}},"component":{},"keyword":{}}],["unchang",{"_index":2098,"title":{},"name":{},"text":{"15":{},"16":{},"19":{},"21":{}},"component":{},"keyword":{}}],["uncom",{"_index":3641,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["uncommon",{"_index":2136,"title":{},"name":{},"text":{"16":{},"29":{},"55":{},"72":{},"78":{},"87":{},"127":{},"132":{},"140":{}},"component":{},"keyword":{}}],["undefin",{"_index":2860,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["under",{"_index":922,"title":{},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"19":{},"20":{},"44":{},"47":{},"52":{},"55":{},"61":{},"64":{},"68":{},"71":{},"74":{},"75":{},"76":{},"78":{},"80":{},"88":{},"102":{},"112":{},"117":{},"122":{},"125":{},"128":{},"129":{},"130":{},"132":{},"134":{},"141":{},"152":{},"160":{},"165":{}},"component":{},"keyword":{}}],["underli",{"_index":772,"title":{},"name":{},"text":{"5":{},"7":{},"25":{},"35":{},"41":{},"43":{},"50":{},"64":{},"69":{},"84":{},"85":{},"98":{},"100":{},"107":{},"110":{},"123":{},"138":{},"139":{},"151":{},"159":{}},"component":{},"keyword":{}}],["underscor",{"_index":2040,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["understan
1d",{"_index":849,"title":{"14-2":{}},"name":{},"text":{"6":{},"7":{},"9":{},"11":{},"14":{},"16":{},"22":{},"23":{},"52":{},"68":{},"69":{},"71":{},"72":{},"74":{},"77":{},"82":{},"83":{},"108":{},"122":{},"123":{},"125":{},"127":{},"128":{},"131":{},"136":{},"137":{}},"component":{},"keyword":{}}],["undertow",{"_index":2793,"title":{},"name":{},"text":{"24":{},"84":{},"121":{},"138":{},"143":{}},"component":{},"keyword":{}}],["underway",{"_index":2853,"title":{},"name":{},"text":{"27":{}},"component":{},"keyword":{}}],["undiagnos",{"_index":529,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["undo",{"_index":2177,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["unencrypt",{"_index":2255,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["unexcit",{"_index":2000,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["unexpect",{"_index":3913,"title":{},"name":{},"text":{"119":{}},"component":{},"keyword":{}}],["unfamiliar",{"_index":2258,"title":{},"name":{},"text":{"17":{},"79":{},"133":{}},"component":{},"keyword":{}}],["unhandl",{"_index":2908,"title":{},"name":{},"text":{"32":{},"55":{},"90":{},"112":{}},"component":{},"keyword":{}}],["unicod",{"_index":1861,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["unidirect",{"_index":2328,"title":{},"name":{},"text":{"18":{},"21":{},"79":{},"133":{}},"component":{},"keyword":{}}],["unifi",{"_index":635,"title":{},"name":{},"text":{"4":{},"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["uniformli",{"_index":1312,"title":{},"name":{},"text":{"9":{},"71":{}},"component":{},"keyword":{}}],["unikernel",{"_index":3916,"title":{},"name":{},"text":{"121":{},"125":{}},"component":{},"keyword":{}}],["uniniti",{"_index":3612,"title":{},"name":{},"text":{"78":{},"132":{}},"component":{},"keyword":{}}],["unintend",{"_index":4018,"title":{},"name":{},"text":{"160":{}},"component":{},"keyword":{}}],["union",{"_index":832,"title":{"6-11":{},"68-11":{},"122-11":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["uniqu",{"_index":1313,"title":{},"name":{},"text":{"9":{},"13":{},"14":{},"22":{},"23":{},"29":{},"32":{},"50":{},"52":{},"58":{},"71":{},"76":{},"77":{},"82":{},"83":{},"87":{},"90":{},"107":{},"108":{},"114":{},"125":{},"130":{},"131":{},"136":{},"137":{},"140":{},"142":{},"157":{},"162":{}},"component":{},"keyword":{}}],["unit",{"_index":992,"title":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"name":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"text":{"6":{},"7":{},"11":{},"12":{},"14":{},"19":{},"22":{},"37":{},"43":{},"68":{},"69":{},"72":{},"74":{},"75":{},"76":{},"77":{},"82":{},"94":{},"122":{},"123":{},"127":{},"128":{},"129":{},"130":{},"136":{},"146":{}},"component":{},"keyword":{}}],["univers",{"_index":3296,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["unix",{"_index":1588,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"23":{},"74":{},"75":{},"76":{},"81":{},"83":{},"128":{},"129":{},"130":{},"135":{},"137":{}},"component":{},"keyword":{}}],["unleash",{"_index":3286,"title":{},"name":{},"text":{"64":{},"119":{}},"component":{},"keyword":{}}],["unless",{"_index":282,"title":{},"name":{},"text":{"2":{},"16":{},"17":{},"41":{},"58":{},"65":{},"88":{},"98":{},"120":{}},"component":{},"keyword":{}}],["unlik",{"_index":2612,"title":{},"name":{},"text":{"21":{},"24":{},"37":{},"40":{},"54":{},"59":{},"77":{},"84":{},"97":{},"109":{},"115":{},"131":{},"138":{},"148":{},"158":{},"163":{}},"component":{},"keyword":{}}],["unload",{"_index":2206,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["unmention",{"_index":1772,"title":{},"name":{},"text":{"11":{},"12":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["unmodifi",{"_index":1761,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["unnam",{"_index":2739,"title":{},"name":{},"text":{"23":{},"83":{},"137":{}},"component":{},"keyword":{}}],["unnecessari",{"_index":3680,"title":{},"name":{},"text":{"79":{},"133":{}},"component":{},"keyword":{}}],["unpack",{"_index":1073,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"28":{},"69":{},"75":{},"76":{},"123":{},"129":{},"130":{}},"component":{},"keyword":{}}],["unreason",{"_index":949,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["unrecogn",{"_index":3297,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["unrout",{"_index":3003,"title":{},"name":{},"text":{"40":{},"97":{}},"component":{},"keyword":{}}],["unsaf",{"_index":1478,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"159":{}},"component":{},"keyword":{}}],["unspecifi",{"_index":3892,"title":{},"name":{},"text":{"110":{},"159":{}},"component":{},"keyword":{}}],["unstart",{"_index":2174,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}],["unstat",{"_index":2789,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["unsupport",{"_index":2808,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["until",{"_index":693,"title":{},"name":{},"text":{"4":{},"8":{},"12":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"23":{},"24":{},"29":{},"64":{},"67":{},"70":{},"75":{},"77":{},"79":{},"83":{},"84":{},"87":{},"100":{},"125":{},"126":{},"129":{},"131":{},"133":{},"137":{},"138":{},"140":{},"151":{}},"component":{},"keyword":{}}],["unusu",{"_index":3092,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["unveil",{"_index":1228,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["unwelcom",{"_index":55,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["unwieldi",{"_index":1894,"title":{},"name":{},"text":{"12":{},"13":{},"72":{},"75":{},"127":{},"129":{}},"component":{},"keyword":{}}
1],["unwind",{"_index":2652,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["up",{"_index":220,"title":{"5-4":{},"9-27":{},"10-1":{},"13-12":{},"14-4":{},"18-7":{},"18-13":{},"21-7":{},"21-13":{},"23-6":{},"23-8":{},"66-4":{},"71-27":{},"73-1":{},"76-12":{},"77-5":{},"78-8":{},"79-9":{},"79-11":{},"83-6":{},"83-8":{},"125-27":{},"130-12":{},"131-4":{},"132-8":{},"133-9":{},"133-11":{},"137-6":{},"137-8":{}},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"32":{},"41":{},"46":{},"52":{},"54":{},"55":{},"61":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"88":{},"90":{},"92":{},"98":{},"100":{},"104":{},"108":{},"109":{},"112":{},"117":{},"120":{},"121":{},"122":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"141":{},"142":{},"144":{},"151":{},"154":{},"157":{},"158":{},"160":{},"165":{}},"component":{},"keyword":{}}],["updat",{"_index":822,"title":{"6-7":{},"68-7":{},"122-7":{}},"name":{},"text":{"6":{},"9":{},"11":{},"12":{},"14":{},"16":{},"17":{},"22":{},"23":{},"26":{},"34":{},"38":{},"41":{},"50":{},"52":{},"59":{},"62":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"82":{},"83":{},"88":{},"89":{},"91":{},"98":{},"100":{},"107":{},"110":{},"115":{},"121":{},"122":{},"124":{},"125":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"136":{},"137":{},"140":{},"141":{},"151":{},"157":{},"159":{},"163":{}},"component":{},"keyword":{}}],["upgrad",{"_index":476,"title":{"64-9":{}},"name":{},"text":{"3":{},"4":{},"21":{},"37":{},"38":{},"51":{},"64":{},"95":{},"147":{}},"component":{},"keyword":{}}],["upload",{"_index":151,"title":{"44-4":{},"102-4":{},"152-4":{}},"name":{},"text":{"2":{},"39":{},"44":{},"96":{},"102":{},"152":{}},"component":{},"keyword":{}}],["upon",{"_index":1783,"title":{},"name":{},"text":{"11":{},"12":{},"22":{},"41":{},"49":{},"74":{},"75":{},"78":{},"82":{},"98":{},"105":{},"128":{},"129":{},"132":{},"136":{},"155":{}},"component":{},"keyword":{}}],["upper",{"_index":3136,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["upward",{"_index":3549,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["uri",{"_index":531,"title":{},"name":{},"text":{"3":{},"11":{},"12":{},"17":{},"19":{},"23":{},"30":{},"46":{},"47":{},"52":{},"74":{},"75":{},"83":{},"92":{},"100":{},"104":{},"108":{},"128":{},"129":{},"137":{},"144":{},"151":{},"154":{}},"component":{},"keyword":{}}],["url",{"_index":1116,"title":{"9-21":{},"9-22":{},"9-23":{},"61-6":{},"71-21":{},"71-22":{},"71-23":{},"80-6":{},"83-13":{},"117-6":{},"125-21":{},"125-22":{},"125-23":{},"134-6":{},"137-13":{},"165-6":{}},"name":{},"text":{"7":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"23":{},"44":{},"46":{},"52":{},"58":{},"59":{},"61":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"81":{},"83":{},"92":{},"102":{},"104":{},"108":{},"114":{},"115":{},"117":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"134":{},"135":{},"137":{},"144":{},"152":{},"154":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["urlencod",{"_index":2402,"title":{},"name":{},"text":{"19":{},"44":{},"61":{},"80":{},"102":{},"117":{},"134":{},"152":{},"154":{},"165":{}},"component":{},"keyword":{}}],["url’",{"_index":3949,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["us",{"_index":35,"title":{"16":{},"17":{},"78":{},"132":{},"6-2":{},"6-3":{},"9-20":{},"9-25":{},"12-11":{},"22-11":{},"40-2":{},"40-3":{},"42-2":{},"42-3":{},"45-2":{},"45-3":{},"53-2":{},"53-3":{},"57-1":{},"57-2":{},"57-3":{},"57-4":{},"68-2":{},"68-3":{},"71-20":{},"71-25":{},"72-13":{},"75-11":{},"77-4":{},"82-11":{},"97-2":{},"97-3":{},"99-2":{},"99-3":{},"103-2":{},"103-3":{},"113-1":{},"113-2":{},"113-3":{},"113-4":{},"122-2":{},"122-3":{},"125-20":{},"125-25":{},"127-13":{},"129-11":{},"136-11":{},"148-2":{},"148-3":{},"150-2":{},"150-3":{},"153-2":{},"153-3":{},"161-1":{},"161-2":{}
1,"161-3":{},"161-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"117":{},"118":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"138":{},"139":{},"140":{},"141":{},"142":{},"143":{},"144":{},"146":{},"147":{},"148":{},"150":{},"151":{},"152":{},"153":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["usa",{"_index":1071,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["usag",{"_index":2243,"title":{"61-3":{},"80-3":{},"117-3":{},"134-3":{},"165-3":{}},"name":{},"text":{"16":{},"18":{},"44":{},"78":{},"79":{},"102":{},"132":{},"133":{},"152":{}},"component":{},"keyword":{}}],["user",{"_index":27,"title":{"6-11":{},"16-13":{},"68-11":{},"122-11":{}},"name":{},"text":{"1":{},"3":{},"4":{},"6":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"40":{},"41":{},"44":{},"53":{},"58":{},"61":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"82":{},"83":{},"97":{},"98":{},"102":{},"110":{},"114":{},"117":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"133":{},"134":{},"136":{},"137":{},"148":{},"152":{},"157":{},"162":{},"165":{}},"component":{},"keyword":{}}],["user.clj",{"_index":1399,"title":{},"name":{},"text":{"10":{},"16":{},"73":{}},"component":{},"keyword":{}}],["user/12345",{"_index":1333,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["user/12345/profile?_method=put",{"_index":1348,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["user/12487",{"_index":3206,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["user/12487/profil",{"_index":3207,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["user/:id",{"_index":3202,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["user/:id/*blah",{"_index":4003,"title":{},"name":{},"text":{"157":{}},"component":{},"keyword":{}}],["user/:id/item",{"_index":3277,"title":{},"name":{},"text":{"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["user/:id/profil",{"_index":3203,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["user/:us",{"_index":1291,"title":{},"name":{},"text":{"9":{},"58":{},"71":{},"114":{},"125":{},"162":{}},"component":{},"keyword":{}}],["user/search",{"_index":3204,"title":{},"name":{},"text":{"53":{}},"component":{},"keyword":{}}],["[email protected]&password=mi",{"_index":2403,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["users/12345",{"_index":1263,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["users/123545/orders/from%20str",{"_index":3252,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["users/:id",{"_index":3095,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["users/:id/orders/:ord",{"_index":3249,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["users/:id/posts/:post",{"_index":3096,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["users/:us",{"_index":1259,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["users/abacab",{"_index":1261,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["users/abcdef/ord",{"_index":3250,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["users/abcdef/orders/12345",{"_index":3251,"title":{},"name":{},"text":{"58":{},"59":{},"114":{},"115":{},"162":{},"163":{}},"component":{},"keyword":{}}],["users/mike%20n",{"_index":1264,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["users/miken",{"_index":1262,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["users/miken/profil",{"_index":1281,"title":{},"name":{},"text":{"9":{}},"component":{},"keyword":{}}],["users/miken/profile/photos/blu",{"_index":1268,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["useserverciphersuitesord",{"_index":4026,"title":{},"name":{},"text":{"164":{}},"component":{},"keyword":{}}],["usr/lib/jvm/java",{"_index":2525,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}
1],["usr/local/jetty/etc/jetti",{"_index":2547,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usr/local/jetty/etc/jetty.xml",{"_index":2550,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usr/local/jetty/etc/sessions/id",{"_index":2552,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usr/local/jetty/lib/jakarta.servlet",{"_index":2558,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usr/local/jetty/lib/jetti",{"_index":2559,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usr/local/jetty/start.jar",{"_index":2496,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["usual",{"_index":241,"title":{},"name":{},"text":{"2":{},"6":{},"11":{},"12":{},"17":{},"18":{},"23":{},"24":{},"32":{},"37":{},"65":{},"68":{},"74":{},"75":{},"83":{},"84":{},"88":{},"90":{},"100":{},"110":{},"120":{},"122":{},"128":{},"129":{},"137":{},"138":{},"141":{},"142":{},"151":{},"159":{}},"component":{},"keyword":{}}],["utf",{"_index":2391,"title":{},"name":{},"text":{"19":{},"83":{},"137":{}},"component":{},"keyword":{}}],["utf8",{"_index":1659,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{},"keyword":{}}],["util",{"_index":583,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"20":{},"22":{},"23":{},"39":{},"61":{},"64":{},"66":{},"67":{},"72":{},"80":{},"82":{},"83":{},"96":{},"100":{},"117":{},"127":{},"134":{},"136":{},"137":{},"151":{},"165":{}},"component":{},"keyword":{}}],["utter",{"_index":1802,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["uuid",{"_index":2872,"title":{},"name":{},"text":{"29":{},"87":{},"140":{}},"component":{},"keyword":{}}],["v",{"_index":2595,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["v0.5.1",{"_index":2158,"title":{},"name":{},"text":{"16":{},"78":{}},"component":{},"keyword":{}}],["v1/api",{"_index":2900,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["val",{"_index":1663,"title":{},"name":{},"text":{"11":{},"12":{},"23":{},"72":{},"73":{},"74":{},"75":{},"83":{},"127":{},"128":{},"129":{},"137":{}},"component":{},"keyword":{}}],["valid",{"_index":1272,"title":{"110-7":{},"156-1":{}},"name":{},"text":{"9":{},"16":{},"38":{},"48":{},"52":{},"55":{},"57":{},"71":{},"106":{},"108":{},"110":{},"112":{},"113":{},"125":{},"143":{},"154":{},"156":{},"160":{},"161":{}},"component":{},"keyword":{}}],["valu",{"_index":837,"title":{"26-1":{},"26-12":{},"37-2":{},"43-4":{},"94-2":{},"146-2":{}},"name":{},"text":{"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"26":{},"29":{},"31":{},"32":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"48":{},"49":{},"51":{},"52":{},"53":{},"54":{},"55":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"68":{},"70":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"86":{},"87":{},"88":{},"89":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"115":{},"117":{},"118":{},"119":{},"122":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{},"137":{},"140":{},"141":{},"142":{},"143":{},"144":{},"146":{},"147":{},"148":{},"151":{},"152":{},"153":{},"154":{},"155":{},"156":{},"157":{},"158":{},"159":{},"160":{},"161":{},"162":{},"163":{},"164":{},"165":{}},"component":{},"keyword":{}}],["value>org.example.war.service/cr",{"_index":2450,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["value>your_app_server_namespace/servlet",{"_index":3724,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["value[2",{"_index":2654,"title":{},"name":{},"text":{"22":{},"82":{},"136":{}},"component":{},"keyword":{}}],["vanilla",{"_index":3282,"title":{},"name":{},"text":{"62":{}},"component":{},"keyword":{}}],["var",{"_index":676,"title":{},"name":{},"text":{"4":{},"9":{},"14":{},"23":{},"26":{},"29":{},"30":{},"31":{},"32":{},"37":{},"41":{},"58":{},"59":{},"61":{},"63":{},"67":{},"71":{},"74":{},"77":{},"78":{},"79":{},"80":{},"83":{},"86":{},"87":{},"88":{},"89":{},"90":{},"94":{},"98":{},"100":{},"114":{},"115":{},"117":{},"118":{},"125":{},"128":{},"131":{},"132":{},"133":{},"134":{},"137":{},"140":{},"142":{},"146":{},"151":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["var/fn",{"_index":677,"title":{},"name":{},"text":{"4":{},"67":{}},"component":{},"keyword":{}}],["var/lib/jetty/resources:/usr/local/jetty/lib/logging/slf4j",{"_index":2531,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["var/lib/jetty/webapp",{"_index":2502,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["var/lib/jetty/webapps/root.war",{"_index":2498,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["vari",{"_index":1995,"title":{},"name":{},"text":{"13":{},"16":{},"43":{},"76":{},"100":{},"101":{},"151":{}},"component":{},"keyword":{}}],["variabl",{"_index":1343,"title":{},"name":{},"text":{"9":{},"12":{},"14":{},"17":{},"26":{},"41":{},"43":{},"51":{},"57":{},"71":{},"72":{},"86":{},"92":{},"98":{},"100":{},"101":{},"113":{},"125":{},"127":{},"144":{},"151":{},"161":{}},"component":{},"keyword":{}}],["variat",{"_index":1937,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["varieti",{"_index":2245,"title":{},"name":{},"text":{"16":{},"24":{},"25":{},"32":{},"35":{},"78":{},"84":{},"85":{},"90":{},"92":{},"121":{},"132":{},"138":{},"139":{},"144":{}},"component":{},"keyword":{}}],["variou",{"_index":1495,"title":{},"name":{},"text":{"10":{},"44":{},"49":{},"53":{},"56":{},"100":{},"102":{},"105":{},"110":{},"111":{},"151":{},"152":{},"155":{},"159":{}},"component":{},"keyword":{}}],["vast",{"_index":567,"title":{},"name":{},"text":{"3":{},"51":{},"100":{},"151":{}},"component":{},"keyword":{}}],["vault",{"_index":2298,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["vector",{"_index":1290,"title":{"58-3":{},"59-2":{},"59-3":{},"114-2":{},"115-2":{},"115-3":{},"162-2":{},"163-2":{},"163-3":{}},"name":{},"text":{"9":{},"11":{},"13":{},"23":{},"27":{},"30":{},"35":{},"38":{},"39":{},"52":{},"58":{},"59":{},"63":{},"64":{},"71":{},"74":{},"83":{},"88":{},"92":{},"95":{},"96":{},"108":{},"110":{},"114":{},"115":{},"118":{},"119":{},"125":{},"128":{},"137":{},"141":{},"144":{},"147":{},"157":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["vector(",{"_index":3260,"title":{},"name":{},"text":{"59":{},"115":{},"163":{}},"component":{},"keyword":{}}],["vehicl",{"_index":1795,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["vend",{"_index":1786,"title":{},"name":{},"text":{"11":{},"23":{},"74":{},"83":{},"128":{},"137":{}},"component":{},"keyword":{}}],["verb",{"_index":1115,"title":{"62":{},"9-13":{},"9-24":{},"58-8":{},"58-9":{},"59-7":{},"71-13":{},"71-24":{},"114-7":{},"114-8":{},"115-7":{},"125-13":{},"125-24":{},"162-7":{},"162-8":{},"163-7":{}},"name":{"62":{}},"text":{"7":{},"9":{},"19":{},"23":{},"44":{},"46":{},"58":{},"59":{},"61":{},"62":{},"63":{},"69":{},"71":{},"72":{},"76":{},"79":{},"80":{},"83":{},"102":{},"104":{},"110":{},"114":{},"115":{},"117":{},"118":{},"123":{},"125":{},"127":{},"130":{},"133":{},"134":{},"137":{},"152":{},"154":{},"159":{},"162":{},"163":{},"165":{}},"component":{},"keyword":{}}],["verbos",{"_index":1123,"title":{"63":{},"118":{},"166":{}},"name":{"63":{},"118":{},"166":{}},"text":{"7":{},"9":{},"23":{},"35":{},"37":{},"51":{},"52":{},"63":{},"69":{},"71":{},"83":{},"92":{},"108":{},"118":{},"123":{},"125":{},"137":{},"144":{},"157":{},"163":{}},"component":{},"keyword":{}}],["veri",{"_index":314,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"20":{},"22":{},"23":{},"32":{},"41":{},"52":{},"55":{},"57":{},"63":{},"64":{},"65":{},"69":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"82":{},"83":{},"90":{},"92":{},"98":{},"108":{},"112":{},"118":{},"120":{},"123":{},"128":{},"129":{},"130":{},"132":{},"136":{},"137":{},"144":{},"157":{},"160":{}},"component":{},"keyword":{}}],["verifi",{"_index":581,"title":{},"name":{},"text":{"3":{},"6":{},"12":{},"14":{},"16":{},"18":{},"19":{},"21":{},"39":{},"68":{},"72":{},"75":{},"77":{},"78":{},"96":{},"122":{},"127":{},"129":{},"131":{},"132":{}},"component":{},"keyword":{}}],["version",{"_index":111,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"19":{},"20":{},"23":{},"24":{},"28":{},"35":{},"37":{},"38":{},"39":{},"41":{},"46":{},"48":{},"50":{},"58":{},"65":{},"66":{},"68":{},"69":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"83":{},"84":{},"88":{},"92":{},"95":{},"96":{},"98":{},"104":{},"106":{},"107":{},"114":{},"120":{},"122":{},"123":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"133":{},"137":{},"138":{},"141":{},"144":{},"147":{},"154":{},"156":{},"162":{}},"component":{},"keyword":{}}],["version=\"1.0",{"_index":3713,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["version=\"3.0",{"_index":2443,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["vert.x",{"_index":2795,"title":{},"name":{},"text":{"24":{},"84":{},"121":{},"138":{}},"component":{},"keyword":{}}],["verticl",{"_index":2251,"title":{},"name":{},"text":{"16":{}},"component":{},"keyword":{}}],["via",{"_index":289,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"12":{},"13":{},"14":{},"16":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"29":{},"31":{},"32":{},"35":{},"37":{},"38":{},"41":{},"44":{},"50":{},"51":{},"52":{},"54":{},"57":{},"62":{},"64":{},"65":{},"66":{},"76":{},"77":{},"78":{},"82":{},"83":{},"85":{},"86":{},"87":{},"92":{},"94":{},"95":{},"98":{},"100":{},"101":{},"102":{},"104":{},"107":{},"108":{},"109":{},"110":{},"113":{},"120":{},"121":{},"130":{},"131":{},"132":{},"136":{},"137":{},"139":{},"140":{},"144":{},"146":{},"147":{},"151":{},"152":{},"154":{},"158":{},"161":{},"164":{}},"component":{},"keyword":{}}
1],["viabl",{"_index":2603,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["view",{"_index":1239,"title":{"23-14":{},"23-15":{},"83-14":{},"137-14":{}},"name":{},"text":{"9":{},"20":{},"23":{},"58":{},"59":{},"71":{},"83":{},"114":{},"115":{},"125":{},"137":{},"162":{},"163":{}},"component":{},"keyword":{}}],["viewpoint",{"_index":39,"title":{},"name":{},"text":{"1":{}},"component":{},"keyword":{}}],["violat",{"_index":2009,"title":{},"name":{},"text":{"13":{},"40":{},"97":{}},"component":{},"keyword":{}}],["virtual",{"_index":1107,"title":{},"name":{},"text":{"7":{},"10":{},"13":{},"20":{},"22":{},"47":{},"69":{},"73":{},"76":{},"82":{},"123":{},"130":{},"136":{}},"component":{},"keyword":{}}],["visibl",{"_index":779,"title":{},"name":{},"text":{"5":{},"16":{},"23":{},"66":{},"83":{},"137":{}},"component":{},"keyword":{}}],["visit",{"_index":841,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["visitor",{"_index":892,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["vital",{"_index":893,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["vm",{"_index":270,"title":{},"name":{},"text":{"2":{},"10":{},"13":{},"65":{},"73":{},"76":{},"120":{},"130":{}},"component":{},"keyword":{}}],["voldemort",{"_index":1774,"title":{},"name":{},"text":{"11":{},"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["voluntarili",{"_index":846,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["vs",{"_index":348,"title":{"3-2":{},"24-4":{},"51-3":{},"52-2":{},"108-2":{},"157-2":{}},"name":{},"text":{"16":{},"100":{},"110":{},"124":{},"151":{},"159":{}},"component":{},"keyword":{}}],["vulner",{"_index":2522,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["w",{"_index":1063,"title":{},"name":{},"text":{"6":{},"68":{},"122":{},"124":{}},"component":{},"keyword":{}}],["wait",{"_index":1140,"title":{},"name":{},"text":{"8":{},"22":{},"37":{},"64":{},"70":{},"75":{},"82":{},"94":{},"126":{},"129":{},"136":{},"146":{}},"component":{},"keyword":{}}],["want",{"_index":198,"title":{},"name":{},"text":{"2":{},"6":{},"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"23":{},"24":{},"37":{},"38":{},"41":{},"43":{},"47":{},"57":{},"58":{},"65":{},"68":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"83":{},"84":{},"88":{},"94":{},"95":{},"98":{},"113":{},"120":{},"122":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"137":{},"138":{},"141":{},"143":{},"146":{},"147":{},"161":{},"164":{}},"component":{},"keyword":{}}],["war",{"_index":400,"title":{"20":{},"81":{},"135":{},"20-2":{},"20-6":{},"28-2":{},"81-3":{},"81-4":{},"124-7":{},"135-3":{},"135-4":{}},"name":{"20":{},"81":{},"135":{}},"text":{"3":{},"5":{},"10":{},"20":{},"28":{},"46":{},"66":{},"73":{},"81":{},"135":{}},"component":{},"keyword":{}}],["warn",{"_index":596,"title":{"4-2":{},"26-10":{}},"name":{},"text":{"3":{},"4":{},"10":{},"11":{},"14":{},"17":{},"26":{},"37":{},"41":{},"67":{},"73":{},"74":{},"77":{},"98":{},"128":{},"131":{}},"component":{},"keyword":{}}],["war’",{"_index":464,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["wasn’t",{"_index":2049,"title":{},"name":{},"text":{"14":{},"23":{},"77":{},"83":{},"131":{},"137":{}},"component":{},"keyword":{}}],["watch",{"_index":2261,"title":{},"name":{},"text":{"17":{},"79":{},"133":{}},"component":{},"keyword":{}}],["way",{"_index":445,"title":{"11-7":{},"74-7":{},"128-7":{}},"name":{},"text":{"3":{},"4":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"27":{},"28":{},"29":{},"37":{},"41":{},"44":{},"48":{},"52":{},"53":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"94":{},"98":{},"100":{},"102":{},"106":{},"119":{},"125":{},"127":{},"128":{},"129":{},"130":{},"132":{},"135":{},"136":{},"137":{},"138":{},"140":{},"141":{},"142":{},"146":{},"151":{},"152":{}},"component":{},"keyword":{}}],["web",{"_index":736,"title":{"28-2":{}},"name":{},"text":{"5":{},"10":{},"11":{},"12":{},"13":{},"17":{},"18":{},"20":{},"22":{},"23":{},"24":{},"34":{},"37":{},"38":{},"50":{},"62":{},"64":{},"66":{},"73":{},"74":{},"75":{},"76":{},"79":{},"81":{},"82":{},"83":{},"84":{},"91":{},"94":{},"107":{},"110":{},"121":{},"128":{},"129":{},"130":{},"133":{},"135":{},"136":{},"137":{},"138":{},"146":{},"159":{}},"component":{},"keyword":{}}],["web.xml",{"_index":465,"title":{},"name":{},"text":{"3":{},"20":{},"81":{},"124":{},"135":{}},"component":{},"keyword":{}}],["web/publ",{"_index":3128,"title":{},"name":{},"text":{"47":{}},"component":{},"keyword":{}}],["webapp",{"_index":2560,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["webapp.xml",{"_index":2554,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["websit",{"_index":828,"title":{"6-9":{},"68-9":{},"122-9":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}
1],["websocat",{"_index":2624,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["websocket",{"_index":350,"title":{"21":{},"64":{},"119":{},"3-3":{},"19-12":{},"21-5":{},"21-9":{},"64-1":{},"64-2":{},"64-3":{},"64-4":{}},"name":{"21":{},"64":{},"119":{}},"text":{"3":{},"4":{},"5":{},"11":{},"12":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"28":{},"33":{},"64":{},"66":{},"79":{},"82":{},"84":{},"96":{},"110":{},"119":{},"121":{},"133":{},"136":{},"138":{}},"component":{},"keyword":{}}],["websocket(\"ws://localhost:8890/ws/echo",{"_index":2633,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["websocketchannel",{"_index":3294,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["weight",{"_index":370,"title":{},"name":{},"text":{"3":{},"7":{},"69":{},"123":{}},"component":{},"keyword":{}}],["weird",{"_index":225,"title":{},"name":{},"text":{"2":{},"44":{},"65":{},"102":{},"120":{},"152":{}},"component":{},"keyword":{}}],["welcom",{"_index":10,"title":{"9-1":{},"11-1":{},"12-1":{},"13-1":{},"18-1":{},"21-1":{},"23-1":{},"71-1":{},"74-1":{},"75-1":{},"76-1":{},"79-1":{},"83-1":{},"125-1":{},"128-1":{},"129-1":{},"130-1":{},"133-1":{},"137-1":{}},"name":{},"text":{"1":{},"6":{},"10":{},"68":{},"73":{},"122":{},"149":{},"166":{}},"component":{},"keyword":{}}],["well",{"_index":141,"title":{},"name":{},"text":{"2":{},"4":{},"10":{},"12":{},"13":{},"14":{},"16":{},"17":{},"19":{},"20":{},"23":{},"24":{},"47":{},"64":{},"65":{},"73":{},"75":{},"76":{},"77":{},"78":{},"84":{},"120":{},"125":{},"129":{},"130":{},"131":{},"132":{},"138":{},"164":{}},"component":{},"keyword":{}}],["went",{"_index":2892,"title":{},"name":{},"text":{"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["weren’t",{"_index":1910,"title":{},"name":{},"text":{"12":{},"32":{},"75":{},"90":{},"129":{},"142":{}},"component":{},"keyword":{}}],["we’d",{"_index":2214,"title":{},"name":{},"text":{"16":{},"23":{},"77":{},"78":{},"83":{},"132":{},"137":{}},"component":{},"keyword":{}}],["we’ll",{"_index":216,"title":{},"name":{},"text":{"2":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"65":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"83":{},"120":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"136":{},"137":{}},"component":{},"keyword":{}}],["we’r",{"_index":1211,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"20":{},"23":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"125":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{}},"component":{},"keyword":{}}],["we’v",{"_index":1204,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"14":{},"16":{},"18":{},"20":{},"21":{},"23":{},"71":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"88":{},"125":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"141":{}},"component":{},"keyword":{}}],["what'",{"_index":2520,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["whatev",{"_index":2798,"title":{},"name":{},"text":{"24":{},"64":{},"75":{},"79":{},"92":{},"110":{},"129":{},"133":{},"144":{},"159":{}},"component":{},"keyword":{}}],["what’",{"_index":1715,"title":{},"name":{},"text":{"11":{},"13":{},"14":{},"16":{},"41":{},"71":{},"77":{},"98":{},"100":{},"131":{},"151":{}},"component":{},"keyword":{}}],["whenev",{"_index":1056,"title":{},"name":{},"text":{"6":{},"13":{},"16":{},"68":{},"76":{},"122":{},"130":{}},"component":{},"keyword":{}}],["wherea",{"_index":3086,"title":{},"name":{},"text":{"44":{},"102":{},"152":{}},"component":{},"keyword":{}}],["wherev",{"_index":2067,"title":{},"name":{},"text":{"14":{},"77":{},"131":{}},"component":{},"keyword":{}}],["where’",{"_index":3573,"title":{},"name":{},"text":{"77":{},"131":{}},"component":{},"keyword":{}}],["whether",{"_index":537,"title":{},"name":{},"text":{"3":{},"9":{},"11":{},"12":{},"32":{},"37":{},"43":{},"51":{},"71":{},"74":{},"75":{},"90":{},"92":{},"110":{},"125":{},"128":{},"129":{},"142":{},"143":{},"144":{},"159":{}},"component":{},"keyword":{}}],["whew",{"_index":1969,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["white",{"_index":3264,"title":{},"name":{},"text":{"59":{},"115":{},"163":{}},"component":{},"keyword":{}}],["whitelist",{"_index":3259,"title":{},"name":{},"text":{"59":{},"115":{},"163":{}},"component":{},"keyword":{}}],["whitespac",{"_index":1961,"title":{},"name":{},"text":{"13":{},"76":{},"130":{}},"component":{},"keyword":{}}],["whole",{"_index":1296,"title":{"11-13":{},"12-15":{}
1,"13-13":{},"16-21":{},"18-12":{},"21-12":{},"23-17":{},"74-13":{},"75-13":{},"76-13":{},"78-11":{},"83-16":{},"128-13":{},"129-13":{},"130-13":{},"132-11":{},"137-16":{}},"name":{},"text":{"9":{},"11":{},"12":{},"13":{},"19":{},"22":{},"23":{},"64":{},"71":{},"74":{},"75":{},"76":{},"82":{},"83":{},"100":{},"121":{},"125":{},"128":{},"129":{},"130":{},"136":{},"137":{},"151":{}},"component":{},"keyword":{}}],["whose",{"_index":1120,"title":{},"name":{},"text":{"7":{},"11":{},"16":{},"41":{},"47":{},"50":{},"69":{},"74":{},"78":{},"98":{},"107":{},"123":{},"128":{},"132":{}},"component":{},"keyword":{}}],["wide",{"_index":1171,"title":{},"name":{},"text":{"8":{},"16":{},"22":{},"43":{},"70":{},"78":{},"82":{},"101":{},"126":{},"132":{},"136":{}},"component":{},"keyword":{}}],["widget",{"_index":2378,"title":{},"name":{},"text":{"19":{},"61":{},"80":{},"117":{},"134":{},"165":{}},"component":{},"keyword":{}}],["wig.jpg",{"_index":1269,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["wild",{"_index":3109,"title":{},"name":{},"text":{"45":{},"52":{},"53":{},"58":{},"59":{},"103":{},"108":{},"114":{},"115":{},"153":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["wildcard",{"_index":1201,"title":{"9-26":{},"71-26":{},"125-26":{}},"name":{},"text":{"9":{},"17":{},"38":{},"42":{},"45":{},"52":{},"58":{},"59":{},"71":{},"99":{},"103":{},"108":{},"114":{},"115":{},"125":{},"150":{},"153":{},"157":{},"162":{},"163":{}},"component":{},"keyword":{}}],["win",{"_index":3111,"title":{},"name":{},"text":{"45":{},"103":{},"153":{},"157":{}},"component":{},"keyword":{}}],["window",{"_index":1433,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"81":{},"83":{},"128":{},"129":{},"130":{},"135":{},"137":{}},"component":{},"keyword":{}}],["wire",{"_index":2141,"title":{"78-8":{},"132-8":{}},"name":{},"text":{"16":{},"19":{},"61":{},"78":{},"80":{},"117":{},"132":{},"134":{},"165":{}},"component":{},"keyword":{}}],["wish",{"_index":2253,"title":{},"name":{},"text":{"17":{},"24":{},"32":{},"41":{},"58":{},"59":{},"90":{},"98":{},"114":{},"115":{},"142":{},"162":{},"163":{}},"component":{},"keyword":{}}],["withdraw",{"_index":824,"title":{"6-7":{},"68-7":{},"122-7":{}},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["withdrawn",{"_index":1030,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["within",{"_index":83,"title":{},"name":{},"text":{"1":{},"3":{},"9":{},"10":{},"13":{},"16":{},"19":{},"26":{},"47":{},"52":{},"53":{},"55":{},"58":{},"61":{},"63":{},"71":{},"72":{},"73":{},"78":{},"80":{},"81":{},"86":{},"108":{},"112":{},"117":{},"118":{},"125":{},"127":{},"132":{},"134":{},"135":{},"160":{},"165":{}},"component":{},"keyword":{}}],["without",{"_index":74,"title":{},"name":{},"text":{"1":{},"5":{},"6":{},"10":{},"11":{},"12":{},"14":{},"16":{},"17":{},"19":{},"20":{},"23":{},"24":{},"27":{},"28":{},"35":{},"37":{},"39":{},"41":{},"43":{},"44":{},"59":{},"61":{},"68":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"80":{},"83":{},"84":{},"94":{},"96":{},"98":{},"102":{},"115":{},"117":{},"122":{},"127":{},"128":{},"129":{},"130":{},"132":{},"134":{},"137":{},"138":{},"146":{},"152":{},"163":{},"165":{}},"component":{},"keyword":{}}],["wizard",{"_index":3884,"title":{},"name":{},"text":{"101":{}},"component":{},"keyword":{}}],["won't",{"_index":1322,"title":{},"name":{},"text":{"9":{},"71":{},"125":{}},"component":{},"keyword":{}}],["won’t",{"_index":281,"title":{},"name":{},"text":{"2":{},"11":{},"12":{},"16":{},"20":{},"65":{},"74":{},"75":{},"76":{},"78":{},"88":{},"120":{},"128":{},"129":{},"130":{},"132":{},"141":{}},"component":{},"keyword":{}}],["word",{"_index":1731,"title":{},"name":{},"text":{"11":{},"13":{},"16":{},"22":{},"74":{},"76":{},"82":{},"128":{},"130":{},"136":{}},"component":{},"keyword":{}}],["wordi",{"_index":3935,"title":{},"name":{},"text":{"125":{}},"component":{},"keyword":{}}],["work",{"_index":125,"title":{"124":{},"2-6":{},"65-5":{},"72-7":{},"120-5":{},"127-7":{}},"name":{},"text":{"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"28":{},"29":{},"32":{},"37":{},"41":{},"51":{},"55":{},"65":{},"66":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"87":{},"90":{},"94":{},"98":{},"110":{},"112":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"135":{},"136":{},"137":{},"138":{},"142":{},"146":{},"159":{}},"component":{},"keyword":{}}],["worker",{"_index":3987,"title":{},"name":{},"text":{"143":{}},"component":{},"keyword":{}}],["workername=node0",{"_index":2308,"title":{},"name":{},"text":{"17":{},"20":{}},"component":{},"keyword":{}}],["workflow",{"_index":129,"title":{"2-10":{},"65-9":{},"120-9":{}},"name":{},"text":{"2":{},"27":{},"65":{},"72":{},"120":{},"127":{}},"component":{},"keyword":{}}],["workload",{"_index":1149,"title":{},"name":{},"text":{"8":{},"70":{},"126":{}},"component":{},"keyword":{}}],["workspac",{"_index":2790,"title":{},"name":{},"text":{"24":{},"84":{},"138":{}},"component":{},"keyword":{}}],["world",{"_index":250,"title":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"name":{"11":{},"12":{},"13":{},"74":{},"75":{},"76":{},"128":{},"129":{},"130":{}},"text":{"2":{},"5":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"59":{},"65":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"83":{},"115":{},"120":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"137":{},"163":{}},"component":{},"keyword":{}}],["world!\\n",{"_index":1740,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"74":{},"75":{},"128":{},"129":{}},"component":{},"keyword":{}}],["worri",{"_index":1612,"title":{},"name":{},"text":{"11":{},"13":{},"16":{},"74":{},"76":{},"78":{},"128":{},"130":{},"132":{}},"component":{},"keyword":{}}],["wors",{"_index":1138,"title":{},"name":{},"text":{"8":{},"9":{},"70":{},"71":{},"124":{},"125":{},"126":{}},"component":{},"keyword":{}}],["worth",{"_index":1561,"title":{},"name":{},"text":{"10":{},"13":{},"37":{},"73":{},"76":{},"94":{},"130":{},"146":{}},"component":{},"keyword":{}}],["wouldn’t",{"_index":1644,"title":{},"name":{},"text":{"11":{},"74":{},"128":{}},"component":{},"keyword":{}}],["wrap",{"_index":415,"title":{"9-27":{},"14-4":{},"18-13":{},"21-13":{},"71-27":{},"77-5":{},"79-11":{},"125-27":{},"131-4":{},"133-11":{}},"name":{},"text":{"3":{},"7":{},"11":{},"16":{},"22":{},"24":{},"32":{},"74":{},"82":{},"84":{},"90":{},"121":{},"128":{},"136":{},"138":{},"142":{}},"component":{},"keyword":{}}],["wrapper",{"_index":1131,"title":{},"name":{},"text":{"7":{},"16":{},"35":{},"39":{},"43":{},"50":{},"51":{},"52":{},"69":{},"78":{},"96":{},"101":{},"107":{},"123":{},"132":{}},"component":{},"keyword":{}}],["wrist",{"_index":1882,"title":{},"name":{},"text":{"12":{}},"component":{},"keyword":{}}],["writablebodi",{"_index":2917,"title":{"35-8":{},"92-8":{},"144-8":{}},"name":{},"text":{"35":{},"49":{},"92":{},"105":{},"144":{},"155":{}},"component":{},"keyword":{}}
1],["writablebodyasync",{"_index":2918,"title":{"35-9":{},"92-9":{},"144-9":{}},"name":{},"text":{"35":{},"49":{},"92":{},"105":{},"144":{},"155":{}},"component":{},"keyword":{}}],["write",{"_index":326,"title":{},"name":{},"text":{"2":{},"10":{},"11":{},"13":{},"14":{},"16":{},"18":{},"19":{},"20":{},"23":{},"24":{},"41":{},"43":{},"49":{},"52":{},"53":{},"55":{},"65":{},"73":{},"74":{},"76":{},"77":{},"78":{},"83":{},"84":{},"98":{},"101":{},"105":{},"108":{},"112":{},"120":{},"128":{},"130":{},"132":{},"137":{},"138":{},"157":{},"160":{}},"component":{},"keyword":{}}],["writer",{"_index":3146,"title":{},"name":{},"text":{"49":{},"105":{},"155":{}},"component":{},"keyword":{}}],["written",{"_index":1165,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"16":{},"49":{},"57":{},"70":{},"74":{},"76":{},"105":{},"113":{},"124":{},"125":{},"126":{},"128":{},"130":{},"155":{},"161":{}},"component":{},"keyword":{}}],["wrong",{"_index":1883,"title":{},"name":{},"text":{"12":{},"16":{},"32":{},"90":{},"142":{}},"component":{},"keyword":{}}],["wrote",{"_index":332,"title":{},"name":{},"text":{"2":{},"65":{},"66":{},"120":{}},"component":{},"keyword":{}}],["ws",{"_index":2617,"title":{},"name":{},"text":{"21":{},"38":{},"64":{},"119":{}},"component":{},"keyword":{}}],["ws/chat",{"_index":3291,"title":{},"name":{},"text":{"64":{}},"component":{},"keyword":{}}],["ws/echo",{"_index":2613,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["ws/send",{"_index":2621,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["ws/websocket",{"_index":2618,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["ws://localhost:8890/ws/echo",{"_index":2629,"title":{},"name":{},"text":{"21":{}},"component":{},"keyword":{}}],["www",{"_index":2401,"title":{},"name":{},"text":{"19":{},"44":{},"61":{},"80":{},"102":{},"117":{},"134":{},"152":{},"154":{},"165":{}},"component":{},"keyword":{}}],["www.pedestal.io",{"_index":836,"title":{},"name":{},"text":{"6":{},"68":{},"122":{}},"component":{},"keyword":{}}],["x",{"_index":259,"title":{},"name":{},"text":{"2":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"41":{},"65":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"98":{},"110":{},"120":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["x509=x509@57f7590f(1,h=[yourservername.com",{"_index":2316,"title":{},"name":{},"text":{"17":{}},"component":{},"keyword":{}}],["x:run",{"_index":1496,"title":{},"name":{},"text":{"10":{},"73":{}},"component":{},"keyword":{}}],["x:test",{"_index":181,"title":{},"name":{},"text":{"2":{},"16":{},"65":{},"78":{},"120":{}},"component":{},"keyword":{}}],["xml",{"_index":1575,"title":{},"name":{},"text":{"11":{},"20":{},"74":{},"81":{},"128":{},"135":{}},"component":{},"keyword":{}}],["xmlns:web=\"http://java.sun.com/xml/ns/javaee/web",{"_index":2438,"title":{},"name":{},"text":{"20":{}},"component":{},"keyword":{}}],["xmlns:xsi=\"http://www.w3.org/2001/xmlschema",{"_index":2436,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["xmlns=\"http://java.sun.com/xml/ns/javae",{"_index":2437,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["xref",{"_index":3925,"title":{},"name":{},"text":{"124":{}},"component":{},"keyword":{}}],["xref:context",{"_index":3998,"title":{},"name":{},"text":{"156":{}},"component":{},"keyword":{}}],["xsi:schemalocation=\"http://java.sun.com/xml/ns/javae",{"_index":2440,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["xss",{"_index":1468,"title":{},"name":{},"text":{"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"23":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"83":{},"110":{},"128":{},"129":{},"130":{},"131":{},"132":{},"137":{},"159":{}},"component":{},"keyword":{}}],["x{io.pedest",{"_index":3039,"title":{},"name":{},"text":{"41":{},"98":{}},"component":{},"keyword":{}}],["y",{"_index":3886,"title":{},"name":{},"text":{"104":{},"106":{},"110":{},"154":{},"156":{},"159":{}},"component":{},"keyword":{}}],["ye",{"_index":1236,"title":{},"name":{},"text":{"9":{},"44":{},"46":{},"48":{},"49":{},"57":{},"58":{},"59":{},"71":{},"102":{},"105":{},"113":{},"114":{},"115":{},"152":{},"155":{},"161":{},"162":{},"163":{}},"component":{},"keyword":{}}],["year",{"_index":419,"title":{},"name":{},"text":{"3":{}},"component":{},"keyword":{}}],["yep",{"_index":3566,"title":{},"name":{},"text":{"76":{},"130":{}},"component":{},"keyword":{}}],["yhwh",{"_index":1773,"title":{},"name":{},"text":{"11":{},"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["yield",{"_index":2933,"title":{},"name":{},"text":{"37":{},"94":{},"146":{}},"component":{},"keyword":{}}],["yike",{"_index":1841,"title":{},"name":{},"text":{"12":{},"75":{},"129":{}},"component":{},"keyword":{}}],["your",{"_index":308,"title":{},"name":{},"text":{"2":{},"13":{},"23":{},"76":{},"83":{},"125":{},"130":{},"137":{}},"component":{},"keyword":{}}],["your_app_server_namespac",{"_index":3730,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["your_appl",{"_index":3746,"title":{},"name":{},"text":{"81":{},"135":{}},"component":{},"keyword":{}}],["yourself",{"_index":2017,"title":{},"name":{},"text":{"13":{},"17":{},"19":{},"75":{},"76":{},"88":{},"129":{},"130":{},"141":{}},"component":{},"keyword":{}}],["you’ll",{"_index":294,"title":{},"name":{},"text":{"2":{},"9":{},"10":{},"11":{},"12":{},"13":{},"16":{},"20":{},"23":{},"65":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"81":{},"83":{},"120":{},"125":{},"127":{},"128":{},"129":{},"130":{},"135":{},"137":{}},"component":{},"keyword":{}}],["you’r",{"_index":177,"title":{"9-4":{},"11-4":{},"12-4":{},"13-4":{},"16-3":{},"17-2":{},"18-4":{},"21-4":{},"23-4":{},"71-4":{},"72-4":{},"74-4":{},"75-4":{},"76-4":{},"78-3":{},"79-4":{},"83-4":{},"125-4":{},"127-4":{},"128-4":{},"129-4":{},"130-4":{},"132-3":{},"133-4":{},"137-4":{}},"name":{},"text":{"2":{},"13":{},"16":{},"17":{},"22":{},"23":{},"65":{},"76":{},"78":{},"82":{},"83":{},"120":{},"130":{},"132":{},"136":{},"137":{}},"component":{},"keyword":{}}],["you’v",{"_index":1585,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"19":{},"23":{},"61":{},"74":{},"75":{},"76":{},"78":{},"80":{},"83":{},"117":{},"128":{},"129":{},"130":{},"132":{},"134":{},"137":{},"165":{}},"component":{},"keyword":{}}],["zero",{"_index":1892,"title":{},"name":{},"text":{"12":{},"14":{},"46":{},"58":{},"59":{},"75":{},"77":{},"104":{},"110":{},"114":{},"115":{},"129":{},"131":{},"154":{},"159":{},"162":{},"163":{}},"component":{},"keyword":{}}],["zip",{"_index":2416,"title":{},"name":{},"text":{"20":{},"81":{},"135":{}},"component":{},"keyword":{}}],["zombi",{"_index":2178,"title":{},"name":{},"text":{"16":{},"78":{},"132":{}},"component":{},"keyword":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"The Pedestal project is committed to providing a welcoming, inclusive, and harassment-free experience for everyone, regardless of background, identity, or experience level. We expect all participants in the Pedestal community — including contributors, maintainers, and users interacting through issues, pull requests, discussions, and other channels — to: Use welcoming and inclusive language Be respectful of differing viewpoints and experiences Accept constructive criticism gracefully Focus on what is best for the community Show empathy towards other community members The following behaviors are unacceptable: The use of sexualized language or imagery, and unwelcome sexual attention or advances Trolling, insulting or derogatory comments, and personal or political attacks Public or private harassment Publishing others' private information, such as a physical or email address, without explicit permission Other conduct which could reasonably be considered inappropriate in a professional setting This Code of Conduct applies within all project spaces, including the GitHub repository, issue tracker, pull requests, and any other communication channels used by the Pedestal community. It also applies when an individual is representing the project in public spaces. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainers. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct/.","title":"Code of Conduct","component":"pede
1stal","version":"0.8","name":"code-of-conduct","url":"/pedestal/0.8/code-of-conduct.html","titles":[{"text":"Our Standards","hash":"_our_standards","id":1},{"text":"Scope","hash":"_scope","id":2},{"text":"Enforcement","hash":"_enforcement","id":3},{"text":"Attribution","hash":"_attribution","id":4}]},"2":{"id":2,"text":"All the code is in one repository, with subprojects for the different modules. Just clone https://github.com/pedestal/pedestal and you are good to go. It’s well known that transitive dependencies are the devil, and Pedestal has many internal and external dependencies. The first time you work on Pedestal, especially a version that has never yet been uploaded to Clojars, you must perform an initialization step; if you fail to do so, you may see tests fails with a ClassNotFoundException exception, related to io.pedestal.servlet.ClojureVarServlet. From the root directory, execute: clj -T:build install From the servlet directory, execute: clj -T:build compile-java :aliases '[:local :servlet-api]' This will compile a few Java classes, including ClojureVarServlet. If you’re working on Pedestal itself, you can test everything with a single command. From the tests directory, execute clj -X:test. Thanks for your interest in helping out with Pedestal! Let this document serve as your guide. If you’re looking for a task to work on, check out the primed label in our issues. Less defined tasks will be marked with the discuss label. Jump in here if you want to be a part of something big. Pedestal is the thinking person’s framework, so every contribution starts with some deep thought. Finished? Alright, your next step is to start a discussion. Create an issue to start a conversation. Tell us what you’re trying to accomplish and how you think you might do it. If all is well, we’ll probably give you the thumbs up to start developing. Of course, if you run into any straight-up bugs or weirdness feel free to skip the thinking (or at least too much of it) and immediately submit an issue. We have an issue template in place that will ask you some details about the platform you are running and how to reproduce the bug. (If you can reproduce it reliably. If not, go ahead and file the issue anyway so we can start looking at it.) Some of the usual stuff we’ll want to know: What happened? \"I manifested a being from the outer dimensions.\" What did you expect to happen? \"Hello, world.\" How can you reproduce it? \"I created a new Pedestal service with the template, then installed some code that Bob Howard gave me.\" What operating system and version are you using? e.g. \"OS X 10.8\" What version of Clojure, Java, and Leiningen or Boot are you using? e.g. \"Leiningen 2.5.2 on Java 1.8.0_u40 Java HotSpot™ 64-Bit Server VM\" What Pedestal version are you using? e.g. \"0.5.0\" or, for a SNAPSHOT: \"0.5.1-SNAPSHOT at d0cf2b4\" Even better, include a link to a gist or repository where we can jump straight to the problem. We love well-tested code. We won’t accept pull requests unless they’re either well tested or sufficiently trivial (such as simple docstring changes). All of our code is tested via GitHub actions, and any pull requests you submit will be too. Pedestal is broken up into several pieces. You’ll usually be working on just one of these pieces at a time, but you will want to test everything. Here is the workflow we recommend: Fork the repo and clone your fork. Create a branch for your feature/bugfix. Make your changes and add tests. Run clj -X:test from the tests directory. Run clj -T:build lint from the root directory. Commit, push, and submit a pull request. We prefer that you sign the commits on any PRs you contribute. It ensures that commits are, in fact, yours. GitHub has a guide for setting up signed commits. When it comes to code contributions there is one more thing we need from you: a signed contributor’s agreement. We know that a contributor’s agreement can be a pain, but we want everyone to be able to use Pedestal, including developers working on projects for very large companies. Many of these big organizations care a lot about the provenance of the code they use — that is they need to know where the code came from and who owns it. The contributor’s agreement simply puts down in writing what we think is the standard open source arrangement: Mostly it says that you are donating code that you wrote to the project. By submitting a signed contributor’s agreement, you are helping to ensure that your work will be available to the largest possible audience. It is an extra step, but there really is not much to executing the Pedestal contributor’s agreement: You just need to complete the following online agreement to assign copyright to Nubank. Nubank Contributor Agreement","title":"Contributing to Pedestal","component":"pede
1stal","version":"0.8","name":"contributing","url":"/pedestal/0.8/contributing.html","titles":[{"text":"Hacking on Pedestal","hash":"_hacking_on_pedestal","id":1},{"text":"Checkout Instructions","hash":"_checkout_instructions","id":2},{"text":"First Time","hash":"_first_time","id":3},{"text":"Testing Pedestal Itself","hash":"_testing_pedestal_itself","id":4},{"text":"Contributing to Pedestal","hash":"_contributing_to_pedestal","id":5},{"text":"Looking for work?","hash":"_looking_for_work","id":6},{"text":"New Features","hash":"_new_features","id":7},{"text":"Bugs","hash":"_bugs","id":8},{"text":"Tests","hash":"_tests","id":9},{"text":"Workflow","hash":"_workflow","id":10},{"text":"Signed Commits","hash":"_signed_commits","id":11},{"text":"Contributor’s Agreement","hash":"_contributors_agreement","id":12}]},"3":{"id":3,"text":"Document design and architecture decisions. A lighter-weight alternative to Architecture Decision Record (ADR). Pedestal has long built its JSON parsing and streaming support on cheshire, but in this release, the code was changed to charred. The rationale here is that cheshire depends on the Jackson Java libraries, which are notoriously challenging to work with, as Jackson comprises a collection of small Java libraries that are frequently at the root of dependency hell. The new (to Pedestal) charred library is self-contained (no dependencies) and as fast as Jackson in tests. Traditionally, Pedestal has always been a layer on top of the Jakarta Servlet API; when deployed as a WAR, Pedestal uses a statically defined HttpServlet class to \"bridge\" into Pedestal. When used in the more common embedded pattern, Pedestal starts a servlet container and configures an HttpServlet inside it. You can see this in the io.pedestal.http namespace, where the service map is used to define a handling function that is ultimately wrapped as a handling servlet that is passed into the code that starts the service. Over the last few years, there have been more Java and Clojure implementations of HTTP handling that do not conform to the Servlet API, such as Http-Kit. Leveraging the Servlet API is important for deploying as a WAR file, so these alternate implementations are not compatible with that style of deployment. But for the far more common embedded service model, where the container is embedded in the Pedestal application and started from within it, these alternate HTTP implementations are quite enticing: simpler, smaller, and with fewer, if any, dependencies. However, this necessitates a split between the HTTP-related parts of Pedestal and those that are more specifically based on the Servlet API. This split manifests in several changes: A new module, io.pedestal/pedestal.servlet was created; it has all the Servlet API dependencies. Servlet-dependent namespaces were moved from the io.pedestal/pedestal.service module to the new io.pedestal/pedestal.servlet module. An alterative way to configure and start an embedded HTTP implementation was created as the Pedestal connector, and the io.pedestal.connector namespace. Support for WebSockets has been evolving over time; originally added as Jetty-specific prior to Pedestal 0.6.0, it was made more general in Pedestal 0.7.0; however it has always operated outside of routing, which has proven even more problematic than for resources. These prior attempts were based around ServerContainer.addEndpoint(), which establishes an addressable WebSocket endpoint, as-if it had been specified in a WAR’s web.xml. The new approach is based on ServetContainer.upgradeHttpToWebSocket(), which still wants to instantiate a fresh instance of the endpoint class, but allows Pedestal to do all the request handling and routing work leading up to this point. Some effort was made to adjust for the fact that WebSocket upgrade requests have no response. In earlier versions of Pedestal, the io.pedestal.test namespace directly contained reify-ed mock implementations of the relevant Servlet API types: HttpServletRequest, HttpServletResponse, and so forth. To some degree, these were abuses of reified types, because almost none of the mocks fully implemented all the necessary methods [1];
1 further, because of limitations to reified types, they did not always inherit common behavior from base classes provided by the Servlet API. By converting these to full Java mock implementations, it is more clear that the mocks match the Servlet API, as failure to do so result in a compilation error. It also makes it clear what is, and is not, implemented on a method-by-method basis. In addition, the Servlet API is, by design, filled with mutable state - managing that mutable state inside a Java class is far simpler than doing so in Clojure code. We feel that the end result is more complete and maintainable, at the cost of adding several large (and mostly empty) Java classes to the build. Using this approach, the FnServlet was also converted from reified type to a Java class; this class is provided by the servlet function, and in an embedded Pedestal application, represents the initial bridge from the Jakarta Servlet API to the Clojure and Pedestal implementations. Routing is a central concept in Pedestal, and so it causes friction when other important concepts are inconsistent with it. One common example is how Pedestal makes file system or class path resources available as endpoints; this happens outside of routing - by default, it occurs just before the router interceptor in the default interceptor stack. Having resources operating outside of routing means that there can be conflicts between resources and routes that go undiagnosed. It also means that it is not possible to reverse the URI for a resource in the way that is possible for endpoints defined in the routing table. In addition, exposing resources as routes has opened up new paths for caching, leading to greater eff
1iciency when serving such resources. Whether support for the interceptor-based approach for resources remains fully supported, or is deprecated, is an outstanding question. The route-based resources are demonstrably faster than interceptor-based. Although Pedestal 0.7 bumped the supported version of Jetty from 9 to Jetty 11, this was only an interrum solution - Jetty 9 ended community support in June 2022, with EOL slated for Feb 2025, but Jetty 11 ended community support in Jan 2024, and EOL in Jan 2025. Thus, there is no reason to continue supporting both Jetty 11 and Jetty 12; Jetty 12 does not yet have a scheduled EOL. So, although initial plans were to support both 11 and 12 in Pedestal 0.8, we have pivoted to only supporting Jetty 12. The original intention of the routing table was that an application would construct a single routing specification at startup; this would be converted to a routing table and combined with a router to form a routing interceptor. This is sufficient for many small projects using Pedestal; for larger users, such as the vast number of services deployed at Nubank, it has proven insufficient. Nubank services are built on common libraries; both the application and library layers each contribute portions of the routing table; this is a haphazard process in Pedestal 0.7 and earlier, because certain APIs assume just a single routing specification for the entire application. In Pedestal 0.8, this was reworked (sacrificing some backwards compatibility) to allow for routing fragments, that can be properly combined, verified for correctness, and utilized by the framework. A common query internally at Nubank, when asked \"How can we make Pedestal better?\" was a call for help with routes, particularily identifying routing conflicts. The existing router implementation, the Prefix Tree Router, has specific rules for dealing with any path conflicts, but did a bad job of emitting warnings about such conflicts. Sawtooth was created to address these concerns; its behavior when conflicts occur is not defined (in the sense that when there are path conflicts, we don’t specify which path will be selected), but Sawtooth was designed to do a good job of identifying routing conflicts. Sawtooth also avoids route conflicts by expressly preferring literal routes over routes with path parameters. Although the original goal was to create a router that was as fast, or faster, than prefix tree, that turned out to be difficult to achieve [2]; Sawtooth is nearly as fast as Prefix Tree, with a difference in micro-seconds per routing execution. The final decision was whether to make sawtooth the default router; this seemed acceptible given its reasonable performance, and improved ergonomics. The other routers, prefix tree included, continue to exist for backwards compatibility reasons, and to support cases where Sawtooth is not the best fit. 1. Clojure allows you to only partially implement an interface in a nominally concrete type. 2. There was a long series of attempted optimizations to address this, which bore very limited fruit.","title":"Decision Log","component":"pedestal","version":"0.8","name":"decision-log","url":"/pedestal/0.8/decision-log.html","titles":[{"text":"JSON Parsing (Jul 2025)","hash":"_json_parsing_jul_2025","id":1},{"text":"HTTP vs. Servlet API (Mar 2025)","hash":"_http_vs_servlet_api_mar_2025","id":2},{"text":"Websocket Routes (Feb 2025)","hash":"_websocket_routes_feb_2025","id":3},{"text":"Testing Revamp (Jan 2025)","hash":"_testing_revamp_jan_2025","id":4},{"text":"Resource Routes (Jan 2025)","hash":"_resource_routes_jan_2025","id":5},{"text":"Jetty 12 (Dec 2024)","hash":"_jetty_12_dec_2024","id":6},{"text":"Routing Fragments (Fall 2024)","hash":"_routing_fragments_fall_2024","id":7},{"text":"Sawtooth Router (Sep 2024)","hash":"_sawtooth_router_sep_2024","id":8}]},"4":{"id":4,"text":"The focus of release 0.8 is to improve and unify routing, and to support Jetty 12 and Http-Kit, but a secondary focus is to remove dead code. Many functions, macros, and even namespaces deprecated in 0.7.0 have been fully removed in 0.8.0. There have been significant changes to routing, including some non-backwards compatible changes to functions, namespaces, and protocols; these changes should only be concerning if you have previously implemented your own routing specifications or routers. Newly deprecated namespaces: io.pedestal.jetty.container io.pedestal.jetty.util These represent functionality that is not well supported by Pedestal, or internal namespaces that should not be used by application code. WebSocket upgrade requests are now routed, like any other request; the prior approach (the ::http/websockets service map key) has been deprecated. In io.pedestal.websocket, the following functions are deprecated: add-endpoint add-endpoints In io.pedestal.interceptor: Supp
1ort for the deferred interceptors (via :interceptor or :interceptorfn metadata) was removed Anonymous interceptors are deprecated All of io.pedestal.http has been deprecated in favor of io.pedestal.connector. The number of warnings concerning deprecated functions has grown considerably in 0.8.0; although in the future many of these functions may actually be removed, it still causes considerable noise (which may drive users to move to the new APIs). However, this also results in a flurry of output when an application is first started, which can be annoying during development. It is now possible to suppress deprecation warnings. The library used for JSON streaming and parsing switched from cheshire to charred. The :array-coerce-fn option that was passed to cheshire (via custom-json-parser) is deprecated. In most cases, Pedestal can now emit a warning the first time a deprecated function, macro, or other bit of functionality is used. Example: WARNING: io.pedestal.interceptor.chain/execute-only is deprecated and may be removed in a future release Call stack: ... clojure.test/test-var -> clojure.test/test-var/fn -> io.pedestal.interceptor-test/fn -> io.pedestal.interceptor.chain/execute-only The warning is followed by the last few stack frames leading up to the deprecated function, to assist you in finding the code that needs to be changed. This output is printed to the console (standard error), and is not logged. The following sections are a non-exhaustive list of code and functionality deprecated in 0.7.0 that may be removed in 0.8.0 or a later release: Release 0.7.0 saw the introduction of the routes-from macro, a new and preferred way of supporting live code changes at the REPL. Previously, it was possible to convert a function call into an interceptor; the point of this was to defer invoking the function until when the route specification was converted to a router (which can happen on every request when in development mode); however, this relied on the use of eval, and is of no real utility given the addition of development mode and live REPL reloading improvements, and so has been deprecated. Normally, a function in an interceptor list is treated as a handler (rather than an interceptor). Alternately, a function with the :interceptor or :interceptorfn metadata would be invoked and expected to return an interceptor (or some other object that could be converted to an interceptor). This is termed a deferred interceptor and has also been deprecated. Handler functions are not deprecated, and are quite useful. The io.pedestal.http.request.lazy and io.pedestal.http.request.zerocopy namespaces have been deprecated; neither is used by Pedestal. The entire pedestal/pedestal.service-tools library has been deprecated. The execute-only function has been deprecated; it is not believed this function is used outside of Pedestal’s test suite. Removing it opens up some options for optimizing chain execution in a later release. Likewise, the newly added queue function replaces accessing the interceptor execution queue using the :io.pedestal.interceptor.chain/queue key; this will also allow future optimizations to chain execution. The namespace io.pedestal.interceptor.trace was deprecated along with many related functions and protocols in the io.pedestal.log namespace related to metrics and tracing; these have been replaced with a new library, pedestal.telemetry. The entire io.pedestal.interceptor.helpers namespace was deprecated; this had been retained since 2016 for backwards compatibility.","title":"Deprecations","component":"pedestal","version":"0.8","name":"deprecations","url":"/pedestal/0.8/deprecations.html","titles":[{"text":"0.8.0","hash":"_0_8_0","id":1},{"text":"Suppressing Warnings","hash":"_suppressing_warnings","id":2},{"text":"JSON Parsing","hash":"_json_parsing","id":3},{"text":"0.7.0","hash":"_0_7_0","id":4},{"text":"Interceptors","hash":"_interceptors","id":5},{"text":"Service","hash":"_service","id":6},{"text":"Service Tools","hash":"_service_tools","id":7},{"text":"Interceptor Chain","hash":"_interceptor_chain","id":8},{"text":"Tracing and Metrics","hash":"_tracing_and_metrics","id":9},{"text":"0.6.0","hash":"_0_6_0","id":10}]},"5":{"id":5,"text":"Pedestal is a sturdy and reliable base for services, APIs, and applications. Pedestal runs in the back-end and can handle anything from tiny 
1static web sites, to traditional page oriented applications, to dynamic single page applications utilizing server-sent events and WebSockets. Pedestal was created to bring Clojure’s key attributes, Focus, Empowerment, and Simplicity, to the domain of Clojure web development. (ns front-page (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk])) (defn- greet-handler [_request] {:status 200 :body \"Hello, world!\"}) (defn start! [] (-> (conn/default-connector-map 8080) (conn/with-default-interceptors) (conn/with-routes #{[\"/greet\" :get greet-handler]}) (hk/create-connector nil) (conn/start!))) Pedestal applications can start tiny, but Pedestal scales up with your needs. This documentation is for Pedestal version 0.8.2-beta-11. Pedestal requires Clojure 1.11 or later. Pedestal is agnostic about the underlying HTTP library; it works with both the Jakarta Servlet API and non-servlet libraries via network connectors; it currently provides connectors for: Jetty 12 and Servlet API 5 Http-Kit ... with more connectors coming. Pedestal runs where Java runs: Applications can be deployed as standalone Clojure applications, or as WAR files in a servlet container. Pedestal integrates with Open Telemetry to give you visibility into your running services. Pedestal automatically uses secure headers, enables cross site request forgery protection, and other best practices. It works with cross-origin resource sharing to allow secure front end applications. A simple Pedestal app fits into a few lines of Clojure; Pedestal includes a deps-new template for getting you started. When you need more power, it’s ready for you. Pedestal embraces testability as a first-class concern. The core interceptor model breaks request processing into small pieces that are simple, often free of side effects, and therefore easy to test; then lets you stack those pieces up to form your full application. Pedestal provides a testing API that can fully exercise your synchronous and asynchronous code without actually starting a web server. Pedestal supports creating dynamic applications with server-sent events and WebSockets. Pedestal leverages Clojure’s extraordinary asynchronous capabilities and Java’s efficient non-blocking IO runtime. Pedestal is built from components that connect via protocols, giving you the flexibility to swap out any part with something customized to your application.","title":"What is Pedestal?","component":"pedestal","version":"0.8","name":"index","url":"/pedestal/0.8/index.html","titles":[{"text":"Features","hash":"_features","id":1},{"text":"Ready for Production","hash":"_ready_for_production","id":2},{"text":"Secure By Default","hash":"_secure_by_default","id":3},{"text":"Easy Ramp Up","hash":"_easy_ramp_up","id":4},{"text":"Testable","hash":"_testable","id":5},{"text":"Streaming","hash":"_streaming","id":6},{"text":"Composable and Extensible","hash":"_composable_and_extensible","id":7}]},"6":{"id":6,"text":"Nubank NA (\"Nubank NA,\" \"we,\" or \"us\") provides the website located at www.pedestal.io (the \"Website\"). We value and respect your privacy. This \"Privacy Policy\" demonstrates our commitment to your right of privacy and explains how we use, disclose and protect the Personal Information (as defined below) of users (\"you,\" \"User,\" or \"your\") of the Website. By visiting the Website, you expressly consent to the use and disclosure of your Personal Information as described below. If you do not agree with the terms set out in this Privacy Policy, please do not visit the Website. Personal information is data that can be used to identify or contact a single person (\"Personal Information\"). We will only collect or receive Personal Information when you voluntarily provide information to us, such as when you contact us, using the contact information provided in this Privacy Policy, as described in more detail below: Information You Voluntarily Choose to Provide The Website does not require you to submit any Personal Information to access or use it, however, you may contact us through email, using the email address provided in this Privacy Policy, and provide us with Personal Information over the course of the communication. You agree not to submit information that contain or reference, and understand and agree we have no obligations or liability with respect to: (i) information that can identify an individual in relation to any past, present, or future physical or mental health or condition, provision of health care, or payment for the provision of health care, including, but not limited to, diagnoses, treatment information, medical test results, and prescription information; and/or (ii) an individual’s race, ethnic origin, political opinions, religious or philosophical beliefs, genetic data, biometric data, sex life or sexual orientation. Without limiting the generality of the foregoing, you acknowledge in no event will Nubank NA be liable to you or any third party for any direct, indirect, incidental, lost profits, remote, cover, exemplary, consequential, special, or punitive damages, regardless of the foreseeability of such damages resulting from your submission of any such information. We use your Personal Information: - to provide the services or information you request; - to communicate with you regarding your use of the Website; - to protect our rights and the rights of our Website visitors; and - to protect the vital interests of the Company, you, or our other Website visitors (for example, in the event of an emergency). We do not use cookies on the Website. Nubank NA will not disclose your Personal Information to any third parties except: - to our professional advisers, accountants, insurers, lawyers and auditors on a confidential basis; - if Nubank NA or its assets are or may be acquired by a third party, the information may be provided to that third party and its advisors; - in exceptional circumstances, Nubank NA may be required or permitted by law to disclose Personal Information, for example where such disclosure is necessary to meet any applicable law, regulation, legal process or other legal obligation; detect, investigate and help prevent security, fraud or technical issues; and/or protect the rights, property or safety of Nubank NA, our employees or other users of the Website.; or - otherwise with your consent. Nubank NA does not sell your Personal Information. Nubank NA may disclose your Personal Information to Nubank NA’s parent company, affiliated legal entities, subsidiaries and any other businesses with whom we are under common corporate control (collectively the \"Affiliates\"). All of our Affiliates that receive your information from us will comply with the terms of this Privacy Policy with respect to their use and disclosure of such information. Nubank NA is committed to keeping your information secure. We endeavor to take all reasonable steps to keep secure any information that we hold about you, and to keep this information accurate and up to date. Your information is stored on secure servers that are protected in controlled facilities. Other than the sharing of information outlined in this Privacy Policy, personally identifiable information is not accessible by the public, and we require our employees and data processors to respect the confidentiality of any Personal Information. We do not direct our Website or services to children (usually considered to be under the age of 13, depending on the country where you reside). We also do not intentionally collect Personal Information from children through our Website. If you are the parent or guardian of a child and you believe that we have inadvertently received Personal Information about that child, please contact us as described 
1in the Contact Us section of this Privacy Policy and we will take reasonable steps to remove the information from our records. If at any time you want to request, update, correct or remove Personal Information, you are welcome to submit a request to [email protected]. We may ask you to verify your identity before we can act on your request. If you are aware of changes or inaccuracies in your Personal Information, you should inform us of such changes so that our records may be updated or corrected. We may reject requests that are unreasonably repetitive, require disproportionate technical effort (for example, developing a new system or fundamentally changing an existing practice), risk the privacy of others, or would be extremely impractical (for instance, requests concerning information residing on backup systems). Where we can provide information access and correction, we will do so, except where it would require a disproportionate effort. We aim to maintain our services in a manner that protects information from accidental or malicious destruction. Because of this, after you delete information from our services, we may not immediately delete residual copies from our active servers and may not remove information from our backup systems. Where consent is required for our use of your Personal Information as described herein, you have the right to withdraw or decline your consent and cease your use of the Website. If you decide to withdraw your consent, such withdrawal will not affect the lawfulness of processing based on consent before such withdrawal. California Civil Code Sec. 1798.100, et seq. (also known as the California Consumer Privacy Act of 2018) (\"CCPA\") provides certain rights to California residents regarding their Personal Information. A California resident has the right to request that we disclose certain information, including: (1) the categories of Personal Information we have collected about that California resident, (2) the categories of sources from which the Personal Information is collected, (3) the business or commercial purpose for collecting or selling the Personal Information, (4) the categories of third parties with whom Nubank NA shares Personal Information, and (5) the specific pieces of Personal Information we have collected about the resident. A California resident has the right to request that we delete his/her Personal Information. Finally, a California resident has the right not to be discriminated against for exercising his/her privacy rights under the CCPA. You can request such Personal Information and change your Personal Information by emailing us at [email protected]. Pursuant to California Civil Code Section 1789.3, California users are entitled to the following consumer rights notice: California residents may reach the Compliant Assistance Unit of the Division of Consumer Services for the California Department of Consumer Affairs by mail at 1625 North Market Blvd., Sacramento, CA 95834, or by telephone at (916) 445-1254 or (800) 952-5210. The Website contains links to other websites. These third-party websites have separate and independent privacy policies. The privacy policies and applicable terms of use of the third-party websites will govern your interaction with such third-party websites. We encourage you to review the privacy policy of linked sites, as Nubank NA is not responsible or liable for the practices, content, and/or privacy policies of those third-party websites. Nonetheless, we seek to protect the integrity of our Website and welcome any feedback about these third-party websites. We will retain your Personal Information only for as long as reasonably necessary for the purposes set out above, considering criteria such as applicable rules on statute of limitations, legal requirements and the duration of your use of the Website and receipt of our services. This section of the Privacy Policy applies only if you use the Website or services covered by this Privacy Policy from a country that is a Member State of the European Union and supplements the information in this Privacy Policy. We process information defined as personal data under applicable data protection law (\"Personal Data\") if provided by you and/or for the purposes set out in this Privacy Policy, as described above. - Legal Basis for Processing Personal Data: Our legal basis to process Personal Data, such as for the purposes listed above in the \"How Do We Use Your Personal Information?\" section, includes processing that is: - necessary to comply with legal requirements (for example, to comply with applicable accounting rules and to make mandatory disclosures to law enforcement); - protection of the vital interests of a natural person (for example, in the event of an emergency); - necessary for our legitimate interests (for example, to manage our relationship with you and to improve the Website and our services); and - based on your consent (for example, to communicate with you about the Website and services, and to provide you with any information that you may request), which may subsequently be withdrawn at any time (by contacting us at [email protected]) without affecting the lawfulness of processing based on consent before its withdrawal. In some instances, you may be required to provide us with Personal Data for processing as de
1scribed above, in order for us to be able to provide you all of our services, and for you to use all the features of the Website. Please be aware your Personal Data may be collected, managed, transferred to, processed, and stored or accessed in a country different other than your country of residence. In addition, we may make other disclosures of your Personal Data outside of your country of residence, for example, in the event we receive a legal or regulatory request from a foreign law enforcement body. We will always take steps designed to ensure any transfer of such information outside your country of residence is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. Data protection laws in any such country may be different from those laws of your country of residence. By visiting the Website and accepting this Privacy Policy, you consent to the transfer of your information, including Personal Data, to such country(ies) as set forth in this Privacy Policy. From time to time, Personal Information we collect from data subjects in the European Economic Area or Switzerland (\"EEA or Switzerland\") may be transferred to, stored, processed or accessed by us outside of the EEA or Switzerland, for example, the United States. We will always take steps to ensure any transfer of such information outside the EEA or Switzerland is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. If you would like to find out more about these safeguards in respect of processing your Personal Data and the means by which you can obtain a copy of them, please contact us at [email protected]. Your Rights: In addition to the rights to access, amend or delete your Personal Data as set out above, you may be entitled, in accordance with applicable law, to object to or request the restriction of processing of your Personal Data, and to request portability of your own Personal Data. Requests should be submitted to [email protected]. If you consider that our processing of your Personal Data infringes applicable law, you may lodge a complaint with a competent supervisory authority, which may be the authority in your Member State of residence or work. Nubank NA’s Website and activities may continue to grow and change. Because of this, from time to time, our Privacy Policy will be reviewed and revised. You should check this page occasionally to ensure you are familiar with those changes. Whenever we change our Privacy Policy we will post an updated version on our Website, including the last date of revision. This Privacy Policy was last revised on August 25, 2021. If you have any questions about how we handle your Personal Information and protect your privacy, please feel free to contact us at [email protected] or call us at 919.283.2748. You may also mail requests to: Nubank NA 101 W. Chapel Hill Street., Suite 300 Durham, NC 27701 USA","title":"PRIVACY POLICY","component":"pedestal","version":"0.8","name":"privacy","url":"/pedestal/0.8/privacy.html","titles":[{"text":"WHAT INFORMATION DO WE COLLECT?","hash":"_what_information_do_we_collect","id":1},{"text":"HOW DO WE USE YOUR PERSONAL INFORMATION?","hash":"_how_do_we_use_your_personal_information","id":2},{"text":"HOW DO WE USE COOKIES?","hash":"_how_do_we_use_cookies","id":3},{"text":"WHEN MAY A THIRD PARTY RECEIVE ACCESS TO YOUR PERSONAL INFORMATION?","hash":"_when_may_a_third_party_receive_access_to_your_personal_information","id":4},{"text":"HOW DOES Nubank NA KEEP YOUR INFORMATION SECURE?","hash":"_how_does_nubank_na_keep_your_information_secure","id":5},{"text":"CHILDREN’S PRIVACY","hash":"_childrens_privacy","id":6},{"text":"GAINING ACCESS TO, UPDATING DELETING YOUR INFORMATION OR WITHDRAWING CONSENT","hash":"_gaining_access_to_updating_deleting_your_information_or_withdrawing_consent","id":7},{"text":"CALIFORNIA PRIVACY RIGHTS","hash":"_california_privacy_rights","id":8},{"text":"LINKS TO OTHER WEBSITES","hash":"_links_to_other_websites","id":9},{"text":"DATA RETENTION","hash":"_data_retention","id":10},{"text":"INTERNATIONAL USERS & USERS FROM THE EUROPEAN UNION","hash":"_international_users_users_from_the_european_union","id":11},{"text":"FUTURE REVISIONS","hash":"_future_revisions","id":12},{"text":"CONTACT US","hash":"_contact_us","id":13}]},"7":{"id":7,"text":"Understanding Pedestal comes with the challenge of unpacking a number of terms - some specific to Pedestal, others inherited from the underlying technologies Pedestal extends from. clj Also called \"tools.deps\", this is the name of a build tool for Clojure. clj is more recent than Leiningen and has a very different model, but can perform the same key functions: downloading dependencies (from Maven repositories and elsewhere) and running Clojure programs. Projects with a deps.edn file at the root are built using clj. connector map The connector map is used to configure a Pedestal connector, primarily in terms of interceptors and routing. context map The context map contains data about the ongoing request; a context map is passed to interceptors, which often return a modified copy of it. Ultimately, the incoming request map and response map are stored in the context map, along with much other data internal to Pedestal. core.async The core.async library is a Clojure extension that allows for efficient and expressive concurrent processing systems. The central artifact is a channel, a kind of data pipe that allows information to be conveyed between concurrently running light-weight processes. handler A simple function that is passed a request map and returns a response map; handlers are converted to interceptors internally. interceptor An interceptor is the basic unit of work in Pedestal, a combination of specific functions related to handling a request or generating a response. interceptor chain A pipeline of interceptors, setup and executed by a chain provider. Leiningen Leiningen is a popular and pervasive Clojure build tool. Projects with a project.clj file at the root are built using Leiningen, which can download depen
1dencies from a Maven repository on demand. network connector A library, such as Http-Kit, responsible for directly handling HTTP requests, acting as an entrypoint into Pedestal. Maven repository A source of Java and Clojure packages, used by the Maven build tool, but also by virtually all other similar tools in the Java ecosystem. Pedestal connector Responsible for starting and managing a network connector so that incoming requests can be handled using the interceptor chain. A different Pedestal connector is used for each different network connector. REPL The Read Eval Print Loop: reading Clojure input, evaluating it, and printing the result. Clojure excels at interactive development. request map A map of data about the incoming HTTP request, including HTTP verb, URL, and parameters; this is all the information needed to route and process the request, and is available inside the context map. response map A map of data used to construct and send the HTTP response. The response map is stored into the context map to trigger the sending of the response. route A mapping of an HTTP Verb (such as GET or POST) and a URL path to a specific set of interceptors. router A router is one of several elements related to routing; from context it will be one of: A function that constructs a routing function from a routing table The routing function itself The routing function wrapped as an interceptor routing The process of mapping an incoming request to a route, using a router and a routing specification. routing interceptor An interceptor whose job is to perform routing; the routing interceptor is constructed from the routing table and a router implementation. routing specification A concise list of routing data, in one of several formats. One or more routing specifications are converted into a routing table. routing table A verbose, expanded version of routes that can be used by a router. server A server is responsible for low-level communication with HTTP clients; A server map is created from the service map, and can be used to start and stop the server. Many examples use the Jetty 12 server implementation. servlet The standard Java term for a request handler - a servlet operates in the context of a server and processes incoming requests. In Pedestal, a generic servlet is created and configured, and feeds incoming requests into a pipeline of interceptors. SLF4J The Simple Logging Facade for Java, a generic wrapper around several competing approaches to generating logging output. Pedestal’s io.pedestal.log logging support works with SLF4J.","title":"Terminology","component":"pedestal","version":"0.8","name":"terms","url":"/pedestal/0.8/terms.html","titles":[]},"8":{"id":8,"text":"Your servlet container has a maximum number of request processing threads available; this is configurable, but (for example) the Jetty container defaults to 50 threads. That means if your application receives more than 50 concurrent requests, the later requests will be queued for later execution; this means that throughput for any request gets worse. Many applications spend much of their time waiting: waiting to read from disk, or a database, or for a response from some other backend service; in normal processing, than means the request processing thread is blocked, doing nothing but taking up space. Here is a synchronous handler that needs to wait for something to happen: (defn takes-time [request] {:status 200 :body (lengthy-computation request)}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name ::takes-time]})) Because this handler is synchronous, requests for /takes-time will block until the call to lengthy-computation completes, stopping the servlet container thread from handling other work. If you need to support more concurrent requests on a single server, and your workload is primarily I/O bound, then you should consider asynchronous request processing. With asynchronous request processing, a request can be unbound from a specific request processing thread. While some background work is happening (the disk or network I/O), the request processing thread can be used for some entirely different request. When the background work completes, the processing of the request resumes from where it left off. The support for all of this is based on Clojure’s core.async library. (def takes-time {:name ::takes-time :enter (fn [context] (go (let [result (<! (lengthy-computation (:request context)))] (assoc context :response {:status 200 :body result}))))}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name :takes-time]})) So, instead of providing a handler for the /takes-time route, we are providing an interceptor, as that enables more options. A handler is passed a request map and returns a response map, and must al
1ways behave synchronously. By contrast, an interceptor is more involved; an interceptor is passed a context map (that itself contains a :request map), and returns the same, or a modified context map (perhaps containing a :response map). And, for async processing, the interceptor can instead return a core.async channel that conveys the modified context map, when it is ready. A channel is somewhat akin to a promise…​ it represents a computation that will operate concurrently and complete at some point in the future. A core.async go block represents a deferred computation; a go block immediately returns a channel; when the body of the go block completes its execution, the result will be written into the channel. In this example, we assume that lengthy-computation has been changed to also return a channel; the core.async <! function will wait for that value to be delivered, before the context is rebuilt and written to the output channel. Pedestal recognizes the difference here …​ it’s getting back a channel, not a map, and can return the request processing thread to the container. When the new context, including the :response map, is delivered, Pedestal will acquire a request processing thread and resume processing the request. This facility allows a single value to be placed on a channel per interceptor; for more extensive use of channels for SSE, see Server-Sent Events. For more about streaming, see Streaming Responses. In the above example, there was just a single interceptor for the route. Most applications will have many interceptors for any particular route to cover a wide range of cross-functional concerns. Importantly, any of these interceptors can \"go async\" by returning a channel instead of a context map. This has implications for all following interceptors in the interceptor chain; those interceptors will not execute in the original request processing thread, but instead will execute in a core.async dispatch thread. These dispatch threads are pooled, but the default is a maximum of eight dispatch threads. An interceptor that blocks may then block a dispatch thread. If this happens across enough requests, then eventually all dispatch threads could be blocked, and no code inside any go block will execute - your server will be jammed up, consuming little or no CPU but not responding to incoming requests. So be cautious: ensure that only async processing occurs in an interceptor that may follow an async interceptor. Quick calculations are perfectly fine, but make sure not to do any blocking operations, such as disk or network I/O, inside any such interceptors.","title":"Async Request Processing","component":"pedestal","version":"0.8","name":"async","url":"/pedestal/0.8/guides/async.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"Synchronous Handler","hash":"_synchronous_handler","id":2},{"text":"Triggering Async","hash":"_triggering_async","id":3},{"text":"Async Interceptor Chains","hash":"_async_interceptor_chains","id":4}]},"9":{"id":9,"text":"This guide takes us past the basics of getting started. It deals with a part of Pedestal that you will touch quite often: routing. A key problem in any backend service is directing incoming requests to the right bit of code. As an industry, we’ve settled on the term \"routing\" to describe how a service understands a request’s URL and invokes a matching function. There’s a flip side to routing, though, which is generating URLs to put into links and hrefs. If we’re not careful, link generation can create hard-to-find coupling between different parts of a service. Pedestal addresses both parts of this problem with the same feature. After reading this guide, you will be able to: Define routes Parse parameters from URLs Connect routes to handlers Apply interceptors along a route Use constraints to ensure a route is invoked correctly Generate links for a route during a request to that route Generate links for other routes This guide assumes that you understand HTTP requests and URLs. In particular, we make no effort to explain URL-encoding or query strings. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or hop over to the mailing list and raise your hand there. In Your First API, we defined a handful of routes for a basic REST style API. It’s time to dig deeper and understand what we can do with this flexible and powerful part of Pedestal. We will work with routes that: Serve static resources Use multiple parameters Use wildcards to match subtrees Support multiple verb
1s We will also generate URLs from routes and parameters. This guide will use Leiningen to generate and build a template project. If you haven’t already installed it, please take a few minutes to set it up. Since Pedestal was first unveiled, we’ve gone through a couple of iterations on the routing syntax. So far, these iterations have all been additive. Some of the older examples may still use the older, \"terse\", syntax. All newer examples, such as this one, use the table syntax; it’s much simpler, and easier to understand at a glance. The older syntaxes (yes, there’s an even older one called \"verbose\") are still supported; if you come across very old code, check the Routing Quick Reference for full details. The simplest route has just a URL, an HTTP verb, and a handler: [\"/users\" :get view-users] In this case, view-users is anything that can be resolved as an interceptor: An Interceptor record A request handler function (really a special case of interceptor) A few other cases still maintained for backwards compatibility that we’ll ignore There’s nothing special about using a symbol in the handler’s position. You could call a function that returns an interceptor: [\"/users\" :get (make-view-users-handler db-conn)] That call to make-view-users-handler is nothing special. Clojure will evaluate it when you build the route table. Just make sure it returns something that can be resolved as an interceptor. That also means you can use anonymous functions as handlers. Here’s another way we could implement an \"echo\" function: [\"/echo\" :get (fn [request] {:status 200 :body request}) :route-name :echo] Every route must have a route name, but in most cases, Pedestal can \"figure out\" a reasonable value. Here,the route name clause is necessary here because an anonymous function has nothing that Pedestal can use to infer a route name. The URL in a route doesn’t have to be just text, often important request information is included in the URL, rather than query parameters. The URL from the route is actually pattern used to match URLs. The URL pattern can include any number of segments to capture as parameters. Any segment that looks like a keyword will be captured in the :path-params map in the request. So the route: [\"/users/:user-id\" :get view-users] will match any of the following requests: /users/abacab /users/miken /users/12345 /users/mike%20n When the request reaches our view-users handler, it will include a map like this: {:path-params {:user-id \"miken\"}} The path parameters are always delivered as strings. The strings are HTTP decoded for you, but are not otherwise converted. A single path parameter only matches one segment of a URL. One segment is just the part between / characters. So the route above will not match /users/miken/profile/photos/blue-wig.jpg. What if our user IDs are all numeric? It would be convenient if the route would only match when the URL meets a valid pattern in the path parameters. That’s the job of Constraints, discussed below. What if you actually do want to match any number of segments after a path? In that case, you use a catch-all parameter. It looks like a path parameter, except it has an asterisk instead of a colon: [\"/users/:user-id/profile/*subpage\" :get view-user-profile] Now this route does match the URL /users/miken/profile/photos/blue-wig.jpg and, as you might have guessed, the matching segments are still delivered as path parameters in the request map: {:path-params {:user-id \"miken\" :subpage \"photos/blue-wig.jpg\"}} As the subpage path parameter demonstrates, catch-all parameters are strings containing the remaining path segments. Using this kind of parameter requires that there’s some data to match; a URL of /users/miken/profile or /users/miken/profile/ will not match, because there’s no data to extract as the :subpage path parameter. You don’t need to do anything in the route to capture query parameters. They are automatically parsed and passed in the request map, under the :query-params key. Like path parameters, query parameters are always delivered as HTTP-decoded strings. For example, an HTTP request with for the URL: /search?q=blog will have this in the request map: {:query-params {:q \"blog\"}} So far, all our examples have used :get as the HTTP verb. Pedestal supports the following verbs: :get :put :post :delete :patch :options :head :any These should look familiar, except for :any. The :any keyword is a wildcard that allows a route to match any request method. That gives a handler the opportunity to decide whether a request method is allowed or not. So far, all our examples have used just one handler function. But one of Pedestal’s key features is the ability to create a chain of interceptors. The route table allows you to put a vector of interceptors (or things that resolve to interceptors) in that third position. [\"/user/:user-id/private\" :post [inject-connection auth-required (body-params/body-params) view-user]] In this example, inject-connection and auth-required are application-specific interceptors. body-params is a Pedestal function that returns an interceptor. view-user is a request-handling function. When a request matches this route, the whole vector of interceptors gets queued into the context for later execution (after any interceptors already in the queue). Because the table syntax is just data, it is easy to more dynamically construct the list of interceptors: ;; Make a var with the common stuff (def common-interceptors [inject-connection auth-required (body-params/body-params)]) ;; inside a call to table-routes [\"/user/:user-id/private\" :post (conj common-interceptors view-user)] As a convenience, you can supply a map of constraints, in the form of regular expressions, that must match in order for the whole route to match. This handles that case from before, where we wanted to say that user IDs must be numeric. You tell the router about constraints by supplying a map from parameter name to regular expression: [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] Notice the :constraints keyword. That is required to tell the router that the following map is to be treated as constraints. Like the interceptor vector, the constraint map is just data. Feel free to build it up however you like…​ it doesn’t have to be a map literal in the route vector: (def numeric #\"[0-9]+\") (def user-id {:user-id numeric}) [\"/user/:user-id\" :get view-user :constraints user-id] [\"/user/:user-id\" :post update-user :constraints user-id] The thing about constraints is that they are not used to distinguish between otherwise identical routes. They are not for disambiguation. Rather, constraints are used to reject requests that do match the rest of the route but do not match the constraints. What happens after such a rejection depends on which router is being used. Router Behavior on Failed Constraint Sawtooth Abort and return a 404 response Prefix tree Abort and return a 404 response Map tree Abort and return a 404 response [1] Linear search Continue searching the remaining routes Be cautious about using path constraints. Experience has shown that constraints result in a worse experience for users of your API. Generally, it is better to validate path and query parameters inside your route (in an interceptor or handler for the specific route) so that proper errors could be returned to the client, rather than a generic, and perhaps misleading, 404 NOT FOUND response. As an alternative to using path constraints, you could define a validating interceptor: (def user-id-vali
1dator (interceptor {:name ::user-id-validator :enter (fn [context] (if (re-matches #\"[0-9]+\" (get-in context [:request :path-params :user-id])) context (assoc context :response {:status 400 :body \"user-id must be numeric\"})))})) This interceptor could be placed into the interceptor list for any route that has a user-id in the path, and will uniformly abort any request (with a 400 Bad Request status code) if the user-id is not numeric. Every route must have a unique name. Pedestal uses route names for the flip side of route matching: URL generation. You can supply a route name in the route vector: [\"/user\" :get view-user :route-name :view-user-profile] A route name must be a keyword. Most commonly, it is a namespace-qualified keyword. The route name comes before :constraints, so if you have both, the order is as follows Path - String Verb - keyword (e.g., :get) Interceptors - interceptor, handler function, or vector of interceptors Route name clause (:route-name your-route-name) Constraints clause (:constraints constraint-map) You’ll notice that most of the examples above omit the :route-name clause. When there is no explicit route name, Pedestal will pick one for you. It uses the :name of the last interceptor in the interceptor vector. Route names must be unique, so if you use the same interceptor in the last position in multiple routes, you’ll have to supply the route name explicitly. Suppose you have a single interceptor or handler that deals with multiple verbs on the same path. Maybe it’s a general API endpoint function or a function created by another library. If you just try to make multiple rows in a table, you will get errors: ;;; This won't work; both rows get the same automatic ;;; route name and an exception is thrown. [\"/users\" :get user-api-handler] [\"/users\" :post user-api-handler] The best approach is to simply provide a unique route name to each route that shares the handler. [\"/users\" :get user-api-handler :route-name :users-view] [\"/users\" :post user-api-handler :route-name :user-create] In addition to routing incoming requests, the routing data is also available to the application for URL generation. You can request a URL for a given route by name and specify parameter values to fill in. This section describes URL generation, starting with how routes are named. The url-for-routes function takes the expanded routing table and creates and returns a function that uses the data to craft URL strings. The function accepts a route name and optional arguments and returns a URL that can be used in a hyperlink. (def app-routes (route/expand-routes (1) (table/table-routes (2) [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :route-name :show-user-profile] [\"/user/:user-id/timeline\" :post post-timeline :route-name :timeline] [\"/user/:user-id/profile\" :put update-profile]]))) (def url-for (route/url-for-routes app-routes)) (url-for :user-search-form) ;; => \"/user\" (url-for :view-user :params {:user-id \"12345\"}) ;; => \"/user/12345\" 1 url-for-routes requires a fully expanded routing table. 2 Explicitly calling table-routes is a choice; the alterative is to put the routes in a set. Any leftover entries in the :params map that do not correspond to path parameters get turned into query string parameters. If you want more control, you can give the generator the specific arguments :path-params and :query-params. The url-for-routes function provides a global URL generator. Within a single request, the request map itself can provide a URL generator. This generator allows you to create absolute or relative URLs depending on how the request was matched. When the routing interceptor matches a request to a route, it creates a new URL generator function that closes over the request map. This function is stored in three places: In the context map, using the :url-for key In the request map (inside the context), using the same :url-for key In a private dynamic variable in the io.pedestal.http.route namespace The private variable allows the url-for function to operate from any interceptor (or handler) code, after routing has taken place. url-for only returns URLs. The function form-action-for-routes takes a route table and returns a function that accepts a route-name (and optional arguments) and returns a map containing a URL and an HTTP verb. (def form-action (route/form-action-for-routes app-routes)) (form-action :timeline :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/:user-id/timeline\"} A form action function will (by default) convert verbs other than GET or POST to POST, with the actual verb added as a query string parameter named _method: (form-action :update-profile :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/12345/profile?_method=put\"} This behavior can be disabled (or enabled for url-for functions) and the query string parameter name can be changed. All of these settings can be modified when an url-for or form-action function is created or when it is invoked. The _method parameter is used for verb smuggling. The Your First API guide goes into greater detail about routes inside a Pedestal application, showing how to build up a number of routes, using different paths and HTTP methods, into a consistent, REST API. The Map Tree Router is by far the fastest router in Pedestal. Part of how it gets that speed, though, is by forbidding the use of dynamic path segments like wildcards and path parameters. If your routes include any of them, then even if you request the map tree router, Pedestal will fall back to using the (still pretty fast) prefix tree router. This guide covered route definitions, from the most basic possible case all the way to the most complex. It demonstrated the use of the table routing syntax and showed how to use them in a real service. Finally, it demonstrated the use of wildcard routes and discussed when to use them and their tradeoffs. For more details, see the Routing Quick Reference. 1. Map tree doesn’t support path parameters but can still constrain on query parameters.","t
1itle":"Defining Routes","component":"pedestal","version":"0.8","name":"defining-routes","url":"/pedestal/0.8/guides/defining-routes.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"A Note About Routing Syntax","hash":"_a_note_about_routing_syntax","id":7},{"text":"Defining a Route: The Bare Minimum","hash":"_defining_a_route_the_bare_minimum","id":8},{"text":"Building handlers","hash":"_building_handlers","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Catch-all Parameters","hash":"_catch_all_parameters","id":11},{"text":"Query Parameters","hash":"_query_parameters","id":12},{"text":"Verbs","hash":"_verbs","id":13},{"text":"Interceptors","hash":"_interceptors","id":14},{"text":"Common interceptors","hash":"_common_interceptors","id":15},{"text":"Constraints","hash":"constraints","id":16},{"text":"Considering Constraints","hash":"considering-constraints","id":17},{"text":"Route names","hash":"_route_names","id":18},{"text":"Default Route Names","hash":"_default_route_names","id":19},{"text":"Using Route Names to Distinguish Handlers","hash":"_using_route_names_to_distinguish_handlers","id":20},{"text":"Generating URLs","hash":"_generating_urls","id":21},{"text":"URL generation","hash":"_url_generation","id":22},{"text":"Request-specific URL generation","hash":"_request_specific_url_generation","id":23},{"text":"Form Route Verbs","hash":"_form_route_verbs","id":24},{"text":"Using Routes in a Service","hash":"_using_routes_in_a_service","id":25},{"text":"Restrictions on Wildcards and Path Parameters","hash":"_restrictions_on_wildcards_and_path_parameters","id":26},{"text":"Wrapping Up","hash":"_wrapping_up","id":27}]},"10":{"id":10,"text":"Pedestal includes a template that can be used with deps-new, a tool used to generate new projects from a template. deps-new works with the clojure (or clj) tool, and generates a deps.edn-based project. If you are a Leiningen user, it is relative straight forward to create an equivalent project.clj from the generated deps.edn. The embedded name indicates that the template is configured to work using Http-Kit, and it starts Http-Kit from within the running Clojure application (an alternate, supported, but far less common approach is to bundle a Pedestal application into a WAR and deploy into Jetty, or another servlet container). deps-new operates as a Clojure tool, and can be added using the following command: clojure -Ttools install-latest :lib io.github.seancorfield/deps-new :as new You will also need some scaffolding in your ~/.clojure/deps.edn; add the following to the :aliases map: :1.12 {:override-deps {org.clojure/clojure {:mvn/version \"1.12.0\"}}} This step is only necessary if Clojure 1.12 (or better) is not your default; for most users, Clojure 1.12 (or better) will be the default. Check by running the command clojure -version. Before you begin, you should decide on a group name and project name for your new Pedestal application. These are combined with a slash to form the full project name. For example, you might choose com.blueant as your group name, and peripheral as you project name (we’ll use this example below), in which case, your full project name is com.blueant/peripheral. deps-new will create a new project in a subdirectory matching your project name: peripheral. The command for this is somewhat arcane: clojure -Tnew create :template \\ io.github.pedestal/pedestal%embedded%io.pedestal/embedded#0.8.2-beta-11 \\ :name com.blueant/peripheral Add the -A:1.12 option immediately after clojure if Clojure 1.12 (or better) is not your default. Clojure 1.12 is only needed to initially construct your project; to later build or run your project, Clojure 1.11 or above is all that’s needed. Example: $ clojure -Tnew create :template io.github.pedestal/pedestal%embedded%io.pedestal/embedded#0.8.2-beta-11 :name com.blueant/peripheral Resolving io.github.pedestal/pedestal as a git dependency Creating project from io.pedestal/embedded in peripheral $ tree peripheral ├── build.clj ├── CHANGELOG.md ├── deps.edn ├── dev │ ├── com │ │ └── blueant │ │ └── peripheral │ │ └── telemetry_test_init.clj │ ├── dev.clj │ └── user.clj ├── doc │ └── intro.md ├── LICENSE ├── README.md ├── resources │ ├── logback.xml │ ├── pedestal-config.edn │ └── public │ ├── app.css │ ├── index.html │ └── pedestal-glyph.png ├── src │ └── com │ └── blueant │ └── peripheral │ ├── connector.clj │ ├── main.clj │ ├── routes.clj │ └── telemetry_init.clj ├── start-jaeger.sh ├── test │ └── com │ └── blueant │ └── peripheral │ └── connector_test.clj └── test-resources ├── logback-test.xml └── pedestal-test-config.edn 17 directories, 22 files > The exact set of files created may change over time, as the embedded template evolves. From the new directory (peripheral) you can run tests: $ clj -T:build test Running tests in #{\"test\"} Testing com.blueant.peripheral.service-test Ran 3 tests containing 3 assertions. 0 failures, 0 errors. > You can also fire up a REPL and start the service: $ clj -A:test:dev-mode (1) Clojure 1.12.0 user=> (use 'dev) nil user=> (go!) Routing table: ┌──────┬──────┬────────────────────────────────────────────┐ │Method│ Path │ Name │ ├──────┼──────┼────────────────────────────────────────────┤ │ :get│/*path│:io.pedestal.service.resources/get-resource │ │ :head│/*path│:io.pedestal.service.resources/head-resource│ │ :get│/hello│:com.blueant.peripheral.routes/hello │ │ :post│/hello│:com.blueant.peripheral.routes/greet │ └──────┴──────┴────────────────────────────────────────────┘ #object[io.pedestal.http.http_kit$create_connector$reify__17907 0x6e3f108c \"io.pedestal.http.http_kit$create_connector$reify__17907@6e3f108c\"] user=> 1 This activates both the :test and :dev-mode aliases; :dev-mode assists with reloading and is what enables the printing of the routing table. The full routing table contains both the routes defined for your app (/hello) and the routes for access to static resources (at /*path). From another window, you can open http://localhost:8080/index.html, to see a brief welcoming page: The dev namespace provides the functions go!, start!, and stop!. The :test alias sets up the classpath so that the dev namespace is available, and enables REPL oriented development mode, one aspect of which is the output of the routing table as the service started. Because the application is running in debug mode, Pedestal has enabled extra logging output about the execution of each interceptor, and how the interceptor changed the context map. DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.cors/dev-allow-origin, :stage :enter, :execution-id 1, :context-changes {:added {[:request :headers \"origin\"] \"\"}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.tracing/tracing, :stage :enter, :execution-id 1, :context-changes {:added {[:bindings] ..., [:io.pedestal.http.tracing/otel-context-cleanup] ..., [:io.pedestal.http.tracing/prior-otel-context] ..., [:io.pedestal.http.tracing/otel-context] ..., [:io.pedestal.http.tracing/span] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.service.interceptors/log-request, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/query-params, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.body-params/body-params, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/query-params, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.ring-middlewares/resource, :stage :enter, :execution-id 1, :context-changes {:added {[:response] {:status 200, :headers {\"Content-Length\" \"167\", \"Last-Modified\" \"Thu, 27 Mar 2025 23:04:20 GMT\"}, :body ...}}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/router, :stage :enter, :execution-id 1, :context-changes {:added {[:route] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/path-params-decoder, :stage :enter, :execution-id 1, :context-changes {:added {[:io.pedestal.http.route/path-params-decoded?] true}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.secure-headers/secure-headers, :stage :leave, :execution-id 1, :context-changes {:added {[:response :headers \"X-Frame-Options\"] \"DENY\", [:response :headers \"X-XSS-Protection\"] \"1; mode=block\", [:response :headers \"X-Download-Options\"] \"noopen\", [:response :headers \"Strict-Transport-Security\"] \"max-age=31536000; includeSubdomains\", [:response :headers \"X-Permitted-Cross-Domain-Policies\"] \"none\", [:response :headers \"X-Content-Type-Options\"] \"nosniff\", [:response :headers \"Content-Security-Policy\"] \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\"}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.ring-middlewares/content-type-interceptor, :stage :leave, :execution-id 1, :context-changes {:added {[:response :headers \"Content-Type\"] \"text/html\"}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.service.interceptors/not-found, :stage :leave, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.tracing/tracing, :stage :leave, :execution-id 1, :context-changes {:changed {[:bindings] ...}, :removed {[:io.pedestal.http.tracing/otel-context-cleanup] ..., [:io.pedestal.http.tracing/prior-otel-context] ..., [:io.pedestal.http.tracing/otel-context] ..., [:io.pedestal.http.tracing/span] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.http-kit/response-converter, :stage :leave, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.http-kit/async-responder, :stage :leave, :execution-id 1, :context-changes nil, :line 128} The generated logback-test.xml file can be changed to control what is logged and in what format. You can also use curl or http to make a request: $ http --json post :8080/hello name=\"Pedestal User\" HTTP/1.1 200 OK Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Date: Thu, 27 Mar 2025 23:06:12 GMT Server: Pedestal/http-kit Strict-Transport-Security: max-age=31536000; includeSubdomains X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: DENY X-Permitted-Cross-Domain-Policies: none X-Xss-Protection: 1; mode=block content-length: 21 Hello, Pedestal User. $ The majority of those headers are contributed by the various default interceptors; they establish a base-line for security concerns. Alternately, you can start the service directly without starting a REPL: $ clj -X:run INFO com.blueant.peripheral.main - {:msg \"Service com.blueant/peripheral startup\", :port 8080, :line 10} At this point, the service is running; you can use another window to execute HTTP requests. If you open a browser window to http://localhost:8080/index.html, you’ll see the following logged to the service’s console: INFO io.pedestal.service.interceptors - {:msg \"GET /index.html\", :line 40} INFO io.pedestal.service.interceptors - {:msg \"GET /favicon.ico\", :line 40} The template includes very basic support for gathering and reporting telementry using Open Telemetry. For local work, this is best accomplished by launching a Docker container to run the Jaeger service; the container will collect telemetry from the running application, and also provides a user interface to examine the traces produced by the application. The template includes a script, start-jaeger.sh that downloads the necessary files and starts the container, and opens your web browser to the Jaeger UI: $ ./start-jaeger.sh Downloading Open Telemetry Java Agent to target directory ... f7296a450ab2bfad684451ed7e0ed22125c0743f79e9675c4e15f593570986de Jaeger is running, execute `docker stop jaeger` to stop it. > Stop your old REPL session, if necessary, and start a new one: $ clj -A:test:otel-agent OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended [otel.javaagent 2025-03-27 16:12:48:691 -0700] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 2.14.0 Clojure 1.12.0 user=> (use 'dev) nil user=> (go!) #object[io.pedestal.http.http_kit$create_connector$reify__17973 0x16a475d3 \"io.pedestal.http.http_kit$create_connector$reify__17973@16a475d3\"] user=> The :otel-agent alias enables the Open Telementry Java Agent; a Java Agent is a special library that \"hooks into\" the Java Virtual Machine, and can instrument classes as they are loaded from disk, or from JAR files. In this case, the agent will add code that initializes open telemetry in our application, and instrument the classes to capture the real times when requests arrive and responses are sent. If you enable the use of Jetty 12, then Open Telemetry can do a slightly better job instrumenting; it has special hooks for Jetty classes that don’t exist for Http-Kit. In a separate window, you can open http://localhost:8080/hello or http://localhost:8080/index.html. Your application will handle the requests while gathering and sending tracing data to the Jaeger server running inside the Docker 
1container. After that, go back to the Jaeger UI, and select com.blueant/peripheral in the Service drop-down list [1], then click \"Find Traces\". You can then select a specific trace to get more details about it: You don’t need to run your application with the Java agent in order to gather and send traces; however, the alternative involves quite a bit more setup, and many additional dependencies for all the necessary Open Telemetry libraries. The lint command uses clj-kondo to identify problems in your source code: $ clj -T:build lint linting took 137ms, errors: 0, warnings: 0 clj-kondo approves ☺️ The lint command will exit with a -1 status code if there are linter errors; this aligns well with using it inside a CI/CD pipeline. The jar command builds a Maven POM file, and a JAR for the project: $ clj -T:build jar Writing pom.xml... Copying source... Building JAR target/com.blueant/peripheral-0.1.0-SNAPSHOT.jar ... There’s also an install command to install the JAR to your local Maven repository, and a deploy command, to deploy the JAR to Clojars. The template provides a tiny amount of structure and examples; it’s a seed from which you can grow a full project, but small as it is, it’s worth exploring in more detail. 1. If com.blueant/peripheral isn’t present, you will need to refresh the browser so that it can populate the list of services.","title":"Embedded Template","component":"pedestal","version":"0.8","name":"embedded-template","url":"/pedestal/0.8/guides/embedded-template.html","titles":[{"text":"Setting up deps-new","hash":"_setting_up_deps_new","id":1},{"text":"Creating a project","hash":"_creating_a_project","id":2},{"text":"Exploring the new project","hash":"_exploring_the_new_project","id":3},{"text":"Starting the service","hash":"_starting_the_service","id":4},{"text":"Gathering Telemetry","hash":"_gathering_telemetry","id":5},{"text":"Other build commands","hash":"_other_build_commands","id":6},{"text":"Conclusion","hash":"_conclusion","id":7}]},"11":{"id":11,"text":"In the first two parts of this trail, we made a basic service and we enhanced it to accept a query parameter. Both of these returned their responses as plain text. Plain text is not particularly useful: it doesn’t excel at presentation the way that HTML does, and it doesn’t offer structured data to a smart client the way JSON (or XML, or EDN, or a number of other formats) would. In fact, we should go a step further: the client should be in charge of whether they get human-presentable HTML, or code-focused JSON, using the very same endpoints. Content types are used in HTTP for three purposes: The client includes a Content-Type header to describe the format of the request body The client includes an Accepts header to indicate what body formats it can handle The server includes a Content-Type header to describe the actual format of the response body There’s quite a bit of inherent complexity there, but Pedestal can help sort it all out. It’s time to see how Pedestal handles content types and response bodies. We will also get our first taste of interceptors. After reading this guide, you will be able to: Add interceptors to routes. Use functions to create interceptors. Use the response map. Transform responses into other content types. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the same hello.clj that we’ve built up over the last two guides. We will enhance it to return a JSON content body. Then we will add the ability to look at the client’s preferred content type and make a decision about what to return. If you worked through Hello World, With Parameters then you already have all the files you need. If not, take a moment to grab the sources from the whole shebang in that guide. Feel free to browse the complete sources in the repository, but be warned that the file contains all the versions that we built up through the previous guide. You’ll need to navigate some magic comments to pare it down to just the final version. Pedestal includes effective support for handling content type issues on both the request and the response. In order to appreciate what Pedestal offers, we’ll do it \"the hard 
1way\", implementing our own support for content types and gradually improving them. This is to show you what goes on under the hood before we use the handy built-in features that Pedestal offers. Don’t worry, this won’t hurt too much. It’ll also let us introduce the most important concept in Pedestal: Interceptors. Back in Hello World, With Parameters we echoed an HTTP request back as the response. That was pretty useful for debugging, and it will come in handy for our next step. Given that we put some effort into getting our /greet route working so nicely, let’s make a new, general route to just echo requests back. Pop open hello.clj and change the routes definition to this: (def routes #{[\"/greet\" :get greet-handler :route-name :greet] [\"/echo\" :get echo :route-name :echo]}) When you restarted your service, you probably got a nasty message from Clojure like: user=> (require :reload 'hello) Syntax error compiling at (hello.clj:55:3). Unable to resolve symbol: echo in this context user=> That is a very precise way to say we forgot to define echo before using it in the routes definition. Let’s do that now. We’re going to define echo differently than our handler function greet-handler. Instead of a simple handler function, we’re going to define an interceptor. Interceptors are the basic unit of work in Pedestal. At every step of the way between when a request arrives from the client, and when a response is sent back, there’s at least one interceptor. This includes: Parsing query parameters Routing the incoming request Logging the request Constructing the full response An interceptor is essentially a simple map, but the values for the most important keys are not simple values (like strings or numbers), but functions. This identifies two phases: enter and leave. Each interceptor may participate in the phase by providing corresponding callback functions in the :enter and :leave keys (respectively) [1]. Some interceptors only do work during the enter phase, some only during the leave phase, and some do work during both phases. An interceptor that omits the :enter or :leave key will just be skipped — it’s not an error. But what does that work entail? It’s essentially a bucket brigade: each interceptor is passed the context map, is free to perform other work if necessary, and returns a modified context map, which is passed to the next interceptor. An interceptor chain is the process of executing a sequence of interceptors. Part of the context map is the interceptor queue, and the interceptor stack; the queue is a list of interceptors who have yet to be invoked during the enter phase. As interceptors are invoked[2], they are also added to the interceptor stack, which is used during the leave phase. Because it’s a stack, the leave phase invokes the interceptors in the opposite order from the enter phase: Handler functions, like respond-hello in our example, are special cases. Pedestal can wrap a plain old Clojure function with an interceptor that takes the request map out of the context map, passes it to the function, and uses the return value of the function as the response map [3]. As soon as any interceptor attaches a :response key to the context map, Pedestal considers the request handled. Remaining interceptors in the interceptor queue won’t be called, and only the ones that are already on the interceptor stack will be invoked during the leave phase. This is a \"short-circuit\" behavior, like an early-exit in code. My advice is to build your value in the context with :enter functions, turn it into a response at the tail end of the interceptor queue, and then refine the response map with defaults, headers, cookies, and so on in :leave functions. We’re ready to define echo as an interceptor: (def echo {:name :echo (1) :enter (fn [context] (2) (let [request (:request context) (3) response (ok request)] (4) (assoc context :response response)))}) (5) 1 Interceptors should always have distinct names. 2 We’re providing an :enter function (but not a :leave function). 3 Take the request map out of the context map. 4 Make a response map, with the request map as the body. 5 Attach the response to the context map, and return the new context map. We normally wouldn’t write this in such an expanded form, but I wanted to show all the pieces one by one. Ultimately, we’re just making a map with the keys :name and :enter. We can try that interceptor out now. Bounce your service and use curl to exercise the /echo route: $ curl http://localhost:8890/echo {:remote-addr \"127.0.0.1\", :start-time 654778320605125, :headers {\"accept\" \"*/*\", \"host\" \"localhost:8890\", \"user-agent\" \"curl/8.7.1\"}, :async-channel #object[org.httpkit.server.AsyncChannel 0x7e67b292 \"/127.0.0.1:8890<->/127.0.0.1:55832\"], :server-port 8890, :content-length 0, :websocket? false, :content-type nil, :path-info \"/echo\", :character-encoding \"utf8\", :url-for #object[clojure.lang.Delay 0x3d9b3fd {:status :pending, :val nil}], :uri \"/echo\", :server-name \"localhost\", :query-string nil, :path-params {}, :body nil, :scheme :http, :request-method :get}% This should look pretty familiar from the previous guide. Pedestal’s basic unit of work is the interceptor. The echo and greet-handler functions? Those are actually converted into interceptors. The conn/with-routes in our setup? That creates a routing interceptor and adds it to the list of interceptors in the connector map. The routing interceptor examines the request map and matches it to a route, and pushes the interceptors for the route onto the queue for execution. Because the interceptor queue is stored in the context, it means any interceptor can modify the queue! There’s nothing that special about the routing interceptor. This is one of the big benef
1its of using interceptors: the ability to make dynamic decisions during request handling. Each Pedestal connector implementation may inject some interceptors to the front of the queue, before adding all the interceptors you directly, or indirectly, define in the connector map. Pedestal connectors are required to allow any of the following types in the :body of the response map: Table 1. Response Content Type Mapping Object in :body Default Content-Type Byte array application/octet-stream String text/plain Clojure collection (list, set, map) application/edn java.io.File application/octet-stream java.io.InputStream application/octet-stream java.nio.channels.ReadableByteChannel application/octet-stream java.nio.ByteBuffer application/octet-stream For each type, the connector will assign a Content-Type header, if not already present, based on the type of value. In our previous attempts with the greet-handler, we returned a String and Pedestal supplied the content type text/plain for us. The built-in logic does a reasonable job for common cases, but it’s not always right. You might notice that \"text/html\" doesn’t appear anywhere in that list. We can force that by setting a content type header in our response, like this: src/hello.clj (defn ok [body] {:status 200 :headers {\"Content-Type\" \"text/html\"} (1) :body body}) 1 Attach a header declaring the content type. Note that the key, \"Content-Type\", is case sensitive in the response map. Let’s see the result: $ curl -i http://localhost:8890/greet HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html (1) content-length: 14 Server: Pedestal/http-kit Date: Thu, 17 Apr 2025 17:16:35 GMT Hello, world! (2) 1 Pedestal honored our Content-Type header …​ 2 …​ even though we returned plain text. As expected. But, something about that doesn’t seem quite right. We’re completely ignoring HTTP content negotiation. The client might want JSON instead of HTML. Or it might want plain text. Or EDN. The trouble is that the HTTP content negotiation specification is a royal pain. Fortunately, Pedestal provides an interceptor to help. The negotiate-content interceptor does the job. If you look at the docs, though, you’ll see that is not an interceptor, but rather a function that returns an interceptor. This is a common pattern when you need to include some state or customize the behavior of an interceptor. You pass arguments to a function which returns an interceptor that \"closes over\" those arguments. It returns a data structure that contains functions that carry those arguments around with them. So what does this interceptor do? It reads the client’s Accept request header (which can have quite a complicated format) and finds the \"best match\" among the supported content types; this is added to the request map as the key :accept. If the client doesn’t accept any format that the server supports, then a 406 Not acceptable response is attached to the context. Let’s remove the content type header from ok and use this new interceptor. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (3) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (def routes #{[\"/greet\" :get [content-negotiation-interceptor (4) greet-handler] :route-name :greet] [\"/echo\" :get echo]}) 1 We’ll need this namespace soon to emit JSON responses. 2 This is the content negotiation namespace for Pedestal. 3 A short, picky list of content types we can emit. 4 Notice this route now has a vector of interceptors to invoke. We are using a new namespace here, which will eventually let us write JSON data. That namespace comes from a library that we haven’t included before. So if you try to run this as is, you’ll get an error like this: Execution error (FileNotFoundException) at hello/eval140$loading (hello.clj:2). Could not locate clojure/data/json__init.class, clojure/data/json.clj or clojure/data/json.cljc on classpath. That is how Clojure tells you it is missing a library. By looking at the library’s project page, we see that the latest stable release is \"2.5.1\" (at least, it is when this guide is being written!). We can add the library in the dependencies part of our deps.edn file: deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.clojure/data.json {:mvn/version \"2.5.2\"} (1) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} 1 This is the line that was added. Any time you change your project dependencies, you’ll need to quit out of the REPL and start it again;
1 Clojure will download, as needed, the new dependencies or dependency versions. The (require :reload …​) trick only works for reloading source files, not what’s in deps.edn. If you try this out, you’ll notice that absolutely nothing changed. That’s because the content negotiation interceptor handles the protocol, but it’s up to you to do something about the result, the :accept key added to the request map. This gets to the heart of interceptors: breaking up your request processing logic into small, resuable, individually testable chunks. It’s up to our service code to return a different body format depending on the accepted content type. It probably won’t surprise you that this is a job for another interceptor! Here’s our first stab at it. src/hello.clj (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (let [accepted (get-in context [:request :accept :field] \"text/plain\") (1) response (get context :response) body (get response :body) (2) coerced-body (case accepted (3) \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body)) updated-response (assoc response (4) :headers {\"Content-Type\" accepted} :body coerced-body)] (assoc context :response updated-response)))}) (5) (def routes #{[\"/greet\" :get [coerce-body-interceptor (6) content-negotiation-interceptor greet-handler] :route-name :greet] [\"/echo\" :get echo]}) 1 Get the result of the content negotiation interceptor. Use \"text/plain\" as a fallback in case no suitable match was found. 2 Get the current response out of the context map, get the current body out of the response. This must have been created by a previous interceptor’s :enter or :leave function. 3 Translate the body according to the chosen content type. 4 Create a new response by attaching headers and the coerced body. 5 Return a new context by attaching the updated response. 6 Tell Pedestal to put this interceptor at the head of the queue just for this one route Why does this new interceptor go at the start of the vector? Take look at the picture of the interceptors above. The first one in the vector is called first for the :enter function but last for the :leave function. We want this interceptor to get the last word on the response body so it goes at the top. Turn the queue sideways to write it as a vector, and the topmost interceptor is on the left. It only takes a little bit to get used to this. Let’s try this out with curl. Restart your service and try sending in some curl requests with different Accept headers: $ curl -i http://localhost:8890/greet HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html content-length: 14 Server: Pedestal/http-kit Date: Thu, 17 Apr 2025 17:43:51 GMT Hello, world! Notice the content type returned by our service is now \"text/html.\" This is because the curl command, by default, sends an Accept header with the value /. This matches the first value in supported-types, so that’s what’s selected by the content-negotiation-interceptor. We can use the -H option to override curl 's default. Keep an eye on the \"Content-Type\" header in each response. $ curl -i -H \"Accept: text/html\" http://localhost:8890/greet HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html content-length: 14 Server: Pedestal/http-kit Date: Thu, 17 Apr 2025 17:44:52 GMT Hello, world! $ curl -i -H \"Accept: application/edn\" http://localhost:8890/greet HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn content-length: 17 Server: Pedestal/http-kit Date: Thu, 17 Apr 2025 17:45:10 GMT \"Hello, world!\\n\" Notice when asking for the response in application/edn format, the string result was enclosed in quotes. That’s the difference between encoding a string as plain text — the string itself — and encoding it in the EDN format, where strings are quoted. So coerce-body-interceptor works as intended. As usual, I’ve written it in a fairly \"non-compact\" style so it is easier to see how the parts work with Pedestal. I see a couple of things we can improve though. First, there’s a straight-up bug. If a previous interceptor has already defined a content type, we should respect that and not overwrite the body or the headers. Second, we’re attaching a new headers map with only the \"Content-Type\" header. Any other headers attached by other interceptors will be lost. Finally, we could improve the testability by factoring out some of its logic into pure functions. We’re also going to touch up the echo interceptor while we’re at it. It is common style in Pedestal applications to make heavy use of the core functions such as update and update-in. These functions can \"reach into\" a data structure and make changes to the values already stored there, by applying a function to the stored value. Of course, this is Clojure and the original map isn’t changed, even by update-in: new immutable copies of the nested and containing maps are created. Using the update style is more concise than our prior code, and, to a more experienced Clojure developer, often more readable. Let’s see how this interceptor would change if we refactor it that way. src/hello.clj (def echo {:name :echo :enter #(assoc % :response (ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (if (get-in context [:response :headers \"Content-Type\"]) context (update-in context [:response] coerce-to (accepted-type context))))}) (def routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor greet-handler] :route-name :greet] [\"/echo\" :get echo]}) We’re going to take one more step toward Clojure mastery. Do you see the coerce-body function? It looks inside the context. If there’s already a Content-Type header on the response, then it does nothing and returns the context without modification. On the other hand, if there is no content type assigned yet, it modifies the context by updating the response. This is a really common pattern in functional languages. You want to make a series of changes to a data structure, where each change is conditional on some other logic. In an imperative language, this would look like a series of if statements whose bodies each mutate the object being built. In Clojure, they would look like a deeply nested if forms, where each if returns either a modified or unmodified version of the input. The trouble with deeply nested `if`s is that it’s too easy to get lost in the nesting. This pattern is very common, and Clojure includes macros to help. The slightly tricky cond-> [4] macro is what we need here. cond-> is similar to the usual threading macro ->, but instead of a just a series of expressions, it precedes each expression with a condition; the condition is evaluated first, and only if true is the value threaded through the expression. In practice, it’s very straight forward: src/hello.clj (defn missing-response-content-type? (1) [context] (nil? (get-in context [:response :headers \"Content-Type\"]))) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (missing-response-content-type? context) (2) (update :response coerce-to (accepted-type context))))}) (3) 1 This predicate function makes the main function more readable; the ? suffix is a convention for functions that return a boolean (true or false) result. 2 This is the test clause. 3 When the test is true, cond→ puts context in the second position here, right after the update If there were more clauses in the cond→, each clause would receive the value returned from the previous clauses. We’re now getting a fair bit of code. This would be a good time to think about splitting into namespaces for different responsibilities. We’ll tackle that some other time. For now, let’s take a look at the whole thing. Spend some time making sure you understand how and when each line of code gets invoked. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) (defn ok [body] {:status 200 :body body}
1) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [greet-name] (cond (unmentionables greet-name) nil (empty? greet-name) \"Hello, world!\\n\" :else (str \"Hello, \" greet-name \"\\n\"))) (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name]) message (greeting-for greet-name)] (if message (ok message) (not-found)))) (def echo {:name :echo :enter #(assoc % :response (ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor greet-handler] :route-name :greet] [\"/echo\" :get echo]}) (defn missing-response-content-type? (1) [context] (nil? (get-in context [:response :headers \"Content-Type\"]))) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (missing-response-content-type? context) (2) (update :response coerce-to (accepted-type context))))}) (3) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) ;; For interactive development (defonce *connector (atom nil)) (1) (defn start [] (reset! *connector (2) (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (3) (stop) (start)) In this guide, we built upon Hello World, With Parameters to add: Rudimentary content negotiation. Response body transforms. We also learned about interceptors and created a few. The truth is that server-side applications don’t vend out HTML nearly as much as they once did. APIs are where it’s at. In the next tutorial we will make a REST style API to serve up \"TO DO\" lists. 1. There’s also an error phase that we’ll not discuss in this guide 2. Actually, interceptors are added to the stack even if they don’t provide a :enter callback 3. That actually takes more words to explain in English than it does in code! 4. That’s read out loud as \"cond arrow\". Once you master it, you’ll really level up in Clojure skills.","title":"Hello World, With Content Types","component":"pedestal","version":"0.8","name":"hello-world-content-types","url":"/pedestal/0.8/guides/hello-world-content-types.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"The Hard Way","hash":"_the_hard_way","id":7},{"text":"Interceptors","hash":"interceptors","id":8},{"text":"An Echo Interceptor","hash":"echo-interceptor","id":9},{"text":"From Routes to Interceptors","hash":"_from_routes_to_interceptors","id":10},{"text":"Returning to Content Types","hash":"_returning_to_content_types","id":11},{"text":"Refactoring and Style","hash":"_refactoring_and_style","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where To Next?","hash":"_where_to_next","id":15}]},"12":{"id":12,"text":"Now that you’ve gone through the basics in the Hello World guide it’s time to go one level deeper. We’re going to add two features. That will be our vehicle to talk about some important concepts in Pedestal. After reading this guide, you will be able to: A
1ccept query parameters. Use the request map. Apply logic in your handler. Conditionally return an error. Return HTML in your response. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the hello.clj example from the previous guide. We will enhance it to take a single parameter in the URL and return a friendly greeting to that person. There are some people we don’t want to meet, though. So we’ll also include a list of names that should not be said. Then we can make our handler function a bit smarter. If any forbidden name is uttered, our handler will return a 404 response instead of a cordial greeting. If you worked through Hello World, then you already have all the files you need. If not, take a moment to grab the sources from the repository. That will be our starting point for enhancements this time. HTTP offers a few different ways for the client to send data up to our service. The most basic is probably the URL query parameter. We usually see these on GET requests, but nothing stops a client from using them on other request types. Example 1. URL with Query Parameter http://localhost:8890/greet?name=Michael Because query parameters are so common, Pedestal handles them automatically. You can try that URL with your service right now. As a reminder, we’re running the server by using the clj tool to start an interactive session (called a REPL, rhymes with ripple) then starting the service in that session. Before we do that, though, let’s discuss interactive development. It’s really not optimal to be restarting your REPL in order to restart the service every time you need to make a change. In real Clojure development, we rarely restart the REPL. Instead, we make our system friendly to interactive development. src/hello.clj (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) ;; For interactive development (defonce *connector (atom nil)) (1) (defn start [] (reset! *connector (2) (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (3) (when @*connector (stop)) (start)) 1 defonce here means we can recompile this file in the same REPL without overwriting the *connector symbol’s value. 2 reset! replaces the current value in the atom with the new value. 3 This is a quick way to bounce the server after reloading code. First, let’s start the Pedestal connector. $ clj Clojure 1.12.0 user=> (require 'hello) nil user=> (hello/start) #object[io.pedestal.http.http_kit$create_connector$reify__15862 0x3b85a820 \"io.pedestal.http.http_kit$create_connector$reify__15862@3b85a820\"] user=> The start function has done four things: It has created the connector (via create-connector) It has started the connector It has stored the connector in an atom (a mutable container). It has returned the connector, which the Clojure REPL has printed. A convention for mutable objects, such as atoms, is to prefix their name with a *. This is a reminder that we must use the special prefix @ to dereference the actual value (the connector object) from the container (the atom). Now we can use start, stop, and restart functions as we make changes. Mostly, we’ll make code changes, reload the hello namespace, and call restart to quickly stop the connector and start a new one. From another window, let’s send a request with a query parameter. $ curl -i http://localhost:8890/greet\\?name=Michael (1) HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain content-length: 14 Server: Pedestal/http-kit Date: Fri, 11 Apr 2025 23:37:30 GMT Hello, world! 1 The backslash before name is needed because otherwise the shell will treat the ? specially. What we’ve demonstrated is that Pedestal can route the incoming request, GET /greet?name=Michael and isn’t confused by the presence of the query parameter. Ultimately, the greet-handler function was invoked, and did its job. To update greet-handler to match our goal, we first have to discuss the request argument passed to it. Also, if you look in the console of your REPL, you’ll see that Pedestal logged the request: [] INFO io.pedestal.service.interceptors - {:msg \"GET /greet\", :line 40} You may see slightly different results, but the takeaway is that you can look in the REPL session to verify that requests are being processed by your server. Here’s a reminder of what greet-handler currently looks like: (defn greet-handler [_request] (1) {:status 200 :body \"Hello, world!\\n\"}) (2) 1 The function takes one argument, which we call _request 2 …​ and it returns a map. We aren’t using the _request argument right now, so we don’t really know what information it provides. Let’s take a look at that request by echoing it back to the client. This is a common debugging trick that you can use. (defn greet-handler [request] (1) {:status 200 :body request}) (2) 1 We’re actually using the parameter now, so no more leading _ on the parameter name. 2 Instead of returning the string \"Hello, world!\" we return the entire request as the response body. Make sure you’ve update the hello.clj file, then restart your service with that new definition: user=> (require :reload 'hello) nil user=> (hello/restart) #object[io.pedestal.http.http_kit$create_connector$reify__15862 0x6f4fa62f \"io.pedestal.http.http_kit$create_connector$reify__15862@6f4fa62f\"] user=> Again, this is in two steps: (require :reload …​) to update all the Clojure code, then (hello/restart) to stop the connector and start a replacement, using the update functions. With the updated code live, you can use curl again to see the change in the service’s behavior: $ curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn (1) content-length: 763 Server: Pedestal/http-kit Date: Fri, 11 Apr 2025 23:42:09 GMT {:remote-addr \"127.0.0.1\", :start-time 360038830750564, :params {:name \"Michael\"}, :headers {\"accept\" \"*/*\", \"host\" \"localhost:8890\", \"user-agent\" \"curl/8.7.1\"}, :async-channel #object[org.httpkit.server.AsyncChannel 0x525383f \"/127.0.0.1:8890<->/127.0.0.1:63835\"], :server-port 8890, :content-length 0, :websocket? false, :query-params {:name \"Michael\"}, :content-type nil, :path-info \"/greet\", :character-encoding \"utf8\", :url-for #object[clojure.lang.Delay 0x4adfdcd0 {:status :pending, :val nil}], :uri \"/greet\", :server-name \"localhost\", :query-string \"name=Michael\", :path-params {}, :body nil, :scheme :http, :request-method :get} 1 Pedestal uses the application/edn content type when the response :body is a Clojure map. EDN is to Clojure as JSON is to JavaScript. Yikes! There’s a lot of content in the request map echoed back to us, and it’s in one huge line. We need to unpack that a bit to make sense out of it. Let’s add some line breaks and indentation to make it easier to read. We’ll also omit several keys. They may be relevant later, but they’re a distraction now. Here’s what we are left with. {:request-method :get :uri \"/greet\" :query-string \"name=Michael\" :query-params {:name \"Michael\"} :params {:name \"Michael\"} :headers {\"accept\" \"*/*\" \"host\" \"localhost:8890\" \"user-agent\" \"curl/8.7.1\"} :remote-addr \"127.0.0.1\" :server-port 8890 :content-length 0 :content-type nil :path-info \"/greet\" :character-encoding \"utf8\" :server-name \"localhost\" :path-params {} :body nil :scheme :http} This is a request map. Again, a generic Clojure map with specific keys. You access its values with the get and get-in functions. For now, we’ll look at three interesting 
1keys. The whole query string appears under the :query-string key. That’s the portion of the URL after, but not including, the ? character. The query string can be a pain to deal with. It is URL-encoded, which means that some common characters, such as spaces and punctuation, are converted into sequences of several characters. There’s also delimiters between name/value pairs in the query string. Pedestal parses and slices all that up into a map of parameters for you, which is attached to the request map as the :query-params key. Each parameter name is converted into a keyword. Parameter values are always strings, though, so you may still have to parse them a bit. Pedestal has several different sources of parameters in the request, which we’ll cover in more detail later. The :params key is the merged map of all params from all sources; :query-params is just the parameters from the query string. You get to choose which of these is right for your particular handler. Inside our handler function, the :name parameter is available inside a nested map. Let’s dig it out and add it to our response. src/hello.clj (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name])] (1) {:status 200 :body (str \"Hello, \" greet-name \"\\n\")})) (2) 1 Extract the parameter, bind it to the name greet-name. 2 For the response body, concatenate \"Hello,\" and the parameter into a string. The let form is used to define one or more local symbols, much like a block-scoped local variable in a more traditional language. Here we can just grab the value right out of the map and use it in the response. Do the restart/reload dance again, and then use curl to try a few different requests with parameters. $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Pankaj Hello, Pankaj $ curl http://localhost:8890/greet\\?name=Geeta Hello, Geeta $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที (1) Hello, ไอรีนซีพีชาไอที $ curl http://localhost:8890/greet\\?name=No%20One%20To%20Be%20Trifled%20With (2) Hello, No One To Be Trifled With $ curl http://localhost:8890/greet\\?name= Hello, $ curl http://localhost:8890/greet Hello, 1 Unicode, amazingly, doesn’t need to be URL-escaped. 2 …​ but common characters such as space, need to be converted (to %20). Dang. We were doing really well right up until the end there. Obviously we need to do something smarter when the input is missing. Bad user input is a way of life on the web, so let’s not make an error out of this. Instead, we just won’t personalize the greeting. You might have noticed that the name query parameter in the URL shows up as the :name key in the :query-params map, but ultimately ends up in a local symbol, greet-name. It is tempting to just use the symbol name here as well, for consistency, rather than the longer and less obvious greet-name. Long experience has shown that some symbol names, those that conflict with functions and macros automatically imported from the clojure.core namespace, can cause you great frustration. Using name here shadows the function clojure.core/name. Consider this easy mistake: src/hello.clj (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name])] {:status 200 :body (str \"Hello, \" name \"\\n\")})) This looks correct at a glance, but consider what happens when it is executed: $ curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain content-length: 34 Server: Pedestal/http-kit Date: Sat, 12 Apr 2025 00:16:42 GMT Hello, clojure.core$name@6b202ecb clojure.core$name@6b202ecb is how the clojure.core/name function is printed as a string. We can verify that in the REPL: user=> (str clojure.core/name) \"clojure.core$name@6b202ecb\" So because we used greet-name in one place and name in the other we got really strange results; this is partly because Clojure, as a dynamically typed language, is very permissive …​ to a point: This is Clojure …​ we don’t slap your wrists when you are wrong, we just punish you deeply for it later. — Stuart Halloway So, the moral of the story is to avoid shadowing names! With that, let us continue on to handling bad input in the request. In those last couple of curl calls, we did not properly pass up a name query parameter: $ curl http://localhost:8890/greet\\?name= Hello, $ curl http://localhost:8890/greet Hello, This is not desirable behavior; we should do better than returning half a sentence. src/hello.clj (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name]) message (if (empty? greet-name) (1) \"Hello, world!\\n\" (2) (str \"Hello, \" greet-name \"\\n\"))] (3) {:status 200 :body message})) (4) 1 Both nil and a zero-length string count as empty. 2 This is our fallback greeting message. 3 And our personalized greeting message. 4 Generating the response. Again, reload and restart, then try new requests with curl: $ curl http://localhost:8890/greet Hello, world! $ curl http://localhost:8890/greet\\?name= Hello, world! $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที Hello, ไอรีนซีพีชาไอที Much better! But our handler function is getting a bit unwieldy. I don’t mean that it is a whole six lines long, but rather that it mixes too many concerns. This function parses input
1s, applies \"domain\" logic, and deals with creating a response body. It would be better to refactor this to separate those concerns. src/hello.clj (defn ok [message] (1) {:status 200 :body message}) (defn greeting-for [greet-name] (2) (if (empty? greet-name) \"Hello, world!\\n\" (str \"Hello, \" greet-name \"\\n\"))) (defn greet-handler [request] (3) (let [greet-name (get-in request [:query-params :name]) resp (greeting-for greet-name)] (ok resp))) 1 This function can generate any \"OK\" result. 2 Our logic is now separated. 3 The handler now coordinates the rest. This version separates the concerns nicely. One big benefit is that the greeting-for function is now easier to test. It’s just a pure function - no side effects - that doesn’t require any HTTP or Pedestal machinery to exercise. Likewise, that ok function is also side effect free and quite easy to test. Both functions are likely to get more complex, but each one will only deal with its own complexity. In this example, we’re treating the case of an empty name the same as if the name parameter just isn’t included. See if you can make the handler more strict: it should return a \"400 Bad Request\" response if the name parameter is present but zero length. There are some names that should not be spoken. Let’s enhance our service to avoid them. This will be a relatively simple change. We can hardcode the names as a set, then use that set as a function. (Clojure sets act as functions that test for the presence of their argument in the set itself.) This part needs to go before greeting-for because we’ll use it to make a decision in that function. src/hello.clj (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) Now we need to think about our greeting-for function. Right now it returns a string. We want to make sure the user gets a 404 if the query names one of the forbidden ones. We could have greeting-for directly return the response map, but that starts to entangle the concerns we just factored out. We’ll do the simplest thing that could possibly work: when greeting-for returns nil (instead of a string), that means the request failed. src/hello.clj (defn ok [message] {:status 200 :body message}) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [greet-name] (cond (unmentionables greet-name) nil (empty? greet-name) \"Hello, world!\\n\" :else (str \"Hello, \" greet-name \"\\n\"))) (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name]) message (greeting-for greet-name)] (if message (ok message) (not-found)))) Because there are now three possible conditions that can happen in greet-handler, I’ve changed from using an if expression to a cond expression. cond uses pairs of \"condition / value\" clauses. So if (unmentionables greet-name) returns any truthy value, then cond returns nil and stops evaluating. If (empty? greet-name) returns true, then cond returns the literal string \"Hello, world!\\n\" and nothing else. If neither of those happened, then cond sees the keyword :else as a condition[1] and the code continues to build the string the same way as before. A nested if would also have worked here. In fact cond is a macro that expands into a series of nested if expressions. All three of these conditions are kind of parallel in significance, so I like that they appear to be parallel in the structure of the code. The shape of the code mirrors the shape of my thinking about these cases. The second thing you’ll notice is that the handler now makes a decision whether to call our ok helper or the new function not-found. I do hope you weren’t expecting much in not-found! It’s as simple as it gets. Restart your service and give it a try: $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Rumplestiltskin Not found $ curl http://localhost:8890/greet\\?name=曹操 Not found $ curl http://localhost:8890/greet\\?name=voldemort Hello, voldemort $ curl http://localhost:8890/greet\\?name=He%20who%20must%20not%20be%20named Hello, He who must not be named Looks like it mostly works, though it has some trouble with different capitalization. Take a look at the docs for clojure.string and see if you can figure out how to make the comparison case-insensitive. Once again, we built this thing in small steps, so it may seem like there was a lot to deal with. The final product is still compact and to the point. Here’s all the final code. src/hello.clj (ns hello (1) (:require [io.pedestal.connector :as conn] (2) [io.pedestal.http.http-kit :as hk])) (3) (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) (defn ok [message] {:status 200 :body message}
1) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [greet-name] (cond (unmentionables greet-name) nil (empty? greet-name) \"Hello, world!\\n\" :else (str \"Hello, \" greet-name \"\\n\"))) (defn greet-handler [request] (let [greet-name (get-in request [:query-params :name]) message (greeting-for greet-name)] (if message (ok message) (not-found)))) (def routes #{[\"/greet\" :get greet-handler :route-name :greet]}) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) ;; For interactive development (defonce *connector (atom nil)) (1) (defn start [] (reset! *connector (2) (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (3) (when @*connector (stop)) (start)) deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} In this guide, we built upon Hello World to add: Query parameters General response functions \"Domain\" logic Conditional responses We also learned about the request map, which is central to any non-trivial handler, as well as one approach to dealing with invalid user input in the request. So far, almost all our responses have been plain text. Plain text is ugly, so we want to be able to return HTML. Rich clients don’t like HTML so much, so we also want to return JSON sometimes. The next stop on this trail looks at how Pedestal handles content types and response bodies. This will also be our first taste of interceptors, Pedestal’s core unit of work. 1. Using :else for this purpose is just a common Clojure convention, any non-false/non-nil value would work equally well.","title":"Hello World, With Parameters","component":"pedestal","version":"0.8","name":"hello-world-query-parameters","url":"/pedestal/0.8/guides/hello-world-query-parameters.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Accepting Parameters","hash":"_accepting_parameters","id":7},{"text":"Interactive Development","hash":"interactive","id":8},{"text":"Moving along","hash":"_moving_along","id":9},{"text":"The Request Map","hash":"_the_request_map","id":10},{"text":"Using the Parameter","hash":"_using_the_parameter","id":11},{"text":"Sidequest: Why greet-name?","hash":"_sidequest_why_greet_name","id":12},{"text":"Handling Bad Input","hash":"_handling_bad_input","id":13},{"text":"Conditional Responses","hash":"_conditional_responses","id":14},{"text":"The Whole Shebang","hash":"whole-shebang","id":15},{"text":"The Path So Far","hash":"_the_path_so_far","id":16},{"text":"Where to Next?","hash":"_where_to_next","id":17}]},"13":{"id":13,"text":"We’re glad you’ve decided to give Pedestal a try. We think it’s pretty powerful. Before we get into the heavy lifting though, we should start with some basics. After reading this guide, you will be able to: Create a Pedestal project from scratch Define a handler and a route for that handler Return plain text in your response from that handler Setup and run an HTTP server around the route This guide is for beginners who are new to Pedestal. It doesn’t assume that you have any prior experience with Pedestal, Clojure, or any other Clojure-based web framework. You should be somewhat familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We will be using the Clojure CLI tools to manage dependencies and download libraries. Refer to the Clojure Getting Started page for installation instructions and details. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. This guide shows fragments of code as we add them. Sometimes it helps to see the whole thing at once, so you can always check out The Whole Shebang at the end of this guide. In this guide, we’re going to take a series of small steps. We’ll see all the code to build a Pedestal service starting with an empty directory. The first time through, we will just do everything \"by hand\". This is a little more work in typing (or copy-and-pasting) but it will let you see how the pieces connect in the simplest possible use case. Pedestal services are written in Clojure code, which you then run on a Java Virtual Machine. You will need to have a Java Runtime Environment installed on your computer. Let’s make sure you’re up to date. Fire up a terminal and put in this command: $ java -version You should see some output something like this: $ java -version openjdk version \"11.0.19\" 2023-04-18 LTS OpenJDK Runtime Environment Corretto-11.0.19.7.1 (build 11.0.19+7-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.19.7.1 (build 11.0.19+7-LTS, mixed mode) If you get an error, such as \"Command not found\" or some variation of that, you probably need to install Java. The second thing is to make sure that the Java version is at least 11. OK, so now that you are ready to run a Java application, let’s move on to the Pedestal part. We’re going to start this project with an empty directory. In practice, most of the time you’ll generate a project from a template. But for now, it’s more important to see what the individual pieces are and how they fit together. I’m going to call my project 'hello-world'. Feel free to call yours something different, but it’s up to you to do the mental translation in the rest of this guide. $ mkdir hello-world $ c
1d hello-world A quick note on naming style. Clojure itself uses \"kebab case\" for its names. That’s lowercase words, separated with hyphens. When you have a long name, it looks like the letters have been skewered. Hence, kebab case. Since Clojure’s own libraries use this style, most applications and libraries do too. We need a place to keep our code. By convention, that’s in a src (short for \"source\") directory: $ mkdir src Now we’re going to create a file under src to hold our code. Call it src/hello.clj. It’s going to start with a namespace declaration. This tells Clojure what namespace to put the code into. If you’re familiar with Java, you can think of a namespace as similar to a Java package name. src/hello.clj (ns hello (1) (:require [io.pedestal.connector :as conn] (2) [io.pedestal.http.http-kit :as hk])) (3) 1 This namespace is called 'hello'. This almost always matches the filename. 2 We need to use the io.pedestal.connector namespace, abbreviated as conn. 3 We need to use the io.pedestal.http.http-kit namespace, abbreviated as hk. The ns form establishes a name for your namespace; this is the name that other namespaces can use to reference the functions and constants provided by the hello namespace. The :require clause is how the hello namespace identifies other namespaces it uses; requiring a namespace loads its source and, optionally, creates an alias for the namespace. This is very similar to using import in Java or require in Ruby. It just makes some names from other namespaces available to us in this namespace. Clojure’s main namespace, clojure.core, is special; its contents are mixed into every namespace automatically. If you haven’t written any Clojure before, this syntax might look a little strange. The first thing that jumps out at people is the parentheses. Why is there an open paren before the ns? In Clojure, every expression is enclosed in its very own set of parentheses. There are no semicolons to end the line or curly braces to close an if expression. To find the end of any expression, you just find the matching close paren. The first thing in an expression is the function or macro [1] to call. In this case ns is a macro that is built in to Clojure. It sets up a namespace and makes the stuff we :require available. Each namespace is loaded from a Clojure source file. A Clojure namespace provides symbols and those symbols are the names of functions, macros, or constants. Where the :require says :as something it means we’re making an alias inside our namespace (the hello namespace). Because hello has required the io.pedestal.connector namespace, it can make use of functions in that namespace, such as io.pedestal.connector/with-default-interceptors. This is the truest form, where every symbol in a namespace has a full name that includes the namespace. That’s cumbersome to type again and again, which is why we set up the alias; conn/with-default-interceptors is exactly the same, but more concise and more readable. Also, don’t worry about the indentation …​ Clojure ignores whitespace outside quoted strings entirely. Many common editors support Clojure with some form of plugin, and these can help you keep your code formatting clean and orderly (and much more besides). So what exactly are the io.pedestal.connector and io.pedestal.http.http-kit namespaces? The io.pedestal.connector namespace has functions that are used to describe a Pedestal connector. A Pedestal connector exists to connect the network world of HTTP requests and responses to the Pedestal world of maps and functions. The io.pedestal.connector namespace has functions and macros to describe the connector and ultimately start it listening to a TCP/IP port for HTTP requests. Pedestal has connectors for several popular Java and Clojure HTTP libraries. The io.pedestal.http.http-kit namespace adapts Pedestal to use the Http-Kit library. Whew. That was a lot to unpack from just the first three lines of code! Let’s pause for a moment to talk about the next steps. We’re making a web service that can say hello. That means we need to do some basic things: Listen to a port for incoming HTTP requests. For each request, decide exactly what operations to execute, including what’s in the response. Stream the response back to the client. We’re going to work our way up from the bottom: First, the handler function that does the primary work for the request Next, the routing information that Pedestal uses to connect incoming requests to handler functions Then, the code that sets everything up and starts listening for requests src/hello.clj (defn greet-handler [_request] (1) {:status 200 :body \"Hello, world!\\n\"}) (2) 1 Define a function, using defn, called greet-handler that takes a single argument, which we will call _request. 2 Return a Clojure map with two keys and two values. A Clojure function returns the value of the last expression in the function. In this case, that will be the map that we construct just before the closing paren. Most Clojure code consists of creating, querying, and modifying these kinds of maps, so the language includes syntax to create maps very succinctly: the curly braces mark the start and end of the map, and within are pairs of keys and values. Likewise, a vector is marked by square brackets ([ and ]), general list by ( and ), and a set by #{ and }. Clojure uses dynamic typing, that means keys and values inside a map may be different types. Generally, the keys are Clojure keywords, such as :status. The returned map has two keys and their values: Key Value :status 200 :body \"Hello, world!\" That’s the whole thing. When our function returns that map, Pedestal will translate the map into a full HTTP response complete with appropriate HTTP headers, including Content-Type. Later on, we’ll see how to take control of the whole response. For now, we’re just taking the easy road and let Pedestal’s defaults do the work. There’s absolutely nothing special about this map. It’s a plain old Clojure map - this is typical of how Clojure operates, we don’t use classes, we use ordinary maps but care about what particular keys are in the map. A handler function, such as greet-handler, returns a response map. Clojure is a functional language, which means that whenever possible, we create simple functions that have no side effects: their behavior is defined only by the arguments passed in. Most handlers use information in the request map passed into the function, but greet-handler is so trivial that it ignores the request; the _ prefix on the parameter name, _request, is a Clojure convention for parameters that are present but purposely ignored. This trivial greet-handler function is functional — it can be tested entirely by invoking it, passing in a request map, and making assertions about at the response map it returns. There’s no need to start up a server and send a request to it via HTTP, you can just have your tests call this code directly. That’s one of the beauties of working in Clojure and Pedestal…​ you can try everything interactively in a running system. We’ll see that in practice, shortly. Next, we’ll tackle what it takes to actually run the code inside the src/hello.clj source file. Pedestal is built on the shoulders of giants, in the form of great open source technology that many people have contributed to. That gives us great power, but with great power comes great dependencies. We could download all the jar files we need and string together a classpath, but it’s a huge pain. I just made a minimal project and found 57 entries on the classpath. This is why we can have nice things, but it means we need some help managing those dependencies. Fortunately, Clojure provides tooling for dependency management. We’ll be using the clj tool to run our examples. Please take a few minutes to learn more, then come back and we’ll continue. Now we can make a deps.edn that tells the clj tool what libraries our service needs. This goes in the main directory hello-world: deps.edn {:paths [\"src\"] (1) :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} (2) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} 1 Tell clj where our source code lives. 2 Tell clj we need pedestal.http-kit and a logging library. Pedestal isn’t a single library, it’s a collection of related libraries; the primary library is io.pedestal/pedestal.service which provides the io.pedestal.connector namespace. pedestal.service itself depends on a number of other pedestal libraries (such as pedestal.log for logging results) and a number of outside open source libraries. Pedestal is designed to work with many different HTTP servers, so we don’t want the core library to depend on all of the possible servers out there (think of the dependencies!). Instead, we let you decide which one to use by adding the specific library for your chosen service. In this guide, we’re using Http-Kit, a fast, stable, and minimal HTTP server. Http-Kit doesn’t handle secure communications over SSL, but it’s great for local development or deployment behind a firewall that provides SSL. Adding io.pedestal/pedestal.http-kit as a dependency of our hello-world project adds the library and all of its dependencies (over 40 at the time of writing!), including io.pedestal/pedestal.service and many more [2]. Let’s try out our response function. $ clj Downloading: io/pedestal/pedestal.jetty/0.8.0/pedestal.jetty-0.8.0.pom from clojars Downloading: io/pedestal/pedestal.service/0.8.0/pedestal.service-0.8.0.pom from clojars Downloading: io/pedestal/pedestal.log/0.8.0/pedestal.log-0.8.0.pom from clojars ... Clojure 1.12 user=> The downloads only occur the first time you run the service; subsequently the files will already be downloaded and ready to run. The exact libraries and versions downloaded will vary with the exact version of Pedestal listed in the deps.edn dependency. The clj tool will download depen
1dencies as needed, add them to the classpath and start a REPL [3] in the user namespace. Now we’re able to enter Clojure code directly and Clojure will evaluate it (turn it into a value) and print the result. The first thing we need to do is tell Clojure to load our hello namespace: user=> (require 'hello) nil user=> There will be short pause as Clojure reads the hello namespace, then all the other namespaces directly or indirectly required by hello. The require function returns nil on success, which the Clojure REPL printed. If instead, you get a message like this: user=> (require hello) Syntax error compiling at (REPL:1:1). Unable to resolve symbol: hello in this context It means you missed the single-quote before \"hello\" in the require. Now we can actually test our handler function: user=> (hello/greet-handler {}) {:status 200, :body \"Hello, world!\\n\"} Well, we got the singularly unexciting result that we can call a function and see that it returns the map that we told it to. Let’s move on to hooking this up to a route. It’s worth noting that we passed in an empty map ({}) rather than a full request map. This is perfectly acceptable for testing; in fact we could have even passed a nil (Clojure’s null), as the greet-handler function doesn’t actually use the _request parameter. In Pedestal, routing is the process of matching an incoming request to a handler [4]. Essentially, the combination of the HTTP method (such as GET or POST) and the path information in the request (such as /greet) should uniquely identify a route and, from that, a handler for that route. Pedestal can easily handle dozens or even hundreds of routes, but we’ll start with just one. Let’s tell Pedestal that we want the route GET /greet to map to our handler function: src/hello.clj (def routes #{[\"/greet\" :get greet-handler :route-name :greet]}) You probably noticed that routes is created with a def and not with a defn. def is used for defining a constant. The constant value is then linked to a symbol in the namespace. This can be a single value (such as the set provided here) or it can be a more complex expression that gets evaluated, just once, and linked to the symbol. defn is used to define a function which has parameters and a body of expressions …​ but in Clojure, a function is ultimately a kind of value. The function gets linked to a namespace symbol. Under the covers, the defn macro itself makes use of the def macro. Pedestal has a number of ways to express routing; the use of a set here (with #{ …​ }) denotes table syntax, which is prefered. This routing table is a single route; the route matches: The GET HTTP method The URL /greet In a route definition, the first three terms are the URL to match, the HTTP method to match, and the handler for the route. After that are key/value pairs for additional information, such as the name of the route. When routed in a live service, the greet-handler function will be invoked. In Pedestal, every route must have a unique :route-name. We’ve named this route :greet. There’s an informal contract here: Pedestal expects that greet-handler is a function that can accept a single parameter, a request map. Further, it expects that, as a handler function, it will return a response map. Violating these rules can result in runtime exceptions. We’re ready for that last step: connecting the routes and handler function to an HTTP server [5]. We have two additional functions; one to create the Pedestal connector, and a second to create and start the connector. src/hello.clj (defn create-connector [] (-> (conn/default-connector-map 8890) (1) (conn/with-default-interceptors) (2) (conn/with-routes routes) (3) (hk/create-connector nil))) (4) (defn start [] (conn/start! (create-connector))) (5) 1 A connector is built from a connector map; this builds an initial map with the specified port number. 2 This step adds much basic functionality and security to the connector map. 3 This is where routing is added to the connector map. 4 Convert the connector map to a connector; the nil is a second parameter of options specific to Http-Kit. 5 The start! function starts the connector. The → macro is used to run a value through a series of functions; here, the result of calling default-connector-map is passed to with-default-interceptors; the result of that is passed to with-routes, and so forth. This pattern is very useful, concise, and common in Clojure code. All we need to do now is run it. user=> (require :reload 'hello) (1) nil user=> (hello/start) #object[io.pedestal.http.http_kit$create_connector$reify__15862 0x695dc0e6 \"io.pedestal.http.http_kit$create_connector$reify__15862@695dc0e6\"] 1 This directs Clojure to throw away the current version of the hello namespace and reload it from src/hello.clj. The start! function returns the connector (the unwieldy #object[…​] text is how Clojure prints out Java classes, such as the connector); the connector is now listening on port 8890. We can test this is a second terminal window: $ curl -i http://127.0.0.1:8890/greet HTTP/1.1 200 OK Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain content-length: 14 Server: Pedestal/http-kit Date: Fri, 11 Apr 2025 00:12:33 GMT Hello, world! If you look in the console after running the curl command, you’ll see that Pedestal logged the request: user=> [] INFO io.pedestal.service.interceptors - {:msg \"GET /greet\", :line 40} It’s alive! Treat yourself to a hot beverage and a high five. Whenever you get tired of poking it, just hit Ctrl-C in the terminal that is running the REPL to kill it. This might seem complicated because I’ve used so many words to describe all this. The actual code is pretty short though. For reference, and in case you’ve hit any snags along the way, here are the complete contents of both files. src/hello.clj (ns hello (1) (:require [io.pedestal.connector :as conn] (2) [io.pedestal.http.http-kit :as hk])) (3) (defn greet-handler [_request] (1) {:status 200 :body \"Hello, world!\\n\"}) (2) (def routes #{[\"/greet\" :get greet-handler :route-name :greet]}) (defn create-connector [] (-> (conn/default-connector-map 8890) (1) (conn/with-default-interceptors) (2) (conn/with-routes routes) (3) (hk/create-connector nil))) (4) (defn start [] (conn/start! (create-connector))) (5) deps.edn {:paths [\"src\"] (1) :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} (2) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} You can also see all the code in the GitHub repository for this guide. We’ve covered a lot of ground in this guide. You have learned how to: Start a Pedestal project from scratch. Write a function to return a response. Define routes for Pedestal. Run a Http-Kit server that handles those routes. Along the way you’ve also learned a bit of Clojure. The next part in this tutorial adds the ability to receive a query parameter, apply logic to it, and return a different response for an error. 1. There’s some important distinctions between a Clojure function and a Clojure macro and you don’t have to think about that one bit when you are first getting started with Clojure. 2. Try the command clj -Spath to see them all. 3. Read/Eval/Print/Loop. In Clojure, you enter expressions at the prompt, and those are parsed, executed and the result printed back to the console. Anything you can do in a Clojure source file can also be done right at the prompt, including redefining existing functions. REPL-oriented development is powerfully productive, especially when combined with an IDE that can help you interact with your running REPL. 4. We’re simplifying here, we’ll get around to discussing interceptors soon 5. Pedestal calls this a \"network connector\" as it is the piece that handles HTTP networking. The network connector is an internal component of the Pedestal connector.","title":"Hello World","component":"pedestal","version":"0.8","name":"hello-world","url":"/pedestal/0.8/guides/hello-world.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Starting From Scratch","hash":"_starting_from_scratch","id":7},{"text":"A Place to Put Things","hash":"_a_place_to_put_things","id":8},{"text":"Generating a Response","hash":"_generating_a_response","id":9},{"text":"Managing Dependencies","hash":"_managing_dependencies","id":10},{"text":"Routes and Routing","hash":"_routes_and_routing","id":11},{"text":"Hooking It All Up","hash":"_hooking_it_all_up","id":12},{"text":"The Whole Shebang","hash":"whole-shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where to Next?","hash":"_where_to_next","id":15}]},"14":{"id":14,"text":"As Clojure developers, we prefer to live at the REPL, loading and reloading code into the REPL for a lightning fast feedback loop. It’s common to reload a namespace, and use the REPL (possibly via IDE support) to re-evaluate expressions in our code and see the immediate change. This is true for Pedestal apps as well …​ we should be able to make changes and see the effects of those changes immediately. But as we’ll see, in practice, accomplishing that takes a little extra structure. We’re going to show examples of the live reloading failures, then show how Pedestal solves them. Let’s start with yet another basic, \"Hello World\" application. (ns org.example.hello (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk])) (defn hello-handler [_request] (1) {:status 200 :body \"Hello, World!\"}) (def routes #{[\"/hello\" :get hello-handler :route-name ::hello]}) (2) (defn create-connector [] (-> (conn/default-connector-map 9999) (conn/with-default-interceptors) (conn/with-routes routes) (3) (hk/create-connector nil))) (defonce *connector (
1atom nil)) (4) (defn start [] (reset! *connector (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) 1 The request map isn’t used here, so we follow the convention of adding a leading underscore; this may also prevent warnings in your IDE. 2 Every route must have a unique :route-name and since we are providing a function, hello-handler, it must be explicitly specified. 3 with-routes is a macro; it adds a routing interceptor to the connector map. 4 To survive reloading of this namespace, the running connector is stored in an Atom. With that in place, evaluate (start) to create and start the connector. You can now use your favorite HTTP client (such as HTTPIe) to access the /hello route: > http :9999/hello HTTP/1.1 200 OK Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Date: Fri, 18 Nov 2022 23:41:49 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains Transfer-Encoding: chunked X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: DENY X-Permitted-Cross-Domain-Policies: none X-XSS-Protection: 1; mode=block Hello, World! So far, so good. You can also see that Pedestal’s default set of interceptors has added a number of security-related headers to the response. Now we’re ready to make a change. Let’s change the response body to be Hello, Clojure World!. We can change the hello-handler function, reload the namespace via (require :reload 'org.example.hello), and retest with http: > http -pb :9999/hello (1) Hello, World! 1 The -pb option prints just the response body, omitting the response headers. That’s strange. It’s as if the code change wasn’t picked up. We can verify that the code change is, in fact, live by evaluating (hello-handler nil) at the REPL: (hello-handler nil) => {:status 200, :body \"Hello, Clojure World!\"} What’s happened here is that the value of the org.example.hello/hello-handler Var has changed; it now holds a new Clojure function, one that says \"Hello, Clojure World!\". However, the routes and create-connector functions captured the value of hello-handler at the time they executed. We could say ugh, fine and just adapt to a cycle where you reload your REPL code and then restart the connector, but that’s slow and error-prone. We want a fast feedback cycle where that is not necessary. That goal is entirely achievable. To understand what’s going on here, we must consider a key stage in Pedestal: route expansion. Route expansion is a step during startup where the provided routes are converted from one of a number of specifications (such as the table format used here) into an executable format. A handler in a route is evaluated during expansion; that’s when the hello-handler symbol is resolved to a specific function. This evaluation and expansion only happens once, and so there’s a capture: the running connector holds a reference to the specific function that existed when the routes were expanded. Reloading a namespace creates a new function value, but the running connector still holds the old one. There’s actually more than one layer of capture at work: When the routes were defined, hello-handler was a direct function reference, captured into the routes set. When create-connector was called, the value of routes was captured into the connector. Any changes to routes, handlers, or interceptors after the connector is created are invisible. We need a way to avoid all of these captures, so that incoming requests always reflect the latest code. Fortunately, the with-routes macro handles all of this for us, provided development mode is enabled. with-routes internally uses the routes-from macro, which is aware of the Pedestal execution mode. In production mode, routes are expanded once at startup — exactly what you want for performance. In development mode, routes are re-expanded on every incoming request, and all symbols are dynamically re-resolved, so changes to handler functions, routes, and interceptors are picked up immediately. To enable development mode, set the system property io.pedestal.dev-mode to true when starting the JVM. With the clj tool, this can be done through the deps.edn: {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"{pedestal-version}\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}} :aliases {:dev {:jvm-opts [\"-Dio.pedestal.dev-mode=true\"]}}} Then start the REPL in development mode via clj -A:dev. Alternatively, you can set the environment variable PEDESTAL_DEV_MODE=true. Once development mode is enabled, no code changes are needed. Our existing code, with conn/with-routes, already does the right thing: (defn create-connector [] (-> (conn/default-connector-map 9999) (conn/with-default-interceptors) (conn/with-routes routes) (1) (hk/create-connector nil))) 1 In development mode, this re-expands routes on every request, dynamically resolving all symbols. Let’s stop the connector and start fresh, this time with development mode on: (stop) (start) Verify the original behavior: > http -pb :9999/hello Hello, World! Now, change hello-handler to return \"Hello, Clojure World!\", reload the namespace, and retest: > http -pb :9999/hello Hello, Clojure World! Success! The change was picked up without restarting the connector. Let’s also change the route path from /hello to /hi, reload the namespace, and try it: > http -pb :9999/hi Hello, Clojure World! That works too. You can add, remove, or otherwise change your routes, update handler functions, add interceptors …​ wherever your development takes you, and those changes will be re-evaluated and re-loaded on each request. Not For Production In development mode, route expansion happens on every incoming request. Even a trivial route specification takes a chunk of time to expand, so this would absolutely trash your production server’s throughput. This is why it must be explicitly enabled via the system property or environment variable; by default Pedestal operates in production mode. In development mode, Pedestal will also write a formatted routing table to the console at startup, and at any later time that the routing table changes: Routing table: ┌──────┬──────┬───────────────────────────┐ │Method│ Path │ Name │ ├──────┼──────┼───────────────────────────┤ │ :get│/hello│:org.example.hello/hello │ └──────┴──────┴───────────────────────────┘ This output is especially useful to know the correct route name to pass to url-for (to generate application URLs included in responses) or response-for (used in your unit tests). How does this work under the hood? with-routes is a macro that calls the routes-from macro internally. In production mode, routes-from simply expands the routes once. In development mode, it generates a zero-argument function that re-expands the routes on each call, using ns-resolve to dynamically look up every symbol. This means that both the route definitions and the handler functions they reference are always resolved to their current values. Running code with a long-lived and stateful connector creates its own challenges when coding live at the REPL; in this guide we’ve explained how capturing interferes with live reloading, and shown how Pedestal’s development mode solves the problem automatically through the with-routes macro. Just remember to ensure that development mode is not enabled in your production deployments if you want to meet your SLAs (service level agreements)!","title":"Reloading at the REPL","component":"pede
1stal","version":"0.8","name":"live-repl","url":"/pedestal/0.8/guides/live-repl.html","titles":[{"text":"Starting Point","hash":"_starting_point","id":1},{"text":"Understanding the Capture Problem","hash":"_understanding_the_capture_problem","id":2},{"text":"Development Mode","hash":"_development_mode","id":3},{"text":"Wrap Up","hash":"_wrap_up","id":4}]},"15":{"id":15,"text":"As you imagine a Component-based Pedestal application expanding its functionality, you might expect to see some growing pains. At the center of the system is the :components component that, in a fully-featured application, can be expected to grow into a ever-expanding grab-bag of dependencies. This is a \"Big Ball of Mud\" - a design antipattern that Component was created to avoid. The theory and practice of Component is that each component gets exactly the dependencies it specifically needs …​ no more. Pedestal has optional capabilities to define interceptors and handlers as components, each with individual dependencies. By embracing this approach, we end up with a more focused system map: Again, with this tiny toy of an application, the structure is quite flat, but one can imagine a real system with dozens of endpoints, complex interceptors, and many different components for different aspects of the overall application. Before we get started on how a revised version of the application is implemented, there are some tradeoffs to consider: Greater complexity: more components and more dependencies Reloading is for functions not objects Debugging into methods is harder [1] To expand on that reloading issue: when you reload namespace changes, all functions and values are revaluated and replaced. For functions, the fully qualified function name will be shared between the old code and the new. For Clojure records, after reloading namespaces, the old record instance (in the system map) will still be in place, with the old JVM class for that instance. So, changing the implementation of a method of a record will not see any effect, at least until the system map is rebuilt and restarted. So, keep those concerns in mind while we describe the revised application. This time, we can build from the bottom up, starting with the greeter component. src/app/components/greeter.clj (ns app.components.greeter (:require [com.stuartsierra.component :as component] [clj-commons.humanize :as h])) (defrecord Greeter [*count] component/Lifecycle (start [this] (assoc this :*count (atom 0))) (stop [this] (assoc this :*count nil))) (defn new-greeter [] (map->Greeter {})) (defn generate-message! [component] (let [n (-> component :*count (swap! inc))] (format \"Greetings for the %s time\\n\" (h/ordinal n)))) This namespace is unchanged from the prior guide. A new namespace, for components that are interceptors or handlers, has been created. src/app/components/handlers.clj (ns app.components.handlers (:require [io.pedestal.interceptor :refer [definterceptor]] [app.components.greeter :as greeter])) (definterceptor get-greeting (1) [greeter] (2) (handle [_ _request] (3) {:status 200 :body (greeter/generate-message! greeter)})) (4) (defn new-get-greeting (5) [] (map->get-greeting {})) 1 definterceptor extends the behavior of defrecord. 2 As with a record, we start with fields of the record. 3 The handle method is allowed and definterceptor automatically adds the correspondng Handler protocol. 4 The implementation can directly reference the greeter field. 5 It’s always good form to provide a function to create a new component instance. The definterceptor macro streamlines the process of creating a record type for a component; when it sees particular method names (handle, enter, leave, or error) it automatically adds the corresponding protocol (Handler, OnEnter, OnLeave, or OnError). This allows interceptors defined this way to be very concise. definterceptor also quietly adds an implementation of IntoInterceptor; definterceptor provides :enter, :leave, and :error keys as necessary, to match the protocols; the functions automatically invoke the corresponding method. It just works. Next up the component heirarchy is the component used to generate the application’s routes. The component depends on the handlers and other interceptor components that are referenced in the routes. src/app/routes.clj (ns app.routes) (1) (defn routes [component] (let [{:keys [get-greeting]} component] (2) #{[\"/api/greet\" :get get-greeting]}
1)) (3) 1 Amazingly, no dependencies are needed for this namespace. 2 The routes function is provided with the RoutesSource component and can extract the get-greeting dependency. 3 The :route-name option can now be omitted, and the name of the interceptor is used as the route name. In the previous version, the :pedestal component defined routes and added the dependency-injecting component; in this version, the component obtains the routes from the :route-source component. src/app/pedestal.clj (ns app.pedestal (:require [com.stuartsierra.component :as component] [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [app.routes :as routes])) (defrecord Pedestal [route-source connector] (1) component/Lifecycle (start [this] (assoc this :connector (-> (conn/default-connector-map 8890) (conn/optionally-with-dev-mode-interceptors) (conn/with-default-interceptors) (conn/with-routes (routes/routes route-source)) (2) (hk/create-connector nil) (conn/start!)))) (stop [this] (conn/stop! connector) (assoc this :connector nil))) (defn new-pedestal [] (map->Pedestal {})) 1 The component has a dependency on route-source, and manages the connector field. 2 This is where the :route-source component is used. This all comes together in the app.system namespace where all components and dependencies get declared: src/app/system.clj (ns app.system (:require [com.stuartsierra.component :as component] [app.components.greeter :as greeter] [app.components.handlers :as handlers] app.routes app.pedestal)) (defn new-system [] (component/system-map :greeter (greeter/new-greeter) :handler/get-greeting (component/using (handlers/new-get-greeting) [:greeter]) :route-source (component/using {} (1) {:get-greeting :handler/get-greeting}) (2) :pedestal (component/using (app.pedestal/new-pedestal) [:route-source]))) 1 A simple, empty map can be used as a component when it doesn’t implement Lifeycle or some other protocol. 2 A map can be used to define dependencies when the local key does not match the system map key. All the other namespaces (primarily, the tests) are unchanged between the two versions of the application. In this guide we extended the prior application to fully leverage the capabilities of the Component library. We demonstrated how the definterceptor macro streamlines creating components that act as both components and interceptors (or handlers), and we saw how each component can have only explicit dependencies on exactly what other components it directly interacts with. 1. This is my personal experience using Cursive and IntelliJ. Often, it is not possible to set breakpoints inside methods.","title":"Pedestal with Component (Redux)","component":"pedestal","version":"0.8","name":"pedestal-component-2","url":"/pedestal/0.8/guides/pedestal-component-2.html","titles":[{"text":":greeter component","hash":"_greeter_component","id":1},{"text":"handlers namespace","hash":"_handlers_namespace","id":2},{"text":"routes namespace","hash":"_routes_namespace","id":3},{"text":"pedestal namespace","hash":"_pedestal_namespace","id":4},{"text":"system namespace","hash":"_system_namespace","id":5},{"text":"Other code","hash":"_other_code","id":6},{"text":"The Path So Far","hash":"_the_path_so_far","id":7}]},"16":{"id":16,"text":"Component is a popular and non-intrusive library for organizing Clojure logic; it makes it easy to define components, as maps or Clojure records, and organize them, with inter-component dependencies, into a system map. It’s not uncommon for Pedestal to be setup to operate as one component within a Component system. This guide is a bit longer than the previous ones, but no single file or function is itself very long. The point of using Component is to adopt a structure that scales up to higher levels of complexity, and that requires a bit of connective tissue between the essential code snippets of the application. After reading this guide you will be able to: Create a Component-based service using Pedestal. Make updates to your service without restarting your REPL. Test your service using Pedestal’s test helpers. This guide is for users who are familiar with: Clojure Pedestal Clojure’s CLI tooling Component If you are new to Pedestal, you may want to go back to the Hello World guide. If you’re new to Component, you should definitely check it out first. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we’re going to step through creating a Pedestal service using Component. We’ll start off by creating a Pedestal component and wire it into a Component system map. We’ll then proceed to testing our service. We are going to have a component that manages the Pedestal connector. A second component will be a \"big bag of components\" that will be provided to every interceptor or handler function in a new :components key of the request map. We’ll also have a component with some mutable state to interact with from our handler. We can represent the system map as a diagram, showing components and their dependencies: This is a very flat map; it shows that the :pedestal component depends on the :components component, which itself depends on the :greeter component. What’s the point of the :components component? It represents a subset of components that will be made available to interceptors and handlers. There’s curerntly only a single component inside :components now, but in a realistic application, there would be many such dependencies. Real systems built with the Component library will often have dozens of components and even more dependencies, but this small start still demonstrates a valid pattern. Now that we have a better idea of the system layout, let’s start building the project and wiring the components together. The first step is to create a project directory to contain the project sources, then create a deps.edn file, to capture the dependencies of our application. deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} com.stuartsierra/component {:mvn/version \"1.2.0\"} org.clj-commons/humanize {:mvn/version \"1.2\"} (1) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}} :aliases {:test {:extra-paths [\"test\"] :extra-deps {io.github.cognitect-labs/test-runner {:git/tag \"v0.5.1\" :git/sha \"dfb30dd\"} nubank/matcher-combinators {:mvn/version \"3.10.0\"} (2) io.github.tonsky/clj-reload {:mvn/version \"1.0.0\"}} (3) :exec-fn cognitect.test-runner.api/test} :dev-mode {:jvm-opts [\"-Dio.pedestal.dev-mode=true\"]}}} (4) 1 We’ll need this library later. 2 This will be used inside our tests. 3 This makes it possible to reload changed namespaces quickly and easily, using the clj-reload library. 4 This will be used to enable Development Mode, which makes developing at the REPL easier. We’re going to build the application top-down, starting with the system map. [1] The app.system namespace it the highest structure in the application; it defines all the components in the system, and how they depen
1d on each other. Create a src directory, and then an app directory beneath that. That’s where more of our project’s code will live. src/app/system.clj (ns app.system (:require [com.stuartsierra.component :as component] [app.components.greeter :as greeter] (1) app.pedestal)) 1 These two namespaces haven’t been written yet. The system-map function defines a Component SystemMap in terms of key and value pairs. Each key is a keyword, and each value is a map or Clojure record. The using function identifies on which other components each component depends. Let’s work on the Pedestal component next. The :pedestal component will be responsible for configuring the Pedestal connector, and starting it. src/app/pedestal.clj (ns app.pedestal (:require [com.stuartsierra.component :as component] (1) [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] app.routes)) (2) 1 We need to require com.stuartsierra.component namespace to make the start and stop Lifecycle methods available. 2 This, once created, will define routes and handlers for the application. Earlier we said that we want to make certain components of the system map available to interceptors and handlers; we’ll define a custom interceptor for that purpose: src/app/pedestal.clj (defn- inject-components [components] {:name ::inject-components :enter #(assoc-in % [:request :components] components)}) This is actually a function that returns an interceptor. When that interceptor is eventually executed in the :enter phase, it will modify the context map passed to it, injecting the components map into the request map for later access. Where does the map of components come from? We’re almost there. Let’s start implementing the :pedestal component, as a Clojure record type. A Clojure record is a Clojure map that has certain built-in fields; in addition, a record can extend Clojure protocols. The result is a new class. The fields of the record are typically used to store dependencies and any local state, mutable or otherwise. (defrecord Pedestal [components connector] (1) component/Lifecycle (2) ) 1 Define the Pedestal record. This record will contain a components field, whose value will be supplied as another component from the system, and a connector field, managed by the Pedestal component itself. 2 Include the component/Lifecycle protocol since we’ll be implementing its methods next. We’ll first implement the start method of the Lifecycle protocol. It will contain our component initialization code. (start [this] (assoc this :connector (1) (-> (conn/default-connector-map 8890) (conn/with-interceptor (inject-components components)) (2) (conn/optionally-with-dev-mode-interceptors) (3) (conn/with-default-interceptors) (conn/with-routes app.routes/routes) (4) (hk/create-connector nil) (5) (conn/start!)))) 1 We’re adding the Pedestal connector to the component. 2 Create and add the ::inject-components interceptor to the very start of the interceptor list. 3 If the process was started in Development Mode, add additional development-only interceptors. 4 We haven’t defined the app.route/routes value yet. 5 Convert from a connector map to an (unstarted) connector. This start method goes inside defrecord, after the components/Lifecycle line. Every start deserves a stop You might think that there’s no need to add the stop method, since the service will run until it’s process is killed. That may be true in production, but in development and testing, this may not be the case. You should always undo, in stop, the changes made in start. In this example, we need to make sure that the Pedestal connector is stopped, or we could end up with a zombie thread keeping port 8890 locked. Generally, our tests create a new system map, start it, run tests, then stop it …​ but Component can also handle cases where the system map is created once and repeatedly started and stopped. Now let’s implement the stop method. It will contain our component teardown code. (stop [this] (conn/stop! connector) (assoc this :connector nil)) Most importantly here, we stop! the Pedestal connector; this ensure that port 8890 is no longer bound. That’s pretty important later, when we want to work with REPL-oriented development. Don’t dissoc in stop If we used dissoc here (instead of assoc with value nil), we would be removing a record key from a record; Clojure would quietly convert from a Pedestal record to a standard Clojure map. This isn’t a big deal, unless we try to start and stop the same system map repeatedly; the second start would not work correctly because the Clojure map has no start method. Now that we’ve got our component, we need a way to create and initialize an instance of it. Let’s tackle that next: (defn new-pedestal [] (map->Pedestal {})) Our component constructor is just a wrapper around the map-specific record constructor created by defrecord. The defrecord macro creates a number of constructors and any of them could be used here. It’s common to create a simple wrapper function, as shown here;
1 quite often, components grow to need additional setup and initialization which can occur in this kind of creation function. A service that doesn’t define any routes is not particularly useful so our next step is to provide at least one route. The :pedestal component expects the symbol app.routes/routes to be the routes for the application. Let’s create that file now. We’re going to define an endpoint for GET /greet; it will return a dynamic string: \"Greeting #1\", then \"Greeting #2\" and so forth on later requests. Let’s get started: Create a src/app/routes.clj file. This file will contain our routes and handlers. Well, just the one, because this is a toy example. src/app/routes.clj (ns app.routes (:require [app.components.greeter :as greeter])) (1) (defn get-greeting [request] (let [greeter (get-in request [:components :greeter])] (2) {:status 200 :body (greeter/generate-message! greeter)})) 1 Remember, we haven’t defined this component yet. 2 The :components map provided by the ::inject-components interceptor. That’s the handler, lets define the route that maps to the handler: (def routes #{[\"/greet\" :get get-greeting :route-name :greet]}) In this simple example, we use def, not defn, as the routes are entirely static. In many applications, some parts of the routes would be more dynamic, and routes would be a function with arguments. The best handlers in a Pedestal application are very simple, dealing with the Pedestal logic and the structure of the request and response maps, with all the real application-specific logic in a component or function. In our case, we have a :greeter component that builds the response body. Let’s create that now. src/app/components/greeter.clj (ns app.components.greeter (:require [com.stuartsierra.component :as component] [clj-commons.humanize :as h])) (1) (defrecord Greeter [*count] component/Lifecycle (start [this] (assoc this :*count (atom 0))) (stop [this] (assoc this :*count nil))) (defn new-greeter [] (map->Greeter {})) 1 Ignore this for now. That’s the component and its lifecycle, including a place to store some internal state …​ how many times the greeting was retrieved. Next we can focus on the actual logic: (defn generate-message! (1) [component] (let [n (-> component :*count (swap! inc))] (format \"Greeting #%d\\n\" n))) 1 Another Clojure naming convention: impure functions in Clojure are suffixed with a !. [2] We’re just about ready to fire this puppy up and kick the tires! [3] Technically, we have enough now to run our service, but for ease of use, we’re going to add a user namespace. At startup, Clojure always loads the user namespace if it is available. Create a test directory in the project root, and a user.clj within it. (ns user (:require [com.stuartsierra.component :as component] clj-reload.core (1) app.system)) (defonce *system (atom nil)) (2) (defn start! [] (reset! *system (-> (app.system/new-system) (component/start-system)))) (defn stop! [] (when-let [system @*system] (component/stop-system system)) (reset! *system nil)) 1 This is required to make use of clj-reload, which is key to REPL oriented development. 2 The system map will be stored in this global atom. Ok, now let’s fire up these tires up and kick the puppy! We’ll use clj tool to run our example. This should be familiar to you if you read through the Hello World. From the project’s root directory, fire up a REPL, and start the system. $ clj -A:test:dev-mode (1) Clojure 1.12.0 user=> (start!) (2) Routing table: ┌──────┬──────┬──────┐ (3) │Method│ Path │ Name │ ├──────┼──────┼──────┤ │ :get│/greet│:greet│ └──────┴──────┴──────┘ #<SystemMap> (4) user=> 1 The :test alias adds the test directory and some other dependencies to the classpath. The :dev-mode alias enables development mode. 2 Here’s that handy command from user.clj. 3 In development mode, the routing table is printed to the console at startup (and whenever a change is detected). [4] 4 This is the printed representation of the Component system map. You can now interact with the started service. Start a second terminal window and use curl to access the /greet route: $ curl http://localhost:8890/greet Greeting #1 $ curl http://localhost:8890/greet Greeting #2 $ That’s what we want to see! You’ll also see messages in the console of the server REPL: [] INFO io.pedestal.service.interceptors - {:msg \"GET /greet\", :line 40} [] INFO io.pedestal.service.interceptors - {:msg \"GET /greet\", :line 40} These messages are quite minimal because we haven’t configured logging in any way. Two important areas remain: REPL oriented development, and testing. Let’s start by getting a feel for how awesome the Clojure REPL is. Let’s see if we can get a prettier response to the client. The body of the response is inside the Greeter component, so only that needs to change: src/app/components/greeter.clj (defn generate-message! [component] (let [n (-> component :*count (swap! inc))] (format \"Greetings for the %s time\\n\" (h/ordinal n)))) (1) 1 ordinal returns \"1st\", \"2nd\", \"3rd\", \"4th\", etc. Just changing the source doesn’t affect the running program, but we can use clj-reload to load the changes. user=> (clj-reload.core/reload) Unloading user Unloading app.system Unloading app.pedestal Unloading app.routes Unloading app.components.greeter Loading app.components.greeter Loading app.routes Loading app.pedestal Loading app.system Loading user Reloaded 5 namespaces in 54 ms {:unloaded [user app.system app.pedestal app.routes app.components.greeter], :loaded [app.components.greeter app.routes app.pedestal app.system user]} user=> clj-reload has identified which files have changed, and has unloaded and reloaded all files affected by the changes. The code, including the system map and the Pedestal connector inside the :pedestal component, continues to run; it isn’t even necessary to stop! and start! the service. $ curl http://localhost:8890/greet Greetings for the 3rd time Because it’s the 3rd request, we get the expected response. Even though code reloaded, the system map is unchanged, and the internal state of the :greeter component isn’t affected …​ just the functions and other symbols defined in re-loaded namespaces has changed. We can also modify our routes, giving our API a different URL: src/app/routes.clj (def routes #{[\"/api/greet\" :get get-greeting :route-name :greet]}
1) Again, reload namespaces, then: $ curl http://localhost:8890/greet Not Found That’s actually successful …​ we’ve changed our routes to respond to /api/greet, so the URL /greet is met with a 404 Not Found response. If you look in your REPL window, you’ll see that your change has been adopted, and the new routing table printed: [] INFO io.pedestal.service.interceptors - {:msg \"GET /greet\", :line 40} Routing table: ┌──────┬──────────┬──────┐ │Method│ Path │ Name │ ├──────┼──────────┼──────┤ │ :get│/api/greet│:greet│ └──────┴──────────┴──────┘ Using the correct URL gets the expected result: $ curl http://localhost:8890/api/greet Greetings for the 4th time At this point, we’ve seen that we can iterate quickly when in development mode. You should be aware that when running a system map when development mode is not expressly enabled you will see that Pedestal gets \"locked in\" to the routes and many function definitions, even after code is changed and reloaded …​ you’ll often have to (stop!) and (start!) to see the effects of reloading namespaces. Fortunately, starting and stopping the system map is very quick, which is important when it comes to the next subject …​ testing. Let’s move on to testing our new service. Recall that our service contains one route, GET /api/greet. We’d like to verify that a request to that endpoints returns the proper greeting response. Before we can jump in and do that, though, we need to create some helpers. Some are just useful in general, while others are specific to our component implementation. Don’t worry, you won’t have to write too much code. Let’s do it! First create a system_test.clj file in the src directory. test/app/system_test.clj (ns app.system-test (:require [clojure.test :refer [deftest is]] [com.stuartsierra.component :as component] [io.pedestal.connector.test :refer [response-for]] matcher-combinators.test [matcher-combinators.matchers :as m] [clojure.string :as string] app.system)) The app.system-test namespace requires all the dependencies necessary for testing. We’ll make use of the io.pedestal.connector.test namespace, which contains functions to make it easier to integration test a Pedestal application. We’ll also make use of matcher-combinators, a testing library that makes it easy to make assertions about complex data, such as a response map. To integration test a system, we must be able to create and start the application’s system map, and ensure it is shut down at the end of each test. In a full application we’d expect to do this constantly, and this is a place where a Clojure macro can be handy. (defmacro with-system [[system-sym system-expr] & body] `(let [~system-sym (component/start-system ~system-expr)] (try ~@body (finally (component/stop-system ~system-sym))))) This macro makes it possible to create the system from any expression, assigning it to a local symbol that can be referenced in the body of the macro. This system is the base for the next part, a helper for running a request. Our second helper is used to test a request, returning a response. It’s built on top of the response-for function. (defn- response [system method url & more] (apply response-for (get-in system [:pedestal :connector]) method url more)) The response-for function needs the Pedestal connector, which is available from the system map. With the connector, the method (such as :get), the URL, and any additional arguments, response can exercise your Pedestal application almost exactly as it would when receiving a real HTTP request …​ just no HTTP is involved. response-for uses the interceptor chain to execute a request map (built from the arguments) as if it had arrived via HTTP, and returns a response map. Now that we’ve got our helpers implemented, let’s move on to our test. The test will exercise the GET /api/greet route of the application. (deftest greeting-test (with-system [system (app.system/new-system)] (1) (is (match? (2) {:status 200 :body \"Greetings for the 1st time\\n\"} (response system :get \"/api/greet\"))) (3) )) 1 Now we see why the with-system macro is so useful. 2 The (is (match? …​)) is provided by matcher-combinators. 3 The response function makes it simple to run the request. Now let’s run the tests from the command line: $ clj -X:test Running tests in #{\"test\"} Testing app.system-test [main] INFO io.pedestal.service.interceptors - {:msg \"GET /api/greet\", :line 40} Ran 1 tests containing 1 assertions. 0 failures, 0 errors. $ We can run that test any number of times, and because the system is started fresh each time, it will always be the \"1st\" greeting. We should check that the :greeting component’s state is working correctly. Add an assertion for a new request just after the first: (is (match? {:status 200 :body (m/via string/trim \"Greetings for the 2nd time\")} (1) (response system :get \"/api/greet\")))) 1 via is used to transform the actual response body before comparing it to the expected body Run it again to see both assertions execute: $ clj -X:test Running tests in #{\"test\"} Testing app.system-test [main] INFO io.pedestal.service.interceptors - {:msg \"GET /api/greet\", :line 40} [main] INFO io.pedestal.service.interceptors - {:msg \"GET /api/greet\", :line 40} Ran 1 tests containing 2 assertions. 0 failures, 0 errors. Before we wrap up, we should take a quick peek at what failures look like. Changing the word \"2nd\" to \"second\" in our test code will result in a test failure: $ clj -X:test Running tests in #{\"test\"} Testing app.system-test [main] INFO io.pedestal.service.interceptors - {:msg \"GET /api/greet\", :line 40} [main] INFO io.pedestal.service.interceptors - {:msg \"GET /api/greet\", :line 40} FAIL in (greeting-test) (system_test.clj:34) expected: (match? {:status 200, :body (m/via string/trim \"Greetings for the second time\")} (response system :get \"/api/greet\")) actual: {:status 200, :body (mismatch (expected \"Greetings for the second time\") (actual \"Greetings for the 2nd time\")), :headers {:strict-transport-security \"max-age=31536000; includeSubdomains\", :x-frame-options \"DENY\", :x-content-type-options \"nosniff\", :x-xss-protection \"1; mode=block\", :x-download-options \"noopen\", :x-permitted-cross-domain-policies \"none\", :content-security-policy \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"text/plain\"}} ... $ On a failure. matcher-combinators does a good job of describing exactly what failed and what the actual data provided was. It’s not visible here, but the console output even includes some colors, red vs. green, to highlight what’s wrong vs. what was expected. And that brings us to the end of this guide. For reference, here are the complete contents of all the files. deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} com.stuartsierra/component {:mvn/version \"1.2.0\"} org.clj-commons/humanize {:mvn/version \"1.2\"} (1) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}} :aliases {:test {:extra-paths [\"test\"] :extra-deps {io.github.cognitect-labs/test-runner {:git/tag \"v0.5.1\" :git/sha \"dfb30dd\"} nubank/matcher-combinators {:mvn/version \"3.10.0\"} (2) io.github.tonsky/clj-reload {:mvn/version \"1.0.0\"}} (3) :exec-fn cognitect.test-runner.api/test} :dev-mode {:jvm-opts [\"-Dio.pedestal.dev-mode=true\"]}}} (4) src/app/pedestal.clj (ns app.pedestal (:require [com.stuartsierra.component :as component] [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] app.routes)) (defn- inject-components [components] {:name ::inject-component :enter #(assoc-in % [:request :components] components)}) (defrecord Pedestal [components connector] component/Lifecycle (start [this] (assoc this :connector (-> (conn/default-connector-map 8890) (conn/with-interceptor (inject-components components)) (conn/optionally-with-dev-mode-interceptors) (conn/with-default-interceptors) (conn/with-routes app.routes/routes) (hk/create-connector nil) (conn/start!)))) (stop [this] (conn/stop! connector) (assoc this :connector nil))) (defn new-pedestal [] (map->Pedestal {})) src/app/routes.clj (ns app.routes (:require [app.components.greeter :as greeter])) (1) (defn get-greeting [request] (let [greeter (get-in request [:components :greeter])] (2) {:status 200 :body (greeter/generate-message! greeter)})) (def routes #{[\"/api/greet\" :get get-greeting :route-name :greet]}) src/app/system.clj (ns app.system (:require [com.stuartsierra.component :as component] [app.components.greeter :as greeter] (1) app.pedestal)) (defn new-system [] (1) (component/system-map :greeter (greeter/new-greeter) :components (component/using {} [:greeter]) :pedestal (5) (component/using (6) (app.pedestal/new-pedestal) [:components]))) src/app/components/greeter.clj (ns app.components.greeter (:require [com.stuartsierra.component :as component] [clj-commons.humanize :as h])) (1) (defrecord Greeter [*count] component/Lifecycle (start [this] (assoc this :*count (atom 0))) (stop [this] (assoc this :*count nil))) (defn new-greeter [] (map->Greeter {})) (defn generate-message! [component] (let [n (-> component :*count (swap! inc))] (format \"Greetings for the %s time\\n\" (h/ordinal n)))) (1) test/user.clj (ns user (:require [com.stuartsierra.component :as component] clj-reload.core (1) app.system)) (defonce *system (atom nil)) (2) (defn start! [] (reset! *system (-> (app.system/new-system) (component/start-system)))) (defn stop! [] (when-let [system @*system] (component/stop-system system)) (reset! *system nil)) test/app/system_test.clj (ns app.system-test (:require [clojure.test :refer [deftest is]] [com.stuartsierra.component :as component] [io.pedestal.connector.test :refer [response-for]] matcher-combinators.test [matcher-combinators.matchers :as m] [clojure.string :as string] app.system)) (defmacro with-system [[system-sym system-expr] & body] `(let [~system-sym (component/start-system ~system-expr)] (try ~@body (finally (component/stop-system ~system-sym))))) (defn- response [system method url & more] (apply response-for (get-in system [:pedestal :connector]) method url more)) (deftest greeting-test (with-system [system (app.system/new-system)] (is (match? {:status 200 :body \"Greetings for the 1st time\\n\"} (response system :get \"/api/greet\"))) ;; end::test[] ;; tag::test2[] (is (match? {:status 200 :body (m/via string/trim \"Greetings for the 2nd time\")} (4) (response system :get \"/api/greet\"))))) At the beginning of this guide, we set out to create a Pedestal component, demonstrate its usage as well as how to test it without starting the http server. In the process, we also introduced a few general purpose test helpers. Keep in mind that Pedestal services are highly configurable. It’s important to separate that configuration from the core component implementation. By limiting our component’s responsibilities to an HTTP server with Pedestal providing life cycle support, we can use it in a wide variety of Pedestal implementations. 1. This isn’t actually fair. The application was originally built bottom up, a little bit at a time. It’s just easier to understand when described top to bottom. 2. Impure functions can vary their result even when provided with the same input. Pure functions always return the same value for the same inputs. Functions may be impure because they have hidden mutable state, or because they perform some kind of I/O - even something as minor are reading the system clock. 3. Sorry for the mixed metaphor. 4. Also, in the console it prints correctly: the verticle bars align properly and connect. It looks a bit jarring here.","title":"Using Pedestal With Component","component":"pede
1stal","version":"0.8","name":"pedestal-with-component","url":"/pedestal/0.8/guides/pedestal-with-component.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":2},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":3},{"text":"Where We Are Going","hash":"_where_we_are_going","id":4},{"text":"Before We Begin","hash":"_before_we_begin","id":5},{"text":"Project and Dependencies","hash":"_project_and_dependencies","id":6},{"text":"Component System Map","hash":"_component_system_map","id":7},{"text":"Pedestal Component","hash":"_pedestal_component","id":8},{"text":"Component Injection","hash":"_component_injection","id":9},{"text":"Lifecycle Protocol","hash":"_lifecycle_protocol","id":10},{"text":"Defining Routes","hash":"_defining_routes","id":11},{"text":"Greeter Component","hash":"_greeter_component","id":12},{"text":"User Namespace","hash":"_user_namespace","id":13},{"text":"Running The Application","hash":"_running_the_application","id":14},{"text":"REPL oriented development","hash":"_repl_oriented_development","id":15},{"text":"Testing","hash":"_testing","id":16},{"text":"Create and manage the system","hash":"_create_and_manage_the_system","id":17},{"text":"Run a request","hash":"_run_a_request","id":18},{"text":"Test","hash":"testing","id":19},{"text":"What failure looks like","hash":"_what_failure_looks_like","id":20},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":21},{"text":"The Path So Far","hash":"_the_path_so_far","id":22}]},"17":{"id":17,"text":"If you wish to terminate SSL on the container for your application, you should use a connector that supports this, such as Jetty 12. Take care that Http-Kit does not support SSL so if you prefer that connector, you will have deploy an SSL capable proxy in front of your application. This guide will use Jetty 12 to serve the same application on an unencrypted HTTP port as well as an SSL protected/encrypted HTTPS port. This guide is for users who are familiar with: Clojure Pedestal Clojure’s CLI tooling SSL certificate handling and setup If you are new to Pedestal, you may want to go back to the Hello World guide. If you’re unfamiliar with SSL certificate setup on Jetty 12, you should follow their Configuring SSL/TLS KeyStores guide. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we’re going to present the earlier Hello World guide with SSL configured. Pedestal will configure the connector to watch the keystore where the certificates are stored and transparently load new certificates without down time when they are updated, for example every 60 days using the letsencrypt service. Certificates are typically issued with a 90 day expiry to increase security and to encourage automated issuing and replacement. Since we have secure communications available, we are going to use an interceptor to redirect insecure calls to the same resource on the HTTPS port and log the redirect. Obtain a certificate in PEM format and place it into a file that is readable by your application. You can follow the \"Configuring SSL/TLS KeyStores\" guide to make one yourself for testing if you do not yet have one. The following example assumes that it will be in the project root in a file called ./server.p12 but this file should be placed in a sensible and secure location and the path to the key store file is configurable. Similarly to the first example, create a project directory to contain the project sources, then create a deps.edn file, which includes the jetty connector that can handle SSL. deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.8.2-beta-11\"} (1) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}} :aliases {:run {:main-opts [\"-m\" \"hello-ssl\"] :exec-fn hello-ssl/start}}} 1 The SSL capable Jetty connector. The following application only answers GET requests on / and replies with a message that includes the server name sent in the Host header and protocol scheme (HTTP or HTTPS). Once you have acquired an SSL certificate in PEM format and put it into the file ./server.p12, most of the interesting changes happen in the :container-options map which we add to the default connector map. You can read more about container options in the Jetty 12 reference. src/hello_ssl.clj (ns hello-ssl (:require [io.pedestal.connector :as conn] [io.pedestal.http.jetty :as jetty] [io.pedestal.log :as log])) (defn greet-handler [request] {:status 200 :body (format \"Hello world from server %s using scheme %s!\" (:server-name request) (:scheme request))}) (1) (defn redirect-to-secure [secure-port] {:name :redirect-to-secure :enter (fn [{:keys [request route] :as context}] (if (-> request :scheme (= :http)) (2) (let [{:keys [server-name uri query-string]} request redirect-url (format \"https://%s:%s%s%s\" server-name secure-port uri (if query-string (str \"?\" query-string) \"\"))] (log/info :in ::redirect-to-secure :route-name (:route-name route) :server-name server-name :redirect-url redirect-url) (assoc context :response {:status 302 :headers {\"Location\" redirect-url}})) (3) context))}) (def routes #{[\"/\" :get [(redirect-to-secure 8443) greet-handler] :route-name :greet]}) (defn create-connector [] (-> (conn/default-connector-map 8080) (4) (assoc :container-options {:ssl? true (5) :ssl-port 8443 (6) :keystore \"./server.p12\" (7) :key-password \"your-keystore-password-here\" (8) :sni-host-check? false (9) :keystore-scal-interval 60}) (10) (conn/with-default-interceptors) (conn/with-routes routes) (jetty/create-connector nil))) (defn start [] (conn/start! (create-connector))) 1 A message including the server name and protocol scheme. 2 Check if this request is unencrypted 3 End processing with a response that redirects to the same URL on the configured HTTPS port 4 The port on which to serve unencrypted content. 5 Indicate that SSL is also required. Not strictly necessary since setting the next value implies this one. 6 The port on which to serve encrypted content. 7 The path to the SSL certificate file which MUST include the directory name. If you use a relative path without any directory name you will get a NullPointerException. 8 The password that is necessary to access the SSL certificate. Usually accessed from a secrets vault or less securely from an environment variable. 9 Disable the Server Name Indication check when running on localhost or when using a DNS wildcard certificate. Default is true and you should use true in production unless you use a wildcard certificate. 10 The number of seconds between checks for new certificates. 60 seconds 
1is the default so this setting is not strictly necessary and is included for demonstration. We’ll use clj tool to run our example. This should be familiar to you if you read through the Hello World. From the project’s root directory, fire up a REPL, and start the system. $ clj -M:run (1) [main] INFO org.eclipse.jetty.server.Server - jetty-12.0.22; built: 2025-06-02T15:25:31.946Z; git: 335c9ab44a5591f0ea941bf350e139b8c4f5537c; jvm 21.0.4+7-LTS [main] INFO org.eclipse.jetty.session.DefaultSessionIdManager - Session workerName=node0 [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started oeje10s.ServletContextHandler@16c2da2c{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@94b4ce6{STARTED}} [main] INFO org.eclipse.jetty.ee10.servlet.ServletContextHandler - Started oeje10s.ServletContextHandler@16c2da2c{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@94b4ce6{STARTED}} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@8f340ff{HTTP/1.1, (http/1.1, h2c)}{127.0.0.1:8080} [main] INFO org.eclipse.jetty.util.ssl.SslContextFactory - x509=X509@57f7590f(1,h=[yourservername.com, localhost, 127.0.0.1],a=[]) for Server@3255707f[provider=null,keyStore=file:///.../server.p12,trustStore=null] [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@e01664e{SSL, (ssl, http/1.1)}{127.0.0.1:8443} [main] INFO org.eclipse.jetty.server.Server - Started oejs.Server@43f41fe0{STARTING}[12.0.22,sto=0] @4047ms 1 The :run alias calls the start function in the hello-ssl namespace. You can now interact with the started service. Open a web browser to http://localhost:8080/ and https://localhost:8443/ to see SSL in action. Take care that if you self generated your SSL certificate, your browser will warn you that the certificate is not trusted and may prevent you from seeing the encrypted content. Follow Jetty’s Configuring SSL/TLS KeyStores guide for more information regarding certificate trust.","title":"Using Pedestal With SSL","component":"pedestal","version":"0.8","name":"pedestal-with-ssl","url":"/pedestal/0.8/guides/pedestal-with-ssl.html","titles":[{"text":"Guide Assumptions","hash":"_guide_assumptions","id":1},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":2},{"text":"Where We Are Going","hash":"_where_we_are_going","id":3},{"text":"Before We Begin","hash":"_before_we_begin","id":4},{"text":"Project and Dependencies","hash":"_project_and_dependencies","id":5},{"text":"The Simple Application","hash":"_the_simple_application","id":6},{"text":"Running The Application","hash":"_running_the_application","id":7}]},"18":{"id":18,"text":"Server-sent events (SSE) make it possible to stream events from a server to a client application. They are appropriate when you only need a unidirectional flow of events from the server to the client (if you need a bidirectional connection, then WebSockets are a better choice). After reading this guide, you will be able to: Configure Pedestal to stream SSE connections. Send events from Pedestal over the connection using core.async. Connect to the server-sent event stream from a JavaScript client. This guide is for intermediate users who have worked through some sample applications or the first few Hello World guides. In particular, you should know how to run a build, start a REPL, and start and stop your server. You do not need to know any other Clojure web frameworks, but if you do, you may find some of the comparisons useful. If not, that’s OK — just skip those sections. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In typical client/server interactions, the client, usually a web browser, sends a single request to the server, and the server responds with a single response. With SSEs, this is a bit different. The client still sends a single request, and receives a single response, but it doesn’t get the response all at once. The response body \"stays open\", and the server can keep appending more content to it. With SSEs, the response content type is text/event-stream. This event stream consists of multiple \"events\", short text-based messages. We’ll be creating a new Pedestal project, adding a simple route to stream a counter using server-sent events, and testing it with curl. Create a new project directory with a deps.edn and a source file: $ mkdir sse-demo $ cd sse-demo $ mkdir src deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} Let’s start with a basic home page and the server plumbing, then add SSE supp
1ort. We’ll need several namespaces for SSE support, so let’s bring them all in from the start: src/sse_demo.clj (ns sse-demo (:require [clojure.core.async :as async] [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.sse :as sse] [io.pedestal.interceptor :as interceptor])) A simple handler to verify things are working: src/sse_demo.clj (defn home-page [_request] {:status 200 :body \"Hello, World!\"}) Start the REPL, load the namespace, and verify it works: $ clj Clojure 1.12 user=> (require 'sse-demo) nil user=> (sse-demo/start) ... $ curl http://localhost:8890/ Hello, World! Now let’s add SSE support. We write a stream-ready callback; this function is called once the SSE connection is established. It receives a core.async channel and the SSE context as parameters. You send events on the channel using regular core.async functions, such as put! or >!!, and ultimately terminate the connection by calling clojure.core.async/close! on the channel. Each event is a map with :name and :data keys (and, optionally, an :id key). All values are converted to strings before being sent. The callback must send at least one event in order to properly initialize the stream. If it doesn’t, the client will think the stream is broken and keep reconnecting. Importantly, it is not the job of your callback to send all of the events; your callback should set in motion the concurrent machinery that sends the events. Events will continue to be sent to the client even after the callback returns, until either the client closes the connection, or your code closes the channel. In this example, we send ten counter events at one-second intervals: src/sse_demo.clj (defn stream-ready [event-chan context] (future (1) (dotimes [i 10] (async/>!! event-chan {:name \"counter\" :data i}) (2) (Thread/sleep 1000)) (async/close! event-chan))) (3) 1 The work is done in a future, so the callback returns immediately. 2 Each event is a map with :name and :data keys. 3 Closing the channel terminates the SSE connection. Now we create an interceptor that calls start-stream to initiate the event stream: src/sse_demo.clj (def counter-interceptor (interceptor/interceptor {:name ::counter :enter (fn [context] (sse/start-stream stream-ready context))})) (1) 1 start-stream sets up the SSE connection and calls stream-ready once it’s established. It returns the context with a :response key, which is an open-ended streaming response. An event stream is a particular kind of asynchronous response. start-stream returns a context with a response that \"stays open\", and the server keeps appending events from the channel to the response body. Finally, add the /counter route: src/sse_demo.clj (def routes #{[\"/\" :get home-page] [\"/counter\" :get counter-interceptor]}) And the connector plumbing: src/sse_demo.clj (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) (defonce *connector (atom nil)) (defn start [] (reset! *connector (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (when @*connector (stop)) (start)) Restart the connector to pick up the changes: user=> (require :reload 'sse-demo) nil user=> (sse-demo/restart) ... Now test the event stream with curl in another terminal: $ curl http://localhost:8890/counter event: counter data: 0 event: counter data: 1 event: counter data: 2 event: counter data: 3 event: counter data: 4 event: counter data: 5 event: counter data: 6 event: counter data: 7 event: counter data: 8 event: counter data: 9 The events arrive at one-second intervals, then the connection closes. SSE data is always received as a string. If you want to send JSON (or any other data format), it’s up to the sender to encode it and the receiver to decode it accordingly. None of the Pedestal interceptors are invoked when sending SSE events. The interceptors are used for the initial connection request from the client, but not on the events themselves. To consume the event stream from a browser, use the standard EventSource API: const eventSource = new EventSource(\"/counter\"); eventSource.addEventListener(\"counter\", (event) => { console.log(\"Counter:\", event.data); }); Coverage of the JavaScript EventSource (SSE) API is beyond the scope of this Pedestal guide. Consult the MDN documentation for a thorough introduction. For reference, here is the complete source: src/sse_demo.clj (ns sse-demo (:require [clojure.core.async :as async] [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.sse :as sse] [io.pedestal.interceptor :as interceptor])) (defn home-page [_request] {:status 200 :body \"Hello, World!\"}) (defn stream-ready [event-chan context] (future (1) (dotimes [i 10] (async/>!! event-chan {:name \"counter\" :data i}) (2) (Thread/sleep 1000)) (async/close! event-chan))) (3) (def counter-interceptor (interceptor/interceptor {:name ::counter :enter (fn [context] (sse/start-stream stream-ready context))})) (1) (def routes #{[\"/\" :get home-page] [\"/counter\" :get counter-interceptor]}) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) (defonce *connector (
1atom nil)) (defn start [] (reset! *connector (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (when @*connector (stop)) (start)) deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} We’ve covered a minimal setup for server-sent event configuration and usage and demonstrated how to receive events with curl and from JavaScript. For more details, see the Server-Sent Events Reference.","title":"Server-Sent Events","component":"pedestal","version":"0.8","name":"sse","url":"/pedestal/0.8/guides/sse.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Server-Sent Events Overview","hash":"_server_sent_events_overview","id":5},{"text":"Where We Are Going","hash":"_where_we_are_going","id":6},{"text":"Setting Up","hash":"_setting_up","id":7},{"text":"Starting Simple","hash":"_starting_simple","id":8},{"text":"Adding a Server-Sent Event Route","hash":"_adding_a_server_sent_event_route","id":9},{"text":"Trying It Out","hash":"_trying_it_out","id":10},{"text":"Connecting from JavaScript","hash":"_connecting_from_javascript","id":11},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":12},{"text":"Wrapping Up","hash":"_wrapping_up","id":13}]},"19":{"id":19,"text":"We believe in testing, and Pedestal’s design encourages you to write useful, meaningful, simple tests. Your application will consist of some amount of the following categories of code (going from most application-specific to least): Business logic Handler functions (calling business logic) Application-specific interceptors Pedestal-provided interceptors This guide focuses on unit testing of your application-specific interceptors and handlers. However, as they say, the whole is more than the sum of the parts …​ that is, your handlers will often rely on the incoming request being setup in specific ways due to the interceptors that execute before it; such as the way the body-params interceptor parses the :body InputStream as JSON or EDN data, and stores that into the request map as :json-params or :edn-params. At least some of your testing should be \"full stack\", to exercise these parts: the routing logic, and transformations of the request and response map. Pedestal makes it fast and easy to test the whole stack in this way. This document describes unit testing when using io.pedestal.connector APIs to create your service, the 0.7 version of this documentation discusses the equivalent work when using the io.pedestal.http APIs. We’ll start with isolated testing of interceptors, before moving on to grander things. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [context] (assoc context :widget {:id 1 :title \"foobar\"} ))})) This is the barest form of an interceptor; it ignores the incoming context and blindly adds a new key to it. We can test it either directly: (let [enter-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (enter-fn {}))))) ... but because its so simple, we can pass an empty context to the interceptor and still assert that is makes the desires change to the context. To test one or more interceptors' behavior as part of the interceptor chain, it is nearly as easy; we can levarage execute to execute a chain of interceptors, and get the final context map. (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) The value, widget-finder in this example, must be an interceptor, not a map that can be converted into an interceptor. The interceptor function ensures this. We can extend this approach to test c
1oordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [context] (if-let [widget (:widget context)] (assoc context :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc context :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) However, once you find yourself testing a few interceptors together this way, it may make more sense to test the entire stack, starting from the incoming request map. The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper function response-for, which makes it possible to fully test a route without starting up an HTTP service. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for function works with an initialized, but not started, connector. response-for will build a request map, and have the connector execute it (as if it was a request that came in from an HTTP request). response-for returns a slightly modified version of the response map. (let [response (response-for connector :get \"/api/hello\")] ...) Another example of response-for use is in the Pedestal with Component guide. response-for has three required arguments, followed by optional named arguments. The first three arguments are: The Pedestal connector The HTTP request method, a keyword (:get, :post, :delete, …​) The url as a complete URL, or relative to the root of the service The provided URL is parsed; if it is a complete URL (starting with \"http://\" or \"https://\") then the following keys will be set in the request map: :scheme (defaults to :http) :server-name (defaults to \"localhost\") :server-port (defaults to -1) Remember that request routing may take into account the scheme, server name, and port, as well as the request method and path. In addition, the :uri and :query-string keys will be set from the URI: The :uri starts with a leading slash and extends to the end of the URL, or the start of the query string. The :query-string is anything following a ?. Following the three required arguments are further optional arguments, as key/value pairs. A map of keys and values for the headers to send in the request. Keys and values are normally strings, but you may also use keywords or symbols for keys and values; they will be converted to strings. [1] Header strings are always converted to lower case. Defines the :body of the request. The value provided may be a String, an InputStream, or a File. This will be converted to an InputStream in the request :body. Advanced users can extend the RequestBodyCoercion protocol onto new types to support additional :body types. The response body will normally be nil or an InputStream; the :as parameter enables a conversion to something easier for tests. The default conversion is :string (treat the response as a UTF-8 encoded byte stream), but the values :byte-buffer and :stream are also allowed. To assist with testing, the headers in the response map are modified; normally they consist of string values and string keys; response-for converts the keys to lower case keywords. For example, the \"Content-Type\" header will be converted to :content-type. The values are unchanged, but keywords are easier to oeprate on in test assertions. The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for connector :get \"/hello\")))) A GET request has no body to specify, so the :body argument is simply omitted. A test could also make assertions about the response headers: (let [response (response-for connector :get \"/hello\")] (is (= \"text/plain\" (get-in response [:headers :content-type])))) Using the extremely useful matcher-combinators library, we can combine these tests into one (and verify the response status for good measure): (is (match? {:status 200 :headers {:content-type \"text/plain\"} :body \"Hello!\"} (response-for connector :get \"/hello\"))) POSTing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to supp
1ort request payload parsing. body-params uses the Content-Type header to identify how to parse the body; different content types result in different keys being added to the request. In any case, it is essential that the content type to be specified as part of the response-for call. (is (match? {:status 200} (response-for connector :post \"/foo\" :headers {:content-type \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\"))) If testing an HTTP form submission, the approach is similar except for how the content is encoded and described. (is (match? {:status 200} (response-for connector :post \"/login\" :headers {:content-type \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\"))) Nothing special needs to be done when testing routes which include async processing, response-for will only return once a response has been generated, even if request processing goes asynchronous. Truly asynchronous operations, such as WebSockets and Server-Sent Events can’t be tested using response-for as it blocks until a single response is produced. To test these kinds of asynchronous operations, it is necessary to fully start the connector and have a client send proper requests to the service - this is integration testing, beyond the scope of this document. 1. Qualified keywords or symbols will lose the namespace part.","title":"Unit testing","component":"pedestal","version":"0.8","name":"unit-testing","url":"/pedestal/0.8/guides/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing multiple interceptors","hash":"_testing_multiple_interceptors","id":2},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":3},{"text":"response-for arguments","hash":"_response_for_arguments","id":4},{"text":":headers","hash":"_headers","id":5},{"text":":body","hash":"_body","id":6},{"text":":as","hash":"_as","id":7},{"text":"response map","hash":"_response_map","id":8},{"text":"Testing GET requests","hash":"_testing_get_requests","id":9},{"text":"Testing POST","hash":"_testing_post","id":10},{"text":"Testing Async Processing","hash":"async","id":11},{"text":"Testing WebSockets and SSE","hash":"_testing_websockets_and_sse","id":12}]},"20":{"id":20,"text":"Pedestals primary mode of deployment is embedded: the Pedestal application starts up and, along the way, launches a servlet container (such as Jetty 12) and configures it to receive requests and process them. An alternate, and older, approach is to bundle the application as a WAR (Web Archive) file and deploy that into a running servlet container. Although there’s far less call for this kind of multi-tenant application hosting in modern times (since the advent of Docker containers and other kinds of virtualization), this is a long term feature of Pedestal that is still supported. In this deployment mode, the servlet container will instantiate an instance of a Pedestal-provided servlet class; when the servlet initializes, it will create a bridge from the Servlet world into the Pedestal world. We’ll cover the details below. In this guide we’ll show a very simple application, yet another \"hello world\" service. We’ll show how to package up the application’s sources, resources, and library dependencies into a WAR file. Finally, we’ll demonstrate how to deploy the WAR file into a Jetty service running inside a Docker container. You’ll need to have Docker installed as part of this guide. We’ve mentioned deployments and WAR files, so let’s detour into some more specifics about what a WAR file actually is. A WAR file is an archive file, like a .zip or .jar file, with a particular structure. WEB-INF/web.xml — file: deployment descriptor needed by the container WEB-INF/classes — directory of resource files and compiled Clojure namespaces WEB-INF/lib — directory containing additional libraries that are needed by the application, such as Clojure and Pedestal This structure provides the servlet container with the information it needs to set up a classloader specifically for the deployed WAR file, and direct incoming HTTP requests into it. As with the other guides, we’ll define the dependencies of our project using a deps.edn file. deps.edn {:paths [\"src\" \"resources\"] :deps {io.pedestal/pedestal.servlet {:mvn/version \"0.8.2-beta-11\"} org.eclipse.jetty.ee10.websocket/jetty-ee10-websocket-jakarta-server {:mvn/version \"12.0.35\"} ; (1) org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}} :aliases {:build ; (2) {:ns-default build :paths [\"build\"] :deps {io.github.clojure/tools.build {:mvn/version \"0.10.13\"} babashka/fs {:mvn/version \"0.5.33\"}}}}} 1 WebSocket classes must be included even if not used by the application. 2 Used when compiling the project into a WAR file. The main dependency is on io.pedestal/pedestal.servlet; all other necessary Pedestal dependencies are provided as transitive dependencies from this. pedestal.servlet is not linked to any particular implementation of the Servlet API. In a servlet container deployment, the WAR file normally does not have dependencies on the Servlet API; the servlet container, which has control over the classpath of the deployed WAR, adds the Servlet API in automatically. pedestal.servlet does not have a dependency on the Servlet API --- well, actually, it does under development and when compiling some Java classes, but it doesn’t export those dependencies to projects like this one. However, using WebSockets is different [1] and if the WAR file makes use of WebSockets it must include the WebSocket API (mostly interfaces) and implementation files (classes implementing those interfaces). These should be matched to the servlet container, so we’re using the Jetty implementations here. Even though this application doesn’t use WebSockets, the Pedestal libraries do have WebSocket support built-in, so these dependencies must be included, even if they won’t be actively used. src/org/example/war/service.clj (ns org.example.war.service (:require [io.pedestal.connector :as conn] [io.pedestal.connector.servlet :as servlet])) (defn- hello [_request] {:status 200 :body \"Greetings from inside the WAR file.\"}) (defn connection-map [] (-> (conn/default-connector-map -1) (conn/with-default-interceptors) (conn/with-routes #{[\"/hello\" :get hello]}))) (defn create-bridge \"Invoked from the Servlet to create the bridge between Servlet API and Pedestal.\" [servlet] (servlet/create-bridge servlet (connection-map))) Our application is very simple, it responds to the URL GET /hello and responds with a snippet of text. This is all the code for our application (!) --- we’ve skimped on writing tests. The connection-map function is used to create a connection map as if we were going to create a connector …​ but we stop short. In fact, all we really care about at the end are the :interceptors and :initial-context keys of this connection map. The magic happens in the create-bridge function; this will be invoked from the servlet to create the ConnectorBridge object. The create-bridge function does the heavy lifting. This bridge object has a service method that is passed the HttpServletRequest and HttpServletResponse and does all the Pedestal-related processing. web.xml <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\" id=\"WebApp_ID\" version=\"3.0\"> <servlet-mapping> <servlet-name>connector</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>connector</servlet-name> <servlet-class>io.pedestal.servlet.ConnectorServlet</servlet-class> <init-param> <param-name>io.pedestal.connector.bridge-fn</param-name> <param-value>org.example.war.service/create-bridge</param-value> </init-param> </servlet> </web-app> Inside all this XML are three basic constructors: The servlet handles every request passed to it (that’s the /*) The servlet is class ConnectorServlet, provided by the pede
1stal-servlet library The servlet invokesthe function org.example.war.service/create-bridge when it initializes So, the request comes into the Jetty servlet container and it decides which WAR deployment it belongs to, then which servlet inside the WAR deployment is responsible, then asks the servlet to do the work, which passes through the ConnectorBridge and into Pedestal to do the actual work. To create a WAR file, we need to package up the sources, the deployment descriptor, and any libraries, such as pedestal.servlet (and all the its transitive dependencies). We can do this in a quick-and-dirty style using a small amount of Clojure code. When we discussed dependencies, there was a :build alias: this build alias sets up build as a classpath root, and brings in dependencies on io.github.clojure/tools.build (for reading the deps.edn file) and babashka/fs (for copying files and building archives). build/build.clj (ns build (:require [babashka.fs :as fs] clojure.pprint [clojure.tools.build.api :as b])) (defn- copy [from work-dir sub-dir] (let [out-dir (fs/path work-dir sub-dir)] (println \"Copying\" from \"to\" sub-dir) (fs/copy-tree from out-dir))) (defn war [_] (let [work-dir (fs/path \"target/archive\") lib-dir (fs/path work-dir \"WEB-INF/lib\") classes-dir (fs/path work-dir \"WEB-INF/classes\") basis (b/create-basis)] (1) (fs/delete-tree work-dir) (fs/create-dirs lib-dir) (fs/create-dirs classes-dir) (doseq [file (->
1 basis :classpath keys sort)] (2) (let [path (fs/path file)] (println \"Copying\" (fs/file-name path)) (if (fs/directory? path) (fs/copy-tree path classes-dir) (fs/copy path lib-dir)))) (println \"Copying web.xml\") (fs/copy \"web.xml\" (fs/path work-dir \"WEB-INF\")) (fs/zip (fs/path \"target/app.war\") [work-dir] {:root \"target/archive\"}) (3) (println \"Created target/app.war\"))) 1 Create the basis 2 Iterate over the classpath entries and copy them into the working directory 3 Zip up the working directory to create the WAR file A basis is a fully expanded definition of the contents of the deps.edn file, including all the source roots, direct dependencies, and transitive dependencies. We use all that to copy files to a working directory, and then we package it all together as a WAR file. The command clojure -T:build war will run this code: $ clojure -T:build war Copying cheshire-6.0.0.jar Copying transit-clj-1.0.333.jar Copying transit-java-1.0.371.jar Copying jackson-core-2.18.3.jar ... Copying ring-core-1.14.1.jar Copying tigris-0.1.2.jar Copying resources Copying src Copying web.xml Created target/app.war $ The first time through it may take some time to download the 13 MB of dependencies. This is just a minimal example; a more complete version might: AOT-compile your application and its dependencies Generate the web.xml file automatically Package up static resources that Jetty can serve automatically, outside of Pedestal Add other servlets or servlet filters to augment what Pedestal is doing Now that we have a WAR file, we can show how to deploy it. We’ll make use of Docker to simplify deployment …​ really, to not leave a mess on your computer after we’re done. Dockerfile FROM jetty:12.0.22-jdk21-alpine-amazoncorretto RUN java -jar /usr/local/jetty/start.jar --add-modules=ee10-deploy ADD target/app.war /var/lib/jetty/webapps/ROOT.war A Dockerfile describes how to build a Docker image — a snapshot of a virtual computer running some kind of Linux with everything installed and configured and ready to go. Most of the work was done for us in the image we extend from, the standard jetty 12 Docker image. It’s just a matter of enabling WAR deployments and copying the app.war file into the image. The WAR files go in the /var/lib/jetty/webapps folder inside the Docker image, and the special name ROOT.war is recognized by Jetty as a WAR file that deploys without any kind of prefix on the path. You can build this manually with docker build …​, and run it with docker run …​ …​ but our final step is to show a simple script file that puts all the pieces together To simplify things, we’ll provide a script that puts everything together and ensures that Jetty is running: run.sh #!/bin/bash set -euo pipefail clojure -T:build war docker build . -t war-demo docker run -p 8080:8080 war-demo This script builds the WAR file, then builds the Docker image and tags it as war-demo. Finally, it starts Docker executing the image in a new container, and it binds port 8080 on your computer to port 8080 inside the Docker container. That’s the default port that Jetty uses. If we run that script: $ ./run.sh Copying cheshire-6.0.0.jar Copying transit-clj-1.0.333.jar ... Copying src Copying web.xml Created target/app.war [+] Building 1.6s (9/9) FINISHED docker:desktop-linux => [internal] load build definition from Dockerfile ... => => writing image sha256:5b54af80cb94b25da6b86f7e82fa6115eca301c11fedafae120275122ad74664 0.0s => => naming to docker.io/library/war-demo 0.0s What's next: View a summary of image vulnerabilities and recommendations → docker scout quickview /usr/lib/jvm/java-21-amazon-corretto/bin/java -Djava.io.tmpdir=/tmp/jetty -Djetty.home=/usr/local/jetty -Djetty.base=/var/lib/jetty -Djava.io.tmpdir=/tmp/jetty --class-path /var/lib/jetty/resources:/usr/local/jetty/lib/logging/slf4j-api-2.0.17.jar:/usr/local/jetty/lib/logging/jetty-slf4j-impl-12.0.22.jar:/usr/local/jetty/lib/jetty-http-12.0.22.jar:/usr/local/jetty/lib/jetty-server-12.0.22.jar:/usr/local/jetty/lib/jetty-xml-12.0.22.jar:/usr/local/jetty/lib/jetty-util-12.0.22.jar:/usr/local/jetty/lib/jetty-io-12.0.22.jar:/usr/local/jetty/lib/jetty-deploy-12.0.22.jar:/usr/local/jetty/lib/jetty-session-12.0.22.jar:/usr/local/jetty/lib/jetty-security-12.0.22.jar:/usr/local/jetty/lib/jetty-ee-12.0.22.jar org.eclipse.jetty.xml.XmlConfiguration java.io.tmpdir=/tmp/jetty java.version=21.0.7 jetty.base=/var/lib/jetty jetty.base.uri=file:///var/lib/jetty jetty.home=/usr/local/jetty jetty.home.uri=file:///usr/local/jetty jetty.webapp.addHiddenClasses=org.eclipse.jetty.logging.,file:///usr/local/jetty/lib/logging/,org.slf4j. runtime.feature.alpn=true slf4j.version=2.0.17 /usr/local/jetty/etc/jetty-bytebufferpool.xml /usr/local/jetty/etc/jetty-threadpool.xml /usr/local/jetty/etc/jetty.xml /usr/local/jetty/etc/jetty-deploy.xml /usr/local/jetty/etc/sessions/id-manager.xml /usr/local/jetty/etc/jetty-ee-webapp.xml /usr/local/jetty/etc/jetty-http.xml --env ee10 -cp /usr/local/jetty/lib/jakarta.servlet-api-6.0.0.jar -cp /usr/local/jetty/lib/jetty-ee10-servlet-12.0.22.jar -cp /usr/local/jetty/lib/jetty-ee10-webapp-12.0.22.jar contextHandlerClass=org.e
1clipse.jetty.ee10.webapp.WebAppContext /usr/local/jetty/etc/jetty-ee10-webapp.xml /usr/local/jetty/etc/jetty-ee10-deploy.xml 2025-06-06 23:27:34.455:INFO :oejs.Server:main: jetty-12.0.22; built: 2025-06-02T15:25:31.946Z; git: 335c9ab44a5591f0ea941bf350e139b8c4f5537c; jvm 21.0.7+6-LTS 2025-06-06 23:27:34.476:INFO :oejdp.ScanningAppProvider:main: Deployment monitor ee10 in [file:///var/lib/jetty/webapps/] at intervals 0s 2025-06-06 23:27:34.482:INFO :oejd.DeploymentManager:main: addApp: App@279fedbd[ee10,null,/var/lib/jetty/webapps/ROOT.war] 2025-06-06 23:27:34.768:INFO :oejew.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.ee10.jsp.JettyJspServlet 2025-06-06 23:27:34.788:INFO :oejsh.ContextHandler:main: Started oeje10w.WebAppContext@5a5338df{ROOT,/,b=file:///tmp/jetty-0_0_0_0-8080-ROOT_war-_-any-10435194439566279050/webapp/,a=AVAILABLE,h=oeje10s.SessionHandler@418c5a9c{STARTED}}{/var/lib/jetty/webapps/ROOT.war} 2025-06-06 23:27:34.827:INFO :oejes.ServletContextHandler:main: Started oeje10w.WebAppContext@5a5338df{ROOT,/,b=file:///tmp/jetty-0_0_0_0-8080-ROOT_war-_-any-10435194439566279050/webapp/,a=AVAILABLE,h=oeje10s.SessionHandler@418c5a9c{STARTED}}{/var/lib/jetty/webapps/ROOT.war} 2025-06-06 23:27:34.829:INFO :oejs.DefaultSessionIdManager:main: Session workerName=node0 2025-06-06 23:27:34.836:INFO :oejs.AbstractConnector:main: Started ServerConnector@2796aeae{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} 2025-06-06 23:27:34.846:INFO :oejs.Server:main: Started oejs.Server@8f4ea7c{STARTING}[12.0.22,sto=0] @677ms Again, there will be a lot of downloads the first time you run this script …​ but in the end, Jetty starts up and immediately deploys the ROOT.war file. Jetty will continue to run until you enter Ctrl-C, so in another window, you can use curl to send a request to the application: $ curl -v localhost:8080/hello * Host localhost:8080 was resolved. * IPv6: ::1 * IPv4: 127.0.0.1 * Trying [::1]:8080... * Connected to localhost (::1) port 8080 > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < Server: Jetty(12.0.22) < Strict-Transport-Security: max-age=31536000;
1 includeSubdomains < X-Frame-Options: DENY < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < X-Download-Options: noopen < X-Permitted-Cross-Domain-Policies: none < Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; < Content-Type: text/plain < Transfer-Encoding: chunked < * Connection #0 to host localhost left intact Greetings from inside the WAR file. $ The -v option shows the headers and data sent and received; you can not only see the content provided by the hello handler function, but you can also see all the headers provided by the default interceptors. Deploying a Pedestal application as a WAR file is a completely viable approach, especially useful when the Pedestal application must work along-side pure-Java servlets and servlet filters. In fact, the Clojure code is the smallest part of this guide - far more work was needed to package up the code into a WAR file, and a bit more (specific to this guide) to deploy that WAR file into a Docker container. 1. Perhaps because they were introduced relatively recently.","title":"WAR Deployment","component":"pedestal","version":"0.8","name":"war-deployment","url":"/pedestal/0.8/guides/war-deployment.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Structure of a WAR File","hash":"_structure_of_a_war_file","id":2},{"text":"Dependencies","hash":"_dependencies","id":3},{"text":"Clojure Service","hash":"_clojure_service","id":4},{"text":"Deployment Descriptor","hash":"_deployment_descriptor","id":5},{"text":"Creating the WAR file","hash":"_creating_the_war_file","id":6},{"text":"Docker and Jetty","hash":"_docker_and_jetty","id":7},{"text":"Running Jetty","hash":"_running_jetty","id":8},{"text":"Conclusion","hash":"_conclusion","id":9}]},"21":{"id":21,"text":"WebSockets provide a persistent, bidirectional connection between a client and a server. Once established, either party may send messages to the other at any time — making WebSockets the right choice for real-time features such as chat, live notifications, and collaborative editing. If you only need a unidirectional stream of events from the server, consider Server-Sent Events instead. After reading this guide, you will be able to: Define a WebSocket route in Pedestal. Handle WebSocket lifecycle events: open, message, and close. Send text messages back to a connected client. Connect to the WebSocket endpoint from a JavaScript client. This guide is for intermediate users who have worked through some sample applications or the first few Hello World guides. In particular, you should know how to run a build, start a REPL, and start and stop your server. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. A WebSocket connection starts like any other HTTP request: the client sends a GET request with a special Upgrade: websocket header. If the server accepts, both sides switch to the WebSocket protocol on the same TCP connection. From that point on, either party can send text or binary messages at any time until one of them closes the connection. Unlike SSE, where messages flow only from server to client, WebSockets are fully bidirectional. We’ll create a simple echo endpoint at /ws/echo. When a client sends a text message, the server echoes it back prefixed with \"echo: \". Create a new project directory: $ mkdir websocket-demo $ cd websocket-demo $ mkdir -p src deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} Let’s start with the namespace and a basic home page to confirm the server is running before we add WebSocket support. src/websocket_demo.clj (ns websocket-demo (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.service.websocket :as ws])) src/websocket_demo.clj (defn home-page [_request] {:status 200 :body \"Hello, World!\"}) Start the REPL, load the namespace, and verify the home page works: $ clj Clojure 1.12 user=> (require 'websocket-demo) nil user=> (websocket-demo/start) ... $ curl http://localhost:8890/ Hello, World! WebSocket connections are handled by a websocket interceptor, created with websocket-interceptor. You provide callback functions for the WebSocket lifecycle events you care about. src/websocket_demo.clj (def echo-interceptor (ws/websocket-interceptor ::echo {:on-open (fn [_channel _request] (1) (println \"WebSocket connection opened\") nil) :on-text (fn [channel _proc text] (2) (ws/send-text! channel (str \"echo: \" text))) :on-close (fn [_channel _proc reason] (3) (println \"WebSocket connection closed:\" reason))})) 1 :on-open is called when the connection is first established. Its return value becomes the process object — passed as the second argument to all subsequent callbacks. For a simple echo endpoint there’s no shared state needed, so we return nil. 2 :on-text receives each text message from the client. send-text! sends a reply back to the same client. 3 :on-close is called when the connection closes, regardless of which side initiated it. The reason is a keyword such as :normal or :abnormal. There is also an :on-binary callback for binary (byte) messages. Now add the route. WebSocket upgrade requests are ordinary HTTP GET requests, so the route uses :get as the method: src/websocket_demo.clj (def routes #{[\"/\" :get home-page :route-name ::home] [\"/ws/echo\" :get echo-interceptor]}) (1) 1 WebSocket upgrade requests are always GET requests. And the connector plumbing (unchanged from the basic setup): src/websocket_demo.clj (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) (defonce *connector (
1atom nil)) (defn start [] (reset! *connector (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (when @*connector (stop)) (start)) Restart the connector to pick up the changes: user=> (require :reload 'websocket-demo) nil user=> (websocket-demo/restart) ... Install websocat if you don’t have it: $ brew install websocat # macOS $ cargo install websocat # or via Rust Then connect and send a message: $ websocat ws://localhost:8890/ws/echo hello echo: hello goodbye echo: goodbye Type a line and press Enter; the server echoes it back prefixed with \"echo: \". Press Ctrl-C to close the connection. To connect from a browser, use the standard WebSocket API: const socket = new WebSocket(\"ws://localhost:8890/ws/echo\"); socket.addEventListener(\"open\", () => { socket.send(\"hello from the browser\"); }); socket.addEventListener(\"message\", (event) => { console.log(\"Received:\", event.data); }); socket.addEventListener(\"close\", () => { console.log(\"Connection closed\"); }); Coverage of the JavaScript WebSocket API is beyond the scope of this guide. Consult the MDN documentation for a thorough introduction. For reference, here is the complete source: src/websocket_demo.clj (ns websocket-demo (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.service.websocket :as ws])) (defn home-page [_request] {:status 200 :body \"Hello, World!\"}) (def echo-interceptor (ws/websocket-interceptor ::echo {:on-open (fn [_channel _request] (1) (println \"WebSocket connection opened\") nil) :on-text (fn [channel _proc text] (2) (ws/send-text! channel (str \"echo: \" text))) :on-close (fn [_channel _proc reason] (3) (println \"WebSocket connection closed:\" reason))})) (def routes #{[\"/\" :get home-page :route-name ::home] [\"/ws/echo\" :get echo-interceptor]}) (1) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) (defonce *connector (atom nil)) (defn start [] (reset! *connector (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (when @*connector (stop)) (start)) deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} We’ve set up a minimal WebSocket endpoint, handled the open/message/close lifecycle, and tested it with websocat and from JavaScript. For more details — connection limits, binary messages, subprotocols, and the full API — see the WebSockets Reference.","title":"WebSockets","component":"pedestal","version":"0.8","name":"websockets","url":"/pedestal/0.8/guides/websockets.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"WebSocket Overview","hash":"_websocket_overview","id":5},{"text":"Where We Are Going","hash":"_where_we_are_going","id":6},{"text":"Setting Up","hash":"_setting_up","id":7},{"text":"Starting Simple","hash":"_starting_simple","id":8},{"text":"Adding a WebSocket Route","hash":"_adding_a_websocket_route","id":9},{"text":"Trying It Out","hash":"_trying_it_out","id":10},{"text":"Connecting from JavaScript","hash":"_connecting_from_javascript","id":11},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":12},{"text":"Wrapping Up","hash":"_wrapping_up","id":13}]},"22":{"id":22,"text":"It doesn’t take very long to bump into the word \"Interceptor\" when you’re working with Pedestal. They’re the most important construct in the library, the essential unit-of-work that virtually everything else in Pedestal is built upon. After reading this guide, you will be able to: Explain the role of interceptors in Pedestal Compare interceptors to middleware Create interceptors that affect execution of remaining interceptors Understand how to handle errors Pedestal exists to support the following goals: Enable code reuse, especially for cross-cutting concerns. Keep code as functional — free of side effects — as possible. Ensure that code can be easily tested. Support asynchronous request flows. Many developers come to Pedestal from an earlier Clojure web framework, Ring; Ring has a very simple model: A servlet container receives an HTTP request and creates a request map A handler is passed the request map, and returns a response map The response map is used to generate an HTTP response Cross-cutting concerns, such as logging and authentication, are handled in Ring via middleware. Middleware is a special class of function with a particular purpose. A middleware function accepts a handler function, wraps it with new behavior, and returns a new handler function. For example, a middleware function could parse the :body key of the request (which starts as a Java InputStream) and pass it though a JSON parser, replacing :body with the parsed content. Any handlers downstream of that middleware can expect the :body key to be parsed JSON. Because a Ring handler is a stack of functions that invoke functions[1] there’s no room to supp
1ort asynchronous flows. The essence of an asynchronous flow is that a function can return early, and later, resume from where it left off - a significant challenge for a language that doesn’t support this concept, such as Java. As we’ll see shortly, interceptors provide a different model where the return early and resume later is more explicit. An interceptor provides one step in the processing of an overall request. Interceptors are formed into a pipeline; each interceptor is invoked to do its one step, then control returns to Pedestal, which then invokes the next interceptor in the pipeline. An interceptor might be specific to a particular route, or it might be more generic and wide-ranging, such as an interceptor that logs requests, or enforces authentication. Even saying \"one step\" is not exactly correct; Pedestal breaks request processing into two phases: enter and leave. The enter phase is related to processing of the incoming request; this covers cross-cutting concerns such as logging and authentication, but also routing, and route-specific interceptors and handlers. The leave phase begins once a response has been created and represents an \"unwinding\", in much the same way that a stack of function calls eventually unwind towards the initial caller. There’s also an error phase, which occurs when an exception is thrown by an interceptor; this allows other interceptors to report or record the exception, and generate a useful response; the error phase is really a subset of the leave phase. In practical terms, an interceptor is an instance of the Interceptor record — a specialized Clojure map. This map has keys :name, :enter, :leave, and :error. You rarely create an Interceptor directly, instead you pass a map, or some other value[2] to the interceptor function and an Interceptor record is returned [3]. An Interceptor should have a :name, and must have at least one of :enter, :leave, and :error. :name A keyword used (especially in logging) to identify the interceptor; generally, this is a namespace qualified keyword. :enter A callback function, passed the context map, returns a possibly modified context map. :leave A callback function, passed the context map, returns a possibly modified context map. :error A callback function, passed the context map and an exception, returns a possibly modified context map. Why not a Protocol? This may look like a situation where a Clojure Protocol would make sense. However, a Protocol would have to define all four parts (a method corresponding to each of :name, :enter, :leave, and :error). This would not only be cumbersome, but would prevent some optimizations that occur inside Pedestal. So the context map flows through each interceptor; first through the enter phase, then later through the leave phase: The previous diagram shows a single interceptor, but the whole point here is that the interceptors work in a pipeline: This pipeline is composed of two parts: the interceptor queue and the interceptor stack. These are both stored inside the context map. The queue is a list of interceptors that are waiting to execute in the enter phase. The stack is a list of interceptors that have already executed - it is used by the leave and error phases. As an interceptor is popped of the queue, it is pushed onto the stack. When execution switches from the enter phase to the leave (or error) phase, the logic changes to popping each successive interceptor off the stack to invoke the :leave or :error callback. Not all interceptors in the queue will execute: any interceptor can attach a response map (as key :response) to the context. That switches gears to the leave phase. Likewise, simply running out of interceptors in the enter phase will switch to the leave phase. Earlier we said that interceptors are the \"unit of work\" for Pedestal. Even routing is one unit of work; a router interceptor works by matching an incoming request to a route, and the route provides a list of interceptors which are simply added to the queue. It is perfectly acceptable for other interceptors to extend the interceptor queue in just the same way. Remember that an interceptor’s :enter callback is executed to completion before subsequent interceptor’s are invoked; this means that any local symbol assigned via a let is out of scope for the later interceptors. If an interceptor needs to record information during the enter phase and access it again during the leave phase, there is no recourse but to add that data to the context map. A simple example is a timing interceptor that tracks how long it take to process a request: (def timing-interceptor (interceptor {:name ::timing (1) :enter (fn [context] (assoc context ::start-ms (System/currentTimeMillis))) (2) :leave (fn [context] (let [{::keys [start-ms]} context (3) elapsed-ms (- (System/currentTimeMillis) start-ms)] (log/debug :elapsed-ms elapsed-ms) (4) (dissoc context ::start-ms)))}
1)) (5) 1 Give the interceptor a unique, namespace qualified name. 2 Update the context with a new key, namespace qualified to avoid collisions. 3 Destructuring trick, put :keys into a namespace to destructure using that namespace. 4 A side effect, but also the point of this interceptor. 5 Good hygiene is to dissoc anything that was previously added by the interceptor. Any callback also has the option to work asynchronously; this is quite simple: return a core.async channel that will eventually convey the updated context map rather than simply returning the updated context map. Most often, going asynchronous is simply a matter of using the clojure.core.async/go macro: (def user-data-interceptor (interceptor {:name ::user-data :enter (fn [context] (go (1) (let [db (:db context) (2) user-id (get-in context [:request :query-parameters :user-id]) user-ch (db/get-user db user-id)] (3) (assoc context :user (<! user-ch))))) (4) :leave #(dissoc % :user)})) 1 A go block returns a channel that conveys the result. 2 Assumption is that some other interceptor put the :db key into the context. 3 db/get-user is asynchronous and returns a channel that conveys the user. 4 <! waits for the result from user-ch, which is then applied to the context. A simple key is used since other interceptors need access to this user data. When an interceptor returns a channel, Pedestal will return the request-processing thread to the servlet container, so that it can be used to process other incoming requests. It will then wait for the channel to convey the new context, and continue from there. All remaining interceptors for the request will execute inside a thread from core.async's dispatch thread pool. This only a thumbnail sketch; it doesn’t address likely scenarios such as what if the user doesn’t exist? What if there’s a database failure? What if reading the user from the database takes a really long time? When an interceptor throws an exception, the exception is caught by Pedestal, and the pipeline shifts to the error phase. In the error phase, Pedestal works up the stack of previously executed interceptors. For interceptors with an :error callback, that callback is passed the context map and the exception. The callback can: Return the context map; the exception will be ignored and Pedestal will switch to the leave phase. Attach the exception to the context map to allow a different intercept to handle the exception. Throw a new exception if unable to handle the original exception. Further details are in the error handling reference. One of Pedestal’s core values is to create flexible utilities and use them in specific ways. One example of this approach is that the interceptor pipeline is not inherently tied to an HTTP request/response cycle; that is a specific application of the pipeline, setup via connector or the Servlet Interceptor. The same approach could be used for any number of other purposes, including: Handling messages sent to a JMS queue or Kafka topic Transforming a document Sending an outgoing HTTP request and processing the response The main differences are: What data is stored in the initial context map What are the termination conditions of the enter phase (via the terminate-when function) More details are available in the reference section: Interceptors Default Interceptors Error Handling execute 1. Ring has, more recently, itself started to support asynchronous flows and WebSockets. 2. For example, a handler function in a route will be wrapped as an interceptor. 3. In most cases, even this step is performed for you, such as interceptors that are referenced as part of a route","title":"What is an Interceptor?","component":"pedestal","version":"0.8","name":"what-is-an-interceptor","url":"/pedestal/0.8/guides/what-is-an-interceptor.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Interceptor Goals","hash":"_interceptor_goals","id":2},{"text":"Comparison to Ring","hash":"_comparison_to_ring","id":3},{"text":"Core Definition","hash":"_core_definition","id":4},{"text":"Queue and Stack","hash":"_queue_and_stack","id":5},{"text":"Transition from Enter to Leave","hash":"_transition_from_enter_to_leave","id":6},{"text":"Dynamic Queue","hash":"_dynamic_queue","id":7},{"text":"Sharing Information between phases","hash":"_sharing_information_between_phases","id":8},{"text":"Asynchronous Results","hash":"_asynchronous_results","id":9},{"text":"Error Handling","hash":"_error_handling","id":10},{"text":"Other Uses for Interceptor Pipelines","hash":"_other_uses_for_interceptor_pipelines","id":11},{"text":"Where To Next?","hash":"_where_to_next","id":12}]},"23":{"id":23,"text":"This is the fourth part in the tutorial. By now, you’ve built a simple service that vends out friendly greetings by name and can handle a few content types. We’re going to leave our greeting service alone for the time being and turn our attention to a REST API for some entities. To keep things simple, we’re going to keep the entities in memory. Even so, we will use the same kind of techniques you would use in a real application. After reading this guide, you will be able to: Use path parameters to identify items Generate URLs for new items Encode and decode entity bodies This guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. You do not need experience with any particular database or persistence framework. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. We will start a new project this time. The service will be a simple \"to-do\" list that persists only in memory. We will use the same techniques that we would use to interact with a real database. We’re going to make a REST style API. Our API will have the following routes: Route Verb Action Response /todo POST Create a new list 201 with URL of new list /todo GET Return query form 200 with static page /todo/:list-id GET View a list 200 with all items /todo/:list-id/:item-id GET View an item 200 with item /todo/:list-id/:item-id PUT Update an item 200 with updated item We will start this project with another empty directory. (Still avoiding the template projects for now.) I’m going to call my project 'todo-api'. Feel free to call yours something different, but it’s up to you to do the mental translation from here on out. $ mkdir todo-api $ cd todo-api $ mkdir src This time, we’ll set up our deps.edn file first. It will be exactly the same as our last one: deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.http-kit {:mvn/version \"0.8.2-beta-11\"} org.clojure/data.json {:mvn/version \"2.5.2\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.17\"}}} Our new source file will start off with the usual namespace declaration: src/main.clj (ns main (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.route :as route] [io.pedestal.connector.test :as test])) This adds new namespaces that we’ll use later in this tutorial. We’re going to use some of the same structures from previous tutorials, such as an ok function to build a successful response, but with some differences: src/main.clj (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) partial is a Clojure function that takes a function and returns a new function that needs fewer arguments - you supply the initial arguments in the call to partial. The returned function keeps track of those initial arguments, and when invoked, \"glues together\" the initial arguments and any additional arguments provided to it, and calls the original function: response in this case. The & {:as headers} forms in the response function’s parameter list is a bit advanced; it’s based on destructuring, but in practice all it means is that after the status and body arguments, you may pass key/value pairs that will be used as the headers of the response map built by response. For example, you could have a handler function return (ok \"success\" \"Content-Type\" \"text/plain\"). Although created with def, the symbols ok, created, and accepted, are all functions, as if they were created using defn. Remember: Clojure functions are still values! Why do any of this? For all that web developers generally know the HTTP status codes in their sleep [1], having these three functions results in code that is more intentful: the semantics become visible directly in the code. And you probably did go look up code 201. Second, we’re going to define all our routes right away, but have them all use an echo handler so we can test the routes separately from everything else[2]. src/main.clj (def echo {:name :echo :enter (fn [context] (let [request (:request context) response 
1(ok request)] (assoc context :response response)))}) (def routes #{[\"/todo\" :post echo :route-name :list-create] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]}) Pedestal makes it possible to invoke these routes directly from the REPL, without involving HTTP at all. This is a nice way to break your work up into incremental steps. It goes together nicely with the interactive development support we introduced in the Hello World, With Parameters tutorial. Let’s start the service in this early, echo-only mode: $ clj Clojure 1.12.0 user=> (require 'main) nil user=> (main/start) #object[io.pedestal.http.http_kit$create_connector$reify__15862 0x63cd8f26 \"io.pedestal.http.http_kit$create_connector$reify__15862@63cd8f26\"] user=> Let’s try out the routes that we defined in the main namespace. We’ll do that using response-for. This function exercises our Pedestal connection without going through any actual HTTP requests. By extracting the connector (it’s in the main/*connector atom) we can pass it to test/response-for along with the HTTP verb (as a keyword), and the URL: user=> (require '[io.pedestal.connector.test :as test]) nil user=> (test/response-for @main/*connector :get \"/todo\") [main] INFO io.pedestal.service.interceptors - {:msg \"GET /todo\", :line 40} {:status 200, :body \"{:headers {}, :async-channel #object[io.pedestal.http.http_kit.impl$mock_channel$reify__15583 0x4fbdd61f \\\"io.pedestal.http.http_kit.impl$mock_channel$reify__15583@4fbdd61f\\\"], :server-port -1, :path-info \\\"/todo\\\", :url-for #object[clojure.lang.Delay 0xc7ba58d {:status :pending, :val nil}], :uri \\\"/todo\\\", :server-name \\\"localhost\\\", :query-string nil, :path-params {}, :body #object[java.io.InputStream$1 0x2d579733 \\\"java.io.InputStream$1@2d579733\\\"], :scheme :http, :request-method :get, :headers {:strict-transport-security \"max-age=31536000; includeSubdomains\", :x-frame-options \"DENY\", :x-content-type-options \"nosniff\", :x-xss-protection \"1; mode=block\", :x-download-options \"noopen\", :x-permitted-cross-domain-policies \"none\", :content-security-policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"application/edn\"}} Part of this output — [main] INFO …​ — comes from built-in Pedestal interceptors for logging requests; the logging output gets mixed into the output from the REPL. The response is somewhat overwhelmingly verbose because we are using the echo interceptor, so the entire incoming request converted to a string and is nested inside the response. If we omit the response body, it’s easier to observe the most useful parts of the response: user=> (dissoc *1 :body) {:status 200, :headers {:strict-transport-security \"max-age=31536000; includeSubdomains\", :x-frame-options \"DENY\", :x-content-type-options \"nosniff\", :x-xss-protection \"1; mode=block\", :x-download-options \"noopen\", :x-permitted-cross-domain-policies \"none\", :content-security-policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"application/edn\"}} Inside the REPL, Clojure keeps track of the most recent result it printed in the symbol *1. That makes it a snap to dig down into that result. There’s also *2 and *3. Now we can see the status code (200, OK) and the headers. Not too bad. We’re going to test quite a few of these routes this way, so let’s add a helper function: (defn test-request [verb url] (test/response-for @*connector verb url)) Now, after we reload the namespace with (require :reload 'main), we can experiment a bit easier. What happens if we ask for a route that doesn’t exist? Or a verb that isn’t supported on a real route? user=> (require :reload 'main) nil user=> (main/test-request :get \"/does-not-exist\") [main] INFO io.pedestal.service.interceptors - {:msg \"GET /does-not-exist\", :line 40} {:status 404, :headers {:content-type \"text/plain\"}, :body \"Not Found\"} This 404 response comes from Pedestal itself [3]. That is the default response when the router cannot find a route that matches the URL pattern. (For much more about routers, see the Routing Quick Reference). Some of our routes have parameters in them. Those look like keywords embedded in the URL patterns. That tells Pedestal to match any value in that position (except a slash!) and bind it to that parameter in the request map. We should be able to see those parameters in the requests that echo will send back to us. This is one of the ways we can make sure that routes do what we think they are going to do, before we write the real logic. user=> (main/test-request :get \"/todo/abcdef/12345\") [main] INFO io.pedestal.service.interceptors - {:msg \"GET /todo/abcdef/12345\", :line 40} {:status 200, :body \"{:headers {}, :async-channel #object[io.pedestal.http.http_kit.impl$mock_channel$reify__15583 0x6801b4a4 \\\"io.pedestal.http.http_kit.impl$mock_channel$reify__15583@6801b4a4\\\"], :server-port -1, :path-info \\\"/todo/abcdef/12345\\\", :url-for #object[clojure.lang.Delay 0x54eaf69d {:status :pending, :val nil}], :uri \\\"/todo/abcdef/12345\\\", :server-name \\\"localhost\\\", :query-string nil, :path-params {:list-id \\\"abcdef\\\", :item-id \\\"12345\\\"}, :body #object[java.io.InputStream$1 0x647b7f63 \\\"java.io.InputStream$1@647b7f63\\\"], :scheme :http, :request-method :get, :headers {:strict-transport-security \"max-age=31536000; includeSubdomains\", :x-frame-options \"DENY\", :x-content-type-options \"nosniff\", :x-xss-protection \"1; mode=block\", :x-download-options \"noopen\", :x-permitted-cross-domain-policies \"none\", :content-security-policy \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"application/edn\"}} The interesting part here is deeply buried inside the request map (which we see as a giant string inside the response body). We can pull it out with a bit of Clojure code, but I’ll just highlight it here. (If you’re interested in an exercise, try using clojure.edn to parse the response body). Inside the request map, there is a :path-params map which looks like this: :path-params {:list-id \"abcdef\", :item-id \"12345\"} Pedestal extracted these parameters from the URL and bound them to the request for us. Note that the values are always strings, because URLs are strings. If we want to treat \"12345\" as a number, that’s up to us. But our application had better not break if some sly user sends us a request with something other than numbers there. Before we can do anything else, we need a way to create a TODO list - later we’ll handle adding items to the list. This is a POST to the /todo URL. In the interest of simplicity, the only part of a request body we need is a name field. Also in the interest of simplicity, we are not going to deal with content negotiation yet. What do we need to do in order to create a list? Make a new data structure for the list. Add it to our repository. Without getting too far ahead of ourselves, we’d like to avoid doing all of the above in a single handler function, and instead, break this up into several interceptors, each of which is (as much as possible) free of side effects, and easily testable. The approach we are taking here is especially well suited when using Datomic, Datahike, or Datalevin for persistent storage, but can work even when using a more traditional database. Let’s break the behavior up into multiple steps, and give each step a provisional name: A attaches a database connection to the request. B looks up an item of interest and attaches it to the request. C makes some decisions and attaches the result of those decisions to the request. D executes a transaction with those decisions. This way, A and D are quite generic. B is somewhat specific to the particular route — is it a list or a list item that’s being looked up?. That leaves C which is most specific to a single route, and might event be a simple handler function. For this guide, we are going to cheat and create an in-memory repository: src/main.clj (defonce *database (atom {})) (1) 1 Using defonce here ensures that the value, the database atom, will survive when we reload the namespace. Next, we’ll implement roles A and D in a single interceptor: src/main.clj (def db-interceptor {:name :db-interceptor :enter (fn [context] (update context :request assoc :database @*database)) (1) :leave (fn [context] (if-let [tx-data (:tx-data context)] (2) (let [database' (apply swap! *database tx-data)] (3) (assoc-in context [:request :database] database')) (4) context))}) (5) 1 @*database gets the current value of the atom. We attach it to the request inside the context so that other interceptors can see it. This is step A from above. 2 The :tx-data key on the context may be set by other interceptors. This is step D from above. 3 if-let combines a let with an if test. The swap! here is our stand-in for a real database transaction. The swap! modifies the value stored in the *database atom, and returns the new value. 4 We attach the updated database value in case any other interceptors need to use it. We use the latest version of the database (returned from swap!). 5 If there wasn’t any tx-data, we just return the context without changes. If you forget this and return nil, every request will respond with 404. This may be a simple tutorial where we’re feeding in one request at a time, manually …​ but one aspect to working in Clojure is just how well even such simple c
1ode scales to real world realities. This interceptor would work quite well in a busy server with multiple request processing threads executing simulataneously. The @*database expression captures a consistent snapshot of the ever-changing database stored in the atom; any interceptors in the queue will all work from a single consistent view of the database. No sharing, no race conditions, no impossible to reproduce bugs caused by mutable data shared across multiple threads. Now we need a handler to receive the request, extract a name, and create the actual list. src/main.clj (defn make-list [list-name] {:name list-name :items {}}) (defn make-list-item [item-name] {:name item-name :done? false}) (def list-create {:name :list-create :enter (fn [context] (let [list-name (get-in context [:request :query-params :name] \"Unnamed List\") (1) new-list (make-list list-name) db-id (str (gensym \"l\"))] (2) (assoc context :tx-data [assoc db-id new-list])))}) (3) (def routes #{[\"/todo\" :post [db-interceptor list-create]] (4) [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]}) 1 If there was a query parameter, use it. Otherwise, use a placeholder. 2 Generate a unique ID. In a real service, the DB itself would do this for us. 3 Don’t modify the DB here. Attach data to the context that the db-interceptor will use. 4 We modify the route definition to use both new interceptors, in order. There are a couple of things to notice about this updated route definition. First, instead of using the echo handler function here, we have a vector with our db-interceptor and list-create interceptors. Recall from the introduction to interceptors that interceptors have tw
1o functions. The :enter functions get called from left to right, then the :leave functions get called from right to left. That means calls to the db-interceptor bracket the call to the list-create interceptor. The second thing about the new route is that we removed the :route-name :list-create clause. Pedestal requires that every route must have a unique name. When we used the echo interceptor everywhere, there was no way for Pedestal to create unique, meaningful names for the routes so we had to help it out. Now, list-create has its own name so we can leverage Pedestal’s default behavior: use the name of the last interceptor in the vector. When you use a handler function in a route and don’t supply an explicit :route-name, Pedestal will attempt to extract a route name from the function. You can supply meta data to specify a better name than the default. Let’s give this a try. user> (main/test-request :post \"/todo?name=A-List\") [main] INFO io.pedestal.service.interceptors - {:msg \"POST /todo\", :line 40} {:status 404, :headers {:content-type \"text/plain\"}, :body \"Not Found\"} Uh oh. What happened here? We just tried this route a minute ago. Was it the query parameter? user> (main/test-request :post \"/todo\") [main] INFO io.pedestal.service.interceptors - {:msg \"POST /todo\", :line 40} {:status 404, :headers {:content-type \"text/plain\"}, :body \"Not Found\"} Nope. If you check the contents of your in-memory database by running @main/*database in the REPL, you’ll see the new items (one for each POST request) in there: user=> @main/*database {\"l15892\" {:name \"A-List\", :items {}}, \"l15895\" {:name \"Unnamed List\", :items {}}} So why did Pedestal return a 404 Not found response? The problem is that neither of the list-create and db-interceptor interceptors attached any kind of response to the context. Pedestal looked at the context after running all the interceptors, saw that there was no response, and sent the 404 as a fallback. We need to attach a response somewhere. In REST apis, it is expected that a POST request that creates an entity will then return a response with a 201 Created status code, and include a Location header that points to the new resource. We have defined a route for that, :get /todo/:list-id, which we’ve named :list-view, and, knowing the list id, it’s quite straight forward to assemble that string. But should our handler code be responsible for doing so? Anyone with experience in web development knows that things shift around constantly, and should a change to the routing necessitate changes to some scattered collection of handlers? Even if the routing table is stable, we want to avoid duplicated code. Pedestal provides the url-for function to generate a URL from route name, and will even interpolate parameters into the URL string. So our list-create interceptor can point the client over to a route that will render the new list. Of course, it would be nice if the response body also included the current state of the just-created list. That saves the client a round trip and saves the service a request. For now, we can do this all in a single interceptor. src/main.clj (def list-create {:name :list-create :enter (fn [context] (let [list-name (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list list-name) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id}
1)] (1) (assoc context :response (created new-list \"Location\" url) (2) :tx-data [assoc db-id new-list])))}) 1 Generate URL for route :list-view and the new ID we just generated. Pedestal uses some hidden machinery[4] to get the routing table, which is needed to construct the URL. 2 Return a 201 response, with an extra header (Location). And the results (manually formatted for readability): user==> (main/test-request :post \"/todo?name=A\") {:status 201, :body \"{:name \\\"A\\\", :items {}}\", (1) :headers {:x-xss-protection \"1; mode=block\", (2) :x-content-type-options \"nosniff\", :x-permitted-cross-domain-policies \"none\", :x-download-options \"noopen\", :x-frame-options \"DENY\", :strict-transport-security \"max-age=31536000; includeSubdomains\", :content-security-policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"application/edn\", :location \"/todo/l15959\"}} (3) 1 The created list, as Clojure map, encoded as a string. 2 The response-for function converts headers from Camel-Case strings to lower-case keywords. It also ensures that the :body is a string (by default). 3 The location, generated by url-for. In general, adding something to the database might cause it to change. Sometimes there are triggers or stored procedures that change it. Other times it’s just an ID being assigned. Usually, instead of attaching the new entity here, I would attach its ID to the context and use another interceptor later in the chain to look up the entity after db-interceptor executes the transaction. This becomes especially important when you are updating existing entities that could have concurrent changes from many sources. Now that we’ve done one route, this will go a bit faster. The connection from route to interceptor to entity should be a bit more evident at this point. To view a list, we need to look it up from the \"database\", as provided in the :database key of the request map. If found, we want to return the found to-do list …​ but indirectly. src/main.clj (defn find-list-by-id [dbval db-id] (get dbval db-id)) (1) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) (2) the-list (when db-id (find-list-by-id (3) (get-in context [:request :database]) db-id))] (cond-> context (4) the-list (assoc :result the-list))))}) 1 Query the in-memory database. 2 Extract the path parameter, if present. 3 Lookup the matching list if the parameter was provided. 4 If a list was found, add it to the context as :result; otherwise do nothing resulting in a 404 response. Adding the :result key to the context does not terminate execution of the interceptor chain; that’s triggered by the :response key. And if we don’t provide a response, we’re back in 404 land. Once again, we’ll lean on interceptors to keep our code reusable. The entity-render interceptor provides the missing part; when a prior interceptor has attached a :result to the context, it will build and attach a response. src/main.clj (def entity-render (1) {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response 
1(ok item)) context))}) But to make this work, we need to include it in the :list-view route: src/main.clj (def routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]}) After once again reloading code and restarting the connector, you can give the endpoint a try: user=> (main/test-request :get \"/todo/l15892\") [main] INFO io.pedestal.service.interceptors - {:msg \"GET /todo/l15892\", :line 40} {:status 200, :body \"{:name \\\"A-List\\\", :items {}}\", :headers {:strict-transport-security \"max-age=31536000; includeSubdomains\", :x-frame-options \"DENY\", :x-content-type-options \"nosniff\", :x-xss-protection \"1; mode=block\", :x-download-options \"noopen\", :x-permitted-cross-domain-policies \"none\", :content-security-policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", :content-type \"application/edn\"}} There in the body is the retrieved list. As we build up a set of interceptors and utility functions, we find that we can go ever faster. Next up, we’ll look at adding a new item to an existing list. To add an item to a list we will perform the following steps: Check that the list exists Create a new item for the list Add that item to the list Return a response with the new item Someone with a seasoned eye may notice that we have multiple steps that could cause problems in heavily used, multi-threaded server: What if the list is deleted by some other thread between steps 1 and 2? What if another item is added to the list between steps 1 and 3 (do we lose one of the items?) This is the kind of thing that is really important to do atomically. We can take advantage of that Clojure atom to execute a function atomically. That’s what the swap! call does for us. But since that function might not succeed, it means we don’t know enough to create the response inside the list-item-create interceptor. We need to defer response creation until after the db-interceptor runs its :leave function. Basically, we need something to look up an item by its list ID and item ID, then render the result. That’s exactly what we would do for the :list-item-view route! We can get some reuse here. If list-item-create can add the item to the database, then the item will exist. If the item can’t be added, it will result in a 404 response. We just need to do something a little funky-looking with the list-item-view interceptor. We need to put its behavior in the :leave function instead of the :enter function. Here’s the pair of new interceptors, plus the updated route table. src/main.clj (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (def list-item-view (2) {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (3) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def list-item-create (4) {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [item-name (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item item-name) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) (5) context))}) 1 New generic interceptor that provides a 200 OK response with EDN body out of any Clojure data structure. 2 New interceptor that looks up list items but doesn’t attach a response 
1(since that’s `entity-render’s job). 3 Instead, list-item-view attaches the result to the context where entity-render expects to find it. 4 This interceptor creates an item and sets up tx-data to be executed. 5 This is where list-item-create passes a parameter to list-item-view. And, again, we must add the necessary interceptor to the :list-item-create route: src/main.clj (def routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render db-interceptor list-item-view]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]}) To understand the interceptors for the :list-item-create route, we need to think about :enter functions from left to right and :leave functions from right to left. Phase Interceptor Action Enter entity-render None. Enter list-item-view None. Enter db-interceptor Attach the database value to the context. Enter list-item-create Attach tx-data to the context and a path-param to identify the item. Leave list-item-create None. Leave db-interceptor Execute the tx-data, attach updated DB value to context. Leave list-item-view Find the (new) item by path-params, attach it to the context as :result.' Leave entity-render Find :result on the context, make an OK response. A defect here is that when adding a list item, we don’t return a 201 response and a Location header as we do when adding a list. Implementing that should be an additional section in this tutorial. Splitting the work into these pipelined stages allows us to make very small, very targeted functions that collaborate via the context. The rest of the routes follow these same basic patterns. Take a few minutes to see if you can create the interceptors for the next few. Here is the final version of the code. Everything is cleaned, folded, and sorted nicely. src/main.clj (ns main (:require [io.pedestal.connector :as conn] [io.pedestal.http.http-kit :as hk] [io.pedestal.http.route :as route] [io.pedestal.connector.test :as test])) (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) (defonce *database (atom {})) (1) (def db-interceptor {:name :db-interceptor :enter (fn [context] (update context :request assoc :database @*database)) (1) :leave (fn [context] (if-let [tx-data (:tx-data context)] (2) (let [database' (apply swap! *database tx-data)] (3) (assoc-in context [:request :database] database')) (4) context))}) (5) (defn make-list [list-name] {:name list-name :items {}}) (defn make-list-item [item-name] {:name item-name :done? false}) (def list-create {:name :list-create :enter (fn [context] (let [list-name (get-in context [:request :query-params :name] \"Unnamed List\") (1) new-list (make-list list-name) db-id (str (gensym \"l\"))] (2) (assoc context :tx-data [assoc db-id new-list])))}) (3) (def echo {:name :echo :enter (fn [context] (let [request (:request context) response (ok request)] (assoc context :response response)))}) (def list-create {:name :list-create :enter (fn [context] (let [list-name (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list list-name) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id}
1)] (1) (assoc context :response (created new-list \"Location\" url) (2) :tx-data [assoc db-id new-list])))}) (defn find-list-by-id [dbval db-id] (get dbval db-id)) (1) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) (2) the-list (when db-id (find-list-by-id (3) (get-in context [:request :database]) db-id))] (cond-> context (4) the-list (assoc :result the-list))))}) (def entity-render (1) {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response (ok item)) context))}) (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (def list-item-view (2) {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (3) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def list-item-create (4) {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [item-name (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item item-name) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) (5) context))}) (def routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render db-interceptor list-item-view]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]}) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes routes) (hk/create-connector nil))) (defonce *connector (atom nil)) (1) (defn start [] (reset! *connector (2) (conn/start! (create-connector)))) (defn stop [] (conn/stop! @*connector) (reset! *connector nil)) (defn restart [] (3) (stop) (start)) (defn test-request [verb url] (test/response-for @*connector verb url)) In this guide, we have built a new API with an in-memory database. You’re ready to go get funding and launch! We covered some more advanced concepts with interceptors this time: Passing results from one interceptor to another Reusing interceptors in different routes Separating query from transaction with :enter and :leave functions Testing our routes interactively at a REPL. Congratulations! You’ve finished the whole getting started trail. To go deep on some of these topics, check out any of the following references: Interceptors Routing Quick Reference Default Interceptors 1. But do you know what status code 418 is for? 2. See the Hello World With Content Types tutorial for an explanation of the echo interceptor. 3. Technically, it comes from an interceptor added by the with-default-interceptors function 4. A private, thread-bound var.","title":"Your First API","component":"pedestal","version":"0.8","name":"your-first-api","url":"/pedestal/0.8/guides/your-first-api.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Setting Up","hash":"_setting_up","id":6},{"text":"Partial Functions","hash":"_partial_functions","id":7},{"text":"Routes Up Front","hash":"_routes_up_front","id":8},{"text":"Poking the Routes","hash":"_poking_the_routes","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Create List","hash":"_create_list","id":11},{"text":"First Attempt","hash":"_first_attempt","id":12},{"text":"Providing a proper response","hash":"_providing_a_proper_response","id":13},{"text":"View List","hash":"_view_list","id":14},{"text":"The Entity View","hash":"_the_entity_view","id":15},{"text":"Add Item to List","hash":"_add_item_to_list","id":16},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":17},{"text":"The Path So Far","hash":"_the_path_so_far","id":18},{"text":"Where To Next?","hash":"_where_to_next","id":19}]},"24":{"id":24,"text":"We created Pedestal as a web framework. At the base, every web framework must solve certain common problems: Interpret incoming requests Dispatch to application code Produce a well-formed response There is an unstated requirement that these all work in a variety of deployment environments: Local development of a workspace Packaged 
1into a Jar file An exploded version of a packaged Jar file Packaged into a Docker container Further, different teams prefer a variety of different request handling frameworks: Tomcat Jetty Undertow Netty Vert.x etc. One more dimension of complexity arises from the relevant styles of application we want to support: Traditional server-rendered pages An API supporting a SPA (Single Page Application) Streaming events Bidirectional WebSockets A mix of all of the above Importantly, supporting streaming events and WebSockets are explicitly asynchronous. Finally, we wish to ensure that, whatever selections are made above, the end result is operationally sound: Secure Performant Observable (capable of producing metrics and tracing information) Requests flow in from clients, through the network connector (such as Jetty 12), which in turn, delegates to a Pedestal connector to handle the bulk of the request. This processing takes the form of a series of interceptors, in a specific order, each focused on one small part of the processing of the request. The interceptor chain manages the execution of the interceptors. The Pedestal connector provides interceptors that deal with the mechanics of interfacing with the chosen Network connector; the application provides additional interceptors for application-specific behaviors. Pedestal is far from the first web framework for Clojure, and attempts to expand on ideas piloted elsewhere. Ring is likely the most popular and influential. In Ring, each route (a combination of an HTTP method and a path pattern) is mapped to a handler: the handler is just a simple function which accepts a request map as its input, and returns a response map. Because a server is more than a single route, and because many routes will share a lot of behavior such as logging, authentication, response rendering, and parameter parsing, each individual Ring route is wrapped in middleware, a function that wraps an existing handler and returns a new handler. Middleware can inspect and modify the incoming request map or the outgoing response map. For example, perhaps your Ring application needs to respond specially to HEAD requests; (ns org.example.middleware) (defn wrap-head-unsupported [handler] (fn [request] (1) (if (= :head (:request-method request)) (2) {:status 400 (3) :headers {} :body \"HEAD not supported\"} (handler request)))) (4) 1 This is the returned handler, wrapping around the original handler 2 Ring specifies at set of keys for the request map; Pedestal follows the same rules 3 Ring specifies another set of keys for the response map 4 Here’s where we delegate down to the next handler This is good, functional design, but is limited in at least one way: it’s all on the stack of a single request processing thread. Given how great Clojure is at multithreaded programming, that can be a limitation. Several of the central features of Pedestal (such as streaming events and web socket connections) are at odds with this: in these cases a long-running server-side process only occasionally needs a request processing thread to send an event, or web socket message, to the client. So, in Pedestal we want something as easily reused and composable as Ring middleware functions, without the limitations of the stack-of-function-calls invocation model. That’s interceptors. An interceptor is a bundle of up-to three functions, named :enter, :leave, and :error. :enter corresponds to the logic before delegating to the next interceptor; the request can be inspected or modified. Likewise, :leave corresponds to logic that occurs after a response map has been created. The :error function is used when an interceptor throws an exception; it’s the interceptor version of a (try …​ catch …​). Now, there’s a bit more going on. First, these :enter and :leave functions are passed a context map which contains a :request key. Any interceptor can modify the context map: some may modify the :request map inside the context, others may attach a :response map to the context. Inside the context is a queue of interceptors. Pedestal works its way through the queue, calling :enter functions, until some interceptor attaches a :response map to the context; then it works its way backwards, calling :leave functions. In practice, an interceptor looks like a normal Clojure map with keys :enter, :leave, or :error (usually just :enter and/or :leave). So, unlike a deeply wrapped function, a chain of interceptors is a data structure that can be inspected by a developer, or manipulated in code. Importantly, any interceptor can add new interceptors to the queue (because the interceptor queue itself is stored in the context, alongside the :request map). Because of this, routing boils down to an interceptor that peeks at the request and makes decisions about what additional interceptors to add to the queue. Pedestal includes general purpose interceptors for all sorts of typical HTTP request functionality: Content negotiation Request body parsing Routing Parsing query parameters Assigning content type to the response Application logic is also implemented as interceptors, though there’s some simple helpers that allow you to write these as Ring-style handlers, if you like. But Pedestal has one more big trick up its sleeve: any interceptor may, instead of returning a context map, instead return a core.async channel that conveys the context map at some point in the future; this is what allows for asynchronous request processing. Further details are in the interceptors reference. Up through Pedestal 0.7, all HTTP support was grounded in some version of the Jakarta Servlet API, typically via the Jetty 12 library. With Pedestal 0.8, Pedestal now supports libraries, such as Http-Kit, that provide HTTP support without implementing the Servlet API. Such libraries are called \"Network Connectors\". The newer approach, starting in Pedestal 0.8, is based on combining a connector map with a Network connector; a function specific to each Network connector converts the connector map to a Pedestal connector. Support for this is primarily in the io.pedestal.connector namespace.","title":"Architecture Overview","component":"pede
1stal","version":"0.8","name":"architecture-overview","url":"/pedestal/0.8/reference/architecture-overview.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"High Level Sequence","hash":"_high_level_sequence","id":2},{"text":"Interceptors","hash":"interceptor","id":3},{"text":"Servlet vs. HTTP","hash":"_servlet_vs_http","id":4},{"text":"Pedestal Connectors","hash":"_pedestal_connectors","id":5}]},"25":{"id":25,"text":"Pedestal uses a chain of Interceptors to process incoming HTTP requests and provide outgoing HTTP responses. However, the underlying code - the interceptors and the interceptor chain that executes them - is more general. Interceptor chains can be used for a variety of operations, such as: Processing messages from a queue, such as Kafka or JMS Performing a series of transformations on documents as part of a publishing service Processing outgoing requests and incoming responses from a back-end service A chain provider is responsible for accepting an incoming stimuli (such as an incoming HTTP request) and setting up a context map and initial interceptors to process that stimuli. The service map is processed via the execute function. Part of a chain provider’s responsibility is to identify when a request has been processed; for HTTP requests, this is when a handler or some other interceptor attaches a :response map to the context map. Pedestal itself only provides a chain provider implementation for incoming HTTP request processing, in the form of the Servlet Interceptor. Essentially, the chain provider configures the interceptor chain and answers the following questions: When does the chain terminate early (for HTTP, when the :response key is attached) What interceptors execute (some provided by the provider, the rest provided by the application) What happens when execution first goes asynchronous (because an interceptor returns a core.async channel)?","title":"Chain Providers","component":"pedestal","version":"0.8","name":"chain-providers","url":"/pedestal/0.8/reference/chain-providers.html","titles":[]},"26":{"id":26,"text":"Pedestal primarily is configured via the connector map; however, there are sub-systems within Pedestal that can operate before a connector map is used to create and start a connector. These sub-systems are: Development Mode Logging Metrics Tracing JSON Processing Configuration values are one of the following types: boolean keyword function For function config types, the value is converted to a fully qualified symbol and that is resolved to a function. Pedestal uses late binding to configure these values, so that it is possible to customize Pedestal’s behavior to the operating environment: anything from local developer to final production. Pedestal will search a series of sources for a value that identifies the var; these are in a specific order, with an eye towards making it possible to override the value at runtime for testing or production, as that is often a need for these subsystems. JVM system property name Environment Variable Entry in the pedestal-test-config.edn resource Entry in the pedestal-config.edn resource A hard-coded default, or nil The intent is that a Pedestal application will typically include a pedestal-config.edn on the classpath (packaged with the application’s sources or compiled classes, typically stored in resources); the pedestal-test-config.edn will only be on the classpath during local testing (typically, stored in test-resources). When necessary, these values can be overrridden when deployed to a staging or production deployment using environment variables or JVM system properties. If you only occasionally need to set a configuration value, this can be done from the command line by using the -J switch: clj -J-Dio.pedestal.dev-mode=true ... Alternately, you can update your deps.edn file, associating a JVM option with an alias: ... :aliases {:dev-mode {:jvm-opts [\"-Dio.pedestal.dev-mode=true\"]} ... You can then reference the alias when starting a REPL session: clj -A:dev-mode ... The contents of pedestal-config.edn (and pedestal-test-config.edn) are EDN maps. The keys are the JVM property converted to a keyword (for example, :io.pedestal.log.overrideLogger). For values that are function types, the config value can be either a qualified symbol, or a string that is converted to a qualified symbol. For values that are boolean, the config value may be a boolean or a string. Once a symbol is obtained from a configuration source, it is resolved to a Clojure V
1ar. Each use of configuration has its own interpretation of the Var. The following section list the current configuration values; each heading identifies the JVM system property, then the equivalent environment variable. type: boolean Enables Development Mode. type: function Used to create an LoggerSource instance from a logger name; If not specified, then org.slf4j.LoggerFactory.getLogger(java.lang.String) is used. type: function A function used to format a logged event map to a string prior to being passed to the LoggerSource. When not specified, pr-str is used. type: boolean default: false If true, then Pedestal will not automatically convert handler function class names to an interceptor name (the interceptor will be anonymous instead). type: function default: processor Defines what implementation of the io.pedestal.json.protocols/JSONProcessor to use; this function returns an instance of the JSONProcessor protocol. This allows for either more involved use of the charred library, or replacing charred with something else, such as cheshire. type: boolean default: false If true, then deprecation warnings are suppressed. type: function default: metric-source A function that returns an instance of MetricSource used to create metrics used by Pedestal or applications. The default is to get the value from io.opentelemetry.api.GlobalOpenTelemetry.getMeter(java.lang.String). type: keyword (:long or :double) default: :long The kind of values provided to the MetricSource. type: function default: tracing-source A function that returns an instance of TracingSource, used to emit tracing events. The default function gets tracing sources via io.opentelemetry.api.GlobalOpenTelemetry.getTracer(java.lang.String).","title":"Configuration","component":"pedestal","version":"0.8","name":"config","url":"/pedestal/0.8/reference/config.html","titles":[{"text":"Configuration Values","hash":"_configuration_values","id":1},{"text":"Configuration Order","hash":"_configuration_order","id":2},{"text":"EDN Configuration Files","hash":"_edn_configuration_files","id":3},{"text":"Configuration Keys","hash":"_configuration_keys","id":4},{"text":"io.pedestal.dev-mode / PEDESTAL_DEV_MODE","hash":"dev-mode","id":5},{"text":"io.pedestal.log.overrideLogger / PEDESTAL_LOGGER","hash":"_io_pedestal_log_overridelogger_pedestal_logger","id":6},{"text":"io.pedestal.log.formatter / PEDESTAL_LOG_FORMATTER","hash":"_io_pedestal_log_formatter_pedestal_log_formatter","id":7},{"text":"io.pedestal.interceptor.disable-default-handler-names / PEDESTAL_DISABLE_DEFAULT_HANDLER_NAMES","hash":"disable-handler-names","id":8},{"text":"io.pedestal.json-processor / PEDESTAL_JSON_PROCESSOR","hash":"_io_pedestal_json_processor_pedestal_json_processor","id":9},{"text":"io.pedestal.suppress-deprecation-warnings / PEDESTAL_SUPPRESS_DEPRECATION_WARNINGS","hash":"suppress-deprecation-warnings","id":10},{"text":"io.pedestal.telemetry.metric-source / PEDESTAL_METRICS_SOURCE","hash":"_io_pedestal_telemetry_metric_source_pedestal_metrics_source","id":11},{"text":"io.pedestal.telemetry.metric-value-type / PEDESTAL_METRICS_VALUE_TYPE","hash":"metric-value-type","id":12},{"text":"io.pedestal.telemetry.tracing-source/ PEDESTAL_TRACING_SOURCE","hash":"_io_pedestal_telemetry_tracing_source_pedestal_tracing_source","id":13}]},"27":{"id":27,"text":"Pedestal provides functions to create a connector. The service map contains general information that any Pedestal connector will need to create a network connector. This is supplemented by a connector-specific configuration map. Pedestal connectors were added in 0.8.0 as a replacement for the service map and the io.pedestal.http namespace. An initial connector map can be created by default-connector-map. Key Type Description :port Number Port for the network connector to receive connections on :host String Hostname to listen on, defaults to \"localhost\" :router Keyword or fn Routing constructor to use, default is :sawtooth :interceptors Vector Interceptor to used when processing requests. :initial-context Map Initial context that will be used when executing the interceptor chain :join? Boolean If true (the default is false) then the current thread will block when the connector is started. The created Pedestal connector will often prefix the supplied interceptors with ones specific to the connector. Supplying an :initial-context is a way to provide useful data, functions, or components to all interceptors. The with-default-interceptors function is used to add interceptors to the service map for common functionality. It is passed the connector map and an additional configuration map and will add interceptors for the following functionality: Request tracing Request logging Allowed origins Session support Cross site request forgery detection Default content type for responses Parsing of query parameters Secure headers (adds a few headers to improve security) with-default-interceptors is useful, but limited. It doesn’t let you fully configure many of the interceptors it adds, and it may add interceptors you do not need. It is intended as scaffolding: useful only at the outset of a new project, but should be removed and replaced with application specific setup once development is fully underway. The with-routes macro is used to set the routes for your service. It is a macro because it sets up a REPL-friendly workflow (when in development mode) --- in development mode, code 
1changes will be reflected immediately, without restarting the application. The connector map is passed to a Pedestal connector factory function, along with a map of configuration specific to the specific factor, and returns a PedestalConnector object, which can be started with start!. Factory functions: create-connector (Jetty) create-connector (Http-Kit) Functions in the io.pedestal.connector.dev namespace provide additional support that may be used when developing and testing locally, but should not be used in production. The optionally-with-dev-mode-interceptors function adds useful development-time interceptors, but only if Development Mode is enabled.","title":"Connector Map","component":"pedestal","version":"0.8","name":"connector-map","url":"/pedestal/0.8/reference/connector-map.html","titles":[{"text":"Connector Map Keys","hash":"_connector_map_keys","id":1},{"text":"Default interceptors","hash":"_default_interceptors","id":2},{"text":"Routing","hash":"_routing","id":3},{"text":"Creating the Pedestal connector","hash":"_creating_the_pedestal_connector","id":4},{"text":"Development Mode","hash":"_development_mode","id":5}]},"28":{"id":28,"text":"A Pedestal application always works in the context of a network connector such as Jetty 12; the network connector is responsible for the low-level HTTP/HTTPs networking, including support for WebSockets and server-sent events. Pedestal connectors were added in version 0.8.0 and are the preferred way of setting up your application. Once a request has been received, it is passed through an interceptor chain to be processed using the Interceptors pipeline. A Pedestal connector is created from a connector map; the Pedestal connector manages the lifecycle of the network connector, and transforms from the network connector’s APIs to Pedestal’s. The namespaces io.pedestal.connector and io.pedestal.connector.dev provide functions to create and configure the connector map. The connector concept was added in Pedestal 0.8; a connector does not require a servlet or anything from the Servlet API; the Http-Kit connector is an example that provides HTTP functionality without the Servlet API. By contrast, the older Jetty support can run as a service (that is, in terms of the Servlet API) or as a connector. Pedestal applications are primarily run in embedded mode, where the network connector is a library that is part of the runtime classpath. Pedestal connectors implement the PedestalConnector protocol. When started, the Pedestal connector will create, configure, and start the network connector. Once started, the network connector will receive incoming requests and pass those along to Pedestal for actual processing. The alternate setup for a Pedestal application is a WAR file - a packaged version of an application, its code and libraries, configuration, and public resources - that runs inside a standalone servlet connector. WAR deployments have a different lifecycle, as the network connector (such as Jetty 12) is its own running process, that unpacks and loads the contents of the WAR file. This means that there isn’t a Pedestal connector, just the Servlet Interceptor. The WAR Deployment guide describes this is more detail.","title":"Pedestal Connector","component":"pedestal","version":"0.8","name":"connector","url":"/pedestal/0.8/reference/connector.html","titles":[{"text":"Embedded","hash":"_embedded","id":1},{"text":"WAR (Web Application Archive)","hash":"_war_web_application_archive","id":2}]},"29":{"id":29,"text":"The context map is passed to each interceptor’s :enter and :leave functions, and is one of two arguments passed to an interceptor’s :error function. The context map is the mechanism by which different interceptors communicate with each other. It is common to provide access to common data and components (for example, a database connection pool, or a thread pool) by providing such common elements in the initial context, which can be specified as the :initial-context key of the connector map. Pedestal makes use of a number of keys in the context map described below as part of its public API. Further namespace keys may also be present and are officially undefined and are considered an implementation detail subject to change at any time. Ke
1y Type Description :bindings map of var → value See notes below. :io.pedestal.interceptor.chain/error Exception When error processing is invoked, this value is the most recent exception that triggered error handling. :io.pedestal.interceptor.chain/execution-id Opaque This identifier is set uniquely when the interceptor chain is initially executed. It is useful for correlating log events. Do not assume anything about the structure or type of this identifier. :io.pedestal.interceptor.chain/queue[1] Stack of interceptors These are the interceptors left to execute. You can inspect this for debugging purposes with queue, or manipulate the queue with enqueue or terminate. :io.pedestal.interceptor.chain/terminators Collection of predicates After executing each :enter function, Pedestal checks every predicate in this collection, passing the context map to each one. If any of them returns true-ish, Pedestal begins executing the :leave stack. Additional checks may be added to the context with terminate-when. The io.pedestal.interceptor.chain/queue key is removed from the context map once an interceptor chain begins processing the :leave stage. It is encouraged that when you add your own values to the context map, you do so using namespace-qualified keywords, to provide a safeguard against key collisions. In ordinary Clojure code, the binding macro can be used to override the thread-bound values of dynamic Vars; this is not possible with interceptors, as the interceptor function will return before the next interceptor is executed. Instead, an interceptor that needs to override or communicate a value via a dynamic binding will instead modify the :bindings key of the context. Any bindings associated this way will stay present until they are dissoc-ed from the :bindings map; a binding added by one interceptor during the :enter phase will still be present during the :leave phase. It is not uncommon for an interceptor to provide an :enter function to bind a var, and a corresponding :leave function to remove the binding. Pedestal provides two macros, bind and unbind, to handle this. (def ^:dynamic *request-id* nil) (def request-id-interceptor {:name ::mdc :enter (fn [context] (chain/bind context *request-id* (str (random-uuid))) :leave (fn [context] (chain/unbind context *request-id*))}) A chain of interceptors can be used for any kind of pipelined processing with branching decisions. It is not limited to HTTP request handling. When used with Pedestal’s HTTP handling, there are additional keys of interest. The context map is created before the first interceptor is invoked. It describes the context of the interceptor execution itself. When the execution chain is connected to an HTTP server, the :request and :response keys have a special purpose. Pedestal does not attach metadata to the request map. When processing, take care to modify the map, rather than constructing a new one. Interceptors may add arbitrary keys to the request map, so it is important to preserve keys that your interceptor does not specifically modify. Key Type Description :request request map Provided by the HTTP chain provider. :response response map Added by an interceptor or handler, at which point the :enter phase of request processing is completed, and the :leave phase begins. :route route map Added after request routing takes place, this is either the specifically matched route map, or nil to indicate that the request could not be mapped to a route. The following context keys are only present when using the Servlet Interceptor: Key Type Description :servlet-request HttpServletRequest The request that was sent by the client. You should use the request map rather than directly accessing this. :servlet-response HttpServletResponse The response object in which the HTTP server wants its response. You should construct and attach a response map rather than directly accessing this. :servlet-config jakarta.servlet.ServletConfig The servlet configuration object. :servlet jakarta.servlet.Servlet The servlet itself. 1. Do not access this key directly, use the queue function to see which interceptors are scheduled to execute. A future release of Pedestal may change how the interceptor queue is stored in the context, so the key may no longer exist, but the queue function will still work.","t
1itle":"Context Map","component":"pedestal","version":"0.8","name":"context-map","url":"/pedestal/0.8/reference/context-map.html","titles":[{"text":"Description","hash":"_description","id":1},{"text":"Common Keys","hash":"_common_keys","id":2},{"text":":bindings","hash":"_bindings","id":3},{"text":"As Applied to HTTP","hash":"_as_applied_to_http","id":4},{"text":"Servlet Keys","hash":"_servlet_keys","id":5}]},"30":{"id":30,"text":"Pedestal provides a \"default set\" of interceptors when using the with-default-interceptors function. These are presented in the order that they appear in the interceptor vector. That means their :enter functions will be called in the order they appear in this document, and their :leave functions are called in reverse order. The following identifies the interceptor by their var or function, in the order they may be added by with-default-interceptors. Collects Open Telemetry data. Logs each request at info level. See Logging to configure loggers and logging levels. Added only when the options include :allowed-origins. Provides a 404 Not Found response when not :response is yet added to the context map; typically because the incoming request could not be matched to a route. Adds support for per-client session tracking; added to the connector map when :session-options are provided. Applies a Content-Type header to a response if missing by mapping the file name extension in the request’s URI. Parses the :query-string into the :query-params map added to the request. Uses the request’s Content-Type header to determine how to parse the request :body into data. Adds security-related headers to the outgoing response. with-default-interceptors is intended as scaffolding; a Pedestal application should replace the call to with-default-interceptors with the exact interceptors it requires, configured according the application’s needs.","title":"Default Interceptors","component":"pedestal","version":"0.8","name":"default-interceptors","url":"/pedestal/0.8/reference/default-interceptors.html","titles":[{"text":"request-tracing-interceptor","hash":"_request_tracing_interceptor","id":1},{"text":"log-request","hash":"_log_request","id":2},{"text":"allow-origin","hash":"_allow_origin","id":3},{"text":"not-found","hash":"_not_found","id":4},{"text":"session","hash":"_session","id":5},{"text":"content-type","hash":"_content_type","id":6},{"text":"query-params","hash":"_query_params","id":7},{"text":"body-params","hash":"_body_params","id":8},{"text":"secure-headers","hash":"_secure_headers","id":9}]},"31":{"id":31,"text":"Pedestal can operate in two different modes: production, and local development. Local development mode changes the behavior of a handful of macros and functions to support live development at the REPL. Development mode is enabled via a configuration value. The var dev-mode? stores the boolean result derived from reading the system property; there is no mechanism for turning development mode on or off during execution. Certain macros, such as with-routes, change their behavior when in development mode. If you are AOT compling your application prior to deployment, you must ensure that development mode is off when compiling, or you may get development mode behavior (and decreased performance) in your deployed production application.","title":"Development Mode","component":"pedestal","version":"0.8","name":"dev-mode","url":"/pedestal/0.8/reference/dev-mode.html","titles":[]},"32":{"id":32,"text":"Pedestal must do something useful when an interceptor throws an exception. It would not be useful to bubble up the runtime call stack, because that call stack only includes the Pedestal machinery itself. Interceptors are data structures that conceptually represent frames on a call stack, but they are not present in the usual nested fashion on the Java call stack. Remember that request processing may be asynchronous, in which case the call stack doesn’t even represent the flow of control to the point where the exception occurred. Instead, Pedestal works backwards, looking for an interceptor to handle the exception. All exceptions thrown from an interceptor are captured; Pedestal wraps such exceptions in an ExceptionInfo instance which is then bound to the :io.pedestal.interceptor.chain/error key in the context map. As long as there is an error attached to that key, Pedestal will not invoke the usual :enter and :leave functions. Instead, it looks for the next interceptor in the stack that has an :error function attached to it. This error handling will proceed the same, regardless of whether interceptors in the chain returned a context map or async channel. (See Interceptor Return Values for details on async return.) As a result, Pedestal unifies error handling for synchronous interceptors and asynchronous interceptors. You can supply your own error handling interceptor anywhere in the interceptor queue. Pedestal will call the function bound to the :error key of an interceptor with two arguments: The context map An ExceptionInfo instance Pedestal wraps all exceptions in ex-info. The following keys are defined in its exception data map: Key Type Description :execution-id opaque [1] Unique value that identifies one \"run\" through the interceptors. :stage Keyword Either :enter or :leave depending on which direction the execution was going. :interceptor Keyword The :name from the interceptor that threw the exception :exception-type Keyword Keywordized form of the exception’s Java class name :exception Throwable The original exception (also available via ex-cause). The exception originally caught is provided as the ex-cause of the provided exception. The context map does not contain the :io.pedestal.interceptor.chain/error key. The :error function can do one of the following things: Return the context map. This is \"catching\" the error. Because the context map has no error bound to it, Pedestal will exit error handling and execute any remaining :leave handlers. Return the context map with the exception re-attached (using with-error). This indicates that the handler doesn’t recognize that exception and declines to handle it. Pedestal will c
1ontinue looking for an error handler. Rethrow the exception passed in; this works the same as case #2, and Pedestal will continue looking for an error handler. Throw a new exception. This indicates that the interceptor intended to handle the error, but something went wrong. Pedestal will start looking for an error handler for this new exception. In that last case, Pedestal keeps track of the exceptions that were overridden. These are in a seq bound to :io.pedestal.interceptor.chain/suppressed in the context map. The interceptor may also rethrow the error passed to it rather than re-attach the error, but this is discouraged. Most commonly, the interceptor will return the context map with a :response map; this will trigger normal response processing by invoking any remaining interceptors' :leave functions. As a convenience, Pedestal offers a macro to build error-handling interceptors that use pattern-matching to dispatch. error-dispatch builds interceptors that use core.match to select a clause. This function is provided in the io.pedestal/pedestal.error library; to use error-dispatch, you must explicitly include the library in your project. Error dispatch uses core.match to match the ex-data of the exception; this allows you to handle a variety of different scenarios very concisely. core.match works top-to-bottom, so you order your most specific cases first, and your more general cases later. Each match clauses specifies certain keys from the above list, and corresponding values to match against; the first match term that satisified all the conditions is executed, which determines the behavior when a matching error occurs. Here is an example from the test suite: (def service-error-handler (1) (error-dispatch [context ex] (2) [{:exception-type :java.lang.ArithmeticException :interceptor ::another-bad-one}] (assoc context :response {:status 400 :body \"Another bad one\"}) (3) [{:exception-type :java.lang.ArithmeticException}] (assoc context :response {:status 400 :body \"A bad one\"}) (4) :else (assoc context :io.pedestal.interceptor.chain/error ex))) ... (def routes (route/expand-routes #{[\"/v1/api\" :any [service-error-handler ,,,]]})) (5) 1 This macro returns code that evaluates to an interceptor with a :leave callback. Binding the interceptor to a var is the normal case. 2 This is a pattern match that looks for an ArithmeticException, but only thrown by a particular interceptor. If the pattern matches, this expression gets evaluated. The error is handled and a response attached. 3 Another pattern match expression, matching any ArithmeticException s that weren’t matched before. We return a different response body in these cases. 4 :else always matches because it is a truthy value. Reattaching the error tells Pedestal to keep looking for a handler. 5 We use the resulting interceptor like any other. For HTTP, the Servlet Interceptor provides the \"last ditch\" error handlers that log the error and return an error response. In development mode, they emit a formatted stack trace as the response body; you will see the error logged from the :io.pedestal.http.impl.servlet-interceptor/stylobate [2] interceptor. The error logged by the \"last ditch\" error handler includes the context map. This is often quite large and may contain data you do not wish to log. While having defaults is nice, it is highly recommended that services implement their own error handling/logging. This gives you full control over how errors are processed. Some exceptions should not be logged; by default, Pedestal will identify an exception that indicates a broken pipe to the client when sending the response; such errors will not be logged but will be quietly ignored. An exception analyzer function is passed the context map and the unhandled exception; it may return nil to prevent the exception from being logged, or return the exception itself, or an alternate exception, to have that be the exception that is logged. When not specified, the default-exception-analyzer function is used; this is where the logic to check for a broken pipe exception lives. 1. No guarantees are made on what the execution id’s type or structure is. 2. Stylobate is the term for a supporter of columns in classic Greek and Roman architecture; here the interceptor is providing support to the rest of Pedestal.","title":"Error Handling","component":"pede
1stal","version":"0.8","name":"error-handling","url":"/pedestal/0.8/reference/error-handling.html","titles":[{"text":"Error Function","hash":"_error_function","id":1},{"text":"Error Dispatch Interceptor","hash":"_error_dispatch_interceptor","id":2},{"text":"Logging Uncaught Exceptions","hash":"_logging_uncaught_exceptions","id":3}]},"33":{"id":33,"text":"Http-Kit is a high-performance, non-blocking HTTP server for Clojure; it is small, fast, and has no dependencies. Http-Kit supports HTTP but not HTTPS. It does support WebSockets and Server-Sent Events. Http-Kit supports Streaming Responses, though somewhat differently than Servlet API-based connectors.","title":"Http-Kit","component":"pedestal","version":"0.8","name":"http-kit","url":"/pedestal/0.8/reference/http-kit.html","titles":[]},"34":{"id":34,"text":"Support for the Immutant web server was removed in Pedestal 0.7; Immutant itself has not been updated since 2018.","title":"Immutant","component":"pedestal","version":"0.8","name":"immutant","url":"/pedestal/0.8/reference/immutant.html","titles":[]},"35":{"id":35,"text":"The major parts of Pedestal are isolated via Clojure protocols. The protocols are for internal structure and external extension. This reference identifies the most important protocols in Pedestal’s structure and how you might use them in an application. IntoInterceptor allows pretty much anything to become an interceptor when needed. Routers use this when building routes: anything that satisfies IntoInterceptor is legal to use in the interceptor vector of a route. This protocol also comes into play when appending new interceptors to the queue. Pedestal extends IntoInterceptor onto a variety of Clojure and Java types. See the interceptors reference for details of their behaviors. ExpandableRoutes can convert all kinds of data structures representing a set of routes into a single canonical format that can be used to construct a routing function. This expansion occurs inside the expand-routes function. Pedestal provides implementations of ExpandableRoutes for several types: Type Interpretation clojure.lang.APersistentVector Terse Syntax clojure.lang.APersistentMap Verbose Syntax clojure.lang.APersistentSet Table Syntax Likewise, each of the underlying routing specification functions (such as table-routes) returns an ExpandableRoutes. Since the call to expand-routes comes from application code, it would be rare for an application to need to extend ExpandableRoutes. The result of expand-routes is a wrapper around a seq of maps that will be passed to the routing contructor function. A connector encapsulates a network adapter, such as Jetty 12; a connector is responsible for configuring, starting, and stopping the network adapter. In addition, a connector can be used for testing, even without starting the network adapter. These are specific to using Pedestal with a network connector that implements the Jakarta Servlet API, such as Jetty 12. This protocol applies to anything that can be in the :body key of a response map. The two functions in the protocol tell Pedestal what content type the body implies, and how to serialize the body to an output stream. Pedestal extends this protocol to several Java and Clojure types to produce the behavior detailed in Response Bodies. Applications should not assume any output stream type more specific than java.io.OutputStream. This protocol is a more specific version of WritableBody. If the value in the :body key of a response map satisfies WritableBodyAsync, then Pedestal treats it as a streaming result. See Streaming Responses for full details. It would be rare for an application to extend this protocol. Most of the time, an application would be better off providing an NIO channel or a core.async channel in the response body.","title":"Important Protocols","component":"pedestal","version":"0.8","name":"important-protocols","url":"/pedestal/0.8/reference/important-protocols.html","titles":[{"text":"Interceptor Protocols","hash":"_interceptor_protocols","id":1},{"text":"IntoInterceptor","hash":"_intointerceptor","id":2},{"text":"Routing Protocols","hash":"_routing_protocols","id":3},{"text":"ExpandableRoutes","hash":"_expandableroutes","id":4},{"text":"Service Protocols","hash":"_service_protocols","id":5}
1,{"text":"PedestalConnector","hash":"_pedestalconnector","id":6},{"text":"Servlet Protocols","hash":"_servlet_protocols","id":7},{"text":"WritableBody","hash":"_writablebody","id":8},{"text":"WritableBodyAsync","hash":"_writablebodyasync","id":9}]},"36":{"id":36,"text":"","title":"Reference","component":"pedestal","version":"0.8","name":"index","url":"/pedestal/0.8/reference/index.html","titles":[]},"37":{"id":37,"text":"This is the detailed interceptor reference; if you are new to Pedestal you may want to start with the What Is An Interceptor Guide. Interceptors are the basic unit of work in Pedestal. The core library provides interceptors that are generally useful for creating HTTP web services. Applications augment those with their own logic to handle everything specific the application’s domain. An interceptor is a Clojure record with four keys: :name :enter :leave :error The :name key is a keyword, often a namespace-qualified keyword. The :enter and :leave keys are unary functions. The :error key is used for error handling. An interceptor must provide a :name [1] and at least one of :enter, :leave and :error. Each function is called with a context map and must return either a context map or a core.async channel that will deliver a context map; the latter case triggers asynchronous request processing. Pedestal calls the :enter function on the way \"in\" to handling a request. It calls the :leave function on the way back \"out\". This is shown here for a single interceptor: Either the :enter or :leave function may be omitted without harm. Before executing the interceptor chain, the interceptors are added to a queue, in the specific order of execution. During the :enter phase, the next interceptor is popped off the queue, pushed onto the leave stack, and its :enter function, if any, is executed. Once the handler (or other interceptor) adds a :response to the context, the chain logic switches to :leave mode: it pops interceptors off the leave stack and invokes the :leave function, if any. Because it’s the leave stack the :leave functions are invoked in the opposite order from the :enter functions. Both the queue and the stack reside in the context map. Since interceptors can modify the context map, that means they can change the plan of execution for the rest of the request! Interceptors are allowed to enqueue more interceptors to be called, or they can terminate the request. This process, of running all the interceptor :enter functions, then running the interceptor :leave functions, is called executing the interceptor chain. Interceptors expect certain keys to be present in the context map. These context bindings are part of the contract between Pedestal connector and interceptors. The most important keys are :request, which holds the request map, and :response, which (once added to the context) holds the response map. Technically, the interceptor pipeline doesn’t know about :request and :response, because the interceptor pipeline is not specifically purposed with HTTP processing; the Pedestal connector or Servlet Interceptor adds these details. Further keys are described in the context map reference. Interceptor functions must return the context passed to it, or a modification of that context. Returning nil will cause an internal server error. An :enter or :leave function may return a context map directly. In this case, processing continues with the next interceptor. If the interceptor is expected to take a long time to return a result, it may instead return a core.async channel. Pedestal will yield the request processing thread back to the network adapter (so that it can process other incoming requests) and wait for a value to be conveyed on the channel. Only one value will be consumed from the returned channel, and the value must be a context map. Request processing continues once the channel delivers the context map. Chaining With Async Interceptors Any interceptor downstream of an asynchronous interceptor will be executed in the core.async dispatch thread pool. This can be problematic if any later interceptor or handler performs any blocking I/O, as the thread pool is a fixed size. Generally speaking, if any interceptor is asynchronous, all following non-trivial interceptors should also be asynchronous. Trivial interceptors do short computations or make changes to the context map; they do not perform any I/O or other operations that could block the thread they execute on, such as any file or socket I/O. If blocking operations are unavoidable, the interceptor should make use of the core.async thread macro. When an interceptor returns a channel, the request processing thread can be returned to the servlet container. This may allow another pending request to be processed while the initial request is parked, waiting for the channel returned by an interceptor to convey the new context map. An Interceptor is specifically an instance of the Interceptor record type. Pedestal is able to convert other values into interceptors using the IntoInterceptor protocol. Pedestal extends that protocol to the following types: Type Interpretation Map The :enter, :leave, :error, and :name keys are used directly. Function The function is interpreted as a handler. List The list is evaluated and its result is used as an interceptor. [2] Support for List is deprecated. Cons Same as List (and also deprecated) Symbol The symbol is resolved and its target is converted to an interceptor. Var The var is de-referenced and its value is converted to an interceptor. Most of these cases are provided to make routing syntax easier, or reflect earlier attempts to improve live reloading at the REPL. Applications should mainly use the map form as shown in the earlier examples when defining interceptors for routing purposes. The queue of interceptors remaining to execute is held in the context map. This means that an interceptor can enqueue other interceptors to be executed. In fact, this is exactly how rout
1ing works, the router is an interceptor that matches information from incoming requests to specific routes, then enqueues interceptors for that specific route. Use enqueue to push more interceptors onto the queue. Use terminate if processing should not continue - though normally, this is accomplished by attaching a :response map (the response map) to the context map. Interceptor Records Interceptors that are explicitly enqueued by the application must be defined using the interceptor function. This function takes a value which extends the IntoInterceptor protocol, and returns an Interceptor record. This is not necessary when constructing interceptors used in routing because interceptor representations are transformed to Interceptor records during route expansion. Likewise, interceptors added to the connector map (via with-interceptor) are converted as they are added. It’s worth noting that when an interceptor queues additional interceptors for execution, they execute after all interceptors already in the queue (not immediately after the interceptor that modified the queue). This means you could, for example, put a routing interceptor first in the queue, then a few interceptors that provide behavior common to all routes, and those common interceptors will run before any route-specific interceptors. A handler function is a special case of an interceptor. Pedestal treats the handler as a function that accepts a request map parameter, and returns a response map result. A handler does not have access to the full execution context, therefore, it cannot manipulate the interceptor queue. Because a handler takes one kind of thing (request) and returns a different kind of thing (response), it can only be used in the last position of an interceptor stack. Handlers return a response map; alternately, an asynchronous handler should return a channel that conveys the response map. Interceptors should always have names [3]. When a handler function is converted to an Interceptor, Pedestal will check to see if the function has :name metadata and use that as the Interceptor’s name. Failing that, Pedestal will generate an interceptor name from the function’s class name; this does not always provide ideal results. When using Terse Syntax or Verbose Syntax to define routes, a final interceptor with no specfic name (i.e., generated from a handler function) will have its name set to match the route name. In 0.8.0, handler functions will normally always have a name. So, when upgrading from 0.7.x to 0.8.x, you might find that specific interceptors have different names. This is unlikely to cause any issues, but in the unlikely event that this behavior proves to be a problem, it can be disabled. Provide a keyword :name metadata on your function. Example: (def version-handler ^{:name ::get-version} (1) (fn [_request] {:status 200 :body \"0.3.7\"})) ; Later, in routes [\"/api/version\" :get version-handler] (2) 1 This is metadata applied to the function itself. If using defn, the metadata would be applied to the Var, not the function. 2 Prior to release 0.8.0, this route would be an error, because there is no explicit route name; now the route name will be the same as the interceptor’s name (whether set explicitly, or derived from the function’s class name). Pedestal supports defining interceptor-specific error handlers via the :error key. Refer to the Error Handling reference for more details. The io.pedestal/pedestal.service library includes a large set of interceptors that are specialized for HTTP request handling. Many of these interceptors are automatically added to the interceptor queue via with-default-interceptors. Routing-related interceptors are provided by the io.pedestal/pedestal.route library: path-params-decoder query-params router But these are usually provided automatically, such as via with-routes. 1. Omitting the name may result in a deprecation warning; in the future it may cause a runtime exception. 2. This is supported behavior related to the table router syntax, but is no longer commonly used and is deprecated. 3. In Pedestal 0.8.0 anonymous interceptors are deprecated; in a future release anonymous interceptors may result in a runtime exeption.","title":"Interceptors","component":"pede
1stal","version":"0.8","name":"interceptors","url":"/pedestal/0.8/reference/interceptors.html","titles":[{"text":"Context Bindings","hash":"_context_bindings","id":1},{"text":"Interceptor Return Values","hash":"return","id":2},{"text":"IntoInterceptor","hash":"_intointerceptor","id":3},{"text":"Manipulating the interceptor queue","hash":"manipulating","id":4},{"text":"Handlers","hash":"handler","id":5},{"text":"Error Handling","hash":"_error_handling","id":6},{"text":"Pedestal Interceptors","hash":"_pedestal_interceptors","id":7}]},"38":{"id":38,"text":"Jetty 12 is the default connector used with Pedestal. Jetty supports Streaming Responses. The provided container options are generally sufficient for most applications which use HTTP or HTTPs; some options are callback functions to provide greater custom control over the Jetty objects. The following table lists the container options supported by Jetty. Key Value type Description :daemon? Boolean Use daemon threads. Defaults to false. :context-path String Context path for the application; must start with a /. Defaults to /. :max-threads Integer The maximum number of threads to use. Defaults to 50. :max-streams Integer The maximum number of concurrent streams for an HTTP2 or HTTP2C connector. Defaults to 128. :reuse-addr? Boolean Reuse the socket address. Defaults to true. :thread-pool A ThreadPool instance. Override the Jetty thread pool (ignores max-threads) :configurator Function A function called with the Server instance. Expected to return the Server instance. Use when advanced customization is required. :context-configurator Function A function called with the ServletContextHandler instance. Use when advanced customization is required. :ssl? Boolean Allows connections over HTTPS. :ssl-port Integer Port to use for TLS listener. Defaults to 443 and implies :ssl?. :h2c? Boolean HTTP/2 cleartext support. Allows upgrading connections from HTTP/1.1 to the Http/2 protocol. Defaults to true.HTTP/2 versioning, Jetty HTTP/2 documentation. :h2? Boolean HTTP/2 TLS support. When true, :ssl-port must also be specified. :connection-factory-fns Vector of Functions A vector of functions that each take the options map and an HttpConfiguration instance and return a ConnectionFactory instance. Applies only to the SSL connection. :ssl-context-factory An SslContextFactory instance. The SSLContextFactory instance to use when creating the server. If specified, :key-password, :keystore, :truststore, :trust-password, :security-provider, :client-auth are ignored. :keystore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :key-password String Used for TLS. Keystore password. Not used if :ssl-context-factory is set. :truststore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :trust-password String Used for TLS. Trust store password. Not used if :ssl-context-factory is set. :sni-host-check? Boolean Perform Server Name Indication check during TLS handshake (default true). Set this to false for local development and when using DNS wildcard certificates since \"localhost\" is not a valid server name according to the TLS spec and the definitive server name is not known when using a DNS wildcard certificate after the TLS handshake. You will receive HTTP 400 statuses from the browser when this is enabled and you use localhost or a DNS wildcard certificate. :keystore-scan-interval Integer The interval in seconds to scan for an updated keystore/certificate replacement (default 60). This is only relevant when SSL is configured. When the keystore is updated, the service will reload certificates with no downtime. :client-auth String SSL client certificate authenticate, may be set to :need, :want or :none. Defaults to :none. :security-provider String Java Security Provider name. Refer to the Jetty Configuring SSL/TLS documentation. Not used if :ssl-context-factory is set. :http-configuration An HttpConfiguration instance. The HttpConfiguration instance to use when creating the server. Use when advanced customization is required. The default HttpConfiguration is listed below. :ws-idle-timeout long Sets the default time in milliseconds after which any web socket sessions in this container will be closed if it has been inactive, or 0 for no timeout. :ws-max-binary-size long Sets the default maximum size of incoming binary message that this container will buffer. :ws-max-text-size long Sets the maximum size of incoming text message that this container will buffer. The default HttpConfiguration is: SendDateHeader is set to true SendXPoweredBy is set to false SendServerVersion is set to false An instance of org.eclipse.jetty.server.SecureRequestCustomizer is added via addCustomizer When :ssl?, :ssl-port or h2? is provided, securePort is set to the value of :ssl-port and secureScheme is set to \"https\".","title":"Jetty 12","component":"pede
1stal","version":"0.8","name":"jetty","url":"/pedestal/0.8/reference/jetty.html","titles":[{"text":"Container Options","hash":"_container_options","id":1},{"text":"Default HttpConfiguration","hash":"_default_httpconfiguration","id":2}]},"39":{"id":39,"text":"Pedestal is composed of multiple libraries, and many of these can be used outside of a Pedestal application. Table 1. Pedestal Libraries Summary Library Name Description pedestal.common Common functionality and internal utilities. pedestal.telemetry Wrapper around Open Telemetry for generating application metrics and tracing. pedestal.log Wrapper around Simple Logging Facade for Java pedestal.interceptor Asynchronous interceptor pipeline pedestal.error Simple error catching for interceptors pedestal.route HTTP request routing pedestal.service Connector-agnostic HTTP service support pedestal.servlet Servlet-API specific pedestal.jetty Jetty 12 connector pedestal.http-kit Http-Kit connector Pedestal libraries are uploaded to the Clojars repository; files in such a repository are called artifacts. All pedestal libraries are in the io.pedestal group. For Leiningen, add this vector to the :dependencies list inside your project.clj: [io.pedestal/pedestal.jetty \"0.8.2-beta-11\"] You will adjust the library name as necessary. For Clojure Deps, add this key and value to the :deps map inside your deps.edn: io.pedestal/pedestal.jetty {:mvn/version \"0.8.2-beta-11\"} Pedestal is built using Clojure Deps; this means that it is possible to get access to bleeding-edge versions of the libraries directly from the GitHub repository. io.pedestal/pedestal.jetty {:git/url \"https://github.com/pedestal/pedestal.git\" :git/sha \"a0b6a0f7e57710ba6b9f0aa3a62dd1f68e278f43\" :deps/root \"jetty\"} All Pedestal libraries are in the same repository, :deps/root is used to select the subdirectory containing the library’s code (this matches the library name, without the pedestal. prefix). :git/url’s are not transitive; when the library you select has dependencies on other Pedestal libraries, those will be accessed as :mvn/version dependencies. You may need to provide additional dependencies to bring in multiple Pedestal libraries. For example, if you are verifying a bug fix that was split between pedestal.route and pedestal.service, you should introduce dependencies on both libraries; otherwise you may only get half of the bug fix.","title":"Pedestal Libraries","component":"pedestal","version":"0.8","name":"libraries","url":"/pedestal/0.8/reference/libraries.html","titles":[{"text":"Artifact Coordinates","hash":"_artifact_coordinates","id":1},{"text":"Git Artifact Coordinates","hash":"_git_artifact_coordinates","id":2}]},"40":{"id":40,"text":"Provides the user with the most control over routing outside of implementing a custom router. You require precise control over routing and the routing performance tradeoff is acceptable to your service. Set the key :router in the connector map to the value :linear-search. This implementation routes requests in linear time, so it’s the simplest and slowest of Pedestal’s router implementations. Pedestal’s first router implementation. Query and path constraints are used in routing decisions unlike the Prefix Tree Router or Map Tree Router. That is, if a route is considered (based on path, method, and so forth) but the path or query parameters violate the constraints defined in the route, then the search will continue. For the other routers, a route is matched and then either used, or (if constraints do not match) the entire request is treated as unrouted.","title":"Linear Search Router","component":"pedestal","version":"0.8","name":"linear-search-router","url":"/pedestal/0.8/reference/linear-search-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5}]},"41":{"id":41,"text":"A critical part of Pedestal is how it performs logging. At the core, Pedestal builds upon the Simple Logging Facade for Java. This facade is an abstraction over several different libraries used for logging, such as Logback, Apache Log4j or the built-in java.util.logging packages. As part of your application’s dependencies, you can include an adapter to your preferred logging library (see the notes on such dependencies). If you fail to include any such library, you will see the following warning: user=>
1 (require '[io.pedestal.log :as l]) SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. Without a logging adapter, all logging is a no-op. You should include a logging adapter, even if just for testing. Pedestal departs from many Java and even Clojure logging frameworks in that it’s core approach is to log events, not strings. These events are in the form of a Clojure map. The intent is that logging in one program can be a source of data for another. Although this kind of thing is possible when logging output is primarily formatted for human readability, doing so in practice often involves reams for special rules and regular expressions - with Pedestal, it is very straight-forward to isolate the Clojure map and then parse it as EDN data. The central macros in the io.pedestal.log namespace are trace, debug, info, warn, and error. These macros are responsible for obtaining a LoggerSource instance based on the namespace name (unless overridden) and convert
1ing the passed keys and values into a Clojure map, which is printed to a string and logged as the event message. Added to the map is the extra key, :line, which identifies the line number in the source. Bear in mind that often, Java libraries do their own logging, and that logging will not be formatted as Clojure maps. It is common for loggers to add an :in key, whose value is symbol identifying the function containing the logging call. Example: (ns org.example.routes (:require [io.pedestal.log :as l]) ... ... (l/debug :in 'auth :user-id user-id :roles user-roles) ... Sample logging output: DEBUG org.example.routes - {:in auth, :user-id \"3d1535dd-18fa-40f1-95f8-78d7f44b0319\", :roles #{\"buyer\" \"admin\" \"manager\"}, :line 37} Note that the order of keys in the map is not specified. The use of macros, not functions, ensures that logging is efficient. The code emitted by the macro always checks to see if logging is enabled for the logger; when it is not, no further work occurs - the expressions passed to the macro are not evaluated. A common case when logging is to log caught exceptions; the exception is specified with the :exception key, and the value must be some kind of java.lang.Throwable, though it’s generally an instance of java.lang.Exception. (try ... true (catch Exception e (l/error :in 'processor :exception e) false)) Table 1. Other special keys used with logging macros Key Value :io.pedestal.log/logger The logger instance to use, rather than the default. The logger must satisfy the LoggerSource protocol. The default is a logger with name matching the namespace. :io.pedestal.log/formatter A function that can be passed an event map and return a string used when logging (the underlying logging APIs expect a string message). The default is pr-str (via default-formatter). The macro log expects a logging level, as a keyword, as its first parameter, followed by key/value parameters. This allows the logging level to be decided at runtime, rather than when the namespace is first loaded. The spy macro takes an expression, evaluates it, and returns it. Before returning, it logs the expression (as key :spy) and the result (as key :value) at debug level. This is often useful during REPL-driven development. The logging functionality is itself pluggable; what Pedestal supplies out of the box is an adapter for SLF4J in the form of a LoggerSource protocol, extended onto SLF4J’s org.slf4j.Logger interface. If you wish to use pedestal-log with a different logging library, you may specify an override for the logger source; this is a function that is passed a logger name string, and returns an instance that extends LoggerSource. The override can be specified as the fully qualified name of a Clojure function, either via system property io.pedestal.log.overrideLogger or by environment variable PEDESTAL_LOGGER. By default, log event data is formatted to a string using pr-str (this default is provided by default-formatter), before being passed (via the methods of the LoggerSource protocol) to the underlying logging implementation. However, this can be overridden, which is useful for: Identifying and removing or redacting personal data that should not be logged Formatting the log output in a particular way, such as formatting as JSON rather than EDN The system property io.pedestal.log.formatter, or environment variable PEDESTAL_LOG_FORMATTER, can specify a fully qualified function name; this function is passed the event map and returns a string, and will be used instead of pr-str as the default when the :io.pedestal.log/formatter key is not provided. The MDC is a feature of SLF4J that is mapped onto different logging implementations, just like the Logger. An SLF4J MDC is essentially a map of string keys and string values stored as per-thread global state. The SLF4J MDC is useful for storing additional values that should be logged; a common example is a request correlation id. When setting up the format for logging, an additional directive is used to output the MDC. For example, when using ch.qos.logback.core.ConsoleAppender, the %msg pattern outputs the message string (the printed ver
1sion of the Clojure event map); the %X pattern is used to print out individual keys in the MDC. Pedestal has its own MDC, as a dynamic var. The default behavior is for the Pedestal MDC map to be formatted (as with an event map) and stored into the MDC using the key \"io.pedestal\". Thus the pattern %X{io.pedestal} will print out that Pedestal MDC. The macro with-context and allows values to bound to the Pedestal MDC, which are then copied into the \"io.pedestal\" key of the SLF4J MDC; at the end of the block, the prior state of the SLF4J and Pedestal MDCs are restored. Be careful about using the SLF4J MDC when using core.async or any kind of thread pool; the MDC is stored per-thread, and there isn’t an easy way to copy its value over to arbitrary new threads. Table 2. Special Keys used with with-context Key Value :io.pedestal.log/mdc The MDC to use, which must implement LoggingMDC. :io.pedestal.log/formatter A function that can be passed an MDC map and return a string used when setting the io.pedestal key of the SLF4J MDC. The default is pr-str via default-formatter. Logback supports overriding a logging configuration file that is used in production with one that is only used in tests - it’s simply a matter of having a file named logback-test.xml on the classpath. A full production Logback configuration will often set limits on what’s logged, and deal with writing output to timestamped files. For testing and local development, you want to be less selective on logging output, and log to the console. This is a somewhat minimal example: <configuration scan=\"true\" scanPeriod=\"1 seconds\"> <appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\"> <encoder> <pattern>%-5level %logger - %msg%n</pattern> </encoder> </appender> <root level=\"debug\"> <appender-ref ref=\"STDOUT\"/> </root> <logger name=\"org.eclipse.jetty\" level=\"warn\"/> <logger name=\"io.pedestal\" level=\"warn\"/> </configuration> Both Jetty and Pedestal can produce quite a bit of debug output, so the sample above disables that logging. Because the Logback configuration enables file scanning, it can be updated at runtime to enable or disable logging of specific namespaces.","title":"Logging","component":"pedestal","version":"0.8","name":"logging","url":"/pedestal/0.8/reference/logging.html","titles":[{"text":"SLF4J","hash":"_slf4j","id":1},{"text":"Events, Not Strings","hash":"_events_not_strings","id":2},{"text":"Logging macros","hash":"_logging_macros","id":3},{"text":"Exceptions","hash":"_exceptions","id":4},{"text":"Other special keys","hash":"_other_special_keys","id":5},{"text":"log macro","hash":"_log_macro","id":6},{"text":"spy macro","hash":"_spy_macro","id":7},{"text":"Overriding the LoggerSource","hash":"_overriding_the_loggersource","id":8},{"text":"Overriding the default event formatter","hash":"_overriding_the_default_event_formatter","id":9},{"text":"Mapped Diagnostic Context (SLF4J)","hash":"_mapped_diagnostic_context_slf4j","id":10},{"text":"Example logback-test.xml","hash":"_example_logback_test_xml","id":11}]},"42":{"id":42,"text":"Many Pedestal-based services do not leverage every routing feature. The Map Tree router is optimized for the static routes use case. Routes requests in constant time (path matching is done by map lookup). Set the key :router in the connector map to the value :map-tree. If the routes provided have any path parameters or wildcards, the Prefix Tree Router will be used instead. Like the Prefix Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #422","title":"Map Tree Router","component":"pedestal","version":"0.8","name":"map-tree-router","url":"/pedestal/0.8/reference/map-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"43":{"id":43,"text":"Pedestal metrics are a wrapper around Open Telemetry, which provides cross-platform solutions for metrics, tracing, and logging [1]. Metrics and tracing are provided in the io.pedestal/pedestal.telemetry library. The io.pedestal.metrics namespace contains the API that applications can use to emit metrics. Pedestal supports: counter A numeric value that increases over time, such as the number of requests processed. gauge Measures value that varies over time, such as the depth of a queue. timer Measures a duration and a count, used for things like request processing time. Timers are initialized as counters. histogram Tracks a range of values, exposing them in different bucket ranges; useful for identifying broad trends, and used for metrics such as size of incoming requests. The metrics API is built around the default-metric-source, which is created at startup from a function identified by runtime configuration. Open Telemetry defines a wide range of JVM system properties and environment variables to configure metrics (and tracing); those are outside the scope of this document. Rather than rely on outside configuration, an application can provide its own initialization function to setup Open Telemetry as needed. When defining a metrics, using functions such as counter, additional attributes may be specified to configure the metric before a metric instance is built. The
1se configuration attributes are implemented for the default Open Telemetry implementation. Key Type Meaning :io.pedestal.metrics/configurator Function Passed the appropriate builder object from the Open Telemetry API; may invoke methods on it, and return it. :io.pedestal.metrics/description String Sets the description of the metric. :io.pedestal.metrics/unit String Sets the units of the metric. :io.pedestal.metrics/value-type :long or :double Sets the type of value for the metrics; the default is :long when not specified. For the configurator: most of the methods on the Open Telemetry API are fluid: they modify the object and return it. The exact type of object passed to the configurator depends on the type of metric, and whether the metric is configured for long values or double values. You will typically want to use a type hint on the builder object passed to the configurator to ensure that reflective access is avoided. The Open Telemetry framework supports long or double as the value types inside metrics; Pedestal expects any underlying metrics framework to do the same, even if it means converting provided value types. By default, metric values are of type long. This can be overridden using configuration. In addition, the attribute :io.pedestal.metrics/value-type can be applied to any metric; the value for the attribute should be either :long or :double. Pedestal will convert supplied longs or doubles to the correct type for the particular metric. Pedestal has a small amount of built-in metrics. :io.pedestal.http/request A counter of the number of incoming requests, produced by the log-request interceptor. :io.pedestal.http.cors/origin-real A counter for the number of requests that are allowed, produced by the allow-origin interceptor. :io.pedestal.http.impl.servlet-interceptor/base-servlet-error A counter for number of uncaught exceptions thrown during interceptor execution. :io.pedestal/active-servlet-calls A gauge measuring the number of active requests in progress at any one time. :io.pedestal.http.sse/payload-size A histogram measuring the size of server-sent messages sent to the client. :io.pedestal.http.sse/active-streams A gauge of the number of active streams sending server-sent messages. :io.pedestal.http.impl.servlet-interceptor/async-write-errors A counter of the number of times that the asynchrounous pipe to a client closed during delivery of a streaming response. 1. In fact, there’s an extra layer of abstraction: namespace io.pedestal.metrics.spi which defines the protocol that can be implemented to capture metrics without using Open Telemetry.","title":"Metrics","component":"pedestal","version":"0.8","name":"metrics","url":"/pedestal/0.8/reference/metrics.html","titles":[{"text":"Supported Metrics Types","hash":"_supported_metrics_types","id":1},{"text":"Setup","hash":"_setup","id":2},{"text":"Metric Configuration","hash":"_metric_configuration","id":3},{"text":"Value Types","hash":"_value_types","id":4},{"text":"Built-in Metrics","hash":"_built_in_metrics","id":5}]},"44":{"id":44,"text":"HTTP allows clients to provide per-request information through several mechanisms: The request URL Query parameters appended to the URL Body content Various interceptors in Pedestal parse this information and attach it to the request map. Query parameters will be attached to the request map under the key :query-params. The value will be a map, constructed as follows: Each query parameter name becomes a key in the map. The query parameter name is URL-decoded. If the resulting string could be a Clojure keyword, it is converted to a keyword. Otherwise, the string itself becomes the key. The query parameter value is URL-decoded and attached as the value of that key. For example, a request string like this: /path/to/resource?after=123123%2099 Becomes the map: {:after \"123123 99\"} Whereas, the request string: /path/to/resource?after:page=12&after:storyid=abc123XYZ&user%20id=99 Becomes the somewhat weird map: {:after:page \"12\" :after:storyid \"abc123XYZ\" :user id \"99\"} The odd-looking keywords :after:page and :after:storyid are legal Clojure keywords, but definitely not an idiomatic usage. The keyword :user id is even more unusual. Clojure keywords can include spaces, but the Clojure reader cannot parse a keyword literal with spaces in it. Query parameters are also merged into the :params map inside the request map. URL templating is popular with resource-oriented APIs. These use segments of the URL, in lieu of query parameters, to supply identifiers. Pedestal calls these \"path parameters\". They are parsed from the URL and bound to the :path-params map in the request map. Path parameters are always named by a keyword, which is taken from the URL fragment in the route. For example: URL Path param keys /users none /users/:id :id /users/:id/posts/:post :id, :post In every case, the value of the parameter is a string, taken from the corresponding segment of the URL. Pedestal can parse form data, JSON, EDN, and Transit data from request bodies.The parsed information is called \"body parameters.\" Applications can also provider their own parsers for body parameter data. Different routes may use different body parameter formats. For these reasons, Pedestal does not automatically provide an interceptor for body parameters.Instead, your application must add an interceptor to specific routes. The interceptor is created by the body-params function. Without any arguments, it returns an interceptor that parses according to the request’s Content-Type header: Content type Parsed as Coerce keys to keywords? Bound to in request Merged into :params application/x-www-form-urlencoded HTML form Yes :form-params[1] Yes application/json JSON Yes :json-params No application/transit+json Transit JSON encoding No :transit-params No application/transit+msgpack Transit Msgpack encoding No :transit-params No application/edn EDN data No :edn-params No Form parameter keys are not automatically converted to keywords when merged into the :params map.Use the keywordize-params interceptor to convert :params keys to keywords. If the request has any other content type, the body will not be altered and the request map will not be changed. That includes a nil content type if the request doesn’t include a Content-Type` header. If you need to customize the way body-params handles content types, or provide options to the built-in parsers, call it with a parser-map as an argument. You can get a good starting point by calling default-parser-map. File upload is a special case of a request body. The request will have a multipart body with separate encoding for each. In this case, use an interceptor returned by the multipart-params function. Use the :store option to persist the parts. Browsers (especially older ones) do not have easy ways to handle DELETE and PUT requests. Pedestal allows requests to smuggle verbs through a query parameter. If the magic query parameter _method is present, then its value will be used as the HTTP verb for this request. This substitution is handled by the default interceptor method-param. It occurs before routing, so you can use the correct verb
1s in your routes. Application code can generate links with verb smuggling via the :method-param option to url-for-routes. 1. :form-params keys are automatically converted to keywords.","title":"Parameters","component":"pedestal","version":"0.8","name":"parameters","url":"/pedestal/0.8/reference/parameters.html","titles":[{"text":"Query Parameters","hash":"_query_parameters","id":1},{"text":"Path Parameters","hash":"_path_parameters","id":2},{"text":"Body Parameters","hash":"body-parameters","id":3},{"text":"File Upload","hash":"_file_upload","id":4},{"text":"The Method Parameter","hash":"_the_method_parameter","id":5}]},"45":{"id":45,"text":"Provide a performant router which is efficient in time and space. The implementation is modeled after httprouter, a library for Go. Most performant builtin router implementation when dynamic routes (those using path parameters and wildcards) are required. The prefix tree router operates in logarithmic time. Set the key :router in the connector map to the value :prefix-tree. Provides less control over routing. For example, Wild card routes always win. The path /foo/:bar will always match over /foo/baz. Like the Map Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #310","title":"Prefix Tree Router","component":"pedestal","version":"0.8","name":"prefix-tree-router","url":"/pedestal/0.8/reference/prefix-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"46":{"id":46,"text":"The request map is attached to the context map before the first interceptor is invoked. The request map describes the incoming HTTP request, including information about the remote endpoint. Pedestal does not attach metadata to the request map. When processing, take care to modify the map (e.g., use assoc), rather than constructing a new map entirely. Interceptors may add arbitrary keys to the request map, and the interceptors' functionality may depend on getting stored values back out of the request map. Pedestal uses an extended version of the Ring request specification: Key Always Present? Type Ring Spec? Description :async-supported? Yes boolean No True if this request supports asynchronous operation :body Yes ServletInputStream Yes The body of the request. May be a zero-length stream. :content-type No String Yes Content type of the request body [1]. :content-length No Long Yes Present if sent by client. Content length of the request body. :character-encoding No String Yes Present if sent by client. Character encoding applicable to request body. :headers Yes Map of String → String Yes Request headers sent by the client. Header names are all converted to lower case. :path-info Yes String No Request path, below the context path. Always at least \"/\", never an empty string. The URI, excluding the query string. :path-params No Map No Present after successful routing, a map from keyword id to string value of path parameters defined by the route. :protocol Yes String Yes Name and version of the protocol with which the request was sent. :query-string Yes String Yes The part of the request’s URL after the '?' character. :remote-addr Yes String Yes IP Address of the client (or the last proxy to forward the request) :request-method Yes Keyword Yes The HTTP verb used to make this request, lowercased and in keyword form. Due to verb smuggling, this may change during processing of the request. :server-name Yes String Yes Host name of the server to which the request was sent :server-port Yes int Yes Port number to which the request was sent :servlet Yes Servlet No Servlet instance that the request was provided to. :servlet-request Yes HttpServletRequest No Request instance provided to the servlet; the request map consists primarily of data extracted from this object. :servlet-response Yes HttpServletResponse No Response instance provided to the servlet. :scheme Yes String Yes The name of the scheme used to make this request, for example, http, https, or ftp. :ssl-client-cert No java.security.cert.X509Certificate[] Yes Present if sent by client. Array of certificates that identify the client. :uri Yes String Yes The part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request The :servlet, :servlet-request, and :servlet-response will not be present when the created around a connector. They are provided by the Servlet Interceptor, and so, only available inside a WAR Deployment. Many more keys are added to the request map by the default interceptors, many of the new keys are related to parsing query parameters and the request body; this is described more fully in the parameters reference. 1. This was a required property of earlier versions of the Ring request specification, and is kept for compatibility reasons.","title":"Request Map","component":"pede
1stal","version":"0.8","name":"request-map","url":"/pedestal/0.8/reference/request-map.html","titles":[]},"47":{"id":47,"text":"Although most of Pedestal is focused on dynamic routes, nearly all HTTP-based applications will have some number of static resources that need to be client-accessible as well. These resources take the form of either plain files on the host’s file system, or virtual resource files available on the Java classpath. The classpath includes not just the code of your application, but the code for the Pedestal library, and any other dependencies you have defined for your project. For both classpath and file system resources, you must be careful about what you expose - only specific directories, known to be free of any compromising information (such as API keys or other secrets). The preferred approach is to add routes for resources to your application. (ns org.example.service (:require [io.pedestal.connector :as conn] [io.pedestal.service.resources :as resources])) (defn create-connector [] (-> (conn/default-connector-map 8890) (conn/with-default-interceptors) (conn/with-routes #{ ... } (1) (resources/file-routes {:file-root \"web/public\"}))) (2) 1 This is where you would put the dynamic routes for your application. 2 This exposes any files stored in the web/public folder under the default URI path /. The with-routes macro will expand and combine the routes together to form the full routing table. The resource-routes function is analogous to file-routes, but returns routes that expose resources on the classpath. Each of these functions take a single parameter, a map of options: Table 1. Options to file and resource functions Option Default Only Description :prefix \"/\" The path prefix for the exposed resources. :root-path - file Path to root directory to expose. :resource-root - resource Prefix on resources, limiting access to a safe subset of the classpath :classloader - resource Classloader used to find resources :index-files? true file If true, paths that map to directories may return the index file for that directory. :cache? true If true, then resource data is cached in memory to improve throughput. :fast? true If true, then fast, asynchronous responses may be used. :allow-head? true If true, then additional routes are added to support the :head request method, returning empty bodies. :route-namespace \"io.pedestal.http.resources\" Namespace used when creating route names for the routes. Using the defaults, which enable fast responses and caching, the route-based resources are demonstrably faster than the interceptor-based resource access, especially for large resources …​ though for any reasonably sized resource, the response time is sub-millisecond. It is quite possible to use both file and resource together, as long as the :prefix is set so that routes do not overlap. If necessary, it’s even possible to use these functions multiple times, but care must be taken with the :route-namespace option to avoid route name collisions. The :prefix option should start with a \"/\" and not end with one (with the exception that the default prefix, \"/\", is allowed). For the :index-files? option, Pedestal will identify requests that map to a directory, not to a specific file. Pedestal will search for one of the following: index.html index.htm Any file whose name starts with index. If any of these are found, then the request is treated as if it were to the matching file. The :resource-root option should not start or end with a slash; to restrict access to just classpath files within the org.example.myapp.public namespace, the option should be \"org/example/myapp/public\". Requests that include any use of \"..\" in the path (in order to \"escape\" from the root location) are rejected, resulting in a 404 response. The :cache? option does not currently put an upper limit on how many resources get cached; it’s presumed that there are only a finite number of resources that can be exposed and cached. You will want to disable the :cache? option if you have more than a handful of resources that may be available, as there’s no facility to access or clear the cache. If you have many hundreds of resources, or the resources may change over time, caching is not a good option. You may want to implement your own cache as an interceptor around the resource routes. The :fast? option will attempt to convert matched files or resources into a java.nio.channel.Channel instance, for an asynchronous response. This only occurs if the size of the resource exceeds the buffer size of the servlet response. The default used when the :classloader option is nil is the context class loader associated with the current thread. The arguments to these above functions are used to create a set of table routes. The options map will also be passed to table-routes, so you may use the keys it supports; particularly :scheme, :port, and :interceptors.","title":"Resources","component":"pede
1stal","version":"0.8","name":"resources","url":"/pedestal/0.8/reference/resources.html","titles":[{"text":"Resource Routes","hash":"_resource_routes","id":1},{"text":"Options notes","hash":"_options_notes","id":2},{"text":"Table route options","hash":"table-options","id":3}]},"48":{"id":48,"text":"The response map is attached to the context map by any interceptor in the interceptor chain. The response map describes the outgoing HTTP response. If no response map is attached to the context by the time processing is done, then Pedestal generates a 404 response. When an interceptor attaches a response map (or a handler function returns a response map), the map is validated: Must be a map Must contain a positive integer value for the :status If the response fails the above validations, an exception is thrown. [1] The function respond-with is the easiest way to add a response map to the interceptor context. Key Always Present? Type Description :status Yes integer The HTTP status code :headers No map of String → String Response headers sent to the client. Header names are case-sensitive. :body No String, ISeq, File, InputStream, etc. The body of the response sent to the client; see Response Bodies for more details. Application code that returns a header should use the proper case version of the header, for example, Content-Type (not content-type); although incoming request headers are converted to lower case, outgoing response headers are left as-is, and some standard interceptors expects certain headers to be present with the correct name (such as Content-Type). 1. Prior to Pedestal 0.7, an invalid :response would be ignored instead, and the execution would continue, subverting the developer’s expectations.","title":"Response Map","component":"pedestal","version":"0.8","name":"response-map","url":"/pedestal/0.8/reference/response-map.html","titles":[]},"49":{"id":49,"text":"This reference describes how the Servlet Interceptor handles response bodies of various types. Much of this behavior depends on the protocols WritableBody and WritableBodyAsync. See Important Protocols for details about those. The exact handling of the response body depends on the Java or Clojure type of the value in the :body key of the response map. Type Default content type Serialization Async? byte array application/octet-stream direct byte copy no string text/plain bytes according to platform’s default character encoding no Clojure collection application/edn text representation of data, same as Clojure’s writer no Clojure function nil depends on the function no File application/octet-stream bytes of the file copied to the output stream no InputStream application/octet-stream bytes of the input stream copied to the output stream no ReadableByteChannel (NIO) application/octet-stream bytes of the channel copied to the output stream yes ByteBuffer (NIO) application/octet-stream bytes of the buffer copied to the output stream yes core.async channel nil see below yes When the response body is a ByteBuffer or an NIO Channel, then the Pedestal connector may convert the response to asynchronous processing (if this is supported by the network connector). This returns the thread to the container’s request processing thread pool, and the container will (efficiently) stream the contents of the buffer or channel to the client. When a core.async channel delivers a message, that message is written to the stream, using any of the synchronous dispatches above. The message from the channel must not be another channel, it must be a value that can be immediately acted upon. At this time, the Http-Kit support does not handle the following types conveyed in the channel: Function Collections ReadableByteChannel However, the support is sufficient for Server-Sent Events. When the body is, in fact, a function, then Pedestal will invoke the function with a java.lang.OutputStream; the function’s responsibility is to write the actual response to that stream.","title":"Response Bodies","component":"pedestal","version":"0.8","name":"response-bodies","url":"/pedestal/0.8/reference/response-bodies.html","titles":[{"text":"nio Channel","hash":"nio-channel","id":1},{"text":"Core Async Channel","hash":"_core_async_channel","id":2},{"text":"Function","hash":"_function","id":3}]},"50":{"id":50,"text":"Ring is an older Clojure web framework, itself inspired by even older libraries, such as Ruby Rack. Pedestal was originally created to extend Ring’s underlying model with one that c
1ould be made asynchronous, through the introduction of the interceptor model. The Pedestal team contributed patches to Ring to split much of its standard middleware into discrete functions that could be invoked from interceptors. To this day, much of the low-level HTTP logic, such as managing cookies and parsing multi-part form submissions, is simply wrappers around the same functionality in Ring. These interceptors are in the io.pedestal.http.ring-middlewares namespace. This page provides extra documentation for several of these interceptors. Provides support for client-specific session data, which is commonly used for page-oriented applications (rather than API oriented applications). This data takes the form of a :session key on the request map. An interceptor can add a :session key to the response map, which will cause the session interceptor to store the new map. The interceptor operates with a SessionStore which stores the session data for all clients; Ring provides one implementation, useful for testing, that stores session data in an Atom; the other implementation uses an encoded and encrypted cookie. A cookie, by default named ring-session, stores a unique client id that is used with the SessionStore to store and retrieve session data. session options: Option Type Default :store ring.middleware.session.store/SessionStore via ring.middleware.session.memory/memory-store :set-cookies? boolean true :cookie-name String \"ring-session\" :cookie-attrs map {: path \"/\" :http-only true} :root String \"/\" See Ring API for further details. \"Flash\" is the term for a short message that persists between one request and the next; it is commonly used in page oriented applications to have POST requests respond with a redirect to a GET request for the data just added or updated; the flash is where a short message can be stored between requests. The flash interceptor must be ordered after the session interceptor, as the flash is just a key in the session map. In practice, a handler or interceptor adds a :flash key to the response; this is stored into the session, and on the next request, there will be a :flash key in the request. This interceptor allows a client to access resources, files on the JVM classpath. It is an enhanced version of resource that will identify larger resources and create a response whose body is a java.nio.channels.FileChannel for the underlying file; this will allow Jetty 12 to stream the content asynchronously.","title":"Ring Middleware","component":"pedestal","version":"0.8","name":"ring","url":"/pedestal/0.8/reference/ring.html","titles":[{"text":"session","hash":"_session","id":1},{"text":"flash","hash":"_flash","id":2},{"text":"fast-resource","hash":"_fast_resource","id":3}]},"51":{"id":51,"text":"A significant part of the 0.8 development cycle has been to improve and upgrade routers. In most cases, the new logic is a drop-in replacement for the old. If you are upgrading from 0.7 or earlier, and you implement your own routers or routing specifications, you will need to be aware of these changes. This should not affect the vast majority of Pedestal applications. The naming of routing-related protocols and methods of those protocols is quite confusing; it will take some real work over much time to straighten that out. Focus on what the protocols do rather than how they are named. In addition, the Sawtooth Router is now the default router; the others are kept primarily for backwards compatibility. It is now possible to set a list of prefix interceptors that apply to all routes defined by a call to table-routes. It is now allowed to define additional key/value pairs at the end of the route (after :route-name and/or :constraints). These routes will be available at runtime after routing, allowing for generic interceptors that act based on values stored in the route map. Many of the namespaces used in routing had internal functions not marked as private; these have been made private. Previously, it was assumed that there was a single specification for all routes; in trivial examples this might be a set (which, via the RouteSpecification protocol) is interpreted as a call to table-routes. Other applications might invoke table/table-routes directly. In either case, this value is provided to with-routes. Pedestal 0.7 only supported a single set of routes; but with-routes supports any number of routes, which are merged together. The return type of table-routes/routes, and the other built-in route definitions (terse-routes and expand-verbose-routes) have been changed; previously they returned a seq of route maps; they now return a RoutingFragment (essentially, a wrapper around a seq of route maps). Likewise, the routes-from macro (on which with-routes builds) now accepts a variable number of expressions. The ExpandableRoutes protocol is now used to convert an arbitrary data structure to a RoutingFragment (not a seq of expanded routes); these fragments are then combined, by expand-routes, into the full routing table. Previously, expand-routes only accepted a single value; it now accepts one or more RoutingFragments. The RouterSpecification protocol was used to choose a different strategy based on whether the routing table was an actual value, or a function that returns a value; the protocol has been removed as there were only ever two implementations. The Router protocol, and the containing io.pedestal.http.route.router namespace, have been removed; instead, each router contructor simply returns a router function. The contract has changed slightly; on a successful route, the router function returns a tuple of two values: The matching route The map of path parameter values (extracted from the request’s path)","title":"Routing Changes in 0.8","component":"pede
1stal","version":"0.8","name":"routing-changes","url":"/pedestal/0.8/reference/routing-changes.html","titles":[{"text":"Table Routes","hash":"_table_routes","id":1},{"text":"Private Functions","hash":"_private_functions","id":2},{"text":"New: Routing Fragment vs. Routing Table","hash":"_new_routing_fragment_vs_routing_table","id":3},{"text":"ExpandableRoutes","hash":"_expandableroutes","id":4},{"text":"RouterSpecification Protocol","hash":"_routerspecification_protocol","id":5},{"text":"Router Protocol","hash":"_router_protocol","id":6}]},"52":{"id":52,"text":"Routing is the process by which an incoming request is analyzed to determine how it will be processed by Pedestal. Routing is based on comparing any of a number of factors from the request, including: The request path (including matching wild cards in the path) The HTTP method used (GET, POST, etc.) The HTTP scheme used in the request (http or https) The name of host in the request The port number It’s natural to understand why path and method are involved in routing; less obvious for the other factors. Essentially, a single Pedestal application may host two or more concurrent sets of endpoints inside the same server - incoming requests are differentiated most often by port, but can also be differentiated by the host. A somewhat common example is an outward-facing consumer application exposed outside a company’s firewall on one port, and an inward-facing set of endpoints for operations (status, metrics, management, and so forth) on a different port. Defining routes and setting up the servlet container are two separate functions; just because you have a route mapped to a port or host doesn’t mean that the servlet container is configured to accept requests for that port or host. It is your responsibility to connect those dots by setting up the servlet container’s configuration in the connector map. The library io.pedestal.http.route namespace provides the core components to express routes and construct routers. It can be used independently of the pedestal-service library. Pedestal is data driven, and the routing information starts in one form (as data) and is then transformed in a series of stages to reach a final result that can be used to route incoming requests. The start is the route specification. Pedestal has three built-in formats for route specification: table, terse, and verbose. Table is the newest format [1] and is the preferred format; the others are maintained for backwards compatibility reasons. For each of the built-in formats, there is a function that can convert that specific format into a routing fragment. One or more fragments are then combined to form the routing table. Pedestal will determine which function to invoke based on the kind of data: set, vector, or map: Route specifications are the data values that spell out the possible routes. These are normalized and expanded and combined into a routing table. In effect, a routing specification is a way to avoid calling any of the specific functions, such as table-routes. The end result is equivalent. The functions convert their inputs into routing fragments which are then combined into a routing table by expand-routes. A Router Constructor function is passed the routing table, and applies a specific strategy to match incoming requests to the provided routes; there are a few different constructor functions, each with different limitations and trade-offs. The default is Sawtooth (router). The router constructor returns a Routing function encapsulating the routing table and the strategy. The routing function is passed the request and returns a vector of two values on success: the matching route, then the map of path parameters. On failure, when the incoming request can not be matched to a route, the routing function returns nil. The routing interceptor is built around the routing function; its job it to combine the routing function and the current request to identify the route, if any, that matches the request. When routing is successful, the interceptor updates the request map, and queues up route-specific interceptors to handle the request. There are actually two different implementations of the interceptor; the production one is used in the normal case, where the routing table is an actual value. Under development mode, the routing table may be a function that returns the routing table; in which case, the routing function is rebuilt on every request. Generally, all of this is automatic; an application provides routes to the with-routes function and a routing interceptor is automatically created. Route specifications go through a series of transformations that results in a routing table;
1 a routing table is a sequence of verbose routing maps. The expand-routes function converts any kind of specification(s) into a routing table: Argument to expand-routes Syntax used Set Table Syntax - Most recent (2016), easier than terse format, recommended for new projects. Vector Terse Syntax - improvement on the verbose syntax, with an emphasis on avoiding redundancy, but can be hard to read and write, since it is expressed as deeply nested maps. Map Verbose Syntax - oldest format. This mapping from value type to specification type is the responsibility of the ExpandableRoutes protocol, which is extended on to the Map, Set, and Vector classes. ExpandableRoutes is only needed when Pedestal is provided with routes as data (a Set, Vector, or Map) It is also perfectly valid to build the routes explicitly, by directly calling table-routes. It’s not impossible that your application has specific needs that can’t be met by any of the built-in formats. To support a new syntax, come up with a syntax that resolves to new record type that implements the ExpandableRoutes protocol. expand-routes can be passed any number of routing specifications; these can be a mix of different data formats, plus the results of directly calling a definition function, such as table-routes. The routing table is the merged result of all of these. The expanded routing table is a wrapper object containing a :routes key, a seq of routing maps, with the following structure: (:routes (route/expand-routes #{{:app-name :example-app :scheme :https :host \"example.com\"} [\"/department/:id/employees\" :get [...] :route-name :org.example.app/employee-search :constraints {:name #\".+\" :order #\"(asc|desc)\"}]})) => ({:route-name :org.example.app/employee-search (1) :app-name :example-app (2) :path \"/department/:id/employees\" (3) :method :get (4) :scheme :https (5) :host \"example.com\" (6) :port 8080 (7) :interceptors [...] (8) :path-parts [\"department\" :id \"employees\"] (9) :path-params [:id] (10) :path-re #\"/\\Quser\\E/([^/]+)/(.+)\" (11) :path-constraints {:id #\"([^/]+)\"} :query-constraints {:name #\".+\" :order #\"(asc|desc)\"} }) 1 :route-name is required and must be a keyword; often a qualified keyword. The route name must be unique within the table. If omitted, the route name will come from the name of the last interceptor for the route. 2 Optional, used for documentation only. 3 Must start with a leading slash; terms with a leading : identify path parameters, or a leading * identifies a wildcard. 4 HTTP method to match against, or :any to match any HTTP method. 5 Optional for matching, must be :http or :https. 6 Optional for matching. 7 Optional for matching. 8 A vector of interceptors (converted via IntoInterceptor) 9 The parts of the path, as strings or keywords. 10 The path parameters, in the order they appear in the path. 11 A regular expression, generated from the path, that can match an incoming path and provide capture groups for path parameters. This ficticious example defines a URI that includes an id in the request path, but has also defined query parameters constraints. The :io.pedestal.http.route.specs/routing-table specification exhaustively defines what is allowed in a routing table. A path parameter will normally match a single name within the path, delimited by / characters; an alternate form is the wildcard, which starts with * and is only allowed at the end of the path: [\"/accounts/*ids\" :get …​] would provide a path parameter named :ids, and will contain anything on the URL after /accounts/, including any slashes. A path parameter must match at least one term, so a URL of just /accounts or /accounts/ would not match the route. Pedestal includes several routing algorithms; this reflects not only the evolution of the Pedestal library, but also allows for different trade-offs in the algorithm used by each Router. In rare cases, an application can provide its own router rather than use one of Pedestal’s. When configuring Pedestal using a connector map, the :router key (which defaults to :sawtooth) is the name of a built-in router constructor function: Keyword Router Performance :sawtooth (default router) Sawtooth High performance, better conflict resolution, reports conflicts :map-tree Map Tree Very fast :prefix-tree Prefix Tree High performance, space efficient :linear-search Linear Search Lowest performance Alternately, the :router key may be a application-provided router constructor function. The function router is where it all c
1omes together; this function is passed the routing table and the router type (that is, the value for the :router key in the connection map); from that it creates the routing function, and then, at the end, creates an interceptor that performs routing, which it returns. During request execution, on a successful routing, the following keys are added in the context map: Key / Key Path Value :route The verbose route map [:request :path-params] Path parameters extracted from the request path In addition, additional interceptors, specific to the route, will have been scheduled for execution via the enqueue function. On failure, when the router does not match any route, the context key :route is set to nil. 1. But still old - the table format dates back to 2016","title":"Routing Quick Reference","component":"pedestal","version":"0.8","name":"routing-quick-reference","url":"/pedestal/0.8/reference/routing-quick-reference.html","titles":[{"text":"Library","hash":"_library","id":1},{"text":"Route Specifications vs. Routing Functions vs. Routing Interceptor","hash":"_route_specifications_vs_routing_functions_vs_routing_interceptor","id":2},{"text":"Route Specifications","hash":"_route_specifications","id":3},{"text":"Routing Table","hash":"routing-table","id":4},{"text":"Built-in Routers","hash":"builtin","id":5},{"text":"Routing Interceptor","hash":"_routing_interceptor","id":6}]},"53":{"id":53,"text":"Provide a router that can detect and report route conflicts. Sawtooth is similar to Prefix Tree in how it generally operates, and is nearly as fast — within 5 to 10% of prefix-tree in benchmarks, and on the order of a micro- (not milli-) second to route a request. Further, when the routing table consists only of static paths (that is, no path parameters), Sawtooth has performance nearly as fast as Map Tree Router (a fraction of a micro-second to route a request). Sawtooth prioritizes the routes in the routing table. A route path consists of terms; either literal strings, or path parameters, or the wild path parameter. Generally speaking, a path with literal terms will be matched before a path with path parameters, and wild path parameter is considered last. Prefix Tree Router is less explicit on how it handle potential conflicts, and prefers path parameters over literal terms, the exact opposite of Sawtooth. Sawtooth’s distinguishing characteristic is that it will, at startup, write (to standard error) a report describing any conflicting routes. This gives you, as the developer, feedback about routing problems. Sawtooth is the default router; it is the default for the :router key in the connector map. If you prefer to be explicit, set the value to :sawtooth. The behavior of Sawtooth is not defined when there are route conflicts; The older prefix-tree router allows for route conflicts between static paths and those with path parameters, and silently prefers the path parameters routes over the static routes. Like the prefix-tree and map-tree routers, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Sawtooth’s implementation is based on treating the path as a sequence of terms; each term may match a literal value in that position, shared by one or more routers, or may be a path parameter. This leads to sets of routes that match the same initial term. Sawtooth always considers the literal term matches first. For example, consider the following route paths: /user/:id /user/:id/profile /user/search /blog/:id None of these routes are in conflict. If the request path is /user/search it will always match the third route. If the request path is /user/12487 is will match the first route. If the request path is /user/12487/profile, Sawtooth will match the second route - because routes that do not contain the wild-card path parameter must match the exact number of terms. In terms of operation, Sawtooth will match the first term (say \"user\"), and will only consider the first three routes, ignoring the fourth. It is then tasked with matching the request against the literal term search (third route), or it will match a term against :id (first route), or match a term followed by the literal term profile (second route). It’s all about subdivide and conquer. Alternately, if the request path started with \"/blog\", only the fourth route would be considered. Sawtooth is also adaptive to the kinds of routes being matched; primarily, if a term leads to a set of routes that are literal only (no path parameters), that subset of the tree will be matched the way the Map Tree Router operates, which is much faster. Routes can define a matching hostname, port, scheme, or request method. Sawtooth effectively subdivides the overall set of routes based on these values (including the common case where a route responds for any port, any request method, etc.) Once past these broadly applied filters, Sawtooth spends the bulk of its execution time matching the request path against the various routes' paths. Pedestal PR #868","title":"Sawtooth Router","component":"pede
1stal","version":"0.8","name":"sawtooth-router","url":"/pedestal/0.8/reference/sawtooth-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"54":{"id":54,"text":"The Pedestal service library includes support for Server-sent events (SSE). The SSE protocol defines a mechanism for sending event notifications from a server to a client using a form of long polling. However, unlike conventional long polling, SSE does not send each event as a separate response, with an expectation that the client will make a new request in between each one. Rather, SSE sends all its events as part of a single response stream. The stream is kept alive over time by sending events and/or periodic heart-beat data. In the event that the stream is closed for some reason, the client can send a request to re-open it and events notifications can continue. All modern browsers have built in support for SSE via the EventSource API. To define an endpoint that will send events, define a route with an interceptor that invokes start-stream from its :enter callback. start-stream requires a \"ready function.\" The ready function will be called later, when Pedestal has prepared the HTTP response and informed the client that an SSE stream is starting. start-stream sets up the following conditions: Sends HTTP response headers to tell the client that an event stream is starting Initiates a timed heartbeat to keep the connection alive After that, it will call the ready function with two arguments: a core.async channel used to publish events to the client, and the current interceptor context. The ready function may put events into the channel to send them to the client. Events are maps with keys :name, :data, and :id. All values should be strings (but will be converted to strings via str if not). The :name key allows a single SSE event stream to serve different purposes; the client can use the name to decide how to interpret and act on the event data. The :id is passed from the server to the client, and is intended to facilite tracing. Only the :data key is required. Alternately, the event may be a single value, and not a map; in this case, the value is the data of the event; in this case, the event will only be data - no name or id. When the data, converted to a string, consists of multiple lines, Pedestal will send an event with multiple data values. This is per the SSE specification, and the data will be reassembled to a single string inside the client. When the ready function has finished sending events, it should close the channel. Pedestal will then clean up the connection. If a client closes its connection, Pedestal will close the event channel. The next time the ready function tries to put a message into the event channel, the put call (>!, >!!, or put!) will return false. The ready function must detect this and clean up any resources it allocated. Here is an example that shows how an SSE event stream can be used. (ns org.example.sse-routes (:require [clojure.core.async :refer [>!! close!] [io.pedestal.http.sse :as sse] [io.pedestal.interceptor :refer [interceptor]]])) (defn on-stream-ready [event-chan _context] (dotimes [i 20] (>!! event-chan {:name \"countdown\" :data i}) (Thread/sleep 1000)) (close! event-chan)) (def events-interceptor (interceptor {:name ::events :enter (fn [context] (sse/start-stream on-stream-ready context))})) (def route-table #{[\"/events\" :get events-interceptor]})","title":"Server-Sent Events","component":"pedestal","version":"0.8","name":"server-sent-events","url":"/pedestal/0.8/reference/server-sent-events.html","titles":[{"text":"Making an SSE Interceptor","hash":"_making_an_sse_interceptor","id":1},{"text":"Request Processing","hash":"_request_processing","id":2},{"text":"Ready Function","hash":"_ready_function","id":3},{"text":"Example","hash":"_example","id":4}]},"55":{"id":55,"text":"The servlet interceptor [1] is the bridge between the Java Servlet API and Pedestal’s interceptor chain. It is created when an application calls create-bridge which is turn calls calls http-interceptor-service-fn. This results in a service function that accepts the servlet, servlet request and servlet response 
1(as defined by the Servlet API) and executes an interceptor chain, as a chain provider, to handle an incoming HTTP request. The service function performs the following tasks: Sets up the context map and request map Executes the interceptor queue (:enter, then :leave) Catches any exceptions that aren’t handled by Error Handling within the interceptors Writes the final response, using the response map Part of this work is accomplished by adding new keys to the default context map; beyond that, additional interceptors are prepended: The stylobate interceptor primarily handles otherwise uncaught unhandled exceptions that occur during interceptor chain execution. Responsible for converting the :response key in the context, when present, into a response delivered to the client; this may include async streaming. In very rare cases, different interceptors may provide different parts of response. Ultimately, the response must be a valid Ring response, but it is not uncommon for one interceptor to, say, rewrite the :body, and another interceptor to set up the Content-Type header. If your application requires this, be very careful about early termination. Put the initial value into the response map in the last :enter function, then use the :leave functions to refine that value. Put the initial value into the context under a different key and refine that value in either :enter or :leave functions. When the response is complete, transfer the response map to the :response key. 1. Poorly named, for historical reasons, as it is neither a servlet nor an interceptor, but actually the bridge between the two.","title":"Servlet Interceptor","component":"pedestal","version":"0.8","name":"servlet-interceptor","url":"/pedestal/0.8/reference/servlet-interceptor.html","titles":[{"text":":io.pedestal.http.impl.servlet-interceptor/stylobate","hash":"_io_pedestal_http_impl_servlet_interceptorstylobate","id":1},{"text":":io.pedestal.http.impl.servlet-interceptor/ring-response","hash":"_io_pedestal_http_impl_servlet_interceptorring_response","id":2},{"text":"Partial Responses","hash":"_partial_responses","id":3}]},"56":{"id":56,"text":"Limited parts of Pedestal are described using Clojure specs. This includes the structure of the connector map, and the various kinds of route specifications. Use of spec is entirely optional; specs are confined to their own namespaces which are not explicitly loaded by any of Pedestal’s other namespaces. You can, in your own application’s tests, load these namespaces and instrument functions as appropriate, using Clojure’s built-in instrumention and testing support. Spec namespaces: io.pedestal.connector.specs io.pedestal.http-kit.specs io.pedestal.http.impl.servlet-interceptor.specs io.pedestal.http.jetty.specs io.pedestal.http.specs io.pedestal.interceptor.specs io.pedestal.route.specs io.pedestal.websocket.specs","title":"Specs","component":"pedestal","version":"0.8","name":"specs","url":"/pedestal/0.8/reference/specs.html","titles":[]},"57":{"id":57,"text":"In some cases, you may want to stream large responses back to clients. Streaming uses memory efficiently and can allow you to return a response larger than the service’s memory. It also allows a client to start consuming data as quickly as possible. Body Type Streamed? Async? Byte array No No String No No Clojure collection No No Function Yes No File Yes No InputStream Yes No ReadableByteChannel Yes Yes ByteBuffer Yes Yes core.async channel Yes Yes Async responses use non-blocking I/O. Not all containers support async responses. When the body is a function, the servlet-interceptor calls that function with a single argument: a jakarta.servlet.ServletOutputStream. The response status code and headers will already be written to the stream before calling the function. The function should close the stream when it is done. The function’s return value is ignored. The function may run as long as it needs. This will occupy a thread, so consider using a core.async go or thread block. A collection will be rendered into text via clojure.core/pr. This emits a valid EDN encoding of the data. The entire collection will be emitted. This means lazy sequences will be fully realized. Rendering collections is subject to *print-length*, *print-level*, and all other variables that affect clojure.core/pr. When the response body is a channel, every message read from the channel will be sent to the client as it is produced. If the client disconnects, the channel will be closed. This is operating at a very low level, as the interceptor pipeline has already completed. In a traditional request, interceptors are resonsible for encoding, such as convert
1ing EDN data to JSON. When supplying a channel, it is the process putting values into the channel that is responsible. Here are some examples of potentially large values that you might want to stream back to clients: the contents of a lazy sequence a file or resource stored on disk a byte stream retrieved from some service, e.g., an image on S3","title":"Streaming Responses","component":"pedestal","version":"0.8","name":"streaming","url":"/pedestal/0.8/reference/streaming.html","titles":[{"text":"Using a Function as the Response","hash":"_using_a_function_as_the_response","id":1},{"text":"Using a Collection as the Response","hash":"_using_a_collection_as_the_response","id":2},{"text":"Using a core.async Channel as the Response","hash":"_using_a_core_async_channel_as_the_response","id":3},{"text":"Uses","hash":"_uses","id":4}]},"58":{"id":58,"text":"Table routes may include an options map to provide defaults for all routes within; this can either be the first argument to table-routes, or it can be an option map mixed in with the routes (each route is a vector) footnote:[This makes sense in terms of converting a set directly into table routes). The keys :app-name, :host, :port, and :schema set defaults for routes that do not specify the corresponding value. The :verbs key may be a set of keywords; these are the keywords allowed for routes within the table. This is typically used when verb smuggling. The :interceptors option key is a seq of interceptors; these are prepended to any interceptors defined by routes in the table. Path string Verb. Typically one of :any, :get, :put, :post, :delete, :patch, :options, :head Handler or vector of interceptors (Optional) Route name clause (Optional) Constraint clause (ns myapp.service (:require [io.pedestal.http.route.definition.table :as table])) (def application-routes (table/table-routes {:host \"example.com\" :scheme :https} [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, ])) The specs table-options and table-routes define the arguments to table-routes. (ns myapp.service (:require [io.pedestal.http.route :as route])) (def application-routes (route/expand-routes #{{:host \"example.com\" :scheme :https} [\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, })) The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then route order matters. To maintain order during route evaluation, use the Linear Search Router and expand your routes explicitly by passing them to the table-routes function using a vector as the top-level collection instead of a set. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. By default, The verb must be one of the keywords in :any, :get, :put, :post, :delete, :patch, :options, or :head. However, you can override the allowed verbs by including an options map with the keyword :verb in your route definition. The value of :verb is a set of verb keywords you wish to support in the routes. It is through this facility that you can specify custom verbs. When using custom verbs, you will want to configure your interceptors to support verb smuggling. (def routes #{{:verbs #{:get :stats :version}} [\"/\" :get (conj common-interceptors `home-page)] [\"/\" :stats (conj common-interceptors `stats)] [\"/\" :version (conj common-interceptors `version)]}) :any is a wildcard verb. During request routing, :any will match all requests for any verb. The \"handler position\" can be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List (of the above) The options provided to table-routes may include an :interceptors key; this is a seq of interceptors that is prefixed to any interceptors provided by the route. A route name clause is the keyword :route-name followed by a keyword. Route names must be unique. Route name is required unless route name can be deduced from the handler, or final interceptor. A constraint clause is the keyword :constraints followed by a map. Support for constraints exists today only for backwards compatibility; use of path parameter and query parameter constraints is no longer advised.","title":"Table Syntax","component":"pede
1stal","version":"0.8","name":"table-syntax","url":"/pedestal/0.8/reference/table-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Table Options","hash":"_table_options","id":2},{"text":"Route Vector Formats","hash":"_route_vector_formats","id":3},{"text":"Syntax for table-routes","hash":"_syntax_for_table_routes","id":4},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":5},{"text":"Detailed Reference","hash":"_detailed_reference","id":6},{"text":"Path string","hash":"_path_string","id":7},{"text":"HTTP Verb","hash":"_http_verb","id":8},{"text":"Syntax for specifying verbs","hash":"_syntax_for_specifying_verbs","id":9},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":10},{"text":"Route Name Clause","hash":"_route_name_clause","id":11},{"text":"Constraint Clause","hash":"_constraint_clause","id":12}]},"59":{"id":59,"text":"As its name implies, the terse syntax provides a compact approach for describing routes. When the argument to expand-routes is a vector, it will be expanded using the terse syntax. In essense, the terse syntax is nested maps; the nesting supplies the structure of the path and each nested map contains keyword keys to identify handlers (by method), or string keys to describe further nested paths. This is all a bit complex and hard to describe, thus the move to table routes. Unlike the table syntax, any verb can be specified without verb whitelisting. A route table is a vector of nested vectors. Top-level vector(s) are termed application vectors. Nested vectors are termed route vectors. The spec terse-routes defines the terse table format. There’s an intermediate step hidden in the terse syntax; the map format is quietly converted into the proper terse format; the map is keyed on path name and the value is a route description, which may define sub-routes. These are flattened into a non-nested sequence of routes. (Optional) A keyword identifying the application by name (Optional) A URL scheme (Optional) A host name (Optional) A port One or more nested route vectors. A path segment (must begin with a slash) A verb map (Optional) An interceptor vector with ^:interceptors metadata [1], [2] (Optional) A constraints map with ^:constraints metadata [1], [2] Zero or more child route vectors Support for constraints exists today only for backwards compatibility; use of path parameter and query parameter constraints is no longer advised. (ns myapp.service (:require [io.pedestal.http.route :as route])) (def routes [[:hello-world :http [\"/order\" {:get `list-orders (1) :post [:post-without-id `create-order]} (2) [\"/:id\" (3) ^:interceptors [load-order-from-db] ^:constraints {:id #\"[0-9]+\"} {:get `view-order :put `update-order :post [:post-by-id `create-order]}]]]]) 1 Pedestal will convert the symbol myapp.service/list-orders to a keyword and use that as the route name 2 The route name will be :post-without-id 3 Nested routes inherit a path prefix from the containing route; this will match on /order/:id. The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then use the Linear Search Router. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. The verb map contains verb to handler mappings. Each verb in the verb map defines a route. If a handler is referenced by multiple routes, a route name must be specified. The route name is a keyword which occurs in the first position of an interceptor vector in the verb map. Unlike the Table Route syntax, custom verbs do not need to be white listed. However, :any is a wildcard verb. During request routing, :any will match all requests. The \"handler position\" be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List 1. Can also be specified before the verb map. 2. Applies to the current route and any child routes.","title":"Terse Syntax","component":"pede
1stal","version":"0.8","name":"terse-syntax","url":"/pedestal/0.8/reference/terse-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Application Vector Format","hash":"_application_vector_format","id":2},{"text":"Route Vector Format","hash":"_route_vector_format","id":3},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":4},{"text":"Detailed Reference","hash":"_detailed_reference","id":5},{"text":"Path string","hash":"_path_string","id":6},{"text":"Verb map","hash":"_verb_map","id":7},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":8}]},"60":{"id":60,"text":"Tomcat 9 was previously supported in Pedestal 0.6; this support was removed in Pedestal 0.7.","title":"Tomcat","component":"pedestal","version":"0.8","name":"tomcat","url":"/pedestal/0.8/reference/tomcat.html","titles":[]},"61":{"id":61,"text":"It is a good practice to separate core business logic from handler, and more generally, interceptor code. This separation of concerns has many benefits, including facilitating testing at the interceptor, interceptor chain and end-to-end response generation levels. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [ctx] (assoc ctx :widget {:id 1 :title \"foobar\"} ))})) We can test it either directly: (let [test-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (test-fn {}))))) Or using the interceptor chain execute function: (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) We can extend this approach to test coordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [ctx] (if-let [widget (:widget ctx)] (assoc ctx :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc ctx :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper response-for utility function to facilitate testing of services without having to spin up an http server. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for helper function is specific to servlet-based services and simulates the receipt of a servlet request and creation of a servlet response - but does so without the overhead of an actual HTTP connection, which ensures your tests are fast. `response-for takes as arguments a service function, verb and url as required parameters; headers and a request body are optional. Let us examine those parameters in more detail. The service function refers to the :io.pedestal.http/service-fn key value in the service map during service initialization. The verb is an HTTP method represented as a keyword (i.e., :get, :post, :delete, etc…​). The url is a relative url represented as a string. The headers and request body inputs are optional and specified with the :headers and :body keys, respectively. Before using response-for in tests, a test service must be created. This is done by calling io.pedestal.http/create-servlet with the service map as a parameter. The resulting service-fn can be bound to a var and used in subsequent tests. (def service (:io.pedestal.http/service-fn (io.pedestal.http/create-servlet service-map))) The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for service :get \"/hello\")))) The response returned by response-for contains :status, :body and :header keys. The value of the :headers key is a map with stringified keys. Testing header values would look something like this: (is (= \"text/plain\" (get-in (response-for service :get \"/hello\") [:headers \"Content-Type\"]))) POST’ing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to supp
1ort request payload parsing. Therefore, you will need to set the Content-Type header of the test request to the appropriate value based on the payload format of the request body. (is (= 200 (:status (response-for service :post \"/foo\" :headers {\"Content-Type\" \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\")))) (is (= 200 (:status (response-for service :post \"/foo-login\" :headers {\"Content-Type\" \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\")))) Notice how Content-Type is a string. Pedestal provides a utility, url-for-routes. This is passed the expanded routes for your application, and returns a function that will generate a URL for a specific route; primarily by specifying the route name, but also other factors. It is recommended to create a url-for test helper based on url-for-routes, and use that helper to create the relative urls for your tests. This allows you to refer to routes by name as opposed to hard-coded paths. Route names are typically more stable. Aside from that, it makes it easy to test routes which use query or path parameters. Here’s an example: (require '[io.pedestal.http.route :as http.routes]) (def routes #{[\"/user/:id/items\" :post `user-items]} ; (1) (def url-for (http.routes/url-for-routes (http.routes/expand-routes routes)))) (is (= 200 (:status (response-for service :get (url-for ::user-items ;(2) :path-params {:id 1} :query-params {:sort \"ASC\"}))))) 1 The namespace qualified symbol for user-items will be the default route name (as a keyword) 2 The route name is used to get the URL back Nothing special needs to be done when testing routes which include async interactions. The response-for helper forces asynchronous request processing to synchronous processing for test purposes.","title":"Unit testing","component":"pedestal","version":"0.8","name":"unit-testing","url":"/pedestal/0.8/reference/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":2},{"text":"Usage","hash":"_usage","id":3},{"text":"Testing GET","hash":"_testing_get","id":4},{"text":"Testing POST","hash":"_testing_post","id":5},{"text":"Constructing route URLs","hash":"_constructing_route_urls","id":6},{"text":"Testing Async interactions","hash":"_testing_async_interactions","id":7}]},"62":{"id":62,"text":"The HTTP specification defines a short list of possible request methods: GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH These request methods, also informally known as verbs, were intended to cover the gamut of client/server interactions. At the same time, vanilla HTTP links and forms can only make use of two of these: GET for links, and POST for forms. This can be a problem, as a link may serve a different function (such as delete), and a form submission may be a POST to create a entity, or a PUT to update an entity. Of course, in modern web applications, this is less important, as all the critical interactions will be driven from client-side code or via web sockets. Verb smuggling is a compromise; it allows ordinary HTTP links and forms, but defines a query parameter that \"smuggles\" in the true request method. The method-param interceptor extracts that query parameter value, converts it to a keyword, and updates the request map :request-method key. By default, the query parameter name is _method, but this can be configured when invoking the method-param function.","title":"Verb Smuggling","component":"pedestal","version":"0.8","name":"verb-smuggling","url":"/pedestal/0.8/reference/verb-smuggling.html","titles":[]},"63":{"id":63,"text":"The verbose syntax is the oldest routing specification format used in Pedestal and should not generally be used, though it may be of use when generating a route specification from code. It is very close in format to the expanded routing table. Verbose syntax is composed of a sequence of maps; each map defines a single route. {:app-name <string> (1) :scheme <:http or :https> :host <string>
1 :port <number> :constraints <map> (2) :interceptors <vector> (3) :path <string> (4) :verbs <map> (5) :children <vector> (6) } 1 :app-name, :schema, :host, and :port are optional. They define the values for this route and any children. 2 :constraints is a map of keyword (matching a path or query parameter) to a regular expression; this is merged into the containing routes constraints 3 :interceptors is a vector ???; this is appended to the containing route’s interceptors 4 :path is required, and must start with a slash; this is appended to the containing routes path 5 :verbs is a mapping from keyword (:get, :post, etc.) to handler 6 :children is an optional list of routes nested within this route Support for constraints exists today only for backwards compatibility; use of path parameter and query parameter constraints is no longer advised. Handlers, the values in the :verbs map, can be a symbol or a map. A symbol will be resolved to a Var; the value in the Var will be converted to an Interceptor record. In cases where the interceptor is anonymous (has no :name), the symbol is converted to a keyword and used as the :name. The :name of the interceptor becomes the name of the route. When a handler is a map, it has the following keys: {:route-name <string> (1) :handler <...> (2) :interceptors <vector> (3) } 1 :route-name is optional and will be derived from the handler. 2 The handler may be either a symbol or an interceptor. 3 :interceptors is optional and identifies interceptors appended to the containing route’s interceptors Ultimately, the handler (converted to an interceptor) is appended to the list of interceptors.","title":"Verbose Syntax","component":"pedestal","version":"0.8","name":"verbose-syntax","url":"/pedestal/0.8/reference/verbose-syntax.html","titles":[]},"64":{"id":64,"text":"WebSockets are an asynchronous and bidirectional connection between a client and a server. Once a Websocket connection is established, either party may transmit messages to the other party - this unleashes truly unbounded possibilities for creating dynamic, real-time, and asynchronous applications. A WebSocket connection starts with the client (the web browser) sending an HTTP or HTTPS request; this request includes a special header to indicate that it is intended to upgrade the request to a WebSocket connection; it is always a GET request. In the handling of this kind of request, there’s a point where the request is upgraded to a WebSocket connection. There is no response to this request. Instead, both the client and the server may begin transmitting and receiving text and binary messages until the connection is closed by either party. In Java, WebSocket endpoints are POJO objects with a @ClientEndpoint class annotation. Such endpoints will annotate specific methods to mark them as callbacks for asynchronous events. For example, to handle initial setup when a connection is first opened, the @OnOpen annotation can be applied. The Session object passed to the @OnOpen callback can be retained by the application code, and later used to transmit text and binary messages to the client. Other annotations cover receiving text or binary messages from the client. POJOs and annotations make sense in Java, but do not fit well with Clojure, so Pedestal redefines this in terms of maps and Clojure functions as callbacks. Under Pedestal, a WebSocket request is routed like any other request, but the final interceptor must invoke upgrade-request-to-websocket instead of attaching a response. In many cases, the final interceptor is created via websocket-interceptor. Because a WebSocket upgrade is always initiated by the client as an HTTP GET request, the route must be defined with :get as the HTTP method: [\"/ws/chat\" :get my-websocket-interceptor] A WebSocket upgrade request has no response. If your application includes interceptors that examine or modify the :response key of the context map (in the :leave or :error phase), they may need to be adjusted for an entirely missing :response key. If some interceptor does attach a response key, it will be ignored once the request has been upgraded to a WebSocket request. The behavior of the endpoint is defined in terms of a websocket options which provides configuration for the WebSocket, as well as callbacks for specific events in the WebSocket lifecyle. Table 1. Callbacks Key Signature Description :on-open (WebSocketChannel, Map) → Object Invoked when the client first opens a connection. Passed the channel and the request map, returns the process object. :on-close (WebSocketChannel, Object, Keyword) → nil Invoked when the socket is closed, allowing any resources to be freed. The callback is passed a keyword indicating why the channel was closed. :on-text (WebSocketChannel, Object, String) → nil Callback: passed a received text message from the client, as a single String. :on-binary (WebSocketChannel, Object, ByteBuffer) → nil Callback: passed a received binary message, as a single ByteBuffer. The following option is supported by all network connectors: Table 2. Universal Connection Options Key Type Description :subprotocols Vector of String An optional list of WebSocket subprotocols supported by the endpoint. During the upgrade handshake, the client and server negotiate which subprotocol to use; the server selects the first entry in :subprotocols that the client also supports and echoes it in the Sec-WebSocket-Protocol response header. Supported by the Jetty and Http-Kit connectors. Additional options may be supported by specific network connectors. Unrecognized keys are silently ignored. Table 3. Jetty Connection Options Key Type Description :configure (ServerEndpointConfig.Builder) → nil An optional callback for low-level configuration of the endpoint. Passed the jakarta.websocket.server.
1ServerEndpointConfig.Builder before the connection is established. :max-idle-timeout long Maximum time in milliseconds the connection may be idle (no messages sent or received) before the server closes it. :max-binary-message-buffer-size int Maximum size in bytes of a binary message that the server will buffer. Messages exceeding this limit cause the connection to be closed. :max-text-message-buffer-size int Maximum size in bytes of a text message that the server will buffer. Messages exceeding this limit cause the connection to be closed. When Jetty enforces a limit (idle timeout or message size), it closes the underlying TCP connection directly rather than performing a WebSocket close handshake. As a result, the :on-close callback receives :abnormal (WebSocket close code 1006) rather than a more specific reason code. Essentially, the :on-open callback is invoked when the client initiates the connection. It is intended that, when the client connects, some form of server-side process will be initiated capable of transmitting messages to the client asynchronously. It is the responsibility of the :on-open callback to create such a process, and to shut it down from an :on-close callback. The :on-text and :on-binary callbacks are invoked when a text or binary message from the client is received. Whatever value is returned from the :on-open callback is retained, and passed as the second argument to the :on-close, :on-error, :on-text, and :on-binary callbacks. This can be a single value, such as a core.async channel, or a map, or whatever your application needs it to be. When the container passes a ByteBuffer to the :on-binary callback it is important that any reference to the ByteBuffer ends when the callback returns. The container will likely clear and reuse the ByteBuffer after executing your callback. Get the necessary data out of the ByteBuffer, or make a deep copy of it, if your code needs the ByteBuffer’s content past the end of the callback. Don’t rely on .asReadOnlyBuffer; that makes a shallow copy — this can lead to truly awful bugs, because the underlying byte array or direct memory is shared and mutable. The WebSocketChannel that is passed to the :on-open callback contains further methods that are used to transmit text or binary messages to the client. Pedestal provides utility functions to make it easier to transmit messages, in the form of a core.async channel. The function start-ws-connection is passed the WebSocketChannel and an options map, and sets up a transmission loop, driven by a core.async channel, which is returned. The transmission loop receives values from the returned channel, and transmits those values to the client. A String is sent as a text message A ByteBuffer is sent as a binary message A vector is used to monitor the result, asynchronously: The first element is the value to transmit (String or ByteBuffer) The second element is a channel that will convey the transmission result The result is either :success, or an Exception (if unable to transmit the message) Closing the channel will shut down the transmission loop, and close the underlying web socket connection. As currently implemented, the transmission of messages is not fully asynchronous: the processing loop waits for each transmission to complete before it advances to the next value in the channel. The Jakarta WebSocket API supports receiving partial messages, useful when streaming very large objects. The :on-text and :on-binary callbacks only support whole objects. Likewise, the underlying APIs do provide support for streaming transmissions to the client, but the built-in approach to transmitting messages does not. In Pedestal 0.7, WebSockets are specified using the :io.pedestal.http/websockets key of the service map. This approach is supported in Pedestal 0.8, but is deprecated, and may be removed in a later release entirely. WebSocket requests are routed entirely outside of the interceptor chain, so they do not benefit from logging, exception handling, telemetry, or any other application-specific behaviors provided by the interceptor chain. In the service map, the :io.pedestal.http/websockets key maps string routes to endpoint maps. There is no facility for using path parameters in these requests.","title":"WebSockets","component":"pede
1stal","version":"0.8","name":"websockets","url":"/pedestal/0.8/reference/websockets.html","titles":[{"text":"WebSocket Lifecycle","hash":"_websocket_lifecycle","id":1},{"text":"WebSockets in Java","hash":"_websockets_in_java","id":2},{"text":"WebSockets in Pedestal","hash":"_websockets_in_pedestal","id":3},{"text":"WebSocket Options","hash":"_websocket_options","id":4},{"text":"Connection Options","hash":"_connection_options","id":5},{"text":"Jetty-Specific Options","hash":"_jetty_specific_options","id":6},{"text":"Transmitting Messages","hash":"_transmitting_messages","id":7},{"text":"Limitiations","hash":"_limitiations","id":8},{"text":"Upgrading from Pedestal 0.7","hash":"upgrade","id":9}]},"65":{"id":65,"text":"All the code is in one repository, with subprojects for the different modules. Just clone https://github.com/pedestal/pedestal and you are good to go. If you’re working on Pedestal itself, you can test everything From the tests directory, execute clj -X:test. Thanks for your interest in helping out with Pedestal! Let this document serve as your guide. (This is a copy of CONTRIBUTING.md in the main Pedestal repo. If you ever see a discrepancy, it’s probably because this document is out of date relative to that one.) If you’re looking for a task to work on, check out the primed label in our issues. Less defined tasks will be marked with the discuss label. Jump in here if you want to be a part of something big. Pedestal is the thinking person’s framework, so every contribution starts with some deep thought. Finished? Alright, your next step is to start a discussion. Create an issue to start a conversation. Tell us what you’re trying to accomplish and how you think you might do it. If all is well, we’ll probably give you the thumbs up to start developing. Of course, if you run into any straight-up bugs or weirdness feel free to skip the thinking (or at least too much of it) and immediately submit an issue. We have an issue template in place that will ask you some details about the platform you are running and how to reproduce the bug. (If you can reproduce it reliably. If not, go ahead and file the issue anyway so we can start looking at it.) Some of the usual stuff we’ll want to know: What happened? \"I manifested a being from the outer dimensions.\" What did you expect to happen? \"Hello, world.\" How can you reproduce it? \"I created a new Pedestal service with the template, then installed some code that Bob Howard gave me.\" What operating system and version are you using? e.g. \"OS X 10.8\" What version of Clojure, Java, and Leiningen or Boot are you using? e.g. \"Leiningen 2.5.2 on Java 1.8.0_u40 Java HotSpot™ 64-Bit Server VM\" What Pedestal version are you using? e.g. \"0.5.0\" or, for a SNAPSHOT: \"0.5.1-SNAPSHOT at d0cf2b4\" Even better, include a link to a gist or repository where we can jump straight to the problem. We love well-tested code. We won’t accept pull requests unless they’re either well tested or sufficiently trivial (such as simple docstring changes). All of our code is tested via GitHub actions, and any pull requests you submit will be too. Pedestal is broken up into several pieces. You’ll usually be working on just one of these pieces at a time, but you will want to test everything. Here is the workflow we recommend: Fork the repo and clone your fork. Create a branch for your feature/bugfix. Make your changes and add tests. Run clj -X:test from the tests directory. Commit, push, and submit a pull request. When it comes to code contributions there is one more thing we need from you: a signed contributor’s agreement. We know that a contributor’s agreement can be a pain, but we want everyone to be able to use Pedestal, including developers working on projects for very large companies. Many of these big organizations care a lot about the provenance of the code they use — that is they need to know where the code came from and who owns it. The contributor’s agreement simply puts down in writing what we think is the standard open source arrangement: Mostly it says that you are donating code that you wrote to the project. By submitting a signed contributor’s agreement, you are helping to ensure that your work will be available to the largest possible audience. It is an extra step, but there really is not much to executing the Pedestal contributor’s agreement: You just need to complete the following online agreement to assign copyright to Cognitect. Cognitect Contributor Agreement","title":"Contributing to Pedestal","component":"pede
1stal","version":"0.7","name":"contributing","url":"/pedestal/0.7/contributing.html","titles":[{"text":"Hacking on Pedestal","hash":"_hacking_on_pedestal","id":1},{"text":"Checkout Instructions","hash":"_checkout_instructions","id":2},{"text":"Testing Pedestal Itself","hash":"_testing_pedestal_itself","id":3},{"text":"Contributing to Pedestal","hash":"_contributing_to_pedestal","id":4},{"text":"Looking for work?","hash":"_looking_for_work","id":5},{"text":"New Features","hash":"_new_features","id":6},{"text":"Bugs","hash":"_bugs","id":7},{"text":"Tests","hash":"_tests","id":8},{"text":"Workflow","hash":"_workflow","id":9},{"text":"Contributor’s Agreement","hash":"_contributors_agreement","id":10}]},"66":{"id":66,"text":"Pedestal is a set of libraries that we use to build web services and applications. Pedestal runs in the back-end and can handle anything from tiny static web sites, to traditional page oriented applications, to dynamic single page applications utilizing server-sent events and WebSockets. Pedestal scales up with your needs. We wrote Pedestal to bring Clojure’s key attributes, Focus, Empowerment, and Simplicity, to the domain of Clojure web development. This documentation is for Pedestal version 0.7.2. Pedestal requires Clojure 1.10 or later, and works with Servlet API 5.0 and Java 11 and up. Pedestal runs where Java runs: Applications can be deployed as standalone Clojure applications, or as WAR files in a servlet container. Pedestal integrates with Open Telemetry to give you visibility into your running services. Pedestal automatically uses secure headers, enables cross site request forgery protection, and other best practices. It works with cross-origin resource sharing to allow secure front end applications. A simple Pedestal app fits into a few lines of Clojure; Pedestal includes a deps-new template for getting you started. When you need more power, it’s ready for you. Pedestal’s core interceptor model breaks request processing into small pieces that are simple, often free of side effects, and therefore easy to test; then lets you stack those pieces up to form your full application. Pedestal supports creating dynamic applications with server-sent events and WebSockets. Pedestal leverages Clojure’s extraordinary asynchronous capabilities and Java’s efficient NIO operations. Pedestal is built from components that connect via protocols, giving you the flexibility to swap out any part with something customized to your application.","title":"What is Pedestal?","component":"pedestal","version":"0.7","name":"index","url":"/pedestal/0.7/index.html","titles":[{"text":"Features","hash":"_features","id":1},{"text":"Ready for Production","hash":"_ready_for_production","id":2},{"text":"Secure By Default","hash":"_secure_by_default","id":3},{"text":"Easy Ramp Up","hash":"_easy_ramp_up","id":4},{"text":"Testable","hash":"_testable","id":5},{"text":"Streaming","hash":"_streaming","id":6},{"text":"Composable and Extensible","hash":"_composable_and_extensible","id":7}]},"67":{"id":67,"text":"In most cases, Pedestal can now emit a warning the first time a deprecated function, macro, or other bit of functionality is used. Example: WARNING: io.pedestal.interceptor.chain/execute-only is deprecated and may be removed in a future release Call stack: ... clojure.test/test-var -> clojure.test/test-var/fn -> io.pedestal.interceptor-test/fn -> io.pedestal.interceptor.chain/execute-only The warning is followed by the last few stack frames leading up to the deprecated function, to assist you in finding the code that needs to be changed. This output is printed to the console (standard error), and is not logged. The following sections are a non-exhaustive list of code and functionality deprecated in 0.7.0 that may be removed in 0.8.0 or a later release: Release 0.7.0 saw the introduction of the routes-from macro, a new and preferred way of supporting live code changes at the REPL. Previously, it was possible to convert a function call into an interceptor; the point of this was to defer invoking the function until when the route specification was converted to a router (which can happen on every request when in development mode); however, this relied on the use of eval, and is of no real utility given the addition of development mode and live REPL reloading improcements, and so has been deprecated. Normally, a function in an interceptor list is treated as a handler (rather than an interceptor). Alternately, a function with the :interceptor or :interceptorfn metadata would be invoked and expected to return an interceptor (or some other object that could be converted to an interceptor). This is termed a deferred interceptor and has also been deprecated. Handler functions are not deprecated, and are quite useful. The io.pedestal.http.request.lazy and io.pedestal.http.request.zerocopy namespaces have been deprecated; neither is used by Pedestal. The entire pedestal/pedestal.service-tools library has been deprecated. The execute-only function has been deprecated; it is not believed this function is used outside of Pedestal’s test suite. Removing it opens up some options for optimizing chain execution in a later release. Likewise, the newly added queue function replaces accessing the interceptor execution queue using the :io.pedestal.interceptor.chain/queue key; this will also allow future optimizations to chain execution. The namespace io.pedestal.interceptor.trace was deprecated along with many related functions and protocols in the io.pedestal.log namespace related to metrics and tracing; these have been replaced with a new library, pedestal.telemetry. The entire io.pedestal.interceptor.helpers n
1amespace was deprecated; this had been retained since 2016 for backwards compatibility.","title":"Deprecations","component":"pedestal","version":"0.7","name":"deprecations","url":"/pedestal/0.7/deprecations.html","titles":[{"text":"0.7.0","hash":"_0_7_0","id":1},{"text":"Interceptors","hash":"_interceptors","id":2},{"text":"Service","hash":"_service","id":3},{"text":"Service Tools","hash":"_service_tools","id":4},{"text":"Interceptor Chain","hash":"_interceptor_chain","id":5},{"text":"Tracing and Metrics","hash":"_tracing_and_metrics","id":6},{"text":"0.6.0","hash":"_0_6_0","id":7}]},"68":{"id":68,"text":"Nubank NA (\"Nubank NA,\" \"we,\" or \"us\") provides the website located at www.pedestal.io (the \"Website\"). We value and respect your privacy. This \"Privacy Policy\" demonstrates our commitment to your right of privacy and explains how we use, disclose and protect the Personal Information (as defined below) of users (\"you,\" \"User,\" or \"your\") of the Website. By visiting the Website, you expressly consent to the use and disclosure of your Personal Information as described below. If you do not agree with the terms set out in this Privacy Policy, please do not visit the Website. Personal information is data that can be used to identify or contact a single person (\"Personal Information\"). We will only collect or receive Personal Information when you voluntarily provide information to us, such as when you contact us, using the contact information provided in this Privacy Policy, as described in more detail below: Information You Voluntarily Choose to Provide The Website does not require you to submit any Personal Information to access or use it, however, you may contact us through email, using the email address provided in this Privacy Policy, and provide us with Personal Information over the course of the communication. You agree not to submit information that contain or reference, and understand and agree we have no obligations or liability with respect to: (i) information that can identify an individual in relation to any past, present, or future physical or mental health or condition, provision of health care, or payment for the provision of health care, including, but not limited to, diagnoses, treatment information, medical test results, and prescription information; and/or (ii) an individual’s race, ethnic origin, political opinions, religious or philosophical beliefs, genetic data, biometric data, sex life or sexual orientation. Without limiting the generality of the foregoing, you acknowledge in no event will Nubank NA be liable to you or any third party for any direct, indirect, incidental, lost profits, remote, cover, exemplary, consequential, special, or punitive damages, regardless of the foreseeability of such damages resulting from your submission of any such information. We use your Personal Information: - to provide the services or information you request; - to communicate with you regarding your use of the Website; - to protect our rights and the rights of our Website visitors; and - to protect the vital interests of the Company, you, or our other Website visitors (for example, in the event of an emergency). We do not use cookies on the Website. Nubank NA will not disclose your Personal Information to any third parties except: - to our professional advisers, accountants, insurers, lawyers and auditors on a confidential basis; - if Nubank NA or its assets are or may be acquired by a third party, the information may be provided to that third party and its advisors; - in exceptional circumstances, Nubank NA may be required or permitted by law to disclose Personal Information, for example where such disclosure is necessary to meet any applicable law, regulation, legal process or other legal obligation; detect, investigate and help prevent security, fraud or technical issues; and/or protect the rights, property or safety of Nubank NA, our employees or other users of the Website.; or - otherwise with your consent. Nubank NA does not sell your Personal Information. Nubank NA may disclose your Personal Information to Nubank NA’s parent company, affiliated legal entities, subsidiaries and any other businesses with whom we are under common corporate control (collectively the \"Affiliates\"). All of our Affiliates that receive your information from us will comply with the terms of this Privacy Policy with respect to their use and disclosure of such information. Nubank NA is committed to keeping your information secure. We endeavor to take all reasonable steps to keep secure any information that we hold about you, and to keep this information accurate and up to date. Your information is stored on secure servers that are protected in controlled facilities. Other than the sharing of information outlined in this Privacy Policy, personally identifiable information is not accessible by the public, and we require our employees and data processors to respect the confidentiality of any Personal Information. We do not direct our Website or services to children (usually considered to be under the age of 13, depending on the country where you reside). We also do not intentionally collect Personal Information from children through our Website. If you are the parent or guardian of a child and you believe that we have inadvertently received Personal Information about that child, please contact us as described 
1in the Contact Us section of this Privacy Policy and we will take reasonable steps to remove the information from our records. If at any time you want to request, update, correct or remove Personal Information, you are welcome to submit a request to [email protected]. We may ask you to verify your identity before we can act on your request. If you are aware of changes or inaccuracies in your Personal Information, you should inform us of such changes so that our records may be updated or corrected. We may reject requests that are unreasonably repetitive, require disproportionate technical effort (for example, developing a new system or fundamentally changing an existing practice), risk the privacy of others, or would be extremely impractical (for instance, requests concerning information residing on backup systems). Where we can provide information access and correction, we will do so, except where it would require a disproportionate effort. We aim to maintain our services in a manner that protects information from accidental or malicious destruction. Because of this, after you delete information from our services, we may not immediately delete residual copies from our active servers and may not remove information from our backup systems. Where consent is required for our use of your Personal Information as described herein, you have the right to withdraw or decline your consent and cease your use of the Website. If you decide to withdraw your consent, such withdrawal will not affect the lawfulness of processing based on consent before such withdrawal. California Civil Code Sec. 1798.100, et seq. (also known as the California Consumer Privacy Act of 2018) (\"CCPA\") provides certain rights to California residents regarding their Personal Information. A California resident has the right to request that we disclose certain information, including: (1) the categories of Personal Information we have collected about that California resident, (2) the categories of sources from which the Personal Information is collected, (3) the business or commercial purpose for collecting or selling the Personal Information, (4) the categories of third parties with whom Nubank NA shares Personal Information, and (5) the specific pieces of Personal Information we have collected about the resident. A California resident has the right to request that we delete his/her Personal Information. Finally, a California resident has the right not to be discriminated against for exercising his/her privacy rights under the CCPA. You can request such Personal Information and change your Personal Information by emailing us at [email protected]. Pursuant to California Civil Code Section 1789.3, California users are entitled to the following consumer rights notice: California residents may reach the Compliant Assistance Unit of the Division of Consumer Services for the California Department of Consumer Affairs by mail at 1625 North Market Blvd., Sacramento, CA 95834, or by telephone at (916) 445-1254 or (800) 952-5210. The Website contains links to other websites. These third-party websites have separate and independent privacy policies. The privacy policies and applicable terms of use of the third-party websites will govern your interaction with such third-party websites. We encourage you to review the privacy policy of linked sites, as Nubank NA is not responsible or liable for the practices, content, and/or privacy policies of those third-party websites. Nonetheless, we seek to protect the integrity of our Website and welcome any feedback about these third-party websites. We will retain your Personal Information only for as long as reasonably necessary for the purposes set out above, considering criteria such as applicable rules on statute of limitations, legal requirements and the duration of your use of the Website and receipt of our services. This section of the Privacy Policy applies only if you use the Website or services covered by this Privacy Policy from a country that is a Member State of the European Union and supplements the information in this Privacy Policy. We process information defined as personal data under applicable data protection law (\"Personal Data\") if provided by you and/or for the purposes set out in this Privacy Policy, as described above. - Legal Basis for Processing Personal Data: Our legal basis to process Personal Data, such as for the purposes listed above in the \"How Do We Use Your Personal Information?\" section, includes processing that is: - necessary to comply with legal requirements (for example, to comply with applicable accounting rules and to make mandatory disclosures to law enforcement); - protection of the vital interests of a natural person (for example, in the event of an emergency); - necessary for our legitimate interests (for example, to manage our relationship with you and to improve the Website and our services); and - based on your consent (for example, to communicate with you about the Website and services, and to provide you with any information that you may request), which may subsequently be withdrawn at any time (by contacting us at [email protected]) without affecting the lawfulness of processing based on consent before its withdrawal. In some instances, you may be required to provide us with Personal Data for processing as de
1scribed above, in order for us to be able to provide you all of our services, and for you to use all the features of the Website. Please be aware your Personal Data may be collected, managed, transferred to, processed, and stored or accessed in a country different other than your country of residence. In addition, we may make other disclosures of your Personal Data outside of your country of residence, for example, in the event we receive a legal or regulatory request from a foreign law enforcement body. We will always take steps designed to ensure any transfer of such information outside your country of residence is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. Data protection laws in any such country may be different from those laws of your country of residence. By visiting the Website and accepting this Privacy Policy, you consent to the transfer of your information, including Personal Data, to such country(ies) as set forth in this Privacy Policy. From time to time, Personal Information we collect from data subjects in the European Economic Area or Switzerland (\"EEA or Switzerland\") may be transferred to, stored, processed or accessed by us outside of the EEA or Switzerland, for example, the United States. We will always take steps to ensure any transfer of such information outside the EEA or Switzerland is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. If you would like to find out more about these safeguards in respect of processing your Personal Data and the means by which you can obtain a copy of them, please contact us at [email protected]. Your Rights: In addition to the rights to access, amend or delete your Personal Data as set out above, you may be entitled, in accordance with applicable law, to object to or request the restriction of processing of your Personal Data, and to request portability of your own Personal Data. Requests should be submitted to [email protected]. If you consider that our processing of your Personal Data infringes applicable law, you may lodge a complaint with a competent supervisory authority, which may be the authority in your Member State of residence or work. Nubank NA’s Website and activities may continue to grow and change. Because of this, from time to time, our Privacy Policy will be reviewed and revised. You should check this page occasionally to ensure you are familiar with those changes. Whenever we change our Privacy Policy we will post an updated version on our Website, including the last date of revision. This Privacy Policy was last revised on August 25, 2021. If you have any questions about how we handle your Personal Information and protect your privacy, please feel free to contact us at [email protected] or call us at 919.283.2748. You may also mail requests to: Nubank NA 101 W. Chapel Hill Street., Suite 300 Durham, NC 27701 USA","title":"PRIVACY POLICY","component":"pedestal","version":"0.7","name":"privacy","url":"/pedestal/0.7/privacy.html","titles":[{"text":"WHAT INFORMATION DO WE COLLECT?","hash":"_what_information_do_we_collect","id":1},{"text":"HOW DO WE USE YOUR PERSONAL INFORMATION?","hash":"_how_do_we_use_your_personal_information","id":2},{"text":"HOW DO WE USE COOKIES?","hash":"_how_do_we_use_cookies","id":3},{"text":"WHEN MAY A THIRD PARTY RECEIVE ACCESS TO YOUR PERSONAL INFORMATION?","hash":"_when_may_a_third_party_receive_access_to_your_personal_information","id":4},{"text":"HOW DOES Nubank NA KEEP YOUR INFORMATION SECURE?","hash":"_how_does_nubank_na_keep_your_information_secure","id":5},{"text":"CHILDREN’S PRIVACY","hash":"_childrens_privacy","id":6},{"text":"GAINING ACCESS TO, UPDATING DELETING YOUR INFORMATION OR WITHDRAWING CONSENT","hash":"_gaining_access_to_updating_deleting_your_information_or_withdrawing_consent","id":7},{"text":"CALIFORNIA PRIVACY RIGHTS","hash":"_california_privacy_rights","id":8},{"text":"LINKS TO OTHER WEBSITES","hash":"_links_to_other_websites","id":9},{"text":"DATA RETENTION","hash":"_data_retention","id":10},{"text":"INTERNATIONAL USERS & USERS FROM THE EUROPEAN UNION","hash":"_international_users_users_from_the_european_union","id":11},{"text":"FUTURE REVISIONS","hash":"_future_revisions","id":12},{"text":"CONTACT US","hash":"_contact_us","id":13}]},"69":{"id":69,"text":"Understanding Pedestal comes with the challenge of unpacking a number of terms - some specific to Pedestal, others inherited from the underlying technologies Pedestal extends from. chain provider Creates and executes an interceptor chain, with some behaviors reflecting a specific domain - the normal domain is processing HTTP requests. clj Also called \"tools.deps\", this is the name of a build tool for Clojure. clj is more recent than Leiningen and has a very different model, but can perform the same key functions: downloading dependencies (from Maven repositories and elsewhere) and running Clojure programs. Projects with a deps.edn file at the root are built using clj. context map The context map contains data about the ongoing request; a context map is passed to interceptors, which often return a modified copy of it. Ultimately, the incoming request map and response map are stored in the context map, along with much other data internal to Pedestal. core.async The core.async library is a Clojure extension that allows for efficient and expressive concurrent processing systems. The central artifact is a channel, a kind of data pipe that allows information to be conveyed between concurrently running light-weight processes. handler A simple function that is passed a request map and returns a response map; handlers are converted to interceptors internally. interceptor An interceptor is the basic unit of work in Pedestal, a combination of specific functions related to handling a request or generating a response. interceptor chain A pipeline of interceptors, setup and executed by a chain provider. Leiningen Leiningen is a popular and pervasive Clojure build tool. Projects with a project.clj file at the root are built using Leiningen, which can download depen
1dencies from a Maven repository on demand. Maven repository A source of Java and Clojure packages, used by the Maven build tool, but also by virtually all other similar tools in the Java ecosystem. REPL The Read Eval Print Loop: reading Clojure input, evaluating it, and printing the result. Clojure excels at interactive development. request map A map of data about the incoming HTTP request, including HTTP verb, URL, and parameters; this is all the information needed to route and process the request, and is available inside the context map. response map A map of data used to construct and send the HTTP response. The response map is stored into the context map to trigger the sending of the response. route A mapping of an HTTP Verb (such as GET or POST) and a URL path to a specific set of interceptors. router A specific implementation (there are several in Pedestal, with different tradeoffs) responsible for identifying the route for an incoming request, using a routing table derived from a routing specification. routing The process of mapping an incoming request to a route, using a router and a routing specification. routing interceptor An interceptor whose job is to perform routing; the routing interceptor is constructed from a routing specification and a router implementation. routing specification A concise list of routing data, in one of several formats. A routing specification is converted into a routing table. routing table A verbose, expanded version of routes that can be used by a router. server A server is responsible for low-level communication with HTTP clients; A server map is created from the service map, and can be used to start and stop the server. Many examples use the Jetty 11 server implementation. service map The service map is a collection of data that is used to setup request routing and interceptors, and ultimately create a server. servlet The standard Java term for a request handler - a servlet operates in the context of a server and processes incoming requests. In Pedestal, a generic servlet is created and configured, and feeds incoming requests into a pipeline of interceptors. servlet interceptor A chain provider specific to handling HTTP requests from a servlet. SLF4J The Simple Logging Facade for Java, a generic wrapper around several competing approaches to generating logging output. Pedestal’s io.pedestal.log logging support works with SLF4J.","title":"Terminology","component":"pedestal","version":"0.7","name":"terms","url":"/pedestal/0.7/terms.html","titles":[]},"70":{"id":70,"text":"Your servlet container has a maximum number of request processing threads available; this is configurable, but (for example) the Jetty container defaults to 50 threads. That means if your application receives more than 50 concurrent requests, the later requests will be queued for later execution; this means that throughput for any request gets worse. Many applications spend much of their time waiting: waiting to read from disk, or a database, or for a response from some other backend service; in normal processing, than means the request processing thread is blocked, doing nothing but taking up space. Here is a synchronous handler that needs to wait for something to happen: (defn takes-time [request] {:status 200 :body (lengthy-computation request)}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name ::takes-time]})) Because this handler is synchronous, requests for /takes-time will block until the call to lengthy-computation completes, stopping the servlet container thread from handling other work. If you need to support more concurrent requests on a single server, and your workload is primarily I/O bound, then you should consider asynchronous request processing. With asynchronous request processing, a request can be unbound from a specific request processing thread. While some background work is happening (the disk or network I/O), the request processing thread can be used for some entirely different request. When the background work completes, the processing of the request resumes from where it left off. The support for all of this is based on Clojure’s core.async library. (def takes-time {:name ::takes-time :enter (fn [context] (go (let [result (<! (lengthy-computation (:request context)))] (assoc context :response {:status 200 :body result}))))}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name :takes-time]})) So, instead of providing a handler for the /takes-time route, we are providing an interceptor, as that enables more options. A handler is passed a request map and returns a response map, and must al
1ways behave synchronously. By contrast, an interceptor is more involved; an interceptor is passed a context map (that itself contains a :request map), and returns the same, or a modified context map (perhaps containing a :response map). And, for async processing, the interceptor can instead return a core.async channel that conveys the modified context map, when it is ready. A channel is somewhat akin to a promise…​ it represents a computation that will operate concurrently and complete at some point in the future. A core.async go block represents a deferred computation; a go block immediately returns a channel; when the body of the go block completes its execution, the result will be written into the channel. In this example, we assume that lengthy-computation has been changed to also return a channel; the core.async <! function will wait for that value to be delivered, before the context is rebuilt and written to the output channel. Pedestal recognizes the difference here …​ it’s getting back a channel, not a map, and can return the request processing thread to the container. When the new context, including the :response map, is delivered, Pedestal will acquire a request processing thread and resume processing the request. This facility allows a single value to be placed on a channel per interceptor; for more extensive use of channels for SSE, see Server-Sent Events. For more about streaming, see Streaming Responses. In the above example, there was just a single interceptor for the route. Most applications will have many interceptors for any particular route to cover a wide range of cross-functional concerns. Importantly, any of these interceptors can \"go async\" by returning a channel instead of a context map. This has implications for all following interceptors in the interceptor chain; those interceptors will not execute in the original request processing thread, but instead will execute in a core.async dispatch thread. These dispatch threads are pooled, but the default is a maximum of eight dispatch threads. An interceptor that blocks may then block a dispatch thread. If this happens across enough requests, then eventually all dispatch threads could be blocked, and no code inside any go block will execute - your server will be jammed up, consuming little or no CPU but not responding to incoming requests. So be cautious: ensure that only async processing occurs in an interceptor that may follow an async interceptor. Quick calculations are perfectly fine, but make sure not to do any blocking operations, such as disk or network I/O, inside any such interceptors.","title":"Async Request Processing","component":"pedestal","version":"0.7","name":"async","url":"/pedestal/0.7/guides/async.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"Synchronous Handler","hash":"_synchronous_handler","id":2},{"text":"Triggering Async","hash":"_triggering_async","id":3},{"text":"Async Interceptor Chains","hash":"_async_interceptor_chains","id":4}]},"71":{"id":71,"text":"This guide takes us past the basics of getting started. It deals with a part of Pedestal that you will touch quite often: routing. A key problem in any backend service is directing incoming requests to the right bit of code. As an industry, we’ve settled on the term \"routing\" to describe how a service understands a request’s URL and invokes a matching function. There’s a flip side to routing, though, which is generating URLs to put into links and hrefs. If we’re not careful, link generation can create hard-to-find coupling between different parts of a service. Pedestal addresses both parts of this problem with the same feature. After reading this guide, you will be able to: Define routes Parse parameters from URLs Connect routes to handlers Apply interceptors along a route Use constraints to ensure a route is invoked correctly Generate links for a route during a request to that route Generate links for other routes This guide assumes that you understand HTTP requests and URLs. In particular, we make no effort to explain URL-encoding or query strings. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or hop over to the mailing list and raise your hand there. In Your First API, we defined a handful of routes for a basic REST style API. It’s time to dig deeper and understand what we can do with this flexible and powerful part of Pedestal. We will work with routes that: Serve static resources Use multiple parameters Use wildcards to match subtrees Support multiple verb
1s We will also generate URLs from routes and parameters. This guide will use Leiningen to generate and build a template project. If you haven’t already installed it, please take a few minutes to set it up. Since Pedestal was first unveiled, we’ve gone through a couple of iterations on the routing syntax. So far, these iterations have all been additive. Some of the older examples may still use the older, \"terse\", syntax. All newer examples, such as this one, use the table syntax; it’s much simpler, and easier to understand at a glance. The older syntaxes (yes, there’s an even older one called \"verbose\") are still supported; if you come across very old code, check the Routing Quick Reference for full details. The simplest route has just a URL, an HTTP verb, and a handler: [\"/users\" :get view-users] In this case, view-users is anything that can be resolved as an interceptor: An Interceptor record A function that returns an interceptor (the function must be annotated as ^:interceptor-fn) A request handler function (really a special case of interceptor) There’s nothing special about using a symbol in the handler’s position. You could call a function that returns an interceptor: [\"/users\" :get (make-view-users-handler db-conn)] That call to make-view-users-handler is nothing special. Clojure will evaluate it when you build the route table. Just make sure it returns something that can be resolved as an interceptor. That also means you can use anonymous functions as handlers. Here’s another way we could implement an \"echo\" function: [\"/echo\" :get (fn [request] {:status 200 :body request}) :route-name :echo] Every route must have a route name, but in most cases, Pedestal can \"figure out\" a reasonable value. Here,the route name clause is necessary here because an anonymous function has nothing that Pedestal can use to infer a route name. The URL in a route doesn’t have to be just text, often important request information is included in the URL, rather than query parameters. The URL from the route is actually pattern used to match URLs. The URL pattern can include any number of segments to capture as parameters. Any segment that looks like a keyword will be captured in the :path-params map in the request. So the route: [\"/users/:user-id\" :get view-users] will match any of the following requests: /users/abacab /users/miken /users/12345 /users/mike%20n When the request reaches our view-users handler, it will include a map like this: {:path-params {:user-id \"miken\"}} The path parameters are always delivered as strings. The strings are HTTP decoded for you, but are not otherwise converted. A single path parameter only matches one segment of a URL. One segment is just the part between '/' characters. So the route above will not match /users/miken/profile/photos/blue-wig.jpg. What if our user IDs are all numeric? It would be convenient if the route would only match when the URL meets a valid pattern in the path parameters. That’s the job of Constraints, discussed below. What if you actually do want to match any number of segments after a path? In that case, you use a catch-all parameter. It looks like a path parameter, except it has an asterisk instead of a colon: [\"/users/:user-id/profile/*subpage\" :get view-user-profile] Now this route does match the URL /users/miken/profile/photos/blue-wig.jpg and, as you might have guessed, the matching segments are still delivered as path parameters in the request map: {:path-params {:user-id \"miken\" :subpage \"photos/blue-wig.jpg\"}} As the subpage path parameter demonstrates, catch-all parameters are strings containing the remaining path segments. You don’t need to do anything in the route to capture query parameters. They are automatically parsed and passed in the request map, under the :query-params key. Like path parameters, query parameters are always delivered as HTTP-decoded strings. For example, an HTTP request with for the URL: /search?q=blog will have this in the request map: {:query-params {:q \"blog\"}} So far, all our examples have used :get as the HTTP verb. Pedestal supports the following verbs: :get :put :post :delete :patch :options :head :any These should look familiar, except for :any. The :any keyword is a wildcard that allows a route to match any request method. That gives a handler the opportunity to decide whether a request method is allowed or not. So far, all our examples have used just one handler function. But one of Pedestal’s key features is the ability to create a chain of interceptors. The route table allows you to put a vector of interceptors (or things that resolve to interceptors) in that third position. [\"/user/:user-id/private\" :post [inject-connection auth-required (body-params/body-params) view-user]] In this example, inject-connection and auth-required are application-specific interceptors. body-params is a Pedestal function that returns an interceptor. view-user is a request-handling function. When a request matches this route, the whole vector of interceptors gets queued into the context for later execution (after any interceptors already in the queue). The \"terse\" syntax uses hierarchically nested routes to reuse interceptors on subtrees. The table based syntax gives up that feature, but still allows you to compose interceptors: ;; Make a var with the common stuff (def common-interceptors [inject-connection auth-required (body-params/body-params)]) ;; inside a call to table-routes [\"/user/:user-id/private\" :post (conj common-interceptors view-user)] This leaves your code in charge of composing interceptors using ordinary Clojure data manipulation. As a convenience, you can supply a map of constraints, in the form of regular expressions, that must match in order for the whole route to match. This handles that case from before, where we wanted to say that user IDs must be numeric. You tell the router about constraints by supplying a map from parameter name to regular expression: [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] Notice the :constraints keyword. That is required to tell the router that the following map is to be treated as constraints. Like the interceptor vector, the constraint map is just data. Feel free to build it up however you like…​ it doesn’t have to be a map literal in the route vector: (def numeric #\"[0-9]+\") (def user-id {:user-id numeric}) [\"/user/:user-id\" :get view-user :constraints user-id] [\"/user/:user-id\" :post update-user :constraints user-id] The thing about constraints is that they are not used to distinguish between otherwise identical routes. They are not for disambiguation. Rather, constraints are used to reject requests that do match the rest of the route but do not match the constraints. What happens after such a rejection depends on which router is being used. Router Behavior on Failed Constraint Prefix tree Abort and return a 404 response Map tree Abort and return a 404 response Linear search Continue searching the remaining routes Be cautious about using path constraints. Experience has shown that constraints result in a worse experience for users of your API. Generally, it is better to validate path and query parameters inside your route (in an interceptor or handler for the specific route) so that proper errors could be returned to the client, rather than a generic, and perhaps misleading, 404 NOT FOUND response. As an alternative to using path constraints, you could define a validating interceptor: (def user-id-vali
1dator (interceptor {:name ::user-id-validator :enter (fn [context] (if (re-matches #\"[0-9]+\" (get-in context [:request :path-params :user-id])) context (assoc context :response {:status 400 :body \"user-id must be numeric\"})))})) This interceptor could be placed into the interceptor list for any route that has a user-id in the path, and will uniformly abort any request (with a 400 Bad Request status code) if the user-id is not numeric. Every route must have a unique name. Pedestal uses route names for the flip side of route matching: URL generation. You can supply a route name in the route vector: [\"/user\" :get view-user :route-name :view-user-profile] A route name must be a keyword. Most commonly, it is a namespace-qualified keyword. The route name comes before :constraints, so if you have both, the order is as follows Path - String Verb - keyword (e.g., :get) Interceptors - interceptor, handler function, or vector of interceptors Route name clause (:route-name your-route-name) Constraints clause (:constraints constraint-map) You’ll notice that most of the examples above omit the :route-name clause. When there is no explicit route name, Pedestal will pick one for you. It uses the :name of the last interceptor in the interceptor vector. Route names must be unique, so if you use the same interceptor in the last position in multiple routes, you’ll have to supply the route name. Suppose you have a single interceptor or handler that deals with multiple verbs on the same path. Maybe it’s a general API endpoint function or a function created by another library. If you just try to make multiple rows in a table, you will get errors: ;;; This won't work; both rows get the same automatic ;;; route name and an exception is thrown. [\"/users\" :get user-api-handler] [\"/users\" :post user-api-handler] The best approach is to simply provide a unique route name to each route that shares the handler. [\"/users\" :get user-api-handler :route-name :users-view] [\"/users\" :post user-api-handler :route-name :user-create] In addition to routing incoming requests, the routing data is also available to the application for URL generation. You can request a URL for a given route by name and specify parameter values to fill in. This section describes URL generation, starting with how routes are named. The url-for-routes function takes the expanded routing table [1] and creates and returns a function that uses the data to craft URL strings. The function accepts a route name and optional arguments and returns a URL that can be used in a hyperlink. (def app-routes (table/table-routes {} [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :route-name :show-user-profile] [\"/user/:user-id/timeline\" :post post-timeline :route-name :timeline] [\"/user/:user-id/profile\" :put update-profile]])) (def url-for (route/url-for-routes app-routes)) (url-for :user-search-form) ;; => \"/user\" (url-for :view-user :params {:user-id \"12345\"}) ;; => \"/user/12345\" Any leftover entries in the :params map that do not correspond to path parameters get turned into query string parameters. If you want more control, you can give the generator the specific arguments :path-params and :query-params. The url-for-routes function provides a global URL generator. Within a single request, the request map itself can provide a URL generator. This generator allows you to create absolute or relative URLs depending on how the request was matched. When the routing interceptor matches a request to a route, it creates a new URL generator function that closes over the request map. This function is stored in three places: In the context map, using the :url-for key In the request map (inside the context), using the same :url-for key In a private dynamic variable in the io.pedestal.http.route namespace The private variable allows the url-for function to operate from any interceptor (or handler) code. url-for only returns URLs. The function form-action-for-routes takes a route table and returns a function that accepts a route-name (and optional arguments) and returns a map containing a URL and an HTTP verb. (def form-action (route/form-action-for-routes app-routes)) (form-action :timeline :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/:user-id/timeline\"} A form action function will (by default) convert verbs other than GET or POST to POST, with the actual verb added as a query string parameter named _method: (form-action :update-profile :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/12345/profile?_method=put\"} This behavior can be disabled (or enabled for url-for functions) and the query string parameter name can be changed. All of these settings can be modified when an url-for or form-action function is created or when it is invoked. The Your First API guide goes inot create detail about routes inside a Pedestal application, showing how to build up a number of routes, using different paths and HTTP methods, into a consistent, REST API. The map tree router is by far the fastest router in Pedestal. Part of how it gets that speed, though, is by forbidding the use of dynamic path segments like wildcards and path parameters. If your routes include any of them, then even if you request the map tree router, Pedestal will fall back to using the (still pretty fast) prefix tree router. This guide covered route definitions, from the most basic possible case all the way to the most complex. It demonstrated the use of the table routing syntax and showed how to use them in a real service. Finally, it demonstrated the use of wildcard routes and discussed when to use them and their tradeoffs. For more details, see the Routing Quick Reference. 1. This is what’s returned from table-routes.","title":"Defining Routes","component":"pede
1stal","version":"0.7","name":"defining-routes","url":"/pedestal/0.7/guides/defining-routes.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"A Note About Routing Syntax","hash":"_a_note_about_routing_syntax","id":7},{"text":"Defining a Route: The Bare Minimum","hash":"_defining_a_route_the_bare_minimum","id":8},{"text":"Building handlers","hash":"_building_handlers","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Catch-all Parameters","hash":"_catch_all_parameters","id":11},{"text":"Query Parameters","hash":"_query_parameters","id":12},{"text":"Verbs","hash":"_verbs","id":13},{"text":"Interceptors","hash":"_interceptors","id":14},{"text":"Common interceptors","hash":"_common_interceptors","id":15},{"text":"Constraints","hash":"_constraints","id":16},{"text":"Considering Constraints","hash":"_considering_constraints","id":17},{"text":"Route names","hash":"_route_names","id":18},{"text":"Default Route Names","hash":"_default_route_names","id":19},{"text":"Using Route Names to Distinguish Handlers","hash":"_using_route_names_to_distinguish_handlers","id":20},{"text":"Generating URLs","hash":"_generating_urls","id":21},{"text":"URL generation","hash":"_url_generation","id":22},{"text":"Request-specific URL generation","hash":"_request_specific_url_generation","id":23},{"text":"Verb smuggling","hash":"_verb_smuggling","id":24},{"text":"Using Routes in a Service","hash":"_using_routes_in_a_service","id":25},{"text":"Restrictions on Wildcards and Path Parameters","hash":"_restrictions_on_wildcards_and_path_parameters","id":26},{"text":"Wrapping Up","hash":"_wrapping_up","id":27}]},"72":{"id":72,"text":"Exploring your application at the REPL is fundamental to Clojure development. In the context of Pedestal applications, we often want to interrogate the routing system and invoke interceptors (or handlers) in isolation. These explorations often form the basis for more robust automated tests, which will be covered in the Unit testing guide. After reading this guide, you will be able to perform the following tasks at the REPL: Start and stop the HTTP server. Reload your routes without restarting the server. List your application’s routes. Find a route by name. Test the response of a single route. Test for route recognition. Test url generation. Invoke an interceptor or handler. [TODO] Examine the interceptor stack. [TODO] Connect to a running application with Socket REPL. [TODO] Capture the last request and examine it at the REPL. [TODO] This guide assumes you have a working REPL in your Pedestal application. If you generated your application using the pedestal-service Leiningen template, this might be as simple as running lein repl at the command line. Perhaps your editor or IDE provides a facility for launching a REPL for your project. A great resource for understanding and configuring your REPL environment can be found at Lambda Island’s Ultimate Guide to Clojure REPLs. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will develop a few simple utility functions that simplify interacting with your Pedestal application from the REPL. For the sake of having a consistent baseline setup, we’ll use a clean project for this guide. Generate a new Pedestal service using the following command: lein new pedestal-service pedrepl; cd pedrepl The default project template creates two files: server.clj and service.clj. We’re now ready to begin exploring the Pedestal application. Ladies and gentlemen, start your REPLs! The first thing we’ll want to do from the REPL is to control the HTTP server. By default, your REPL should start in the pedrepl.server namespace. The Leiningen template generates a useful function named run-dev which will configure and start the HTTP server in development mode, preventing the HTTP server thread from being joined and locking up your REPL. In development mode, routes are reloaded when the service.clj is re-required. At the REPL, invoke the run-dev function to start the server: pedrepl.server> (def serv (run-dev)) Now fire up a browser and navigate to http://localhost:8080 to see the default, \"Hello, World!\" message. Within service.clj, update the home-page handler to respond with \"Hello Pedestal User\". Re-require/reload the service.clj, and when you reload http://localhost:8080 you’ll see the change immediately. In dev-mode, you should never have to restart the server - changes are picked up as soon as they’re required/reloaded. Should you ever need to stop the server, you can do so with the following invocation: pedrepl.server> (server/stop serv) Now that we’re able to control the HTTP server, we’ll want some additional amenities. Next we’re going to add some route introspection utilities. Pedestal ships with all of the raw materials we need. Our job is simply to package these tools together into more convenient forms adapted to our specific needs. Pedestal supports a few different route definition formats. Version 0.5.0 saw the advent of a new table format which is now the default generated by the pede
1stal-service Leiningen template. Let’s add a reference to the table format namespace from server.clj. Your namespace declaration should now look like this: (ns pedrepl.server (:gen-class) (:require [io.pedestal.http :as server] [io.pedestal.http.route :as route] [io.pedestal.http.route.definition.table :refer [table-routes]] ; <-- new [pedrepl.service :as service] [clojure.java.io :as io])) With that reference in place, we can add a new utility to print our application’s routes at the REPL: (defn print-routes \"Print our application's routes\" [] (route/print-routes (table-routes service/routes))) Try this new function out at the REPL: pedrepl.server> (print-routes) ┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Method ┃ Path ┃ Name ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ :get ┃ / ┃ :pedrepl.service/home-page ┃ ┃ :get ┃ /about ┃ :pedrepl.service/about-page ┃ ┗━━━━━━━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ nil This simple output lists the HTTP method, relative path, and route name for each one of our routes. This is a great start, but as our application grows we may want to find a route by name. Let’s add another utility to do just that: (defn named-route \"Finds a route by name\" [route-name] (->> service/routes table-routes (filter #(= route-name (:route-name %))) first)) Let’s test our new function: pedrepl.server> (named-route ::service/home-page) This function returns a map describing the home page route in greater detail than print-routes. Besides the :path and :method keys, we’re given access to the list of :interceptors that will be invoked when this route is requested. It’s not uncommon for Pedestal services to have quite a few interceptors, so the raw output from named-route can get a little unwieldy. Let’s see if we can produce some friendlier output. Interceptors are central to Pedestal applications. Not only do they provide the same pre- and post-processing of requests that Ring middleware does, but they also provide the main functionality behind every request. Everything in Pedestal is an interceptor, created by a single protocol - IntoInterceptor. When a route is compiled in Pedestal, it’s compiled with the full list of interceptors that run for that endpoint. It is often useful to see all interceptors that get run for a single endpoint. You can do that by looking through the route description or programmatically at the repl. Below is one way you might inspect and format that information. (defn print-route \"Prints a route and its interceptors\" [rname] (letfn [(joined-by [s coll] (apply str (interpose s coll))) (repeat-str [s n] (apply str (repeat n s))) (interceptor-info [i] (let [iname (or (:name i) \"<handler>\") stages (joined-by \",\" (keys (filter (comp (complement nil?) val) (dissoc i :name))))] (str iname \" (\" stages \")\")))] (when-let [rte (named-route rname)] (let [{:keys [path method route-name interceptors]} rte name-line (str \"[\" method \" \" path \" \" route-name \"]\")] (joined-by \"\\n\" (into [name-line (repeat-str \"-\" (count name-line))] (map interceptor-info interceptors))))))) Let’s use our new utility to print the ::service/home-page route information. pedrepl.server> (print-route ::service/home-page) This call produces the following output: [:get / :pedrepl.service/home-page] -------------------------------- :io.pedestal.http.body-params/body-params (:enter) :io.pedestal.http/html-body (:leave) <handler> (:enter) Of course, this is a completely arbitrary representation of your route definition. Your own needs and aesthetic sensibilities should inform the structure of your application’s output. It’s not even necessary to start a server to see responses of your Pedestal service. Pedestal ships with a response-for function that will return the response of an endpoint, exactly how it’s passed to the Servlet/Chain-Provider. Let’s jump into the REPL: pedrepl.server> (require '[io.pedestal.test :refer [response-for]]) nil pedrepl.server> (def tempserv (::server/service-fn (server/create-servlet service/service))) pedrepl.server> (response-for tempserv :get \"/\") You can also use the same response-for function to test against a live server. Assuming you still have a running server from above (e.g. (def serv (run-dev))), You can do the following: pedrepl.server> (response-for (::server/service-fn serv) :get \"/\") One of Pedestal’s benefits is that its routing table is bidirectional. Not only does Pedestal use the route definition to recognize routes based on request data, but it can also generate URLs to known route handlers. Let’s take a closer look at both of these capabilities in turn. When developing Pedestal applications, we often want to verify that a given HTTP verb and relative path will invoke the correct handler. Again, Pedestal provides all of the plumbing we need to answer these questions from the comfort of the REPL. Add the following function to server.clj: (defn recognize-route \"Verifies the requested HTTP verb and path are recognized by the router.\" [verb path] (route/try-routing-for (table-routes service/routes) :prefix-tree path verb)) With this function in place, we can test for route recognition from the REPL: pedrepl.server> (recognize-route :get \"/about\") => {:path \"/about\", :method :get, :path-re #\"/\\Qabout\\E\", :path-parts [\"about\"], :interceptors [{:name :io.pedestal.http.body-params/body-params, :enter #function[io.pedestal.interceptor.helpers/on-request/fn--8294], :leave nil, :error nil} {:name :io.pedestal.http/html-body, :enter nil, :leave #function[io.pedestal.interceptor.helpers/on-response/fn--8311], :error nil} {:name nil, :enter #function[io.pedestal.interceptor/eval155/fn--156/fn--157], :leave nil, :error nil}], :route-name :pedrepl.service/about-page, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #function[clojure.core/constantly/fn--4614]} When we generate urls during the lifetime of a request, we can simply use Pedestal’s url-for function. However, this function relies on the url-for variable which is dynamically bound during the life of a request. In order to test URL generation from the REPL, we’ll define the following utility: (defn dev-url-for \"Returns a url string for the named route\" [route-name & opts] (let [f (route/url-for-routes (table-routes service/routes)) defaults {:host \"localhost\" :scheme :http :port 8080} route-opts (flatten (seq (merge defaults (apply hash-map opts))))] (apply f route-name route-opts))) Let’s generate the URL for the about page: pedrepl.server> (dev-url-for ::service/about-page) => \"/about\" pedrepl.server> (dev-url-for ::service/about-page :absolute? true) => \"http://localhost:8080/about\" Capture request In this guide we learned how to explore our Pedestal application from the REPL. Some of these explorations may serve as the basis for unit tests. Head over to the Unit testing guide to learn how to test the complete interceptor chain for a given route and much more. Alternatively, you may want to learn to manage your applications stateful components (like the HTTP server) more effectively. Check out the guide on Using Pedestal With Component to learn how easy it can be to incorporate Stuart Sierra’s Reloaded workflow into your Pedestal development, and read Reloading at the REPL for a non-component take on how to make live changes without restarting.","title":"Developing at the REPL","component":"pede
1stal","version":"0.7","name":"developing-at-the-repl","url":"/pedestal/0.7/guides/developing-at-the-repl.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Before We Begin","hash":"_before_we_begin","id":5},{"text":"Starting and stopping the HTTP server","hash":"_starting_and_stopping_the_http_server","id":6},{"text":"Working with Routes","hash":"_working_with_routes","id":7},{"text":"Interceptors and Handlers","hash":"_interceptors_and_handlers","id":8},{"text":"Testing Route Responses","hash":"_testing_route_responses","id":9},{"text":"Route Recognition and Generation","hash":"_route_recognition_and_generation","id":10},{"text":"Route Recognition","hash":"_route_recognition","id":11},{"text":"Route Generation","hash":"_route_generation","id":12},{"text":"Useful Techniques","hash":"_useful_techniques","id":13},{"text":"Connecting to a Running Application","hash":"_connecting_to_a_running_application","id":14},{"text":"Next Steps","hash":"_next_steps","id":15}]},"73":{"id":73,"text":"Pedestal includes a template that can be used with deps-new, a tool used to generate new projects from a template. deps-new works with the clojure (or clj) tool, and generates a deps.edn-based project. If you are a Leiningen user, it is relative straight forward to create an equivalent project.clj from the generated deps.edn. The embedded part indicates that the template is configured to work using Jetty 11, and it starts Jetty from within a running Clojure application (an alternate, supported, but far less common approach is to bundle a Pedestal application into a WAR and deploy into Jetty, or another servlet container). deps-new operates as a Clojure tool, and can be added using the following command: clojure -Ttools install-latest :lib io.github.seancorfield/deps-new :as new You will need the very latest version of this, version 0.7.0; you should re-execute the above command to ensure you have the latest. You will also need some scaffolding in your ~/.clojure/deps.edn; add the following to the :aliases map: :1.12 {:override-deps {org.clojure/clojure {:mvn/version \"1.12.0\"}}} This step is only necessary if Clojure 1.12 is not your default; for most users, Clojure 1.12 will be available. Check by running the clojure command; it will tell you the your default version. Before you begin, you should decide on a group name and project name for your new Pedestal application. These are combined with a slash to form the full project name. For example, you might choose com.blueant as your group name, and peripheral as you project name (we’ll use this example below), in which case, your full project name is com.blueant/peripheral. deps-new will create a new project in a subdirectory matching your project name: peripheral. The command for this is somewhat arcane: clojure -A:1.12 -Tnew create :template \\ io.github.pedestal/pedestal%embedded%io.pedestal/embedded#0.7.2 \\ :name com.blueant/peripheral The -A:1.12 option references the global alias you set up earlier and, again, is only needed if Clojure 1.12 is not your default. Clojure 1.12 is only needed to initially construct your project, to build or run your project, Clojure 1.10 or above is all that’s needed. Example: > clojure -A:1.12 -Tnew create :template io.github.pedestal/pedestal%embedded%io.pedestal/embedded :name com.blueant/peripheral Resolving io.github.pedestal/pedestal as a git dependency Creating project from io.pedestal/embedded in peripheral > tree peripheral ├── CHANGELOG.md ├── LICENSE ├── README.md ├── build.clj ├── deps.edn ├── dev │ ├── com │ │ └── blueant │ │ └── peripheral │ │ └── telemetry_test_init.clj │ ├── dev.clj │ └── user.clj ├── doc │ └── intro.md ├── resources │ ├── logback.xml │ ├── pedestal-config.edn │ └── public │ └── index.html ├── src │ └── com │ └── blueant │ └── peripheral │ ├── main.clj │ ├── routes.clj │ ├── service.clj │ └── telemetry_init.clj ├── start-jaeger.sh ├── test │ └── com │ └── blueant │ └── peripheral │ └── service_test.clj └── test-resources ├── logback-test.xml └── pedestal-test-config.edn 17 directories, 20 files > The exact set of files created may change over time, as the embedded template evolves. From the new directory (peripheral) you can run tests: > clj -T:build test Running tests in #{\"test\"} Testing com.blueant.peripheral.service-test Ran 3 tests containing 3 assertions. 0 failures, 0 errors. > You can also fire up a REPL and start the service: > clj -A:test Clojure 1.11.1 user=> (use 'dev) nil user=> (go) Routing table: ┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Method ┃ Path ┃ Name ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ :post ┃ /hello ┃ :com.blueant.peripheral.routes/greet ┃ ┃ :get ┃ /hello ┃ :com.blueant.peripheral.routes/hello ┃ ┗━━━━━━━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ #:io.pedestal.http{:port 8080, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__17265 0x6853bae \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__17265@6853bae\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__17934 0x26714a4a \"io.pedestal.http.jetty$server$fn__17934@26714a4a\"], :resource-path \"public\", :interceptors [#Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/exception-debug} #Interceptor{:name :io.pedestal.http.cors/dev-allow-origin} #Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.ring-middlewares/resource} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes #object[com.blueant.peripheral.service$service_map$fn__17845 0x7589371f \"com.blueant.peripheral.service$service_map$fn__17845@7589371f\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x46a4eecd \"io.pedestal.http.servlet.FnServlet@46a4eecd\"], :server #object[org.eclipse.jetty.server.Server 0x1cc1ddad \"Server@1cc1ddad{STARTED}[11.0.18,sto=0]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__17936 0x6953f5fc \"io.pedestal.http.jetty$server$fn__17936@6953f5fc\"]} user=> From another window, you can open http://localhost:8080/index.html, to see a brief welcoming page. The dev namespace provides the functions go, start, and stop. The :test alias sets up the classpath so that the dev namespace is available, and enables REPL oriented development mode, including the output of the routing table as the service started. Because the application is running in debug mode, Pedestal has enabled extra logging output about the execution of each interceptor, and how the interceptor changed the context map. DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.cors/dev-allow-origin, :stage :enter, :execution-id 1, :context-changes {:added {[:request :headers \"origin\"] \"\"}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.tracing/tracing, :stage :enter, :execution-id 1, :context-changes {:added {[:bindings] ..., [:io.pedestal.http.tracing/otel-context-cleanup] ..., [:io.pedestal.http.tracing/prior-otel-context] ..., [:io.pedestal.http.tracing/otel-context] ..., [:io.pedestal.http.tracing/span] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http/log-request, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/query-params, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/method-param, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.ring-middlewares/resource, :stage :enter, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/router, :stage :enter, :execution-id 1, :context-changes {:added {[:request :url-for] ..., [:request :path-params] [], [:route] ..., [:url-for] ...}, :changed {[:bindings] ..., [:io.pedestal.interceptor.chain/queue] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.route/path-params-decoder, :stage :enter, :execution-id 1, :context-changes {:changed {[:request :path-params] {:from [], :to {}}}, :added {[:io.pedestal.http.route/path-params-decoded?] true}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor \"#Interceptor{}\", :stage :enter, :execution-id 1, :context-changes {:added {[:response] {:status 200, :body ...}}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.secure-headers/secure-headers, :stage :leave, :execution-id 1, :context-changes {:added {[:response :headers] {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\"}}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.ring-middlewares/content-type-interceptor, :stage :leave, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http/not-found, :stage :leave, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.tracing/tracing, :stage :leave, :execution-id 1, :context-changes {:changed {[:bindings] ...}, :removed {[:io.pedestal.http.tracing/otel-context-cleanup] ..., [:io.pedestal.http.tracing/prior-otel-context] ..., [:io.pedestal.http.tracing/otel-context] ..., [:io.pedestal.http.tracing/span] ...}}, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.impl.servlet-interceptor/ring-response, :stage :leave, :execution-id 1, :context-changes nil, :line 128} DEBUG io.pedestal.interceptor.chain.debug - {:interceptor :io.pedestal.http.impl.servlet-interceptor/stylobate, :stage :leave, :execution-id 1, :context-changes nil, :line 128} You can also use curl or http to make a request: > http --json post :8080/hello name=\"Pedestal User\" HTTP/1.1 200 OK Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Date: Fri, 12 Jul 2024 18:52:06 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains Transfer-Encoding: chunked X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: DENY X-Permitted-Cross-Domain-Policies: none X-XSS-Protection: 1; mode=block Hello, Pedestal User. > Alternately, you can start the service directly without starting a REPL: > clj -X:run INFO com.blueant.peripheral.main - {:msg \"Service com.blueant/peripheral startup\", :port 8080, :line 9} At this point, the service is running; you can use another window to execute HTTP requests. If you open a browser window to http://localhost:8080/index.html, you’ll see the following logged to the service’s console: INFO io.pedestal.http - {:msg \"GET /index.html\", :line 83} INFO io.pedestal.http - {:msg \"GET /favicon.ico\", :line 83} The template includes very basic support for gathering and reporting telementry using Open Telemetry. For local work, this is best accomplished by running a Docker container with the Jaeger server running; the container will collect telemetry from the running application, and also provides a user interface to examine the traces produced by the application. The template includes a script, start-jaeger.sh that downloads the necessary files and starts the container, and opens your web browser to the Jaeger UI: > ./start-jaeger.sh Downloading Open Telemetry Java Agent to target directory ... f7296a450ab2bfad684451ed7e0ed22125c0743f79e9675c4e15f593570986de Jaeger is running, execute `docker stop jaeger` to stop it. > Stop your old REPL session, if necessary, and start a new one: > clj -A:test:otel-agent OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended [otel.javaagent 2024-03-01 16:32:45:144 -0800] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 2.1.0 Clojure 1.11.1 user=> (use 'dev) nil user=> (go) Routing table: ┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Method ┃ Path ┃ Name ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ :post ┃ /hello ┃ :com.blueant.peripheral.routes/greet ┃ ┃ :get ┃ /hello ┃ :com.blueant.peripheral.routes/hello ┃ ┗━━━━━━━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ #:io.pedestal.http{:port 8080, :service-fn #object[io.pedestal.http.impl ... > The :otel-agent alias enables the Open Telementry Java Agent; a Java Agent is a special library that \"hooks into\" the Java Virtual Machine, and can instrument classes as they are loaded from disk, or from JAR files. In this case, the agent will add code that initializes open telemetry in our application, and instrument the Jetty classes to capture the real times when requests arrive and responses are sent. In a separate window, you can open http://localhost:8080/hello or http://localhost:8080/index.html. Your application will handle the requests while gathering and sending tracing data to the Jaeger server running inside the Docker 
1container. After that, go back to the Jaeger UI, and select com.blueant/peripheral in the Service drop-down list [1], then click \"Find Traces\". You can then select a specific trace to get more details about it: You’ll notice that the single request has two overlapping traces; the outer trace was started and ended by the Open Telemetry java agent; the inner trace is just the part that Pedestal (not Jetty) is responsible for. You don’t need to run your application with the Java agent in order to gather and send traces; however, the alternative involves quite a bit more setup, and many additional dependencies for all the necessary Open Telemetry libraries. Even then, without the Java agent, you will not get the most accurate measurements as you’ll only get the inner measurement covering the span of time Pedestal was handling the request. The lint command uses clj-kondo to identify problems in your source code: > clj -T:build lint WARNING: update-vals already refers to: #'clojure.core/update-vals in namespace: clj-kondo.impl.analysis.java, being replaced by: #'clj-kondo.impl.utils/update-vals linting took 137ms, errors: 0, warnings: 0 clj-kondo approves ☺️ > The lint command will exit with a -1 status code if there are linter errors; this aligns well with using it inside a CI/CD pipeline. The jar command builds a Maven POM file, and a JAR for the project: > clj -T:build jar Writing pom.xml... Copying source... Building JAR target/com.blueant/peripheral-0.1.0-SNAPSHOT.jar ... > There’s also an install command to install the JAR to your local Maven repository, and a deploy command, to deploy the JAR to Clojars. The template provides a tiny amount of structure and examples; it’s a seed from which you can grow a full project, but small as it is, it’s worth exploring in more detail. 1. If com.blueant/peripheral isn’t present, you will need to refresh the browser so that it can populate the list of services.","title":"Embedded Template","component":"pedestal","version":"0.7","name":"embedded-template","url":"/pedestal/0.7/guides/embedded-template.html","titles":[{"text":"Setting up deps-new","hash":"_setting_up_deps_new","id":1},{"text":"Creating a project","hash":"_creating_a_project","id":2},{"text":"Exploring the new project","hash":"_exploring_the_new_project","id":3},{"text":"Starting the service","hash":"_starting_the_service","id":4},{"text":"Gathering Telemetry","hash":"_gathering_telemetry","id":5},{"text":"Other build commands","hash":"_other_build_commands","id":6},{"text":"Conclusion","hash":"_conclusion","id":7}]},"74":{"id":74,"text":"In the first two parts of this trail, we made a basic service and we enhanced it to accept a query parameter. Both of these returned their responses as plain text. Plain text is not particularly useful: it doesn’t excel at presentation the way that HTML does, and it doesn’t offer structured data to a smart client the way JSON (or XML, or EDN, or a number of formats) would. In fact, we should go a step further: the client should be in charge of whether they get human-presentable HTML, or code-focused JSON, using the very same endpoints. It’s time to see how Pedestal handles content types and response bodies. We will also get our first taste of interceptors. After reading this guide, you will be able to: Add interceptors to routes. Use functions to create interceptors. Use the response map. Transform responses into other content types. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the same hello.clj that we’ve built up over the last two guides. We will enhance it to return a JSON content body. Then we will add the ability to look at the client’s preferred content type and make a decision about what to return. If you worked through Hello World, With Parameters then you already have all the files you need. If not, take a moment to grab the sources from the whole shebang in that guide. Feel free to browse the complete sources in the repository, but be warned that the file contains all the versions that we built up through the previous guide. You’ll need to navigate some magic comments to pare it down to just the final version. Our first effort to deal with content types will be pretty manual. This is to show you what goes on under the hood before we use the handy built-in features that Pedestal offers. Don’t worry, this won’t hurt too much. It’ll also let us introduce the most important concept in Pedestal: Interceptors. Back in Hello World, With Parameters we echoed an HTTP request back as the response. That was pretty useful for debugging, and it will come in handy for our next step. Since our /greet route is working so nicely, let’s make a general route to just echo requests back. Pop open hello.clj and change the routes definition to this: (def routes (route/expand-routes #{[\"/greet\" :get respond-hello :route-name :greet] [\"/echo\" :get echo]})) You probably noticed that routes is created with a def and not with a defn. def creates a var and binds a value to that var. Under the jargon, that means it creates a new name in the namespace and attaches a value. defn is a macro that essentially expands into def with a f
1n, hence the name. In practice, when you see a def, you should think \"this is creating a value, and values don’t change.\" So it is with the routes. After changing the routes, you will need to restart your service. This is purely a result of the way we’ve built things for this guide. There are techniques that let you automatically reload routes during development. We’ll get to those in Developing at the REPL. When you restarted your service, you probably got a nasty message from Clojure like: user=> (require :reload 'hello) Syntax error compiling at (hello.clj:55:3). Unable to resolve symbol: echo in this context user=> That is a very precise way to say we forgot to define echo before using it. Let’s do that now. We’re going to define echo differently than our handler function hello. Instead of a simple handler function, we’re going to define an interceptor. Interceptors are the basic unit of work in Pedestal. At every step of the way between when a request arrives from the client, and when a response is sent back, there’s at least one interceptor. This includes: Parsing query parameters Routing the incoming request Logging the request Constructing the full response An interceptor is essentially a simple map, but the values for the most important keys are not simple values (like strings or numbers), but functions. This identifies two phases: enter and leave. Each interceptor may participate in the phase by providing corresponding callback functions in the :enter and :leave keys (respectively) [1]. Some interceptors only do work during the enter phase, some only during the leave phase, and some do work during both phases. An interceptor that omits the :enter or :leave key will just be skipped — it’s not an error. But what does that work entail? It’s essentially a bucket brigade: each interceptor is passed the context map, is free to perform other work if necessary, and returns a modified context map, which is passed to the next interceptor. Part of the context map is the interceptor queue, and the interceptor stack; the queue is a list of interceptors who have yet to be invoked during the enter phase. As interceptors are invoked[2], they are also added to the interceptor stack, which is used during the leave phase. Because it’s a stack, the leave phase invokes the interceptors in the opposite order from the enter phase: Handler functions, like respond-hello in our example, are special cases. Pedestal can wrap a plain old Clojure function with an interceptor that takes the request map out of the context map, passes it to the function, and uses the return value of the function as the response map [3]. As soon as any interceptor attaches a :response key to the context map, Pedestal considers the request handled. Remaining interceptors in the interceptor queue won’t be called, and only the ones that are already on the interceptor stack will be invoked during the leave phase. This is a \"short-circuit\" behavior, like an early-exit in code. My advice is to build your value in the context with :enter functions, turn it into a response at the tail end of the interceptor queue, and then refine the response map with defaults, headers, cookies, and so on in :leave functions. We’re ready to define echo as an interceptor: (def echo {:name ::echo (1) :enter (fn [context] (2) (let [request (:request context) (3) response (ok request)] (4) (assoc context :response response)))}) (5) 1 Interceptor names help with debugging. 2 We’re providing an :enter function. 3 Take the request map out of the context map. 4 Make a response map out of it. 5 Attach the response to the context map, and return the new context map. We normally wouldn’t write this in such an expanded form, but I wanted to show all the pieces one by one. Ultimately, we’re just making a map with the keys :name and :enter. We can try that interceptor out now. Bounce your service and use curl to exercise the /echo route: > curl http://localhost:8890/echo {:protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :servlet-response #object[org.eclipse.jetty.server.Response 0x1ea4d091 \"HTTP/1.1 200 \\nDate: Thu, 12 Oct 2023 20:43:21 GMT\\r\\nStrict-Transport-Security: max-age=31536000; includeSubdomains\\r\\nX-Frame-Options: DENY\\r\\nX-Content-Type-Options: nosniff\\r\\nX-XSS-Protection: 1; mode=block\\r\\nX-Download-Options: noopen\\r\\nX-Permitted-Cross-Domain-Policies: none\\r\\nContent-Security-Policy: object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\\r\\nContent-Type: application/edn\\r\\n\\r\\n\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x6593f4fd \"io.pedestal.http.servlet.FnServlet@6593f4fd\"], :headers {\"accept\" \"*/*\", \"user-agent\" \"curl/8.1.2\", \"host\" \"localhost:8890\"}, :server-port 8890, :servlet-request #object[org.eclipse.jetty.server.Request 0x1a57fb49 \"Request(GET //localhost:8890/echo)@1a57fb49\"], :path-info \"/echo\", :url-for #object[clojure.lang.Delay 0xd0b64a9 {:status :pending, :val nil}], :uri \"/echo\", :server-name \"localhost\", :query-string nil, :path-params {}, :body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x28234bf2 \"HttpInputOverHTTP@28234bf2[c=0,q=0,[0]=null,s=STREAM]\"], :scheme :http, :request-method :get, :context-path \"\"}% This should look pretty familiar from the previous guide. When Pedestal starts your service, it sets up some default interceptors for you. That includes an interceptor that does the routing. A router is just a specialized interceptor that looks at parts of the request, decides which interceptors to invoke next, and pushes those onto the interceptor queue. That means any other interceptor can also modify the queue! This is one of the big benefits of using interceptors: the ability to make dynamic decisions during request handling. Pedestal is agnostic as to what servlet container (such as Jetty 11) is used to accept requests and return responses. At the core of Pedestal is the Servlet Interceptor[4], which is the bridge between the Servlet API (the domain of the servlet container) and Pedestal’s interceptors. The servlet interceptor queues up several interceptors ahead of any provided by the service[5], including the ring-response interceptor; part of this interceptor’s job is to determine a default response Content-Type header, if the actual response map omits it - this is deduced from the response map’s :body. Table 1. Content Type Mapping Object in :body Content-Type Byte array application/octet-stream String text/plain Clojure collection application/edn java.io.File application/octet-stream java.io.InputStream application/octet-stream java.nio.channels.ReadableByteChannel application/octet-stream java.nio.ByteBuffer application/octet-stream ring-response also uses the body type to determine how to stream the response to the client; for example, Clojure collections are printed as a string, which is then streamed. A File's contents are read and streamed as a byte stream. ring-response does a reasonable job, but it’s not always right. You might notice that \"text/html\" doesn’t appear anywhere in that list. We can force that by setting a content type header in our response, like this: src/hello.clj (defn ok [body] {:status 200 :body body :headers {\"Content-Type\" \"text/html\"}}) (1) 1 Attach a header declaring the content type. Note that the key, \"Content-Type\", is case sensitive in the response map. Let’s see the result: > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 21:51:05 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html Transfer-Encoding: chunked Hello, world! As expected. But, something about that doesn’t seem quite right. We’re completely ignoring HTTP content negotiation. The client might want JSON instead of HTML. Or it might want plain text. Or EDN. The trouble is that the HTTP content negotiation spec is a royal pain. Fortunately, Pedestal provides an interceptor to help. io.pedestal.http.content-negotiation/negotiate-content does the job. If you look at the docs, though, you’ll see that is not an interceptor, but rather a function that returns an interceptor. This is a common pattern when you need to include some state or customize the behavior of an interceptor. You pass arguments to a function which returns an interceptor that \"closes over\" those arguments. It returns a data structure that contains functions that carry those arguments around with them. Let’s remove the content type header from ok and use this interceptor. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (3) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (def routes (route/expand-routes #{[\"/greet\" :get [content-negotiation-interceptor (4) respond-hello] :route-name :greet] [\"/echo\" :get echo]})) 1 We’ll need this namespace soon to emit JSON responses. 2 This is the content negotiation namespace for Pedestal. 3 A short, picky list of content types we can emit. 4 Notice this route now has a vector of interceptors to invoke. We are using a new namespace here, which will eventually let us write JSON data. That namespace comes from a library that we haven’t included before. So if you try to run this as is, you’ll get an error like this: Execution error (FileNotFoundException) at hello/eval140$loading (hello.clj:2). Could not locate clojure/data/json__init.class, clojure/data/json.clj or clojure/data/json.cljc on classpath. That is how Clojure tells you it is missing a library. By looking at the library’s project page, we see that the latest stable release is \"2.5.0\" (at least, it is when this guide is being written!). We can add the library in the dependencies part of our deps.edn file: deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} org.clojure/data.json {:mvn/version \"2.5.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.10\"}}} Any time you change the dependencies, you will definitely need to restart your service. If you try this out, you’ll notice that absolutely nothing changed. That’s because the content negotiation interceptor handles the protocol, but it’s up to you to do something about the result. The interceptor runs the algorithm, then attaches the result to the request. That result is then available throughout the rest of processing. This is a great way to decompose your interceptors into small pieces that can be plugged together. It’s up to our service code to return a different body format depending on the accepted content type. It probably won’t surprise you that this is a job for another interceptor! Here’s our first stab at it. src/hello.clj (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (let [accepted (get-in context [:request :accept :field] \"text/plain\") (1) response 
1(get context :response) body (get response :body) (2) coerced-body (case accepted (3) \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body)) updated-response (assoc response (4) :headers {\"Content-Type\" accepted} :body coerced-body)] (assoc context :response updated-response)))}) (5) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor (6) content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) 1 Get the result of the content negotiation interceptor. Use \"text/plain\" as a fallback in case no suitable match was found. 2 Get the current response out of the context map, get the current body out of the response. This must have been created by a previous interceptor’s :enter or :leave function. 3 Translate the body according to the chosen content type. 4 Create a new response by attaching headers and the coerced body. 5 Return a new context by attaching the updated response. 6 Tell Pedestal to put this interceptor at the head of the queue. Why does this new interceptor go at the start of the vector? Take look at the picture of the interceptors above. The first one in the vector is called first for the :enter function but last for the :leave function. We want this interceptor to get the last word on the response body so it goes at the top. Turn the queue sideways to write it as a vector, and the topmost interceptor is on the left. It only takes a little bit to get used to this. Let’s try this out with curl. Restart your service and try sending in some curl requests with different \"Accept\" headers: > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:06:52 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html Transfer-Encoding: chunked Hello, world! Notice the content type returned by our service was \"text/html.\" Let’s try some others. Keep an eye on the \"Content-Type\" header in each response. > curl -i -H \"Accept: text/html\" http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:07:18 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html Transfer-Encoding: chunked Hello, world! > curl -i -H \"Accept: application/edn\" http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:08:07 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn Transfer-Encoding: chunked \"Hello, world!\\n\"% Notice when asking for the response in application/edn format, the string result was enclosed in quotes. So coerce-body-interceptor works as intended. As usual, I’ve written it in a fairly \"non-compact\" style so it is easier to see how the parts work with Pedestal. I see a couple of things we can improve though. First, there’s a straight-up bug. If a previous interceptor has already defined a content type, we should respect that and not overwrite the body or the headers. Second, we’re attaching a new headers map with only the \"Content-Type\" header. Any other headers attached by other interceptors will be lost. Finally, we could improve the testability by factoring out some of its logic into pure functions. We’re also going to touch up the echo interceptor while we’re at it. It is common style in Pedestal applications to make heavy use of the core functions like update and update-in. They are good at taking out a part of a nested data structure, applying a function to it, then reattaching the updated part. Let’s see how this interceptor would change if we refactor it that way. src/hello.clj (def echo {:name ::echo :enter #(assoc % :response 
1(ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (if (get-in context [:response :headers \"Content-Type\"]) context (update-in context [:response] coerce-to (accepted-type context))))}) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) We’re going to take one more step toward Clojure mastery. Do you see the coerce-body function? It looks inside the context. If there’s already a \"Content-Type\" header on the response, then it does nothing and returns the context without modification. On the other hand, if there is no content type assigned yet, it modifies the context by updating the response. This is a really common pattern in functional languages. You want to make a series of changes to a data structure, where each change is conditional on some other logic. In an imperative language, this would look like a series of if statements whose bodies each mutate the object being built. In Clojure, they would look like a deeply nested if special form, where each if returns either a modified or unmodified version of the input. The trouble with deeply nested `if`s is that it’s too easy to get lost in the nesting. This pattern is very common, and Clojure includes macros to help. The slightly tricky cond->footnote:\">That’s read out loud as \"cond arrow\". Once you master it, you’ll really level up in Clojure skills. macro is what we need here. cond-> is similar to the usual threading macro ->, but instead of a just a series of expressions, it precedes each expression with a condition; the condition is evaluated first, and only if true is the value threaded through the expression. In practice, it’s very straight forward: src/hello.clj (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (nil? (get-in context [:response :headers \"Content-Type\"])) (1) (update-in [:response] coerce-to (accepted-type context))))}) (2) 1 This is the test clause. It says \"if there is no Content-Type header\" 2 When the test is true, cond→ puts context in the second position here, right after the update-in If there were more clauses in the cond→, each clause would receive the value returned from the previous clauses. We’re now getting a fair bit of code. This would be a good time to think about splitting into namespaces for different responsibilities. We’ll tackle that some other time. For now, let’s take a look at the whole thing. Spend some time making sure you understand how and when each line of code gets invoked. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (defn ok [body] {:status 200 :body body}) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) (def echo {:name ::echo :enter #(assoc % :response (ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"a
1pplication/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (nil? (get-in context [:response :headers \"Content-Type\"])) (1) (update-in [:response] coerce-to (accepted-type context))))}) (2) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (defn start-dev [] (reset! server (http/start (http/create-server (assoc service-map ::http/join? false))))) (defn stop-dev [] (http/stop @server)) (defn restart [] ; (stop-dev) (start-dev)) In this guide, we built upon Hello World, With Parameters to add: Rudimentary content negotiation. Response body transforms. We also learned about interceptors and created a few. The truth is that server-side applications don’t vend out HTML nearly as much as they once did. APIs are where it’s at. In the next tutorial we will make a REST style API to serve up \"TO DO\" lists. 1. There’s also an error phase that we’ll not discuss in this guide 2. Actually, interceptors are added to the stack even if they don’t provide a :enter callback 3. That actually takes more words to explain in English than it does in code! 4. This is poorly named as it’s neither a Servlet nor an interceptor! 5. Or provided by create-service, such as the routing interceptor","title":"Hello World, With Content Types","component":"pedestal","version":"0.7","name":"hello-world-content-types","url":"/pedestal/0.7/guides/hello-world-content-types.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"The Hard Way","hash":"_the_hard_way","id":7},{"text":"Interceptors","hash":"_interceptors","id":8},{"text":"An Echo Interceptor","hash":"_an_echo_interceptor","id":9},{"text":"From Routes to Interceptors","hash":"_from_routes_to_interceptors","id":10},{"text":"Returning to Content Types","hash":"_returning_to_content_types","id":11},{"text":"Refactoring and Style","hash":"_refactoring_and_style","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where To Next?","hash":"_where_to_next","id":15}]},"75":{"id":75,"text":"Now that you’ve gone through the basics in the Hello World guide it’s time to go one level deeper. We’re going to add two features. That will be our vehicle to talk about some important concepts in Pedestal. After reading this guide, you will be able to: Accept query parameters. Use the request map. Apply logic in your handler. Conditionally return an error. Return HTML in your response. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the hello.clj example from the previous guide. We will enhance it to take a single parameter in the URL and return a friendly greeting to that person. There are some people we don’t want to meet, though. So we’ll also include a list of names that should not be said. Then we can make our handler function a bit smarter. If any forbidden name is uttered, our handler will return a 404 response instead of a cordial greeting. If you worked through Hello World, then you already have all the files you need. If not, take a moment to grab the sources from the repository. That will be our starting point for enhancements this time. HTTP offers a few different ways for the client to send data up to our service. The most basic is probably the URL query parameter. We usually see these on GET requests, but nothing stops a client from using them on other request types. Example 1. URL with Query Parameter http://localhost:8890/greet?name=Michael Because query parameters are so common, Pedestal handles them automatically. You can try that URL with your service r
1ight now. As a reminder, we’re running the server by using the clj tool to start an interactive session (called a REPL, rhymes with ripple) then starting the service in that session. Before we do that, though, let’s discuss interactive development. It’s really not optimal to be restarting your REPL in order to restart the service every time you need to make a change. In real Clojure development, we rarely restart the REPL. Instead, we make our system friendly to interactive development. The main problem so far is that starting the HTTP service doesn’t return. We can fix that by adding a key to the map that says \"return instead of waiting for the server to stop.\" src/hello.clj (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (1) (defn start-dev [] (reset! server (2) (http/start (http/create-server (assoc service-map ::http/join? false))))) (3) (defn stop-dev [] (http/stop @server)) (defn restart [] (4) (stop-dev) (start-dev)) 1 defonce here means we can recompile this file in the same REPL without overwriting the value in this atom. 2 reset! replaces the current value in the atom with the new value. 3 Tell Pedestal not to wait for the server to exit. You set ::http/join? to true when running in production so that your main function does not exit and terminate the process. 4 This is a quick way to bounce the server. The key ::http/join? does the trick. We can now run start-dev in our REPL sessions. Instead of waiting forever, the REPL thread now returns, prints the value of the server (an ugly mess!) and lets us continue interacting. This is how we are going to start things in dev from now on. Let’s try it out. First, let’s start the service. $ clj > clj Clojure 1.11.1 user=> (require 'hello) nil user=> (hello/start-dev) [main] INFO org.eclipse.jetty.server.Server - jetty-11.0.18; built: 2023-10-27T02:14:36.036Z; git: 5a9a771a9fbcb9d36993630850f612581b78c13f; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@549db1c6{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@2d3b708a{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started Server@5770b59f{STARTING}[11.0.18,sto=0] @15614ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835 0x4e27c500 \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@4e27c500\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15089 0x6dbd38e8 \"io.pedestal.http.jetty$server$fn__15089@6dbd38e8\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{}], :route-name :greet, :path-params []}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x1a183473 \"io.pedestal.http.servlet.FnServlet@1a183473\"], :server #object[org.eclipse.jetty.server.Server 0x351bfccc \"Server@351bfccc{STARTED}[9.4.52.v20230823]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15091 0x2d7956fb \"io.pedestal.http.jetty$server$fn__15091@2d7956fb\"]} user=> Whatever happened to \"no news is good news?\" Believe it or not, that is all successful output. The big glob at the end is the value of the server. It’s a big map with all the state in it. The most important thing to do with it is hang on to it so we can stop the server later. We do that by putting it in an atom. Now we can use start-dev, stop-dev, and restart as we make changes. From another window, let’s send a request with a query parameter. $ curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 17:45:24 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% What we’ve demonstrated is that Pedestal can route the incoming request, GET /greet?name=Michael and isn’t confused by the presence of the query parameter. Ultimately, the respond-hello function was invoked, and did its job. To update respond-hello to match our goal, we first have to discuss the request argument passed to it. Also, if you look in the console of your REPL, you’ll see that Pedestal logged the request: [qtp81639554-16] INFO io.pedestal.http - {:msg \"GET /greet\", :line 80} You’ll see slightly different results; the qtp part is the thread name, for example. The point is, you can look in the REPL session to verify that requests are being processed by your server. Here’s a reminder of what respond-hello currently looks like: (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) 1 The function takes one argument, which we call request 2 And it returns a map. We aren’t using the request argument right now, so we don’t really know what it is. (Well, it’s probably not too hard to guess that it has to do with the HTTP request that Pedestal received. From the title of this section, you probably also deduced that it’s a map!) Let’s take a look at that request by echoing it back to the client. This is a common debugging trick that you can use. (defn respond-hello [request] {:status 200 :body request}) (1) 1 Instead of returning the string \"Hello, world!\" we return the entire request as the response body. Make sure you’ve update the hello.clj file, then restart your service with that new definition: user=> (require :reload 'hello) nil user=> (hello/restart) [main] INFO org.eclipse.jetty.server.AbstractConnector - Stopped ServerConnector@4ab4f6d7{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Stopped o.e.j.s.ServletContextHandler@1227013b{/,null,STOPPED} [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@699a53d4{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@62832e24{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @667023ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835 0x1adcd53b \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@1adcd53b\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15089 0x4474a287 \"io.pedestal.http.jetty$server$fn__15089@4474a287\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{}], :route-name :greet, :path-params []}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x47c90585 \"io.pedestal.http.servlet.FnServlet@47c90585\"], :server #object[org.eclipse.jetty.server.Server 0x50091386 \"Server@50091386{STARTED}[9.4.52.v20230823]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15091 0x7cf6ea5b \"io.pedestal.http.jetty$server$fn__15091@7cf6ea5b\"]} user=> Again, this is in two steps: (require :reload …​) to update all the Clojure code, then (hello/restart) to stop the service and start a replacement, using the update functions. With the update code live, you can use curl again to see the change in the service’s behavior: > curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 17:54:46 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn Transfer-Encoding: chunked {:protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :params {:name \"Michael\"}, :servlet-response #object[org.eclipse.jetty.server.Response 0x702ce13 \"HTTP/1.1 200 \\nDate: Thu, 12 Oct 2023 17:54:46 GMT\\r\\nStrict-Transport-Security: max-age=31536000; includeSubdomains\\r\\nX-Frame-Options: DENY\\r\\nX-Content-Type-Options: nosniff\\r\\nX-XSS-Protection: 1; mode=block\\r\\nX-Download-Options: noopen\\r\\nX-Permitted-Cross-Domain-Policies: none\\r\\nContent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\\r\\nContent-Type: application/edn\\r\\n\\r\\n\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x47c90585 \"io.pedestal.http.servlet.FnServlet@47c90585\"], :headers {\"accept\" \"*/*\", \"user-agent\" \"curl/8.1.2\", \"host\" \"localhost:8890\"}, :server-port 8890, :servlet-request #object[org.eclipse.jetty.server.Request 0x74cc13e0 \"Request(GET //localhost:8890/greet?name=Michael)@74cc13e0\"], :query-params {:name \"Michael\"}, :path-info \"/greet\", :url-for #object[clojure.lang.Delay 0x340f2def {:status :pending, :val nil}], :uri \"/greet\", :server-name \"localhost\", :query-string \"name=Michael\", :path-params {}, :body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x20486b9d \"HttpInputOverHTTP@20486b9d[c=0,q=0,[0]=null,s=STREAM]\"], :scheme :http, :request-method :get, :context-path \"\"}% Yikes! We need to unpack that a bit to make sense out of it. It’s a Clojure map, just printed all in one long line. I’ll reformat it with some line breaks. Syntax highlighting will help us read it too. Feel free to paste this map into your favorite text editor with Clojure syntax highlighting to pick it apart yourself. I’m also going to omit several keys. They will be relevant later, but they’re not interesting now. And anyway, they don’t print very readably because they’re objects rather than data. Here’s what we are left with. { :protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :path-info \"/greet\", :uri \"/greet\", :query-string \"name=Michael\", :query-params {:name \"Michael\"}, :params {:name \"Michael\"}, :headers {\"user-agent\" \"curl/7.47.0\", \"accept\" \"*/*\", \"host\" \"localhost:8890\"}, :server-port 8890, :server-name \"localhost\", :path-params [], :scheme :http, :request-method :get } This is a request map. It really is just a Clojure map. You access its values with get and get-in. For now, we’ll look at three interesting keys. The whole query string appears under the :query-string key. That’s the portion of the URL after, but not including, the '?' character. The query string can be a pain to deal with. It is URL-encoded and may have multiple parameters with delimiters. Pedestal slices that up into a map of parameters for you, which is attached to the :query-params key. Each parameter name gets turned into a keyword. Parameter values are always strings, though, so you may still have to parse them a bit. You see that :params duplicates the same map as :query-params. Pedestal merges all the different kinds of parameters into one map for convenience. Most of the time, I know when I want a query parameter so I just use :query-params, though. Inside our handler function, the :name parameter is available inside a nested map. Let’s dig it out and add it to our response. src/hello.clj (defn respond-hello [request] (let [nm (get-in request [:query-params :name])] (1) {:status 200 :body (str \"Hello, \" nm \"\\n\")})) (2) 1 Extract the parameter, bind it to the name nm. 2 For the response body, concatenate \"Hello,\" and the parameter into a string. Here we can just grab the value right out of the map and use it in the response. You might notice that I’m using nm instead of spelling out name. That’s because I’ve been bitten many times in the past by a subtle issue. There is a clojure.core function called name. If I ever change my mind about what to call the parameter, I might end up using greeter in one place but forget and leave name in another place. In that case, I’d be returning a stringified representation of the clojure.core/name function instead of my parameter value! I’ve done this often enough that I just avoid shadowing core library symbols as a policy. Do the restart/reload dance again, and then use curl to try a few different requests with parameters. $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Pankaj Hello, Pankaj $ curl http://localhost:8890/greet\\?name=Geeta Hello, Geeta $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที Hello, ไอรีนซีพีชาไอที $ curl http://localhost:8890/greet\\?name=No%20One%20To%20Be%20Trifled%20With Hello, No One To Be Trifled With $ curl http://localhost:8890/greet\\?name= Hello, $ curl http://localhost:8890/greet Hello, Dang. We were doing really well right up until the end there. Obviously we need to do something smarter when the input is missing. Bad user input is a way of life on the web, so let’s not make an error out of this. Instead, we just won’t personalize the greeting. src/hello.clj (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (if (empty? nm) (1) \"Hello, world!\\n\" (2) (str \"Hello, \" nm \"\\n\"))] (3) {:status 200 :body resp})) (4) 1 Both nil and a zero-length string count as empty. 2 This is our fallback response. 3 And our personalized greeting. 4 Generating the response. Again, reload and restart, then try new requests with curl: $ curl http://localhost:8890/greet Hello, world! $ curl http://localhost:8890/greet\\?name= Hello, world! $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที Hello, ไอรีนซีพีชาไอที Much better! But our handler function is getting a bit unwieldy. I don’t mean that it is a whole six lines long, but rather that it mixes too many concerns. This function parses input
1s, applies \"domain\" logic, and deals with creating a response body. It would be better to refactor this to separate those concerns. src/hello.clj (defn ok [body] (1) {:status 200 :body body}) (defn greeting-for [nm] (2) (if (empty? nm) \"Hello, world!\\n\" (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (3) (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (ok resp))) 1 This function can generate any \"OK\" result. 2 Our logic is now separated. 3 The handler now coordinates the rest. This version separates the concerns nicely. One big benefit is that the greeting-for function is now easier to test. It’s just a pure function - no side effects - that doesn’t require any HTTP or Pedestal machinery to exercise. Likewise, that ok function is side-effect free and quite easy to test. Both functions are likely to get more complex, but each one will only deal with its own complexity. In this example, we’re treating the case of an empty name the same as if the name parameter just isn’t included. See if you can make the handler more strict so it will return a \"400 Bad Request\" response if the name parameter is present but zero length. There are some names that should not be spoken. Let’s enhance our service to avoid them. This will be a relatively simple change. We can hardcode the names as a set, then use that set as a function. (Clojure sets are functions that test for the presence of their argument in the set itself.) This part needs to go before greeting-for because we’ll use it to make a decision in that function. src/hello.clj (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) Now we need to think about our greeting function. Right now it returns a string. We want to make sure the user gets a 404 if the query names one of the forbidden ones. We could have greeting-for directly return the response map, but that starts to entangle the concerns we just factored out. We’ll do the simplest thing that could possibly work: is greeting-for returns nil, that means the request failed. src/hello.clj (defn ok [body] {:status 200 :body body}) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) Because there are now three possible conditions that can happen in respond-hello, I’ve changed from an if to cond expression. cond uses pairs of \"condition / value\" clauses. So if (unmentionables nm) returns any truthy value, then cond returns nil and stops evaluating. If (empty? nm) returns true, then cond returns the literal string \"Hello, world!\\n\" and nothing else. If neither of those happened, then cond sees the keyword :else as a condition[1]and the code continues to build the string the same way as before. A nested if would also have worked here. In fact cond is a macro that expands into a series of nested if expressions. All three of these conditions are kind of parallel in significance, so I like that they appear to be parallel in the structure of the code. The shape of the code mirrors the shape of my thinking about these cases. The second thing you’ll notice is that the handler now makes a decision whether to call our ok helper or the new function not-found. I do hope you weren’t expecting much in not-found! It’s as simple as it gets. Restart your service and give it a try: $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Rumplestiltskin Not found $ curl http://localhost:8890/greet\\?name=曹操 Not found $ curl http://localhost:8890/greet\\?name=voldemort Hello, voldemort $ curl http://localhost:8890/greet\\?name=He%20who%20must%20not%20be%20named Hello, He who must not be named Looks like it mostly works, though it has some trouble with different capitalization. Take a look at the docs for clojure.string and see if you can figure out how to make the comparison case-insensitive. Once again, we built this thing in small steps, so it may seem like there was a lot to deal with. The final product is still pretty small though. Here’s all the final code. src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) (defn ok [body] {:status 200 :body body}
1) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (1) (defn start-dev [] (reset! server (2) (http/start (http/create-server (assoc service-map ::http/join? false))))) (3) (defn stop-dev [] (http/stop @server)) (defn restart [] (4) (stop-dev) (start-dev)) deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.10\"}}} In this guide, we built upon Hello World to add: Query parameters General response functions \"Domain\" logic Conditional responses We also learned about the request map, which is central to any non-trivial handler, as well as one approach to dealing with invalid user input in the request. So far, almost all our responses have been plain text. (When we returned the request map in the body, the content type was actually application/edn but we can ignore that for now.) Plain text is ugly, so we want to be able to return HTML. Rich clients don’t like HTML so much, so we also want to return JSON sometimes. The next stop on this trail looks at how Pedestal handles content types and response bodies. This will also be our first taste of interceptors, Pedestal’s core unit of work. 1. Using :else for this purpose is just a common Clojure convention, any non-false/non-nil value would work equally well.","title":"Hello World, With Parameters","component":"pedestal","version":"0.7","name":"hello-world-query-parameters","url":"/pedestal/0.7/guides/hello-world-query-parameters.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Accepting Parameters","hash":"_accepting_parameters","id":7},{"text":"Interactive Development","hash":"_interactive_development","id":8},{"text":"Moving along","hash":"_moving_along","id":9},{"text":"The Request Map","hash":"_the_request_map","id":10},{"text":"Using the Parameter","hash":"_using_the_parameter","id":11},{"text":"Conditional Responses","hash":"_conditional_responses","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where to Next?","hash":"_where_to_next","id":15}]},"76":{"id":76,"text":"We’re glad you’ve decided to give Pedestal a try. We think it’s pretty powerful. Before we get into the heavy lifting though, we should start with some basics. After reading this guide, you will be able to: Create a Pedestal project from scratch. Define a route. Return a page on that route. Return plain text in your response. This guide is for beginners who are new to Pedestal. It doesn’t assume that you have any prior experience with Pedestal, Clojure, or any other Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We will be using the Clojure CLI tools to manage dependencies and download libraries. Refer to the Clojure Getting Started page for installation instructions and details. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. This guide shows fragments of code as we add them. Sometimes it helps to see the whole thing at once, so you can always check out The Whole Shebang at the end of this guide. In this guide, we’re going to take a series of small steps. We’ll see all the code to build a Pedestal service starting with an empty directory. The first time through, we will just do everything \"by hand\". This is a little more work in typing (or copy-and-pasting) but it will let you see how the pieces connect in the simplest possible use case. Pedestal services are written in Clojure code, which you then run on a Java Virtual Machine. You will need to have a Java Runtime Environment installed on your computer. Let’s make sure you’re up to date. Fire up a terminal and put in this command: $ java -version You should see some output something like this: > java -version openjdk version \"11.0.19\" 2023-04-18 LTS OpenJDK Runtime Environment Corretto-11.0.19.7.1 (build 11.0.19+7-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.19.7.1 (build 11.0.19+7-LTS, mixed mode) If you get an error, such as \"Command not found\" or some variation of that, you probably need to install Java. The second thing is to make sure that the Java version is at least 1.7. OK, so now that you are ready to run a Java applications, let’s move on to the Pedestal part. We’re going to start this project with an empty directory. In practice, most of the time you’ll generate a project from a template. But for now, it’s more important to see what the pieces are and how they fit together. I’m going to call my project 'hello-world'. Feel free to call yours something different, but it’s up to you to do the mental translation in the rest of this guide. $ mkdir hello-world $ c
1d hello-world A quick note on naming style. Clojure itself uses \"kebab case\" for its names. That’s lowercase words, separated with hyphens. When you have a long name, it looks like the letters have been skewered. Hence, kebab case. Since Clojure’s own libraries use this style, most applications and libraries do too. We need a place to keep our code. By convention, that’s in a src directory: $ mkdir src Now we’re going to create a file under \"src\" to hold our code. Call it \"src/hello.clj\". It’s going to start with a \"namespace declaration\". This tell Clojure what namespace to put the code into. (If you’re a Java programmer, you can think of a namespace as similar to a package name.) src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) 1 This namespace is called 'hello'. This almost always matches the filename. 2 We need to use the io.pedestal.http namespace, but would like to only type http later in the file. 3 We need to use the io.pedestal.http.route namespace, but would like to spell it as route later in the file. This is very similar to using import in Java or require in Ruby. It just makes some names from other namespaces available to us in this namespace. If you haven’t written any Clojure before, this syntax might look a little strange. The first thing that jumps out at people is the parentheses. Why is there an open paren before the \"ns\"? In Clojure, every expression is enclosed in its very own set of parentheses. There are no semicolons to end the line or curly braces to close an \"if\" expression. To find the end of any expression, you just find the matching paren. The first thing in an expression is the function or a macro to call. In this case ns is a macro that is built in to Clojure. It sets up a namespace and makes the stuff we :require available. Speaking of the stuff we require, what is io.pedestal.http and io.pedestal.http.route? Those are each namespaces from Pedestal libraries. The io.pedestal.http namespace has functions that let you set up HTTP servers, handle requests, and send responses. The io.pedestal.http.route namespace actually comes from a library dedicated to routing (ingeniously named pedestal.route.) Where the :require says :as something it means we’re making an alias inside our namespace. So io.pedestal.http will be available as just http and io.pedestal.http.route will be available as route. Aliases don’t change anything about the semantics of the namespace we’re bringing in. They just save us some typing. Routing is split off into its own library because you can use it by itself, or you can use the HTTP library with a different routing layer. We won’t need to do that in this guide, but other tutorials do some pretty amazing things by substituting modules. Also, don’t worry about the indentation. Your editor might handle that for you, but in any case, Clojure doesn’t care about whitespace. Whew. That was a lot to unpack from just the first three lines of code! Let’s pause for a moment to talk about the next steps. We’re making a web service that can say hello. That means we need to do some basic things: Listen to on a socket for HTTP requests. Figure out what any given request means. Make a response to that request. We’re going to do all of those things, but we’re going to do them backwards. In Clojure, you always find the most important, highest-level functions at the bottom of the file. Whenever I read a Clojure source file, I start at the bottom and page upward. So the next thing we’re going to do is write a function that can return a response to a \"hello world\" request. src/hello.clj (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) 1 Define a function called respond-hello that takes a single argument, which we will call request 2 Return a map with two keys and two values. A Clojure function returns the value of the last expression in the function. In this case, that will be the map that we construct on line 2. This is in \"map literal\" syntax, which just means that we’re writing the whole map straight in the source code rather than building it up by calling functions. The map has two keys and their values: :status 200 :body \"Hello, world!\" That’s the whole thing. When our function returns that map, Pedestal will translate that into a full HTTP response complete with content type header and everything. Later on, we’ll see how to take control of the whole response. For now we’re just taking the easy road. There’s absolutely nothing special about this map. It’s a plain old Clojure map - this is how Clojure operates, we don’t use classes, we use ordinary maps but care about what particular keys are in the map. This is a response map. Clojure is a functional language, which means that whenever possible, we create simple functions that have no side-effects: their behavior is defined only by the arguments passed in. This trivial respond-hello handler function is functional — it can be tested entirely by invoking it, passing in a request map, and making assertions about at the response map it returns. There’s no need to start up a server and send a request to it via HTTP, you can just have your tests call this code directly. That’s one of the beauties of working in Clojure and Pedestal…​ you can try everything interactively in a running system. Let’s do that before we move on. Pedestal is built on the shoulders of giants, in the form of great open source technology that many people have contributed to. That gives us great power, but with great power comes great dependencies. We could download all the jar files we need and string together a classpath, but it’s a huge pain. I just made a minimal project and found 57 entries on the classpath. This is why we can have nice things, but it means we need some help managing those dependencies. Fortunately, Clojure provides tooling for dependency management. We’ll be using the clj tool to run our examples. Please take a few minutes to learn more, then come back and we’ll continue. Now we can make a deps.edn that tells the clj tool what libraries our service needs. This goes in the main directory hello: deps.edn {:paths [\"src\"] (1) :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} (2) org.slf4j/slf4j-simple {:mvn/version \"2.0.10\"}}} 1 Tell clj where our source code lives. 2 Tell clj we need pedestal.jetty and a logging library. We talked about pede
1stal.service and pedestal.route before, but we have a new one here. Pedestal works with many different HTTP servers, so we don’t want the core library to depend on all of the possible servers out there. Instead, we let you decide which one to use by adding the library for your chosen service. We’re using Jetty for this guide. It is a fast, stable, and mature HTTP server. Best of all, it doesn’t require any installation ahead of time…​ we can start it up from inside our service. That makes our service more self-contained and portable. Let’s try out our response function. > clj Downloading: io/pedestal/pedestal.jetty/0.6.1/pedestal.jetty-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.service/0.6.1/pedestal.service-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.log/0.6.1/pedestal.log-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.route/0.6.1/pedestal.route-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.interceptor/0.6.1/pedestal.interceptor-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.interceptor/0.6.1/pedestal.interceptor-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.log/0.6.1/pedestal.log-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.jetty/0.6.1/pedestal.jetty-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.service/0.6.1/pedestal.service-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.route/0.6.1/pedestal.route-0.6.1.jar from clojars Clojure 1.11.1 user=> The downloads only occur the first time you run the service; you can also see that the pedestal.jetty library brings in further dependencies on the other parts of Pedestal: pedestal.log, pedestal.service, etc. The exact libraries and versions downloaded will vary with the exact version of Pedestal. The clj tool will download dependencies as needed, add them to the classpath and start a repl in the user namespace. Now we’re able to enter Clojure code to evaluate it (turn it into a value). The first thing we need to do is tell Clojure about our hello namespace: user=> (require 'hello) nil user=> The require function returns nil on success, which the Clojure REPL printed. If instead, you get a message like this: user=> (require hello) Syntax error compiling at (REPL:1:1). Unable to resolve symbol: hello in this context It means you missed the single-quote before \"hello\" in the require. Now we can actually test the function: user=> (hello/respond-hello {}) {:status 200, :body \"Hello, world!\"} Well, we got the singularly unexciting result that we can call a function and it returns the map that we told it to. Let’s move on to hooking this up to a route. It’s worth noting that we passed in an empty map ({}) rather than a full request map. This is perfectly acceptable for testing; in fact we could have even passed a nil, as the respond-hello function doesn’t actually use the request parameter. In Pedestal, routing is the process of matching an incoming request to a handler [1]. Let’s tell Pedestal that we want the route GET /greet to map to our handler function: src/hello.clj (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) 1 We specify routes in a short notation, but they must be expanded and turned into a Router for use. 2 This is the \"table syntax\". There are several formats that can be passed to expand-routes. This routing table is a single route; the route matches: The GET HTTP method The URL /greet When routed in a live service, the respond-hello function will be invoked. We’ve named this route :greet. Every route must have a unique name, though in many cases, Pedestal can automatically provide a reasonable name. We’re building up gradually, and have yet to hook this up to an HTTP server, but it’s still possible to test the routing by hand (using code that c
1ould eventually be used in a test suite). user=> (require :reload 'hello) nil user=> (require '[io.pedestal.http.route :as route]) nil user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :get) {:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{:name }], :route-name :greet, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[clojure.core$constantly$fn__6443 0x6182d451 \"clojure.core$constantly$fn__6443@6182d451\"]} user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :post) nil user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :put) nil The first thing we need to do is tell Clojure to reload the latest code from hello.clj. That’s what the :reload keyword does in the require call. Without that, you’ll get a \"cannot resolve symbol\" error when you try to reference hello/routes. The function try-routing-for lets us ask \"What would Pedestal do?\" with an incoming HTTP request. We gave it our table of one route, a magic keyword :prefix-tree, then the query string and HTTP verb. try-routing-for uses the example routing table, from hello/routes, and the router type, :prefix-tree, to create a temporary router; it then passes the provided method (:get) and path, /greet, so see how it would be routed; if the route matches, a routing entry is returned, which identifies what was matched, and would be used in a live Pedestal application. When no route in the table matches, try-routing-for will return nil. The REPL sessions shows that a GET to /greet will be match, but a PUT or POST will not. On a match, try-routing-for returns an expanded version of the route that was matched (this is the internal format, which is much more cumbersome than the table format we used to define the route); further, some specific details about what was matched was also included. You might ask, \"where is my respond-hello function in all that?\" …​ part of what expand-routes does is to convert your handler function into Pedestal’s native unit of work, an interceptor. We’re ready for that last step: connecting everything to an HTTP server. That’s one more function (at the end of the file) to create the server. src/hello.clj (defn create-server [] (http/create-server (1) {::http/routes routes (2) ::http/type :jetty (3) ::http/port 8890})) (4) (defn start [] (http/start (create-server))) (5) 1 io.pedestal.http/create-server is a convenience function that builds everything in one step. 2 This is where we tell Pedestal which routes to use for this service. 3 We tell Pedestal that we want to use Jetty as our HTTP responder. 4 Port 8080 is so boring. We’ll use something different, but not too different. 5 Start the server. This will not return. All we need to do now is run it. user=> (require :reload 'hello) nil user=> (hello/start) Yep, it didn’t return. Jetty is running and listening for connections, though. Flip to a different window and try curl or use a browser to hit http://127.0.0.1:8890/greet. $ curl -i http://127.0.0.1:8890/greet HTTP/1.1 200 OK Date: Fri, 20 Sep 2019 15:33:53 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world! It’s alive! Treat yourself to a hot beverage and a high five. Whenever you get tired of poking it, just hit Control-C in the terminal that is running the server to kill it. Later on, we’ll see how to make Jetty run on its own thread so you can get your REPL prompt back. This might seem complicated because I’ve used so many words to describe all this. The code is pretty short though. For reference, and in case you’ve hit any snags along the way, here are the complete contents of both files. src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) (defn create-server [] (http/create-server (1) {::http/routes routes (2) ::http/type :jetty (3) ::http/port 8890})) (4) (defn start [] (http/start (create-server))) (5) deps.edn {:paths [\"src\"] (1) :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} (2) org.slf4j/slf4j-simple {:mvn/version \"2.0.10\"}}} You can also see all the code in the GitHub repository for this guide. We’ve c
1overed a lot of ground in this guide. You have learned how to: Start a Pedestal project from scratch. Write a function to return a response. Define routes for Pedestal. Run a Jetty server that handles those routes. Along the way you’ve also learned a bit of Clojure and some debugging tricks. The next part in this tutorial adds the ability to receive a query parameter, apply logic to it, and return a different response for an error. 1. We’re simplifying here, we’ll get around to discussing interceptors soon","title":"Hello World","component":"pedestal","version":"0.7","name":"hello-world","url":"/pedestal/0.7/guides/hello-world.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Starting From Scratch","hash":"_starting_from_scratch","id":7},{"text":"A Place to Put Things","hash":"_a_place_to_put_things","id":8},{"text":"Generating a Response","hash":"_generating_a_response","id":9},{"text":"Managing Dependencies","hash":"_managing_dependencies","id":10},{"text":"Routes","hash":"_routes","id":11},{"text":"Hooking It All Up","hash":"_hooking_it_all_up","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where to Next?","hash":"_where_to_next","id":15}]},"77":{"id":77,"text":"As Clojure developers, we prefer to live at the REPL, loading and reloading code into the REPL for a lightning fast feedback loop. It’s common to reload a namespace, and use the REPL (possibly via IDE support) to re-evaluate expressions in our code and see the immediate change. This is true for Pedestal apps as well …​ we should be able to make changes and see the effects of those changes immediately. But as we’ll see, in practice, accomplishing that takes a little extra structure. We’re going to show examples of the live reloading failures, then show simple solutions. Let’s start with yet another basic, \"Hello World\" application. (ns org.example.hello (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route]) (defn hello-handler [_request] (1) {:status 200 :body \"Hello, World!\"}) (def routes #{[\"/hello\" :get hello-handler :route-name ::hello]}) (2) (defn start [] (-> {::http/port 9999 ::http/routes routes ::http/type :jetty ::http/join? false} (3) http/create-server http/start)) (defonce server (atom nil)) (4) 1 The request map isn’t used here, so we follow the convention of adding a leading underscore; this may also prevent warnings in your IDE. 2 Every route must have a unique :route-name and since we are providing a function, hello-handler, it must be explicitly specified. 3 Normally, the call to io.pedestal.http/start doesn’t return (until something else shuts down the server); adding ::http/join? false is necessary for REPL-oriented development. 4 To survive reloading of this namespace, the running server is stored in an Atom. With that in place, evaluate (reset! server (start)); this will create the server and start it, storing the running system map back into the server atom. You can now use your favorite HTTP client (such as HTTPIe) to access the /hello route: > http :9999/hello HTTP/1.1 200 OK Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Date: Fri, 18 Nov 2022 23:41:49 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains Transfer-Encoding: chunked X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: DENY X-Permitted-Cross-Domain-Policies: none X-XSS-Protection: 1; mode=block Hello, World! So far, so good. You can also see that Pedestal’s default set of interceptors has added a number of security-related headers to the response. Now we’re ready to make a change. Let’s change the response body to be Hello, Clojure World!. We can change the hello-handler function, reload the namespace, and: > http -pb :9999/hello (1) Hello, World! 1 The -pb option prints just the response body, omitting the response headers. That’s strange. It’s as if the code change wasn’t picked up. We can verify that the code change is, in fact, live by evaluating (hello-handler nil) at the REPL: (hello-handler nil) => {:status 200, :body \"Hello, Clojure World!\"} What’s happened here is that the value of the org.example.hello/hello-handler Var has changed; it now holds a new Clojure function, one that says \"Hello, Clojure World!\". However, the routes and start functions captured the value of hello-handler at the time they executed. We could say ugh, fine and just adapt to a cycle where you reload your REPL code and then restart the server object, but that’s slow and error-prone. We want a fast feedback cycle where that is not necessary, and that goal is entirely achievable. The first step is to stop the service by evaluating (swap! server http/stop). Next, change the routes function: (def routes #{[\"/hello\" :get `hello-handler]}) Notice that backtick character before hello-handler. That’s Clojure’s syntax quote; like a single quote, it keeps hello-handler from being evaluated, but unlike single quote, the symbol is namespace qualified. It’s the equivalent of 'org.example.hello/hello-handler. To understand what’s going on here, we must consider a key stage in Pedestal: route expansion. Route expansion is a step during service startup where the provided routes are converted from one of a number of specifications (such as the table format used here) into an executable format. Part of expansion is a rule that says that a handler that’s a symbol is replaced with the evaluation of that symbol. That’s when org.example.hello/hello-handler is converted from a symbol to function. Notice that we also no longer have to specify a :route-name; with a handler symbol, a default route name is generated that’s a keyword ver
1sion of the symbol. Now, change the function to return \"Hello, Programming World!\", reload the namespace, and get the /hello URL again: > http -pb :9999/hello Hello, Clojure World! What gives? Where’s our reloading? Because of the back-ticked symbol, the evaluation of hello-handler occurred later than in the original code, not inside the routes definition, but somewhere inside the call to create-server …​ but that evaluation and expansion still only happens once, and so there’s still a capture. We need the route to always reflect the live version of the hello-handler function, and that means we have to avoid capture, not just of the hello-handler function, but of the entire route specification. Fortunately, Pedestal supports this use case - a route is normally a data structure, but it can also be a zero-arguments function that returns an expanded route specification. Stop the service and make these changes: (ns org.example.hello (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route])) (1) (defn hello-handler [_request] {:status 200 :body \"Hello, Clojure World!\"}) (2) (def routes #{[\"/hello\" :get `hello-handler]}) (defn start [] (-> {::http/port 9999 ::http/routes #(route/expand-routes routes) (3) ::http/type :jetty ::http/join? false} http/create-server http/start)) 1 We need this additional namespace, route. 2 Change the message back. 3 This new route function returns the expanded routes. Reload and restart the server, and check that we are getting the original behavior: > http -pb :9999/hello Hello, Clojure World! Now, change the message to Hello, JVM World!, reload the namespace, then reload the URL: > http -pb :9999/hello Hello, JVM World! Success! The route function is being evaluated on every incoming request. Not For Production Using a function, as we do here, is absolutely not for production. Even a trivial route specification takes a chunk of time to expand, so doing it on every single request will absolutely trash your production server’s throughput. Still, we’re not quite done. Let’s say we want to be less formal, and respond on the path /hi instead of /hello. We can change the routes: (def routes #{[\"/hi\" :get `hello-handler]}) But this still doesn’t live-reload as we’d expect: > http :9999/hi HTTP/1.1 404 Not Found Content-Type: text/plain Date: Sat, 19 Nov 2022 00:28:29 GMT Transfer-Encoding: chunked Not Found There’s still one more capture: the anonymous function is capturing the value of the routes set. The anonymous function has a lifecycle that starts when the start function is executed, and the routes set’s value is captured at that point in time. In order for route changes to load, we have to ensure that the anonymous route function always returns the current value of routes. Change the route back to /hello and modify the start function: (defn start [] (-> {::http/port 9999 ::http/routes #(route/expand-routes (deref (var routes))) ::http/type :jetty ::http/join? false} http/create-server http/start)) Stop and restart the server, and verify that /hello still works. Now, update the route back to /hi, reload the namespace, and check: > http -pb :9999/hi Hello, JVM World! Done! You can now add, remove, or otherwise change your routes, update interceptors, add constraints …​ wherever your development takes you, and those changes will be re-evaluated and re-loaded on each request. How does this work? The (var routes) captures the Var named routes (rather than the value stored inside the Var), and the deref pulls the current route specification out of the Var, This happens on every invocation of the function - on every request. If you like, you can abbreviate (deref (var routes)) to @#'routes. It’s not very desirable to have to keep two separate start functions, one for production, and one for REPL oriented development …​ especially given how badly throughput will be affected if the local REPL version leaks through to production. So to simplify things, the startup code can be changed to use the routes-from macro: (defn start [] (-> {::http/port 9999 ::http/routes (route/routes-from routes) ::http/type :jetty ::http/join? false} http/create-server http/start)) routes-from is aware of the Pedestal execution mode. By default, routes-from operates in production mode, so (route/routes-from routes) evaluates to just routes - no deferred evaluation, no rebuild of the routing table on each request, which is just what we want in production. However, in local development mode, (route/routes-from routes) expands (approximately) to #(expand-routes (deref (var routes))) …​ the same code we used above, to delay route evaluation. Further, in local development mode, Pedestal will write a formatted routing table to the console at startup, and at any later time that the routing table changes: Routing table: ┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Method ┃ Path ┃ Name ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ :get ┃ /hello ┃ :io.example.hello/hello ┃ ┗━━━━━━━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━┛ This output is especially useful to know the correct route name to pass to url-for (to generate application URLs included in responses) or response-for (used in your unit tests). Ru
1nning code with a long-lived and stateful service creates its own challenges when coding live at the REPL; in this guide we’ve explained how capturing interferes with live reloading, and provided the necessary steps to keep your REPL flowing as you develop your application. Just remember …​ you want to make sure your production application doesn’t use these reloading techniques if you want to meet your SLAs (service level agreements)!","title":"Reloading at the REPL","component":"pedestal","version":"0.7","name":"live-repl","url":"/pedestal/0.7/guides/live-repl.html","titles":[{"text":"Starting Point","hash":"_starting_point","id":1},{"text":"Deferred Route Function","hash":"_deferred_route_function","id":2},{"text":"Delaying Route Evaluation","hash":"_delaying_route_evaluation","id":3},{"text":"Using routes-from","hash":"_using_routes_from","id":4},{"text":"Wrap Up","hash":"_wrap_up","id":5}]},"78":{"id":78,"text":"Component is a popular and non-intrusive library for organizing Clojure logic; it makes it easy to define components, as maps or Clojure records, and organize them, with intra-component dependencies, into a system map. It’s not uncommon for Pedestal to be setup to operate as a component with a Component system. After reading this guide you will be able to: Create a Component-based service using Pedestal. Test your service using Pedestal’s test helpers. This guide is for users who are familiar with: Clojure Pedestal Clojure’s CLI tooling Component If you are new to Pedestal, you may want to go back to the Hello World guide. If you’re new to Component, you should definitely check it out first. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we’re going to step through creating a Pedestal service using Component. We’ll start off by creating a Pedestal component and wire it into a Component system map. We’ll then proceed to testing our service. We’ll limit our component’s responsibilities to lifecycle management of the Pedestal HTTP server and provider. We’ll also expose the Pedestal service function (:io.pedestal.http/service-fn) upon component initialization as a convenience for testing. Route or interceptor management will not be a component responsibility because the management of routes/interceptors is more of an application-specific concern. This may be familiar to you if you studied the way the Pedestal lein template lays out a Pedestal service - routes, interceptors and configuration is kept separate from service plumbing. Finally, Pedestal service configuration, captured via a service map, will be a component dependency. Now that we have a better idea of what we want our component to do, let’s go build it! The first step is to create a project directory to contain the project sources, then create a deps.edn file, to capture the dependencies of our application. deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} com.stuartsierra/component {:mvn/version \"1.1.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"} com.stuartsierra/component.repl {:mvn/version \"0.2.0\"}} :aliases {:test {:extra-paths [\"test\"] :extra-deps {io.github.cognitect-labs/test-runner {:git/tag \"v0.5.1\" :git/sha \"dfb30dd\"}} :exec-fn cognitect.test-runner.api/test}}} Next, create a src directory, and a pedestal.clj file within it: src/pedestal.clj (ns pedestal (1) (:require [com.stuartsierra.component :as component] (2) [io.pedestal.http :as http])) (3) 1 Create a pedestal namespace to house the Pedestal component. 2 We need to require com.stuartsierra.component namespace to make the start and stop Lifecycle methods available. 3 We need to require the io.pedestal.http namespace for server creation, starting and stopping. Let’s start implementing the component: (defrecord Pedestal [service-map (1) service] component/Lifecycle (2) 1 Create a Pedestal record. This record will contain a service-map field, whose value will be supplied from another component, and a server field, managed by the Pedestal component, which is the server created from the service map. 2 Include the component/Lifecycle protocol since we’ll be implementing its methods next. We’ll first implement the start method. It will contain our component initialization code. (start [this] (if service (1) this (assoc this :service (2) (cond-> (http/create-server service-map) (3) (not (test? service-map)) http/start)))) (4) 1 If the service is already running (because you mistakenly invoked component/start-system on an already started system), let it keep running[1]. 2 Update the service field of the Pedestal component with the newly created, and optionally started, service. 3 create-server returns a server map, which can be started via start. 4 In test mode, don’t start the server (the HTTP part), but we’ll still be able to feed requests into the interceptor pipeline. If you’ve read some of the other guides, this implementation should look somewhat familiar. It’s a combination of the server-specific code used in the Hello World guide. Before we go on, remember the test? function? It’s idiomatic in Pedestal services to include an :env key in the service map to communicate the environment of the service. This currently does not affect the behavior of the service, but it’s a useful marker. Our component will leverage this idiom and will not start/stop the server if the service is configured for the test environment. The implementation is included below. (defn test? [service-map] (= :test (:env service-map))) Now let’s implement the stop method. It will contain our component teardown code. (stop [this] (when (and service (not (test? service-map))) (1) (http/stop service)) (assoc this :service nil))) (2) 1 Like start, stop will be idempotent. If the component has been initialized and we’re not working with the test environment, we’ll pass the initialized service map to the stop function. 2 Return the component with the service field set to nil. You can’t use dissoc here since it would return a plain map, breaking the component by convert
1ing it from a Pedestal record to a plain Clojure map. Now that we’ve got our component, we need a way to create and initialize an instance of it. Let’s tackle that next: (defn new-pedestal [] (map->Pedestal {})) Our component constructor is just a wrapper around the map-specific record constructor created by defrecord. The defrecord macro creates a number of constructors and any of them could be used here. It’s common to create a simple wrapper function, as shown here; quite often, components grow to need additional setup and initialization which can occur in this kind of creation function. Now that we’ve got our Pedestal component, let’s proceed to wiring it into a full-fledged system. Create a routes.clj file. This file will contain our routes and handlers. src/routes.clj (ns routes) (defn respond-hello [request] {:status 200 :body \"Hello, world!\"}) The respond-hello handler returns a simple static response. It may look familiar since it made its first appearance in the Hello World guide. Finally, let’s implement the routes. (def routes #{[\"/greet\" :get respond-hello :route-name :greet]}) We’ll implement a single route, GET /greet, using Pedestal’s tabular routing syntax. In this simple example, we use def, as the routes are entirely static. In many applications, some parts of the routes would be more dynamic, and routes would be a function with arguments. Now that we’ve got our Pedestal Component and routes, we can wire them up in a Component system map. Create a system.clj file. This file will contain our system map and system constructor. src/system.clj (ns system (:require [com.stuartsierra.component :as component] (1) [com.stuartsierra.component.repl :refer [reset set-init start stop system]] (2) [io.pedestal.http :as http] (3) pedestal (4) routes)) (5) 1 Require com.stuartsierra.component. It will be used to create the Component system map. 2 Require component.repl for its system management functions. You would normally do this in a dev namespace. 3 Require io.pedestal.http for the server start and stop functions. 4 Require pedestal for the Pedestal component. 5 Require routes for the application routes. Let’s create a system initialization function named system. (defn new-system [env] (1) (component/system-map :service-map (2) {:env env (3) ::http/routes routes/routes (4) ::http/type :jetty ::http/port 8890 ::http/join? false} :pedestal (5) (component/using (6) (pedestal/new-pedestal) [:service-map]))) 1 It will take the system environment as a single parameter. We’ll use keywords like :prod or :test for this. 2 The system map will contain a :service-map key whose value is a Pedestal service map. This is still a component, even though it is purely data. 3 The service map’s :env key will map to our environment keyword. 4 We’ll configure the service map with our app-specific routes. 5 The system map will contain a :pedestal key whose value is an uninitialized Pedestal component. 6 The Pedestal component depends on the service map, so we will capture that dependency with component/using. The next step sets up the use of the component.repl library. (set-init (fn [old-system] (new-system :prod))) The set-init function stores a function that is used to start (or restart) the system. When start or reset is invoked, this function is passed the old system (or nil if there is no old system), and the function returns the new, but unstarted, system. We’ll use clj tool to run our example. This should be familiar to you if you read through the Hello World. From the project’s root directory, fire up a repl, and start the system. > clj Clojure 1.11.1 user=> (require 'system) nil user=> (require '[com.stuartsierra.component.repl :as crepl]) nil user=> (crepl/start) [main] INFO org.eclipse.jetty.util.log - Logging initialized @43694ms to org.eclipse.jetty.util.log.Slf4jLog [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@b1078f2{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@70ab102c{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @43830ms :ok user=> You can now interact with the started service. > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Tue, 17 Oct 2023 22:22:25 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% > Let’s stop the system. user=> (crepl/stop) [main] INFO org.eclipse.jetty.server.AbstractConnector - Stopped ServerConnector@49b7eb3{HTTP/1.1,[http/1.1, h2c]}{localhost:8890} [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Stopped o.e.j.s.ServletContextHandler@17c4dcc6{/,null,UNAVAILABLE} :ok Our service is no longer available. $ curl -i http://localhost:8890/greet curl: (7) Failed to connect to localhost port 8890: Connection refused Let’s start it again! user=> (crepl/start) [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@185d151b{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@5dce3e{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @150674ms :ok user=> It’s available again. > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Tue, 17 Oct 2023 22:23:22 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% > The Component design pattern ensures that the system is in the correct state no matter how many times we do this. Let’s move on to testing our new service. Recall that our service contains one route, GET /greet. We’d like to verify that it returns the proper greeting. Before we can jump in and do that, though, we need to create some helpers. Some are just useful in general, while others are specific to our component implementation. Don’t worry, you won’t have to write too much code. Let’s do it! First create a system_test.clj file in the src directory. test/system_test.clj (ns system-test (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :refer [response-for]] [com.stuartsierra.component :as component] [clojure.test :refer :all] routes system pedestal)) The system-test namespace requires all the dependencies necessary for testing. Now let’s get to those helpers. The url-for helper allows us to refer to routes by route-name. This is very useful, and is almost always adapted into new projects. (def url-for (route/url-for-routes (route/expand-routes routes/routes))) We need to expand the routes before invoking Pedestal’s url-for-routes function. The end result is that url-for is a function The service-fn helper extracts the Pedestal ::http/service-fn from the started system. This helper allows us to keep focus on our tests rather than test initialization. (defn service-fn [system] (get-in system [:pedestal :service ::http/service-fn])) The with-system macro allows us to start/stop systems between test executions. We’ll model its design on macros like with-open and with-redefs so that its shape and usage is familiar. (defmacro with-system [[bound-var binding-expr] & body] `(let [~bound-var (component/start ~binding-expr)] (try ~@body (finally (component/stop ~bound-var))))) Now that we’ve got our helpers implemented, let’s move on to our test. Create a test named greeting-test. (deftest greeting-test (with-system [sut (system/new-system :test)] (1) (let [service (service-fn sut) (2) {:keys [status body]} (response-for service :get (url-for :greet))] (3) (is (= 200 status)) (4) (is (= \"Hello, world!\" body))))) (5) 1 sut (for system under test) will be bound to the started system by with-system. Notice how :test is passed as the system environment key;
1 this ensures that the server does not start, and no HTTP port is bound. 2 Use the service-fn helper to extract the Pedestal service function from the started system. 3 Use Pedestal’s response-for test helper to make a test request to the :greet route. Use the url-for helper to refer to the route by name. 4 We should get back a '200' status. 5 We should get back a response body of 'Hello, world!' Now let’s restart run the tests from the command line: > clj -X:test Running tests in #{\"test\"} Testing system-test [main] INFO io.pedestal.http - {:msg \"GET /greet\", :line 90} Ran 1 tests containing 2 assertions. 0 failures, 0 errors. > That’s it! You now know the fundamentals necessary for implementing and testing your Component-based Pedestal services. For reference, here are the complete contents of all the files. src/pedestal.clj (ns pedestal ;; <1> (:require [com.stuartsierra.component :as component] ;; <2> [io.pedestal.http :as http])) ;; <3> (defn test? [service-map] (= :test (:env service-map))) (defrecord Pedestal [service-map ;; <1> service] component/Lifecycle ;; <2> (start [this] (if service ;; <1> this (assoc this :service ;; <2> (cond-> (http/create-server service-map) ;; <3> (not (test? service-map)) http/start)))) ;; <4> (stop [this] (when (and service (not (test? service-map))) ;; <1> (http/stop service)) (assoc this :service nil))) ;; <2> (defn new-pedestal [] (map->Pedestal {})) src/routes.clj (ns routes) (defn respond-hello [request] {:status 200 :body \"Hello, world!\"}) (def routes #{[\"/greet\" :get respond-hello :route-name :greet]}) src/system.clj (ns system (:require [com.stuartsierra.component :as component] ;; <1> [com.stuartsierra.component.repl :refer [reset set-init start stop system]] ;; <2> [io.pedestal.http :as http] ;; <3> pedestal ;; <4> routes)) ;; <5> (defn new-system [env] ;; <1> (component/system-map :service-map ;; <2> {:env env ;; <3> ::http/routes routes/routes ;; <4> ::http/type :jetty ::http/port 8890 ::http/join? false} :pedestal ;; <5> (component/using ;; <6> (pedestal/new-pedestal) [:service-map]))) (set-init (fn [old-system] (new-system :prod))) test/system_test.clj (ns system-test (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :refer [response-for]] [com.stuartsierra.component :as component] [clojure.test :refer :all] routes system pedestal)) (def url-for (route/url-for-routes (route/expand-routes routes/routes))) (defn service-fn [system] (get-in system [:pedestal :service ::http/service-fn])) (defmacro with-system [[bound-var binding-expr] & body] `(let [~bound-var (component/start ~binding-expr)] (try ~@body (finally (component/stop ~bound-var))))) (deftest greeting-test (with-system [sut (system/new-system :test)] ;; <1> (let [service (service-fn sut) ;; <2> {:keys [status body]} (response-for service :get (url-for :greet))] ;; <3> (is (= 200 status)) ;; <4> (is (= \"Hello, world!\" body))))) ;; <5> deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} com.stuartsierra/component {:mvn/version \"1.1.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"} com.stuartsierra/component.repl {:mvn/version \"0.2.0\"}} :aliases {:test {:extra-paths [\"test\"] :extra-deps {io.github.cognitect-labs/test-runner {:git/tag \"v0.5.1\" :git/sha \"dfb30dd\"}} :exec-fn cognitect.test-runner.api/test}}} At the beginning of this guide, we set out to create a Pedestal component, demonstrate its usage as well as how to test it without starting the http server. In the process, we also introduced a few general purpose test helpers. Keep in mind that Pedestal services are highly configurable. It’s important to separate that configuration from the core component implementation. By limiting our component’s responsibilities to http server and Pedestal provider life cycle support, we can use it in a wide variety of Pedestal implementations. 1. This is useful for REPL-driven development, where mistakes happen. Without it, you may end up with a \"zombie\" Pedestal component and Jetty service keeping the port bound.","title":"Using Pedestal With Component","component":"pede
1stal","version":"0.7","name":"pedestal-with-component","url":"/pedestal/0.7/guides/pedestal-with-component.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":2},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":3},{"text":"Where We Are Going","hash":"_where_we_are_going","id":4},{"text":"Before We Begin","hash":"_before_we_begin","id":5},{"text":"Initial Project","hash":"_initial_project","id":6},{"text":"A Simple Pedestal Component","hash":"_a_simple_pedestal_component","id":7},{"text":"Wiring it up","hash":"_wiring_it_up","id":8},{"text":"Running It","hash":"_running_it","id":9},{"text":"Testing","hash":"_testing","id":10},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":11},{"text":"The Path So Far","hash":"_the_path_so_far","id":12}]},"79":{"id":79,"text":"Server-sent events (SSE) make it possible to stream events to a client application. They are appropriate when you only need a unidirectional flow of events from the server to the client (if you need a bidirectional connection, then WebSockets are a better choice). SSEs have largely been eclipsed by WebSockets, which Pedestal also supports. After reading this guide, you will be able to: Configure Pedestal to accept SSE connections. Send events from Pedestal over the connection using core.async. Connect to the server-sent event stream from a JavaScript client. This guide is for intermediate users who have worked through some sample applications or the first few Hello World guides. In particular, you should know how to run a build, start a REPL, and start and stop your server. You do not need to know any other Clojure web frameworks, but if you do, you may find some of the comparisons useful. If not, that’s OK — just skip those sections. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. We’ll be creating a new Pedestal service project, adding a simple route to stream a counter using server-sent events, and adding a simple HTML page that uses a JavaScript EventSource to open a connection to the stream. This guide will use Leiningen to generate and build a template project. If you haven’t already installed it, please take a few minutes to set it up. $ lein new pedestal-service server-sent-events Generating a pedestal-service application called server-sent-events. $ cd server-sent-events We will be using Hiccup to generate our index page, so we will need to add the dependency in our project.clj. project.clj :dependencies [[org.clojure/clojure \"1.10.1\"] [io.pedestal/pedestal.service \"0.6.1\"] ;; Remove this line and uncomment one of the next lines to ;; use Immutant or Tomcat instead of Jetty: [io.pedestal/pedestal.jetty \"0.6.1\"] ;; [io.pedestal/pedestal.immutant \"0.6.1\"] ;; [io.pedestal/pedestal.tomcat \"0.6.1\"] [ch.qos.logback/logback-classic \"1.2.10\" :exclusions [org.slf4j/slf4j-api]] [org.slf4j/jul-to-slf4j \"1.7.35\"] [org.slf4j/jcl-over-slf4j \"1.7.35\"] [org.slf4j/log4j-over-slf4j \"1.7.35\"] ;; Add hiccup dependency [hiccup \"1.0.5\"]] Here’s the service.clj file generated from the template: src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp])) (defn about-page [request] (ring-resp/response (format \"Clojure %s - served from %s\" (clojure-version) (route/url-for ::about-page)))) (defn home-page [request] (ring-resp/response \"Hello World!\")) ;; Defines \"/\" and \"/about\" routes with their associated :get handlers. ;; The interceptors defined after the verb map (e.g., {:get home-page} ;; apply to / and its children (/about). (def common-interceptors [(body-params/body-params) http/html-body]) ;; Tabular routes (def routes #{[\"/\" :get (conj common-interceptors `home-page)] [\"/about\" :get (conj common-interceptors `about-page)]}) ;; Map-based routes ;(def routes `{\"/\" {:interceptors [(body-params/body-params) http/html-body] ; :get home-page ; \"/about\" {:get about-page}}}) ;; Terse/Vector-based routes ;(def routes ; `[[[\"/\" {:get home-page} ; ^:interceptors [(body-params/body-params) http/html-body] ; [\"/about\" {:get about-page}]]]]) ;; Consumed by server-sent-events.server/create-server ;; See http/default-interceptors for additional options you can configure (def service {:env :prod ;; You can bring your own non-default interceptors. Make ;; sure you include routing and set it up right for ;; dev-mode. If you do, many other keys for configuring ;; default interceptors will be ignored. ;; ::http/interceptors [] ::http/routes routes ;; Uncomment next line to enable CORS support, add ;; string(s) specifying scheme, host and port for ;; allowed source(s): ;; ;; \"http://localhost:8080\" ;; ;;::http/allowed-origins [\"scheme://host:port\"] ;; Tune the Secure Headers ;; and specifically the Content Security Policy appropriate to your service/application ;; For more information, see: https://content-security-policy.com/ ;; See also: https://github.com/pedestal/pedestal/issues/499 ;;::http/secure-headers {:content-security-policy-settings {:object-sr
1c \"'none'\" ;; :script-src \"'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:\" ;; :frame-ancestors \"'none'\"}} ;; Root for resource interceptor that is available by default. ::http/resource-path \"/public\" ;; Either :jetty, :immutant or :tomcat (see comments in project.clj) ;; This can also be your own chain provider/server-fn -- http://pedestal.io/reference/architecture-overview#_chain_provider ::http/type :jetty ;;::http/host \"localhost\" ::http/port 8080 ;; Options to pass to the container (Jetty) ::http/container-options {:h2c? true :h2? false ;:keystore \"test/hp/keystore.jks\" ;:key-password \"password\" ;:ssl-port 8443 :ssl? false}}) Let’s simplify things by commenting out the 'Terse/Vector-based routes' section and removing unnecessary code. src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp])) (defn home-page [request] (ring-resp/response \"Hello World!\")) (def routes `[[[\"/\" {:get home-page}]]]) (def service {:env :prod ::http/routes routes ::http/type :jetty ::http/port 8080}) Now let’s add our server-sent event route. First Lets require SSE and core.async. src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] ;; require SSE [io.pedestal.http.sse :as sse] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp] ;; require core.async [clojure.core.async :as async] [clojure.core.async.impl.protocols :as chan])) Now we’ll add our counter route. We create the /counter route by calling start-event-stream and passing in our stream-ready handler. This creates an interceptor that will handle setting up the connection and call the provided callback, stream-ready. The stream-ready callback receives a core.async event channel and the SSE context as parameters. The SSE context is the context map with additional keys related to the event stream. The callback must send at least one event in order to properly initialize the stream. If it doesn’t, the client will think the stream is broken and keep reconnecting. An event stream is a particular kind of asynchronous response. The event stream interceptor, returned by start-event-stream, will return a context with a response map, which will trigger a response being sent to the client. However, the response will include whatever series of values are put into the provided response channel. You send events on the channel using regular core.async functions, such as put! or >!!, and ultimately terminate the connection by calling clojure.core.async/close! on the channel. Here our event consists the :name and :data keys, but could also contain an :id+for the event. Importantly, it is not the job of your callback to send all of the events; your callback is supposed set in motion the concurrent machinery that sends the events. Events will continue to be sent to the client even after the callback returns, until either the client closes the connection, or your code closes the channel. src/server_sent_events/service.clj (defn stream-ready [event-chan context] (dotimes [i 10] (when-not (chan/closed? event-chan) (async/>!! event-chan {:name \"counter\" :data i}) (Thread/sleep 1000))) (async/close! event-chan)) (def routes `[[[\"/\" {:get home-page} [\"/counter\" {:get [::send-counter (sse/start-event-stream stream-ready)]}]]]]) Now let’s start up our server. > lein run INFO org.eclipse.jetty.util.log - Logging initialized @3094ms to org.eclipse.jetty.util.log.Slf4jLog Creating your server... INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS INFO o.e.j.server.handler.Con[textHandler - Started o.e.j.s.ServletContextHandler@38f183e9{/,null,AVAILABLE} INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@b439e50{HTTP/1.1, (http/1.1, h2c)}{localhost:8080} INFO org.eclipse.jetty.server.Server - Started @3196ms We can check out our event stream in another terminal using curl. > curl http://localhost:8080/counter event: counter data: 0 event: counter data: 1 event: counter data: 2 event: counter data: 3 event: counter data: 4 event: counter data: 5 event: counter data: 6 event: counter data: 7 event: counter data: 8 event: counter data: 9 > The events above will arrive at one second intervals. SSE data will always be received as a string. If you want to send JSON (or any other data format), it’s up to the sender to encode it and the receiver to decode it accordingly. This agreement must be arranged out-of-band. None of the Pedestal interceptors are invoked when sending SSE events. The interceptors are used for the initial connection request from the client, but not on the events themselves. Now let’s stop our server with Ctrl+C and update our /index route to return an HTML page that connects to our counter route. Since we are adding inline JS we’ll also update our service configuration not to include secure headers, which include 'unsafe-inline' by default (this is an example, not production code after all). src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] ;; require SSE [io.pedestal.http.sse :as sse] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp] ;; require core.async [clojure.core.async :as async] [clojure.core.async.impl.protocols :as chan] [hiccup.core :as hiccup])) (def js-string \" var eventSource = new EventSource(\\\"http://localhost:8080/counter\\\"); eventSource.addEventListener(\\\"counter\\\", function(e) { console.log(e); var counterEl = document.getElementById(\\\"counter\\\"); counter.innerHTML = e.data; }); \") (defn home-page [request] {:status 200 :headers {\"Content-Type\" \"text/html\"} :body (hiccup/html [:html [:head [:script {:type \"text/javascript\"}
1 js-string]] [:body [:div [:span \"Counter: \"] [:span#counter]]]])}) (defn stream-ready [event-chan context] (dotimes [i 10] (when-not (chan/closed? event-chan) (async/>!! event-chan {:name \"counter\" :data i}) (Thread/sleep 1000))) (async/close! event-chan)) (def routes `[[[\"/\" {:get home-page} [\"/counter\" {:get [::send-counter (sse/start-event-stream stream-ready)]}]]]]) (def service {:env :prod ::http/routes routes ::http/type :jetty ::http/port 8080 ;; we need this so we can use inline scripts ::http/secure-headers {:content-security-policy-settings {:object-src \"none\"}}}) Now we should be able to restart our server and navigate to http://localhost:8080 and watch our counter increment. Coverage of the JavaScript EventSource (SSE) API is beyond the scope of this Pedestal guide. If you are unfamiliar with the API, consult this tutorial for a basic introduction. We’ve covered a minimal setup for server-sent event configuration and usage and demonstrated how to receive events from JavaScript. This guide was based on the examples in the server-sent-event sample project and the Server-Sent Events Reference.","title":"Server Sent Events","component":"pedestal","version":"0.7","name":"sse","url":"/pedestal/0.7/guides/sse.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Generate Our New Project","hash":"_generate_our_new_project","id":7},{"text":"Add Hiccup","hash":"_add_hiccup","id":8},{"text":"Clean Up","hash":"_clean_up","id":9},{"text":"Server-Sent Event Route","hash":"_server_sent_event_route","id":10},{"text":"Wrapping Up","hash":"_wrapping_up","id":11}]},"80":{"id":80,"text":"It is a good practice to separate core business logic from handler, and more generally, interceptor code. This separation of concerns has many benefits, including facilitating testing at the interceptor, interceptor chain and end-to-end response generation levels. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [ctx] (assoc ctx :widget {:id 1 :title \"foobar\"} ))})) We can test it either directly: (let [test-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (test-fn {}))))) Or using the interceptor chain execute function: (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) We can extend this approach to test coordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [ctx] (if-let [widget (:widget ctx)] (assoc ctx :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc ctx :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper function response-for, which makes it possible to fully test a route without starting up an HTTP service. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for function is specific to servlet-based services and simulates the receipt of a servlet request and creation of a servlet response - but does so without the overhead of an actual HTTP connection, which ensures your tests are fast. response-for takes as arguments a service function, verb and url as required parameters; headers and a request body are optional. Let us examine those parameters in more detail. The service function refers to the :io.pedestal.http/service-fn key value in the service map during service initialization. The verb is an HTTP method represented as a keyword (i.e., :get, :post, :delete, etc…​). The url is a relative url represented as a string. The headers and request body inputs are optional and specified with the :headers and :body keys, respectively. Before using response-for in tests, a test service must be created. This is done by calling create-servlet with the service map as a parameter. The resulting service-fn can be bound to a var and used in subsequent tests. (def service (:io.pedestal.http/service-fn (io.pedestal.http/create-servlet service-map))) The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for service :get \"/hello\")))
1) The response returned by response-for contains :status, :body and :header keys. The value of the :headers key is a map with stringified keys. Testing header values would look something like this: (is (= \"text/plain\" (get-in (response-for service :get \"/hello\") [:headers \"Content-Type\"]))) POST’ing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to support request payload parsing. Therefore, you will need to set the Content-Type header of the test request to the appropriate value based on the payload format of the request body. (is (= 200 (:status (response-for service :post \"/foo\" :headers {\"Content-Type\" \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\")))) (is (= 200 (:status (response-for service :post \"/foo-login\" :headers {\"Content-Type\" \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\")))) Notice how Content-Type is a string. Pedestal provides a utility, url-for-routes. This is passed the expanded routes for your application, and returns a function that will generate a URL for a specific route; primarily by specifying the route name, but also other factors. It is recommended to create a url-for test helper based on url-for-routes, and use that helper to create the relative urls for your tests. This allows you to refer to routes by name as opposed to hard-coded paths. Route names are typically more stable. Aside from that, it makes it easy to test routes which use query or path parameters. Here’s an example: (require '[io.pedestal.http.route :as http.routes]) (def routes #{[\"/user/:id/items\" :post `user-items]} ; (1) (def url-for (http.routes/url-for-routes (http.routes/expand-routes routes)))) (is (= 200 (:status (response-for service :get (url-for ::user-items ;(2) :path-params {:id 1} :query-params {:sort \"ASC\"}))))) 1 The namespace qualified symbol for user-items will be the default route name (as a keyword) 2 The route name is used to get the URL back Nothing special needs to be done when testing routes which include async interactions. The response-for helper forces asynchronous request processing to complete before returning a value.","title":"Unit testing","component":"pedestal","version":"0.7","name":"unit-testing","url":"/pedestal/0.7/guides/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":2},{"text":"Usage","hash":"_usage","id":3},{"text":"Testing GET","hash":"_testing_get","id":4},{"text":"Testing POST","hash":"_testing_post","id":5},{"text":"Constructing route URLs","hash":"_constructing_route_urls","id":6},{"text":"Testing Async interactions","hash":"_testing_async_interactions","id":7}]},"81":{"id":81,"text":"Java web applications are commonly deployed to web containers, also called Servlet containers or application servers. Web containers manage the runtime environment and lifecycle of an application. Popular web containers include Jetty, Tomcat, and JBoss. Some hosting services such as AWS Elastic Beanstalk also function as web containers. To deploy an application to a web container, you must package it as a Web Archive (WAR) file. A WAR file is just a Java [JAR] file with a particular internal layout and a .war extension. When running your application locally at the REPL, you will want to have your choice of servlet container running inside your JVM, and so the servlet container, and the Pedestal adaptor for the container, will be a dependency of your project. In this mode, you are running the servlet container embedded within your application; you application starts and, as part of that, starts the servlet container. For example, if you are using Jetty, then you’ll want the io.pedestal/pedestal.jetty library. This is a perfectly fine way to run your applications in production, but since you are reading this page, you are interested in deploying as a WAR instead, and the rules are slightly different. By contrast, a WAR file should not contain dependencies on the servlet container. At runtime, the servlet container starts up, then creates a new class loader to load your WAR. Having the servlet container’s classes present in the WAR will create deployment c
1onflicts. A WAR file contains all the dependencies of your application, but it should not contain any dependencies which would conflict with the web container itself. You should ensure that your application only depends on the io.pedestal/pedestal.service library; the dependency on a container (such as pedestal.jetty) should be in a dev-only or test-only path. A WAR file must contain a special file called web.xml which tells the web container how to configure the application. In the root directory of your project, create a file called web.xml like the following example: <?xml version=\"1.0\" encoding=\"UTF-8\"?> <web-app xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\" version=\"3.0\" metadata-complete=\"true\"> <description>Pedestal HTTP Servlet</description> <display-name>Pedestal HTTP Servlet</display-name> <servlet> <servlet-name>PedestalServlet</servlet-name> <servlet-class>io.pedestal.servlet.ClojureVarServlet</servlet-class> <init-param> <param-name>init</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-init</param-value> </init-param> <init-param> <param-name>service</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-service</param-value> </init-param> <init-param> <param-name>destroy</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-destroy</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>PedestalServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> Replace YOUR_APP_SERVER_NAMESPACE with the \"server\" namespace generated for your application by the Pedestal template. If your app is called \"myapp\" then this would be the namespace myapp.server. The template-generated source file at src/myapp/server.clj should contain functions named servlet-init, servlet-destroy, and servlet-service. Note: The url-pattern in the XML above must match the routes your Pedestal application is expected to handle and must match the conventions of your web container. For example, if you are deploying an application in the file myapp.war, a typical web container will expect it to have <url-pattern>/myapp/*</url-pattern>. Therefore, your application should have routes that begin with /myapp/. If your application will be deployed as the \"root\" web application in the container, then you should leave <url-pattern>/*</url-pattern> as shown in the example above. Consult the documentation of your web container for more details on Servlet mappings. These instruction are out of date, surely there are Leiningen plugins to do this all? Working from a standard Unix shell (or Cygwin on Windows), run the following commands in your project directory. You will need both Leiningen and Maven installed to run these commands. Getting dependencies: lein clean lein pom mvn dependency:copy-dependencies -DoutputDirectory=target/war/WEB-INF/lib Copying your application files: mkdir -p target/war/WEB-INF/classes cp -R src/* config/* resources/* target/war/WEB-INF/classes Copying web.xml: cp web.xml target/war/WEB-INF Creating the WAR file: jar cvf target/YOUR_APPLICATION.war -C target/war WEB-INF Replace YOUR_APPLICATION with the name of your application. Forthcoming; but the essentials are the same: package your resources, Clojure sources, and (rarely present) compiled Java classes to target/war/WEB-INF/classes, and your dependencies to target/war/WEB-INF/lib, then zip everything up. Consult the documentation of your web container to find out how to deploy an application from a WAR file. For many web containers, it may be a simple matter of copying the .war file into a \"webapps\" directory.","title":"WAR Deployment","component":"pedestal","version":"0.7","name":"war-deployment","url":"/pedestal/0.7/guides/war-deployment.html","titles":[{"text":"Step One: Prepare Your Project","hash":"_step_one_prepare_your_project","id":1},{"text":"Step Two: Configure Your Servlets","hash":"_step_two_configure_your_servlets","id":2},{"text":"Step Three: Build the WAR (leinigen)","hash":"_step_three_build_the_war_leinigen","id":3},{"text":"Step Three: Build the WAR (deps.edn)","hash":"_step_three_build_the_war_deps_edn","i
1d":4},{"text":"Step Four: Deploy","hash":"_step_four_deploy","id":5}]},"82":{"id":82,"text":"It doesn’t take very long to bump into the word \"Interceptor\" when you’re working with Pedestal. They’re the most important construct in the library, the essential unit-of-work that virtually everything else in Pedestal is built upon. After reading this guide, you will be able to: Explain the role of interceptors in Pedestal Compare interceptors to middleware Create interceptors that affect execution of remaining interceptors Understand how to handle errors Pedestal exists to support the following goals: Enable code reuse, especially for cross-cutting concerns. Keep code as functional — side-effect free — as possible. Ensure that code can be easily tested. Support asynchronous request flows. Many developers come to Pedestal from an earlier Clojure web framework, Ring; Ring has a very simple model: A servlet container receives an HTTP request and creates a request map A handler is passed the request map, and returns a response map The response map is used to generate an HTTP response Cross-cutting concerns, such as logging and authentication, are handled in Ring via middleware. Middleware is a special class of function with a particular purpose. A middleware function accepts a handler function, wraps it with new behavior, and returns a new handler function. For example, a middleware function could parse the :body key of the request (which starts as a Java InputStream) and pass it though a JSON parser, replacing :body with the parsed content. Any handlers downstream of that middleware can expect the :body key to be parsed JSON. Because a Ring handler is a stack of functions that invoke functions[1] there’s no room to support asynchronous flows. The essence of an asynchronous flow is that a function can return early, and later, resume from where it left off - a significant challenge for a language that doesn’t support this concept, such as Java. As we’ll see shortly, interceptors provide a different model where the return early and resume later is more explicit. An interceptor provides one step in the processing of an overall request. Interceptors are formed into a pipeline; each interceptor is invoked to do its one step, then control returns to Pedestal, which then invokes the next interceptor in the pipeline. An interceptor might be specific to a particular route, or it might be more generic and wide-ranging, such as an interceptor that logs requests, or enforces authentication. Even saying \"one step\" is not exactly correct; Pedestal breaks request processing into two phases: enter and leave. The enter phase is related to processing of the incoming request; this covers cross-cutting concerns such as logging and authentication, but also routing, and route-specific interceptors and handlers. The leave phase begins once a response has been created and represents an \"unwinding\", in much the same way that a stack of function calls eventually unwind towards the initial caller. There’s also an error phase, which occurs when an exception is thrown by an interceptor; this allows other interceptors to report or record the exception, and generate a useful response; the error phase is really a subset of the leave phase. In practical terms, an interceptor is an instance of the Interceptor record — a specialized Clojure map. This map has keys :name, :enter, :leave, and :error. You rarely create an Interceptor directly, instead you pass a map, or some other value[2] to the interceptor function and an Interceptor record is returned [3]. An Interceptor should have a :name, and must have at least one of :enter, :leave, and :error. :name A keyword used (especially in logging) to identify the interceptor; generally, this is a namespace qualified keyword. :enter A callback function, passed the context map, returns a possibly modified context map. :leave A callback function, passed the context map, returns a possibly modified context map. :error A callback function, passed the context map and an exception, returns a possibly modified context map. Why not a Protocol? This may look like a situation where a Clojure Protocol would make sense. However, a Protocol would have to define all four parts (a method corresponding to each of :name, :enter, :leave, and :error). This would not only be cumbersome, but would prevent some optimizations that occur inside Pedestal. So the context map flows through each interceptor; first through the enter phase, then later through the leave phase: The previous diagram shows a single interceptor, but the whole point here is that the interceptors work in a pipeline: This pipeline is composed of two parts: the interceptor queue and the interceptor stack. These are both stored inside the context map. The queue is a list of interceptors that are waiting to execute in the enter phase. The stack is a list of interceptors that have already executed - it is used by the leave and error phases. As an interceptor is popped of the queue, it is pushed onto the stack. When execution switches from the enter phase to the leave (or error) phase, the logic changes to popping each successive interceptor off the stack to invoke the :leave or :error callback. Not all interceptors in the queue will execute: any interceptor can attach a response map (as key :response) to the context. That switches gears to the leave phase. Likewise, simply running out of interceptors in the enter phase will switch to the leave phase. Earlier we said that interceptors are the \"unit of work\" for Pedestal. Even routing is one unit of work; a router interceptor works by matching an incoming request to a route, and the route provides a list of interceptors which are simply added to the queue. It is perfectly acceptable for other interceptors to extend the interceptor queue in just the same way. Remember that an interceptor’s :enter callback is executed to completion before subsequent interceptor’s are invoked; this means that any local symbol assigned via a let is out of scope for the later interceptors. If an interceptor needs to record information during the enter phase and access it again during the leave phase, there is no recourse but to add that data to the context map. A simple example is a timing interceptor that tracks how long it take to process a request: (def timing-interceptor (interceptor {:name ::timing (1) :enter (fn [context] (assoc context ::start-ms (System/currentTimeMillis))) (2) :leave (fn [context] (let [{::keys [start-ms]} context (3) elapsed-ms (- (System/currentTimeMillis) start-ms)] (log/debug :elapsed-ms elapsed-ms) (4) (dissoc context ::start-ms)))}
1)) (5) 1 Give the interceptor a unique, namespace qualified name. 2 Update the context with a new key, namespace qualified to avoid collisions. 3 Destructuring trick, put :keys into a namespace to destructure using that namespace. 4 A side effect, but also the point of this interceptor. 5 Good hygiene is to dissoc anything that was previously added by the interceptor. Any callback also has the option to work asynchronously; this is quite simple: return a core.async channel that will eventually convey the updated context map rather than simply returning the updated context map. Most often, going asynchronous is simply a matter of using the clojure.core.async/go macro: (def user-data-interceptor (interceptor {:name ::user-data :enter (fn [context] (go (1) (let [db (:db context) (2) user-id (get-in context [:request :query-parameters :user-id]) user-ch (db/get-user db user-id)] (3) (assoc context :user (<! user-ch))))) (4) :leave #(dissoc % :user)})) 1 A go block returns a channel that conveys the result. 2 Assumption is that some other interceptor put the :db key into the context. 3 db/get-user is asynchronous and returns a channel that conveys the user. 4 <! waits for the result from user-ch, which is then applied to the context. A simple key is used since other interceptors need access to this user data. When an interceptor returns a channel, Pedestal will return the request-processing thread to the servlet container, so that it can be used to process other incoming requests. It will then wait for the channel to convey the new context, and continue from there. All remaining interceptors for the request will execute inside a thread from core.async's dispatch thread pool. This only a thumbnail sketch; it doesn’t address likely scenarios such as what if the user doesn’t exist? What if there’s a database failure? What if reading the user from the database takes a really long time? When an interceptor throws an exception, the exception is caught by Pedestal, and the pipeline shifts to the error phase. In the error phase, Pedestal works up the stack of previously executed interceptors. For interceptors with an :error callback, that callback is passed the context map and the exception. The callback can: Return the context map; the exception will be ignored and Pedestal will switch to the leave phase. Attach the exception to the context map to allow a different intercept to handle the exception. Throw a new exception if unable to handle the original exception. Further details are in the error handling reference. One of Pedestal’s core values is to create flexible utilities and use them in specific ways. One example of this approach is that the interceptor pipeline is not inherently tied to an HTTP request/response cycle; that is a specific application of the pipeline, setup via the Servlet Interceptor. The same approach could be used for any number of other purposes, including: Handling messages sent to a JMS queue or Kafka topic Transforming a document Sending an outgoing HTTP request and processing the response The main differences are: What data is stored in the initial context map What are the termination conditions of the enter phase (via the terminate-when function) More details are available in the reference section: Interceptors Default Interceptors Error Handling execute 1. Ring has, more recently, itself started to support asynchronous flows and WebSockets. 2. For example, a handler function in a route will be wrapped as an interceptor. 3. In most cases, even this step is performed for you, such as interceptors that are referenced as part of a route","title":"What is an Interceptor?","component":"pedestal","version":"0.7","name":"what-is-an-interceptor","url":"/pedestal/0.7/guides/what-is-an-interceptor.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Interceptor Goals","hash":"_interceptor_goals","id":2},{"text":"Comparison to Ring","hash":"_comparison_to_ring","id":3},{"text":"Core Definition","hash":"_core_definition","id":4},{"text":"Queue and Stack","hash":"_queue_and_stack","id":5},{"text":"Transition from Enter to Leave","hash":"_transition_from_enter_to_leave","id":6},{"text":"Dynamic Queue","hash":"_dynamic_queue","id":7},{"text":"Sharing Information between phases","hash":"_sharing_information_between_phases","id":8},{"text":"Asynchronous Results","hash":"_asynchronous_results","id":9},{"text":"Error Handling","hash":"_error_handling","id":10},{"text":"Other Uses for Interceptor Pipelines","hash":"_other_uses_for_interceptor_pipelines","id":11},{"text":"Where To Next?","hash":"_where_to_next","id":12}]}
1,"83":{"id":83,"text":"This is the fourth part in the tutorial. By now, you’ve built a simple service that vends out friendly greetings by name and can handle a few content types. We’re going to leave our greeting service alone for the time being and turn our attention to a REST API for some entities. To keep things simple, we’re going to keep the entities in memory. Even so, we will use the same kind of techniques you would use in a real application. After reading this guide, you will be able to: Use path parameters to identify items Generate URLs for new items Encode and decode entity bodies This guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. You do not need experience with any particular database or persistence framework. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. We will start a new project this time. The service will be a simple \"to-do\" list that persists only in memory. We will use the same techniques that we would use to interact with a real database. We’re going to make a REST style API. Our API will have the following routes: Route Verb Action Response /todo POST Create a new list 201 with URL of new list /todo GET Return query form 200 with static page /todo/:list-id GET View a list 200 with all items /todo/:list-id/:item-id GET View an item 200 with item /todo/:list-id/:item-id PUT Update an item 200 with updated item We will start this project with another empty directory. (Still avoiding the template projects for now.) I’m going to call my project 'todo-api'. Feel free to call yours something different, but it’s up to you to do the mental translation from here on out. $ mkdir todo-api $ cd todo-api $ mkdir src This time, we’ll set up our deps.edn file first. It will be almost exactly the same as our last one: deps.edn {:paths [\"src\"] :deps {io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} org.clojure/data.json {:mvn/version \"2.5.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.10\"}}} Our new source file will start off with the usual namespace declaration: src/main.clj (ns main (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :as test])) We’re going to use some of the same structures from previous tutorials, such as an ok function to build a successful response, but with some differences: src/main.clj (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) partial is a Clojure function that takes a function and returns a new function that needs fewer arguments - you supply the initial arguments in the call to partial. The returned function keeps track of those initial arguments, and when invoked, \"glues together\" the initial arguments and any additional arguments provided to it, and calls the original function: response in this case. Although created with def, the symbols ok, created, and accepted, are all functions, as if they were created using defn. Why do any of this? For all that web developers generally know the status codes in their sleep [1], it is more intent of the code that calls these functions is more semantically visible. And you probably did go look up code 201. Second, we’re going to define all our routes right away, but have them all use an echo handler so we can test the routes separately from everything else[2]. src/main.clj (def echo {:name :echo :enter (fn [context] (let [request (:request context) response 
1(ok context)] (assoc context :response response)))}) (def routes (route/expand-routes #{[\"/todo\" :post echo :route-name :list-create] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) Pedestal makes it possible to invoke these routes directly from the REPL, without involving HTTP at all. This is a nice way to break your work up into incremental steps. It goes together nicely with the interactive development support we introduced in the Hello World, With Parameters tutorial. Get ready for a ton of output: > clj Clojure 1.11.1 user=> (require 'main) nil user=> (main/start-dev) [main] INFO org.eclipse.jetty.server.Server - jetty-11.0.18; built: 2023-10-27T02:14:36.036Z; git: 5a9a771a9fbcb9d36993630850f612581b78c13f; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@6c8f2e4e{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@1432a683{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started Server@b025f2f{STARTING}[11.0.18,sto=0] @57816ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14892 0x515f104c \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14892@515f104c\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15680 0x1dde2d1 \"io.pedestal.http.jetty$server$fn__15680@1dde2d1\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/todo/:list-id\", :method :get, :path-constraints {:list-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)\", :path-parts [\"todo\" :list-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :database-interceptor} #Interceptor{:name :list-view}], :route-name :list-view, :path-params [:list-id]} {:path \"/todo/:list-id\", :method :post, :path-constraints {:list-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)\", :path-parts [\"todo\" :list-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :list-item-view} #Interceptor{:name :database-interceptor} #Interceptor{:name :list-item-create}], :route-name :list-item-create, :path-params [:list-id]} {:path \"/todo\", :method :post, :path-re #\"/\\Qtodo\\E\", :path-parts [\"todo\"], :interceptors [#Interceptor{:name :database-interceptor} #Interceptor{:name :list-create}], :route-name :list-create, :path-params []} {:path \"/todo\", :method :get, :path-re #\"/\\Qtodo\\E\", :path-parts [\"todo\"], :interceptors [#Interceptor{:name :echo}], :route-name :list-query-form, :path-params []} {:path \"/todo/:list-id/:item-id\", :method :delete, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-delete, :path-params [:list-id :item-id]} {:path \"/todo/:list-id/:item-id\", :method :get, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :list-item-view} #Interceptor{:name :database-interceptor}], :route-name :database-interceptor, :path-params [:list-id :item-id]} {:path \"/todo/:list-id/:item-id\", :method :put, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-update, :path-params [:list-id :item-id]}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x47caa1ff \"io.pedestal.http.servlet.FnServlet@47caa1ff\"], :server #object[org.eclipse.jetty.server.Server 0xb025f2f \"Server@b025f2f{STARTED}[11.0.18,sto=0]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15682 0x7330574d \"io.pedestal.http.jetty$server$fn__15682@7330574d\"]} user=> Let’s try out the routes that we defined in the main namespace. We’ll do that using response-for. This function exercises our server without going through any actual HTTP requests. In Pedestal, the :io.pedestal.http/service-fn key of the service map contains the service function which is essentially the bridge between Servlet APIs and Pedestal’s interceptor chain. By extracting the service-fn (which we keep handy when running in development mode), we can pass it to response-for along with the HTTP verb (as a keyword), and the URL: user=> (require '[io.pedestal.test :as test]) nil user=> (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/todo\") [main] INFO io.pedestal.http - {:msg \"GET /todo\", :line 80} {:status 200, :body \"{:io.pedestal.interceptor.chain/stack (#Interceptor{:name :echo} #Interceptor{:name :io.pedestal.http.route/path-params-decoder} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/ring-response} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/stylobate} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/terminator-injector}), :request {:protocol \\\"HTTP/1.1\\\", :async-supported? true, :remote-addr \\\"127.0.0.1\\\", :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x3e1ff1cf \\\"io.pedestal.test$test_servlet_response$reify__15083@3e1ff1cf\\\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x389588b2 \\\"io.pedestal.http.servlet.FnServlet@389588b2\\\"], :headers {\\\"content-length\\\" \\\"0\\\", \\\"content-type\\\" \\\"\\\"}, :server-port -1, :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x57e9122f \\\"io.pedestal.test$test_servlet_request$reify__15071@57e9122f\\\"], :content-length 0, :content-type \\\"\\\", :path-info \\\"/todo\\\", :character-encoding \\\"UTF-8\\\", :url-for #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}], :uri \\\"/todo\\\", :server-name nil, :query-string nil, :path-params {}, :body #object[io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a 0x5ea52724 \\\"io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a@5ea52724\\\"], :scheme nil, :request-method :get, :context-path \\\"\\\"}, :bindings {#'io.pedestal.http.route/*url-for* #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}]}, :enter-async [#object[io.pedestal.http.impl.servlet_interceptor$start_servlet_async 0x7dfccbf2 \\\"io.pedestal.http.impl.servlet_interceptor$start_servlet_async@7dfccbf2\\\"]], :io.pedestal.interceptor.chain/terminators (#object[io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810 0x1fe24f79 \\\"io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@1fe24f79\\\"]), :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x3e1ff1cf \\\"io.pedestal.test$test_servlet_response$reify__15083@3e1ff1cf\\\"], :route {:path \\\"/todo\\\", :method :get, :path-re #\\\"/\\\\Qtodo\\\\E\\\", :path-parts [\\\"todo\\\"], :interceptors [#Interceptor{:name :echo}], :route-name :list-query-form, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[clojure.core$constantly$fn__5740 0x4f9a0139 \\\"clojure.core$constantly$fn__5740@4f9a0139\\\"]}, :servlet #object[io.pedestal.http.servlet.FnServlet 0x389588b2 \\\"io.pedestal.http.servlet.FnServlet@389588b2\\\"], :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x57e9122f \\\"io.pedestal.test$test_servlet_request$reify__15071@57e9122f\\\"], :io.pedestal.interceptor.chain/queue #object[clojure.lang.PersistentQueue 0x38f183e9 \\\"clojure.lang.PersistentQueue@1\\\"], :url-for #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}], :io.pedestal.interceptor.chain/execution-id 1, :servlet-config nil, :async? #object[io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_ 0x23497c5e \\\"io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_@23497c5e\\\"]}\", :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} user=> Part of this output — [main] INFO …​ — comes from built-in Pedestal interceptors for logging requests; the logging output gets mixed into the output from the REPL. The response is somewhat overwhelmingly verbose because we are using the echo interceptor, so the entire incoming request converted to a string and is nested inside the response. If we omit the response body, it’s easier to observe the most useful parts of the response: user=> (dissoc *1 :body) {:status 200, :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} Inside the REPL, Clojure keeps track of the most recent result it printed in the symbol *1. That makes it a snap to dig down into that result. There’s also *2 and *3. Now we can see the status code (200, OK) and the headers. Not too bad. What happens if we ask for a route that doesn’t exist? Or a verb that isn’t supported on a real route? user=> (dissoc (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/no-such-route\") :body) [main] INFO io.pedestal.http - {:msg \"GET /no-such-route\", :line 80} {:status 404, :headers {\"Content-Type\" \"text/plain\"}} user=> (dissoc (test/response-for (:io.pedestal.http/service-fn @main/server) :delete \"/todo\") :body) [main] INFO io.pedestal.http - {:msg \"DELETE /todo\", :line 80} {:status 404, :headers {\"Content-Type\" \"text/plain\"}} user=> This 404 response comes from Pedestal itself. That is the default response when the router cannot find a route that matches the URL pattern and passes constraints. (For much more about routers, see the Routing Quick Reference). Some of our routes have parameters in them. Those look like keywords embedded in the URL patterns. That tells Pedestal to match any value in that position (except a slash!) and bind it to that parameter in the request map. We should be able to see those parameters in the requests that echo will send back to us. This is one of the ways we can make sure that routes do what we think they are going to do, before we write the real logic. user=> (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/todo/abcdef/12345\") [main] INFO io.pedestal.http - {:msg \"GET /todo/abcdef/12345\", :line 80} {:status 200, :body \"{:io.pedestal.interceptor.chain/stack (#Interceptor{:name :echo} #Interceptor{:name :io.pedestal.http.route/path-params-decoder} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/ring-response} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/stylobate} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/terminator-injector}), :request {:protocol \\\"HTTP/1.1\\\", :async-supported? true, :remote-addr \\\"127.0.0.1\\\", :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x29c808c8 \\\"io.pedestal.test$test_servlet_response$reify__15083@29c808c8\\\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x265b5f05 \\\"io.pedestal.http.servlet.FnServlet@265b5f05\\\"], :headers {\\\"content-length\\\" \\\"0\\\", \\\"content-type\\\" \\\"\\\"}, :server-port -1, :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x6916566d \\\"io.pedestal.test$test_servlet_request$reify__15071@6916566d\\\"], :content-length 0, :content-type \\\"\\\", :path-info \\\"/todo/abcdef/12345\\\", :character-encoding \\\"UTF-8\\\", :url-for #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}], :uri \\\"/todo/abcdef/12345\\\", :server-name nil, :query-string nil, :path-params {:list-id \\\"abcdef\\\", :item-id \\\"12345\\\"}, :body #object[io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a 0x82bbbdc \\\"io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a@82bbbdc\\\"], :scheme nil, :request-method :get, :context-path \\\"\\\"}, :bindings {#'io.pedestal.http.route/*url-for* #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}]}, :enter-async [#object[io.pedestal.http.impl.servlet_interceptor$start_servlet_async 0x7dfccbf2 \\\"io.pedestal.http.impl.servlet_interceptor$start_servlet_async@7dfccbf2\\\"]], :io.pedestal.interceptor.chain/terminators (#object[io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810 0x74f47eab \\\"io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@74f47eab\\\"]), :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x29c808c8 \\\"io.pedestal.test$test_servlet_response$reify__15083@29c808c8\\\"], :route {:path \\\"/todo/:list-id/:item-id\\\", :method :get, :path-constraints {:list-id \\\"([^/]+)\\\", :item-id \\\"([^/]+)\\\"}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[io.pedestal.http.route.prefix_tree$add_satisfies_constraints_QMARK_$fn__11533 0x2f8afb66 \\\"io.pedestal.http.route.prefix_tree$add_satisfies_constraints_QMARK_$fn__11533@2f8afb66\\\"], :path-re #\\\"/\\\\Qtodo\\\\E/([^/]+)/([^/]+)\\\", :path-parts [\\\"todo\\\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-view, :path-params {:list-id \\\"abcdef\\\", :item-id \\\"12345\\\"}}, :servlet #object[io.pedestal.http.servlet.FnServlet 0x265b5f05 \\\"io.pedestal.http.servlet.FnServlet@265b5f05\\\"], :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x6916566d \\\"io.pedestal.test$test_servlet_request$reify__15071@6916566d\\\"], :io.pedestal.interceptor.chain/queue #object[clojure.lang.PersistentQueue 0x2d4fe03b \\\"clojure.lang.PersistentQueue@1\\\"], :url-for #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}], :io.pedestal.interceptor.chain/execution-id 9, :servlet-config nil, :async? #object[io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_ 0x23497c5e \\\"io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_@23497c5e\\\"]}\", :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} The interesting part here is kind of buried inside the request map (which is a string inside the response body). We can pull it out with a bit of Clojure code, but I’ll just highlight it here. (If you’re interested in an exercise, try using clojure.edn to extract the request.) Inside the request, there is a map :path-params which looks like this: :path-params {:list-id \"abcdef\", :item-id \"12345\"}} Pedestal extracted these parameters from the URL and bound them to the request for us. Note that the values are always strings, because URLs are strings. If we want to treat \"12345\" as a number, that’s up to us. But our application had better not break if some sly user sends us up a request with something other than numbers there. The first request to handle is creating lists. This is a POST to the /todo URL. In the interest of simplicity, the only part of a request body we need is a name field. Also in the interest of simplicity, we are not going to deal with content negotiation yet. What do we need to do in order to create a list? Make a new data structure for the list. Add it to our repository. Without getting too far ahead of ourselves, we’d like to avoid doing all of the above in a single handler function, and instead, break this up into several interceptors, each of which is (as much as possible) side-effect free and easily testable. Let’s break the behavior up into multiple steps, and give each step a provisional name: A attaches a database connection to the request. B looks up an item of interest and attaches it to the request. C makes some decisions and attaches the result of those decisions to the request. D executes a transaction with those decisions. This way, A and D are quite generic. B is somewhat specific to the particular route — is it a list or a list item that’s being looked up?. That leaves C which is most specific to a single route, and might event be a simple handler function. For this guide, we are going to cheat and create an in-memory repository: src/main.clj (defonce database (atom {})) (1) 1 Using defonce here ensures that the value, the database atom, will survive when we reload the namespace. And the interceptor to snapshot the database and handle transactions: src/main.clj (def db-interceptor {:name :database-interceptor :enter (fn [context] (update context :request assoc :database @database)) (1) :leave (fn [context] (if-let [[op & args] (:tx-data context)] (2) (do (apply swap! database op args) (3) (assoc-in context [:request :database] @database)) (4) context))}) (5) 1 @database gets the current value of the atom. We attach it to the request inside the context. This is step A from above. 2 The :tx-data key on the context may be set by other interceptors. This is step D from above. 3 The do block is a sure sign of a side effect. The swap! here is our stand-in for a real database transaction. 4 We attach the updated database value in case any other interceptors need to use it. We use the latest version of the database (via @database), not the value in the request, to account for any concurrent threads changing the database simultaneously. 5 If there wasn’t any tx-data, we just return the context without changes. If you forget this and return nil, every request will respond with 404. Now we need a handler to receive the request, extract a name, and create the actual list. src/main.clj (defn make-list [nm] {:name nm :items {}}) (defn make-list-item [nm] {:name nm :done? false}) (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") (1) new-list (make-list nm) db-id (str (gensym \"l\"))] (2) (assoc context :tx-data [assoc db-id new-list])))}) (3) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] (4) [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) 1 If there was a query parameter, use it. Otherwise use a placeholder. 2 Generate a unique ID. In a real service, the DB itself would do this for us. 3 Don’t modify the DB here. Attach data to the context that the db-interceptor will use. 4 We modify the route definition to use both new interceptors, in order. There are a couple of things to notice about this updated route definition. First, instead of using echo here, we have a vector with our db-interceptor and list-create interceptors. Recall from the introduction to interceptors that interceptors have tw
1o functions. The :enter functions get called from left to right, then the :leave functions get called from right to left. That means calls to the db-interceptor bracket the call to the list-create interceptor. The second thing about the new route is that we removed the :route-name :list-create clause. Pedestal requires that every route must have a unique name. When we used the echo interceptor everywhere, there was no way for Pedestal to create unique, meaningful names for the routes so we had to help it out. Now, list-create has it’s own name so we can let Pedestal do it’s default behavior: use the name of the last interceptor in the vector. When you use a function in a route, Pedestal also can’t pick a good name for you. There are quoting forms you can read about in the routing reference that offer some tricks for that. Let’s give this a try. Here’s a new helper function to make it easier to try requests out interactively: src/main.clj (defn test-request [verb url] (io.pedestal.test/response-for (::http/service-fn @server) verb url)) With this new helper we can try out a lot of requests from the REPL. Don’t forget to reload the main namespace in the REPL with (require :reload 'main) and restart the server with (main/restart) before you do. user> (main/test-request :post \"/todo?name=A-List\") {:status 404, :body \"Not Found\", :headers {\"Content-Type\" \"text/plain\"}} Uh oh. What happened here? We just tried this route a minute ago. Was it the query parameter? user> (main/test-request :post \"/todo\") {:status 404, :body \"Not Found\", :headers {\"Content-Type\" \"text/plain\"}} Nope. If you check the contents of your in-memory database by running @main/database in the REPL, you’ll see the new item in there: user=> @main/database {\"l15385\" {:name \"A-List\", :items {}}} So why did Pedestal return 404 response? The problem is that neither of the list-create and db-interceptor interceptors attached any kind of response to the context. Pedestal looked at the context after running all the interceptors, saw that there was no response, and sent the 404 as a fallback. We need to attach a response somewhere. In REST apis, it is expected that a POST request that creates an entity will then return a response with a 201 Created status code, and include a Location header that points to the new resource. We have defined a route for that, :get /todo/:list-id, which we’ve named :list-view, and, knowing the list id, it’s quite straight forward to assemble that string. But should our handler code be responsible for doing so? Anyone with experience in web development knows that things shift around constantly, and should a change to the routing necessitate changes to some scattered collection of handlers? Even if the routing table is stable, we want to avoid duplicated code. Pedestal provides the url-for function to generate a URL from route name, and will even interpolate parameters into the URL string. So our list-create interceptor can point the client over to a route that will render the new list. Of course, it would be nice if the response body also included the current state of the just-created list. That saves the client a round trip and saves the service a request. For now, we can do this all in a single interceptor. src/main.clj (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list nm) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id}
1)] (1) (assoc context :response (created new-list \"Location\" url) :tx-data [assoc db-id new-list])))}) 1 Generate URL for route :list-view and the new ID we just generated. Pedestal uses some hidden machinery[3] to get the routing table, which is needed to construct the URL. And the results (manually formatted for readability): user> (main/test-request :post \"/todo?name=A\") {:status 201, :body \"{:name \\\"A\\\", :items []}\", (1) :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"Location\" \"/todo/l30488\", (2) \"Content-Type\" \"application/edn\"}} (3) 1 The created list, as map encoded as a string. 2 The location, generated by url-for. 3 The Clojure map was converting a string by a default Pedestal interceptor, which also applied the matching content type. In general, adding something to the database might cause it to change. Sometimes there are triggers or stored procedures that change it. Other times it’s just an ID being assigned. Usually, instead of attaching the new entity here, I would attach its ID to the context and use another interceptor later in the chain to look up the entity after db-interceptor executes the transaction. This becomes especially important when you are updating existing entities that could have concurrent changes from many sources. Now that we’ve done one route, this will go a bit faster. The connection from route to interceptor to entity should be a bit more evident at this point. To view a list, we need to look it up from the \"database\". If it doesn’t exist, we need to return a 404 (which can be done by omitting a response body). If it does exist, we send it in the response. src/main.clj (defn find-list-by-id [dbval db-id] (get dbval db-id)) (1) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) (2) the-list (when db-id (find-list-by-id (3) (get-in context [:request :database]) db-id))] (cond-> context (4) the-list (assoc :result the-list))))}) 1 Query the in-memory database. 2 Extract the path parameter, if present. 3 Lookup the matching list if the parameter was provided. 4 If a list was found, add it to the context as :result; otherwise do nothing resulting in a 404 response. As we build up a set of interceptors and utility functions, we find that we can go ever faster. Next up, we’ll look at adding a new item to an existing list. To add an item to a list we will perform the following steps: Check that the list exists Create a new item for the list Add that item to the list Return a response with the new item Someone with a seasoned eye may notice that we have multiple steps that could cause problems in heavily used, multi-threaded server: What if the list is deleted by some other thread between steps 1 and 2? What if another item is added to the list between steps 1 and 3 (do we lose one of the items?) This is the kind of thing that is really important to do atomically. We can take advantage of that Clojure atom to execute a function atomically. That’s what the swap! call does for us. But since that function might not succeed, it means we don’t know enough to create the response inside the list-item-create interceptor. We need to defer response creation until after the db-interceptor runs its :leave function. Basically, we need something to look up an item by its list ID and item ID, then render the result. That’s exactly what we would do for the :list-item-view route! We can get some reuse here. If list-item-create can add the item to the database, then the item will exist. If the item can’t be added, it will result in a 404 response. We just need to do something a little funky-looking with the list-item-view interceptor. We need to put its behavior in the :leave function instead of the :enter function. Here’s the pair of new interceptors, plus the updated route table. src/main.clj (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (def entity-render (1) {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response 
1(ok item)) context))}) (def list-item-view (2) {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (3) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def list-item-create (4) {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [nm (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item nm) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) (5) context))}) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render list-item-view db-interceptor]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) 1 New generic interceptor that provides a 200 OK response with EDN body out of any Clojure data structure. 2 New interceptor that looks up list items but doesn’t attach a response (since that’s `entity-render’s job). 3 Instead, list-item-view attaches the result to the context where entity-render expects to find it. 4 This interceptor creates an item and sets up tx-data to be executed. 5 This is where list-item-create passes a parameter to list-item-view. To understand the interceptors for the :list-item-create route, we need to think about :enter functions from left to right and :leave functions from right to left. Phase Interceptor Action Enter entity-render None. Enter list-item-view None. Enter db-interceptor Attach the database value to the context. Enter list-item-create Attach tx-data to the context and a path-param to identify the item. Leave list-item-create None. Leave db-interceptor Execute the tx-data, attach updated DB value to context. Leave list-item-view Find the (new) item by path-params, attach it to the context as :result. Leave entity-render Find :result on the context, make an OK response. A defect here is that when adding a list item, we don’t return a 201 response and a Location header as we do when adding a list. Implementing that should be an additional section in this tutorial. Splitting the work into these pipelined stages allows us to make very small, very targeted functions that collaborate via the context. The rest of the routes follow these same basic patterns. Take a few minutes to see if you can create the interceptors for the next few. Here is the final version of the code. Everything is cleaned, folded, and sorted nicely. src/main.clj (ns main (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :as test])) (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) ;;; ;;; \"Database\" functions ;;; (defonce database (atom {})) (defn find-list-by-id [dbval db-id] (get dbval db-id)) (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def db-interceptor {:name :database-interceptor :enter (fn [context] (update context :request assoc :database @database)) :leave (fn [context] (if-let [[op & args] (:tx-data context)] (do (apply swap! database op args) (assoc-in context [:request :database] @database)) context))}) ;;; ;;; Domain functions ;;; (defn make-list [nm] {:name nm :items {}}) (defn make-list-item [nm] {:name nm :done? false}) ;;; ;;; API Interceptors ;;; (def echo {:name :echo :enter (fn [context] (let [request (:request context) response 
1(ok context)] (assoc context :response response)))}) (def entity-render {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response (ok item)) context))}) (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list nm) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id})] (assoc context :response (created new-list \"Location\" url) :tx-data [assoc db-id new-list])))}) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) the-list (when db-id (find-list-by-id (get-in context [:request :database]) db-id))] (cond-> context the-list (assoc :result the-list))))}) (def list-item-view {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (def list-item-create {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [nm (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item nm) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) context))}) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render list-item-view db-interceptor]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (defn start-dev [] (reset! server (http/start (http/create-server (assoc service-map ::http/join? false))))) (defn stop-dev [] (http/stop @server)) (defn restart [] (stop-dev) (start-dev)) (defn test-request [verb url] (io.pedestal.test/response-for (::http/service-fn @server) verb url)) In this guide, we have built a new API with an in-memory database. You’re ready to go get funding and launch! We covered some more advanced concepts with interceptors this time: Passing results from one interceptor to another Reusing interceptors in different routes Separating query from transaction with :enter and :leave functions Testing our routes interactively at a REPL. Congratulations! You’ve finished the whole getting stated trail. To go deep on some of these topics, check out any of the following references: Interceptors Routing Quick Reference Default Interceptors 1. But do you know what status code 418 is for? 2. See the Hello World With Content Types tutorial for an explanation of the echo interceptor. 3. A private, thread-bound var.","title":"Your First API","component":"pedestal","version":"0.7","name":"your-first-api","url":"/pedestal/0.7/guides/your-first-api.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Setting Up","hash":"_setting_up","id":6},{"text":"Partial Functions","hash":"_partial_functions","id":7},{"text":"Routes Up Front","hash":"_routes_up_front","id":8},{"text":"Poking the Routes","hash":"_poking_the_routes","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Create List","hash":"_create_list","id":11},{"text":"First Attempt","hash":"_first_attempt","id":12},{"text":"url-for","hash":"_url_for","id":13},{"text":"View List","hash":"_view_list","id":14},{"text":"Add Item to List","hash":"_add_item_to_list","id":15},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":16},{"text":"The Path So Far","hash":"_the_path_so_far","id":17},{"text":"Where To Next?","hash":"_where_to_next","id":18}]},"84":{"id":84,"text":"We created Pedestal as a web framework. At the base, every web framework must solve certain common problems: Interpret incoming requests Dispatch to application code Produce a well-formed response There is an unstated requirement that these all work in a variety of deployment environments: Local development of a workspace Packaged 
1into a Jar file An exploded version of a packaged Jar file Packaged into a Docker container Further, different teams prefer a variety of different request handling frameworks: Tomcat Jetty Undertow Netty Vert.x etc. One more dimension of complexity arises from the relevant styles of application we want to support: Traditional server-rendered pages An API supporting a SPA (Single Page Application) Streaming events Bi-directional WebSockets A mix of all of the above Importantly, supporting streaming events and WebSockets are explicitly asynchronous. Addressing all of these requirements led us to an architecture that is based on interceptors, the context map, and an adaptor to the HTTP network connector (for the underlying request handling framework). Here, the network occurs at the bottom of the diagram; the interceptor chain provider is initialized with the incoming request, and a series of Pedestal and application-specific interceptors perform the bulk of the work, resulting in a response that flows back to the network connector to be conveyed to the originating client. Pedestal is far from the first web framework for Clojure, and attempts to expand on ideas piloted elsewhere. Ring is likely the most popular and influential. In Ring, each route (a combination of an HTTP method and a path pattern) is mapped to a handler: the handler is just a simple function which accepts a request map as its input, and returns a response map. Because a server is more than a single route, and because many routes will share a lot of behavior such as logging, authentication, response rendering, and parameter parsing, each individual Ring route is wrapped in middleware, a function that wraps an existing handler and returns a new handler. Middleware can inspect and modify the incoming request map or the outgoing response map. For example, perhaps your Ring application needs to respond specially to HEAD requests; (ns org.example.middleware) (defn wrap-head-unsupported [handler] (fn [request] (1) (if (= :head (:request-method request)) (2) {:status 400 (3) :headers {} :body \"HEAD not supported\"} (handler request)))) (4) 1 This is the returned handler, wrapping around the original handler 2 Ring specifies at set of keys for the request map; Pedestal follows the same rules 3 Ring specifies another set of keys for the response map 4 Here’s where we delegate down to the next handler This is good, functional design, but is limited in at least one way: it’s all on the stack of a single request processing thread. Given how great Clojure is at multithreaded programming, that can be a limitation. Several of the central features of Pedestal (such as streaming events and web socket connections) are at odds with this: in these cases a long-running server-side process only occasionally needs a request processing thread to send an event, or web socket message, to the client. So, in Pedestal we want something as easily reused and composable as Ring middleware functions, without the limitations of the stack-of-function-calls invocation model. That’s interceptors. An interceptor is a bundle of up-to three functions, named :enter, :leave, and :error. :enter corresponds to the logic before delegating to the next interceptor; the request can be inspected or modified. Likewise, :leave corresponds to logic that occurs after a response map has been created. The :error function is used when an interceptor throws an exception; it’s the interceptor version of a (try …​ catch …​). Now, there’s a bit more going on. First, these :enter and :leave functions are passed a context map which contains a :request key. Any interceptor can modify the context map: some may modify the :request map inside the context, others may attach a :response map to the context. Inside the context is a queue of interceptors. Pedestal works its way through the queue, calling :enter functions, until some interceptor attaches a :response map to the context; then it works its way backwards, calling :leave functions. In practice, an interceptor looks like a normal Clojure map with keys :enter, :leave, or :error (usually just :enter and/or :leave). So, unlike a deeply wrapped function, a chain of interceptors is a data structure that can be inspected by a developer, or manipulated in code. Importantly, any interceptor can add new interceptors to the queue (because the interceptor queue itself is stored in the context, alongside the :request map). Because of this, routing boils down to an interceptor that peeks at the request and makes decisions about what additional interceptors to add to the queue. Pedestal includes general purpose interceptors for all sorts of typical HTTP request functionality: Content negotiation Request body parsing Routing Parsing query parameters Assigning content type to the response Application logic is also implemented as interceptors, though there’s some simple helpers that allow you to write these as Ring-style handlers, if you like. But Pedestal has one more big trick up its sleeve: any interceptor may, instead of returning a context map, instead return a core.async channel that conveys the context map at some point in the future; this is what allows for asynchronous request processing. Further details are in the interceptors reference. Along with moving core logic into interceptors, we have moved the HTTP connection handling out of interceptor processing to create an interface for the chain provider. The chain provider sets up the initial context and queue of interceptors. It starts execution. Pedestal includes a servlet chain provider out of the box. It connects any servlet container to an interceptor chain. The create-servlet function orchestrates this work. This is strictly a convenience function that takes a service map of everything needed to run an HTTP service. It is possible to create other chain providers. The fast-pedestal sample shows how to do this with Jetty. See the following namespaces for the HTTP chain provider: io.pedestal.http The servlet chain provider immediately works with every HTTP server that works with servlets. This allows many deployment scenarios. Sometimes it is advantageous to work directly with a server by implementing a custom chain provider. The servlet chain provider (and main interface to network connectors) is in: io.pedestal.http.impl.servlet-interceptor","title":"Architecture Overview","component":"pede
1stal","version":"0.7","name":"architecture-overview","url":"/pedestal/0.7/reference/architecture-overview.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Interceptors","hash":"_interceptors","id":2},{"text":"Chain Provider","hash":"_chain_provider","id":3},{"text":"Network Connectors","hash":"_network_connectors","id":4}]},"85":{"id":85,"text":"Pedestal uses a chain of Interceptors to process incoming HTTP requests and provide outgoing HTTP responses. However, the underlying code - the interceptors and the interceptor chain that executes them - is more general. Interceptor chains can be used for a variety of operations, such as: Processing messages from a queue, such as Kafka or JMS Performing a series of transformations on documents as part of a publishing service Processing outgoing requests and incoming responses from a back-end service A chain provider is responsible for accepting an incoming stimuli (such as an incoming HTTP request) and setting up a context map and initial interceptors to process that stimuli. The service map is processed via the execute function. Part of a chain provider’s responsibility is to identify when a request has been processed; for HTTP requests, this is when a handler or some other interceptor attaches a :response map to the context map. Pedestal itself only provides a chain provider implementation for incoming HTTP request processing, in the form of the Servlet Interceptor.","title":"Chain Providers","component":"pedestal","version":"0.7","name":"chain-providers","url":"/pedestal/0.7/reference/chain-providers.html","titles":[]},"86":{"id":86,"text":"Pedestal primarily is configured via the service map; however, there are sub-systems within Pedestal that can operate outside of a service, or before a service map is used to create and start a server. These sub-systems are: Development Mode Logging Metrics Tracing For all but Developer Mode[1], Pedestal operates in terms of a configuration function: The configuration function is specified in one of several ways, and this is resolved to a particular var in a namespace, which is invoked to return a needed value. Pedestal uses late binding to configure these values, so that it is possible to customize Pedestal’s behavior to the operating environment: anything from local developer to final production. Pedestal will search a series of sources for a value that identifies the var; these are in a specific order, with an eye towards making it possible to override the value at runtime for testing or production, as that is often a need for these subsystems. JVM system property name Environment Variable Entry in the pedestal-test-config.edn resource Entry in the pedestal-config.edn resource A hard-coded default, or nil The intent is that a Pedestal application will typically include a pedestal-config.edn on the classpath (packaged with the application’s sources or compiled classes, typically stored in resources); the pedestal-test-config.edn will only be on the classpath during local testing (typically, stored in test-resources). When necessary, these values can be overrridden when deployed to a staging or production deployment using environment variables or JVM system properties. The contents of pedestal-config.edn (and pedestal-test-config.edn) are EDN maps. The keys are the JVM property converted to a keyword (for example, :io.pedestal.log.overrideLogger). The value can be either a qualified symbol, or a string that is converted to a qualified symbol. Once a symbol is obtained from a configuration source, it is resolved to a Clojure Var. Each use of configuration has its own interpretation of the Var. The following section list the current configuration values; each heading identifies the JVM system property, then the equivalent environment variable. io.pedestal.log.overrideLogger / PEDESTAL_LOGGER Used to create an LoggerSource instance from a logger name; If not specified, then org.slf4j.LoggerFactory.getLogger(java.lang.String) is used. io.pedestal.log.formatter / PEDESTAL_LOG_FORMATTER A function used to format a logged event map to a 
1string prior to being passed to the LoggerSource. When not specified, pr-str is used. io.pedestal.log.defaultMetricsRecorder / PEDESTAL_METRICS_RECORDER Used to configure the now-deprecated support for metrics in the pedestal.log library. Supports the special string \"nil\" to indicate no metrics publishing. Does not check the EDN config files. Defaults to a registry built around jmx-recorder. io.pedestal.telemetry.metric-source / PEDESTAL_METRICS_SOURCE A function that returns an instance of MetricSource used to create metrics used by Pedestal or applications. The default, metric-source, gets the value from io.opentelemetry.api.GlobalOpenTelemetry.getMeter(java.lang.String). io.pedestal.telemetry.tracing-source/ PEDESTAL_TRACING_SOURCE A function that returns an instance of TracingSource, used to emit tracing events. The default, tracing-source, gets its value from io.opentelemetry.api.GlobalOpenTelemetry.getTracer(java.lang.String). 1. Developer mode is the exception, as it resolves to a boolean value, rather than a function to execute.","title":"Configuration","component":"pedestal","version":"0.7","name":"config","url":"/pedestal/0.7/reference/config.html","titles":[{"text":"Configuration Order","hash":"_configuration_order","id":1},{"text":"EDN Configuration Files","hash":"_edn_configuration_files","id":2},{"text":"Configuration Keys","hash":"_configuration_keys","id":3}]},"87":{"id":87,"text":"The context map is passed to each interceptor’s :enter and :leave functions, and is one of two arguments passed to an interceptor’s :error function. Pedestal makes use of a number of keys in the context map described below as part of its public API. Further keys may also be present and are officially undefined and are considered an implementation detail subject to change at any time. Key Type Description :bindings map of var → value See notes below. :io.pedestal.interceptor.chain/error Exception When error processing is invoked, this value is the most recent exception that triggered error handling. :io.pedestal.interceptor.chain/execution-id Opaque This identifier is set uniquely when the interceptor chain is initially executed. It is useful for correlating log events. Do not assume anything about the structure or type of this identifier. :io.pedestal.interceptor.chain/queue[1] Stack of interceptors These are the interceptors left to execute. You can inspect this for debugging purposes with queue, or manipulate the queue with enqueue or terminate. :io.pedestal.interceptor.chain/terminators Collection of predicates After executing each :enter function, Pedestal checks every predicate in this collection, passing the context map to each one. If any of them returns true-ish, Pedestal begins executing the :leave stack. Additional checks may be added to the context with terminate-when. The io.pedestal.interceptor.chain/queue key is removed from the context map once an interceptor chain begins processing the :leave stage. In ordinary Clojure code, the binding macro can be used to override the thread-bound values of dynamic Vars; this is not possible with interceptors, as the interceptor function will return before the next interceptor is executed. Instead, an interceptor that needs to override or communicate a value via a dynamic binding will instead modify the :bindings key of the context. Any bindings associated this way will stay present until they are dissoc-ed from the :bindings map; a binding added by one interceptor during the :enter phase will still be present during the :leave phase. It is not uncommon for an interceptor to provide an :enter function to bind a var, and a corresponding :leave function to remove the binding. Pedestal provides two macros, bind and unbind, to handle this. (def ^:dynamic *request-id* nil) (def request-id-interceptor {:name ::mdc :enter (fn [context] (chain/bind context *request-id* (str (random-uuid))) :leave (fn [context] (chain/unbind context *request-id*))}) A chain of interceptors can be used for any kind of pipelined processing with branching decisions. It is not limited to HTTP request handling. When used with Pedestal’s HTTP handling, there are additional keys of interest. The context map is created before the first interceptor is invoked. It describes the context of the interceptor execution itself. When the execution chain is connected to an HTTP server, the :request and :response keys have a special purpose. Pedestal does not attach metadata to the request map. When processing, take care to modify the map, rather than constructing a new one. Interceptors may add arbitrary keys to the request map, so it is important to preserve keys that your interceptor does not specifically modify. Key Type Description :request request map Provided by the HTTP chain provider. :response response map Added by an interceptor or handler, at which point the :enter phase of request processing is completed, and the :leave phase begins. The following context keys are only present when using the Servlet Interceptor: Key Type Description :servlet-request HttpServletRequest The request that was sent by the client. You should use the request map rather than directly accessing this. :servlet-response HttpServletResponse The response object in which the HTTP server wants its response. You should construct and attach a response map rather than directly accessing this. :servlet-config jakarta.servlet.ServletConfig The servlet configuration object. :servlet jakarta.servlet.Servlet The servlet itself. 1. Do not access this key directly, use the queue function to see which interceptors are scheduled to execute. A future release of Pedestal may change how the interceptor queue is stored in the context, so the key may no longer exist, buy the queue function will still work.","t
1itle":"Context Map","component":"pedestal","version":"0.7","name":"context-map","url":"/pedestal/0.7/reference/context-map.html","titles":[{"text":"Description","hash":"_description","id":1},{"text":":bindings","hash":"_bindings","id":2},{"text":"As Applied to HTTP","hash":"_as_applied_to_http","id":3},{"text":"Servlet Keys","hash":"_servlet_keys","id":4}]},"88":{"id":88,"text":"If your service map does not include the key :io.pedestal.http/interceptors, then Pedestal will create a vector of default interceptors for you. The default interceptors are added to your service map when you call either create-servlet, or create-server. This document explains which interceptors are added under different conditions. Each interceptor has its own documentation that describes its specific behavior. If your service map already includes the key :io.pedestal.http/interceptors when you call one of the create- functions, then Pedestal won’t add the default interceptors. So what should you do if you want to use the default interceptors, but want to add your own interceptors to the default stack? The solution is to call default-interceptors yourself, before calling create-server or create-servlet. That way, default-interceptors can build the default stack, then your application code has an opportunity to modify it. By the time you call create-server or create-servlet, the :io.pedestal.http/interceptors key will have your modified version of the default interceptors. Here is an example of adding interceptors to perform authentication and authorization on every request. (Assuming we have a namespace auth with functions to construct these interceptors given a configuration.) (defn service [service-map authn-config authz-config] (-> service-map (http/default-interceptors) (1) (update ::http/interceptors conj (auth/authentication-interceptor authn-config)) (2) (update ::http/interceptors conj (auth/authorization-interceptor authz-config)) (3) (http/create-server))) (4) 1 Attach the default interceptors to our service map 2 Modify the defaults to add authentication. 3 modify the defaults to add authorization. 4 Create the server as usual. This would normally attach the defaults, but will skip that because we’ve set them up ourselves. Some of the default interceptors are conditional. Pedestal adds them when other parts of the service map indicate a need for an interceptor. These will be noted below. These are presented in the order that they appear in the interceptor vector. That means their :enter functions will be called in the order they appear in this document, and their :leave functions are called in reverse order. The following identifies the interceptor by their var or function, in the order they are added by default-interceptors. Always added, unless the :io.pedestal.http/tracing options is set to nil. Always added. Logs each request at info level. See Logging to configure loggers and logging levels. Added when the service map has a value for :io.pedestal.http/allowed-origins. Always added. However, if the service map includes a value for :io.pedestal.http/not-found-interceptor, then that interceptor will be used in this position instead of the built-in. Added when the service map has a value for :io.pedestal.http/enable-session or :io.pedestal.http/enable-csrf. Added when the service map includes a value for :io.pedestal.http/enable-csrf. Always added. Always added. Always added. Added when the service map has a value for :io.pedestal.http/resource-path. Added when the service map has a value for :io.pedestal.http/file-path. Added when the service map has a non-nil value for :io.pedestal.http/secure-headers or when the service map does not include the key :io.pedestal.http/secure-headers at all. Always added. Added unless :io.pedestal.http/path-params-decoder is not is set to nil.","title":"Default Interceptors","component":"pedestal","version":"0.7","name":"default-interceptors","url":"/pedestal/0.7/reference/default-interceptors.html","titles":[{"text":"Description","hash":"_description","id":1},{"text":"Modifying the Default Stack","hash":"_modifying_the_default_stack","id":2},{"text":"Default Interceptors","hash":"_default_interceptors","id":3},{"text":"request-tracing-interceptor","hash":"_request_tracing_interceptor","id":4},{"text":"log-request","hash":"_log_request","id":5},{"text":"allow-origin","hash":"_allow_origin","id":6},{"text":"not-found","hash":"_not_found","id":7},{"text":"session","hash":"_session","id":8},{"text":"anti-forgery","hash":"_anti_forgery","id":9},{"text":"content-type","hash":"_content_type","id":10},{"text":"query-params","hash":"_query_params","id":11},{"text":"method-param","hash":"_method_param","id":12},{"text":"resource","hash":"_resource","id":13},{"text":"file","hash":"_file","id":14},{"text":"secure-headers","hash":"_secure_headers","id":15},{"text":"router","hash":"_router","id":16},{"text":"path-params-decoder","hash":"_path_params_decoder","id":17}]},"89":{"id":89,"text":"Pedestal can operate in two different modes: production, and local development. Local development mode changes the behavior of a handful of macros and functions to support live development at the REPL. Development mode is enabled by setting value of JVM system property io.pedestal.dev-mode to true at startup. From the command line, this can be accomplished by using the -J switch: clj -J-Dio.pedestal.dev-mode=true ... Alternately, you can update your deps.edn file, associating a JVM option with an alias: ... :aliases {:dev-mode {:jvm-opts [\"-Dio.pedestal.dev-mode=true\"]} ... You can then reference the alias when starting a REPL session: clj 
1-A:dev-mode ... The var dev-mode? stores the boolean result derived from reading the system property; there is no mechanism for turning development mode on or off during execution.","title":"Development Mode","component":"pedestal","version":"0.7","name":"dev-mode","url":"/pedestal/0.7/reference/dev-mode.html","titles":[]},"90":{"id":90,"text":"Pedestal must do something useful when an interceptor throws an exception. It would not be useful to bubble up the runtime call stack, because that call stack only includes the Pedestal machinery itself. Interceptors are data structures that conceptually represent frames on a call stack, but they are not present in the usual nested fashion on the Java call stack. Remember that request processing may be asynchronous, in which case the call stack doesn’t even represent the flow of control to the point where the exception occurred. Instead, Pedestal works backwards, looking for an interceptor to handle the exception. All exceptions thrown from an interceptor are captured; Pedestal wraps such exceptions in an ExceptionInfo instance which is then bound to the :io.pedestal.interceptor.chain/error key in the context map. As long as there is an error attached to that key, Pedestal will not invoke the usual :enter and :leave functions. Instead, it looks for the next interceptor in the chain that has an :error function attached to it. This error handling proceeds the same way regardless of whether interceptors in the chain returned a context map or async channel. (See Interceptor Return Values for details on async return.) As a result, Pedestal unifies error handling for synchronous interceptors and asynchronous interceptors. You can supply your own :error handling interceptor anywhere in the interceptor queue. Pedestal will call the function bound to :error on an interceptor with two arguments: The context map An ExceptionInfo instance Pedestal wraps all exceptions in ex-info. The following keys are defined in its exception data map: Key Type Description :execution-id long Unique value that identifies one \"run\" through the interceptors. :stage Keyword Either :enter or :leave depending on which direction the execution was going. :interceptor Keyword The :name from the interceptor that threw the exception :exception-type Keyword Keywordized form of the exception’s Java class name :exception Throwable The caught exception. The context map does not contain the :io.pedestal.interceptor.chain/error key. The :error function can do one of the following things: Return the context map. This is \"catching\" the error. Because the context map has no error bound to it, Pedestal will exit error handling and execute any remaining :leave handlers. Return the context map with the exception re-attached at :io.pedestal.interceptor.chain/error. This indicates that the handler doesn’t recognize that exception and declines to handle it. Pedestal will continue looking for a handler. Throw a new exception. This indicates that the interceptor should have been able to handle the error, but something went wrong. Pedestal will start looking for a handler for this new exception. In that last case, Pedestal keeps track of the exceptions that were overridden. These are in a seq bound to :io.pedestal.interceptor.chain/suppressed in the context map. Most commonly, the interceptor will return the context map with a :response map; this will trigger normal response processing by invoking any remaining interceptors' :leave functions. As a convenience, Pedestal offers a macro to build error-handling interceptors that use pattern-matching to dispatch. error-dispatch builds interceptors that use core.match to select a clause. This function is provided in the io.pedestal/pedestal.error library; to use error-dispatch, you must explicitly include the library in your project. Error dispatch uses core.match to match the ex-data of the exception; this allows you to handle a variety of different scenarios very concisely. core.match works top-to-bottom, so you order your most specific cases first, and your more general cases later. Each match clauses specifies certain keys from the above list, and corresponding values to match against; the first match term that satisified all the conditions is executed, which determines the behavior when a matching error occurs. Here is an example from the test suite: (def service-error-handler (1) (error-dispatch [context ex] (2) [{:exception-type :java.lang.ArithmeticException :interceptor ::another-bad-one}] (assoc context :response {:status 400 :body \"Another bad one\"}) (3) [{:exception-type :java.lang.ArithmeticException}] (assoc context :response {:status 400 :body \"A bad one\"}) (4) :else (assoc context :io.pedestal.interceptor.chain/error ex))) ,,, (def routes (route/expand-routes #{[\"/v1/api\" :any [service-error-handler ,,,]]})) (5) 1 This macro returns code that evaluates to an interceptor with a :leave callback. Binding the interceptor to a var is the normal case. 2 This is a pattern match that looks for an ArithmeticException, but only thrown by a particular interceptor. If the pattern matches, this expression gets evaluated. The error is handled and a response attached. 3 Another pattern match expression, matching any ArithmeticException s that weren’t matched before. We return a different response body in these cases. 4 :else always matches because it is a truthy value. Reattaching the error tells Pedestal to keep looking for a handler. 5 We use the resulting interceptor like any other. For HTTP, the Servlet Interceptor provides the \"last ditch\" error handlers that log the error and return an error response. In development mode, they emit a stack trace as the response body; you will see the error logged from the :io.pedestal.http.impl.servlet-interceptor/stylobate [1] interceptor. The error logged by the \"last ditch\" error handler includes the context map. This is often quite large and may contain data you do not wish to log. While having defaults is nice, it is highly recommended that services implement their own error handling/logging. This gives you full control over how errors are processed. Some exceptions should not be logged; by default, Pedestal will identify an exception that indicates a broken pipe to the client when sending the response; such errors will not be logged but will be quietly ignored. This logic can be altered using the service map :io.pedestal.http/service-fn-options key; the value is itself a map, and the key :exception-analyzer can be specified. An exception analyzer function is passed the context map and the unhandled exception; it may return nil to prevent the exception from being logged, or return the exception itself, or an alternate exception, to have that be the exception that is logged. When not specified, the default-exception-analyzer function is used; this is where the logic to check for a broken pipe exception lives. 1. Stylobate is the term for a supporter of columns in classic Greek and Roman architecture; here the interceptor is providing support to the rest of Pedestal.","title":"Error Handling","component":"pede
1stal","version":"0.7","name":"error-handling","url":"/pedestal/0.7/reference/error-handling.html","titles":[{"text":"Error Function","hash":"_error_function","id":1},{"text":"Error Dispatch Interceptor","hash":"_error_dispatch_interceptor","id":2},{"text":"Logging Uncaught Exceptions","hash":"_logging_uncaught_exceptions","id":3}]},"91":{"id":91,"text":"Support for the Immutant web server was removed in Pedestal 0.7; Immutant itself has not been updated since 2018.","title":"Immutant","component":"pedestal","version":"0.7","name":"immutant","url":"/pedestal/0.7/reference/immutant.html","titles":[]},"92":{"id":92,"text":"The major parts of Pedestal are isolated via Clojure protocols. The protocols are for internal structure and external extension. This reference identifies the most important protocols in Pedestal’s structure and how you might use them in an application. IntoInterceptor allows pretty much anything to become an interceptor when needed. Routers use this when building routes: anything that satisfies IntoInterceptor is legal to use in the interceptor vector of a route. This protocol also comes into play when appending new interceptors to the queue. Pedestal extends IntoInterceptor onto a variety of Clojure and Java types. See the interceptors reference for details of their behaviors. These protocols break up the lifecycle of routes and allow both extension points and alternative strategies in several places. Over time, Pedestal has evolved several data structures for representing routing of HTTP requests; each of these data structures is a kind of routing specification. The routing specification ultimately expresses which details of an incoming request, such as HTTP method or URI path, are used to find a specific route (and the interceptors and handler for that route). In parallel to the data structures, Pedestal has several algorithms for using the routing specification to dispatch an incoming request; some algorithms may be most efficient for small services with very few routes, others are better for large services with more (and more complex) routes. The protocols described here are what allow the individual pieces to cooperate; this also means that it is possible to define an application-specific routing specification format and use it with a Pedestal-supplied algorithm, or use any of the built-in routing specifications combined with an application-specific algorithm. The combination of routing specification with a routing algorithm results in an instance of the Router interface. The Router protocol defines just one function: find-route. find-route is passed the Router itself and a request map, and must return the route map for the route that it matched. The route map not only identifies the interceptors and handler to add to the interceptor queue, but further captures path variables that may be part of the matched URL (further details TBD). An instance of Router is returned by the router constructor identified in the application’s service map by the key :io.pedestal.http/router. ::http/router Value Constructor :linear-search Linear Search Router :prefix-tree Prefix Tree Router :map-tree Map Tree Router application-supplied function The function itself, called with sequence of routes as returned by from the RouterSpecification instance Whether built-in, or supplied by the application, the constructor is just a function that is passed an expanded route specification, and returns an instance of Router. The RouterSpecification protocol is used to create a routing interceptor from some definition of routes, and a single Router. This is the final step in the process of turning a routing specification into a routing interceptor. Whatever is returned from the router-spec function of the protocol must be an interceptor. The returned interceptor will include an :enter function that must accept a context map and enqueue interceptors based on whatever criteria it chooses. ExpandableRoutes can convert all kinds of data structures representing a routing specification into a single canonical format that can be used to construct a Router. This occurs inside the expand-routes function. Pedestal provides implementations of ExpandableRoutes for several types: Type Interpretation clojure.lang.APersistentVector Terse Syntax clojure.lang.APersistentMap Verbose Syntax clojure.lang.APersistentSet Table Syntax Since the call to expand-routes comes from application code, it would be rare for an application to need to extend ExpandableRoutes. The result of expand-routes is a seq of maps that will be passed to the Router. This protocol applies to anything that can be in the :body key of a response map. The two functions in the protocol tell Pedestal what content type the body implies, and how to serialize the body to an output stream. Pedestal extends this protocol to several Java and Clojure types to produce the behavior detailed in Response Bodies. Applications should not assume any output stream type more specific than java.io.OutputStream. This protocol is a more specific version of WritableBody. If the value in the :body key of a response map satisfies WritableBodyAsync, then Pedestal treats it as a streaming result. See Streaming Responses for full details. It would be rare for an application to extend this protocol. Most of the time, an application would be better off providing an NIO channel or a core.async channel in the response body.","title":"Important Protocols","component":"pede
1stal","version":"0.7","name":"important-protocols","url":"/pedestal/0.7/reference/important-protocols.html","titles":[{"text":"Interceptor Protocols","hash":"_interceptor_protocols","id":1},{"text":"IntoInterceptor","hash":"_intointerceptor","id":2},{"text":"Routing Protocols","hash":"_routing_protocols","id":3},{"text":"Router","hash":"_router","id":4},{"text":"RouterSpecification","hash":"_routerspecification","id":5},{"text":"ExpandableRoutes","hash":"_expandableroutes","id":6},{"text":"Servlet Protocols","hash":"_servlet_protocols","id":7},{"text":"WritableBody","hash":"_writablebody","id":8},{"text":"WritableBodyAsync","hash":"_writablebodyasync","id":9}]},"93":{"id":93,"text":"","title":"Reference","component":"pedestal","version":"0.7","name":"index","url":"/pedestal/0.7/reference/index.html","titles":[]},"94":{"id":94,"text":"See the guide This is the detailed interceptor reference; if you are new to Pedestal you may want to start with the What Is An Interceptor Guide. Interceptors are the basic unit of work in Pedestal. The core library provides interceptors that are generally useful for creating HTTP web services. Applications augment those with their own logic to handle. An interceptor is a pair of unary functions [1] An interceptor must provide at least one of :enter, :leave and :error. Each function is called with a context map and must return either a context map or a core.async channel that will deliver a context map; the latter case triggers asynchronous request processing. Pedestal calls the :enter function on the way \"in\" to handling a request. It calls the :leave function on the way back \"out\". This is shown here for a single interceptor: Either the :enter or :leave function may be omitted without harm. Logically speaking, interceptors form a queue. During the :enter phase, the next interceptor is popped off the queue, pushed onto the leave stack, and it’s :enter function, if any, is executed. Once the handler (or other interceptor) adds a :response to the context, the chain logic switches to :leave mode: it pops interceptors off the leave stack and invokes the :leave function, if any. Because it’s the leave stack the :leave functions are invoked in the opposite order from the :enter functions. Both the queue and the stack reside in the context map. Since interceptors can modify the context map, that means they can change the plan of execution for the rest of the request! Interceptors are allowed to enqueue more interceptors to be called, or they can terminate the request. This process, of running all the interceptor :enter functions, then running the interceptor :leave functions, is called executing the interceptor chain. Interceptors expect certain keys to be present in the context map. These context bindings are part of the contract between provider and interceptors. The most important keys are :request, which holds the request map, and :response, which holds the response map. Technically, the interceptor pipeline doesn’t know about :request and :response, because the interceptor pipeline is not specically purposed with HTTP processing; the Servlet Interceptor adds these details. Further keys are described in the context map reference. Interceptor functions must return values. Returning nil will cause an internal server error. An :enter or :leave function may return a context map directly. In this case, processing continues with the next interceptor. If the interceptor is expected to take a long time to return a result, it may instead return a core.async channel. Pedestal will yield the request processing thread back the the servlet container (so that it can process other incoming requests) and wait for a value to be produced. Only one value will be consumed from the returned channel, and the value must be a context map. Request processing continues once the channel delivers the context map. Chaining With Async Interceptors Any interceptor downstream of an asynchronous interceptor will be executed in the core.async dispatch thread pool. This can be problematic if any later interceptor or handler performs any blocking I/O, as the thread pool is a fixed size. Generally speaking, if any interceptor is asynchronous, all following non-trivial interceptors should also be asynchronous. Trivial interceptors do short computations or make changes to the context map; they do not perform any I/O or other operations that could block the thread they execute on, such as any file or socket I/O. When an interceptor returns a channel, the request processing thread can be returned to the servlet container. This may allow another pending request to be processed while the initial request is parked, waiting for the channel returned by an interceptor to convey the new context map. The protocol IntoInterceptor represents anything that can be used as an interceptor. Pedestal extends that protocol to the following: Type Interpretation Map The :enter, :leave, :error, and :name keys are used directly. Function The function is interpreted as a handler (or, rarely, as an indirect interceptor.) List The list is evaluated and its result is used as an interceptor. [2] Cons Same as List (and also deprecated) Symbol The symbol is resolved and its target is converted to an interceptor. Var The var is de-referenced and its value is converted to an interceptor. Most of these cases are provided to make routing syntax easier, or reflect earlier attempts to improve live reloading at the REPL. Applications should mainly use the map form as shown in the earlier examples when defining interceptors for routing purposes. The queue of interceptors remaining to execute is held in the context map. This means that an interceptor can enqueue other interceptors to be executed. In fact, this is exactly how rout
1ing works, the router is an interceptor that matches requests and enqueues the desired interceptors when a specific route is identified. Use enqueue to push more interceptors onto the queue. Use terminate if processing should not continue - though normally, this is accomplished by attaching a :response map (the response map) to the context map. Interceptor Records Interceptors that are explicitly enqueued by the application must be defined using the interceptor function. This function takes a value which extends the IntoInterceptor protocol, and returns an Interceptor record. This is not necessary when constructing interceptors used in routing because interceptor representations are transformed to Interceptor records during route expansion. It’s worth noting that when an interceptor queues additional interceptors for execution, they execute after all interceptors already in the queue (not immediately after the interceptor that modified the queue). This means you could, for example, put a routing interceptor first in the queue, then a few interceptors that provide behavior common to all routes, and those common interceptors will run before any route-specific interceptors. A handler function is a special case of an interceptor. Pedestal treats the handler as a function that accepts a request map parameter, and returns a response map result. A handler does not have access to the full execution context, therefore, it cannot manipulate the interceptor queue. Because a handler takes one kind of thing (request) and returns a different kind of thing (response), it can only be used in the last position of an interceptor stack. Handlers are always synchronous; they must return a response map, they may not return a channel that delivers a response map. When IntoInterceptor is applied to a function and that function has either the :interceptor or :interceptorfn metadata, it is not treated as a handler. The function will be invoked, and the returned value will itself be converted into an interceptor. Note that you will need to carefully put the metadata on the function itself, and not on the symbol or Var associated with the function: ^{:interceptor true} (fn [] ...) Pedestal supports defining interceptor-specific error handlers via the :error key. Refer to the Error Handling reference for more details. The io.pedestal/pedestal.service library includes a large set of interceptors that are specialized for HTTP request handling. Many of these interceptors are automatically added to the interceptor queue by the default-interceptors function. allow-origin anti-forgery body-params dev-allow-origin method-param negotiate-content path-params-decoder query-params several from io.pedestal.http.ring-middlewares (see also Ring Middleware) Routing-related interceptors are provided by the io.pedestal/pedestal.route library: path-params-decoder query-params api:router[ns=io.pedestal.http.route 1. An optional third function is used for error handling. 2. This is supported behavior related to the table router syntax, but is no longer commonly used and is deprecated.","title":"Interceptors","component":"pedestal","version":"0.7","name":"interceptors","url":"/pedestal/0.7/reference/interceptors.html","titles":[{"text":"Context Bindings","hash":"_context_bindings","id":1},{"text":"Interceptor Return Values","hash":"_interceptor_return_values","id":2},{"text":"IntoInterceptor","hash":"_intointerceptor","id":3},{"text":"Manipulating the interceptor queue","hash":"_manipulating_the_interceptor_queue","id":4},{"text":"Handlers","hash":"_handlers","id":5},{"text":"Indirect Interceptors","hash":"_indirect_interceptors","id":6},{"text":"Error Handling","hash":"_error_handling","id":7},{"text":"Pedestal Interceptors","hash":"_pedestal_interceptors","id":8}]},"95":{"id":95,"text":"Jetty 11 is the default container used with Pedestal. The following table lists the container options supported by Jetty. Key Value type Description :daemon? Boolean Use daemon threads. Defaults to false. :max-threads Integer The maximum number of threads to use. Defaults to 50. :reuse-addr? Boolean Reuse the socket address. Defaults to true. :thread-pool A ThreadPool instance. Override the Jetty thread pool (ignores max-threads) :configurator Function A function called with the org.eclipse.jetty.server.Server instance. Expected to return the Server instance. Use when advanced customization is required. :context-configurator Function A function called with the org.eclipse.jetty.servlet.ServletContextHandler instance. Use when advanced customization is required. :ssl? Boolean Allows connections over HTTPS. :ssl-port Integer Port to use for TLS listener. Defaults to 443 and implies :ssl?. :h2c? Boolean HTTP/2 cleartext support. Allows upgrading connections from HTTP/1.1 to the Http/2 protocol. Defaults to true. When true, :port must be specified. HTTP/2 versioning, Jetty HTTP/2 documentation. :h2? Boolean HTTP/2 TLS support. When true, :ssl-port must be specified. HTTP/2 versioning, Jetty HTTP/2 documentation. :connection-factory-fns Vector of Functions A vector of functions that take the options map and an org.eclipse.jetty.server.HttpConfiguration instance and return an org.eclipse.jetty.server.ConnectionFactory instance. Ap
1plies only to the SSL connection. :ssl-context-factory An SslContextFactory instance. The SSLContextFactory instance to use when creating the server. If specified, :key-password, :keystore, :truststore, :trust-password, :security-provider, :client-auth are ignored. :keystore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :key-password String Used for TLS. Keystore password. Not used if :ssl-context-factory is set. :truststore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :trust-password String Used for TLS. Trust store password. Not used if :ssl-context-factory is set. :client-auth String SSL client certificate authenticate, may be set to :need, :want or :none. Defaults to :none. :security-provider String Java Security Provider name. Refer to the Jetty ConfiguringSSL/TLS documentation. Not used if :ssl-context-factory is set. :io.pedestal.http.jetty/http-configuration An HttpConfiguration instance. The HttpConfiguration instance to use when creating the server. Use when advanced customization is required. The default HttpConfiguration is listed below. The default HttpConfiguration is: SendDateHeader is set to true SendXPoweredBy is set to false SendServerVersion is set to false An instance of org.eclipse.jetty.server.SecureRequestCustomizer is added via addCustomizer When :ssl?, :ssl-port or h2? is provided, securePort is set to the value of :ssl-port and secureScheme is set to \"https\".","title":"Jetty 11","component":"pedestal","version":"0.7","name":"jetty","url":"/pedestal/0.7/reference/jetty.html","titles":[{"text":"Container Options","hash":"_container_options","id":1},{"text":"Default HttpConfiguration","hash":"_default_httpconfiguration","id":2}]},"96":{"id":96,"text":"Pedestal is composed of multiple libraries, and many of these can be used outside of a Pedestal application. Table 1. Pedestal Libraries Summary Library Name Description Dependencies pedestal.common Common functionality and internal utilities. pedestal.telemetry Wrapper around Open Telemetry for generating application metrics and tracing. pedestal.log Wrapper around Simple Logging Facade for Java [1] pedestal.common, Dropwizard Metrics, Open Tracing pedestal.interceptor Asynchronous interceptor pipeline pedestal.log, pedestal.common pedestal.error Simple error catching for interceptors pedestal.interceptor, org.clojure/core.match pedestal.route HTTP request routing pedestal.log, pedestal.interceptor, pedestal.common, core.async pedestal.service Container-agnostic HTTP service support pedestal.log, pedestal.telemetry, pedestal.interceptor, pedestal.route, core.async, Java Servlet API, Java WebSocket API, ring/ring-core, several others pedestal.jetty Jetty 11 adapter pedestal.log, pedestal.service, Jetty 11 (server, servlet, alpn-servicer, http2-service, etc.) pedestal.service-tools Tools used for local development pedestal.service, org.clojure/data.xml, ns-tracker Pedestal libraries are uploaded to the Clojars repository; files in such a repository are called artifacts. All pedestal libraries are in the io.pedestal group. For Leiningen, add this vector to the :dependencies list inside your project.clj: [io.pedestal/pedestal.jetty \"0.7.2\"] You will adjust the library name as necessary. For Clojure Deps, add this key and value to the :deps map inside your deps.edn: io.pedestal/pedestal.jetty {:mvn/version \"0.7.2\"} Pedestal is built using Clojure Deps; this means that it is possible to get access to bleeding-edge versions of the libraries directly from the GitHub repository. io.pedestal/pedestal.jetty {:git/url \"https://github.com/pedestal/pedestal.git\" :git/sha \"a0b6a0f7e57710ba6b9f0aa3a62dd1f68e278f43\" :deps/root \"jetty\"} All Pedestal libraries are in the same repository, :deps/root is used to select the sub-directory containing the library’s code (this matches the library name, without the pedestal. prefix). :git/url’s are not transitive; when the library you select has dependencies on other Pedestal libraries, those will be accessed as :mvn/version dependencies. You may need to provide additional dependencies to bring in multiple Pedestal libraries. For example, if you are verifying a bug fix that was split between pedestal.route and pedestal.service, you should introduce dependencies on both libraries; otherwise you may only get half of the bug fix. 1. Also, some deprecated metrics and tracing functionality.","title":"Pedestal Libraries","component":"pede
1stal","version":"0.7","name":"libraries","url":"/pedestal/0.7/reference/libraries.html","titles":[{"text":"Artifact Coordinates","hash":"_artifact_coordinates","id":1},{"text":"Git Artifact Coordinates","hash":"_git_artifact_coordinates","id":2}]},"97":{"id":97,"text":"Provides the user with the most control over routing outside of implementing a custom router. You require precise control over routing and the routing performance tradeoff is acceptable to your service. Add the key :io.pedestal.http/router to the service map with the value :linear-search. This implementation routes requests in linear time, so it’s the simplest and slowest of Pedestal’s router implementations. Pedestal’s first router implementation. Query and path constraints are used in routing decisions unlike the Prefix Tree Router or Map Tree Router. That is, if a route is considered (based on path, method, and so forth) but the path or query parameters violate the constraints defined in the route, then the search will continue. For the other routers, a route is matched and then either used, or (if constraints do not match) the entire request is treated as unrouted.","title":"Linear Search Router","component":"pedestal","version":"0.7","name":"linear-search-router","url":"/pedestal/0.7/reference/linear-search-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5}]},"98":{"id":98,"text":"A critical part of Pedestal is how it performs logging. At the core, Pedestal builds upon the Simple Logging Facade for Java. This facade is an abstraction over several different libraries used for logging, such as Logback, Apache Log4j or the built-in java.util.logging packages. As part of your application’s dependencies, you can include an adapter to your preferred logging library (see the notes on such dependencies). If you fail to include any such library, you will see the following warning: user=> (require '[io.pedestal.log :as l]) SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. Without a logging adapter, all logging is a no-op. You should include a logging adapter, even if just for testing. Pedestal departs from many Java and even Clojure logging frameworks in that it’s core approach is to log events, not strings. These events are in the form of a Clojure map. The intent is that logging in one program can be a source of data for another. Although this kind of thing is possible when logging output is primarily formatted for human readability, doing so in practice often involves reams for special rules and regular expressions - with Pedestal, it is very straight-forward to isolate the Clojure map and then parse it as EDN data. The central macros in the io.pedestal.log namespace are trace, debug, info, warn, and error. These macros are responsible for obtaining a LoggerSource instance based on the namespace name (unless overridden) and convert
1ing the passed keys and values into a Clojure map, which is printed to a string and logged as the event message. Added to the map is the extra key, :line, which identifies the line number in the source. Bear in mind that often, Java libraries do their own logging, and that logging will not be formatted as Clojure maps. It is common for loggers to add an :in key, whose value is symbol identifying the function containing the logging call. Example: (ns org.example.routes (:require [io.pedestal.log :as l]) ... ... (l/debug :in 'auth :user-id user-id :roles user-roles) ... Sample logging output: DEBUG org.example.routes - {:in auth, :user-id \"3d1535dd-18fa-40f1-95f8-78d7f44b0319\", :roles #{\"buyer\" \"admin\" \"manager\"}, :line 37} Note that the order of keys in the map is not specified. The use of macros, not functions, ensures that logging is efficient. The code emitted by the macro always checks to see if logging is enabled for the logger; when it is not, no further work occurs - the expressions passed to the macro are not evaluated. A common case when logging is to log caught exceptions; the exception is specified with the :exception key, and the value must be some kind of java.lang.Throwable, though it’s generally an instance of java.lang.Exception. (try ... true (catch Exception e (l/error :in 'processor :exception e) false)) Table 1. Other special keys used with logging macros Key Value :io.pedestal.log/logger The logger instance to use, rather than the default. The logger must satisfy the LoggerSource protocol. The default is a logger with name matching the namespace. :io.pedestal.log/formatter A function that can be passed an event map and return a string used when logging (the underlying logging APIs expect a string message). The default is pr-str (via default-formatter). The spy macro takes an expression, evaluates it, and returns it. Before returning, it logs the expression (as key :spy) and the result (as key :value) at debug level. This is often useful during REPL-driven development. The logging functionality is itself pluggable; what Pedestal supplies out of the box is an adapter for SLF4J in the form of a LoggerSource protocol, extended onto SLF4J’s org.slf4j.Logger interface. If you wish to use pedestal-log with a different logging library, you may specify an override for the logger source; this is a function that is passed a logger name string, and returns an instance that extends LoggerSource. The override can be specified as the fully qualified name of a Clojure function, either via system property io.pedestal.log.overrideLogger or by environment variable PEDESTAL_LOGGER. By default, log event data is formatted to a string using pr-str (this default is provided by default-formatter), before being passed (via the methods of the LoggerSource protocol) to the underlying logging implementation. However, this can be overridden, which is useful for: Identifying and removing or redacting personal data that should not be logged Formatting the log output in a particular way, such as formatting as JSON rather than EDN The system property io.pedestal.log.formatter, or environment variable PEDESTAL_LOG_FORMATTER, can specify a fully qualified function name; this function is passed the event map and returns a string, and will be used instead of pr-str as the default when the :io.pedestal.log/formatter key is not provided. The MDC is a feature of SLF4J that is mapped onto different logging implementations, just like the Logger. An SLF4J MDC is essentially a map of string keys and string values stored as per-thread global state. The SLF4J MDC is useful for storing additional values that should be logged; a common example is a request correlation id. When setting up the format for logging, an additional directive is used to output the MDC. For example, when using ch.qos.logback.core.ConsoleAppender, the %msg pattern outputs the message string (the printed version of the Clojure event map); the %X pattern is used to print out individual keys in the MDC. Pedestal has its own MDC, as a dynamic var. The default behavior is for the Pedestal MDC map to be formatted (as with an event map) and stored into the MDC using the key \"io.pedestal\". Thus the pattern %X{io.pedestal} will print out that Pedestal MDC. The macro with-context and allows values to bound to the Pedestal MDC, which are then copied into the \"io.pedestal\" key of the SLF4J MDC; at the end of the block, the prior state of the SLF4J and Pedestal MDCs are restored. Be careful about using the SLF4J MDC when using core.async or any kind of thread pool; the MDC is stored per-thread, and there isn’t an easy way to copy its value over to arbitrary new threads. Table 2. Special Keys used with with-context Key Value :io.pedestal.log/mdc The MDC to use, which must implement LoggingMDC. :io.pedestal.log/formatter A function that can be passed an MDC map and return a string used when setting the io.pedestal key of the SLF4J MDC. The default is pr-str via default-formatter. Logback supports overriding a logging configuration file that is used in production with one that is only used in tests - it’s simply a matter of having a file named logback-test.xml on the classpath. A full production Logback configuration will often set limits on what’s logged, and deal with writing output to timestamped files. For testing and local development, you want to be less selective on logging output, and log to the console. This is a somewhat minimal example: <configuration scan=\"true\" scanPeriod=\"1 seconds\"> <appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAp
1pender\"> <encoder> <pattern>%-5level %logger - %msg%n</pattern> </encoder> </appender> <root level=\"debug\"> <appender-ref ref=\"STDOUT\"/> </root> <logger name=\"org.eclipse.jetty\" level=\"warn\"/> <logger name=\"io.pedestal\" level=\"warn\"/> </configuration> Both Jetty and Pedestal can produce quite a bit of debug output, so the sample above disables that logging. Because the Logback configuration enables file scanning, it can be updated at runtime to enable or disable logging of specific namespaces. The io.pedestal.log namespace contains additional protocols and functions related to metrics and tracing; these are deprecated in Pedestal 0.7 and have been replaced with new APIs built around Open Telemetry; the deprecated functions will be removed in a future Pedestal release.","title":"Logging","component":"pedestal","version":"0.7","name":"logging","url":"/pedestal/0.7/reference/logging.html","titles":[{"text":"SLF4J","hash":"_slf4j","id":1},{"text":"Events, Not Strings","hash":"_events_not_strings","id":2},{"text":"Logging macros","hash":"_logging_macros","id":3},{"text":"Exceptions","hash":"_exceptions","id":4},{"text":"Other special keys","hash":"_other_special_keys","id":5},{"text":"spy macro","hash":"_spy_macro","id":6},{"text":"Overriding the LoggerSource","hash":"_overriding_the_loggersource","id":7},{"text":"Overriding the default event formatter","hash":"_overriding_the_default_event_formatter","id":8},{"text":"Mapped Diagnostic Context (SLF4J)","hash":"_mapped_diagnostic_context_slf4j","id":9},{"text":"Example logback-test.xml","hash":"_example_logback_test_xml","id":10},{"text":"Metrics and Tracing","hash":"_metrics_and_tracing","id":11}]},"99":{"id":99,"text":"Many Pedestal-based services do not leverage every routing feature. The Map Tree router is optimized for the static routes use case. Routes requests in constant time (path matching is done by map lookup). No need to do anything. This is Pedestal’s default router implementation. While this is Pedestal’s default router, it falls back to the Prefix Tree Router when path parameters or wildcards are used in routes. Like the Prefix Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #422","title":"Map Tree Router","component":"pedestal","version":"0.7","name":"map-tree-router","url":"/pedestal/0.7/reference/map-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"100":{"id":100,"text":"This describes metrics as implemented in 0.6; this is a focus of effort in 0.7 and so will likely change considerably. You can think of metrics as a stream of tiny, time-stamped events, that flow into a special kind of database, organized to efficiently query such a stream, and aggregate the results in multiple useful ways. A full explanation of metrics is beyond the scope of this document, however. Metrics are a key part of observability, the ability to see how your application, running as tens or hundreds (or thousands) of servers, is operating as a whole. Where logging can give you information about a specific request, and can somewhat grudgingly aggregate data together - metrics services such as Prometheus exist to aggregate vast amounts of data points together, and give you the ability to see what’s happening to your application now, or over time, broken up by any number of dimensions. Dimensions are used to select events by application-supplied values, that can include such things as the server’s hostname, a request’s URI, the environment (staging vs. production), or the AWS region. At the core, your application will include extra code to emit metrics; depending on the underlying metrics service you are using, these are either stored in-memory until scraped by another collecting service, or pushed to the collecting service at intervals. Pedestal’s default metrics library is DropWizard, and the default configuration stores the results internally in JMX. The metrics functions are defined in the io.pedestal.log namespace, along with supporting protocols and utility functions. Generally, there is no need to define a metric before using it; it will be registered or created, from its name, automatically when first used. All of these metrics-producing functions have tw
1o forms: the canonical form accepts a recorder, the metric name, and additional arguments; the common form omits the recorder, and uses the default-recorder. A metric name can be any object that can be converted to a string; usually a fully qualified symbol or keyword. For a keyword, the leading : stripped off. Counters are simply values that increase over time; the argument is a delta value, a long to increment the counter by. A common counter metric might be the total number of requests processed. Gauges are used to track a value that varies over time; a callback function is passed to the gauge function; this callback will be periodically invoked to return a value for the metric. A common gauge metric might be the number of entries stored in a cache. A histogram is somewhat like a gauge; it’s a value that varies over time. The difference is, you supply the values (there isn’t as callback) and the metrics that are produced are broken out in a number of ways: by min, max, mean, median, standard deviation, and by various percentiles. A common histogram metric might be the latency of database reads or updates. Meters are used to track the rate at which operations occur. meter is much like counter, it is invoked with a value indicating how many operations occurred (this value is typically 1). It produces moving averages for the one-, five-, and fifteen-minute rates based on sampling this value. A common meter might be the number of total number of requests processed. This is a var, not a function; it stores a recorder, an object that extends the MetricRecorder protocol; this is usually an instance of com.codahale.metrics.MetricRegistry. By default, the registry is created via metric-registry, and uses a jmx-reporter to store metrics. However, this can be overridden at application startup; the JVM system property io.pedestal.log.defaultMetricsRecorder or environment variable PEDESTAL_METRICS_RECORDER can specify the fully-qualified name of a function to invoke (with no arguments), that returns the default recorder.","title":"Metrics (Deprecated)","component":"pedestal","version":"0.7","name":"metrics-0.6","url":"/pedestal/0.7/reference/metrics-0.6.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"API","hash":"_api","id":2},{"text":"counter","hash":"_counter","id":3},{"text":"gauge","hash":"_gauge","id":4},{"text":"histogram","hash":"_histogram","id":5},{"text":"meter","hash":"_meter","id":6},{"text":"default-recorder","hash":"_default_recorder","id":7}]},"101":{"id":101,"text":"Pedestal metrics are a wrapper around Open Telemetry, which provides cross-platform solutions for metrics, tracing, and logging. Metrics and tracing are provided in the io.pedestal/pedestal.telemetry library. The io.pedestal.http namespace contains the API that applications can use to emit metrics. Pedestal supports: counter A numeric value that increases over time, such as the number of requests processed. gauge Measures value that varies over time, such as the depth of a queue. timer Measures a duration and a count, used for things like request processing time. histogram Tracks a range of values, exposing them in different bucket ranges; useful for identifying broad trends, and used for metrics such as size of incoming requests. The metrics API is built around the default-metric-source, which is created at startup from function identified by runtime configuration. Open Telemetry defines a wide range of JVM system properties and environment variables to configure metrics (and tracing); those are outside the scope of this document. Rather than rely on outside configuration, an application can provide its own initialization function to setup Open Telemetry as needed. Pedestal has a small amount of built-in metrics. :io.pedestal.http/request A counter of the number of incoming requests, produced by the log-request interceptor. :io.pedestal.http.cors/origin-real A counter for the number of requests that are allowed, produced by the allow-origin interceptor. :io.pedestal.http.impl.servlet-interceptor/base-servlet-error A counter for number of uncaught exceptions thrown during interceptor execution. :io.pedestal/active-servlet-calls A gauge measuring the number of active requests in progress at any one time. :io.pedestal.http.sse/payload-size A histogram measuring the size of server-sent messages sent to the client. :io.pedestal.http.sse/active-streams A gauge of the number of active streams sending server-sent messages. :io.pedestal.http.impl.servlet-interceptor/async-write-errors A counter of the number of times that the asynchrou
1nous pipe to a client closed during delivery of a streaming response. Where Pedestal emits metrics, it emits them both using the deprecated 0.6 metrics support, and the new pedestal.telemetry implementation. In addition, there is support for the Drop Wizard metrics library as an alternative to Open Telemetry, via default-registry; this is to provide a migration path from Pedestal 0.6 to Pedestal 0.7 when your application is making use of the deprecated metrics support. In a future Pedestal release, the deprecated metrics support in the io.pedestal.log namespace will be removed entirely from Pedestal.","title":"Metrics","component":"pedestal","version":"0.7","name":"metrics","url":"/pedestal/0.7/reference/metrics.html","titles":[{"text":"Supported Metrics Types","hash":"_supported_metrics_types","id":1},{"text":"Setup","hash":"_setup","id":2},{"text":"Built-in Metrics","hash":"_built_in_metrics","id":3},{"text":"Compatibility","hash":"_compatibility","id":4}]},"102":{"id":102,"text":"HTTP allows clients to provide per-request information through several mechanisms: The request URL Query parameters appended to the URL Body content Various interceptors in Pedestal parse this information and attach it to the request map. Some of these interceptors are provided automatically by the Servlet Interceptor. Others require application-specific information and must be created by application code. The built-in routers all know how to extract query parameters from URLs in requests. Any kind of request (i.e., any HTTP verb) can supply query parameters. Query parameters will be attached to the request map under the key :query-params. The value will be a map, constructed as follows: Each query parameter name becomes a key in the map. The query parameter name is URL-decoded. If the resulting string could be a Clojure keyword, it is converted to a keyword. Otherwise, the string itself becomes the key. The query parameter value is URL-decoded and attached as the value of that key. For example, a request string like this: /path/to/resource?after=123123%2099 Becomes the map: {:after \"123123 99\"} Whereas, the request string: /path/to/resource?after:page=12&after:storyid=abc123XYZ&user%20id=99 Becomes the somewhat weird map: {:after:page \"12\" :after:storyid \"abc123XYZ\" :user id \"99\"} The odd-looking keywords :after:page and :after:storyid are legal Clojure keywords, but definitely not an idiomatic usage. The keyword :user id is even more unusual. Clojure keywords can include spaces, but the Clojure reader cannot parse a keyword literal with spaces in it. Query parameters are also merged into the :params map inside the request map. Query parameters are a feature of the built in routers. If you supply your own router, it may or may not support query parameters. URL templating is popular with resource-oriented APIs. These use segments of the URL, in lieu of query parameters, to supply identifiers. Pedestal calls these \"path parameters\". They are parsed from the URL and bound to the :path-params map in the request map. Path parameters are always named by a keyword, which is taken from the URL fragment in the route. For example: URL Path param keys /users none /users/:id :id /users/:id/posts/:post :id, :post In every case, the value of the parameter is a string, taken from the corresponding segment of the URL. Path parameters are a feature of the built in routers. If you supply your own router, it may or may not support path parameters. Pedestal can parse form data, JSON, EDN, and Transit data from request bodies. The parsed information is called \"body parameters.\" Applications can also provider their own parsers for body parameter data. Different routes may use different body parameter formats. For these reasons, Pedestal does not automatically provide an interceptor for body parameters. Instead, your application must add an interceptor to routes. The interceptor is created by the body-params function. Without any arguments, it returns an interceptor that parses according to the request’s Content-Type header: Content type Parsed as Coerce keys to keywords? Bound to in request Merged into :params application/x-www-form-urlencoded HTML form Yes :form-params [1] Yes [2] application/json JSON Yes :json-params No application/transit+json Transit JSON encoding No :transit-params No application/transit+msgpack Transit Msgpack encoding No :transit-params No application/edn EDN data No :edn-params No If the request has any other content type, the body will not be altered and the request map will not be changed. That includes a nil content type if the request just doesn’t have a Content-Type header. If you need to customize the way body-params handles content types, or provide options to the built-in parsers, call it with a parser-map as an argument. You can get a good starting point by calling default-parser-map. File upload is a special case of a request body. The request will have a multipart body with separate encoding for each. In this case, use an interceptor returned by the multipart-params function. Use the :store option to persist the parts. Browsers (especially older ones) do not have easy ways to handle DELETE and PUT requests. Pedestal allows requests to \"smuggle\" a verb through a query parameter. If the magic query parameter _method is present, then its value will be used as the HTTP verb for this request. This substitution is handled by the default interceptor method-param. It occurs before routing, so you can use the correct verb
1s in your routes. Application code can generate links with verb smuggling via the :method-param option to url-for-routes. 1. :form-params keys are automatically converted to keywords. 2. Form parameter keys are not automatically converted to keywords when merged into the :params map. Use the keywordize-params interceptor to convert :params keys to keywords.","title":"Parameters","component":"pedestal","version":"0.7","name":"parameters","url":"/pedestal/0.7/reference/parameters.html","titles":[{"text":"Query Parameters","hash":"_query_parameters","id":1},{"text":"Path Parameters","hash":"_path_parameters","id":2},{"text":"Body Parameters","hash":"_body_parameters","id":3},{"text":"File Upload","hash":"_file_upload","id":4},{"text":"The Method Parameter","hash":"_the_method_parameter","id":5}]},"103":{"id":103,"text":"Provide a performant router which is efficient in time and space. The implementation is modeled after httprouter, a library for Go. Most performant builtin router implementation when dynamic routes (those using path parameters and wildcards) are required. The prefix tree router operates in logarithmic time. Add the key :io.pedestal.http/router to the service map with the value :prefix-tree. Provides less control over routing. For example, Wild card routes always win. The path /foo/:bar will always match over /foo/baz. Like the Map Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #310","title":"Prefix Tree Router","component":"pedestal","version":"0.7","name":"prefix-tree-router","url":"/pedestal/0.7/reference/prefix-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"104":{"id":104,"text":"The request map is attached to the context map before the first interceptor is invoked. The request map describes the incoming HTTP request, including information about the remote endpoint. Pedestal does not attach metadata to the request map. When processing, take care to modify the map (e.g., use assoc), rather than constructing a new map entirely. Interceptors may add arbitrary keys to the request map, and the interceptors' functionality may depend on getting stored values back out of the request map. Pedestal uses an extended version of the Ring request specification. Key Always Present? Type Description :async-supported? Y boolean True if this request supports asynchronous operation :body Y ServletInputStream The body of the request. May be a zero-length stream. :content-type N String Present if sent by client [1]. Content type of the request body. :content-length N Long Present if sent by client. Content length of the request body. :character-encoding N String Present if sent by client. Character encoding applicable to request body. :headers Y Map of String → String Request headers sent by the client. Header names are all converted to lower case. :path-info Y String Request path, below the context path. Always at least \"/\", never an empty string. :protocol Y String Name and version of the protocol with which the request was sent. :query-string Y String The part of the request’s URL after the '?' character. :remote-addr Y String IP Address of the client (or the last proxy to forward the request) :request-method Y Keyword The HTTP verb used to make this request, lowercased and in keyword form. For example, :get or :post. For :put and :delete request methods, this may be \"smuggled\" in via a query parameter :_method. (Performed by the method-param interceptor. :server-name Y String Host name of the server to which the request was sent :server-port Y int Port number to which the request was sent :scheme Y String The name of the scheme used to make this request, for example, http, https, or ftp. :ssl-client-cert N java.security.cert.X509Certificate[] Present if sent by client. Array of certificates that identify the client. :uri Y String The part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request Many more keys are added to the request map by the default interceptors, many of the new keys are related to parsing query parameters and the request body; this is described more fully in the parameters reference. 1. May not be set automatically by some chain providers (i.e., such as the AWS API Gateway provider).","title":"Request Map","component":"pede
1stal","version":"0.7","name":"request-map","url":"/pedestal/0.7/reference/request-map.html","titles":[]},"105":{"id":105,"text":"This reference describes how the Servlet Interceptor handles response bodies of various types. Much of this behavior depends on the protocols WritableBody and WritableBodyAsync. See Important Protocols for details about those. The exact handling of the response body depends on the Java or Clojure type of the value in the :body key of the response map. Type Default content type Serialization Async? byte array application/octet-stream direct byte copy no string text/plain bytes according to platform’s default character encoding no Clojure collection application/edn text representation of data, same as Clojure’s writer no Clojure function nil depends on the function no File application/octet-stream bytes of the file copied to the output stream no InputStream application/octet-stream bytes of the input stream copied to the output stream no ReadableByteChannel (NIO) application/octet-stream bytes of the channel copied to the output stream yes ByteBuffer (NIO) application/octet-stream bytes of the buffer copied to the output stream yes core.async channel nil see below yes When a core.async channel delivers a message, that message is written to the stream, using any of the synchronous dispatches above. The message from the channel must not be another channel, it must be a value that can be immediately acted upon. When the body is, in fact, a function, then Pedestal will invoke the function with a java.lang.OutputStream; the function’s responsibility is to write the actual response to that stream.","title":"Response Bodies","component":"pedestal","version":"0.7","name":"response-bodies","url":"/pedestal/0.7/reference/response-bodies.html","titles":[{"text":"Core Async Channel","hash":"_core_async_channel","id":1},{"text":"Function","hash":"_function","id":2}]},"106":{"id":106,"text":"The response map is attached to the context map by any interceptor in the interceptor chain. The response map describes the outgoing HTTP response. If no response map is attached to the context by the time processing is done, then Pedestal generates a 404 response. When an interceptor attaches a response map (or a handler function returns a response map), the map is validated: Must be a map Must contain a positive integer value for the :status If the response fails the above validations, an exception is thrown. [1] The function respond-with is the easiest way to add a response map to the interceptor context. Key Always Present? Type Description :status Y integer The HTTP status code :headers N map of String → String Response headers sent to the client. Header names are all converted to lower case. :body N String, ISeq, File, InputStream, etc. The body of the response sent to the client; see Response Bodies for more details. Application code that returns a header should use the proper case version of the header, for example, Content-Type (not content-type); although incoming request headers are converted to lower case, outgoing response headers are left as-is, and some standard interceptors expects certain headers to be present with the correct name (such as Content-Type). 1. Prior to Pedestal 0.7, an invalid :response would be ignored instead, and the execution would continue, subverting the developer’s expectations.","title":"Response Map","component":"pedestal","version":"0.7","name":"response-map","url":"/pedestal/0.7/reference/response-map.html","titles":[]},"107":{"id":107,"text":"Ring is an older Clojure web framework, itself inspired by even older libraries, such as Ruby Rack. Pedestal was originally created to extend Ring’s underlying model with one that could be made asynchronous, through the introduction of the interceptor model. The Pedestal team contributed patches to Ring to split much of its standard middleware into discrete functions that could be invoked from interceptors. To this day, much of the low-level HTTP logic, such as managing cookies and parsing multi-part form submissions, is simply wrappers around the same functionality in Ring. These interceptors are in the io.pedestal.http.ring-middlewares namespace. This page provides extra documentation for several of these interceptors. Provides support for client-specific session data, which is commonly used for page-oriented applications (rather than API oriented applications). This data takes the form of a :session key on the request map. An interceptor can add a :session key to the response map, which will cause the session interceptor to store the new map. The interceptor operates with a SessionStore which stores the session data for all clients; Ring provides one implementation, useful for testing, that stores session data in an Atom; the other implementation uses an encoded and encrypted cookie. A cookie, by default named ring-session, stores a unique client id that is used with the SessionStore to store and retrieve session data. session options: Option Type Default :store ring.middleware.session.store/SessionStore via ring.middleware.session.memory/memory-store :set-cookie
1s? boolean true :cookie-name String \"ring-session\" :cookie-attrs map {: path \"/\" :http-only true} :root String \"/\" See Ring API for further details. \"Flash\" is the term for a short message that persists between one request and the next; it is commonly used in page oriented applications to have POST requests respond with a redirect to a GET request for the data just added or updated; the flash is where a short message can be stored between requests. The flash interceptor must be ordered after the session interceptor, as the flash is just a key in the session map. In practice, a handler or interceptor adds a :flash key to the response; this is stored into the session, and on the next request, there will be a :flash key in the request. This interceptor allows a client to access resources, files on the JVM classpath. It is an enhanced version of resource that will identify larger resources and create a response whose body is a java.nio.channels.FileChannel for the underlying file; this will allow Jetty 11 to stream the content asynchronously.","title":"Ring Middleware","component":"pedestal","version":"0.7","name":"ring","url":"/pedestal/0.7/reference/ring.html","titles":[{"text":"session","hash":"_session","id":1},{"text":"flash","hash":"_flash","id":2},{"text":"fast-resource","hash":"_fast_resource","id":3}]},"108":{"id":108,"text":"Routing is the process by which an incoming request is analyzed to determine how it will be processed by Pedestal. Routing is based on comparing any of a number of factors from the request, including: The request path (including matching wild cards in the path) The HTTP method used (GET, POST, etc.) The HTTP scheme used in the request The name of host in the request The port number It’s natural to understand why path and method are involved in routing; less obvious for the other factors. Essentially, a single Pedestal application may host two or more concurrent applications inside the same server - incoming requests are differentiated most often by port, but can also be differentiated by the host. A somewhat common example is an outward-facing consumer application exposed outside a company’s firewall, and an inward-facing admin a
1pplication that is only available inside the firewall. The library io.pedestal.http.route namespace provides the core components to express routes and construct routers. It can be used independently of the pedestal-service library. Pedestal is data driven, and the routing information starts in one form (as data) and is then transformed in a couple of stages to reach a final result that can be used to route incoming requests. The start is the route specification. Pedestal has three built-in formats for route specification: table, terse, and verbose. Table is the newest format (but still old - it dates back to 2016) and is the preferred format; the others are maintained for compatibility. For each of the built-in formats, there is a function that can convert that specific format into a routing table (also known as expanded routes). Pedestal can often figure out which function to invoke based on the kind of data: set, vector, or map: Route specifications are the data values that spell out the possible routes. These are normalized and expanded into a routing table. A Router Constructor function is provided with the routing table, and applies a specific strategy to match incoming requests to the provided routes; there are a few different constructor functions, each with different limitations and trade-offs. The constructor returns a Router instance encapsulating the routing table and the strategy. The routing interceptor builds on a Router to dispatch incoming requests to routes defined by the route specification. It identifies the route matching the incoming request and queues up route-specific interceptors to handle the request. Generally, all of this is automatic; an application provides a route specification in the :io.pedestal.http/route key of the service map (and perhaps a value for :io.pedestal.http/router) and a routing interceptor is automatically created. Route specifications go through a series of transformations that results in a routing table; a routing table is a sequence of verbose routing maps. The expand-routes function converts any kind of specification into a routing table: Argument to expand-routes Syntax used Set Table Syntax - Most recent (2016), easier than terse format, recommended for new projects. Vector Terse Syntax - improvement on the verbose syntax, with an emphasis on avoiding redundancy, but can be hard to read and write, since its deeply nested maps. Map Verbose Syntax - oldest format. This mapping from value type to specification type is the responsibility of the ExpandableRoutes protocol, which is extended on Map, Set, and Vector. ExpandableRoutes is only needed when Pedestal is provided with routes but doesn’t know what format they are in. It is also perfectly valid to build the routes explicitly, by directly calling table-routes, and then building your own routing interceptor. It’s not impossible that your application has specific needs that can’t be met by any of the built-in formats and, as is often the case in Pedestal. To support a new syntax, come up with a syntax that resolves to new record type that implements the ExpandableRoutes protocol. The expanded routing table is a list of maps, each with the following specific structure: (table-routes #{{:app-name :example-app :scheme :https :host \"example.com\"} [\"/department/:id/employees\" :get [...] :route-name :org.example.app/employee-search :constraints {:name #\".+\" :order #\"(asc|desc)\"}]}) => ({:route-name :org.example.app/employee-search (1) :app-name :example-app (2) :path \"/department/:id/employees\" (3) :method :get (4) :scheme :https (5) :host \"example.com\" (6) :port 8080 (7) :interceptors [...] (8) :path-re #\"/\\Qdepartment\\E/([^/]+)/\\Qemployees\\E\" (9) :path-parts [\"department\" :id \"employees\"] (10) :path-params [:id] (11) :path-constraints {:id \"([^/]+)\"} (12) :query-constraints {:name #\".+\" (13) :order #\"(asc|desc)\"} }) 1 :route-name is required and must be a keyword; often a qualified keyword. The route name must be unique within the table. 2 Optional, used for documentation only. 3 Must start with a leading slash; terms with a leading : identify path parameters, or a leading * identifies a wildcard. 4 HTTP method to match against, or :any to match any HTTP method. 5 Optional for matching, must be :http or :https. 6 Optional for matching. 7 Optional for matching. 8 A vector of interceptors (converted via IntoInterceptor) 9 A regular expression, generated from the path, that can match an incoming path and provide capture groups for path parameters. 10 The parts of the path, as strings or keywords. 11 The path parameters, in the order they appear in the path. 12 Path constraints[1] 13 Query constraints, which maps keywords corresponding to query parameters to regular expressions used to match the parameters. This ficticious example defines a URI that includes an id in the request path, but has also defined query parameters constraints. The routing-table specification exhaustively defines what is allowed in a routing table. A path parameter will normally match a single name with in the path, delimited by / characters; an alternate form is the wildcard,, which starts with * and must come at the end of the path: [\"/accounts/*ids :get …​] would provide a path parameter named :ids, and will contain anything on the URL after /accounts/, including any slashes. Pedestal includes several Routers; this reflects not only the evolution of the Pedestal library, but also allows for different trade-offs in the algorithm used by each Router. In rare cases, an application can provide its own Router rather than use one of Pedestal’s. When your application starts a Pedestal service with create-servlet or create-server, Pedestal creates a router, using the following keys from the service map: Key Meaning :io.pedestal.http/routes A route specification :io.pedestal.http/router Key to select a router, or a function that constructs a router from a routing table When the value of :io.pedestal.http/router is a keyword, it selects one of the built-in algorithms: Keyword Router Performance :map-tree Map Tree (default) Very fast :prefix-tree Prefix Tree High performance, space efficient :linear-search Linear Search Lowest performance When the value of :io.pedestal.http/router is a function, that function is used to construct a router. The function must take one argument: the fully expanded routing table. The constructor function must return a value that satisfies the Router protocol. So the function is passed the routing table and returns a Router for those routes. The Router is supplied with the incoming request, and returns the matching route map (a verbose route map extended with extracted parameters from the path). The function router is where it all c
1omes together; this function is passed the route specification and, optionally, the router type; from that it creates the routing table, and passes that through the correct Router constructor function, obtaining at the end an interceptor that performs routing, which it returns. During request execution, on a successful routing, the following keys are added in the context map: Key / Key Path Value :route The verbose route map [:request :path-parameters] Path parameters extracted from the request path In addition, additional interceptors, specific to the route, will have been scheduled for execution via the enqueue function. On failure, when the router does not match any route, the context key :route is set to nil. 1. Not clear why this is here.","title":"Routing Quick Reference","component":"pedestal","version":"0.7","name":"routing-quick-reference","url":"/pedestal/0.7/reference/routing-quick-reference.html","titles":[{"text":"Library","hash":"_library","id":1},{"text":"Route Specifications vs. Routers vs. Routing Interceptor","hash":"_route_specifications_vs_routers_vs_routing_interceptor","id":2},{"text":"Route Specifications","hash":"_route_specifications","id":3},{"text":"Routing Table","hash":"_routing_table","id":4},{"text":"Builtin Routers","hash":"_builtin_routers","id":5},{"text":"Custom Router","hash":"_custom_router","id":6},{"text":"Routing Interceptor","hash":"_routing_interceptor","id":7}]},"109":{"id":109,"text":"The Pedestal service library includes support for Server-Sent Events (SSE). The SSE protocol defines a mechanism for sending event notifications from a server to a client using a form of long polling. However, unlike conventional long polling, SSE does not send each event as a separate response, with an expectation that the client will make a new request in between each one. Rather, SSE sends all its events as part of a single response stream. The stream is kept alive over time by sending events and/or periodic heart-beat data. In the event that the stream is closed for some reason, the client can send a request to re-open it and events notifications can continue. All modern browsers have built in support for SSE via the EventSource API. To define an endpoint that will send SSE, make a route with an interceptor created by start-event-stream. Note that start-event-stream is not itself an interceptor, but rather a function that returns an interceptor. start-event-stream requires a \"ready function.\" The ready function will be called later, when Pedestal has prepared the HTTP response and informed the client that an SSE stream is starting. When a request reaches the SSE interceptor, it will: Pause interceptor execution Send HTTP response headers to tell the client that an event stream is starting Initiate a timed heartbeat to keep the connection alive After that, it will call the ready function with two arguments: a core.async channel for the events and the current interceptor context. The ready function may put events into the channel to send them to the client. Events are maps with keys :name and :data. Both take string values. When the ready function has finished sending events, it should close the channel. Pedestal will then clean up the connection. If a client closes its connection, Pedestal will close the event channel. The next time the ready function tries to put a message into the event channel, the put call will return false. The ready function must detect this and clean up any resources it allocated. Here is an example that shows how an SSE event stream can be used. (defn stream-ready [event-chan context] (dotimes [_ 20] (async/>!! event-chan {:name \"foo\" :data \"bar\"}) (Thread/sleep 1000)) (async/close! event-chan)) (def route-table #{[\"/events\" :get [(start-event-stream stream-ready)] :route-name ::events]}) When an SSE interceptor starts the event stream, it sends a partial HTTP response to the client. Any downstream interceptors can examine the context map, including the response map. But since the response has already been sent, they cannot alter it. Interceptors that attempt to alter the response 
1(for example, by setting cookies or other headers) will log an exception indicating that the data could not be sent.","title":"Server-Sent Events","component":"pedestal","version":"0.7","name":"server-sent-events","url":"/pedestal/0.7/reference/server-sent-events.html","titles":[{"text":"Making an SSE Interceptor","hash":"_making_an_sse_interceptor","id":1},{"text":"Request Processing","hash":"_request_processing","id":2},{"text":"Ready Function","hash":"_ready_function","id":3},{"text":"Example","hash":"_example","id":4},{"text":"Further Interceptor Processing","hash":"_further_interceptor_processing","id":5}]},"110":{"id":110,"text":"The service map is a blueprint that Pedestal uses to create all the necessary parts to begin processing requests: a service function, server function, chain provider, router, routes, and default set of interceptors. Server vs. Service A server is just the part of the overall system that listens for requests and sends responses; it’s the part most closely tied to your underlying servlet container (Jetty, Tomcat, and so forth). The service runs the show: it’s the server plus everything else: chain provider, the interceptors (including those responsible for routing), and so forth. An application creates the service map and passes it to create-server. The result is a server map that is ready to be started. Keep in mind, however, that this is strictly a convenience function that assembles the parts for you. There are use cases where you would not call create-server, but instead assemble a service function, chain provider, and so forth, directly. Pedestal may add other keys to this map for its own use. Other applications should treat any such keys and their values as implementation details and their behaviour will remain unspecified. In the details below, ::http is an alias to :io.pedestal.http. Key Always present? Type Description ::http/allowed-origins N Function, map, or sequence of strings Determines which origins are allowed for the allow-origin interceptor. See \"CORS\" below. ::http/chain-provider N Function Only assigned when replacing the Servlet Interceptor. Receives the service map, returns an updated map with whatever additional pieces the server function expects. (See ::http/type, below.) ::http/container-options N Map Map of options to pass to the container. Each container, such as Jetty 11, defines it own container-specific options. ::http/enable-csrf N Map A settings map to pass to the anti-forgery interceptor. See CSRF below. ::http/enable-session N Map A settings map to pass to the session interceptor. Settings are session-store specific. If non-nil, this interceptor is added. Default is nil. ::http/file-path N String File path used as root by the file interceptor. If non-nil, this interceptor is added. Default is nil. ::http/host N String Hostname, e.g., \"localhost\". Passed to the container. Defaults to localhost [1]. ::http/initial-context N Map The initial context map that is passed through the interceptor chain; This option makes it possible to place values into the context for all requests. ::http/interceptors N Vector Vector of items that satisfy the IntoInterceptor protocol. ::http/join? N Boolean If false, do not block the thread that starts the web server. Passed to the container. ::http/method-param-name N Keyword Query string parameter used to set the current HTTP verb. Default is :_method. ::http/mime-types N Map of String → String Mime-types map used by the content-type interceptor. Default is {}. ::http/not-found-interceptor N Interceptor Interceptor to use when returning a 404 Not Found response. Default is the not-found interceptor. ::http/port N Integer Port for the running server. If nil, Pedestal defaults to port 80 and HTTP. ::http/resource-path N String File path used as root by the resource interceptor. If non-nil, the interceptor is added. Default is nil. ::http/router N Keyword or route constructor The router implementation to use. Can be :linear-search, :map-tree :prefix-tree, or a custom Router constructor function. Defaults to :map-tree, which falls back to :prefix-tree. ::http/routes Y Function, ExpandableRoutes, or sequence of maps A route specification that can be processed by expand-routes into a routing table. ::http/secure-headers N Map of keyword → string A settings map for various secure headers. See \"Secure Headers\" below ::http/service-fn N Function A function which can be used as an implementation of the jakarta.servlet.Servlet.service method. The function is defined by create-server. ::http/service-fn-options N Map 
1Service function options passed to http-interceptor-service-fn. ::http/servlet N jakarta.servlet.Servlet Present if the servlet is running. ::http/start-fn N Function Zero-arity function that starts the server. Part of the server map. ::http/stop-fn N Function Zero-arity function that stops the server. Part of the server map. ::http/type Y Keyword or Function Container for service or server function. As a keyword, names the container - currently, only :jetty is supported out of the box. As a function, acts as the server function. When omitted, Jetty is the default. ::http/websockets N Map Defines websocket routing. See Websockets. The default-interceptors function is the primary user of the majority of the service map keys; it builds and attaches the ::http/interceptors key (a list of interceptors) from the various other service map keys, but only if the ::http/interceptors is itself nil or missing. default-interceptors is called automatically from create-server. You may find that you do not rely on default-interceptors logic, but build your own interceptor chain directly; in that case, simply attach the interceptors as ::http/interceptors before calling create-server. Many of the other service map keys will not be needed, beyond ::http/port and ::http/type. If the ::http/allowed-origins key is non-nil, the allow-origin interceptor is added. The default is nil. The allowed values are: a function of one argument that returns a truthy value when an origin is allowed; a map containing the following keys and values :allowed-origins sequence of strings or a function, :creds boolean indicating whether the client is allowed to send credentials, :max-age a long indicating the number of seconds a client should cache the response, and :methods, indicating the accepted HTTP methods, defaulting to \"GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS\"; a sequence of strings matching the scheme, host and port (scheme://host:port) of allowed origins. When a value for ::http/enable-csrf is present, the anti-forgery interceptor is added to the queue. This implies that support for HTTP sessions are enabled (Pedestal will add the necessary interceptor automatically). The value must be a map with the following keys: Key Value type Description :read-token Function This function takes a request and returns an anti-forgery token or nil if the token does not exist. :cookie-token any truthy value for CSRF double-submit cookies :error-response Function This function takes the response body and returns a 403 Not Authorized response :error-handler Function This function takes the context and returns the appropriate response. Only one of :error-response or :error-handler may be specified. When the ::http/secure-headers value is present and non-nil, the secure-headers interceptor is added. If the key is simply not present in the service map, then a set of default secure headers will be provided: Key HTTP Header Content :hsts-settings Strict-Transport-Security \"max-age=31536000; includeSubdomains\" :frame-options-settings X-Frame-Options \"DENY\" :content-type-settings X-Content-Type-Options \"nosniff\" :xss-protection-settings X-XSS-Protection \"1; mode=block\" :download-options-settings X-Download-Options \"noopen\" :cross-domain-policies-settings X-Permitted-Cross-Domain-Policies \"none\" :content-security-policy-settings Content-Security-Policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\" If the value for ::http/secure-headers is present, it may contain keys and string values for the security headers. Any other keys will be ignored. The server function converts the service map to a server map; much of this is the responsibility of the container-specific server function, such as server - the function is determined from the ::http/type key of the service map. This function is passed the full service map, and a set of server options; these options are a subset of the service map keys: :host, :port, :join?, :container-options, and :websockets (each as a non-namespaced keyword). The server function should create a service (e.g., a Jetty Server) and return a map with at least keys :start-fn and :stop-fn. These are then qualified into the io.pedestal.http namespace and merged into the service map. The start and stop functions use the ::http/start-fn and ::http/stop-fn keys to start and stop the server instance. The service map can grow quite complex, with options controlling everything from routing, to security, to container-specific options. The service map may be validated via Clojure spec; this involves loading the appropriate spec namespaces and using Clojure’s built-in instrumention and testing support. 1. localhost is a safe default and works with local testing, as your test code will be on the same host as the server. However, only connections originating on the local host will be accepted. For production deployments, however, you will usually set this to be 0.0.0.0, which accepts connections from anywhere. This is especially true when running Pedestal inside a Docker container, as all connections (even those from the host, or from another container on the same host) will be network, not localhost, connections.","title":"Service Map","component":"pede
1stal","version":"0.7","name":"service-map","url":"/pedestal/0.7/reference/service-map.html","titles":[{"text":"Service Map Keys","hash":"_service_map_keys","id":1},{"text":"default-interceptors","hash":"_default_interceptors","id":2},{"text":"Cross-Origin Resource Sharing (CORS)","hash":"_cross_origin_resource_sharing_cors","id":3},{"text":"Cross-Site Request Forgery (CSRF)","hash":"_cross_site_request_forgery_csrf","id":4},{"text":"Secure Headers","hash":"_secure_headers","id":5},{"text":"Server Map","hash":"_server_map","id":6},{"text":"Spec Validation","hash":"_spec_validation","id":7}]},"111":{"id":111,"text":"Limited parts of Pedestal are described using Clojure specs. This includes the structure of the service map, and the various kinds of route specifications. Use of spec is entirely optional; specs are confined to their own namespaces which are not explicitly loaded by any of Pedestal’s other namespaces. You can, in your own application’s tests, load these namespaces and instrument functions as appropriate, using Clojure’s built-in instrumention and testing support. Spec namespaces: io.pedestal.interceptor.specs io.pedestal.route.specs io.pedestal.http.impl.servlet-interceptor.specs io.pedestal.http.specs io.pedestal.websocket.specs","title":"Specs","component":"pedestal","version":"0.7","name":"specs","url":"/pedestal/0.7/reference/specs.html","titles":[]},"112":{"id":112,"text":"The servlet interceptor is the bridge between the Java Servlet API and Pedestal’s interceptor chain. It is created when an application calls create-server or create-servlet; ultimately, the function service-fn, calls http-interceptor-service-fn, results in the ::http/service-fn context map key; this is a function that accepts the servlet, servlet request and servlet response (as defined by the Servlet API) and executes an interceptor chain, as a chain provider, to handle an incoming HTTP request. The service function performs the following tasks: Sets up the context map and request map Executes the interceptor queue (:enter, then :leave) Catches any exceptions that aren’t handled by Error Handling within the interceptors Writes the final response, using the response map Part of this work is accomplished by adding new keys to the default context map; beyond that, additional interceptors are prepended: The stylobate interceptor primarily handles otherwise uncaught unhandled exceptions that occur during interceptor chain execution. Responsible for converting the :response key in the context, when present, into a response delivered to the client; this may include async streaming. In very rare cases, different interceptors may provide different parts of response. Ultimately, the response must be a valid Ring response, but different interceptors may provide different parts of the response (the :body or certain values in the :headers map). If your application requires this, be very careful about early termination. Put the initial value into the response map in the last :enter function, then use the :leave functions to refine that value. Put the initial value into the context under a different key and refine that value in either :enter or :leave functions. When the response is complete, transfer the response map to the :response key.","title":"Servlet Interceptor","component":"pedestal","version":"0.7","name":"servlet-interceptor","url":"/pedestal/0.7/reference/servlet-interceptor.html","titles":[{"text":":io.pedestal.http.impl.servlet-interceptor/stylobate","hash":"_io_pedestal_http_impl_servlet_interceptorstylobate","id":1},{"text":":io.pedestal.http.impl.servlet-interceptor/ring-response","hash":"_io_pedestal_http_impl_servlet_interceptorring_response","id":2},{"text":"Partial Responses","hash":"_partial_responses","id":3}]},"113":{"id":113,"text":"In some cases, you may want to stream large responses back to clients. Streaming uses memory efficiently and can allow you to return a response larger than the service’s memory. It also allows a client to start consuming data as quickly as possible. Streaming responses are a feature of the Servlet Interceptor. Steaming behavior is enabled based on the type of the body of the response map. Body Type Streamed? Async? Byte array N
1o No String No No Clojure collection No No Function Yes No File Yes No InputStream Yes No ReadableByteChannel Yes Yes ByteBuffer Yes Yes core.async channel Yes Yes Async responses use non-blocking I/O. Not all containers support async responses. When the body is a function, the servlet-interceptor calls that function with a single argument: a jakarta.servlet.ServletOutputStream. The response status code and headers will already be written to the stream before calling the function. The function should close the stream when it is done. The function’s return value is ignored. The function may run as long as it needs. This will occupy a thread, so consider using a core.async go or thread block. A collection will be rendered into text via clojure.core/pr. This emits a valid EDN encoding of the data. The entire collection will be emitted. This means lazy sequences will be fully realized. Rendering collections is subject to *print-length*, *print-level*, and all other variables that affect clojure.core/pr. When the response body is a channel, every message read from the channel will be sent to the client as it is produced. If the client disconnects, the channel will be closed. Here are some examples of potentially large values that you might want to stream back to clients: the contents of a lazy sequence a file or resource stored on disk a byte stream retrieved from some service, e.g., an image on S3","title":"Streaming Responses","component":"pedestal","version":"0.7","name":"streaming","url":"/pedestal/0.7/reference/streaming.html","titles":[{"text":"Using a Function as the Response","hash":"_using_a_function_as_the_response","id":1},{"text":"Using a Collection as the Response","hash":"_using_a_collection_as_the_response","id":2},{"text":"Using a core.async Channel as the Response","hash":"_using_a_core_async_channel_as_the_response","id":3},{"text":"Uses","hash":"_uses","id":4}]},"114":{"id":114,"text":"Path string Verb. One of :any, :get, :put, :post, :delete, :patch, :options, :head Handler or vector of interceptors (Optional) Route name clause (Optional) Constraint clause (ns myapp.service (:require [io.pedestal.http.route.definition.table :as table])) (def application-routes (table/table-routes {:host \"example.com\" :scheme :https} [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, ])) The specs table-options and table-routes define the arguments to table-routes. (ns myapp.service (:require [io.pedestal.http.route :as route])) (def application-routes (route/expand-routes #{{:host \"example.com\" :scheme :https} [\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, })) The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then route order matters. To maintain order during route evaluation, use the Linear Search Router and expand your routes explicitly by passing them to the table-routes function using a vector as the top-level collection instead of a set. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. By default, The verb must be one of the keywords in :any, :get, :put, :post, :delete, :patch, :options, or :head. However, you can override the allowed verbs by including an options map with the keyword :verb in your route definition. The value of :verb is the a set of verb keywords you wish to 
1support in the routes. It is through this facility that you can specify custom verbs. (def routes #{{:verbs #{:get :stats :version}} [\"/\" :get (conj common-interceptors `home-page)] [\"/\" :stats (conj common-interceptors `stats)] [\"/\" :version (conj common-interceptors `version)]}) :any is a wildcard verb. During request routing, :any will match all requests. The \"handler position\" be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List A route name clause is the keyword :route-name followed by a keyword. Route names must be unique. A constraint clause is the keyword :constraints followed by a map.","title":"Table Syntax","component":"pedestal","version":"0.7","name":"table-syntax","url":"/pedestal/0.7/reference/table-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Route Vector Format","hash":"_route_vector_format","id":2},{"text":"Syntax for table-routes","hash":"_syntax_for_table_routes","id":3},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":4},{"text":"Detailed Reference","hash":"_detailed_reference","id":5},{"text":"Path string","hash":"_path_string","id":6},{"text":"HTTP Verb","hash":"_http_verb","id":7},{"text":"Syntax for specifying verbs","hash":"_syntax_for_specifying_verbs","id":8},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":9},{"text":"Route Name Clause","hash":"_route_name_clause","id":10},{"text":"Constraint Clause","hash":"_constraint_clause","id":11}]},"115":{"id":115,"text":"As its name implies, the terse syntax provides a compact approach for describing routes. When the argument to expand-routes is a vector, it will be expanded using the terse syntax. In essense, the terse syntax is nested maps; the nesting supplies the structure of the path and each nested map contains keyword keys to identify handlers (by method), or string keys to describe further nested paths. This is all a bit complex and hard to describe, thus the move to table routes. Unlike the table syntax, any verb can be specified without verb whitelisting. A route table is a vector of nested vectors. Top-level vector(s) are termed application vectors. Nested vectors are termed route vectors. The spec terse-routes defines the terse table format. There’s an intermediate step hidden in the terse syntax; the map format is quietly converted into the proper terse format; the map is keyed on path name and the value is a route description, which may define sub-routes. These are flattened into a non-nested sequence of routes. (Optional) A keyword identifying the application by name (Optional) A URL scheme (Optional) A host name (Optional) A port One or more nested route vectors. A path segment (must begin with a slash) A verb map (Optional) An interceptor vector with ^:interceptors metadata [1], [2] (Optional) A constraints map with ^:constraints metadata [1], [2] Zero or more child route vectors (ns myapp.service (:require [io.pedestal.http.route :as route])) (def routes [[:hello-world :http [\"/order\" {:get `list-orders (1) :post [:post-without-id `create-order]} (2) [\"/:id\" (3) ^:interceptors [load-order-from-db] ^:constraints {:id #\"[0-9]+\"} {:get `view-order :put `update-order :post [:post-by-id `create-order]}]]]]) 1 Pedestal will convert the symbol myapp.service/list-orders to a keyword and use that as the route name 2 The route name will be :post-without-id 3 Nested routes inherit a path prefix from the containing route; this will match on /order/:id. The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then use the Linear Search Router. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. The verb map contains verb to handler mappings. Each verb in the verb map defines a route. If a handler is referenced by multiple routes, a route name must be specified. The route name is a keyword which occurs in the first position of an interceptor vector in the verb map. Unlike the Table Route syntax, custom verbs do not need to be white listed. However, :any is a wildcard verb. During request routing, :any will match all requests. The \"handler position\" be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List 1. Can also be specified before the verb map. 2. Applies to the current route and any child routes.","title":"Terse Syntax","component":"pede
1stal","version":"0.7","name":"terse-syntax","url":"/pedestal/0.7/reference/terse-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Application Vector Format","hash":"_application_vector_format","id":2},{"text":"Route Vector Format","hash":"_route_vector_format","id":3},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":4},{"text":"Detailed Reference","hash":"_detailed_reference","id":5},{"text":"Path string","hash":"_path_string","id":6},{"text":"Verb map","hash":"_verb_map","id":7},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":8}]},"116":{"id":116,"text":"Tomcat 9 was previously supported in Pedestal 0.6; this support was removed in Pedestal 0.7.","title":"Tomcat","component":"pedestal","version":"0.7","name":"tomcat","url":"/pedestal/0.7/reference/tomcat.html","titles":[]},"117":{"id":117,"text":"It is a good practice to separate core business logic from handler, and more generally, interceptor code. This separation of concerns has many benefits, including facilitating testing at the interceptor, interceptor chain and end-to-end response generation levels. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [ctx] (assoc ctx :widget {:id 1 :title \"foobar\"} ))})) We can test it either directly: (let [test-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (test-fn {}))))) Or using the interceptor chain execute function: (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) We can extend this approach to test coordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [ctx] (if-let [widget (:widget ctx)] (assoc ctx :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc ctx :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper response-for utility function to facilitate testing of services without having to spin up an http server. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for helper function is specific to servlet-based services and simulates the receipt of a servlet request and creation of a servlet response - but does so without the overhead of an actual HTTP connection, which ensures your tests are fast. `response-for takes as arguments a service function, verb and url as required parameters; headers and a request body are optional. Let us examine those parameters in more detail. The service function refers to the :io.pedestal.http/service-fn key value in the service map during service initialization. The verb is an HTTP method represented as a keyword (i.e., :get, :post, :delete, etc…​). The url is a relative url represented as a string. The headers and request body inputs are optional and specified with the :headers and :body keys, respectively. Before using response-for in tests, a test service must be created. This is done by calling io.pedestal.http/create-servlet with the service map as a parameter. The resulting service-fn can be bound to a var and used in subsequent tests. (def service (:io.pedestal.http/service-fn (io.pedestal.http/create-servlet service-map))) The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for service :get \"/hello\")))) The response returned by response-for contains :status, :body and :header keys. The value of the :headers key is a map with stringified keys. Testing header values would look something like this: (is (= \"text/plain\" (get-in (response-for service :get \"/hello\") [:headers \"Content-Type\"]))) POST’ing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to supp
1ort request payload parsing. Therefore, you will need to set the Content-Type header of the test request to the appropriate value based on the payload format of the request body. (is (= 200 (:status (response-for service :post \"/foo\" :headers {\"Content-Type\" \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\")))) (is (= 200 (:status (response-for service :post \"/foo-login\" :headers {\"Content-Type\" \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\")))) Notice how Content-Type is a string. Pedestal provides a utility, url-for-routes. This is passed the expanded routes for your application, and returns a function that will generate a URL for a specific route; primarily by specifying the route name, but also other factors. It is recommended to create a url-for test helper based on url-for-routes, and use that helper to create the relative urls for your tests. This allows you to refer to routes by name as opposed to hard-coded paths. Route names are typically more stable. Aside from that, it makes it easy to test routes which use query or path parameters. Here’s an example: (require '[io.pedestal.http.route :as http.routes]) (def routes #{[\"/user/:id/items\" :post `user-items]} ; (1) (def url-for (http.routes/url-for-routes (http.routes/expand-routes routes)))) (is (= 200 (:status (response-for service :get (url-for ::user-items ;(2) :path-params {:id 1} :query-params {:sort \"ASC\"}))))) 1 The namespace qualified symbol for user-items will be the default route name (as a keyword) 2 The route name is used to get the URL back Nothing special needs to be done when testing routes which include async interactions. The response-for helper forces asynchronous request processing to synchronous processing for test purposes.","title":"Unit testing","component":"pedestal","version":"0.7","name":"unit-testing","url":"/pedestal/0.7/reference/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":2},{"text":"Usage","hash":"_usage","id":3},{"text":"Testing GET","hash":"_testing_get","id":4},{"text":"Testing POST","hash":"_testing_post","id":5},{"text":"Constructing route URLs","hash":"_constructing_route_urls","id":6},{"text":"Testing Async interactions","hash":"_testing_async_interactions","id":7}]},"118":{"id":118,"text":"The verbose syntax is the oldest routing specification format used in Pedestal and should not generally be used, though it may be of use when generating a route specification from code. It is very close in format to the expanded routing table. Verbose syntax is composed of a sequence of maps; each map defines a single route. {:app-name <string> (1) :scheme <:http or :https> :host <string> :port <number> :constraints <map> (2) :interceptors <vector> (3) :path <string> (4) :verbs <map> (5) :children <vector> (6) } 1 :app-name, :schema, :host, and :port are optional. They define the values for this route and any children. 2 :constraints is a map of keyword (matching a path or query parameter) to a regular expression; this is merged into the containing routes constraints 3 :interceptors is a vector ???; this is appended to the containing route’s interceptors 4 :path is required, and must start with a slash; this is appended to the containing routes path 5 :verbs is a mapping from keyword (:get, :post, etc.) to handler 6 :children is an optional list of routes nested within this route Handlers, the values in the :verbs map, can be a symbol or a map. A symbol will be resolved to a Var; the value in the Var will be converted to an Interceptor record. In cases where the interceptor is anonymous (has no :name), the symbol is converted to a keyword and used as the :name. The :name of the interceptor becomes the name of the route. When a handler is a map, it has the following keys: {:route-name <string> (1) :handler <...> (2) :interceptors <vector> (3) } 1 :route-name is optional and will be derived from the handler. 2 The handler may be either a symbol or an interceptor. 3 :interceptors is optional and identifies interceptors appended to the containing route’s interceptors Ultimately, the handler (converted to an interceptor) is appended to the list of interceptors.","title":"Verbose Syntax","component":"pede
1stal","version":"0.7","name":"verbose-syntax","url":"/pedestal/0.7/reference/verbose-syntax.html","titles":[]},"119":{"id":119,"text":"Websocket support was present prior to Pedestal 0.7, but was a container-specific option for Jetty. In Pedestal 0.7, websocket support was refactored to be more universal and declarative, part of the service map. Websockets are an asynchronous and bidirectional connection between a client and a server. Once a Websocket connection is established, either party may send messages to the other party - this unleashes truly unbounded possibilities for creating dynamic, real-time, and asynchronous applications. Websocket requests are not routed the way HTTP requests are; instead, the mapping from incoming requests to Websocket handlers is defined in the service map. In the service map, the :io.pedestal.http/websockets key maps string routes to endpoint maps. The endpoint map is a set of callbacks and configuration. The path and endpoint map are ultimately passed to the add-endpoint function, which describes in detail how the callbacks are used. Table 1. Callbacks Key Signature Description :on-open (Session, EndpointConfig) → Object Invoked when the client first opens a connection. The returned value is retained and passed as the first argument of the remaining callbacks. :on-close (Object, Session, CloseReason) → nil Invoked when the socket is closed, allowing any resources to be freed. :on-error (Object, Session, Throwable) → nil Passed any unexpected exception. :on-text (Object, String) → nil Passed a text message from the client, as a single String. :on-binary (Object, ByteBuffer) → nil Passed a binary message, as a single ByteBuffer. :configure (ServerEndpointConfig$Builder) → nil Allows additional configuration using an instance of jakarta.websocket.server.ServerEndpointConfig.Builder. Table 2. Configuration Key Type Description :subprotocols vector of String Optional, specifies sub-protocols for the websocket connection :idle-timeout-ms long Sets the max idle timeout for the websocket to a fixed value. Essentially, the :on-open callback is invoked when the client initiates the connection. It is intended that, when the client connects, some form of server-side process will be initiated capable of sending messages to the client asynchronously. It is the responsibility of the :on-open callback to create such a process. One common option is to use the on-open-start-ws-connection function to create the callback, or construct the :on-open callback around the start-ws-connection function. The :on-text and :on-binary callbacks are invoked when a text or binary message from the client is received.","title":"Websockets","component":"pedestal","version":"0.7","name":"websockets","url":"/pedestal/0.7/reference/websockets.html","titles":[]},"120":{"id":120,"text":"All the code is in one repository, with subprojects for the different modules. Just clone https://github.com/pedestal/pedestal and you are good to go. If you’re working on Pedestal itself, you can test everything From the tests directory, execute clj -X:test. Thanks for your interest in helping out with Pedestal! Let this document serve as your guide. (This is a copy of CONTRIBUTING.md in the main Pedestal repo. If you ever see a discrepancy, it’s probably because this document is out of date relative to that one.) If you’re looking for a task to work on, check out the primed label in our issues. Less defined tasks will be marked with the discuss label. Jump in here if you want to be a part of something big. Pedestal is the thinking person’s framework, so every contribution starts with some deep thought. Finished? Alright, your next step is to start a discussion. Create an issue to start a conversation. Tell us what you’re trying to accomplish and how you think you might do it. If all is well, we’ll probably give you the thumbs up to start developing. Of course, if you run into any straight-up bugs or weirdness feel free to skip the thinking (or at least too much of it) and immediately submit an issue. We have an issue template in place that will ask you some details about the platform you are running and how to reproduce the bug. (If you can reproduce it reliably. If not, go ahead and file the issue anyway so we can start looking at it.) Some of the usual stuff we’ll want to know: What happened? \"I manifested a being from the outer dimensions.\" What did you expect to happen? \"Hello, world.\" How can you reproduce it? \"I created a new Pedestal service with the template, then installed some code that Bob Howard gave me.\" What operating system and version are you using? e.g. \"OS X 10.8\" What version of Clojure, Java, and Leiningen or Boot are you using? e.g. \"Leiningen 2.5.2 on Java 1.8.0_u40 Java HotSpot™ 64-Bit Server VM\" What Pedestal version are you using? e.g. \"0.5.0\" or, for a SNAPSHOT: \"0.5.1-SNAPSHOT at d0cf2b4\" Even better, include a link to a gist or repository where we can jump straight to the problem. We love well-tested code. We won’t accept pull requests unless they’re either well tested or sufficiently trivial (such as simple docstring changes). All of our code is tested via GitHub actions, and any pull requests you submit will be too. Pedestal is broken up into several pieces. You’ll usually be working on just one of these pieces at a time, but you will want to test everything. Here is the workflow we recommend: Fork the repo and clone your fork. Create a branch for your feature/bugfix. Make your changes and add tests. Run clj -X:test from the tests directory. Commit, push, and submit a pull request. When it comes to code contributions there is one more thing we need from you: a signed contributor’s agreement. We know that a contributor’s agreement can be a pain, but we want everyone to be able to use Pedestal, including developers working on projects for very large companies. Many of these big organizations care a lot about the provenance of the code they use — that is they need to know where the code came from and who owns it. The contributor’s agreement simply puts down in writing what we think is the standard open source arrangement: Mostly it says that you are donating code that you wrote to the project. By submitting a signed contributor’s agreement, you are helping to ensure that your work will be available to the largest possible audience. It is an extra step, but there really is not much to executing the Pedestal contributor’s agreement: You just need to complete the following online agreement to assign copyright to Cognitect. Cognitect Contributor Agreement","title":"Contributing to Pedestal","component":"pede
1stal","version":"0.6","name":"contributing","url":"/pedestal/0.6/contributing.html","titles":[{"text":"Hacking on Pedestal","hash":"_hacking_on_pedestal","id":1},{"text":"Checkout Instructions","hash":"_checkout_instructions","id":2},{"text":"Testing Pedestal Itself","hash":"_testing_pedestal_itself","id":3},{"text":"Contributing to Pedestal","hash":"_contributing_to_pedestal","id":4},{"text":"Looking for work?","hash":"_looking_for_work","id":5},{"text":"New Features","hash":"_new_features","id":6},{"text":"Bugs","hash":"_bugs","id":7},{"text":"Tests","hash":"_tests","id":8},{"text":"Workflow","hash":"_workflow","id":9},{"text":"Contributor’s Agreement","hash":"_contributors_agreement","id":10}]},"121":{"id":121,"text":"Pedestal is a set of libraries that we use to build services and applications. It runs in the back end and can serve up whole HTML pages or handle API requests. There are a lot of tools in that space, so why did we build Pedestal? We had two main reasons: Pedestal is designed for APIs first. Most web app frameworks still focus on the \"page model\" and server side rendering. Pedestal lets you start simple and add that if you need it. Pedestal makes it easy to create live applications. Applications must respond with immediate feedback even while some back-end communication goes on. Pedestal makes it easy to deliver server-sent events and asynchronous updates. Pedestal works with a huge variety of containers and deployment options. Deploy applications or microservices on unikernels, Docker containers, or JAR files. Pedestal supports Tomcat, Jetty, Immutant (with Undertow), Vert.x, nginx, and Netty. Pedestal automatically uses secure headers, CSRF-protection, and other best practices. It works with CORS to allow secure front end applications. Pedestal lets you create dynamic applications with server-sent events and websockets. It uses Clojure's async capabilities and Java NIO. Routers and Interceptors let Pedestal services apply different behavior based on each incoming request, rather than statically wrapping everything up during initialization. Pedestal is built from pieces that connect via protocols, giving you the flexibility to swap out any part.","title":"What is Pedestal?","component":"pedestal","version":"0.6","name":"index","url":"/pedestal/0.6/index.html","titles":[{"text":"Features","id":1},{"text":"Ready for Production","id":2},{"text":"Secure by Default","id":3},{"text":"Streaming","id":4},{"text":"Late Binding","id":5},{"text":"Composable","id":6}]},"122":{"id":122,"text":"Cognitect, Inc. (\"Cognitect,\" \"we,\" or \"us\") provides the website located at www.pedestal.io (the \"Website\"). We value and respect your privacy. This \"Privacy Policy\" demonstrates our commitment to your right of privacy and explains how we use, disclose and protect the Personal Information (as defined below) of users (\"you,\" \"User,\" or \"your\") of the Website. By visiting the Website, you expressly consent to the use and disclosure of your Personal Information as described below. If you do not agree with the terms set out in this Privacy Policy, please do not visit the Website. Personal information is data that can be used to identify or contact a single person (\"Personal Information\"). We will only collect or receive Personal Information when you voluntarily provide information to us, such as when you contact us, using the contact information provided in this Privacy Policy, as described in more detail below: Information You Voluntarily Choose to Provide The Website does not require you to submit any Personal Information to access or use it, however, you may contact us through email, using the email address provided in this Privacy Policy, and provide us with Personal Information over the course of the communication. You agree not to submit information that contain or reference, and understand and agree we have no obligations or liability with respect to: (i) information that can identify an individual in relation to any past, present, or future physical or mental health or condition, provision of health care, or payment for the provision of health care, including, but not limited to, diagnoses, treatment information, medical test results, and prescription information; and/or (ii) an individual’s race, ethnic origin, political opinions, religious or philosophical beliefs, genetic data, biometric data, sex life or sexual orientation. Without limiting the generality of the foregoing, you acknowledge in no event will Cognitect be liable to you or any third party for any direct, indirect, incidental, lost profits, remote, cover, exemplary, consequential, special, or punitive damages, regardless of the foreseeability of such damages resulting from your submission of any such information. We use your Personal Information: - to provide the services or information you request; - to communicate with you regarding your use of the Website; - to protect our rights and the rights of our Website visitors; and - to protect the vital interests of the Company, you, or our other Website visitors (for example, in the event of an emergency). We do not use cookies on the Website. Cognitect will not disclose your Personal Information to any third parties except: - to our professional advisers, accountants, insurers, lawyers and auditors on a confidential basis; - if Cognitect or its assets are or may be acquired by a third party, the information may be provided to that third party and its advisors; - in exceptional circumstances, Cognitect may be required or permitted by law to disclose Personal Information, for example where such disclosure is necessary to meet any applicable law, regulation, legal process or other legal obligation; detect, investigate and help prevent security, fraud or technical issues; and/or protect the rights, property or safety of Cognitect, our employees or other users of the Website.; or - otherwise with your consent. Cognitect does not sell your Personal Information. Cognitect may disclose your Personal Information to Cognitect’s parent company, affiliated legal entities, subsidiaries and any other businesses with whom we are under common corporate control (collectively the \"Affiliates\"). All of our Affiliates that receive your information from us will comply with the terms of this Privacy Policy with respect to their use and disclosure of such information. Cognitect is committed to keeping your information secure. We endeavor to take all reasonable steps to keep secure any information that we hold about you, and to keep this information accurate and up to date. Your information is stored on secure servers that are protected in controlled facilities. Other than the sharing of information outlined in this Privacy Policy, personally identifiable information is not accessible by the public, and we require our employees and data processors to respect the confidentiality of any Personal Information. We do not direct our Website or services to children (usually considered to be under the age of 13, depending on the country where you reside). We also do not intentionally collect Personal Information from children through our Website. If you are the parent or guardian of a child and you believe that we have inadvertently received Personal Information about that child, please contact us as described 
1in the Contact Us section of this Privacy Policy and we will take reasonable steps to remove the information from our records. If at any time you want to request, update, correct or remove Personal Information, you are welcome to submit a request to [email protected]. We may ask you to verify your identity before we can act on your request. If you are aware of changes or inaccuracies in your Personal Information, you should inform us of such changes so that our records may be updated or corrected. We may reject requests that are unreasonably repetitive, require disproportionate technical effort (for example, developing a new system or fundamentally changing an existing practice), risk the privacy of others, or would be extremely impractical (for instance, requests concerning information residing on backup systems). Where we can provide information access and correction, we will do so, except where it would require a disproportionate effort. We aim to maintain our services in a manner that protects information from accidental or malicious destruction. Because of this, after you delete information from our services, we may not immediately delete residual copies from our active servers and may not remove information from our backup systems. Where consent is required for our use of your Personal Information as described herein, you have the right to withdraw or decline your consent and cease your use of the Website. If you decide to withdraw your consent, such withdrawal will not affect the lawfulness of processing based on consent before such withdrawal. California Civil Code Sec. 1798.100, et seq. (also known as the California Consumer Privacy Act of 2018) (\"CCPA\") provides certain rights to California residents regarding their Personal Information. A California resident has the right to request that we disclose certain information, including: (1) the categories of Personal Information we have collected about that California resident, (2) the categories of sources from which the Personal Information is collected, (3) the business or commercial purpose for collecting or selling the Personal Information, (4) the categories of third parties with whom Cognitect shares Personal Information, and (5) the specific pieces of Personal Information we have collected about the resident. A California resident has the right to request that we delete his/her Personal Information. Finally, a California resident has the right not to be discriminated against for exercising his/her privacy rights under the CCPA. You can request such Personal Information and change your Personal Information by emailing us at [email protected]. Pursuant to California Civil Code Section 1789.3, California users are entitled to the following consumer rights notice: California residents may reach the Compliant Assistance Unit of the Division of Consumer Services for the California Department of Consumer Affairs by mail at 1625 North Market Blvd., Sacramento, CA 95834, or by telephone at (916) 445-1254 or (800) 952-5210. The Website contains links to other websites. These third-party websites have separate and independent privacy policies. The privacy policies and applicable terms of use of the third-party websites will govern your interaction with such third-party websites. We encourage you to review the privacy policy of linked sites, as Cognitect is not responsible or liable for the practices, content, and/or privacy policies of those third-party websites. Nonetheless, we seek to protect the integrity of our Website and welcome any feedback about these third-party websites. We will retain your Personal Information only for as long as reasonably necessary for the purposes set out above, considering criteria such as applicable rules on statute of limitations, legal requirements and the duration of your use of the Website and receipt of our services. This section of the Privacy Policy applies only if you use the Website or services covered by this Privacy Policy from a country that is a Member State of the European Union and supplements the information in this Privacy Policy. We process information defined as personal data under applicable data protection law (\"Personal Data\") if provided by you and/or for the purposes set out in this Privacy Policy, as described above. - Legal Basis for Processing Personal Data: Our legal basis to process Personal Data, such as for the purposes listed above in the \"How Do We Use Your Personal Information?\" section, includes processing that is: - necessary to comply with legal requirements (for example, to comply with applicable accounting rules and to make mandatory disclosures to law enforcement); - protection of the vital interests of a natural person (for example, in the event of an emergency); - necessary for our legitimate interests (for example, to manage our relationship with you and to improve the Website and our services); and - based on your consent (for example, to communicate with you about the Website and services, and to provide you with any information that you may request), which may subsequently be withdrawn at any time (by contacting us at [email protected]) without affecting the lawfulness of processing based on consent before its withdrawal. In some instances, you may be required to provide us with Personal Data for processing as de
1scribed above, in order for us to be able to provide you all of our services, and for you to use all the features of the Website. Please be aware your Personal Data may be collected, managed, transferred to, processed, and stored or accessed in a country different other than your country of residence. In addition, we may make other disclosures of your Personal Data outside of your country of residence, for example, in the event we receive a legal or regulatory request from a foreign law enforcement body. We will always take steps designed to ensure any transfer of such information outside your country of residence is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. Data protection laws in any such country may be different from those laws of your country of residence. By visiting the Website and accepting this Privacy Policy, you consent to the transfer of your information, including Personal Data, to such country(ies) as set forth in this Privacy Policy. From time to time, Personal Information we collect from data subjects in the European Economic Area or Switzerland (\"EEA or Switzerland\") may be transferred to, stored, processed or accessed by us outside of the EEA or Switzerland, for example, the United States. We will always take steps to ensure any transfer of such information outside the EEA or Switzerland is carefully managed to protect your rights and interests by implementing appropriate safeguards to protect your Personal Data. If you would like to find out more about these safeguards in respect of processing your Personal Data and the means by which you can obtain a copy of them, please contact us at [email protected]. Your Rights: In addition to the rights to access, amend or delete your Personal Data as set out above, you may be entitled, in accordance with applicable law, to object to or request the restriction of processing of your Personal Data, and to request portability of your own Personal Data. Requests should be submitted to [email protected]. If you consider that our processing of your Personal Data infringes applicable law, you may lodge a complaint with a competent supervisory authority, which may be the authority in your Member State of residence or work. Cognitect’s Website and activities may continue to grow and change. Because of this, from time to time, our Privacy Policy will be reviewed and revised. You should check this page occasionally to ensure you are familiar with those changes. Whenever we change our Privacy Policy we will post an updated version on our Website, including the last date of revision. This Privacy Policy was last revised on August 25, 2021. If you have any questions about how we handle your Personal Information and protect your privacy, please feel free to contact us at [email protected] or call us at 919.283.2748. You may also mail requests to: Cognitect 101 W. Chapel Hill Street., Suite 300 Durham, NC 27701 USA","title":"PRIVACY POLICY","component":"pedestal","version":"0.6","name":"privacy","url":"/pedestal/0.6/privacy.html","titles":[{"text":"WHAT INFORMATION DO WE COLLECT?","hash":"_what_information_do_we_collect","id":1},{"text":"HOW DO WE USE YOUR PERSONAL INFORMATION?","hash":"_how_do_we_use_your_personal_information","id":2},{"text":"HOW DO WE USE COOKIES?","hash":"_how_do_we_use_cookies","id":3},{"text":"WHEN MAY A THIRD PARTY RECEIVE ACCESS TO YOUR PERSONAL INFORMATION?","hash":"_when_may_a_third_party_receive_access_to_your_personal_information","id":4},{"text":"HOW DOES COGNITECT KEEP YOUR INFORMATION SECURE?","hash":"_how_does_cognitect_keep_your_information_secure","id":5},{"text":"CHILDREN’S PRIVACY","hash":"_childrens_privacy","id":6},{"text":"GAINING ACCESS TO, UPDATING DELETING YOUR INFORMATION OR WITHDRAWING CONSENT","hash":"_gaining_access_to_updating_deleting_your_information_or_withdrawing_consent","id":7},{"text":"CALIFORNIA PRIVACY RIGHTS","hash":"_california_privacy_rights","id":8},{"text":"LINKS TO OTHER WEBSITES","hash":"_links_to_other_websites","id":9},{"text":"DATA RETENTION","hash":"_data_retention","id":10},{"text":"INTERNATIONAL USERS & USERS FROM THE EUROPEAN UNION","hash":"_international_users_users_from_the_european_union","id":11},{"text":"FUTURE REVISIONS","hash":"_future_revisions","id":12},{"text":"CONTACT US","hash":"_contact_us","id":13}]}
1,"123":{"id":123,"text":"Understanding Pedestal comes with the challenge of unpacking a number of terms - some specific to Pedestal, others inherited from the underlying technologies Pedestal extends from. interceptor An interceptor is the basic unit of work in Pedestal, a combination of specific functions related to handling a request or generating a response. interceptor chain A pipeline of interceptors, setup and executed by a chain provider. chain provider Creates and executes an interceptor chain, with some behaviors reflecting a specific domain - the normal domain is processing HTTP requests. servlet interceptor A chain provider specific to handling HTTP requests from a servlet. service map The service map is a collection of data that is used to setup request routing and interceptors, and ultimately create a server. server A server is responsible for low-level communication with HTTP clients; A server map is created from the service map, and can be used to start and stop the server. Many examples use the Jetty 9 server implementation. handler A simple function that is passed a request map and returns a response map; handlers are converted to interceptors internally. core.async The core.async library is a Clojure extension that allows for efficient and expressive concurrent processing systems. The central artifact is a channel, a kind of data pipe that allows information to be conveyed between concurrently running light-weight processes. servlet The standard Java term for a request handler - a servlet operates in the context of a server and processes incoming requests. In Pedestal, a generic servlet is created and configured, and feeds incoming requests into a pipeline of interceptors. route A mapping of an HTTP Verb (such as GET or POST) and a URL path to a specific set of interceptors. routing The process of mapping an incoming request to a route, using a router and a routing specification. routing specification A concise list of routing data, in one of several formats. A routing specification is converted into a routing table. routing table A verbose, expanded version of routes that can be used by a router. router A specific implementation (there are several in Pedestal, with different tradeoffs) responsible for identifying the route for an incoming request, using a routing table derived from a routing specification. routing interceptor An interceptor whose job is to perform routing; the routing interceptor is constructed from a routing specification and a router implementation. REPL The Read Eval Print Loop: reading Clojure input, evaluating it, and printing the result. Clojure excels at interactive development. context map The context map contains data about the ongoing request; a context map is passed to interceptors, which often return a modified copy of it. Ultimately, the incoming request map and response map are stored in the context map, along with much other data internal to Pedestal. request map A map of data about the incoming HTTP request, including HTTP verb, URL, and parameters; this is all the information needed to route and process the request, and is available inside the context map. response map A map of data used to construct and send the HTTP response. The response map is stored into the context map to trigger the sending of the response. SLF4J The Simple Logging Facade for Java, a generic wrapper around several competing approaches to generating logging output. Pedestal’s io.pedestal.http logging support works with SLF4J. Leiningen Leiningen is a popular and pervasive Clojure build tool. Projects with a project.clj file at the root are built using Leiningen, which can download dependencies from a Maven repository on demand. Maven repository A source of Java and Clojure packages, used by the Maven build tool, but also by virtually all other similar tools in the Java ecosystem. clj Also called \"tools.deps\", this is the name of a build tool for Clojure. clj is more recent than Leiningen and has a very different model, but can perform the same key functions: downloading dependencies (from Maven repositories and elsewhere) and running Clojure programs. Projects with a deps.edn file at the root are built using clj.","title":"Terminology","component":"pede
1stal","version":"0.6","name":"terms","url":"/pedestal/0.6/terms.html","titles":[]},"124":{"id":124,"text":"Moving from jBake to Antora has been an opportunity to go over each individual page of documentation, and each example. Incorrect documentation is worse than no documentation. Not everything can be done in a single pass, so this space is being used to track work that still needs to be done. Make the reference docs more concise; hand holding is for the guides Dial back the \"if you don’t know Clojure\" parts of some guides Add an intro with all the key terms Put the Guides and Reference into a reasonable order Make better use of xref: linking between pages Lots of broken links (currently in Howard’s IntelliJ bookmarks) \"Cognitect\" → \"NuBank NA\" Create a custom UI theme Currently just a placeholder Philosophy of Pedestal Key terms and concepts quickly Overview of the documentation Discuss options Map vs. string events Break into service map vs. server map (on a new page) for things like :start-fn, etc. Are response headers converted to lower case? :body may be extensible (e.g., chan) Is web.xml this up to date w/ Jetty 11 (e.g., javax.*) Update to discuss relevant Leiningen and Maven plugins Need to eliminate Jetty/Servlet API dependencies from classpath Discuss embedded as first option Update \"Cognitect\" to \"NuBank NA\" Convert from terse syntax to table syntax Pretty of date, should reference page on using snapshots, etc. Alphabetize the entries \"Pedestal with Component: Handlers and Dependencies\" (never written) Page about using snapshots (or Git coordinates)","title":"Documentation Work Queue","component":"pedestal","version":"0.6","name":"todo","url":"/pedestal/0.6/todo.html","titles":[{"text":"General","hash":"_general","id":1},{"text":"Antora Technical Stuff","hash":"_antora_technical_stuff","id":2},{"text":"What is Pedestal?","hash":"_what_is_pedestal","id":3},{"text":"Server-Sent Events","hash":"_server_sent_events","id":4},{"text":"service map","hash":"_service_map","id":5},{"text":"response map","hash":"_response_map","id":6},{"text":"WAR Deployment","hash":"_war_deployment","id":7},{"text":"Privacy Policy","hash":"_privacy_policy","id":8},{"text":"Defining Routes","hash":"_defining_routes","id":9},{"text":"Contributing to Pedestal]","hash":"_contributing_to_pedestal","id":10},{"text":"Terminology","hash":"_terminology","id":11},{"text":"Missing","hash":"_missing","id":12}]},"125":{"id":125,"text":"This guide takes us past the basics of getting started. It deals with a part of Pedestal that you will touch quite often: routing. A key problem in any backend service is directing incoming requests to the right bit of code. As an industry, we’ve settled on the term \"routing\" to describe how a service understands a request’s URL and invokes a matching function. There’s a flip side to routing, though, which is generating URLs to put into links and hrefs. If we’re not careful, link generation can create hard-to-find coupling between different parts of a service. Pedestal addresses both parts of this problem with the same feature. After reading this guide, you will be able to: Define routes Parse parameters from URLs Connect routes to handlers Apply interceptors along a route Use constraints to ensure a route is invoked correctly Generate links for a route during a request to that route Generate links for other routes This guide assumes that you understand HTTP requests and URLs. In particular, we make no effort to explain URL-encoding or query strings. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or hop over to the mailing list and raise your hand there. In Your First API, we defined a handful of routes for a basic REST style API. It’s time to dig deeper and understand what we can do with this flexible and powerful part of Pedestal. We will work with routes that: Serve static resources Use multiple parameters Use wildcards to match subtrees Support multiple verbs We will also generate URLs from routes and parameters. This guide will use Leiningen to generate and build a template project. If you haven’t already installed it, please take a few minutes to set it up. Since Pedestal was first unveiled, we’ve gone through a couple of iterations on the routing syntax. So far, these iterations have all been additive. Prior to release 0.5.0, guides and samples all used the \"terse\" syntax, which is written as a triply-nested vector. The terse syntax is powerful but not easy. Release 0.5.0 introduced a new syntax we call the \"table\" syntax. It is more wordy and has some repetition from row to row, but it also has some advantages: The parser is simpler and produces better error messages when the input is not right. (This includes some work to make stack traces more helpful.) The table does not have hierarchical nesting, so the rows are independent. The input is just data, so you can read it from an EDN file or compose it with regular functions. No more syntax-quoting to create interceptors with parameters. The \"terse\" and \"verbose\" syntax are both still supported, until we hear from the community. We’ve also put some effort into better error messages when dealing with the terse format. See the Routing Quick Reference for full details. The simplest route has just a URL, an HTTP verb, and a handler: [\"/users\" :get view-users] In this case, view-users is anything that can be resolved as an interceptor: An Interceptor record A function that returns an interceptor (the function must be annotated as ^:interceptor-fn) A request handler function (really a special case of interceptor) There’s nothing special about using a symbol in the handler’s position. You could call a function that returns an interceptor: [\"/users\" :get (make-view-users-handler db-conn)] That call to make-view-users-handler is nothing special. Clojure will evaluate it when you build the route table. Just make sure it returns something that can be resolved as an interceptor. That also means you can use anonymous functions as handlers. Here’s another way we 
1could implement an \"echo\" function: [\"/echo\" :get (fn [request] {:status 200 :body request}) :route-name :echo] Every route must have a route name, but in most cases, Pedestal can \"figure out\" a reasonable value. Here,the route name clause is necessary here because an anonymous function has nothing that Pedestal can use to infer a route name. The URL in a route doesn’t have to be just text, often important request information is included in the URL, rather than query parameters. The URL from the route is actually pattern used to match URLs. The URL pattern can include any number of segments to capture as parameters. Any segment that looks like a keyword will be captured in the :path-params map in the request. So the route: [\"/users/:user-id\" :get view-users] will match any of the following requests: /users/abacab /users/miken /users/12345 /users/mike%20n When the request reaches our view-users handler, it will include a map like this: {:path-params {:user-id \"miken\"}} The path parameters are always delivered as strings. The strings are HTTP decoded for you, but are not otherwise converted. A single path parameter only matches one segment of a URL. One segment is just the part between '/' characters. So the route above will not match /users/miken/profile/photos/blue-wig.jpg. What if our user IDs are all numeric? It would be convenient if the route would only match when the URL meets a valid pattern in the path parameters. That’s the job of Constraints, discussed below. What if you actually do want to match any number of segments after a path? In that case, you use a catch-all parameter. It looks like a path parameter, except it has an asterisk instead of a colon: [\"/users/:user-id/profile/*subpage\" :get view-user-profile] Now this route does match the URL /users/miken/profile/photos/blue-wig.jpg and, as you might have guessed, the matching segments are still delivered as path parameters in the request map: {:path-params {:user-id \"miken\" :subpage \"photos/blue-wig.jpg\"}} As the subpage path parameter demonstrates, catch-all parameters are strings containing the remaining path segments. You don’t need to do anything in the route to capture query parameters. They are automatically parsed and passed in the request map, under the :query-params key. Like path parameters, query parameters are always delivered as HTTP-decoded strings. For example, an HTTP request with for the URL: /search?q=blog will have this in the request map: {:query-params {:q \"blog\"}} So far, all our examples have used :get as the HTTP verb. Pedestal supports the following verbs: :get :put :post :delete :patch :options :head :any These should look familiar, except for :any. The :any keyword is a wildcard that allows a route to match any request method. That gives a handler the opportunity to decide whether a request method is allowed or not. So far, all our examples have used just one handler function. But one of Pedestal’s key features is the ability to create a chain of interceptors. The route table allows you to put a vector of interceptors (or things that resolve to interceptors) in that third position. [\"/user/:user-id/private\" :post [inject-connection auth-required (body-params/body-params) view-user]] In this example, inject-connection and auth-required are application-specific interceptors. body-params is a Pedestal function that returns an interceptor. view-user is a request-handling function. When a request matches this route, the whole vector of interceptors gets pushed onto the context. The \"terse\" syntax uses hierarchically nested routes to reuse interceptors on subtrees. The table based syntax gives up that feature, but still allows you to compose interceptors: ;; Make a var with the common stuff (def common-interceptors [inject-connection auth-required (body-params/body-params)]) ;; inside a call to table-routes [\"/user/:user-id/private\" :post (conj common-interceptors view-user)] This leaves your code in charge of composing interceptors using ordinary Clojure data manipulation. As a convenience, you can supply a map of constraints, in the form of regular expressions, that must match in order for the whole route to match. This handles that case from before, where we wanted to say that user IDs must be numeric. You tell the router about constraints by supplying a map from parameter name to regular expression: [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] Notice the :constraints keyword. That is required to tell the router that the following map is to be treated as constraints. Like the interceptor vector, the constraint map is just data. Feel free to build it up however you like…​ it doesn’t have to be a map literal in the route vector: (def numeric #\"[0-9]+\") (def user-id {:user-id numeric}) [\"/user/:user-id\" :get view-user :constraints user-id] [\"/user/:user-id\" :post update-user :constraints user-id] The thing about constraints is that they are not used to distinguish between otherwise identical routes. They are not for disambiguation. Rather, constraints are used to reject requests match the rest of the route but don’t match the constraints. What happens after such a rejection depends on which router is being used. Router Behavior on Failed Constraint Prefix tree Abort and return a 404 response Map tree Abort and return a 404 response Linear search Continue searching the remaining routes Be cautious about using path constraints. Experience has shown that constraints result in a worse experience for users of your API. Generally, it is better to validate path and query parameters inside your route (in an interceptor or handler for the specific route) so that proper errors could be returned to the client, rather than a generic, and perhaps misleading, 404 NOT FOUND response. As an alternative to using path constraints, you could define a validating interceptor: (def user-id-vali
1dator (interceptor {:name ::user-id-validator :enter (fn [context] (if (re-matches #\"[0-9]+\" (get-in context [:request :path-params :user-id])) context (assoc context :response {:status 400 :body \"user-id must be numeric\"})))})) This interceptor could be placed into the interceptor list for any route that has a user-id in the path, and will abort any request (with a 400 Bad Request status code) if the user-id is not numeric. Every route must have a unique name. Pedestal uses route names for the flip side of route matching: URL generation. You can supply a route name in the route vector: [\"/user\" :get view-user :route-name :view-user-profile] A route name must be a keyword. Most commonly, it is a namespace-qualified keyword. The route name comes before :constraints, so if you have both, the order is as follows Path - String Verb - keyword (e.g., :get) Interceptors - vector Route name clause (:route-name your-route-name) Constraints clause (:constraints constraint-map) You’ll notice that most of the examples above omit the :route-name clause. When there is no explicit route name, Pedestal will pick one for you. It uses the :name of the last interceptor in the interceptor vector. When you reuse interceptors, or when you supply a handler function as the final interceptor, you’ll need to explicitly specify the route name. Suppose you have a single interceptor or handler that deals with multiple verbs on the same path. Maybe it’s a general API endpoint function or a function created by another library. If you just try to make multiple rows in a table, you will get errors: ;;; This won't work in table syntax. Both rows get the same automatic ;;; route name. [\"/users\" :get user-api-handler] [\"/users\" :post user-api-handler] You have a couple of options. To stick with table syntax, you can use route names to distinguish the rows: [\"/users\" :get user-api-handler :route-name :users-view] [\"/users\" :post user-api-handler :route-name :user-create] The route names are enough to make each row unique. With terse syntax, one path has a map that allows multiple verbs. Each verb can use the same handler as long as they specify different route names: [\"/users\" {:get user-api-handler :post [:user-create user-api-handler]}] In addition to routing, route tables are also used for URL generation. You can request a URL for a given route by name and specify parameter values to fill in. This section describes URL generation, starting with how routes are named. The url-for-routes function takes the parsed route table and returns a URL generating function. The generator accepts a route name and optional arguments and returns a URL that can be used in a hyperlink. (def app-routes (table/table-routes {} [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :route-name :show-user-profile] [\"/user/:user-id/timeline\" :post post-timeline :route-name :timeline] [\"/user/:user-id/profile\" :put update-profile]])) (def url-for (route/url-for-routes app-routes)) (url-for :user-search-form) ;; => \"/user\" (url-for :view-user :params {:user-id \"12345\"}) ;; => \"/user/12345\" Any leftover entries in the :params map that do not correspond to path parameters get turned into query string parameters. If you want more control, you can give the generator the specific arguments :path-params and :query-params. The url-for-routes function provides a global URL generator. Within a single request, the request map itself can provide a URL generator. This generator allows you to create absolute or relative URLs depending on how the request was matched. When the routing interceptor matches a request to a route, it creates a new URL generator function that closes over the request map. This function is stored in three places: In the context map, using the :url-for key In the request map (inside the context), using the same :url-for key In a private dynamic variable in the io.pedestal.http.route namespace The private variable allows the url-for function to operate from any interceptor (or handler) code. url-for only returns URLs. The function form-action-for-routes takes a route table and returns a function that accepts a route-name (and optional arguments) and returns a map containing a URL and an HTTP verb. (def form-action (route/form-action-for-routes app-routes)) (form-action :timeline :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/:user-id/timeline\"} A form action function will (by default) convert verbs other than GET or POST to POST, with the actual verb added as a query string parameter named _method: (form-action :update-profile :params {:user-id 12345}) ;; => {:method \"post\", :action \"/user/12345/profile?_method=put\"} This behavior can be disabled (or enabled for url-for functions) and the query string parameter name can be changed. All of these settings can be modified when an url-for or form-action function is created or when it is invoked. Up until now, we’ve looked at individual routes or a small handful of them. Now let’s see how to connect them to a Pedestal service. Well, that means we probably need a service to put them in. Time to fire up leiningen. Pedestal provides a leiningen template to generate new projects. Find a nice spot to keep your work and run The Pedestal Leiningen template has changed over time and may not exactly match this. $ lein new pedestal-service myapp Retrieving pedestal-service/lein-template/0.5.1/lein-template-0.5.1.pom from clojars Retrieving pedestal-service/lein-template/0.5.1/lein-template-0.5.1.jar from clojars Generating a pedestal-service application called myapp. $ cd myapp $ ls Capstanfile Dockerfile README.md config project.clj src test Looks like the template generated some good stuff. project.clj defines the new service’s dependencies and build instructions. Dockerfile lets you package this service as a Docker container. C
1apstanfile is a similar thing to compile this service into a unikernel application with OSv. For now, the parts we really want to see are under src/myapp. $ ls src/myapp server.clj service.clj These two source files define a production-ready Pedestal service. All it serves right now as an \"About\" page, so we need to make some improvements before we ship it. server.clj supplies the main entry point. service.clj defines the behavior of the service itself. These are starting points, though. Over time, you will certainly add more files and factor behavior out of these two. For now, we need to open up service.clj and make some changes. Here is what the template generated for us (as of version 0.5.1, at least. Details may differ slightly in yours.) src/myapp/service.clj (def routes #{[\"/\" :get (conj common-interceptors `home-page)] [\"/about\" :get (conj common-interceptors `about-page)]}) We will make this look more like the route table from Your First API. src/myapp/service.clj (def routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item\" :get [entity-render list-item-view]] [\"/todo/:list-id/:item\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item\" :delete echo :route-name :list-item-delete]}) Notice the use of :list-id and :item to extract parts of the URL. Right now, each of those can contain any sequence of characters. Anything at all. Suppose we need to restrict them to numbers. That means we need to add constraints. src/myapp/service.clj (def numeric #\"[0-9]+\") (def url-rules {:list-id numeric :item numeric}) (def routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view] :constraints url-rules] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create] :constraints url-rules] [\"/todo/:list-id/:item\" :get [entity-render list-item-view] :constraints url-rules] [\"/todo/:list-id/:item\" :put echo :route-name :list-item-update :constraints url-rules] [\"/todo/:list-id/:item\" :delete echo :route-name :list-item-delete :constraints url-rules]}) Here we’ve added a constraints clause to each of the routes with parameters. To make sure all the routes obey the same rules, we can factor those rules out into a value that we attach to each route. One thing we haven’t demonstrated so far is the ability to match all of a URL’s string. You might do this if you need to create a URL hierarchy with arbitrary depth. That is the purpose of a wildcard URL like this: src/myapp/service.clj (def routes #{[\"/org/*todos\" :get [parse-hierarchy lookup-list]]}) Maybe this is for a manager to see every single TODO ever assigned to anyone in the organization. Seems perfectly reasonable. This wildcard route will match anything that starts with /org/. Interceptors will receive a request with the path parameter :todos bound to everything that followed /org/. It is up to those interceptors to parse and interpret the URL. The map tree router is by far the fastest router in Pedestal. Part of how it gets that speed, though, is by forbidding the use of dynamic path segments like wildcards and path parameters. If your routes include any of them, then even if you request the map tree router, Pedestal will fall back to using the (still pretty fast) prefix tree router. This guide covered route definitions, from the most basic possible case all the way to the most complex. It demonstrated the use of the table routing syntax and showed how to use them in a real service. Finally, it demonstrated the use of wildcard routes and discussed when to use them and their tradeoffs. For more details, see the Routing Quick Reference.","title":"Defining Routes","component":"pedestal","version":"0.6","name":"defining-routes","url":"/pedestal/0.6/guides/defining-routes.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2}
1,{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"A Note About Routing Syntax","hash":"_a_note_about_routing_syntax","id":7},{"text":"Defining a Route: The Bare Minimum","hash":"_defining_a_route_the_bare_minimum","id":8},{"text":"Building handlers","hash":"_building_handlers","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Catch-all Parameters","hash":"_catch_all_parameters","id":11},{"text":"Query Parameters","hash":"_query_parameters","id":12},{"text":"Verbs","hash":"_verbs","id":13},{"text":"Interceptors","hash":"_interceptors","id":14},{"text":"Common interceptors","hash":"_common_interceptors","id":15},{"text":"Constraints","hash":"_constraints","id":16},{"text":"Considering Constraints","hash":"_considering_constraints","id":17},{"text":"Route names","hash":"_route_names","id":18},{"text":"Default Route Names","hash":"_default_route_names","id":19},{"text":"Using Route Names to Distinguish Handlers","hash":"_using_route_names_to_distinguish_handlers","id":20},{"text":"Generating URLs","hash":"_generating_urls","id":21},{"text":"URL generation","hash":"_url_generation","id":22},{"text":"Request-specific URL generation","hash":"_request_specific_url_generation","id":23},{"text":"Verb smuggling","hash":"_verb_smuggling","id":24},{"text":"Using Routes in a Service","hash":"_using_routes_in_a_service","id":25},{"text":"Restrictions on Wildcards and Path Parameters","hash":"_restrictions_on_wildcards_and_path_parameters","id":26},{"text":"Wrapping Up","hash":"_wrapping_up","id":27}]},"126":{"id":126,"text":"Your servlet container has a maximum number of request processing threads available; this is configurable, but (for example) the Jetty container defaults to 50 threads. That means if your application receives more than 50 concurrent requests, the later requests will be queued for later execution; this means that throughput for any request gets worse. Many applications spend much of their time waiting: waiting to read from disk, or a database, or for a response from some other backend service; in normal processing, than means the request processing thread is blocked, doing nothing but taking up space. Here is a synchronous handler that needs to wait for something to happen: (defn takes-time [request] {:status 200 :body (lengthy-computation request)}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name ::takes-time]})) Because this handler is synchronous, requests for /takes-time will block until the call to lengthy-computation completes, stopping the servlet container thread from handling other work. If you need to support more concurrent requests on a single server, and your workload is primarily I/O bound, then you should consider asynchronous request processing. With asynchronous request processing, a request can be unbound from a specific request processing thread. While some background work is happening (the disk or network I/O), the request processing thread can be used for some entirely different request. When the background work completes, the processing of the request resumes from where it left off. The support for all of this is based on Clojure’s core.async library. (def takes-time {:name ::takes-time :enter (fn [context] (go (let [result (<! (lengthy-computation (:request context)))] (assoc context :response {:status 200 :body result}))))}) (def routes (route/expand-routes #{[\"/takes-time\" :get takes-time :route-name :takes-time]})) So, instead of providing a handler for the /takes-time route, we are providing an interceptor, as that enables more options. A handler is passed a request map and returns a response map, and must always behave synchronously. By contrast, an interceptor is more involved; an interceptor is passed a context map (that itself contains a :request map), and returns the same, or a modified context map (perhaps containing a :response map). And, for async processing, the interceptor can instead return a core.async channel that conveys the modified context map, when it is ready. A channel is somewhat akin to a promise…​ it represents a computation that will operate concurrently and complete at some point in the future. A core.async go block represents a deferred computation; a go block immediately returns a channel; when the body of the go block completes its execution, the result will be written into the channel. In this example, we assume that lengthy-computation has been changed to al
1so return a channel; the core.async <! function will wait for that value to be delivered, before the context is rebuilt and written to the output channel. Pedestal recognizes the difference here …​ it’s getting back a channel, not a map, and can return the request processing thread to the container. When the new context, including the :response map, is delivered, Pedestal will acquire a request processing thread and resume processing the request. This facility allows a single value to be placed on a channel per interceptor; for more extensive use of channels for SSE, see Server-Sent Events. For more about streaming, see Streaming Responses. In the above example, there was just a single interceptor for the route. Most applications will have many interceptors for any particular route to cover a wide range of cross-functional concerns. Importantly, any of these interceptors can \"go async\" by returning a channel instead of a context map. This has implications for all following interceptors in the interceptor chain; those interceptors will not execute in the original request processing thread, but instead will execute in a core.async dispatch thread. These dispatch threads are pooled, but the default is a maximum of eight dispatch threads. An interceptor that blocks may then block a dispatch thread. If this happens across enough requests, then eventually all dispatch threads could be blocked, and no code inside any go block will execute - your server will be jammed up, consuming little or no CPU but not responding to incoming requests. So be cautious: ensure that only async processing occurs in an interceptor that may follow an async interceptor. Quick calculations are perfectly fine, but make sure not to do any blocking operations, such as disk or network I/O, inside any such interceptors.","title":"Async Request Processing","component":"pedestal","version":"0.6","name":"async","url":"/pedestal/0.6/guides/async.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"Synchronous Handler","hash":"_synchronous_handler","id":2},{"text":"Triggering Async","hash":"_triggering_async","id":3},{"text":"Async Interceptor Chains","hash":"_async_interceptor_chains","id":4}]},"127":{"id":127,"text":"Exploring your application at the REPL is fundamental to Clojure development. In the context of Pedestal applications, we often want to interrogate the routing system and invoke interceptors (or handlers) in isolation. These explorations often form the basis for more robust automated tests, which will be covered in the Unit testing guide. After reading this guide, you will be able to perform the following tasks at the REPL: Start and stop the HTTP server. Reload your routes without restarting the server. List your application’s routes. Find a route by name. Test the response of a single route. Test for route recognition. Test url generation. Invoke an interceptor or handler. [TODO] Examine the interceptor stack. [TODO] Connect to a running application with Socket REPL. [TODO] Capture the last request and examine it at the REPL. [TODO] This guide assumes you have a working REPL in your Pedestal application. If you generated your application using the pedestal-service Leiningen template, this might be as simple as running lein repl at the command line. Perhaps your editor or IDE provides a facility for launching a REPL for your project. A great resource for understanding and configuring your REPL environment can be found at Lambda Island’s Ultimate Guide to Clojure REPLs. include::partial$getting-help.adoc In this guide, we will develop a few simple utility functions that simplify interacting with your Pedestal application from the REPL. For the sake of having a consistent baseline setup, we’ll use a clean project for this guide. Generate a new Pedestal service using the following command: lein new pedestal-service pedrepl; cd pedrepl The default project template creates two files: server.clj and service.clj. We’re now ready to begin exploring the Pedestal application. Ladies and gentlemen, start your REPLs! The first thing we’ll want to do from the REPL is to control the HTTP server. By default, your REPL should start in the pedrepl.server namespace. The Leiningen template generates a useful function named run-dev which will configure and start the HTTP server in development mode, preventing the HTTP server thread from being joined and locking up your REPL. In development mode, routes are reloaded when the service.clj is re-required. At the REPL, invoke the run-dev function to start the server: pedrepl.server> (def serv (run-dev)) Now fire up a browser and navigate to http://localhost:8080 to see the default, \"Hello, World!\" message. Within service.clj, update the home-page handler to respond with \"Hello Pedestal User\". Re-require/reload the service.clj, and when you reload http://localhost:8080 you’ll see the change immediately. In dev-mode, you should never have to restart the server - changes are picked up as soon as they’re required/reloaded. Should you ever need to stop the server, you can do so with the following invocation: pedrepl.server> (server/stop serv) Now that we’re able to control the HTTP server, we’ll want some additional amenities. Next we’re going to add some route introspection utilities. Pedestal ships with all of the raw materials we need. Our job is simply to package these tools together into more convenient forms adapted to our specific needs. Pedestal supports a few different route definition formats. Version 0.5.0 saw the advent of a new table format which is now the default generated by the pede
1stal-service Leiningen template. Let’s add a reference to the table format namespace from server.clj. Your namespace declaration should now look like this: (ns pedrepl.server (:gen-class) (:require [io.pedestal.http :as server] [io.pedestal.http.route :as route] [io.pedestal.http.route.definition.table :refer [table-routes]] ; <-- new [pedrepl.service :as service] [clojure.java.io :as io])) With that reference in place, we can add a new utility to print our application’s routes at the REPL: (defn print-routes \"Print our application's routes\" [] (route/print-routes (table-routes service/routes))) Try this new function out at the REPL: pedrepl.server> (print-routes) [:get /about :pedrepl.service/about-page] [:get / :pedrepl.service/home-page] nil This simple output lists the HTTP method, relative path, and handler function for each one of our routes. This is a great start, but as our application grows we may want to find a route by name. Let’s add another utility to do just that: (defn named-route \"Finds a route by name\" [route-name] (->> service/routes table-routes (filter #(= route-name (:route-name %))) first)) Let’s test our new function: pedrepl.server> (named-route ::service/home-page) This function returns a map describing the home page route in greater detail than print-routes. Besides the :path and :method keys, we’re given access to the list of :interceptors that will be invoked when this route is requested. It’s not uncommon for Pedestal services to have quite a few interceptors, so the raw output from named-route can get a little unwieldy. Let’s see if we can produce some friendlier output. Interceptors are central to Pedestal applications. Not only do they provide the same pre- and post-processing of requests that Ring middleware does, but they also provide the main functionality behind every request. Everything in Pedestal is an interceptor, created by a single protocol - IntoInterceptor. When a route is compiled in Pedestal, it’s compiled with the full list of interceptors that run for that endpoint. It is often useful to see all interceptors that get run for a single endpoint. You can do that by looking through the route description or programmatically at the repl. Below is one way you might inspect and format that information. (defn print-route \"Prints a route and its interceptors\" [rname] (letfn [(joined-by [s coll] (apply str (interpose s coll))) (repeat-str [s n] (apply str (repeat n s))) (interceptor-info [i] (let [iname (or (:name i) \"<handler>\") stages (joined-by \",\" (keys (filter (comp (complement nil?) val) (dissoc i :name))))] (str iname \" (\" stages \")\")))] (when-let [rte (named-route rname)] (let [{:keys [path method route-name interceptors]} rte name-line (str \"[\" method \" \" path \" \" route-name \"]\")] (joined-by \"\\n\" (into [name-line (repeat-str \"-\" (count name-line))] (map interceptor-info interceptors))))))) Let’s use our new utility to print the ::service/home-page route information. pedrepl.server> (print-route ::service/home-page) This call produces the following output: [:get / :pedrepl.service/home-page] -------------------------------- :io.pedestal.http.body-params/body-params (:enter) :io.pedestal.http/html-body (:leave) <handler> (:enter) Of course, this is a completely arbitrary representation of your route definition. Your own needs and aesthetic sensibilities should inform the structure of your application’s output. It’s not even necessary to start a server to see responses of your Pedestal service. Pedestal ships with a response-for function that will return the response of an endpoint, exactly how it’s passed to the Servlet/Chain-Provider. Let’s jump into the REPL: pedrepl.server> (require '[io.pedestal.test :refer [response-for]]) nil pedrepl.server> (def tempserv (::server/service-fn (server/create-servlet service/service))) pedrepl.server> (response-for tempserv :get \"/\") You can also use the same response-for function to test against a live server. Assuming you still have a running server from above (e.g. (def serv (run-dev))), You can do the following: pedrepl.server> (response-for (::server/service-fn serv) :get \"/\") One of Pedestal’s benefits is that its routing table is bidirectional. Not only does Pedestal use the route definition to recognize routes based on request data, but it can also generate URLs to known route handlers. Let’s take a closer look at both of these capabilities in turn. When developing Pedestal applications, we often want to verify that a given HTTP verb and relative path will invoke the correct handler. Again, Pedestal provides all of the plumbing we need to answer these questions from the comfort of the REPL. Add the following function to server.clj: (defn recognize-route \"Verifies the requested HTTP verb and path are recognized by the router.\" [verb path] (route/try-routing-for (table-routes service/routes) :prefix-tree path verb)) With this function in place, we can test for route recognition from the REPL: pedrepl.server> (recognize-route :get \"/about\") => {:path \"/about\", :method :get, :path-re #\"/\\Qabout\\E\", :path-parts [\"about\"], :interceptors [{:name :io.pedestal.http.body-params/body-params, :enter #function[io.pedestal.interceptor.helpers/on-request/fn--8294], :leave nil, :error nil} {:name :io.pedestal.http/html-body, :enter nil, :leave #function[io.pedestal.interceptor.helpers/on-response/fn--8311], :error nil} {:name nil, :enter #function[io.pedestal.interceptor/eval155/fn--156/fn--157], :leave nil, :error nil}], :route-name :pedrepl.service/about-page, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #function[clojure.core/constantly/fn--4614]} When we generate urls during the lifetime of a request, we can simply use Pedestal’s url-for function. However, this function relies on the url-for variable which is dynamically bound during the life of a request. In order to test URL generation from the REPL, we’ll define the following utility: (defn dev-url-for \"Returns a url string for the named route\" [route-name & opts] (let [f (route/url-for-routes (table-routes service/routes)) defaults {:host \"localhost\" :scheme :http :port 8080} route-opts (flatten (seq (merge defaults (apply hash-map opts))))] (apply f route-name route-opts))) Let’s generate the URL for the about page: pedrepl.server> (dev-url-for ::service/about-page) => \"/about\" pedrepl.server> (dev-url-for ::service/about-page :absolute? true) => \"http://localhost:8080/about\" Capture request In this guide we learned how to explore our Pedestal application from the REPL. Some of these explorations may serve as the basis for unit tests. Head over to the Unit testing guide to learn how to test the complete interceptor chain for a given route and much more. Alternatively, you may want to learn to manage your applications stateful components (like the HTTP server) more effectively. Check out the guide on Integrating Pedestal with Component to learn how easy it can be to incorporate Stuart Sierra’s Reloaded workflow into your Pedestal development, and read Reloading at the REPL for a non-component take on how to make live changes without restarting.","title":"Developing at the REPL","component":"pede
1stal","version":"0.6","name":"developing-at-the-repl","url":"/pedestal/0.6/guides/developing-at-the-repl.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Before We Begin","hash":"_before_we_begin","id":5},{"text":"Starting and stopping the HTTP server","hash":"_starting_and_stopping_the_http_server","id":6},{"text":"Working with Routes","hash":"_working_with_routes","id":7},{"text":"Interceptors and Handlers","hash":"_interceptors_and_handlers","id":8},{"text":"Testing Route Responses","hash":"_testing_route_responses","id":9},{"text":"Route Recognition and Generation","hash":"_route_recognition_and_generation","id":10},{"text":"Route Recognition","hash":"_route_recognition","id":11},{"text":"Route Generation","hash":"_route_generation","id":12},{"text":"Useful Techniques","hash":"_useful_techniques","id":13},{"text":"Connecting to a Running Application","hash":"_connecting_to_a_running_application","id":14},{"text":"Next Steps","hash":"_next_steps","id":15}]},"128":{"id":128,"text":"In the first two parts of this trail, we made a basic service and we enhanced it to accept a query parameter. Both of these returned their responses as plain text. Plain text is not particularly useful: it doesn’t excel at presentation the way that HTML does, and it doesn’t offer structured data to a smart client the way JSON (or XML, or EDN, or a number of formats) would. In fact, we should go a step further: the client should be in charge of whether they get human-presentable HTML, or code-focused JSON, using the very same endpoints. It’s time to see how Pedestal handles content types and response bodies. We will also get our first taste of interceptors. After reading this guide, you will be able to: Add interceptors to routes. Use functions to create interceptors. Use the response map. Transform responses into other content types. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. If you like to jump straight in to the deep end, you might be interested in the Pedestal Crash Course which assumes you know quite a bit about Clojure and web frameworks. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the same hello.clj that we’ve built up over the last two guides. We will enhance it to return a JSON content body. Then we will add the ability to look at the client’s preferred content type and make a decision about what to return. If you worked through Hello World, With Parameters then you already have all the files you need. If not, take a moment to grab the sources from the whole shebang in that guide. Feel free to browse the complete sources in the repository, but be warned that the file contains all the versions that we built up through the previous guide. You’ll need to navigate some magic comments to pare it down to just the final version. Our first effort to deal with content types will be pretty manual. This is to show you what goes on under the hood before we use the handy built-in features that Pedestal offers. Don’t worry, this won’t hurt too much. It’ll also let us introduce the most important concept in Pedestal: Interceptors. Back in Hello World, With Parameters we echoed an HTTP request back as the response. That was pretty useful for debugging, and it will come in handy for our next step. Since our /greet route is working so nicely, let’s make a general route to just echo requests back. Pop open hello.clj and change the routes definition to this: (def routes (route/expand-routes #{[\"/greet\" :get respond-hello :route-name :greet] [\"/echo\" :get echo]})) You probably noticed that routes is created with a def and not with a defn. def creates a var and binds a value to that var. Under the jargon, that means it creates a new name in the namespace and attaches a value. defn is a macro that essentially expands into def with a f
1n, hence the name. In practice, when you see a def, you should think \"this is creating a value, and values don’t change.\" So it is with the routes. After changing the routes, you will need to restart your service. This is purely a result of the way we’ve built things for this guide. There are techniques that let you automatically reload routes during development. We’ll get to those in Developing at the REPL. When you restarted your service, you probably got a nasty message from Clojure like: user=> (require :reload 'hello) Syntax error compiling at (hello.clj:55:3). Unable to resolve symbol: echo in this context user=> That is a very precise way to say we forgot to define echo before using it. Let’s do that now. We’re going to define echo differently than our handler function hello. Instead of a simple handler function, we’re going to define an interceptor. Interceptors are the basic unit of work in Pedestal. At every step of the way between when a request arrives from the client, and when a response is sent back, there’s at least one interceptor. This includes: Parsing query parameters Routing the incoming request Logging the request Constructing the full response An interceptor is essentially a simple map, but the values for the most important keys are not simple values (like strings or numbers), but functions. This identifies two phases: enter and leave. Each interceptor may participate in the phase by providing corresponding callback functions in the :enter and :leave keys (respectively) [1]. Some interceptors only do work during the enter phase, some only during the leave phase, and some do work during both phases. An interceptor that omits the :enter or :leave key will just be skipped — it’s not an error. But what does that work entail? It’s essentially a bucket brigade: each interceptor is passed the context map, is free to perform other work if necessary, and returns a modified context map, which is passed to the next interceptor. Part of the context map is the interceptor queue, and the interceptor stack; the queue is a list of interceptors who have yet to be invoked during the enter phase. As interceptors are invoked[2], they are also added to the interceptor stack, which is used during the leave phase. Because it’s a stack, the leave phase invokes the interceptors in the opposite order from the enter phase: Handler functions, like respond-hello in our example, are special cases. Pedestal can wrap a plain old Clojure function with an interceptor that takes the request map out of the context map, passes it to the function, and uses the return value of the function as the response map [3]. As soon as any interceptor attaches a :response key to the context map, Pedestal considers the request handled. Remaining interceptors in the interceptor queue won’t be called, and only the ones that are already on the interceptor stack will be invoked during the leave phase. This is a \"short-circuit\" behavior, like an early-exit in code. My advice is to build your value in the context with :enter functions, turn it into a response at the tail end of the interceptor queue, and then refine the response map with defaults, headers, cookies, and so on in :leave functions. We’re ready to define echo as an interceptor: (def echo {:name ::echo (1) :enter (fn [context] (2) (let [request (:request context) (3) response (ok request)] (4) (assoc context :response response)))}) (5) 1 Interceptor names help with debugging. 2 We’re providing an :enter function. 3 Take the request map out of the context map. 4 Make a response map out of it. 5 Attach the response to the context map, and return the new context map. We normally wouldn’t write this in such an expanded form, but I wanted to show all the pieces one by one. Ultimately, we’re just making a map with the keys :name and :enter. We can try that interceptor out now. Bounce your service and use curl to exercise the /echo route: > curl http://localhost:8890/echo {:protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :servlet-response #object[org.eclipse.jetty.server.Response 0x1ea4d091 \"HTTP/1.1 200 \\nDate: Thu, 12 Oct 2023 20:43:21 GMT\\r\\nStrict-Transport-Security: max-age=31536000; includeSubdomains\\r\\nX-Frame-Options: DENY\\r\\nX-Content-Type-Options: nosniff\\r\\nX-XSS-Protection: 1; mode=block\\r\\nX-Download-Options: noopen\\r\\nX-Permitted-Cross-Domain-Policies: none\\r\\nContent-Security-Policy: object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\\r\\nContent-Type: application/edn\\r\\n\\r\\n\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x6593f4fd \"io.pedestal.http.servlet.FnServlet@6593f4fd\"], :headers {\"accept\" \"*/*\", \"user-agent\" \"curl/8.1.2\", \"host\" \"localhost:8890\"}, :server-port 8890, :servlet-request #object[org.eclipse.jetty.server.Request 0x1a57fb49 \"Request(GET //localhost:8890/echo)@1a57fb49\"], :path-info \"/echo\", :url-for #object[clojure.lang.Delay 0xd0b64a9 {:status :pending, :val nil}], :uri \"/echo\", :server-name \"localhost\", :query-string nil, :path-params {}, :body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x28234bf2 \"HttpInputOverHTTP@28234bf2[c=0,q=0,[0]=null,s=STREAM]\"], :scheme :http, :request-method :get, :context-path \"\"}% This should look pretty familiar from the previous guide. When Pedestal starts your service, it sets up some default interceptors for you. That includes an interceptor that does the routing. A router is just a specialized interceptor that looks at parts of the request, decides which interceptors to invoke next, and pushes those onto the interceptor queue. That means any other interceptor can also modify the queue! This is one of the big benefits of using interceptors: the ability to make dynamic decisions during request handling. Pedestal is agnostic as to what servlet container (such as Jetty 9) is used to accept requests and return responses. At the core of Pedestal is the Servlet Interceptor[4], which is the bridge between the Servlet API (the domain of the servlet container) and Pedestal’s interceptors. The servlet interceptor queues up several interceptors ahead of any provided by the service[5], including the ring-response interceptor; part of this interceptor’s job is to determine a default response Content-Type header, if the actual response map omits it - this is deduced from the response map’s :body. Table 1. Content Type Mapping Object in :body Content-Type Byte array application/octet-stream String text/plain Clojure collection application/edn java.io.File application/octet-stream java.io.InputStream application/octet-stream java.nio.channels.ReadableByteChannel application/octet-stream java.nio.ByteBuffer application/octet-stream ring-response also uses the body type to determine how to stream the response to the client; for example, Clojure collections are printed as a string, which is then streamed. A File's contents are read and streamed as a byte stream. ring-response does a reasonable job, but it’s not always right. You might notice that \"text/html\" doesn’t appear anywhere in that list. We can force that by setting a content type header in our response, like this: src/hello.clj (defn ok [body] {:status 200 :body body :headers {\"Content-Type\" \"text/html\"}}) (1) 1 Attach a header declaring the content type. Note that the key, \"Content-Type\", is case sensitive in the response map. Let’s see the result: > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 21:51:05 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world! As expected. But, something about that doesn’t seem quite right. We’re completely ignoring HTTP content negotiation. The client might want JSON instead of HTML. Or it might want plain text. Or EDN. The trouble is that the HTTP content negotiation spec is a royal pain. Fortunately, Pedestal provides an interceptor to help. io.pedestal.http.content-negotiation/negotiate-content does the job. If you look at the docs, though, you’ll see that is not an interceptor, but rather a function that returns an interceptor. This is a common pattern when you need to include some state or customize the behavior of an interceptor. You pass arguments to a function which returns an interceptor that \"closes over\" those arguments. It returns a data structure that contains functions that carry those arguments around with them. Let’s remove the content type header from ok and use this interceptor. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (3) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (def routes (route/expand-routes #{[\"/greet\" :get [content-negotiation-interceptor (4) respond-hello] :route-name :greet] [\"/echo\" :get echo]})) 1 We’ll need this namespace soon to emit JSON responses. 2 This is the content negotiation namespace for Pedestal. 3 A short, picky list of content types we can emit. 4 Notice this route now has a vector of interceptors to invoke. We are using a new namespace here, which will eventually let us write JSON data. That namespace comes from a library that we haven’t included before. So if you try to run this as is, you’ll get an error like this: Execution error (FileNotFoundException) at hello/eval140$loading (hello.clj:2). Could not locate clojure/data/json__init.class, clojure/data/json.clj or clojure/data/json.cljc on classpath. That is how Clojure tells you it is missing a library. By looking at the library’s project page, we see that the latest stable release is \"2.4.0\" (at least, it is when this guide is being written!). We can add the library in the dependencies part of our deps.edn file: deps.edn {:deps {io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} org.clojure/data.json {:mvn/version \"2.4.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"}} :paths [\"src\"]} Any time you change the dependencies, you will definitely need to restart your service. If you try this out, you’ll notice that absolutely nothing changed. That’s because the content negotiation interceptor handles the protocol, but it’s up to you to do something about the result. The interceptor runs the algorithm, then attaches the result to the request. That result is then available throughout the rest of processing. This is a great way to decompose your interceptors into small pieces that can be plugged together. It’s up to our service code to return a different body format depending on the accepted content type. It probably won’t surprise you that this is a job for another interceptor! Here’s our first stab at it. src/hello.clj (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (let [accepted (get-in context [:request :accept :field] \"text/plain\") (1) response 
1(get context :response) body (get response :body) (2) coerced-body (case accepted (3) \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body)) updated-response (assoc response (4) :headers {\"Content-Type\" accepted} :body coerced-body)] (assoc context :response updated-response)))}) (5) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor (6) content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) 1 Get the result of the content negotiation interceptor. Use \"text/plain\" as a fallback in case no suitable match was found. 2 Get the current response out of the context map, get the current body out of the response. This must have been created by a previous interceptor’s enter or leave function. 3 Translate the body according to the chosen content type. 4 Create a new response by attaching headers and the coerced body. 5 Return a new context by attaching the updated response. 6 Tell Pedestal to put this interceptor at the head of the queue. Why does this new interceptor go at the start of the vector? Take look at the picture of the interceptors above. The first one in the vector is called first for the enter function but last for the leave function. We want this interceptor to get the last word on the response body so it goes at the top. Turn the queue sideways to write it as a vector, and the topmost interceptor is on the left. It only takes a little bit to get used to this. Let’s try this out with curl. Restart your service and try sending in some curl requests with different \"Accept\" headers: > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:06:52 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html Transfer-Encoding: chunked Hello, world! Notice the content type returned by our service was \"text/html.\" Let’s try some others. Keep an eye on the \"Content-Type\" header in each response. > curl -i -H \"Accept: text/html\" http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:07:18 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/html Transfer-Encoding: chunked Hello, world! > curl -i -H \"Accept: application/edn\" http://localhost:8890/greet HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 22:08:07 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn Transfer-Encoding: chunked \"Hello, world!\\n\"% Notice when asking for the response in application/edn format, the string result was enclosed in quotes. So coerce-body-interceptor works as intended. As usual, I’ve written it in a fairly \"non-compact\" style so it is easier to see how the parts work with Pedestal. I see a couple of things we can improve though. First, there’s a straight-up bug. If a previous interceptor has already defined a content type, we should respect that and not overwrite the body or the headers. Second, we’re attaching a new headers map with only the \"Content-Type\" header. Any other headers attached by other interceptors will be lost. Finally, we could improve the testability by factoring out some of its logic into pure functions. We’re also going to touch up the echo interceptor while we’re at it. It is common style in Pedestal applications to make heavy use of the core functions like update and update-in. They are good at taking out a part of a nested data structure, applying a function to it, then reattaching the updated part. Let’s see how this interceptor would change if we refactor it that way. src/hello.clj (def echo {:name ::echo :enter #(assoc % :response 
1(ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"application/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (if (get-in context [:response :headers \"Content-Type\"]) context (update-in context [:response] coerce-to (accepted-type context))))}) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) We’re going to take one more step toward Clojure mastery. Do you see the coerce-body function? It looks inside the context. If there’s already a \"Content-Type\" header on the response, then it does nothing and returns the context without modification. On the other hand, if there is no content type assigned yet, it modifies the context by updating the response. This is a really common pattern in functional languages. You want to make a series of changes to a data structure, where each change is conditional on some other logic. In an imperative language, this would look like a series of if statements whose bodies each mutate the object being built. In Clojure, they would look like a deeply nested if special form, where each if returns either a modified or unmodified version of the input. The trouble with deeply nested `if`s is that it’s too easy to get lost in the nesting. This pattern is very common, and Clojure includes macros to help. The slightly tricky cond->footnote:\">That’s read out loud as \"cond arrow\". Once you master it, you’ll really level up in Clojure skills. macro is what we need here. cond-> is similar to the usual threading macro ->, but instead of a just a series of expressions, it precedes each expression with a condition; the condition is evaluated first, and only if true is the value threaded through the expression. In practice, it’s very straight forward: src/hello.clj (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (nil? (get-in context [:response :headers \"Content-Type\"])) (1) (update-in [:response] coerce-to (accepted-type context))))}) (2) 1 This is the test clause. It says \"if there is no Content-Type header\" 2 When the test is true, cond→ puts context in the second position here, right after the update-in If there were more clauses in the cond→, each clause would receive the value returned from the previous clauses. We’re now getting a fair bit of code. This would be a good time to think about splitting into namespaces for different responsibilities. We’ll tackle that some other time. For now, let’s take a look at the whole thing. Spend some time making sure you understand how and when each line of code gets invoked. src/hello.clj (ns hello (:require [clojure.data.json :as json] (1) [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.content-negotiation :as content-negotiation])) (2) (defn ok [body] {:status 200 :body body}) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) (def echo {:name ::echo :enter #(assoc % :response (ok (:request %)))}) (def supported-types [\"text/html\" \"application/edn\" \"application/json\" \"text/plain\"]) (def content-negotiation-interceptor (content-negotiation/negotiate-content supported-types)) (defn accepted-type [context] (get-in context [:request :accept :field] \"text/plain\")) (defn transform-content [body content-type] (case content-type \"text/html\" body \"text/plain\" body \"a
1pplication/edn\" (pr-str body) \"application/json\" (json/write-str body))) (defn coerce-to [response content-type] (-> response (update :body transform-content content-type) (assoc-in [:headers \"Content-Type\"] content-type))) (def routes (route/expand-routes #{[\"/greet\" :get [coerce-body-interceptor content-negotiation-interceptor respond-hello] :route-name :greet] [\"/echo\" :get echo]})) (def coerce-body-interceptor {:name ::coerce-body :leave (fn [context] (cond-> context (nil? (get-in context [:response :headers \"Content-Type\"])) (1) (update-in [:response] coerce-to (accepted-type context))))}) (2) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (defn start-dev [] (reset! server (http/start (http/create-server (assoc service-map ::http/join? false))))) (defn stop-dev [] (http/stop @server)) (defn restart [] ; (stop-dev) (start-dev)) In this guide, we built upon Hello World, With Parameters to add: Rudimentary content negotiation. Response body transforms. We also learned about interceptors and created a few. The truth is that server-side applications don’t vend out HTML nearly as much as they once did. APIs are where it’s at. In the next tutorial we will make a REST style API to serve up \"TO DO\" lists. 1. There’s also an error phase that we’ll not discuss in this guide 2. Actually, interceptors are added to the stack even if they don’t provide a :enter callback 3. That actually takes more words to explain in English than it does in code! 4. This is poorly named as it’s neither a Servlet nor an interceptor! 5. Or provided by create-service, such as the routing interceptor","title":"Hello World, With Content Types","component":"pedestal","version":"0.6","name":"hello-world-content-types","url":"/pedestal/0.6/guides/hello-world-content-types.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"The Hard Way","hash":"_the_hard_way","id":7},{"text":"Interceptors","hash":"_interceptors","id":8},{"text":"An Echo Interceptor","hash":"_an_echo_interceptor","id":9},{"text":"From Routes to Interceptors","hash":"_from_routes_to_interceptors","id":10},{"text":"Returning to Content Types","hash":"_returning_to_content_types","id":11},{"text":"Refactoring and Style","hash":"_refactoring_and_style","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where To Next?","hash":"_where_to_next","id":15}]},"129":{"id":129,"text":"Now that you’ve gone through the basics in the Hello World guide it’s time to go one level deeper. We’re going to add two features. That will be our vehicle to talk about some important concepts in Pedestal. After reading this guide, you will be able to: Accept query parameters. Use the request map. Apply logic in your handler. Conditionally return an error. Return HTML in your response. Like Hello World, this guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. If you like to jump straight in to the deep end, you might be interested in the Pedestal Crash Course which assumes you know quite a bit about Clojure and web frameworks. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we will build on the hello.clj example from the previous guide. We will enhance it to take a single parameter in the URL and return a friendly greeting to that person. There are some people we don’t want to meet, though. So we’ll also include a list of names that should not be said. Then we can make our handler function a bit smarter. If any forbidden name is uttered, our handler will return a 404 response instead of a cordial greeting. If you worked through Hello World, then you already have all the files you need. If not, take a moment to grab the sources from that guide. That will be our starting point for enhancements this time. HTTP offers a few different ways for the client to send data up to our service. The most basic is probably the URL query parameter. We usually see these on GET requests, but nothing stops a client from using them on other request types. Example 1. URL with Query Parameter http://localhost:8890/greet?name=Michael Because query parameters are so common, Pedestal handles them automatically. You can try that URL with your service r
1ight now. As a reminder, we’re running the server by using the clj tool to start an interactive session (called a REPL, rhymes with ripple) then starting the service in that session. Before we do that, though, let’s discuss interactive development. It’s really not optimal to be restarting your REPL in order to restart the service every time you need to make a change. In real Clojure development, we rarely restart the REPL. Instead, we make our system friendly to interactive development. The main problem so far is that starting the HTTP service doesn’t return. We can fix that by adding a key to the map that says \"return instead of waiting for the server to stop.\" src/hello.clj (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (1) (defn start-dev [] (reset! server (2) (http/start (http/create-server (assoc service-map ::http/join? false))))) (3) (defn stop-dev [] (http/stop @server)) (defn restart [] (4) (stop-dev) (start-dev)) 1 defonce here means we can recompile this file in the same REPL without overwriting the value in this atom. 2 reset! replaces the current value in the atom with the new value. 3 Tell Pedestal not to wait for the server to exit. You set ::http/join? to true when running in production so that your main function does not exit and terminate the process. 4 This is a quick way to bounce the server. The key ::http/join? does the trick. We can now run start-dev in our REPL sessions. Instead of waiting forever, the REPL thread now returns, prints the value of the server (an ugly mess!) and lets us continue interacting. This is how we are going to start things in dev from now on. Let’s try it out. First, let’s start the service. $ clj > clj Clojure 1.11.1 user=> (require 'hello) nil user=> (hello/start-dev) [main] INFO org.eclipse.jetty.util.log - Logging initialized @16010ms to org.eclipse.jetty.util.log.Slf4jLog [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@1227013b{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@4ab4f6d7{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @16147ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835 0x4e27c500 \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@4e27c500\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15089 0x6dbd38e8 \"io.pedestal.http.jetty$server$fn__15089@6dbd38e8\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{}], :route-name :greet, :path-params []}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x1a183473 \"io.pedestal.http.servlet.FnServlet@1a183473\"], :server #object[org.eclipse.jetty.server.Server 0x351bfccc \"Server@351bfccc{STARTED}[9.4.52.v20230823]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15091 0x2d7956fb \"io.pedestal.http.jetty$server$fn__15091@2d7956fb\"]} user=> Whatever happened to \"no news is good news?\" Believe it or not, that is all successful output. The big glob at the end is the value of the server. It’s a big map with all the state in it. The most important thing to do with it is hang on to it so we can stop the server later. We do that by putting it in an atom. Now we can use start-dev, stop-dev, and restart as we make changes. From another window, let’s send a request with a query parameter. $ curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 17:45:24 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% What we’ve demonstrated is that Pedestal can route the incoming request, GET /greet?name=Michael and isn’t confused by the presence of the query parameter. Ultimately, the respond-hello function was invoked, and did its job. To update respond-hello to match our goal, we first have to discuss the request argument passed to it. Also, if you look in the console of your REPL, you’ll see that Pedestal logged the request: [qtp81639554-16] INFO io.pedestal.http - {:msg \"GET /greet\", :line 80} You’ll see slightly different results; the qtp part is the thread name, for example. The point is, you can look in the REPL session to verify that requests are being processed by your server. Here’s a reminder of what respond-hello currently looks like: (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) 1 The function takes one argument, which we call request 2 And it returns a map. We aren’t using the request argument right now, so we don’t really know what it is. (Well, it’s probably not too hard to guess that it has to do with the HTTP request that Pedestal received. From the title of this section, you probably also deduced that it’s a map!) Let’s take a look at that request by echoing it back to the client. This is a common debugging trick that you can use. (defn respond-hello [request] {:status 200 :body request}) (1) 1 Instead of returning the string \"Hello, world!\" we return the entire request as the response body. Make sure you’ve update the hello.clj file, then restart your service with that new definition: user=> (require :reload 'hello) nil user=> (hello/restart) [main] INFO org.eclipse.jetty.server.AbstractConnector - Stopped ServerConnector@4ab4f6d7{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Stopped o.e.j.s.ServletContextHandler@1227013b{/,null,STOPPED} [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@699a53d4{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@62832e24{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @667023ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835 0x1adcd53b \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@1adcd53b\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15089 0x4474a287 \"io.pedestal.http.jetty$server$fn__15089@4474a287\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{}], :route-name :greet, :path-params []}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x47c90585 \"io.pedestal.http.servlet.FnServlet@47c90585\"], :server #object[org.eclipse.jetty.server.Server 0x50091386 \"Server@50091386{STARTED}[9.4.52.v20230823]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15091 0x7cf6ea5b \"io.pedestal.http.jetty$server$fn__15091@7cf6ea5b\"]} user=> Again, this is in two steps: (require :reload …​) to update all the Clojure code, then (hello/restart) to stop the service and start a replacement, using the update functions. With the update code live, you can use curl again to see the change in the service’s behavior: > curl -i http://localhost:8890/greet\\?name=Michael HTTP/1.1 200 OK Date: Thu, 12 Oct 2023 17:54:46 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: application/edn Transfer-Encoding: chunked {:protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :params {:name \"Michael\"}, :servlet-response #object[org.eclipse.jetty.server.Response 0x702ce13 \"HTTP/1.1 200 \\nDate: Thu, 12 Oct 2023 17:54:46 GMT\\r\\nStrict-Transport-Security: max-age=31536000; includeSubdomains\\r\\nX-Frame-Options: DENY\\r\\nX-Content-Type-Options: nosniff\\r\\nX-XSS-Protection: 1; mode=block\\r\\nX-Download-Options: noopen\\r\\nX-Permitted-Cross-Domain-Policies: none\\r\\nContent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\\r\\nContent-Type: application/edn\\r\\n\\r\\n\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x47c90585 \"io.pedestal.http.servlet.FnServlet@47c90585\"], :headers {\"accept\" \"*/*\", \"user-agent\" \"curl/8.1.2\", \"host\" \"localhost:8890\"}, :server-port 8890, :servlet-request #object[org.eclipse.jetty.server.Request 0x74cc13e0 \"Request(GET //localhost:8890/greet?name=Michael)@74cc13e0\"], :query-params {:name \"Michael\"}, :path-info \"/greet\", :url-for #object[clojure.lang.Delay 0x340f2def {:status :pending, :val nil}], :uri \"/greet\", :server-name \"localhost\", :query-string \"name=Michael\", :path-params {}, :body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x20486b9d \"HttpInputOverHTTP@20486b9d[c=0,q=0,[0]=null,s=STREAM]\"], :scheme :http, :request-method :get, :context-path \"\"}% Yikes! We need to unpack that a bit to make sense out of it. It’s a Clojure map, just printed all in one long line. I’ll reformat it with some line breaks. Syntax highlighting will help us read it too. Feel free to paste this map into your favorite text editor with Clojure syntax highlighting to pick it apart yourself. I’m also going to omit several keys. They will be relevant later, but they’re not interesting now. And anyway, they don’t print very readably because they’re objects rather than data. Here’s what we are left with. { :protocol \"HTTP/1.1\", :async-supported? true, :remote-addr \"127.0.0.1\", :path-info \"/greet\", :uri \"/greet\", :query-string \"name=Michael\", :query-params {:name \"Michael\"}, :params {:name \"Michael\"}, :headers {\"user-agent\" \"curl/7.47.0\", \"accept\" \"*/*\", \"host\" \"localhost:8890\"}, :server-port 8890, :server-name \"localhost\", :path-params [], :scheme :http, :request-method :get } This is a request map. It really is just a Clojure map. You access its values with get and get-in. For now, we’ll look at three interesting keys. The whole query string appears under the :query-string key. That’s the portion of the URL after, but not including, the '?' character. The query string can be a pain to deal with. It is URL-encoded and may have multiple parameters with delimiters. Pedestal slices that up into a map of parameters for you, which is attached to the :query-params key. Each parameter name gets turned into a keyword. Parameter values are always strings, though, so you may still have to parse them a bit. You see that :params duplicates the same map as :query-params. Pedestal merges all the different kinds of parameters into one map for convenience. Most of the time, I know when I want a query parameter so I just use :query-params, though. Inside our handler function, the :name parameter is available inside a nested map. Let’s dig it out and add it to our response. src/hello.clj (defn respond-hello [request] (let [nm (get-in request [:query-params :name])] (1) {:status 200 :body (str \"Hello, \" nm \"\\n\")})) (2) 1 Extract the parameter, bind it to the name nm. 2 For the response body, concatenate \"Hello,\" and the parameter into a string. Here we can just grab the value right out of the map and use it in the response. You might notice that I’m using nm instead of spelling out name. That’s because I’ve been bitten many times in the past by a subtle issue. There is a clojure.core function called name. If I ever change my mind about what to call the parameter, I might end up using greeter in one place but forget and leave name in another place. In that case, I’d be returning a stringified representation of the clojure.core/name function instead of my parameter value! I’ve done this often enough that I just avoid shadowing core library symbols as a policy. Do the restart/reload dance again, and then use curl to try a few different requests with parameters. $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Pankaj Hello, Pankaj $ curl http://localhost:8890/greet\\?name=Geeta Hello, Geeta $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที Hello, ไอรีนซีพีชาไอที $ curl http://localhost:8890/greet\\?name=No%20One%20To%20Be%20Trifled%20With Hello, No One To Be Trifled With $ curl http://localhost:8890/greet\\?name= Hello, $ curl http://localhost:8890/greet Hello, Dang. We were doing really well right up until the end there. Obviously we need to do something smarter when the input is missing. Bad user input is a way of life on the web, so let’s not make an error out of this. Instead, we just won’t personalize the greeting. src/hello.clj (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (if (empty? nm) (1) \"Hello, world!\\n\" (2) (str \"Hello, \" nm \"\\n\"))] (3) {:status 200 :body resp})) (4) 1 Both nil and a zero-length string count as empty. 2 This is our fallback response. 3 And our personalized greeting. 4 Generating the response. Again, reload and restart, then try new requests with curl: $ curl http://localhost:8890/greet Hello, world! $ curl http://localhost:8890/greet\\?name= Hello, world! $ curl http://localhost:8890/greet\\?name=ไอรีนซีพีชาไอที Hello, ไอรีนซีพีชาไอที Much better! But our handler function is getting a bit unwieldy. I don’t mean that it is a whole six lines long, but rather that it mixes too many concerns. This function parses input
1s, applies \"domain\" logic, and deals with creating a response body. It would be better to refactor this to separate those concerns. src/hello.clj (defn ok [body] (1) {:status 200 :body body}) (defn greeting-for [nm] (2) (if (empty? nm) \"Hello, world!\\n\" (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (3) (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (ok resp))) 1 This function can generate any \"OK\" result. 2 Our logic is now separated. 3 The handler now coordinates the rest. This version separates the concerns nicely. One big benefit is that the greeting-for function is now easier to test. It’s just a pure function - no side effects - that doesn’t require any HTTP or Pedestal machinery to exercise. Likewise, that ok function is side-effect free and quite easy to test. Both functions are likely to get more complex, but each one will only deal with its own complexity. In this example, we’re treating the case of an empty name the same as if the name parameter just isn’t included. See if you can make the handler more strict so it will return a \"400 Bad Request\" response if the name parameter is present but zero length. There are some names that should not be spoken. Let’s enhance our service to avoid them. This will be a relatively simple change. We can hardcode the names as a set, then use that set as a function. (Clojure sets are functions that test for the presence of their argument in the set itself.) This part needs to go before greeting-for because we’ll use it to make a decision in that function. src/hello.clj (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) Now we need to think about our greeting function. Right now it returns a string. We want to make sure the user gets a 404 if the query names one of the forbidden ones. We could have greeting-for directly return the response map, but that starts to entangle the concerns we just factored out. We’ll do the simplest thing that could possibly work: is greeting-for returns nil, that means the request failed. src/hello.clj (defn ok [body] {:status 200 :body body}) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) Because there are now three possible conditions that can happen in respond-hello, I’ve changed from an if to cond expression. cond uses pairs of \"condition / value\" clauses. So if (unmentionables nm) returns any truthy value, then cond returns nil and stops evaluating. If (empty? nm) returns true, then cond returns the literal string \"Hello, world!\\n\" and nothing else. If neither of those happened, then cond sees the keyword :else as a condition[1]and the code continues to build the string the same way as before. A nested if would also have worked here. In fact cond is a macro that expands into a series of nested if expressions. All three of these conditions are kind of parallel in significance, so I like that they appear to be parallel in the structure of the code. The shape of the code mirrors the shape of my thinking about these cases. The second thing you’ll notice is that the handler now makes a decision whether to call our ok helper or the new function not-found. I do hope you weren’t expecting much in not-found! It’s as simple as it gets. Restart your service and give it a try: $ curl http://localhost:8890/greet\\?name=Michael Hello, Michael $ curl http://localhost:8890/greet\\?name=Rumplestiltskin Not found $ curl http://localhost:8890/greet\\?name=曹操 Not found $ curl http://localhost:8890/greet\\?name=voldemort Hello, voldemort $ curl http://localhost:8890/greet\\?name=He%20who%20must%20not%20be%20named Hello, He who must not be named Looks like it mostly works, though it has some trouble with different capitalization. Take a look at the docs for clojure.string and see if you can figure out how to make the comparison case-insensitive. Once again, we built this thing in small steps, so it may seem like there was a lot to deal with. The final product is still pretty small though. Here’s all the final code. src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) (def unmentionables #{\"YHWH\" \"Voldemort\" \"Mxyzptlk\" \"Rumplestiltskin\" \"曹操\"}) (defn ok [body] {:status 200 :body body}
1) (defn not-found [] {:status 404 :body \"Not found\\n\"}) (defn greeting-for [nm] (cond (unmentionables nm) nil (empty? nm) \"Hello, world!\\n\" :else (str \"Hello, \" nm \"\\n\"))) (defn respond-hello [request] (let [nm (get-in request [:query-params :name]) resp (greeting-for nm)] (if resp (ok resp) (not-found)))) (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (1) (defn start-dev [] (reset! server (2) (http/start (http/create-server (assoc service-map ::http/join? false))))) (3) (defn stop-dev [] (http/stop @server)) (defn restart [] (4) (stop-dev) (start-dev)) deps.edn {:deps {io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"}} :paths [\"src\"]} In this guide, we built upon Hello World to add: Query parameters General response functions \"Domain\" logic Conditional responses We also learned about the [reference:request-map], which is central to any non-trivial handler, as well as one approach to dealing with invalid user input in the request. So far, almost all our responses have been plain text. (When we returned the request map in the body, the content type was actually application/edn but we can ignore that for now.) Plain text is ugly, so we want to be able to return HTML. Rich clients don’t like HTML so much, so we also want to return JSON sometimes. The next stop on this trail looks at how Pedestal handles content types and response bodies. This will also be our first taste of interceptors, Pedestal’s core unit of work. 1. Using :else for this purpose is just a common Clojure convention, any non-false/non-nil value would work equally well.","title":"Hello World, With Parameters","component":"pedestal","version":"0.6","name":"hello-world-query-parameters","url":"/pedestal/0.6/guides/hello-world-query-parameters.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Accepting Parameters","hash":"_accepting_parameters","id":7},{"text":"Interactive Development","hash":"_interactive_development","id":8},{"text":"Moving along","hash":"_moving_along","id":9},{"text":"The Request Map","hash":"_the_request_map","id":10},{"text":"Using the Parameter","hash":"_using_the_parameter","id":11},{"text":"Conditional Responses","hash":"_conditional_responses","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where to Next?","hash":"_where_to_next","id":15}]},"130":{"id":130,"text":"We’re glad you’ve decided to give Pedestal a try. We think it’s pretty powerful. Before we get into the heavy lifting though, we should start with some basics. After reading this guide, you will be able to: Create a Pedestal project from scratch. Define a route. Return a page on that route. Return plain text in your response. This guide is for beginners who are new to Pedestal. It doesn’t assume that you have any prior experience with Pedestal, Clojure, or any other Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. If you’ve already done some of those other things, you might want to skip ahead to Your First API to start building some logic and multiple routes. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We will be using the Clojure CLI tools to manage dependencies and download libraries. Refer to the Clojure Getting Started page for installation instructions and details. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. This guide shows fragments of code as we add them. Sometimes it helps to see the whole thing at once, so you can always check out The Whole Shebang at the end of this guide. In this guide, we’re going to take a series of small steps. We’ll see all the code to build a Pedestal service starting with an empty directory. The first time through, we will just do everything \"by hand\". This is a little more work in typing (or copy-and-pasting) but it will let you see how the pieces connect in the simplest possible use case. Pedestal services are written in Clojure code, which you then run on a Java Virtual Machine. You will need to have a Java Runtime Environment installed on your computer. Let’s make sure you’re up to date. Fire up a terminal and put in this command: $ java -version You should see some output something like this: > java -version openjdk version \"11.0.19\" 2023-04-18 LTS OpenJDK Runtime Environment Corretto-11.0.19.7.1 (build 11.0.19+7-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.19.7.1 (build 11.0.19+7-LTS, mixed mode) If you get an error, such as \"Command not found\" or some variation of that, you probably need to install Java. The second thing is to make sure that the Java version is at least 1.7. OK, so now that you are ready to run a Java applications, let’s move on to the Pedestal part. We’re going to start this project with an empty directory. In practice, most of the time you’ll generate a project from a template. But for now, it’s more important to see what the pieces are and how they fit together. I’m going to call my project 'hello-world'. Feel free to call yours something different, but it’s up to you to do the mental translation in the rest of this guide. $ mkdir hello-world $ c
1d hello-world A quick note on naming style. Clojure itself uses \"kebab case\" for its names. That’s lowercase words, separated with hyphens. When you have a long name, it looks like the letters have been skewered. Hence, kebab case. Since Clojure’s own libraries use this style, most applications and libraries do too. We need a place to keep our code. By convention, that’s in a src directory: $ mkdir src Now we’re going to create a file under \"src\" to hold our code. Call it \"src/hello.clj\". It’s going to start with a \"namespace declaration\". This tell Clojure what namespace to put the code into. (If you’re a Java programmer, you can think of a namespace as similar to a package name.) src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) 1 This namespace is called 'hello'. This almost always matches the filename. 2 We need to use the io.pedestal.http namespace, but would like to only type http later in the file. 3 We need to use the io.pedestal.http.route namespace, but would like to spell it as route later in the file. This is very similar to using import in Java or require in Ruby. It just makes some names from other namespaces available to us in this namespace. If you haven’t written any Clojure before, this syntax might look a little strange. The first thing that jumps out at people is the parentheses. Why is there an open paren before the \"ns\"? In Clojure, every expression is enclosed in its very own set of parentheses. There are no semicolons to end the line or curly braces to close an \"if\" expression. To find the end of any expression, you just find the matching paren. The first thing in an expression is the function or a macro to call. In this case ns is a macro that is built in to Clojure. It sets up a namespace and makes the stuff we :require available. Speaking of the stuff we require, what is io.pedestal.http and io.pedestal.http.route? Those are each namespaces from Pedestal libraries. The io.pedestal.http namespace has functions that let you set up HTTP servers, handle requests, and send responses. The io.pedestal.http.route namespace actually comes from a library dedicated to routing (ingeniously named pedestal.route.) Where the :require says :as something it means we’re making an alias inside our namespace. So io.pedestal.http will be available as just http and io.pedestal.http.route will be available as route. Aliases don’t change anything about the semantics of the namespace we’re bringing in. They just save us some typing. Routing is split off into its own library because you can use it by itself, or you can use the HTTP library with a different routing layer. We won’t need to do that in this guide, but other tutorials do some pretty amazing things by substituting modules. Also, don’t worry about the indentation. Your editor might handle that for you, but in any case, Clojure doesn’t care about whitespace. Whew. That was a lot to unpack from just the first three lines of code! Let’s pause for a moment to talk about the next steps. We’re making a web service that can say hello. That means we need to do some basic things: Listen to on a socket for HTTP requests. Figure out what any given request means. Make a response to that request. We’re going to do all of those things, but we’re going to do them backwards. In Clojure, you always find the most important, highest-level functions at the bottom of the file. Whenever I read a Clojure source file, I start at the bottom and page upward. So the next thing we’re going to do is write a function that can return a response to a \"hello world\" request. src/hello.clj (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) 1 Define a function called respond-hello that takes a single argument, which we will call request 2 Return a map with two keys and two values. A Clojure function returns the value of the last expression in the function. In this case, that will be the map that we construct on line 2. This is in \"map literal\" syntax, which just means that we’re writing the whole map straight in the source code rather than building it up by calling functions. The map has two keys and their values: :status 200 :body \"Hello, world!\" That’s the whole thing. When our function returns that map, Pedestal will translate that into a full HTTP response complete with content type header and everything. Later on, we’ll see how to take control of the whole response. For now we’re just taking the easy road. There’s absolutely nothing special about this map. It’s a plain old Clojure map - this is how Clojure operates, we don’t use classes, we use ordinary maps but care about what particular keys are in the map. This is a response map. Clojure is a functional language, which means that whenever possible, we create simple functions that have no side-effects: their behavior is defined only by the arguments passed in. This trivial respond-hello handler function is functional — it can be tested entirely by invoking it, passing in a request map, and making assertions about at the response map it returns. There’s no need to start up a server and send a request to it via HTTP, you can just have your tests call this code directly. That’s one of the beauties of working in Clojure and Pedestal…​ you can try everything interactively in a running system. Let’s do that before we move on. Pedestal is built on the shoulders of giants, in the form of great open source technology that many people have contributed to. That gives us great power, but with great power comes great dependencies. We could download all the jar files we need and string together a classpath, but it’s a huge pain. I just made a minimal project and found 57 entries on the classpath. This is why we can have nice things, but it means we need some help managing those dependencies. Fortunately, Clojure provides tooling for dependency management. We’ll be using the clj tool to run our examples. Please take a few minutes to learn more, then come back and we’ll continue. Now we can make a deps.edn that tells the clj tool what libraries our service needs. This goes in the main directory hello: deps.edn {:deps (1) {io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"}} :paths [\"src\"]} (2) 1 Tell clj we need pedestal.jetty and a logging library. 2 Tell clj where our source code lives. We talked about pede
1stal.service and pedestal.route before, but we have a new one here. Pedestal works with many different HTTP servers, so we don’t want the core library to depend on all of the possible servers out there. Instead, we let you decide which one to use by adding the library for your chosen service. We’re using Jetty for this guide. It is a fast, stable, and mature HTTP server. Best of all, it doesn’t require any installation ahead of time…​ we can start it up from inside our service. That makes our service more self-contained and portable. Let’s try out our response function. > clj Downloading: io/pedestal/pedestal.jetty/0.6.1/pedestal.jetty-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.service/0.6.1/pedestal.service-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.log/0.6.1/pedestal.log-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.route/0.6.1/pedestal.route-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.interceptor/0.6.1/pedestal.interceptor-0.6.1.pom from clojars Downloading: io/pedestal/pedestal.interceptor/0.6.1/pedestal.interceptor-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.log/0.6.1/pedestal.log-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.jetty/0.6.1/pedestal.jetty-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.service/0.6.1/pedestal.service-0.6.1.jar from clojars Downloading: io/pedestal/pedestal.route/0.6.1/pedestal.route-0.6.1.jar from clojars Clojure 1.11.1 user=> The downloads only occur the first time you run the service; you can also see that the pedestal.jetty library brings in further dependencies on the other parts of Pedestal: pedestal.log, pedestal.service, etc. The clj tool will download dependencies as needed, add them to the classpath and start a repl in the user namespace. Now we’re able to enter Clojure code to evaluate it (turn it into a value). The first thing we need to do is tell Clojure about our hello namespace: user=> (require 'hello) nil user=> The require function returns nil on success, which the Clojure REPL printed. If instead, you get a message like this: user=> (require hello) Syntax error compiling at (REPL:1:1). Unable to resolve symbol: hello in this context It means you missed the single-quote before \"hello\" in the require. Now we can actually test the function: user=> (hello/respond-hello {}) {:status 200, :body \"Hello, world!\"} Well, we got the singularly unexciting result that we can call a function and it returns the map that we told it to. Let’s move on to hooking this up to a route. It’s worth noting that we passed in an empty map ({}) rather than a full request map. This is perfectly acceptable for testing; in fact we could have even passed a nil, as the respond-hello function doesn’t actually use the request parameter. In Pedestal, routing is the process of matching an incoming request to a handler [1]. Let’s tell Pedestal that we want the route GET /greet to map to our handler function: src/hello.clj (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) 1 We specify routes in a short notation, but they must be expanded and turned into a Router for use. 2 This is the \"table syntax\". There are several formats that can be passed to expand-routes. This routing table is a single route; the route matches: The GET HTTP method The URL /greet When routed in a live service, the respond-hello function will be invoked. We’ve named this route :greet. Every route must have a unique name, though in many cases, Pedestal can automatically provide a reasonable name. We’re building up gradually, and have yet to hook this up to an HTTP server, but it’s still possible to test the routing by hand (using code that c
1ould eventually be used in a test suite). user=> (require :reload 'hello) nil user=> (require '[io.pedestal.http.route :as route]) nil user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :get) {:path \"/greet\", :method :get, :path-re #\"/\\Qgreet\\E\", :path-parts [\"greet\"], :interceptors [#Interceptor{:name }], :route-name :greet, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[clojure.core$constantly$fn__6443 0x6182d451 \"clojure.core$constantly$fn__6443@6182d451\"]} user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :post) nil user=> (route/try-routing-for hello/routes :prefix-tree \"/greet\" :put) nil The first thing we need to do is tell Clojure to reload the latest code from hello.clj. That’s what the :reload keyword does in the require call. Without that, you’ll get a \"cannot resolve symbol\" error when you try to reference hello/routes. The function try-routing-for lets us ask \"What would Pedestal do?\" with an incoming HTTP request. We gave it our table of one route, a magic keyword :prefix-tree, then the query string and HTTP verb. try-routing-for uses the example routing table, from hello/routes, and the router type, :prefix-tree, to create a temporary router; it then passes the provided method (:get) and path, /greet, so see how it would be routed; if the route matches, a routing entry is returned, which identifies what was matched, and would be used in a live Pedestal application. When no route in the table matches, try-routing-for will return nil. The REPL sessions shows that a GET to /greet will be match, but a PUT or POST will not. On a match, try-routing-for returns an expanded version of the route that was matched (this is the internal format, which is much more cumbersome than the table format we used to define the route); further, some specific details about what was matched was also included. You might ask, \"where is my respond-hello function in all that?\" …​ part of what expand-routes does is to convert your handler function into Pedestal’s native unit of work, an interceptor. We’re ready for that last step: connecting everything to an HTTP server. That’s one more function (at the end of the file) to create the server. src/hello.clj (defn create-server [] (http/create-server (1) {::http/routes routes (2) ::http/type :jetty (3) ::http/port 8890})) (4) (defn start [] (http/start (create-server))) (5) 1 io.pedestal.http/create-server is a convenience function that builds everything in one step. 2 This is where we tell Pedestal which routes to use for this service. 3 We tell Pedestal that we want to use Jetty as our HTTP responder. 4 Port 8080 is so boring. We’ll use something different, but not too different. 5 Start the server. This will not return. All we need to do now is run it. user=> (require :reload 'hello) nil user=> (hello/start) Yep, it didn’t return. Jetty is running and listening for connections, though. Flip to a different window and try curl or use a browser to hit http://127.0.0.1:8890/greet. $ curl -i http://127.0.0.1:8890/greet HTTP/1.1 200 OK Date: Fri, 20 Sep 2019 15:33:53 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world! It’s alive! Treat yourself to a hot beverage and a high five. Whenever you get tired of poking it, just hit Control-C in the terminal that is running the server to kill it. Later on, we’ll see how to make Jetty run on its own thread so you can get your REPL prompt back. This might seem complicated because I’ve used so many words to describe all this. The code is pretty short though. For reference, and in case you’ve hit any snags along the way, here are the complete contents of both files. src/hello.clj (ns hello (1) (:require [io.pedestal.http :as http] (2) [io.pedestal.http.route :as route])) (3) (defn respond-hello [request] (1) {:status 200 :body \"Hello, world!\"}) (2) (def routes (route/expand-routes (1) #{[\"/greet\" :get respond-hello :route-name :greet]})) (2) (defn create-server [] (http/create-server (1) {::http/routes routes (2) ::http/type :jetty (3) ::http/port 8890})) (4) (defn start [] (http/start (create-server))) (5) deps.edn {:deps (1) {io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"}} :paths [\"src\"]} (2) You can also see all the code in the GitHub repository for this guide. We’ve c
1overed a lot of ground in this guide. You have learned how to: Start a Pedestal project from scratch. Write a function to return a response. Define routes for Pedestal. Run a Jetty server that handles those routes. Along the way you’ve also learned a bit of Clojure and some debugging tricks. The next part in this tutorial adds the ability to receive a query parameter, apply logic to it, and return a different response for an error. 1. We’re simplifying here, we’ll get around to discussing interceptors soon","title":"Hello World","component":"pedestal","version":"0.6","name":"hello-world","url":"/pedestal/0.6/guides/hello-world.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help If You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Starting From Scratch","hash":"_starting_from_scratch","id":7},{"text":"A Place to Put Things","hash":"_a_place_to_put_things","id":8},{"text":"Generating a Response","hash":"_generating_a_response","id":9},{"text":"Managing Dependencies","hash":"_managing_dependencies","id":10},{"text":"Routes","hash":"_routes","id":11},{"text":"Hooking It All Up","hash":"_hooking_it_all_up","id":12},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":13},{"text":"The Path So Far","hash":"_the_path_so_far","id":14},{"text":"Where to Next?","hash":"_where_to_next","id":15}]},"131":{"id":131,"text":"As Clojure developers, we prefer to live at the REPL, loading and reloading code into the REPL for a lightning fast feedback loop. It’s common to reload a namespace, and use the REPL (possibly via IDE support) to re-evaluate expressions in our code and see the immediate change. This is true for Pedestal apps as well …​ we should be able to make changes and see the effects of those changes immediately. But as we’ll see, in practice, accomplishing that takes a little extra structure. We’re going to show examples of the live reloading failures, then show simple solutions. Let’s start with yet another basic, \"Hello World\" application. (ns org.example.hello (:require [io.pedestal.http :as http])) (defn hello-handler [_request] (1) {:status 200 :body \"Hello, World!\"}) (def routes #{[\"/hello\" :get hello-handler :route-name ::hello]}) (2) (defn start [] (-> {::http/port 9999 ::http/routes routes ::http/type :jetty ::http/join? false} (3) http/create-server http/start)) (defonce server (atom nil)) (4) 1 The request map isn’t used here, so we follow the convention of adding a leading underscore; this may also prevent warnings in your IDE. 2 Every route must have a unique :route-name and since we are providing a function, hello-handler, it must be explicitly specified. 3 Normally, the call to io.pedestal.http/start doesn’t return (until something else shuts down the server); adding ::http/join? false is necessary for REPL-oriented development. 4 To survive reloading of this namespace, the running server is stored in an Atom. With that in place, evaluate (reset! server (start)); this will create the server and start it, storing the running system map back into the server atom. You can now use your favorite HTTP client (such as HTTPIe) to access the /hello route: > http :9999/hello HTTP/1.1 200 OK Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Date: Fri, 18 Nov 2022 23:41:49 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains Transfer-Encoding: chunked X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: DENY X-Permitted-Cross-Domain-Policies: none X-XSS-Protection: 1; mode=block Hello, World! So far, so good. You can also see that Pedestal’s default set of interceptors has added a number of security-related headers to the response. Now we’re ready to make a change. Let’s change the response body to be Hello, Clojure World!. We can change the hello-handler function, reload the namespace, and: > http -pb :9999/hello (1) Hello, World! 1 The -pb option prints just the response body, omitting the response headers. That’s strange. It’s as if the code change wasn’t picked up. We can verify that the code change is, in fact, live by evaluating (hello-handler nil) at the REPL: (hello-handler nil) => {:status 200, :body \"Hello, Clojure World!\"} What’s happened here is that the value of the org.example.hello/hello-handler Var has changed; it now holds a new Clojure function, one that says \"Hello, Clojure World!\". However, the routes and start functions captured the value of hello-handler at the time they executed. We could say ugh, fine and just adapt to a cycle where you reload your REPL code and then restart the server object, but that’s slow and error-prone. We want a fast feedback cycle where that is not necessary, and that goal is entirely achievable. The first step is to stop the service by evaluating (swap! server http/stop). Next, change the routes function: (def routes #{[\"/hello\" :get `hello-handler]}) Notice that backtick character before hello-handler. That’s Clojure’s syntax quote; like a single quote, it keeps hello-handler from being evaluated, but unlike single quote, the symbol is namespace qualified. It’s the equivalent of 'org.example.hello/hello-handler. To understand what’s going on here, we must consider a key stage in Pedestal: route expansion. Route expansion is a step during service startup where the provided routes are converted from one of a number of specifications (such as the table format used here) into an executable format. Part of expansion is a rule that says that a handler that’s a symbol is replaced with the evaluation of that symbol. That’s when org.example.hello/hello-handler is converted from a symbol to function. Notice that we also no longer have to specify a :route-name; with a handler symbol, a default route name is generated that’s a keyword ver
1sion of the symbol. Now, change the function to return \"Hello, Programming World!\", reload the namespace, and get the /hello URL again: > http -pb :9999/hello Hello, Clojure World! What gives? Where’s our reloading? Because of the back-ticked symbol, the evaluation of hello-handler occurred later than in the original code, not inside the routes definition, but somewhere inside the call to create-server …​ but that evaluation and expansion still only happens once, and so there’s still a capture. We need the route to always reflect the live version of the hello-handler function, and that means we have to avoid capture, not just of the hello-handler function, but of the entire route specification. Fortunately, Pedestal supports this use case - a route is normally a data structure, but it can also be a zero-arguments function that returns an expanded route. Stop the service and make these changes: (ns org.example.hello (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route])) (1) (defn hello-handler [_request] {:status 200 :body \"Hello, Clojure World!\"}) (2) (def routes #{[\"/hello\" :get `hello-handler]}) (defn start [] (-> {::http/port 9999 ::http/routes #(route/expand-routes routes) (3) ::http/type :jetty ::http/join? false} http/create-server http/start)) 1 We need this additional namespace, route. 2 Change the message back. 3 This new route function returns the expanded routes. Reload and restart the server, and check that we are getting the original behavior: > http -pb :9999/hello Hello, Clojure World! Now, change the message to Hello, JVM World!, reload the namespace, then reload the URL: > http -pb :9999/hello Hello, JVM World! Success! The route function is being evaluated on every incoming request. Not For Production Using a function, as we do here, is absolutely not for production. Even a trivial route takes a chunk of time to expand, so doing it on every single request will absolutely trash your production server’s throughput. Still, we’re not quite done. Let’s say we want to be less formal, and respond on the path /hi instead of /hello. We can change the routes: (def routes #{[\"/hi\" :get `hello-handler]}) But this doesn’t yet work: > http :9999/hi HTTP/1.1 404 Not Found Content-Type: text/plain Date: Sat, 19 Nov 2022 00:28:29 GMT Transfer-Encoding: chunked Not Found There’s still one more capture: the anonymous function is capturing the value of the routes set. The anonymous function has a lifecycle that starts when the start function is executed, and the routes set’s value is captured at that point in time. In order for route changes to load, we have to ensure that the anonymous route function always returns the current value of routes. Change the route back to /hello and modify the start function: (defn start [] (-> {::http/port 9999 ::http/routes #(route/expand-routes (deref (var routes))) ::http/type :jetty ::http/join? false} http/create-server http/start)) Stop and restart the server, and verify that /hello still works. Now, update the route back to /hi, reload the namespace, and check: > http -pb :9999/hi Hello, JVM World! Done! You can now add, remove, or otherwise change your routes, update interceptors, add constraints …​ wherever your development takes you, and those changes will be re-evaluated and re-loaded on each request. How does this work? The (var routes) captures the Var named routes (rather than the value stored inside the Var), and the deref pulls the current route specification out of the Var, This happens on every invocation of the function - on every request. If you like, you can abbreviate (deref (var routes)) to @#'routes. Running code with a long-lived and stateful service creates its own challenges when coding live at the REPL; in this guide we’ve explained how capturing interferes with live reloading, and provided the necessary steps to keep your REPL flowing as you develop your application. Just remember …​ you want to make sure your production application doesn’t use these reloading techniques if you want to meet your SLAs (service level agreements)!","title":"Reloading at the REPL","component":"pede
1stal","version":"0.6","name":"live-repl","url":"/pedestal/0.6/guides/live-repl.html","titles":[{"text":"Starting Point","hash":"_starting_point","id":1},{"text":"Deferred Route Function","hash":"_deferred_route_function","id":2},{"text":"Delaying Route Evaluation","hash":"_delaying_route_evaluation","id":3},{"text":"Wrap Up","hash":"_wrap_up","id":4}]},"132":{"id":132,"text":"Component is a popular and non-intrusive library for organizing Clojure logic; it makes it easy to define components, as maps or Clojure records, and organize them, with intra-component dependencies, into a system map. It’s not uncommon for Pedestal to be setup to operate as a component with a Component system. After reading this guide you will be able to: Create a Component-based service using Pedestal. Test your service using Pedestal’s test helpers. This guide is for users who are familiar with: Clojure Pedestal Clojure’s CLI tooling Component If you are new to Pedestal, you may want to go back to the Hello World guide. If you’re new to Component, you should definitely check it out first. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. In this guide, we’re going to step through creating a Pedestal service using Component. We’ll start off by creating a Pedestal component and wire it into a Component system map. We’ll then proceed to testing our service. We’ll limit our component’s responsibilities to lifecycle management of the Pedestal HTTP server and provider. We’ll also expose the Pedestal service function (:io.pedestal.http/service-fn) upon component initialization as a convenience for testing. Route or interceptor management will not be a component responsibility because the management of routes/interceptors is more of an application-specific concern. This may be familiar to you if you studied the way the Pedestal lein template lays out a Pedestal service - routes, interceptors and configuration is kept separate from service plumbing. Finally, Pedestal service configuration, captured via a service map, will be a component dependency. Now that we have a better idea of what we want our component to do, let’s go build it! The first step is to create a project directory to contain the project sources, then create a deps.edn file, to capture the dependencies of our application. deps.edn {:deps { io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} com.stuartsierra/component {:mvn/version \"1.1.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"} com.stuartsierra/component.repl {:mvn/version \"0.2.0\"}} :paths [\"src\"]} Next, create a src directory, and a pedestal.clj file within it: src/pedestal.clj (ns pedestal (1) (:require [com.stuartsierra.component :as component] (2) [io.pedestal.http :as http])) (3) 1 Create a pedestal namespace to house the Pedestal component. 2 We need to require com.stuartsierra.component namespace to make the start and stop Lifecycle methods available. 3 We need to require the io.pedestal.http namespace for server creation, starting and stopping. Let’s start implementing the component: (defrecord Pedestal [service-map (1) service] component/Lifecycle (2) 1 Create a Pedestal record. This record will contain a service-map field, whose value will be supplied from another component, and a server field, managed by the Pedestal component, which is the server created from the service map. 2 Include the component/Lifecycle protocol since we’ll be implementing its methods next. We’ll first implement the start method. It will contain our component initialization code. (start [this] (if service (1) this (assoc this :service (2) (cond-> (http/create-server service-map) (3) (not (test? service-map)) http/start)))) (4) 1 If the service is already running (because you mistakenly invoked component/start-system on an already started system), let it keep running[1]. 2 Update the service field of the Pedestal component with the newly created, and optionally started, service. 3 create-server returns a server map, which can be started via start. 4 In test mode, don’t start the server (the HTTP part), but we’ll still be able to feed requests into the interceptor pipeline. If you’ve read some of the other guides, this implementation should look somewhat familiar. It’s a combination of the server-specific code used in the Hello World guide. Before we go on, remember the test? function? It’s idiomatic in Pedestal services to include an :env key in the service map to communicate the environment of the service. This currently does not affect the behavior of the service, but it’s a useful marker. Our component will leverage this idiom and will not start/stop the server if the service is configured for the test environment. The implementation is included below. (defn test? [service-map] (= :test (:env service-map))) Now let’s implement the stop method. It will contain our component teardown code. (stop [this] (when (and service (not (test? service-map))) (1) (http/stop service)) (assoc this :service nil))) (2) 1 Like start, stop will be idempotent. If the component has been initialized and we’re not working with the test environment, we’ll pass the initialized service map to the stop function. 2 Return the component with the service field set to nil. You can’t use dissoc here since it would return a plain map, breaking the component by convert
1ing it from a Pedestal record to a plain Clojure map. Now that we’ve got our component, we need a way to create and initialize an instance of it. Let’s tackle that next: (defn new-pedestal [] (map->Pedestal {})) Our component constructor is just a wrapper around the map-specific record constructor created by defrecord. The defrecord macro creates a number of constructors and any of them could be used here. It’s common to create a simple wrapper function, as shown here; quite often, components grow to need additional setup and initialization which can occur in this kind of creation function. Now that we’ve got our Pedestal component, let’s proceed to wiring it into a full-fledged system. Create a routes.clj file. This file will contain our routes and handlers. src/routes.clj (ns routes) (defn respond-hello [request] {:status 200 :body \"Hello, world!\"}) The respond-hello handler returns a simple static response. It may look familiar since it made its first appearance in the Hello World guide. Finally, let’s implement the routes. (def routes #{[\"/greet\" :get respond-hello :route-name :greet]}) We’ll implement a single route, GET /greet, using Pedestal’s tabular routing syntax. In this simple example, we use def, as the routes are entirely static. In many applications, some parts of the routes would be more dynamic, and routes would be a function with arguments. Now that we’ve got our Pedestal Component and routes, we can wire them up in a Component system map. Create a system.clj file. This file will contain our system map and system constructor. src/system.clj (ns system (:require [com.stuartsierra.component :as component] (1) [com.stuartsierra.component.repl :refer [reset set-init start stop system]] (2) [io.pedestal.http :as http] (3) [pedestal] (4) [routes])) (5) 1 Require com.stuartsierra.component. It will be used to create the Component system map. 2 Require component.repl for its system management functions. You would normally do this in a dev namespace. 3 Require io.pedestal.http for the server start and stop functions. 4 Require pedestal for the Pedestal component. 5 Require routes for the application routes. Let’s create a system initialization function named system. (defn new-system [env] (1) (component/system-map :service-map (2) {:env env (3) ::http/routes routes/routes (4) ::http/type :jetty ::http/port 8890 ::http/join? false} :pedestal (5) (component/using (6) (pedestal/new-pedestal) [:service-map]))) 1 It will take the system environment as a single parameter. We’ll use keywords like :prod or :test for this. 2 The system map will contain a :service-map key whose value is a Pedestal service map. This is still a component, even though it is purely data. 3 The service map’s :env key will map to our environment keyword. 4 We’ll configure the service map with our app-specific routes. 5 The system map will contain a :pedestal key whose value is an uninitialized Pedestal component. 6 The Pedestal component depends on the service map, so we will capture that dependency with component/using. The next step sets up the use of the component.repl library. (set-init (fn [old-system] (new-system :prod))) The set-init function stores a function that is used to start (or restart) the system. When start or reset is invoked, this function is passed the old system (or nil if there is no old system), and the function returns the new, but unstarted, system. We’ll use clj tool to run our example. This should be familiar to you if you read through the Hello World guide. From the project’s root directory, fire up a repl, and start the system. > clj Clojure 1.11.1 user=> (require 'system) nil user=> (require '[com.stuartsierra.component.repl :as crepl]) nil user=> (crepl/start) [main] INFO org.eclipse.jetty.util.log - Logging initialized @43694ms to org.eclipse.jetty.util.log.Slf4jLog [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@b1078f2{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@70ab102c{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @43830ms :ok user=> You can now interact with the started service. > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Tue, 17 Oct 2023 22:22:25 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none C
1ontent-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% > Let’s stop the system. user=> (crepl/stop) [main] INFO org.eclipse.jetty.server.AbstractConnector - Stopped ServerConnector@49b7eb3{HTTP/1.1,[http/1.1, h2c]}{localhost:8890} [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Stopped o.e.j.s.ServletContextHandler@17c4dcc6{/,null,UNAVAILABLE} :ok Our service is no longer available. $ curl -i http://localhost:8890/greet curl: (7) Failed to connect to localhost port 8890: Connection refused Let’s start it again! user=> (crepl/start) [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@185d151b{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@5dce3e{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @150674ms :ok user=> It’s available again. > curl -i http://localhost:8890/greet HTTP/1.1 200 OK Date: Tue, 17 Oct 2023 22:23:22 GMT Strict-Transport-Security: max-age=31536000; includeSubdomains X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; Content-Type: text/plain Transfer-Encoding: chunked Hello, world!% > The Component design pattern ensures that the system is in the correct state no matter how many times we do this. Let’s move on to testing our new service. Recall that our service contains one route, GET /greet. We’d like to verify that it returns the proper greeting. Before we can jump in and do that, though, we need to create some helpers. Some are just useful in general, while others are specific to our component implementation. Don’t worry, you won’t have to write too much code. Let’s do it! First create a system_test.clj file in the src directory. src/system_test.clj (ns system-test (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :refer [response-for]] [com.stuartsierra.component :as component] [clojure.test :refer :all] [routes] [system] [pedestal])) The system-test namespace requires all the dependencies necessary for testing. Now let’s get to those helpers. The url-for helper allows us to refer to routes by route-name. This is very useful, and is almost always adapted into new projects. (def url-for (route/url-for-routes (route/expand-routes routes/routes))) We need to expand the routes before invoking Pedestal’s url-for-routes function. The end result is that url-for is a function The service-fn helper extracts the Pedestal ::http/service-fn from the started system. This helper allows us to keep focus on our tests rather than test initialization. (defn service-fn [system] (get-in system [:pedestal :service ::http/service-fn])) The with-system macro allows us to start/stop systems between test executions. We’ll model its design on macros like with-open and with-redefs so that its shape and usage is familiar. (defmacro with-system [[bound-var binding-expr] & body] `(let [~bound-var (component/start ~binding-expr)] (try ~@body (finally (component/stop ~bound-var))))) Now that we’ve got our helpers implemented, let’s move on to our test. Create a test named greeting-test. (deftest greeting-test (with-system [sut (system/new-system :test)] (1) (let [service (service-fn sut) (2) {:keys [status body]} (response-for service :get (url-for :greet))] (3) (is (= 200 status)) (4) (is (= \"Hello, world!\" body))))) (5) 1 sut (for system under test) will be bound to the started system by with-system. Notice how :test is passed as the system environment key;
1 this ensures that the server does not start, and no HTTP port is bound. 2 Use the service-fn helper to extract the Pedestal service function from the started system. 3 Use Pedestal’s response-for test helper to make a test request to the :greet route. Use the url-for helper to refer to the route by name. 4 We should get back a '200' status. 5 We should get back a response body of 'Hello, world!' Now let’s restart the repl and run our tests. user=> (require 'system-test) nil user=> (clojure.test/run-tests 'system-test) Testing system-test [main] INFO io.pedestal.http - {:msg \"GET /greet\", :line 80} Ran 1 tests containing 2 assertions. 0 failures, 0 errors. {:test 1, :pass 2, :fail 0, :error 0, :type :summary} user=> That’s it! You now know the fundamentals necessary for implementing and testing your Component-based Pedestal services. For reference, here are the complete contents of all the files. src/pedestal.clj (ns pedestal ;; <1> (:require [com.stuartsierra.component :as component] ;; <2> [io.pedestal.http :as http])) ;; <3> (defn test? [service-map] (= :test (:env service-map))) (defrecord Pedestal [service-map ;; <1> service] component/Lifecycle ;; <2> (start [this] (if service ;; <1> this (assoc this :service ;; <2> (cond-> (http/create-server service-map) ;; <3> (not (test? service-map)) http/start)))) ;; <4> (stop [this] (when (and service (not (test? service-map))) ;; <1> (http/stop service)) (assoc this :service nil))) ;; <2> (defn new-pedestal [] (map->Pedestal {})) src/routes.clj (ns routes) (defn respond-hello [request] {:status 200 :body \"Hello, world!\"}) (def routes #{[\"/greet\" :get respond-hello :route-name :greet]}) src/system.clj (ns system (:require [com.stuartsierra.component :as component] ;; <1> [com.stuartsierra.component.repl :refer [reset set-init start stop system]] ;; <2> [io.pedestal.http :as http] ;; <3> [pedestal] ;; <4> [routes])) ;; <5> (defn new-system [env] ;; <1> (component/system-map :service-map ;; <2> {:env env ;; <3> ::http/routes routes/routes ;; <4> ::http/type :jetty ::http/port 8890 ::http/join? false} :pedestal ;; <5> (component/using ;; <6> (pedestal/new-pedestal) [:service-map]))) (set-init (fn [old-system] (new-system :prod))) src/system_test.clj (ns system-test (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :refer [response-for]] [com.stuartsierra.component :as component] [clojure.test :refer :all] [routes] [system] [pedestal])) (def url-for (route/url-for-routes (route/expand-routes routes/routes))) (defn service-fn [system] (get-in system [:pedestal :service ::http/service-fn])) (defmacro with-system [[bound-var binding-expr] & body] `(let [~bound-var (component/start ~binding-expr)] (try ~@body (finally (component/stop ~bound-var))))) (deftest greeting-test (with-system [sut (system/new-system :test)] ;; <1> (let [service (service-fn sut) ;; <2> {:keys [status body]} (response-for service :get (url-for :greet))] ;; <3> (is (= 200 status)) ;; <4> (is (= \"Hello, world!\" body))))) ;; <5> deps.edn {:deps { io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} com.stuartsierra/component {:mvn/version \"1.1.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"} com.stuartsierra/component.repl {:mvn/version \"0.2.0\"}} :paths [\"src\"]} At the beginning of this guide, we set out to create a Pedestal component, demonstrate its usage as well as how to test it without starting the http server. In the process, we also introduced a few general purpose test helpers. Keep in mind that Pedestal services are highly configurable. It’s important to separate that configuration from the core component implementation. By limiting our component’s responsibilities to http server and Pedestal provider life cycle support, we can use it in a wide variety of Pedestal implementations. 1. This is useful for REPL-driven development, where mistakes happen. Without it, you may end up with a \"zombie\" Pedestal component and Jetty service keeping the port bound.","title":"Using Pedestal With Component","component":"pedestal","version":"0.6","name":"pede
1stal-with-component","url":"/pedestal/0.6/guides/pedestal-with-component.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":2},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":3},{"text":"Where We Are Going","hash":"_where_we_are_going","id":4},{"text":"Before We Begin","hash":"_before_we_begin","id":5},{"text":"Initial Project","hash":"_initial_project","id":6},{"text":"A Simple Pedestal Component","hash":"_a_simple_pedestal_component","id":7},{"text":"Wiring it up","hash":"_wiring_it_up","id":8},{"text":"Running It","hash":"_running_it","id":9},{"text":"Testing","hash":"_testing","id":10},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":11},{"text":"The Path So Far","hash":"_the_path_so_far","id":12}]},"133":{"id":133,"text":"Server-sent events (SSE) make it possible to stream events to a client application. They are appropriate when you only need a unidirectional flow of events from the server to the client (if you need a bidirectional connection, then WebSockets are a better choice). SSEs have largely been eclipsed by WebSockets, which Pedestal also supports. After reading this guide, you will be able to: Configure Pedestal to accept SSE connections. Send events from Pedestal over the connection using core.async. Connect to the server-sent event stream from a JavaScript client. This guide is for intermediate users who have worked through some sample applications or the first few Hello World guides. In particular, you should know how to run a build, start a REPL, and start and stop your server. You do not need to know any other Clojure web frameworks, but if you do, you may find some of the comparisons useful. If not, that’s OK — just skip those sections. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. We’ll be creating a new Pedestal service project, adding a simple route to stream a counter using server-sent events, and adding a simple HTML page that uses a JavaScript EventSource to open a connection to the stream. This guide will use Leiningen to generate and build a template project. If you haven’t already installed it, please take a few minutes to set it up. $ lein new pedestal-service server-sent-events Generating a pedestal-service application called server-sent-events. $ cd server-sent-events We will be using Hiccup to generate our index page, so we will need to add the dependency in our project.clj. project.clj :dependencies [[org.clojure/clojure \"1.10.1\"] [io.pedestal/pedestal.service \"0.6.1\"] ;; Remove this line and uncomment one of the next lines to ;; use Immutant or Tomcat instead of Jetty: [io.pedestal/pedestal.jetty \"0.6.1\"] ;; [io.pedestal/pedestal.immutant \"0.6.1\"] ;; [io.pedestal/pedestal.tomcat \"0.6.1\"] [ch.qos.logback/logback-classic \"1.2.10\" :exclusions [org.slf4j/slf4j-api]] [org.slf4j/jul-to-slf4j \"1.7.35\"] [org.slf4j/jcl-over-slf4j \"1.7.35\"] [org.slf4j/log4j-over-slf4j \"1.7.35\"] ;; Add hiccup dependency [hiccup \"1.0.5\"]] Here’s the service.clj file generated from the template: src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp])) (defn about-page [request] (ring-resp/response (format \"Clojure %s - served from %s\" (clojure-version) (route/url-for ::about-page)))) (defn home-page [request] (ring-resp/response \"Hello World!\")) ;; Defines \"/\" and \"/about\" routes with their associated :get handlers. ;; The interceptors defined after the verb map (e.g., {:get home-page} ;; apply to / and its children (/about). (def common-interceptors [(body-params/body-params) http/html-body]) ;; Tabular routes (def routes #{[\"/\" :get (conj common-interceptors `home-page)] [\"/about\" :get (conj common-interceptors `about-page)]}) ;; Map-based routes ;(def routes `{\"/\" {:interceptors [(body-params/body-params) http/html-body] ; :get home-page ; \"/about\" {:get about-page}}}) ;; Terse/Vector-based routes ;(def routes ; `[[[\"/\" {:get home-page} ; ^:interceptors [(body-params/body-params) http/html-body] ; [\"/about\" {:get about-page}]]]]) ;; Consumed by server-sent-events.server/create-server ;; See http/default-interceptors for additional options you can configure (def service {:env :prod ;; You can bring your own non-default interceptors. Make ;; sure you include routing and set it up right for ;; dev-mode. If you do, many other keys for configuring ;; default interceptors will be ignored. ;; ::http/interceptors [] ::http/routes routes ;; Uncomment next line to enable CORS support, add ;; string(s) specifying scheme, host and port for ;; allowed source(s): ;; ;; \"http://localhost:8080\" ;; ;;::http/allowed-origins [\"scheme://host:port\"] ;; Tune the Secure Headers ;; and specifically the Content Security Policy appropriate to your service/application ;; For more information, see: https://content-security-policy.com/ ;; See also: https://github.com/pedestal/pedestal/issues/499 ;;::http/secure-headers {:content-security-policy-settings {:object-sr
1c \"'none'\" ;; :script-src \"'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:\" ;; :frame-ancestors \"'none'\"}} ;; Root for resource interceptor that is available by default. ::http/resource-path \"/public\" ;; Either :jetty, :immutant or :tomcat (see comments in project.clj) ;; This can also be your own chain provider/server-fn -- http://pedestal.io/reference/architecture-overview#_chain_provider ::http/type :jetty ;;::http/host \"localhost\" ::http/port 8080 ;; Options to pass to the container (Jetty) ::http/container-options {:h2c? true :h2? false ;:keystore \"test/hp/keystore.jks\" ;:key-password \"password\" ;:ssl-port 8443 :ssl? false}}) Let’s simplify things by commenting out the 'Terse/Vector-based routes' section and removing unnecessary code. src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp])) (defn home-page [request] (ring-resp/response \"Hello World!\")) (def routes `[[[\"/\" {:get home-page}]]]) (def service {:env :prod ::http/routes routes ::http/type :jetty ::http/port 8080}) Now let’s add our server-sent event route. First Lets require SSE and core.async. src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] ;; require SSE [io.pedestal.http.sse :as sse] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp] ;; require core.async [clojure.core.async :as async] [clojure.core.async.impl.protocols :as chan])) Now we’ll add our counter route. We create the /counter route by calling start-event-stream and passing in our stream-ready handler. This creates an interceptor that will handle setting up the connection and call the provided callback, stream-ready. The stream-ready callback receives a core.async event channel and the SSE context as parameters. The SSE context is the context map with additional keys related to the event stream. The callback must send at least one event in order to properly initialize the stream. If it doesn’t, the client will think the stream is broken and keep reconnecting. An event stream is a particular kind of asynchronous response. The event stream interceptor, returned by start-event-stream, will return a context with a response map, which will trigger a response being sent to the client. However, the response will include whatever series of values are put into the provided response channel. You send events on the channel using regular core.async functions, such as put! or >!!, and ultimately terminate the connection by calling clojure.core.async/close! on the channel. Here our event consists the :name and :data keys, but could also contain an :id+for the event. Importantly, it is not the job of your callback to send all of the events; your callback is supposed set in motion the concurrent machinery that sends the events. Events will continue to be sent to the client even after the callback returns, until either the client closes the connection, or your code closes the channel. src/server_sent_events/service.clj (defn stream-ready [event-chan context] (dotimes [i 10] (when-not (chan/closed? event-chan) (async/>!! event-chan {:name \"counter\" :data i}) (Thread/sleep 1000))) (async/close! event-chan)) (def routes `[[[\"/\" {:get home-page} [\"/counter\" {:get [::send-counter (sse/start-event-stream stream-ready)]}]]]]) Now let’s start up our server. > lein run INFO org.eclipse.jetty.util.log - Logging initialized @3094ms to org.eclipse.jetty.util.log.Slf4jLog Creating your server... INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS INFO o.e.j.server.handler.Con[textHandler - Started o.e.j.s.ServletContextHandler@38f183e9{/,null,AVAILABLE} INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@b439e50{HTTP/1.1, (http/1.1, h2c)}{localhost:8080} INFO org.eclipse.jetty.server.Server - Started @3196ms We can check out our event stream in another terminal using curl. > curl http://localhost:8080/counter event: counter data: 0 event: counter data: 1 event: counter data: 2 event: counter data: 3 event: counter data: 4 event: counter data: 5 event: counter data: 6 event: counter data: 7 event: counter data: 8 event: counter data: 9 > The events above will arrive at one second intervals. SSE data will always be received as a string. If you want to send JSON (or any other data format), it’s up to the sender to encode it and the receiver to decode it accordingly. This agreement must be arranged out-of-band. None of the Pedestal interceptors are invoked when sending SSE events. The interceptors are used for the initial connection request from the client, but not on the events themselves. Now let’s stop our server with Ctrl+C and update our /index route to return an HTML page that connects to our counter route. Since we are adding inline JS we’ll also update our service configuration not to include secure headers, which include 'unsafe-inline' by default (this is an example, not production code after all). src/server_sent_events/service.clj (ns server-sent-events.service (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] ;; require SSE [io.pedestal.http.sse :as sse] [io.pedestal.http.body-params :as body-params] [ring.util.response :as ring-resp] ;; require core.async [clojure.core.async :as async] [clojure.core.async.impl.protocols :as chan] [hiccup.core :as hiccup])) (def js-string \" var eventSource = new EventSource(\\\"http://localhost:8080/counter\\\"); eventSource.addEventListener(\\\"counter\\\", function(e) { console.log(e); var counterEl = document.getElementById(\\\"counter\\\"); counter.innerHTML = e.data; }); \") (defn home-page [request] {:status 200 :headers {\"Content-Type\" \"text/html\"} :body (hiccup/html [:html [:head [:script {:type \"text/javascript\"}
1 js-string]] [:body [:div [:span \"Counter: \"] [:span#counter]]]])}) (defn stream-ready [event-chan context] (dotimes [i 10] (when-not (chan/closed? event-chan) (async/>!! event-chan {:name \"counter\" :data i}) (Thread/sleep 1000))) (async/close! event-chan)) (def routes `[[[\"/\" {:get home-page} [\"/counter\" {:get [::send-counter (sse/start-event-stream stream-ready)]}]]]]) (def service {:env :prod ::http/routes routes ::http/type :jetty ::http/port 8080 ;; we need this so we can use inline scripts ::http/secure-headers {:content-security-policy-settings {:object-src \"none\"}}}) Now we should be able to restart our server and navigate to http://localhost:8080 and watch our counter increment. Coverage of the JavaScript EventSource (SSE) API is beyond the scope of this Pedestal guide. If you are unfamiliar with the API, consult this tutorial for a basic introduction. We’ve covered a minimal setup for server-sent event configuration and usage and demonstrated how to receive events from JavaScript. This guide was based on the examples in the server-sent-event sample project and the Server-Sent Events Reference.","title":"Server Sent Events","component":"pedestal","version":"0.6","name":"sse","url":"/pedestal/0.6/guides/sse.html","titles":[{"text":"Welcome","hash":"_welcome","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Before We Begin","hash":"_before_we_begin","id":6},{"text":"Generate Our New Project","hash":"_generate_our_new_project","id":7},{"text":"Add Hiccup","hash":"_add_hiccup","id":8},{"text":"Clean Up","hash":"_clean_up","id":9},{"text":"Server-Sent Event Route","hash":"_server_sent_event_route","id":10},{"text":"Wrapping Up","hash":"_wrapping_up","id":11}]},"134":{"id":134,"text":"It is a good practice to separate core business logic from handler, and more generally, interceptor code. This separation of concerns has many benefits, including facilitating testing at the interceptor, interceptor chain and end-to-end response generation levels. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [ctx] (assoc ctx :widget {:id 1 :title \"foobar\"} ))})) We can test it either directly: (let [test-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (test-fn {}))))) Or using the interceptor chain execute function: (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) We can extend this approach to test coordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [ctx] (if-let [widget (:widget ctx)] (assoc ctx :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc ctx :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper response-for utility function to facilitate testing of services without having to spin up an http server. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for helper function is specific to servlet-based services and simulates the receipt of a servlet request and creation of a servlet response - but does so without the overhead of an actual HTTP connection, which ensures your tests are fast. `response-for takes as arguments a service function, verb and url as required parameters; headers and a request body are optional. Let us examine those parameters in more detail. The service function refers to the :io.pedestal.http/service-fn key value in the service map during service initialization. The verb is an HTTP method represented as a keyword (i.e., :get, :post, :delete, etc…​). The url is a relative url represented as a string. The headers and request body inputs are optional and specified with the :headers and :body keys, respectively. Before using response-for in tests, a test service must be created. This is done by calling io.pedestal.http/create-servlet with the service map as a parameter. The resulting service-fn can be bound to a var and used in subsequent tests. (def service (:io.pedestal.http/service-fn (io.pedestal.http/create-servlet service-map))) The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for service :get \"/hello\")))
1) The response returned by response-for contains :status, :body and :header keys. The value of the :headers key is a map with stringified keys. Testing header values would look something like this: (is (= \"text/plain\" (get-in (response-for service :get \"/hello\") [:headers \"Content-Type\"]))) POST’ing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to support request payload parsing. Therefore, you will need to set the Content-Type header of the test request to the appropriate value based on the payload format of the request body. (is (= 200 (:status (response-for service :post \"/foo\" :headers {\"Content-Type\" \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\")))) (is (= 200 (:status (response-for service :post \"/foo-login\" :headers {\"Content-Type\" \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\")))) Notice how Content-Type is a string. Pedestal provides a utility, url-for-routes. This is passed the expanded routes for your application, and returns a function that will generate a URL for a specific route; primarily by specifying the route name, but also other factors. It is recommended to create a url-for test helper based on url-for-routes, and use that helper to create the relative urls for your tests. This allows you to refer to routes by name as opposed to hard-coded paths. Route names are typically more stable. Aside from that, it makes it easy to test routes which use query or path parameters. Here’s an example: (require '[io.pedestal.http.route :as http.routes]) (def routes #{[\"/user/:id/items\" :post `user-items]} ; (1) (def url-for (http.routes/url-for-routes (http.routes/expand-routes routes)))) (is (= 200 (:status (response-for service :get (url-for ::user-items ;(2) :path-params {:id 1} :query-params {:sort \"ASC\"}))))) 1 The namespace qualified symbol for user-items will be the default route name (as a keyword) 2 The route name is used to get the URL back Nothing special needs to be done when testing routes which include async interactions. The response-for helper forces asynchronous request processing to synchronous processing for test purposes.","title":"Unit testing","component":"pedestal","version":"0.6","name":"unit-testing","url":"/pedestal/0.6/guides/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":2},{"text":"Usage","hash":"_usage","id":3},{"text":"Testing GET","hash":"_testing_get","id":4},{"text":"Testing POST","hash":"_testing_post","id":5},{"text":"Constructing route URLs","hash":"_constructing_route_urls","id":6},{"text":"Testing Async interactions","hash":"_testing_async_interactions","id":7}]},"135":{"id":135,"text":"Java web applications are commonly deployed to web containers, also called Servlet containers or application servers. Web containers manage the runtime environment and lifecycle of an application. Popular web containers include Jetty, Tomcat, and JBoss. Some hosting services such as AWS Elastic Beanstalk also function as web containers. To deploy an application to a web container, you must package it as a Web Archive (WAR) file. A WAR file is just a Java [JAR] file with a particular internal layout and a .war extension. When running your application locally at the REPL, you will want to have your choice of servlet container running inside your JVM, and so the servlet container, and the Pedestal adaptor for the container, will be a dependency of your project. In this mode, you are running the servlet container embedded within your application; you application starts and, as part of that, starts the servlet container. For example, if you are using Jetty, then you’ll want the io.pedestal/pedestal.jetty library. This is a perfectly fine way to run your applications in production, but since you are reading this page, you are interested in deploying as a WAR instead, and the rules are slightly different. By contrast, a WAR file should not contain dependencies on the servlet container. At runtime, the servlet container starts up, then creates a new class loader to load your WAR. Having the servlet container’s classes present in the WAR will create deployment c
1onflicts. A WAR file contains all the dependencies of your application, but it should not contain any dependencies which would conflict with the web container itself. You should ensure that your application only depends on the io.pedestal/pedestal.service library; the dependency on a container (such as pedestal.jetty) should be in a dev-only or test-only path. A WAR file must contain a special file called web.xml which tells the web container how to configure the application. In the root directory of your project, create a file called web.xml like the following example: <?xml version=\"1.0\" encoding=\"UTF-8\"?> <web-app xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\" version=\"3.0\" metadata-complete=\"true\"> <description>Pedestal HTTP Servlet</description> <display-name>Pedestal HTTP Servlet</display-name> <servlet> <servlet-name>PedestalServlet</servlet-name> <servlet-class>io.pedestal.servlet.ClojureVarServlet</servlet-class> <init-param> <param-name>init</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-init</param-value> </init-param> <init-param> <param-name>service</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-service</param-value> </init-param> <init-param> <param-name>destroy</param-name> <param-value>YOUR_APP_SERVER_NAMESPACE/servlet-destroy</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>PedestalServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> Replace YOUR_APP_SERVER_NAMESPACE with the \"server\" namespace generated for your application by the Pedestal template. If your app is called \"myapp\" then this would be the namespace myapp.server. The template-generated source file at src/myapp/server.clj should contain functions named servlet-init, servlet-destroy, and servlet-service. Note: The url-pattern in the XML above must match the routes your Pedestal application is expected to handle and must match the conventions of your web container. For example, if you are deploying an application in the file myapp.war, a typical web container will expect it to have <url-pattern>/myapp/*</url-pattern>. Therefore, your application should have routes that begin with /myapp/. If your application will be deployed as the \"root\" web application in the container, then you should leave <url-pattern>/*</url-pattern> as shown in the example above. Consult the documentation of your web container for more details on Servlet mappings. These instruction are out of date, surely there are Leiningen plugins to do this all? Working from a standard Unix shell (or Cygwin on Windows), run the following commands in your project directory. You will need both Leiningen and Maven installed to run these commands. Getting dependencies: lein clean lein pom mvn dependency:copy-dependencies -DoutputDirectory=target/war/WEB-INF/lib Copying your application files: mkdir -p target/war/WEB-INF/classes cp -R src/* config/* resources/* target/war/WEB-INF/classes Copying web.xml: cp web.xml target/war/WEB-INF Creating the WAR file: jar cvf target/YOUR_APPLICATION.war -C target/war WEB-INF Replace YOUR_APPLICATION with the name of your application. Forthcoming; but the essentials are the same: package your resources, Clojure sources, and (rarely present) compiled Java classes to target/war/WEB-INF/classes, and your dependencies to target/war/WEB-INF/lib, then zip everything up. Consult the documentation of your web container to find out how to deploy an application from a WAR file. For many web containers, it may be a simple matter of copying the .war file into a \"webapps\" directory.","title":"WAR Deployment","component":"pedestal","version":"0.6","name":"war-deployment","url":"/pedestal/0.6/guides/war-deployment.html","titles":[{"text":"Step One: Prepare Your Project","hash":"_step_one_prepare_your_project","id":1},{"text":"Step Two: Configure Your Servlets","hash":"_step_two_configure_your_servlets","id":2},{"text":"Step Three: Build the WAR (leinigen)","hash":"_step_three_build_the_war_leinigen","id":3},{"text":"Step Three: Build the WAR (deps.edn)","hash":"_step_three_build_the_war_deps_edn","i
1d":4},{"text":"Step Four: Deploy","hash":"_step_four_deploy","id":5}]},"136":{"id":136,"text":"It doesn’t take very long to bump into the word \"Interceptor\" when you’re working with Pedestal. They’re the most important construct in the library, the essential unit-of-work that virtually everything else in Pedestal is built upon. After reading this guide, you will be able to: Explain the role of interceptors in Pedestal Compare interceptors to middleware Create interceptors that affect execution of remaining interceptors Understand how to handle errors Pedestal exists to support the following goals: Enable code reuse, especially for cross-cutting concerns. Keep code as functional — side-effect free — as possible. Ensure that code can be easily tested. Support asynchronous request flows. Many developers come to Pedestal from an earlier Clojure web framework, Ring; Ring has a very simple model: A servlet container receives an HTTP request and creates a request map A handler is passed the request map, and returns a response map The response map is used to generate an HTTP response Cross-cutting concerns, such as logging and authentication, are handled in Ring via middleware. Middleware is a function that takes a handler function, wraps it with new behavior, and returns a new handler function. Because a Ring handler is a stack of functions that invoke functions[1] there’s no room to support asynchronous flows. The essence of an asynchronous flow is that a function can return early, and later, resume from where they left off - a significant challenge for a language that doesn’t support this concept, such as Java. As we’ll see shortly, interceptors provide a different model where the return early and resume later is more explicit. An interceptor provides one step in the processing of an overall request. Interceptors are formed into a pipeline; each interceptor is invoked to do its one step, then control returns to Pedestal, which then invokes the next interceptor in the pipeline. An interceptor might be specific to a particular route, or it might be more generic and wide-ranging, such as an interceptor that logs requests, or enforces authentication. Even saying \"one step\" is not exactly correct; Pedestal breaks request processing into two phases: enter and leave. The enter phase is related to processing of the incoming request; this covers cross-cutting concerns such as logging and authentication, but also routing, and route-specific interceptors and handlers. The leave phase begins once a response has been created and represents an \"unwinding\", in much the same way that a stack of function calls eventually unwind towards the initial caller. There’s also an error phase, which occurs when an exception is thrown by an interceptor; this allows other interceptors to report or record the exception, and generate a useful response; the error phase is really a subset of the leave phase. In practical terms, an interceptor is an instance of the Interceptor record — a specialized Clojure map. This map has keys :name, :enter, :leave, and :error. You rarely create an Interceptor directly, instead you pass a map, or some other value[2] to the interceptor function and an Interceptor record is returned [3]. An Interceptor should have a :name, and must have at least one of :enter, :leave, and :error. :name A keyword used (especially in logging) to identify the interceptor; generally, this is a namespace qualified keyword. :enter A callback function, passed the context map, returns a possibly modified context map. :leave A callback function, passed the context map, returns a possibly modified context map. :error A callback function, passed the context map and an exception, returns a possibly modified context map. Why not a Protocol? This may look like a situation where a Clojure Protocol would make sense. However, a Protocol would have to define all four parts (a method for :name, :enter, :leave, and :error). This would be cumbersome, and would prevent some optimizations that occur inside Pedestal. So the context map flows through each interceptor; first through the enter phase, then later through the leave phase: The previous diagram shows a single interceptor, but the whole point here is that the interceptors work in a pipeline: This pipeline is composed of two parts: the interceptor queue and the interceptor stack. These are both stored inside the context map. The queue is a list of interceptors that are waiting to execute in the enter phase. The stack is a list of interceptors that have already executed - it is used by the leave and error phases. As an interceptor is popped of the queue, it is pushed onto the stack. When execution switches from the enter phase to the leave (or error) phase, the logic changes to popping each successive interceptor off the stack to invoke the :leave or :error callback. Not all interceptors in the queue will execute: any interceptor can attach a response map (as key :response) to the context. That switches gears to the leave phase. Likewise, simply running out of interceptors in the enter phase will switch to the leave phase. Earlier we said that interceptors are the \"unit of work\" for Pedestal. Even routing is one unit of work; a router interceptor works by matching an incoming request to a route, and the route provides a list of interceptors which are simply added to the queue. It is perfectly acceptable for other interceptors to extend the interceptor queue in just the same way. Remember that an interceptor’s :enter callback is executed to completion before subsequent interceptor’s are invoked; this means that any local symbol assigned via a let is out of scope for the later interceptors. If an interceptor needs to record information during the enter phase and access it again during the leave phase, there is no recourse but to add that data to the context map. A simple example is a timing interceptor that tracks how long it take to process a request: (def timing-interceptor (interceptor {:name ::timing (1) :enter (fn [context] (assoc context ::start-ms (System/currentTimeMillis))) (2) :leave (fn [context] (let [{::keys [start-ms]} context (3) elapsed-ms (- (System/currentTimeMillis) start-ms)] (log/debug :elapsed-ms elapsed-ms) (4) (dissoc context ::start-ms)))}
1)) (5) 1 Give the interceptor a unique, namespace qualified name. 2 Update the context with a new key, namespace qualified to avoid collisions. 3 Destructuring trick, put :keys into a namespace to destructure using that namespace. 4 A side effect, but also the point of this interceptor. 5 Good hygiene is to dissoc anything that was previously added by the interceptor. Any callback also has the option to work asynchronously; this is quite simple: return a core.async channel that will eventually convey the updated context map rather than simply returning the updated context map. Most often, going asynchronous is simply a matter of using the clojure.core.async/go macro: (def user-data-interceptor (interceptor {:name ::user-data :enter (fn [context] (go (1) (let [db (:db context) (2) user-id (get-in context [:request :query-parameters :user-id]) user-ch (db/get-user db user-id)] (3) (assoc context :user (<! user-ch))))) (4) :leave #(dissoc % :user)})) 1 A go block returns a channel that conveys the result. 2 Assumption is that some other interceptor put the :db key into the context. 3 db/get-user is asynchronous and returns a channel that conveys the user. 4 <! waits for the result from user-ch, which is then applied to the context. A simple key is used since other interceptors need access to this user data. When an interceptor returns a channel, Pedestal will return the request-processing thread to the servlet container, so that it can be used to process other incoming requests. It will then wait for the channel to convey the new context, and continue from there. All remaining interceptors for the request will execute inside a thread from core.async’s dispatch thread pool. This only a thumbnail sketch; it doesn’t address likely scenarios such as what if the user doesn’t exist? What if there’s a database failure? What if reading the user from the database takes a really long time? When an interceptor throws an exception, the exception is caught by Pedestal, and the pipeline shifts to the error phase. In the error phase, Pedestal works up the stack of previously executed interceptors. For interceptors with an :error callback, that callback is passed the context map and the exception. The callback can: Return the context map; the exception will be ignored and Pedestal will switch to the leave phase. Attach the exception to the context map to allow a different intercept to handle the exception. Throw a new exception if unable to handle the original exception. Further details are in the error handling reference. One of Pedestal’s core values is to create flexible utilities and use them in specific ways. One example of this approach is that the interceptor pipeline is not inherently tied to an HTTP request/response cycle; that is a specific application of the pipeline, setup via the Servlet Interceptor. The same approach could be used for any number of other purposes, including: Handling messages sent to a JMS queue or Kafka topic Transforming a document Sending an outgoing HTTP request and processing the response The man differences are: What data is stored in the initial context map What are the termination conditions of the enter phase (via the terminate-when function) More details are available in the reference section: Interceptors Default Interceptors Error Handling execute 1. Ring has, more recently, itself started to support asynchronous flows and WebSockets. 2. For example, a handler function in a route will be wrapped as an interceptor. 3. In most cases, even this step is performed for you, such as interceptors that are referenced as part of a route","title":"What is an Interceptor?","component":"pedestal","version":"0.6","name":"what-is-an-interceptor","url":"/pedestal/0.6/guides/what-is-an-interceptor.html","titles":[{"text":"What You Will Learn","hash":"_what_you_will_learn","id":1},{"text":"Interceptor Goals","hash":"_interceptor_goals","id":2},{"text":"Comparison to Ring","hash":"_comparison_to_ring","id":3},{"text":"Core Definition","hash":"_core_definition","id":4},{"text":"Queue and Stack","hash":"_queue_and_stack","id":5},{"text":"Transition from Enter to Leave","hash":"_transition_from_enter_to_leave","id":6},{"text":"Dynamic Queue","hash":"_dynamic_queue","id":7},{"text":"Sharing Information between phases","hash":"_sharing_information_between_phases","id":8},{"text":"Asynchronous Results","hash":"_asynchronous_results","id":9},{"text":"Error Handling","hash":"_error_handling","id":10},{"text":"Other Uses for Interceptor Pipelines","hash":"_other_uses_for_interceptor_pipelines","id":11},{"text":"Where To Next?","hash":"_where_to_next","id":12}]},"137":{"id":137,"text":"This is the fourth part in the tutorial. By now, you’ve built a simple service that vends out friendly greetings by name and can handle a few content types. We’re going to leave our greeting service alone for the time being and turn our attention to a REST API for some entities. To keep things simple, we’re going to keep the entities in memory. Even so, we will use the same kind of techniques you would use in a real application. After reading this guide, you will be able to: Use path parameters to identify items Generate URLs for new items Encode and decode entity bodies This guide is for beginners who are new to Pedestal and may be new to Clojure. It doesn’t assume any prior experience with a Clojure-based web framework. You should be familiar with the basics of HTTP: URLs, response codes, and content types. You do not need experience with any particular database or persistence framework. If you like to jump straight in to the deep end, you might be interested in the Pedestal Crash Course which assumes you know quite a bit about Clojure and web frameworks. This guide also assumes that you are in a Unix-like development environment, with Java installed. We’ve tested it on Mac OS X and Linux (any flavor) with great results. We haven’t yet tried it on the Windows Subsystem for Linux, but would love to hear from you if you’ve succeeded with it there. We’ll take this in small steps. If you get stuck at any point in this guide, please submit an issue about this guide or, hop over to the Pedestal Users mailing list and raise your hand there. You can also get help from the #pedestal channel on the Clojurians Slack. We will start a new project this time. The service will be a simple \"to-do\" list that persists only in memory. We will use the same techniques that we would use to interact with a real database. We’re going to make a REST style API. Our API will have the following routes: Route Verb Action Response /todo POST Create a new list 201 with URL of new list /todo GET Return query form 200 with static page /todo/:list-id GET View a list 200 with all items /todo/:list-id/:item-id GET View an item 200 with item /todo/:list-id/:item-id PUT Update an item 200 with updated item We will start this project with another empty directory. (Still avoiding the template projects for now.) I’m going to call my project 'todo-api'. Feel free to call yours something different, but it’s up to you to do the mental translation from here on out. $ mkdir todo-api $ cd todo-api $ mkdir src This time, we’ll set up our deps.edn file first. It will be almost exactly the same as our last one: deps.edn {:deps {io.pedestal/pedestal.jetty {:mvn/version \"0.6.1\"} org.clojure/data.json {:mvn/version \"2.4.0\"} org.slf4j/slf4j-simple {:mvn/version \"2.0.9\"}} :paths [\"src\"]} Our new source file will start off with the usual namespace declaration: src/main.clj (ns main (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :as test])) We’re going to use some of the same structures from previous tutorials, such as an ok function to build a successful response, but with some differences: src/main.clj (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) partial is a Clojure function that takes a function and returns a new function that needs fewer arguments - you supply the initial arguments in the call to partial. The returned function keeps track of those initial arguments, and when invoked, \"glues together\" the initial arguments and any additional arguments provided to it, and calls the original function: response in this case. Although created with def, the symbols ok, created, and accepted, are all functions, as if they were created using defn. Why do any of this? For all that web developers generally know the status codes in their sleep [1], it is more intent of the code that calls these functions is more semantically visible. And you probably did go look up code 201. Second, we’re going to define all our routes right away, but have them all use an echo handler so we can test the routes separately from everything else[2]. src/main.clj (def echo {:name :echo :enter (fn [context] (let [request (:request context) response 
1(ok context)] (assoc context :response response)))}) (def routes (route/expand-routes #{[\"/todo\" :post echo :route-name :list-create] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) Pedestal makes it possible to invoke these routes directly from the REPL, without involving HTTP at all. This is a nice way to break your work up into incremental steps. It goes together nicely with the interactive development support we introduced in the Hello World, With Parameters tutorial. Get ready for a ton of output: > clj Clojure 1.11.1 user=> (require 'main) nil user=> (main/start-dev) [main] INFO org.eclipse.jetty.util.log - Logging initialized @16482ms to org.eclipse.jetty.util.log.Slf4jLog [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.52.v20230823; built: 2023-08-23T19:29:37.669Z; git: abdcda73818a1a2c705da276edb0bf6581e7997e; jvm 11.0.19+7-LTS [main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@51e28071{/,null,AVAILABLE} [main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@44ca5127{HTTP/1.1, (http/1.1, h2c)}{localhost:8890} [main] INFO org.eclipse.jetty.server.Server - Started @16639ms #:io.pedestal.http{:port 8890, :service-fn #object[io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835 0xc1add62 \"io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__14835@c1add62\"], :host \"localhost\", :type :jetty, :start-fn #object[io.pedestal.http.jetty$server$fn__15231 0x723c7f2f \"io.pedestal.http.jetty$server$fn__15231@723c7f2f\"], :interceptors [#Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.route/path-params-decoder}], :routes ({:path \"/todo/:list-id/:item-id\", :method :delete, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-delete, :path-params [:list-id :item-id]} {:path \"/todo/:list-id/:item-id\", :method :get, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :list-item-view} #Interceptor{:name :database-interceptor}], :route-name :database-interceptor, :path-params [:list-id :item-id]} {:path \"/todo/:list-id/:item-id\", :method :put, :path-constraints {:list-id \"([^/]+)\", :item-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)/([^/]+)\", :path-parts [\"todo\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-update, :path-params [:list-id :item-id]} {:path \"/todo/:list-id\", :method :get, :path-constraints {:list-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)\", :path-parts [\"todo\" :list-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :database-interceptor} #Interceptor{:name :list-view}], :route-name :list-view, :path-params [:list-id]} {:path \"/todo/:list-id\", :method :post, :path-constraints {:list-id \"([^/]+)\"}, :path-re #\"/\\Qtodo\\E/([^/]+)\", :path-parts [\"todo\" :list-id], :interceptors [#Interceptor{:name :entity-render} #Interceptor{:name :list-item-view} #Interceptor{:name :database-interceptor} #Interceptor{:name :list-item-create}], :route-name :list-item-create, :path-params [:list-id]} {:path \"/todo\", :method :get, :path-re #\"/\\Qtodo\\E\", :path-parts [\"todo\"], :interceptors [#Interceptor{:name :echo}], :route-name :list-query-form, :path-params []} {:path \"/todo\", :method :post, :path-re #\"/\\Qtodo\\E\", :path-parts [\"todo\"], :interceptors [#Interceptor{:name :database-interceptor} #Interceptor{:name :list-create}], :route-name :list-create, :path-params []}), :servlet #object[io.pedestal.http.servlet.FnServlet 0x5cb077e3 \"io.pedestal.http.servlet.FnServlet@5cb077e3\"], :server #object[org.eclipse.jetty.server.Server 0x737935a4 \"Server@737935a4{STARTED}[9.4.52.v20230823]\"], :join? false, :stop-fn #object[io.pedestal.http.jetty$server$fn__15233 0x278758da \"io.pedestal.http.jetty$server$fn__15233@278758da\"]} user=> Let’s try out the routes that we defined in the main namespace. We’ll do that using response-for. This function exercises our server without going through any actual HTTP requests. In Pedestal, the :io.pedestal.http/service-fn key of the service map contains the service function which is essentially the bridge between Servlet APIs and Pedestal’s interceptor chain. By extracting the service-fn (which we keep handy when running in development mode), we can pass it to response-for along with the HTTP verb (as a keyword), and the URL: user=> (require '[io.pedestal.test :as test]) nil user=> (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/todo\") [main] INFO io.pedestal.http - {:msg \"GET /todo\", :line 80} {:status 200, :body \"{:io.pedestal.interceptor.chain/stack (#Interceptor{:name :echo} #Interceptor{:name :io.pedestal.http.route/path-params-decoder} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/ring-response} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/stylobate} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/terminator-injector}), :request {:protocol \\\"HTTP/1.1\\\", :async-supported? true, :remote-addr \\\"127.0.0.1\\\", :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x3e1ff1cf \\\"io.pedestal.test$test_servlet_response$reify__15083@3e1ff1cf\\\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x389588b2 \\\"io.pedestal.http.servlet.FnServlet@389588b2\\\"], :headers {\\\"content-length\\\" \\\"0\\\", \\\"content-type\\\" \\\"\\\"}, :server-port -1, :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x57e9122f \\\"io.pedestal.test$test_servlet_request$reify__15071@57e9122f\\\"], :content-length 0, :content-type \\\"\\\", :path-info \\\"/todo\\\", :character-encoding \\\"UTF-8\\\", :url-for #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}], :uri \\\"/todo\\\", :server-name nil, :query-string nil, :path-params {}, :body #object[io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a 0x5ea52724 \\\"io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a@5ea52724\\\"], :scheme nil, :request-method :get, :context-path \\\"\\\"}, :bindings {#'io.pedestal.http.route/*url-for* #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}]}, :enter-async [#object[io.pedestal.http.impl.servlet_interceptor$start_servlet_async 0x7dfccbf2 \\\"io.pedestal.http.impl.servlet_interceptor$start_servlet_async@7dfccbf2\\\"]], :io.pedestal.interceptor.chain/terminators (#object[io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810 0x1fe24f79 \\\"io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@1fe24f79\\\"]), :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x3e1ff1cf \\\"io.pedestal.test$test_servlet_response$reify__15083@3e1ff1cf\\\"], :route {:path \\\"/todo\\\", :method :get, :path-re #\\\"/\\\\Qtodo\\\\E\\\", :path-parts [\\\"todo\\\"], :interceptors [#Interceptor{:name :echo}], :route-name :list-query-form, :path-params {}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[clojure.core$constantly$fn__5740 0x4f9a0139 \\\"clojure.core$constantly$fn__5740@4f9a0139\\\"]}, :servlet #object[io.pedestal.http.servlet.FnServlet 0x389588b2 \\\"io.pedestal.http.servlet.FnServlet@389588b2\\\"], :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x57e9122f \\\"io.pedestal.test$test_servlet_request$reify__15071@57e9122f\\\"], :io.pedestal.interceptor.chain/queue #object[clojure.lang.PersistentQueue 0x38f183e9 \\\"clojure.lang.PersistentQueue@1\\\"], :url-for #object[clojure.lang.Delay 0x41c22d59 {:status :pending, :val nil}], :io.pedestal.interceptor.chain/execution-id 1, :servlet-config nil, :async? #object[io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_ 0x23497c5e \\\"io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_@23497c5e\\\"]}\", :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} user=> Part of this output — [main] INFO …​ — comes from built-in Pedestal interceptors for logging requests; the logging output gets mixed into the output from the REPL. The response is somewhat overwhelmingly verbose because we are using the echo interceptor, so the entire incoming request converted to a string and is nested inside the response. If we omit the response body, it’s easier to observe the most useful parts of the response: user=> (dissoc *1 :body) {:status 200, :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} Inside the REPL, Clojure keeps track of the most recent result it printed in the symbol *1. That makes it a snap to dig down into that result. There’s also *2 and *3. Now we can see the status code (200, OK) and the headers. Not too bad. What happens if we ask for a route that doesn’t exist? Or a verb that isn’t supported on a real route? user=> (dissoc (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/no-such-route\") :body) [main] INFO io.pedestal.http - {:msg \"GET /no-such-route\", :line 80} {:status 404, :headers {\"Content-Type\" \"text/plain\"}} user=> (dissoc (test/response-for (:io.pedestal.http/service-fn @main/server) :delete \"/todo\") :body) [main] INFO io.pedestal.http - {:msg \"DELETE /todo\", :line 80} {:status 404, :headers {\"Content-Type\" \"text/plain\"}} user=> This 404 response comes from Pedestal itself. That is the default response when the router cannot find a route that matches the URL pattern and passes constraints. (For much more about routers, see the Routing Quick Reference). Some of our routes have parameters in them. Those look like keywords embedded in the URL patterns. That tells Pedestal to match any value in that position (except a slash!) and bind it to that parameter in the request map. We should be able to see those parameters in the requests that echo will send back to us. This is one of the ways we can make sure that routes do what we think they are going to do, before we write the real logic. user=> (test/response-for (:io.pedestal.http/service-fn @main/server) :get \"/todo/abcdef/12345\") [main] INFO io.pedestal.http - {:msg \"GET /todo/abcdef/12345\", :line 80} {:status 200, :body \"{:io.pedestal.interceptor.chain/stack (#Interceptor{:name :echo} #Interceptor{:name :io.pedestal.http.route/path-params-decoder} #Interceptor{:name :io.pedestal.http.route/router} #Interceptor{:name :io.pedestal.http.secure-headers/secure-headers} #Interceptor{:name :io.pedestal.http.route/method-param} #Interceptor{:name :io.pedestal.http.route/query-params} #Interceptor{:name :io.pedestal.http.ring-middlewares/content-type-interceptor} #Interceptor{:name :io.pedestal.http/not-found} #Interceptor{:name :io.pedestal.http/log-request} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/ring-response} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/stylobate} #Interceptor{:name :io.pedestal.http.impl.servlet-interceptor/terminator-injector}), :request {:protocol \\\"HTTP/1.1\\\", :async-supported? true, :remote-addr \\\"127.0.0.1\\\", :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x29c808c8 \\\"io.pedestal.test$test_servlet_response$reify__15083@29c808c8\\\"], :servlet #object[io.pedestal.http.servlet.FnServlet 0x265b5f05 \\\"io.pedestal.http.servlet.FnServlet@265b5f05\\\"], :headers {\\\"content-length\\\" \\\"0\\\", \\\"content-type\\\" \\\"\\\"}, :server-port -1, :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x6916566d \\\"io.pedestal.test$test_servlet_request$reify__15071@6916566d\\\"], :content-length 0, :content-type \\\"\\\", :path-info \\\"/todo/abcdef/12345\\\", :character-encoding \\\"UTF-8\\\", :url-for #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}], :uri \\\"/todo/abcdef/12345\\\", :server-name nil, :query-string nil, :path-params {:list-id \\\"abcdef\\\", :item-id \\\"12345\\\"}, :body #object[io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a 0x82bbbdc \\\"io.pedestal.test.proxy$javax.servlet.ServletInputStream$ff19274a@82bbbdc\\\"], :scheme nil, :request-method :get, :context-path \\\"\\\"}, :bindings {#'io.pedestal.http.route/*url-for* #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}]}, :enter-async [#object[io.pedestal.http.impl.servlet_interceptor$start_servlet_async 0x7dfccbf2 \\\"io.pedestal.http.impl.servlet_interceptor$start_servlet_async@7dfccbf2\\\"]], :io.pedestal.interceptor.chain/terminators (#object[io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810 0x74f47eab \\\"io.pedestal.http.impl.servlet_interceptor$terminator_inject$fn__14810@74f47eab\\\"]), :servlet-response #object[io.pedestal.test$test_servlet_response$reify__15083 0x29c808c8 \\\"io.pedestal.test$test_servlet_response$reify__15083@29c808c8\\\"], :route {:path \\\"/todo/:list-id/:item-id\\\", :method :get, :path-constraints {:list-id \\\"([^/]+)\\\", :item-id \\\"([^/]+)\\\"}, :io.pedestal.http.route.prefix-tree/satisfies-constraints? #object[io.pedestal.http.route.prefix_tree$add_satisfies_constraints_QMARK_$fn__11533 0x2f8afb66 \\\"io.pedestal.http.route.prefix_tree$add_satisfies_constraints_QMARK_$fn__11533@2f8afb66\\\"], :path-re #\\\"/\\\\Qtodo\\\\E/([^/]+)/([^/]+)\\\", :path-parts [\\\"todo\\\" :list-id :item-id], :interceptors [#Interceptor{:name :echo}], :route-name :list-item-view, :path-params {:list-id \\\"abcdef\\\", :item-id \\\"12345\\\"}}, :servlet #object[io.pedestal.http.servlet.FnServlet 0x265b5f05 \\\"io.pedestal.http.servlet.FnServlet@265b5f05\\\"], :servlet-request #object[io.pedestal.test$test_servlet_request$reify__15071 0x6916566d \\\"io.pedestal.test$test_servlet_request$reify__15071@6916566d\\\"], :io.pedestal.interceptor.chain/queue #object[clojure.lang.PersistentQueue 0x2d4fe03b \\\"clojure.lang.PersistentQueue@1\\\"], :url-for #object[clojure.lang.Delay 0x614c7175 {:status :pending, :val nil}], :io.pedestal.interceptor.chain/execution-id 9, :servlet-config nil, :async? #object[io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_ 0x23497c5e \\\"io.pedestal.http.impl.servlet_interceptor$servlet_async_QMARK_@23497c5e\\\"]}\", :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"X-Download-Options\" \"noopen\", \"X-Permitted-Cross-Domain-Policies\" \"none\", \"Content-Security-Policy\" \"object-sr
1c 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\", \"Content-Type\" \"application/edn\"}} The interesting part here is kind of buried inside the request map (which is a string inside the response body). We can pull it out with a bit of Clojure code, but I’ll just highlight it here. (If you’re interested in an exercise, try using clojure.edn to extract the request.) Inside the request, there is a map :path-params which looks like this: :path-params {:list-id \"abcdef\", :item-id \"12345\"}} Pedestal extracted these parameters from the URL and bound them to the request for us. Note that the values are always strings, because URLs are strings. If we want to treat \"12345\" as a number, that’s up to us. But our application had better not break if some sly user sends us up a request with something other than numbers there. The first request to handle is creating lists. This is a POST to the /todo URL. In the interest of simplicity, the only part of a request body we need is a name field. Also in the interest of simplicity, we are not going to deal with content negotiation yet. What do we need to do in order to create a list? Make a new data structure for the list. Add it to our repository. Without getting too far ahead of ourselves, we’d like to avoid doing all of the above in a single handler function, and instead, break this up into several interceptors, each of which is (as much as possible) side-effect free and easily testable. Let’s break the behavior up into multiple steps, and give each step a provisional name: A attaches a database connection to the request. B looks up an item of interest and attaches it to the request. C makes some decisions and attaches the result of those decisions to the request. D executes a transaction with those decisions. This way, A and D are quite generic. B is somewhat specific to the particular route — is it a list or a list item that’s being looked up?. That leaves C which is most specific to a single route, and might event be a simple handler function. For this guide, we are going to cheat and create an in-memory repository: src/main.clj (defonce database (atom {})) (1) 1 Using defonce here ensures that the value, the database atom, will survive when we reload the namespace. And the interceptor to snapshot the database and handle transactions: src/main.clj (def db-interceptor {:name :database-interceptor :enter (fn [context] (update context :request assoc :database @database)) (1) :leave (fn [context] (if-let [[op & args] (:tx-data context)] (2) (do (apply swap! database op args) (3) (assoc-in context [:request :database] @database)) (4) context))}) (5) 1 @database gets the current value of the atom. We attach it to the request inside the context. This is step A from above. 2 The :tx-data key on the context may be set by other interceptors. This is step D from above. 3 The do block is a sure sign of a side effect. The swap! here is our stand-in for a real database transaction. 4 We attach the updated database value in case any other interceptors need to use it. We use the latest version of the database (via @database), not the value in the request, to account for any concurrent threads changing the database simultaneously. 5 If there wasn’t any tx-data, we just return the context without changes. If you forget this and return nil, every request will respond with 404. Now we need a handler to receive the request, extract a name, and create the actual list. src/main.clj (defn make-list [nm] {:name nm :items {}}) (defn make-list-item [nm] {:name nm :done? false}) (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") (1) new-list (make-list nm) db-id (str (gensym \"l\"))] (2) (assoc context :tx-data [assoc db-id new-list])))}) (3) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] (4) [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get echo :route-name :list-view] [\"/todo/:list-id\" :post echo :route-name :list-item-create] [\"/todo/:list-id/:item-id\" :get echo :route-name :list-item-view] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) 1 If there was a query parameter, use it. Otherwise use a placeholder. 2 Generate a unique ID. In a real service, the DB itself would do this for us. 3 Don’t modify the DB here. Attach data to the context that the db-interceptor will use. 4 We modify the route definition to use both new interceptors, in order. There are a couple of things to notice about this updated route definition. First, instead of using echo here, we have a vector with our db-interceptor and list-create interceptors. Recall from the introduction to interceptors that interceptors have tw
1o functions. The :enter functions get called from left to right, then the :leave functions get called from right to left. That means calls to the db-interceptor bracket the call to the list-create interceptor. The second thing about the new route is that we removed the :route-name :list-create clause. Pedestal requires that every route must have a unique name. When we used the echo interceptor everywhere, there was no way for Pedestal to create unique, meaningful names for the routes so we had to help it out. Now, list-create has it’s own name so we can let Pedestal do it’s default behavior: use the name of the last interceptor in the vector. When you use a function in a route, Pedestal also can’t pick a good name for you. There are quoting forms you can read about in the routing reference that offer some tricks for that. Let’s give this a try. Here’s a new helper function to make it easier to try requests out interactively: src/main.clj (defn test-request [verb url] (io.pedestal.test/response-for (::http/service-fn @server) verb url)) With this new helper we can try out a lot of requests from the REPL. Don’t forget to reload the main namespace in the REPL with (require :reload 'main) and restart the server with (main/restart) before you do. user> (main/test-request :post \"/todo?name=A-List\") {:status 404, :body \"Not Found\", :headers {\"Content-Type\" \"text/plain\"}} Uh oh. What happened here? We just tried this route a minute ago. Was it the query parameter? user> (main/test-request :post \"/todo\") {:status 404, :body \"Not Found\", :headers {\"Content-Type\" \"text/plain\"}} Nope. If you check the contents of your in-memory database by running @main/database in the REPL, you’ll see the new item in there: user=> @main/database {\"l15385\" {:name \"A-List\", :items {}}} So why did Pedestal return 404 response? The problem is that neither of the list-create and db-interceptor interceptors attached any kind of response to the context. Pedestal looked at the context after running all the interceptors, saw that there was no response, and sent the 404 as a fallback. We need to attach a response somewhere. In REST apis, it is expected that a POST request that creates an entity will then return a response with a 201 Created status code, and include a Location header that points to the new resource. We have defined a route for that, :get /todo/:list-id, which we’ve named :list-view, and, knowing the list id, it’s quite straight forward to assemble that string. But should our handler code be responsible for doing so? Anyone with experience in web development knows that things shift around constantly, and should a change to the routing necessitate changes to some scattered collection of handlers? Even if the routing table is stable, we want to avoid duplicated code. Pedestal provides the url-for function to generate a URL from route name, and will even interpolate parameters into the URL string. So our list-create interceptor can point the client over to a route that will render the new list. Of course, it would be nice if the response body also included the current state of the just-created list. That saves the client a round trip and saves the service a request. For now, we can do this all in a single interceptor. src/main.clj (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list nm) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id}
1)] (1) (assoc context :response (created new-list \"Location\" url) :tx-data [assoc db-id new-list])))}) 1 Generate URL for route :list-view and the new ID we just generated. Pedestal uses some hidden machinery[3] to get the routing table, which is needed to construct the URL. And the results (manually formatted for readability): user> (main/test-request :post \"/todo?name=A\") {:status 201, :body \"{:name \\\"A\\\", :items []}\", (1) :headers {\"Strict-Transport-Security\" \"max-age=31536000; includeSubdomains\", \"X-Frame-Options\" \"DENY\", \"X-Content-Type-Options\" \"nosniff\", \"X-XSS-Protection\" \"1; mode=block\", \"Location\" \"/todo/l30488\", (2) \"Content-Type\" \"application/edn\"}} (3) 1 The created list, as map encoded as a string. 2 The location, generated by url-for. 3 The Clojure map was converting a string by a default Pedestal interceptor, which also applied the matching content type. In general, adding something to the database might cause it to change. Sometimes there are triggers or stored procedures that change it. Other times it’s just an ID being assigned. Usually, instead of attaching the new entity here, I would attach its ID to the context and use another interceptor later in the chain to look up the entity after db-interceptor executes the transaction. This becomes especially important when you are updating existing entities that could have concurrent changes from many sources. Now that we’ve done one route, this will go a bit faster. The connection from route to interceptor to entity should be a bit more evident at this point. To view a list, we need to look it up from the \"database\". If it doesn’t exist, we need to return a 404 (which can be done by omitting a response body). If it does exist, we send it in the response. src/main.clj (defn find-list-by-id [dbval db-id] (get dbval db-id)) (1) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) (2) the-list (when db-id (find-list-by-id (3) (get-in context [:request :database]) db-id))] (cond-> context (4) the-list (assoc context :result the-list))))}) 1 Query the in-memory database. 2 Extract the path parameter, if present. 3 Lookup the matching list if the parameter was provided. 4 If a list was found, add it to the context as :result; otherwise do nothing resulting in a 404 response. As we build up a set of interceptors and utility functions, we find that we can go ever faster. Next up, we’ll look at adding a new item to an existing list. To add an item to a list we will perform the following steps: Check that the list exists Create a new item for the list Add that item to the list Return a response with the new item Someone with a seasoned eye may notice that we have multiple steps that could cause problems in heavily used, multi-threaded server: What if the list is deleted by some other thread between steps 1 and 2? What if another item is added to the list between steps 1 and 3 (do we lose one of the items?) This is the kind of thing that is really important to do atomically. We can take advantage of that Clojure atom to execute a function atomically. That’s what the swap! call does for us. But since that function might not succeed, it means we don’t know enough to create the response inside the list-item-create interceptor. We need to defer response creation until after the db-interceptor runs its leave function. Basically, we need something to look up an item by its list ID and item ID, then render the result. That’s exactly what we would do for the :list-item-view route! We can get some reuse here. If list-item-create can add the item to the database, then the item will exist. If the item can’t be added, it will result in a 404 response. We just need to do something a little funky-looking with the list-item-view interceptor. We need to put its behavior in the leave function instead of the enter function. Here’s the pair of new interceptors, plus the updated route table. src/main.clj (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (def entity-render (1) {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response 
1(ok item)) context))}) (def list-item-view (2) {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (3) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def list-item-create (4) {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [nm (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item nm) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) (5) context))}) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render list-item-view db-interceptor]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) 1 New generic interceptor that provides a 200 OK response with EDN body out of any Clojure data structure. 2 New interceptor that looks up list items but doesn’t attach a response (since that’s `entity-render’s job). 3 Instead, list-item-view attaches the result to the context where entity-render expects to find it. 4 This interceptor creates an item and sets up tx-data to be executed. 5 This is where list-item-create passes a parameter to list-item-view. To understand the interceptors for the :list-item-create route, we need to think about enter functions from left to right and leave functions from right to left. Phase Interceptor Action Enter entity-render None. Enter list-item-view None. Enter db-interceptor Attach the database value to the context. Enter list-item-create Attach tx-data to the context and a path-param to identify the item. Leave list-item-create None. Leave db-interceptor Execute the tx-data, attach updated DB value to context. Leave list-item-view Find the (new) item by path-params, attach it to the context as :result. Leave entity-render Find :result on the context, make an OK response. A defect here is that when adding a list item, we don’t return a 201 response and a Location header as we do when adding a list. Implementing that should be an additional section in this tutorial. Splitting the work into these pipelined stages allows us to make very small, very targeted functions that collaborate via the context. The rest of the routes follow these same basic patterns. Take a few minutes to see if you can create the interceptors for the next few. Here is the final version of the code. Everything is cleaned, folded, and sorted nicely. src/main.clj (ns main (:require [io.pedestal.http :as http] [io.pedestal.http.route :as route] [io.pedestal.test :as test])) (defn response [status body & {:as headers}] {:status status :body body :headers headers}) (def ok (partial response 200)) (def created (partial response 201)) (def accepted (partial response 202)) ;;; ;;; \"Database\" functions ;;; (defonce database (atom {})) (defn find-list-by-id [dbval db-id] (get dbval db-id)) (defn find-list-item-by-ids [dbval list-id item-id] (get-in dbval [list-id :items item-id] nil)) (defn list-item-add [dbval list-id item-id new-item] (if (contains? dbval list-id) (assoc-in dbval [list-id :items item-id] new-item) dbval)) (def db-interceptor {:name :database-interceptor :enter (fn [context] (update context :request assoc :database @database)) :leave (fn [context] (if-let [[op & args] (:tx-data context)] (do (apply swap! database op args) (assoc-in context [:request :database] @database)) context))}) ;;; ;;; Domain functions ;;; (defn make-list [nm] {:name nm :items {}}) (defn make-list-item [nm] {:name nm :done? false}) ;;; ;;; API Interceptors ;;; (def echo {:name :echo :enter (fn [context] (let [request (:request context) response 
1(ok context)] (assoc context :response response)))}) (def entity-render {:name :entity-render :leave (fn [context] (if-let [item (:result context)] (assoc context :response (ok item)) context))}) (def list-create {:name :list-create :enter (fn [context] (let [nm (get-in context [:request :query-params :name] \"Unnamed List\") new-list (make-list nm) db-id (str (gensym \"l\")) url (route/url-for :list-view :params {:list-id db-id})] (assoc context :response (created new-list \"Location\" url) :tx-data [assoc db-id new-list])))}) (def list-view {:name :list-view :enter (fn [context] (let [db-id (get-in context [:request :path-params :list-id]) the-list (when db-id (find-list-by-id (get-in context [:request :database]) db-id))] (cond-> context the-list (assoc context :result the-list))))}) (def list-item-view {:name :list-item-view :leave (fn [context] (let [list-id (get-in context [:request :path-params :list-id]) item-id (and list-id (get-in context [:request :path-params :item-id])) item (and item-id (find-list-item-by-ids (get-in context [:request :database]) list-id item-id))] (cond-> context item (assoc :result item))))}) (def list-item-create {:name :list-item-create :enter (fn [context] (if-let [list-id (get-in context [:request :path-params :list-id])] (let [nm (get-in context [:request :query-params :name] \"Unnamed Item\") new-item (make-list-item nm) item-id (str (gensym \"i\"))] (-> context (assoc :tx-data [list-item-add list-id item-id new-item]) (assoc-in [:request :path-params :item-id] item-id))) context))}) (def routes (route/expand-routes #{[\"/todo\" :post [db-interceptor list-create]] [\"/todo\" :get echo :route-name :list-query-form] [\"/todo/:list-id\" :get [entity-render db-interceptor list-view]] [\"/todo/:list-id\" :post [entity-render list-item-view db-interceptor list-item-create]] [\"/todo/:list-id/:item-id\" :get [entity-render list-item-view db-interceptor]] [\"/todo/:list-id/:item-id\" :put echo :route-name :list-item-update] [\"/todo/:list-id/:item-id\" :delete echo :route-name :list-item-delete]})) (def service-map {::http/routes routes ::http/type :jetty ::http/port 8890}) (defn start [] (http/start (http/create-server service-map))) ;; For interactive development (defonce server (atom nil)) (defn start-dev [] (reset! server (http/start (http/create-server (assoc service-map ::http/join? false))))) (defn stop-dev [] (http/stop @server)) (defn restart [] (stop-dev) (start-dev)) (defn test-request [verb url] (io.pedestal.test/response-for (::http/service-fn @server) verb url)) In this guide, we have built a new API with an in-memory database. You’re ready to go get funding and launch! We covered some more advanced concepts with interceptors this time: Passing results from one interceptor to another Reusing interceptors in different routes Separating query from transaction with enter and leave functions Testing our routes interactively at a REPL. Congratulations! You’ve finished the whole Getting Started trail. For more guided learning, head back up to the Guides page. Or, to go deep on some of these topics, check out any of the following references: Interceptors Routing and Linking Default Interceptors 1. But do you know what status code 418 is for? 2. See the Hello World With Content Types tutorial for an explanation of the echo interceptor. 3. A private, thread-bound var.","title":"Your First API","component":"pedestal","version":"0.6","name":"your-first-api","url":"/pedestal/0.6/guides/your-first-api.html","titles":[{"text":"Welcome Back","hash":"_welcome_back","id":1},{"text":"What You Will Learn","hash":"_what_you_will_learn","id":2},{"text":"Guide Assumptions","hash":"_guide_assumptions","id":3},{"text":"Getting Help if You’re Stuck","hash":"_getting_help_if_youre_stuck","id":4},{"text":"Where We Are Going","hash":"_where_we_are_going","id":5},{"text":"Setting Up","hash":"_setting_up","id":6},{"text":"Partial Functions","hash":"_partial_functions","id":7},{"text":"Routes Up Front","hash":"_routes_up_front","id":8},{"text":"Poking the Routes","hash":"_poking_the_routes","id":9},{"text":"Path Parameters","hash":"_path_parameters","id":10},{"text":"Create List","hash":"_create_list","id":11},{"text":"First Attempt","hash":"_first_attempt","id":12},{"text":"url-for","hash":"_url_for","id":13},{"text":"View List","hash":"_view_list","id":14},{"text":"Add Item to List","hash":"_add_item_to_list","id":15},{"text":"The Whole Shebang","hash":"_the_whole_shebang","id":16},{"text":"The Path So Far","hash":"_the_path_so_far","id":17},{"text":"Where To Next?","hash":"_where_to_next","id":18}]},"138":{"id":138,"text":"We created Pedestal as a web framework. At the base, every web framework must solve certain common problems: Interpret incoming requests Dispatch to application code Produce a well-formed response There is an unstated requirement that these all work in a variety of deployment environments: Local development of a workspace Packaged 
1into a Jar file An exploded version of a packaged Jar file Packaged into a Docker container Further, different teams prefer a variety of different request handling frameworks: Tomcat Jetty Undertow Netty Vert.x etc. One more dimension of complexity arises from the relevant styles of application we want to support: Traditional server-rendered pages An API supporting a SPA (Single Page Application) Streaming events Bi-directional WebSockets A mix of all of the above Importantly, supporting streaming events and WebSockets are explicitly asynchronous. Addressing all of these requirements led us to an architecture that is based on interceptors, the context map, and an adaptor to the HTTP network connector (for the underlying request handling framework). Here, the network occurs at the bottom of the diagram; the interceptor chain provider is initialized with the incoming request, and a series of Pedestal and application-specific interceptors perform the bulk of the work, resulting in a response that flows back to the network connector to be conveyed to the originating client. Pedestal is far from the first web framework for Clojure, and attempts to expand on ideas piloted elsewhere. Ring is likely the most popular and influential. In Ring, each route (a combination of an HTTP method and a path pattern) is mapped to a handler: the handler is just a simple function which accepts a request map as its input, and returns a response map. Because a server is more than a single route, and because many routes will share a lot of behavior such as logging, authentication, response rendering, and parameter parsing, each individual Ring route is wrapped in middleware, a function that wraps an existing handler and returns a new handler. Middleware can inspect and modify the incoming request map or the outgoing response map. For example, perhaps your Ring application needs to respond specially to HEAD requests; (ns org.example.middleware) (defn wrap-head-unsupported [handler] (fn [request] (1) (if (= :head (:request-method request)) (2) {:status 400 (3) :headers {} :body \"HEAD not supported\"} (handler request)))) (4) 1 This is the returned handler, wrapping around the original handler 2 Ring specifies at set of keys for the request map; Pedestal follows the same rules 3 Ring specifies another set of keys for the response map 4 Here’s where we delegate down to the next handler This is good, functional design, but is limited in at least one way: it’s all on the stack of a single request processing thread. Given how great Clojure is at multithreaded programming, that can be a limitation. Several of the central features of Pedestal (such as streaming events and web socket connections) are at odds with this: in these cases a long-running server-side process only occasionally needs a request processing thread to send an event, or web socket message, to the client. So, in Pedestal we want something as easily reused and composable as Ring middleware functions, without the limitations of the stack-of-function-calls invocation model. That’s interceptors. An interceptor is a bundle of up-to three functions, named :enter, :leave, and :error. :enter corresponds to the logic before delegating to the next interceptor; the request can be inspected or modified. Likewise, :leave corresponds to logic that occurs after a response map has been created. The :error function is used when an interceptor throws an exception; it’s the interceptor version of a (try …​ catch …​). Now, there’s a bit more going on. First, these :enter and :leave functions are passed a context map which contains a :request key. Any interceptor can modify the context map: some may modify the :request map inside the context, others may attach a :response map to the context. Inside the context is a queue of interceptors. Pedestal works its way through the queue, calling :enter functions, until some interceptor attaches a :response map to the context; then it works its way backwards, calling :leave functions. In practice, an interceptor looks like a normal Clojure map with keys :enter, :leave, or :error (usually just :enter and/or :leave). So, unlike a deeply wrapped function, a chain of interceptors is a data structure that can be inspected by a developer, or manipulated in code. Importantly, any interceptor can add new interceptors to the queue (because the interceptor queue itself is stored in the context, alongside the :request map). Because of this, routing boils down to an interceptor that peeks at the request and makes decisions about what additional interceptors to add to the queue. Pedestal includes general purpose interceptors for all sorts of typical HTTP request functionality: Content negotiation Request body parsing Routing Parsing query parameters Assigning content type to the response Application logic is also implemented as interceptors, though there’s some simple helpers that allow you to write these as Ring-style handlers, if you like. But Pedestal has one more big trick up its sleeve: any interceptor may, instead of returning a context map, instead return a core.async channel that conveys the context map at some point in the future; this is what allows for asynchronous request processing. Further details are in the interceptors reference. Along with moving core logic into interceptors, we have moved the HTTP connection handling out of interceptor processing to create an interface for the chain provider. The chain provider sets up the initial context and queue of interceptors. It starts execution. Pedestal includes a servlet chain provider out of the box. It connects any servlet container to an interceptor chain. The create-servlet function orchestrates this work. This is strictly a convenience function that takes a service map of everything needed to run an HTTP service. It is possible to create other chain providers. The fast-pedestal sample shows how to do this with Jetty. See the following namespaces for the HTTP chain provider: io.pedestal.http The servlet chain provider immediately works with every HTTP server that works with servlets. This allows many deployment scenarios. Sometimes it is advantageous to work directly with a server by implementing a custom chain provider. The servlet chain provider (and main interface to network connectors) is in: io.pedestal.http.impl.servlet-interceptor","title":"Architecture Overview","component":"pede
1stal","version":"0.6","name":"architecture-overview","url":"/pedestal/0.6/reference/architecture-overview.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Interceptors","hash":"_interceptors","id":2},{"text":"Chain Provider","hash":"_chain_provider","id":3},{"text":"Network Connectors","hash":"_network_connectors","id":4}]},"139":{"id":139,"text":"Pedestal uses a chain of Interceptors to process incoming HTTP requests and provide outgoing HTTP responses. However, the underlying code - the interceptors and the interceptor chain that executes them - is more general. Interceptor chains can be used for a variety of operations, such as: Processing messages from a queue, such as Kafka or JMS Performing a series of transformations on documents as part of a publishing service Processing outgoing requests and incoming responses from a back-end service A chain provider is responsible for accepting an incoming stimuli (such as an incoming HTTP request) and setting up a context map and initial interceptors to process that stimuli. The service map is processed via the execute function. Part of a chain provider’s responsibility is to identify when a request has been processed; for HTTP requests, this is when a handler or some other interceptor attaches a :response map to the context map. Pedestal itself only provides a chain provider implementation for incoming HTTP request processing, in the form of the Servlet Interceptor.","title":"Chain Providers","component":"pedestal","version":"0.6","name":"chain-providers","url":"/pedestal/0.6/reference/chain-providers.html","titles":[]},"140":{"id":140,"text":"The context map is passed to each interceptor’s :enter and :leave functions, and is one of two arguments passed to an interceptor’s :error function. Pedestal makes use of a number of keys in the context map described below as part of its public API. Further keys may also be present and are officially undefined and are considered an implementation detail subject to change at any time. Key Type Description :bindings map of var → value See notes below. :io.pedestal.interceptor.chain/error Exception When error processing is invoked, this value is the most recent exception that triggered error handling. :io.pedestal.interceptor.chain/execution-id Opaque This identifier is set uniquely when the interceptor chain is initially executed. It is useful for correlating log events. Do not assume anything about the structure or type of this identifier. :io.pedestal.interceptor.chain/queue Stack of interceptors These are the interceptors left to execute. You can inspect this for debugging purposes, but to manipulate it you should call enqueue, terminate, or terminate-when. :io.pedestal.interceptor.chain/terminators Collection of predicates After executing each :enter function, Pedestal checks every predicate in this collection, passing the context map to each one. If any of them returns true-ish, Pedestal begins executing the :leave stack. The io.pedestal.interceptor.chain/queue key is removed from the context map once an interceptor chain begins processing the :leave stage. In ordinary Clojure code, the binding macro can be used to override the thread-bound values of dynamic Vars; this is not possible with interceptors, as the interceptor function will return before the next interceptor is executed. Instead, an interceptor that needs to override or communicate a value via a dynamic binding will instead modify the :bindings key of the context. Any bindings associated this way will stay present until they are dissoc-ed from the :bindings map; a binding added by one interceptor during the :enter phase will still be present during the :leave phase. It is not uncommon for an interceptor to provide an :enter function to bind a var, and a corresponding :leave function to remove the binding: (def ^:dynamic *request-id* nil) (def request-id-interceptor {:name ::mdc :enter (fn [context] (update context :bindings assoc #'*request-id* (str (random-uuid))) :leave (fn [context] (update context :bindings dissoc #'*request-id*))}) A chain of interceptors can be used for any kind of pipelined processing with branching decisions. It is not limited to HTTP request handling. When used with Pedestal’s HTTP handling, there are additional keys of interest. The context map is created before the first interceptor is invoked. It describes the context of the interceptor execution itself. When the execution chain is connected to an HTTP server, the :request and :response keys have a special purpose. Pedestal does not attach metadata to the request map. When processing, take care to modify the map, rather than constructing a new one. Interceptors may add arbitrary keys to the request map, so it is important to preserve keys that your interceptor does not specifically modify. Key Type Description :request request map Provided by the HTTP chain provider. :response response map Added by an interceptor or handler, as which point the :enter phase of request processing is completed. The following context keys are only present when using the Servlet Interceptor: Key Type Description :servlet-request HttpServletRequest The request that was sent by the client. You should use the request map rather than directly accessing this. :servlet-response HttpServletResponse The response object in which the HTTP server wants its response. You should construct and attach a response map rather than directly accessing this. :servlet-config javax.servlet.ServletConfig The servlet configuration object. :servlet javax.servlet.Servlet The servlet itself.","title":"Context Map","component":"pede
1stal","version":"0.6","name":"context-map","url":"/pedestal/0.6/reference/context-map.html","titles":[{"text":"Description","hash":"_description","id":1},{"text":":bindings","hash":"_bindings","id":2},{"text":"As Applied to HTTP","hash":"_as_applied_to_http","id":3},{"text":"Servlet Keys","hash":"_servlet_keys","id":4}]},"141":{"id":141,"text":"If your service map does not include the key :io.pedestal.http/interceptors, then Pedestal will create a vector of default interceptors for you. The default interceptors are added to your service map when you call either create-servlet, or create-server. This document explains which interceptors are added under different conditions. Each interceptor has its own documentation that describes its specific behavior. If your service map already includes the key :io.pedestal.http/interceptors when you call one of the create- functions, then Pedestal won’t add the default interceptors. So what should you do if you want to use the default interceptors, but want to add your own interceptors to the default stack? The solution is to call default-interceptors yourself, before calling create-server or create-servlet. That way, default-interceptors can build the default stack, then your application code has an opportunity to modify it. By the time you call create-server or create-servlet, the :io.pedestal.http/interceptors key will have your modified version of the default interceptors. Here is an example of adding interceptors to perform authentication and authorization on every request. (Assuming we have a namespace auth with functions to construct these interceptors given a configuration.) (defn service [service-map authn-config authz-config] (-> service-map (http/default-interceptors) (1) (update ::http/interceptors conj (auth/authentication-interceptor authn-config)) (2) (update ::http/interceptors conj (auth/authorization-interceptor authz-config)) (3) (http/create-server))) (4) 1 Attach the default interceptors to our service map 2 Modify the defaults to add authentication. 3 modify the defaults to add authorization. 4 Create the server as usual. This would normally attach the defaults, but will skip that because we’ve set them up ourselves. Some of the default interceptors are conditional. Pedestal adds them when other parts of the service map indicate a need for an interceptor. These will be noted below. These are presented in the order that they appear in the interceptor vector. That means their enter functions will be called in the order they appear in this document, and their leave functions are called in reverse order. Always added. Logs each request at info level. See Logging to configure loggers and logging levels. Added when the service map has a value for :io.pedestal.http/allowed-origins. Always added. However, if the service map includes a value for :io.pedestal.http/not-found-interceptor, then that interceptor will be used in this position instead of the built-in. Added when the service map has a value for :io.pedestal.http/enable-session or :io.pedestal.http/enable-csrf. Added when the service map includes a value for :io.pedestal.http/enable-csrf. Always added. Always added. Always added. Added when the service map has a value for :io.pedestal.http/resource-path. Added when the service map has a value for :io.pedestal.http/file-path. Added when the service map has a non-nil value for :io.pedestal.http/secure-headers or when the service map does not include the key :io.pedestal.http/secure-headers at all. Always added.","title":"Default Interceptors","component":"pedestal","version":"0.6","name":"default-interceptors","url":"/pedestal/0.6/reference/default-interceptors.html","titles":[{"text":"Description","hash":"_description","id":1},{"text":"Modifying the Default Stack","hash":"_modifying_the_default_stack","id":2},{"text":"Default Interceptors","hash":"_default_interceptors","id":3},{"text":"log-request","hash":"_log_request","id":4},{"text":"allow-origin","hash":"_allow_origin","id":5},{"text":"not-found","hash":"_not_found","id":6},{"text":"session","hash":"_session","id":7},{"text":"anti-forgery","hash":"_anti_forgery","id":8},{"text":"content-type","hash":"_content_type","id":9},{"text":"query-params","hash":"_query_params","id":10},{"text":"method-param","hash":"_method_param","id":11},{"text":"resource","hash":"_resource","id":12},{"text":"file","hash":"_file","id":13},{"text":"secure-headers","hash":"_secure_headers","id":14},{"text":"router","hash":"_router","id":15}]},"142":{"id":142,"text":"Pedestal must do something useful when an interceptor throws an exception. It would not be useful to bubble up the runtime call stack, because that call stack only includes the Pedestal machinery itself. Interceptors are data structures that conceptually represent frames on a call stack, but they are not present in the usual nested fashion on the Java call stack. Remember that request processing may be asynchronous, in which case the call stack doesn’t even represent the flow of control to the point where the exception occurred. Instead, Pedestal works backwards, looking for an interceptor to handle the exception. All exceptions thrown from an interceptor are captured; Pedestal wraps such exceptions in an ExceptionInfo instance which is then bound to the :io.pedestal.interceptor.chain/error key in the context map. As long as there is an error attached to that key, Pedestal will not invoke the usual :enter and :leave functions. Instead, it looks for the next interceptor in the chain that has an :error function attached to it. This error handling proceeds the same way regardless of whether interceptors in the chain returned a context map or async channel. (See Interceptor Return Values for details on async return.) As a result, Pedestal unifies error handling for synchronous interceptors and asynchronous interceptors. You can supply your own :error handling interceptor anywhere in the interceptor queue. Pedestal will call the function bound to :error on an interceptor with two arguments: The context map An ExceptionInfo instance Pedestal wraps all exceptions in ex-info. The following keys are defined in its exception data map: Key Type Description :execution-id long Unique value that identifies one \"run\" through the interceptors. :stage Keyword Either :enter or :leave depending on which direction the execution was going. :interceptor Keyword The :name from the interceptor that threw the exception :exception-type Keyword Keywordized form of the exception’s Java class name :exception Throwable The caught exception. The context map does not contain the :io.pedestal.interceptor.chain/error key. The :error function can do one of the following things: Return the context map. This is \"catching\" the error. Because the context map has no error bound to it, Pedestal will exit error handling and execute any remaining :leave handlers. Return the context map with the exception re-attached at :io.pedestal.interceptor.chain/error. This indicates that the handler doesn’t recognize that exception and declines to handle it. Pedestal will c
1ontinue looking for a handler. Throw a new exception. This indicates that the interceptor should have been able to handle the error, but something went wrong. Pedestal will start looking for a handler for this new exception. In that last case, Pedestal keeps track of the exceptions that were overridden. These are in a seq bound to :io.pedestal.interceptor.chain/suppressed in the context map. Most commonly, the interceptor will return the context map with a :response map; this will trigger normal response processing by invoking any remaining interceptors' :leave functions. As a convenience, Pedestal offers a macro to build error-handling interceptors that use pattern-matching to dispatch. error-dispatch builds interceptors that use core.match to select a clause. Here is an example from the test suite: (def service-error-handler (1) (error-dispatch [ctx ex] (2) [{:exception-type :java.lang.ArithmeticException :interceptor ::another-bad-one}] (assoc ctx :response {:status 400 :body \"Another bad one\"}) (3) [{:exception-type :java.lang.ArithmeticException}] (assoc ctx :response {:status 400 :body \"A bad one\"}) (4) :else (assoc ctx :io.pedestal.interceptor.chain/error ex))) ,,, (def routes (route/expand-routes #{[\"/v1/api\" :any [service-error-handler ,,,]]})) (5) 1 This macro returns code that evaluates to an interceptor. Binding it to a var is the normal use. 2 This is a pattern match that looks for an ArithmeticException, but only thrown by a particular interceptor. If the pattern matches, this expression gets evaluated. The error is handled and a response attached. 3 Another pattern match expression, matching any ArithmeticException s that weren’t matched before. We return a different response body in these cases. 4 :else always matches because it is a truthy value. Reattaching the error tells Pedestal to keep looking for a handler. 5 We use the resulting interceptor like any other. Pattern matching is a concise way to express conditions for handling an error. For HTTP, the Servlet Interceptor provides the \"last ditch\" error handlers that log the error and return an error response. In development mode, they emit a stack trace as the response body; you will see the error logged from the :io.pedestal.http.impl.servlet-interceptor/stylobate [1] interceptor. The error logged by the \"last ditch\" error handler includes the context map. This is often quite large and may contain data you do not wish to log. While having defaults is nice, it is highly recommended that services implement their own error handling/logging. This gives you full control over how errors are processed. 1. Stylobate is the term for a supporter of columns in classic Greek and Roman architecture; here the interceptor is providing support to the rest of Pedestal.","title":"Error Handling","component":"pedestal","version":"0.6","name":"error-handling","url":"/pedestal/0.6/reference/error-handling.html","titles":[{"text":"Error Function","hash":"_error_function","id":1},{"text":"Error Dispatch Interceptor","hash":"_error_dispatch_interceptor","id":2},{"text":"Error Handling and Logging","hash":"_error_handling_and_logging","id":3}]},"143":{"id":143,"text":"The following table lists the container options supported by Immutant. Key Value type Description :ssl-port Integer Port to use for TLS listener. Defaults to 443 and implies :ssl?. :keystore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. :key-password String Used for TLS. Keystore password. :trusstore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. :truststore-password String or java.security.Keystore Used for TLS. Trusstore password. Required if :truststore specified. :client-auth String Used for TLS. SSL client certificate authenticate, either :want or :need. :ssl-context javax.net.ssl.SSLContext Used for TLS. A valid javax.net.ssl.SSLContext. :key-manageers javax.net.ssl.KeyManager[] Used for TLS. A valid javax.net.ssl.KeyManager[]. :trust-managers javax.net.ssl.TrustManager[] Used for TLS. a valid javax.net.ssl.TrustManager[]. :http2? Boolean Used for TLS. Whether to enable HTTP/2 support. :io-threads Integer Tuning option. The number of threads handling IO. Defaults to the number of available processors. :worker-threads Integer Tuning option. The number of threads invoking handlers. Defaults to (* io-threads). :buffer-size Integer Tuning option. Defaults to 16k. :buffers-per-region Integer Tuning option. Defaults to 10. :direct-buffers? Boolean Tuning option. Defaults to true. :ajp-port Integer Apache JServ Protocol listener. :configuration io.undertow.Undertow$Builder instance Used to create the Undertow server. Reference: Immutant options documentation.","title":"Immutant","component":"pede
1stal","version":"0.6","name":"immutant","url":"/pedestal/0.6/reference/immutant.html","titles":[{"text":"Container Options","hash":"_container_options","id":1}]},"144":{"id":144,"text":"The major parts of Pedestal are isolated via Clojure protocols. The protocols are for internal structure and external extension. This reference identifies the most important protocols in Pedestal’s structure and how you might use them in an application. IntoInterceptor allows pretty much anything to become an interceptor when needed. Routers use this when building routes: anything that satisfies IntoInterceptor is legal to use in the interceptor vector of a route. This protocol also comes into play when appending new interceptors to the queue. Pedestal extends IntoInterceptor onto a variety of Clojure and Java types. See the interceptors reference for details of their behaviors. These protocols break up the lifecycle of routes and allow both extension points and alternative strategies in several places. Over time, Pedestal has evolved several data structures for representing routing of HTTP requests; each of these data structures is a kind of routing specification. The routing specification ultimately expresses which details of an incoming request, such as HTTP method or URI path, are used to find a specific route (and the interceptors and handler for that route). In parallel to the data structures, Pedestal has several algorithms for using the routing specification to dispatch an incoming request; some algorithms may be most efficient for small services with very few routes, others are better for large services with more (and more complex) routes. The protocols described here are what allow the individual pieces to cooperate; this also means that it is possible to define an application-specific routing specification format and use it with a Pedestal-supplied algorithm, or use any of the built-in routing specifications combined with an application-specific algorithm. The combination of routing specification with a routing algorithm results in an instance of the Router interface. The Router protocol defines just one function: find-route. find-route is passed the Router itself and a request map, and must return the route map for the route that it matched. The route map not only identifies the interceptors and handler to add to the interceptor queue, but further captures path variables that may be part of the matched URL (further details TBD). An instance of Router is returned by the router constructor identified in the application’s service map by the key :io.pedestal.http/router. ::http/router Value Constructor :linear-search Linear Search Router :prefix-tree Prefix Tree Router :map-tree Map Tree Router application-supplied function The function itself, called with sequence of routes as returned by from the RouterSpecification instance Whether built-in, or supplied by the application, the constructor is just a function that is passed an expanded route specification, and returns an instance of Router. The RouterSpecification protocol is used to create a routing interceptor from some definition of routes, and a single Router. This is the final step in the process of turning a routing specification into a routing interceptor. Whatever is returned from the router-spec function of the protocol must be an interceptor. The returned interceptor will include an :enter function that must accept a context map and enqueue interceptors based on whatever criteria it chooses. ExpandableRoutes can convert all kinds of data structures representing a routing specification into a single canonical format that can be used to construct a Router. This occurs inside the expand-routes function. Pedestal provides implementations of ExpandableRoutes for several types: Type Interpretation clojure.lang.APersistentVector Terse Syntax clojure.lang.APersistentMap Verbose Syntax clojure.lang.APersistentSet Table Syntax Since the call to expand-routes comes from application code, it would be rare for an application to need to extend ExpandableRoutes. The result of expand-routes is a seq of maps that will be passed to the Router. This protocol applies to anything that can be in the :body key of a response map. The two functions in the protocol tell Pedestal what content type the body implies, and how to serialize the body to an output stream. Pedestal extends this protocol to several Java and Clojure types to produce the behavior detailed in Response Bodies. Applications should not assume any output stream type more specific than java.io.OutputStream. This protocol is a more specific version of WritableBody. If the value in the :body key of a response map satisfies WritableBodyAsync, then Pedestal treats it as a streaming result. See Streaming Responses for full details. It would be rare for an application to extend this protocol. Most of the time, an application would be better off providing an NIO channel or a core.async channel in the response body.","title":"Important Protocols","component":"pede
1stal","version":"0.6","name":"important-protocols","url":"/pedestal/0.6/reference/important-protocols.html","titles":[{"text":"Interceptor Protocols","hash":"_interceptor_protocols","id":1},{"text":"IntoInterceptor","hash":"_intointerceptor","id":2},{"text":"Routing Protocols","hash":"_routing_protocols","id":3},{"text":"Router","hash":"_router","id":4},{"text":"RouterSpecification","hash":"_routerspecification","id":5},{"text":"ExpandableRoutes","hash":"_expandableroutes","id":6},{"text":"Servlet Protocols","hash":"_servlet_protocols","id":7},{"text":"WritableBody","hash":"_writablebody","id":8},{"text":"WritableBodyAsync","hash":"_writablebodyasync","id":9}]},"145":{"id":145,"text":"","title":"Reference","component":"pedestal","version":"0.6","name":"index","url":"/pedestal/0.6/reference/index.html","titles":[]},"146":{"id":146,"text":"See the guide This is the detailed interceptor reference; if you are new to Pedestal you may want to start with the What Is An Interceptor Guide. Interceptors are the basic unit of work in Pedestal. The core library provides interceptors that are generally useful for creating HTTP web services. Applications augment those with their own logic to handle. An interceptor is a pair of unary functions [1] An interceptor must provide at least one of :enter, :leave and :error. Each function is called with a context map and must return either a context map or a core.async channel that will deliver a context map; the latter case triggers asynchronous request processing. Pedestal calls the :enter function on the way \"in\" to handling a request. It calls the :leave function on the way back \"out\". This is shown here for a single interceptor: Either the :enter or :leave function may be omitted without harm. Logically speaking, interceptors form a queue. During the :enter phase, the next interceptor is popped off the queue, pushed onto the leave stack, and it’s :enter function, if any, is executed. Once the handler (or other interceptor) adds a :response to the context, the chain logic switches to :leave mode: it pops interceptors off the leave stack and invokes the :leave function, if any. Because it’s the leave stack the :leave functions are invoked in the opposite order from the :enter functions. Both the queue and the stack reside in the context map. Since interceptors can modify the context map, that means they can change the plan of execution for the rest of the request! Interceptors are allowed to enqueue more interceptors to be called, or they can terminate the request. This process, of running all the interceptor :enter functions, then running the interceptor :leave functions, is called executing the interceptor chain. Interceptors expect certain keys to be present in the context map. These context bindings are part of the contract between provider and interceptors. The most important keys are :request, which holds the request map, and :response, which holds the response map. Further keys are described in the context map reference. Interceptor functions must return values. Returning nil will cause an internal server error. An :enter or :leave function may return a context map directly. In this case, processing continues with the next interceptor. If the interceptor is expected to take a long time to return a result, it may instead return a core.async channel. Pedestal will yield the request processing thread and wait for a value to be produced. Only one value will be consumed from the returned channel, and the value must be a context map. Chaining With Async Interceptors Any interceptor downstream of an asynchronous interceptor will be executed in the core.async dispatch thread pool. This can be problematic if any later interceptor or handler performs any blocking I/O, as the thread pool is a fixed size. Generally speaking, if any interceptor is asynchronous, all following non-trivial interceptors should also be asynchronous. Trivial interceptors do short computations or make changes to the context map; they do not perform any I/O or other operations that could block the thread they execute on, such as any file or socket I/O. When an interceptor returns a channel, the request processing thread can be returned to the servlet container. This may allow another pending request to be processed while the initial request is parked, waiting for the channel returned by an interceptor to convey the new context map. The protocol IntoInterceptor represents anything that can be used as an interceptor. Pedestal extends that protocol to the following: Type Interpretation Map The :enter, :leave, and :name keys are used directly. Function The function is interpreted as a \"handler\". See Handlers. List The list is evaluated and its result is used as an interceptor. [2] Cons Same as List Symbol The symbol is resolved and its target is converted to an interceptor. Var The var is de-referenced and its value is converted to an interceptor. Most of these cases are provided to make routing syntax easier. Applications should mainly use the map form as shown in the earlier examples when defining interceptors for routing purposes. The queue of interceptors remaining to execute is held in the context map. This means that an interceptor can enqueue other interceptors to be executed. In fact, this is exactly how rout
1ing works, the router is an interceptor that matches requests and enqueues the desired interceptors when a route matches. Use enqueue to push more interceptors onto the queue. Use terminate if processing should not continue - though normally, this is accomplished by attaching a :response map (the response map) to the context map. Interceptor Records Interceptors that are explicitly enqueued by the application must be defined using the interceptor function. This function takes a value which extends the IntoInterceptor protocol, and returns an Interceptor record. This is not necessary when constructing interceptors used in routing because interceptor representations are transformed to Interceptor records during route expansion. It’s worth noting that when an interceptor queues additional interceptors for execution, they execute after all interceptors already in the queue (not immediately after the interceptor that modified the queue). This means you could, for example, put a routing interceptor first in the queue, then a few interceptors that provide behavior common to all routes, and those common interceptors will run before any route-specific interceptors. A handler function is a special case of an interceptor. Pedestal treats the handler as a function that takes a request map and returns a response map. A handler does not have access to the full execution context, therefore, it cannot manipulate the interceptor queue. Because a handler takes one kind of thing (request) and returns a different kind of thing (response), it can only be used in the last position of a stack. Handlers are always synchronous; they must return a response map, not a channel that delivers a response map. Pedestal supports defining interceptor-specific error handlers via the :error key. Refer to the Error Handling reference for more details. The pedestal-service library includes a large set of interceptors that are specialized for HTTP request handling. See the following namespaces for stock interceptors: io.pedestal.http.body-params io.pedestal.http.content-negotiation io.pedestal.http.cors io.pedestal.http.csrf io.pedestal.http.ring-middlewares See the following namespaces for routing interceptors: io.pedestal.http.route io.pedestal.http.route.router 1. An optional third function is used for error handling. 2. This is supported behavior related to the table router syntax, but is no longer commonly used.","title":"Interceptors","component":"pedestal","version":"0.6","name":"interceptors","url":"/pedestal/0.6/reference/interceptors.html","titles":[{"text":"Context Bindings","hash":"_context_bindings","id":1},{"text":"Interceptor Return Values","hash":"_interceptor_return_values","id":2},{"text":"IntoInterceptor","hash":"_intointerceptor","id":3},{"text":"Manipulating the interceptor queue","hash":"_manipulating_the_interceptor_queue","id":4},{"text":"Handlers","hash":"_handlers","id":5},{"text":"Error Handling","hash":"_error_handling","id":6},{"text":"Pedestal Interceptors","hash":"_pedestal_interceptors","id":7}]},"147":{"id":147,"text":"Jetty 9 is the default container used with Pedestal 0.6. The following table lists the container options supported by Jetty. Key Value type Description :daemon? Boolean Use daemon threads. Defaults to false. :max-threads Integer The maximum number of threads to use. Defaults to 50. :reuse-addr? Boolean Reuse the socket address. Defaults to true. :thread-pool A ThreadPool instance. Override the Jetty thread pool (ignores max-threads) :configurator Function A function called with the org.eclipse.jetty.server.Server instance. Expected to return the Server instance. Use when advanced customization is required. :context-configurator Function A function called with the org.eclipse.jetty.servlet.ServletContextHandler instance. Use when advanced customization is required. :ssl? Boolean Allows connections over HTTPS. :ssl-port Integer Port to use for TLS listener. Defaults to 443 and implies :ssl?. :h2c? Boolean HTTP/2 cleartext support. Allows upgrading connections from HTTP/1.1 to the Http/2 protocol. Defaults to true. When true, :port must be specified. HTTP/2 versioning, Jetty HTTP/2 documentation. :h2? Boolean HTTP/2 TLS support. When true, :ssl-port must be specified. HTTP/2 versioning, Jetty HTTP/2 documentation. :connection-factory-fns Vector of Functions A vector of functions that take the options map and an org.eclipse.jetty.server.HttpConfiguration instance and return an org.eclipse.jetty.server.ConnectionFactory instance. Ap
1plies only to the SSL connection. :ssl-context-factory An SslContextFactory instance. The SSLContextFactory instance to use when creating the server. If specified, :key-password, :keystore, :truststore, :trust-password, :security-provider, :client-auth are ignored. :keystore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :key-password String Used for TLS. Keystore password. Not used if :ssl-context-factory is set. :truststore String or java.security.Keystore Used for TLS. Path to keystore file or a java.security.Keystore instance. Not used if :ssl-context-factory is set. :trust-password String Used for TLS. Trust store password. Not used if :ssl-context-factory is set. :client-auth String SSL client certificate authenticate, may be set to :need, :want or :none. Defaults to :none. :security-provider String Java Security Provider name. Refer to the Jetty ConfiguringSSL/TLS documentation. Not used if :ssl-context-factory is set. :io.pedestal.http.jetty/http-configuration An HttpConfiguration instance. The HttpConfiguration instance to use when creating the server. Use when advanced customization is required. The default HttpConfiguration is listed below. The default HttpConfiguration is: SendDateHeader is set to true SendXPoweredBy is set to false SendServerVersion is set to false An instance of org.eclipse.jetty.server.SecureRequestCustomizer is added via addCustomizer When :ssl?, :ssl-port or h2? is provided, securePort is set to the value of :ssl-port and secureScheme is set to \"https\".","title":"Jetty 9","component":"pedestal","version":"0.6","name":"jetty","url":"/pedestal/0.6/reference/jetty.html","titles":[{"text":"Container Options","hash":"_container_options","id":1},{"text":"Default HttpConfiguration","hash":"_default_httpconfiguration","id":2}]},"148":{"id":148,"text":"Provides the user with the most control over routing outside of implementing a custom router. You require precise control over routing and the routing performance tradeoff is acceptable to your service. Add the key :io.pedestal.http/router to the service map with the value :linear-search. This implementation routes requests in linear time, so it’s the simplest and slowest of Pedestal’s router implementations. Pedestal’s first router implementation. Query and path constraints are used in routing decisions unlike the Prefix Tree Router or Map Tree Router.","title":"Linear Search Router","component":"pedestal","version":"0.6","name":"linear-search-router","url":"/pedestal/0.6/reference/linear-search-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5}]},"149":{"id":149,"text":"Pull requests welcomed!","title":"Logging","component":"pedestal","version":"0.6","name":"logging","url":"/pedestal/0.6/reference/logging.html","titles":[{"text":"Placeholder","hash":"_placeholder","id":1}]},"150":{"id":150,"text":"Many Pedestal-based services do not leverage every routing feature. The Map Tree router is optimized for the static routes use case. Routes requests in constant time (path matching is done by map lookup). No need to do anything. This is Pedestal’s default router implementation. While this is Pedestal’s default router, it falls back to the Prefix Tree Router when path parameters or wildcards are used in routes. Like the Prefix Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #422","title":"Map Tree Router","component":"pedestal","version":"0.6","name":"map-tree-router","url":"/pedestal/0.6/reference/map-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"151":{"id":151,"text":"You can think of metrics as a stream of tiny, time-stamped events, that flow into a special kind of database, organized to efficie
1ntly query such a stream, and aggregate the results in multiple useful ways. A full explanation of metrics is beyond the scope of this document, however. Metrics are a key part of observability, the ability to see how your application, running as tens or hundreds (or thousands) of servers, is operating as a whole. Where logging can give you information about a specific request, and can somewhat grudgingly aggregate data together - metrics services such as Prometheus exist to aggregate vast amounts of data points together, and give you the ability to see what’s happening to your application now, or over time, broken up by any number of dimensions. Dimensions are used to select events by application-supplied values, that can include such things as the server’s hostname, a request’s URI, the environment (staging vs. production), or the AWS region. At the core, your application will include extra code to emit metrics; depending on the underlying metrics service you are using, these are either stored in-memory until scraped by another collecting service, or pushed to the collecting service at intervals. Pedestal’s default metrics library is DropWizard, and the default configuration stores the results internally in JMX. The metrics functions are defined in the io.pedestal.log namespace, along with supporting protocols and utility functions. Generally, there is no need to define a metric before using it; it will be registered or created, from its name, automatically when first used. All of these metrics-producing functions have two forms: the canonical form accepts a recorder, the metric name, and additional arguments; the common form omits the recorder, and uses the default-recorder. A metric name can be any object that can be converted to a string; usually a fully qualified symbol or keyword. For a keyword, the leading : stripped off. Counters are simply values that increase over time; the argument is a delta value, a long to increment the counter by. A common counter metric might be the total number of requests processed. Gauges are used to track a value that varies over time; a callback function is passed to the gauge function; this callback will be periodically invoked to return a value for the metric. A common gauge metric might be the number of entries stored in a cache. A histogram is somewhat like a gauge; it’s a value that varies over time. The difference is, you supply the values (there isn’t as callback) and the metrics that are produced are broken out in a number of ways: by min, max, mean, median, standard deviation, and by various percentiles. A common histogram metric might be the latency of database reads or updates. Meters are used to track the rate at which operations occur. meter is much like counter, it is invoked with a value indicating how many operations occurred (this value is typically 1). It produces moving averages for the one-, five-, and fifteen-minute rates based on sampling this value. A common meter might be the number of total number of requests processed. This is a var, not a function; it stores a recorder, an object that extends the MetricRecorder protocol; this is usually an instance of com.codahale.metrics.MetricRegistry. By default, the registry is created via metric-registry, and uses a jmx-reporter to store metrics. However, this can be overridden at application startup; the JVM system property io.pedestal.log.defaultMetricsRecorder or environment variable PEDESTAL_METRICS_RECORDER can specify the fully-qualified name of a function to invoke (with no arguments), that returns the default recorder.","title":"Metrics","component":"pedestal","version":"0.6","name":"metrics","url":"/pedestal/0.6/reference/metrics.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"API","hash":"_api","id":2},{"text":"counter","hash":"_counter","id":3},{"text":"gauge","hash":"_gauge","id":4},{"text":"histogram","hash":"_histogram","id":5},{"text":"meter","hash":"_meter","id":6},{"text":"default-recorder","hash":"_default_recorder","id":7}]}
1,"152":{"id":152,"text":"HTTP allows clients to provide per-request information through several mechanisms: The request URL Query parameters appended to the URL Body content Various interceptors in Pedestal parse this information and attach it to the request map. Some of these interceptors are provided automatically by the Servlet Interceptor. Others require application-specific information and must be created by application code. The built-in routers all know how to extract query parameters from URLs in requests. Any kind of request (i.e., any HTTP verb) can supply query parameters. Query parameters will be attached to the request map under the key :query-params. The value will be a map, constructed as follows: Each query parameter name becomes a key in the map. The query parameter name is URL-decoded. If the resulting string could be a Clojure keyword, it is converted to a keyword. Otherwise, the string itself becomes the key. The query parameter value is URL-decoded and attached as the value of that key. For example, a request string like this: /path/to/resource?after=123123%2099 Becomes the map: {:after \"123123 99\"} Whereas, the request string: /path/to/resource?after:page=12&after:storyid=abc123XYZ&user%20id=99 Becomes the somewhat weird map: {:after:page \"12\" :after:storyid \"abc123XYZ\" :user id \"99\"} The odd-looking keywords :after:page and :after:storyid are legal Clojure keywords, but definitely not an idiomatic usage. The keyword :user id is even more unusual. Clojure keywords can include spaces, but the Clojure reader cannot parse a keyword literal with spaces in it. Query parameters are also merged into the :params map inside the request map. Query parameters are a feature of the built in routers. If you supply your own router, it may or may not support query parameters. URL templating is popular with resource-oriented APIs. These use segments of the URL, in lieu of query parameters, to supply identifiers. Pedestal calls these \"path parameters\". They are parsed from the URL and bound to the :path-params map in the request map. Path parameters are always named by a keyword, which is taken from the URL fragment in the route. For example: URL Path param keys /users none /users/:id :id /users/:id/posts/:post :id, :post In every case, the value of the parameter is a string, taken from the corresponding segment of the URL. Path parameters are a feature of the built in routers. If you supply your own router, it may or may not support path parameters. Pedestal can parse form data, JSON, EDN, and Transit data from request bodies. The parsed information is called \"body parameters.\" Applications can also provider their own parsers for body parameter data. Different routes may use different body parameter formats. For these reasons, Pedestal does not automatically provide an interceptor for body parameters. Instead, your application must add an interceptor to routes. The interceptor is created by the body-params function. Without any arguments, it returns an interceptor that parses according to the request’s Content-Type header: Content type Parsed as Coerce keys to keywords? Bound to in request Merged into :params application/x-www-form-urlencoded HTML form Yes :form-params [1] Yes [2] application/json JSON Yes :json-params No application/transit+json Transit JSON encoding No :transit-params No application/transit+msgpack Transit Msgpack encoding No :transit-params No application/edn EDN data No :edn-params No If the request has any other content type, the body will not be altered and the request map will not be changed. That includes a nil content type if the request just doesn’t have a Content-Type header. If you need to customize the way body-params handles content types, or provide options to the built-in parsers, call it with a parser-map as an argument. You can get a good starting point by calling default-parser-map. File upload is a special case of a request body. The request will have a multipart body with separate encoding for each. In this case, use an interceptor returned by the multipart-params function. Use the :store option to persist the parts. Browsers (especially older ones) do not have easy ways to handle DELETE and PUT requests. Pedestal allows requests to \"smuggle\" a verb through a query parameter. If the magic query parameter _method is present, then its value will be used as the HTTP verb for this request. This substitution is handled by the default interceptor method-param. It occurs before routing, so you can use the correct verb
1s in your routes. Application code can generate links with verb smuggling via the :method-param option to url-for-routes. 1. :form-params keys are automatically converted to keywords. 2. Form parameter keys are not automatically converted to keywords when merged into the :params map. Use the keywordize-params interceptor to convert :params keys to keywords.","title":"Parameters","component":"pedestal","version":"0.6","name":"parameters","url":"/pedestal/0.6/reference/parameters.html","titles":[{"text":"Query Parameters","hash":"_query_parameters","id":1},{"text":"Path Parameters","hash":"_path_parameters","id":2},{"text":"Body Parameters","hash":"_body_parameters","id":3},{"text":"File Upload","hash":"_file_upload","id":4},{"text":"The Method Parameter","hash":"_the_method_parameter","id":5}]},"153":{"id":153,"text":"Provide a performant router which is efficient in time and space. The implementation is modeled after httprouter, a library for Go. Most performant builtin router implementation when dynamic routes (those using path parameters and wildcards) are required. The prefix tree router operates in logarithmic time. Add the key :io.pedestal.http/router to the service map with the value :prefix-tree. Provides less control over routing. For example, Wild card routes always win. The path /foo/:bar will always match over /foo/baz. Like the Map Tree Router, query and path constraints are not used in routing decisions. They are only used to invalidate a route match. Pedestal PR #310","title":"Prefix Tree Router","component":"pedestal","version":"0.6","name":"prefix-tree-router","url":"/pedestal/0.6/reference/prefix-tree-router.html","titles":[{"text":"Motivation","hash":"_motivation","id":1},{"text":"Why use it?","hash":"_why_use_it","id":2},{"text":"How to use it?","hash":"_how_to_use_it","id":3},{"text":"Caveats","hash":"_caveats","id":4},{"text":"Additional Notes","hash":"_additional_notes","id":5},{"text":"References","hash":"_references","id":6}]},"154":{"id":154,"text":"The request map is attached to the context map before the first interceptor is invoked. The request map describes the incoming HTTP request, including information about the remote endpoint. Pedestal does not attach metadata to the request map. When processing, take care to modify the map (e.g., use assoc), rather than constructing a new map entirely. Interceptors may add arbitrary keys to the request map, and the interceptors' functionality may depend on getting stored values back out of the request map. Pedestal uses an extended version of the Ring request specification. Key Always Present? Type Description :async-supported? Y boolean True if this request supports asynchronous operation :body Y ServletInputStream The body of the request. May be a zero-length stream. :content-type N String Present if sent by client [1]. Content type of the request body. :content-length N Long Present if sent by client. Content length of the request body. :character-encoding N String Present if sent by client. Character encoding applicable to request body. :edn-params N Any Present if the body-params interceptor is used and the client sent content type \"application/edn\" :form-params N Map of Keyword → String Present if the body-params interceptor is used and the client sent content type \"application/x-www-form-urlencoded\". Some keys may be left as strings, if they contain characters that would make them invalid as Clojure keywords. :headers Y Map of String → String Request headers sent by the client. Header names are all converted to lower case. :json-params N Map of Keyword → Any [2] Present if the body-params interceptor is used and the client sent content type \"application/json\" :params N Map of Keyword or String → String or Keyword → String More info: Parameters. :path-info Y String Request path, below the context path. Always at least \"/\", never an empty string. :path-params N Map of Keyword → String Present if the router found any path parameters. :protocol Y String Name and version of the protocol with which the request was sent :query-params N Map of Keyword → String Present if the api:default interceptors[ns=io.pedestal.http.route].) :query-string Y String The part of the request’s URL after the '?' character. :remote-addr Y String IP Address of the client (or the last proxy to forward the request) :request-method Y Keyword The HTTP verb used to make this request, lowercased and in keyword form. For example, :get or :post. For :put and :delete request methods, this may be \"smuggled\" in via a query parameter :_method. (Performed by the method-param interceptor. :server-name Y String Host name of the server to which the request was sent :server-port Y int Port number to which the request was sent :scheme Y String The name of the scheme used to make this request, for example, http, https, or ftp. :ssl-client-cert N java.security.cert.X509Certificate[] Present if sent by client. Array of certificates that identify the client. :transit-params N Any Present if the body-params interceptor is used and the client sent content type \"application/transit+json\" or \"application/transit+msgpack\" :uri Y String The part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request 1. May not be set automatically by some chain providers (i.e., such as the AWS API Gateway provider). 2. Based on the coercion of any valid JSON data type","title":"Request Map","component":"pede
1stal","version":"0.6","name":"request-map","url":"/pedestal/0.6/reference/request-map.html","titles":[]},"155":{"id":155,"text":"This reference describes how the Servlet Interceptor handles response bodies of various types. Much of this behavior depends on the protocols WritableBody and WritableBodyAsync. See Important Protocols for details about those. The exact handling of the response body depends on the Java or Clojure type of the value in the :body key of the response map. Type Default content type Serialization Async? byte array application/octet-stream direct byte copy no string text/plain bytes according to platform’s default character encoding no Clojure collection application/edn text representation of data, same as Clojure’s writer no Clojure function nil depends on the function no File application/octet-stream bytes of the file copied to the output stream no InputStream application/octet-stream bytes of the input stream copied to the output stream no ReadableByteChannel (NIO) application/octet-stream bytes of the channel copied to the output stream yes ByteBuffer (NIO) application/octet-stream bytes of the buffer copied to the output stream yes core.async channel nil see below yes When a core.async channel delivers a message, that message is written to the stream, using any of the synchronous dispatches above. The message from the channel must not be another channel, it must be a value that can be immediately acted upon.","title":"Response Bodies","component":"pedestal","version":"0.6","name":"response-bodies","url":"/pedestal/0.6/reference/response-bodies.html","titles":[]},"156":{"id":156,"text":"The response map is attached to the xref:context-map.adoc by any interceptor in the interceptor chain. The response map describes the outgoing HTTP response. If no response map is attached to the context by the time processing is done or if the attached response map is not valid Pedestal generates a 404 response. Key Always Present? Type Description :status Y integer The HTTP status code :headers N map of String → String Response headers sent to the client. Header names are all converted to lower case. :body N String, ISeq, File, InputStream The body of the response sent to the client. Application code that returns a header should use the proper case version of the header, for example, Content-Type (not content-type); although incoming request headers are converted to lower case, outgoing response headers are left as-is, and some standard interceptors expects certain headers to be present with the correct name (such as Content-Type). Response validity has different semantics depending on the Pedestal layer in question. Pedestal’s core HTTP processing layer only requires the :status key for a response to be considered valid. This is the semantic used by the default not-found interceptor. Meanwhile, Pedestal’s lower-level servlet-specific termination check abides by the Ring response specification, requiring :status and :headers keys with valid values.","title":"Response Map","component":"pedestal","version":"0.6","name":"response-map","url":"/pedestal/0.6/reference/response-map.html","titles":[{"text":"Response Validity","hash":"_response_validity","id":1}]},"157":{"id":157,"text":"The library io.pedestal.http.route namespace provides the core components to express routes and construct routers. It can be used independently of the pedestal-service library. Routing is the process of recognizing an incoming request, and matching it to a particular behavior. A route identifies a particular request path and request method (such as :get or :post) and identifies corresponding behavior in terms of a handler function, or a list of interceptors to execute. Route specifications are the data values that spell out the possible routes. Routers are built from route specifications, and apply a specific strategy to match incoming requests to the provided routes; there are a few different built-in Router implementations, with different limitations and trade-offs. The routing interceptor builds on a router to dispatch incoming requests to routes defined by the route specification. It identifies the route matching the incoming request and queues up route-specific interceptors to handle the request. Generally, all of this is automatic; an application provides a route specification in the :io.pedestal.http/route key of the service map (and perhaps a value for :io.pedestal.http/router) and a routing interceptor is automatically created. Route specifications go through a series of transformations that results in a routing table;
1 a routing table is a sequence of verbose routing maps. The expand-routes function converts any kind of specification into a routing table: Argument to expand-routes Syntax used Set Table Syntax - most recent and straight forward; trades some redundancy for simplicity, and is recommended in most cases. Vector Terse Syntax - improvement on the verbose syntax, with an emphasis on avoiding redundancy. Map Verbose Syntax - oldest format. This mapping from value type to specification type is the responsibility of the ExpandableRoutes protocol, which is extended on Map, Set, and Vector. To support a new syntax, come up with a syntax that resolves to new record type that implements the ExpandableRoutes protocol. The expanded routing table is a list of maps, each with the following structure: {:route-name :org.example.app/new-user :app-name :example-app ; optional :path \"/user/:id/*blah\" ; like Ruby on Rails ; (catch-all route is \"/*path\") :method :post ; or :any, :get, :put, ... :scheme :https ; optional :host \"example.com\" ; optional :port \"8080\" ; optional :interceptors [...] ; vector of interceptors to be enqueued on the context ;; Generated for path-matching: :path-re #\"/\\Quser\\E/([^/]+)/(.+)\" :path-parts [\"user\" :id :blah] :path-params [:id :blah] :path-constraints {:id \"([^/]+)\" :blah \"(.+)\"} :query-constraints {:name #\".+\" :search #\"[0-9]+\"} } :route-name must be unique; typically it is a qualified keyword to ensure uniqueness. The keys :path-re, :path-parts, :path-params, and :path-constraints are derived from the :path. This is part of what the expand-routes function is responsible for. Users will not generally write routes directly in verbose format. Pedestal includes several Routers; this reflects not only the evolution of the Pedestal library, but also allows for different trade-offs in the algorithm used by each Router. In rare cases, an application can provide its own Router rather than use one of Pedestal’s. When your application starts a Pedestal service with create-servlet or create-server, Pedestal creates a router, using the following keys from the service map: Key Meaning :io.pedestal.http/routes A route specification :io.pedestal.http/router Key to select a router, or a function that constructs a router from a routing table When the value of :io.pedestal.http/router is a keyword, it selects one of the built-in algorithms: Keyword Router Performance Scaling in # Routes Limitations :map-tree Map Tree (default) Very fast Constant Applies when all routes are static (no wild cards). Falls back to prefix tree if any routes have path parameters or wildcards. :prefix-tree Prefix Tree High performance, space efficient Log32(N) Wildcard routes always win over explicit paths in the same subtree. E.g., /path/:wild will always match, even if /path/user is defined :linear-search Linear Search Lowest performance O(N) Routes are checked in order. Precedence is precise. When the value of :io.pedestal.http/router is a function, that function is used to construct a router. The function must take one argument: the fully expanded routing table. The constructor function must return a value that satisfies the Router protocol. So the function is passed the routing table and returns a Router for those routes. The Router is supplied with the incoming request, and returns the matching route map (a verbose route map extended with extracted parameters from the path). The function router is where it all comes together; this function is passed the route specification and, optionally, the router type; from that it creates the routing table, and passes that through the correct constructor, obtaining at the end an interceptor that performs routing, which it returns. During request execution, on a successful routing, the following keys are added or updated in the context map: Key / Key Path Value :route The verbose route map :io.pedestal.interceptor.chain/queue route-specific interceptors are queued [:request :path-parameters] Path parameters extracted from the request path On failure, when the router does not match any route, the context key :route is set to nil.","title":"Routing Quick Reference","component":"pede
1stal","version":"0.6","name":"routing-quick-reference","url":"/pedestal/0.6/reference/routing-quick-reference.html","titles":[{"text":"Library","hash":"_library","id":1},{"text":"Route Specifications vs. Routers vs. Routing Interceptor","hash":"_route_specifications_vs_routers_vs_routing_interceptor","id":2},{"text":"Route Specifications","hash":"_route_specifications","id":3},{"text":"Routing Table","hash":"_routing_table","id":4},{"text":"Builtin Routers","hash":"_builtin_routers","id":5},{"text":"Custom Router","hash":"_custom_router","id":6},{"text":"Routing Interceptor","hash":"_routing_interceptor","id":7}]},"158":{"id":158,"text":"The Pedestal service library includes support for Server-Sent Events (SSE). The SSE protocol defines a mechanism for sending event notifications from a server to a client using a form of long polling. However, unlike conventional long polling, SSE does not send each event as a separate response, with an expectation that the client will make a new request in between each one. Rather, SSE sends all its events as part of a single response stream. The stream is kept alive over time by sending events and/or periodic heart-beat data. In the event that the stream is closed for some reason, the client can send a request to re-open it and events notifications can continue. All modern browsers have built in support for SSE via the EventSource API. To define an endpoint that will send SSE, make a route with an interceptor created by start-event-stream. Note that start-event-stream is not itself an interceptor, but rather a function that returns an interceptor. start-event-stream requires a \"ready function.\" The ready function will be called later, when Pedestal has prepared the HTTP response and informed the client that an SSE stream is starting. When a request reaches the SSE interceptor, it will: Pause interceptor execution Send HTTP response headers to tell the client that an event stream is starting Initiate a timed heartbeat to keep the connection alive After that, it will call the ready function with two arguments: a core.async channel for the events and the current interceptor context. The ready function may put events into the channel to send them to the client. Events are maps with keys :name and :data. Both take string values. When the ready function has finished sending events, it should close the channel. Pedestal will then clean up the connection. If a client closes its connection, Pedestal will close the event channel. The next time the ready function tries to put a message into the event channel, the put call will return false. The ready function must detect this and clean up any resources it allocated. Here is an example that shows how an SSE event stream can be used. (defn stream-ready [event-chan context] (dotimes [_ 20] (async/>!! event-chan {:name \"foo\" :data \"bar\"}) (Thread/sleep 1000)) (async/close! event-chan)) (defroutes route-table [[[\"/events\" {:get [::events (start-event-stream stream-ready)]}]]]) When an SSE interceptor starts the event stream, it sends a partial HTTP response to the client. Any downstream interceptors can examine the context map, including the response map. But since the response has already been sent, they cannot alter it. Interceptors that attempt to alter the response (for example, by setting cookies or other headers) will log an exception indicating that the data could not be sent.","title":"Server-Sent Events","component":"pedestal","version":"0.6","name":"server-sent-events","url":"/pedestal/0.6/reference/server-sent-events.html","titles":[{"text":"Making an SSE Interceptor","hash":"_making_an_sse_interceptor","id":1},{"text":"Request Processing","hash":"_request_processing","id":2},{"text":"Ready Function","hash":"_ready_function","id":3},{"text":"Example","hash":"_example","id":4},{"text":"Further Interceptor Processing","hash":"_further_interceptor_processing","id":5}]},"159":{"id":159,"text":"The service map is a blueprint that Pedestal uses to create all the necessary parts to begin processing requests: a service function, server function, chain provider, router, routes, and default set of interceptors. Server vs. Service A server is just the part of the overall system that listens for requests and sends responses; it’s the part most closely tied to your underlying servlet container (Jetty, Tomcat, and so forth). The service runs the show: it’s the server plus everything else: chain provider, the interceptors (including those responsible for routing), and so forth. An application creates the service map and passes it to create-server. The result is a server map that is ready to be started. Keep in mind, however, that this is strictly a convenience function that assembles the parts for you. There are use cases where you would not call create-server, but instead assemble a service function, chain provider, and so forth, directly. Pedestal may add other keys to this map for its own use. Other applications should treat any such keys and their values as implementation details and their behaviour will remain unspecified. In the details below, ::http is an alias to :io.pedestal.http. Key Always present? Type Description ::http/allowed-origins N Function, map, or sequence of strings Determines which origins are allowed for the cors/allow-origin interceptor. See \"CORS\" below. ::http/chain-provider N Function Only assigned when replacing the Servlet Interceptor. Receives the service map, returns an updated with whatever additional pieces the server function expects. (See ::http/type, below.) ::http/container-options N Map Map of options to pass to the container. Each container, such as Jetty 9, defines it own container-specific options. ::http/enable-csrf N Map A settings map to pass to the csrf/anti-forgery interceptor. See CSRF below. ::http/enable-session N Map A settings map to pass to the ring-middlewares/session interceptor. Settings are session-store specific. If non-nil, this interceptor is added. Default is nil. ::http/file-path N String File path used as root by the ring-middlewares/file interceptor. If non-nil, this interceptor is added. Default is nil. ::http/host N String Hostname, e.g., \"localhost\". Passed to the container. Defaults to localhost [1]. ::http/interceptors N Vector Vector of items that satisfy http/default-interceptors. ::http/join? N Boolean If false, do not block the thread that starts the web server. Passed to the container. ::http/method-param-name N Keyword Query string parameter used to set the current HTTP verb. Default is :_method. ::http/mime-types N Map of String → String Mime-types map used by the ring-middlewares/content-type interceptor. Default is {}. ::http/not-found-interceptor N Interceptor Interceptor to use when returning a 404 Not Found response. Default is the http/not-found interceptor. ::http/port N Integer Port for the running server. If nil, Pedestal defaults to port 80 and HTTP. ::http/resource-path N string File path used as root by the ring-middlewares/resource interceptor. If non-nil, the interceptor is added. Default is nil. ::http/router N Keyword or route constructor The router implementation to use. Can be :linear-search, :map-tree :prefix-tree, or a custom router/Router constructor function. Defaults to :map-tree, which falls back to :prefix-tree. ::http/routes Y Function, ExpandableRoutes, or sequence of maps Something that satisfies the route/expand-routes as the full route map contains some redundancies to make processing easier which expand-routes adds automatically. ::http/secure-headers N map of keyword → string A settings map for various secure headers. See \"Secure Headers\" below ::http/service-fn N function A function which can be used as an implementation of the javax.servlet.Servlet.service method. The function is defined by http/create-server. ::http/servlet N javax.servlet.Servlet Present if the servlet is running. ::http/start-fn N function Zero-arity function that starts the server. ::http/stop-fn N function Zero-arity function that stops the server. ::http/type Y Keyword or Function Container for service or server function. As a keyword, names the container - currently, only :jetty is supported out of the box. As a function, acts as the server function. If the ::http/allowed-origins key is non-nil, the allow-origin interceptor is added. The default is nil. The allowed values are: a function of one argument that returns a truthy value when an origin is allowed; a map containing the following keys and values :allowed-origins sequence of strings or a function, :creds boolean indicating whether the client is allowed to send credentials, :max-age a long indicating the number of seconds a client should cache the response, and :methods, indicating the accepted HTTP methods, defaulting to \"GET, PO
1ST, PUT, DELETE, HEAD, PATCH, OPTIONS\"; a sequence of strings matching the the scheme, host and port (scheme://host:port) of allowed origins. When a value for ::http/enable-csrf is present, the anti-forgery interceptor is added to the queue. This implies that support for HTTP sessions are enabled (Pedestal will add the necessary interceptor automatically). The value must be a map with the following keys: Key Value type Description :read-token Function This function takes a request and returns an anti-forgery token or nil if the token does not exist. :cookie-token any truthy value for CSRF double-submit cookies :error-response Function This function takes the response body and returns a 403 Not Authorized response :error-handler Function This function takes the context and returns the appropriate response. Only one of :error-response or :error-handler may be specified. When the ::http/secure-headers value is present and non-nil, the secure-headers/secure-headers interceptor is added. If the key is simply not present in the service map, then a set of default secure headers will be provided: Key HTTP Header Content :hsts-settings Strict-Transport-Security \"max-age=31536000; includeSubdomains\" :frame-options-settings X-Frame-Options \"DENY\" :content-type-settings X-Content-Type-Options \"nosniff\" :xss-protection-settings X-XSS-Protection \"1; mode=block\" :download-options-settings X-Download-Options \"noopen\" :cross-domain-policies-settings X-Permitted-Cross-Domain-Policies \"none\" :content-security-policy-settings Content-Security-Policy \"object-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;\" If the value for ::http/secure-headers is present, it may contain keys and string values for the security headers. Any other keys will be ignored. 1. localhost is a safe default and works with local testing, as your test code will be on the same host as the server. However, only connections originating on the local host will be accepted. For production deployments, however, you will usually set this to be 0.0.0.0, which accepts connections from anywhere. This is especially true when running Pedestal inside a Docker container, as all connections (even those from the host, or from another container on the same host) will be network, not localhost, connections.","title":"Service Map","component":"pedestal","version":"0.6","name":"service-map","url":"/pedestal/0.6/reference/service-map.html","titles":[{"text":"Cross-Origin Resource Sharing (CORS)","hash":"_cross_origin_resource_sharing_cors","id":1},{"text":"Cross-Site Request Forgery (CSRF)","hash":"_cross_site_request_forgery_csrf","id":2},{"text":"Secure Headers","hash":"_secure_headers","id":3}]},"160":{"id":160,"text":"As the name implies, the servlet interceptor is both a servlet and an interceptor. It is created when an application calls io.pedestal.http/create-server or io.pedestal.http/create-servlet. When created, the servlet interceptor creates the global interceptor queue, which includes a number of interceptors private to the servlet interceptor, and additional interceptors provided by the application; importantly, the final interceptor will perform routing, which will add route-matched interceptors to the queue. The servlet interceptor is a chain provider that invokes interceptors when an HTTP request arrives. The servlet interceptor performs the following tasks: Sets up the context map and request map Executes the interceptor queue (:enter, then :leave) Catches any exceptions that aren’t handled by Error Handling within the interceptors Writes the final response, using the response map There are a couple of special cases to note. Interceptors may rewrite the interceptor queue by calling functions enqueue and terminate. Interceptors may also change the interceptor queue by directly changing the values of the :io.pedestal.interceptor.chain/stack and :io.pedestal.interceptor.chain/queue in the context map. This should be avoided when possible, as manipulating the stack and queue improperly may have unintended consequences. The queue contains the interceptors to be executed next. The first item in the queue will be the next interceptor considered. When an interceptor’s :enter function is executed, it is removed from the queue and added to the stack. The stack contains the previously executed interceptors that need their :leave functions called. The top of the stack will be considered first. Before invoking the :enter functions, the servlet interceptor sets up a terminator predicate on the context. This predicate is passed the context map and returns a truthy value if execution should transition from :enter to :leave. The default predicate checks to see if the :response context key is present and, if so, is a valid Ring response map; that is, does it have a :status key of type integer, and a :headers key containing a map? The end result is that in some cases, interceptors (including handlers) will not get executed for a particular request. For example, an application that has a concept of authentication may include an interceptor that checks for valid credentials in the request, and adds a :response map to the context when the credentials are missing or invalid. That will cause the response to immediately be sent to the client, bypassing any later interceptors. In addition, it is possible to have more than one termination predicate; if any predicate returns a truthy value, then the :enter execution will terminate. New predicates can be appended using terminate-when. In very rare cases, different interceptors may provide different parts of response. Ultimately, the response must be a valid Ring response, but different interceptors may provide different parts of the response 
1(the :body or certain values in the :headers map). If your application requires this, be very careful about early termination. Put the initial value into the response map in the last :enter function, then use the :leave functions to refine that value. Put the initial value into the context under a different key and refine that value in either :enter or :leave functions. When the response is complete, transfer the response map to the :response key.","title":"Servlet Interceptor","component":"pedestal","version":"0.6","name":"servlet-interceptor","url":"/pedestal/0.6/reference/servlet-interceptor.html","titles":[{"text":"Manipulating the Queue and Stack","hash":"_manipulating_the_queue_and_stack","id":1},{"text":"Early Termination","hash":"_early_termination","id":2},{"text":"Partial Responses","hash":"_partial_responses","id":3}]},"161":{"id":161,"text":"In some cases, you may want to stream large responses back to clients. Streaming uses memory efficiently and can allow you to return a response larger than the service’s memory. It also allows a client to start consuming data as quickly as possible. Streaming responses are a feature of the Servlet Interceptor. It is entirely a function of the type of the body of the response map, i.e., (→ context :response :body type). Type Streamed? Async? Byte array No No String No No Clojure collection No No Function Yes No File Yes No InputStream Yes No ReadableByteChannel Yes Yes ByteBuffer Yes Yes core.async channel Yes Yes Async responses use non-blocking I/O. Not all containers support async responses. When the body is a function, the servlet-interceptor calls that function with a single argument: a javax.servlet.ServletOutputStream. The response status code and headers will already be written to the stream before calling the function. The function should close the stream when it is done. The function’s return value is ignored. The function may run as long as it needs. This will occupy a thread, so consider using a core.async go or thread block. A collection will be rendered into text via clojure.core/pr. This emits a valid EDN encoding of the data. The entire collection will be emitted. This means lazy sequences will be fully realized. Rendering collections is subject to *print-length*, *print-level*, and all other variables that affect clojure.core/pr. When the response body is a channel, every message read from the channel will be sent to the client as it is produced. If the client disconnects, the channel will be closed. Here are some examples of potentially large values that you might want to stream back to clients: the contents of a lazy sequence a file or resource stored on disk a byte stream retrieved from some service, e.g., an image on S3","title":"Streaming Responses","component":"pedestal","version":"0.6","name":"streaming","url":"/pedestal/0.6/reference/streaming.html","titles":[{"text":"Using a Function as the Response","hash":"_using_a_function_as_the_response","id":1},{"text":"Using a Collection as the Response","hash":"_using_a_collection_as_the_response","id":2},{"text":"Using a core.async Channel as the Response","hash":"_using_a_core_async_channel_as_the_response","id":3},{"text":"Uses","hash":"_uses","id":4}]},"162":{"id":162,"text":"Path string Verb. One of :any, :get, :put, :post, :delete, :patch, :options, :head Handler or vector of interceptors (Optional) Route name clause (Optional) Constraint clause (ns myapp.service (:require [io.pedestal.http.route.definition.table :as table])) (def application-routes (table/table-routes {:host \"example.com\" :scheme :https} [[\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, ])) (ns myapp.service (:require [io.pedestal.http.route :as route])) (def application-routes (route/expand-routes #{{:host \"example.com\" :scheme :https} [\"/user\" :get user-search-form] [\"/user/:user-id\" :get view-user :constraints {:user-id #\"[0-9]+\"}] ,,, })) The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then route order matters. To maintain order during route evaluation, use the Linear Search Router and expand your routes explicitly by passing them to the table-routes function using a vector as the top-level collection instead of a set. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. By default, The verb must be one of the keywords in #{:any, :get, :put, :post, :delete, :patch, :options, :head}. However, you can override the verbs by including an options map with the keyword :verb in your route definition. The value of :verb is the set of verb keywords you wish to 
1support. It is through this facility that you can specify custom verbs. (def routes #{{:verbs #{:get :stats :version}} [\"/\" :get (conj common-interceptors `home-page)] [\"/\" :stats (conj common-interceptors `stats)] [\"/\" :version (conj common-interceptors `version)]}) :any is a wildcard verb. During request routing, :any will match all requests. The \"handler position\" be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List A route name clause is the keyword :route-name followed by a keyword. Route names must be unique. A constraint clause is the keyword :constraints followed by a map.","title":"Table Syntax","component":"pedestal","version":"0.6","name":"table-syntax","url":"/pedestal/0.6/reference/table-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Route Vector Format","hash":"_route_vector_format","id":2},{"text":"Syntax for table-routes","hash":"_syntax_for_table_routes","id":3},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":4},{"text":"Detailed Reference","hash":"_detailed_reference","id":5},{"text":"Path string","hash":"_path_string","id":6},{"text":"HTTP Verb","hash":"_http_verb","id":7},{"text":"Syntax for specifying verbs","hash":"_syntax_for_specifying_verbs","id":8},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":9},{"text":"Route Name Clause","hash":"_route_name_clause","id":10},{"text":"Constraint Clause","hash":"_constraint_clause","id":11}]},"163":{"id":163,"text":"As its name implies, the terse syntax provides a compact approach for describing routes. When the argument to expand-routes is a vector, it will be expanded using the terse syntax. Unlike the Table or Verbose syntax, it allows for the nesting of route definitions where each nested route vector adds a path segment. Unlike the Table syntax, any verb can be specified without verb whitelisting. A route table is a vector of nested vectors. Top-level vector(s) are termed application vectors. Nested vectors are termed route vectors. (Optional) A keyword identifying the application by name (Optional) A URL scheme (Optional) A host name (Optional) A port One or more nested route vectors. A path segment (must begin with a slash) A verb map (Optional) An interceptor vector with ^:interceptors metadata [1], [2] (Optional) A constraints map with ^:constraints metadata [1], [2] Zero or more child route vectors (ns myapp.service (:require [io.pedestal.http.route :as route])) (def routes [[:hello-world :http [\"/order\" {:get `list-orders :post [:post-without-id `create-order]} [\"/:id\" ^:interceptors [load-order-from-db] ^:constraints {:id #\"[0-9]+\"} {:get `view-order :put `update-order :post [:post-by-id `create-order]}]]]]) The path string must: Start with a slash (\"/\") Consist of zero or more path segments separated by slashes. Each path segment is one of: A string literal A colon (\":\") followed by a legal Clojure identifier name. This is a path parameter. An asterisk (\"*\") followed by a legal Clojure identifier name. This is a wildcard path. When routing a request, a path parameter will match any characters other than a slash. The matched string will be bound to the request by the path parameter name from the route. For example, using the route /users/:id/orders/:order-id, the following request URLs would be treated as: URL Match? Path params /users/abcdef/orders No /users/abcdef/orders/12345 Yes {:id \"abcdef\" :order-id \"12345\"} /users/123545/orders/From%20Strings Yes {:id \"123545\" :order-id \"From Strings\"} All path parameter values are strings. If you wish to use a wild card route as a fallback route then use the Linear Search Router. Keep in mind that wildcard fallback routes are not recommended since they tend to increase the complexity of handler logic. The verb map contains verb to handler mappings. Each verb in the verb map defines a route. If a handler is referenced by multiple routes, a route name must be specified. The route name is a keyword which occurs in the first position of an interceptor vector in the verb map. Unlike the Table Route syntax, custom verbs do not need to be white listed. However, :any is a wildcard verb. During request routing, :any will match all requests. The \"handler position\" be anything that satisfies the IntoInterceptor protocol. This includes: Function value Symbol Var Map List 1. Can also be specified before the verb map. 2. Applies to the current route and any child routes.","title":"Terse Syntax","component":"pede
1stal","version":"0.6","name":"terse-syntax","url":"/pedestal/0.6/reference/terse-syntax.html","titles":[{"text":"Quick Reference","hash":"_quick_reference","id":1},{"text":"Application Vector Format","hash":"_application_vector_format","id":2},{"text":"Route Vector Format","hash":"_route_vector_format","id":3},{"text":"Syntax for expand-routes","hash":"_syntax_for_expand_routes","id":4},{"text":"Detailed Reference","hash":"_detailed_reference","id":5},{"text":"Path string","hash":"_path_string","id":6},{"text":"Verb map","hash":"_verb_map","id":7},{"text":"Handler or Interceptors","hash":"_handler_or_interceptors","id":8}]},"164":{"id":164,"text":"The following table lists the common container options supported by Tomcat. Key Value type Description :ssl? Boolean Allows connections over HTTPS. :ssl-port Integer Port to use for TLS listener. Defaults to 443 and implies :ssl?. :keystore String Used for TLS. Path to keystore file. :key-password String Used for TLS. Keystore password. :client-auth String SSL client certificate authenticate, may be set to :need, :want or :none. Defaults to :none. Aside from the options listed in the previous table, there are other SSL options supported by Tomcat as well. The options listed below may be specified as strings or keywords in the container options map. sessionTimeout keystoreType algorithm truststoreType truststorePass useServerCipherSuitesOrder sslImplementationName truststoreProvider sessionCacheSize keyAlias keystoreProvider truststoreFile truststoreAlgorithm allowUnsafeLegacyRenegotiation clientCertProvider crlFile trustMaxCertLength ciphers trustManagerClassName keyPass These options are set on the org.apache.catalina.connector.Connector instance via setAttribute. Refer to the Tomcat HTTP Connector documentation for details.","title":"Tomcat Configuration and Deployment","component":"pedestal","version":"0.6","name":"tomcat","url":"/pedestal/0.6/reference/tomcat.html","titles":[{"text":"Container Options","hash":"_container_options","id":1},{"text":"General SSL configuration","hash":"_general_ssl_configuration","id":2}]},"165":{"id":165,"text":"It is a good practice to separate core business logic from handler, and more generally, interceptor code. This separation of concerns has many benefits, including facilitating testing at the interceptor, interceptor chain and end-to-end response generation levels. Interceptors can be tested in isolation by either directly invoking the :enter, :leave or :error functions with a mock context map in your test or by using the interceptor chain execute function. Both approaches are demonstrated below. Given the following interceptor: (def widget-finder (interceptor/interceptor {:enter (fn [ctx] (assoc ctx :widget {:id 1 :title \"foobar\"} ))})) We can test it either directly: (let [test-fn (:enter widget-finder)] (is (= {:id 1 :title \"foobar\"} (:widget (test-fn {}))))) Or using the interceptor chain execute function: (is (= {:id 1 :title \"foobar\"} (:widget (chain/execute {} [widget-finder])))) We can extend this approach to test coordination across multiple interceptors as follows: (def widget-renderer (interceptor/interceptor {:leave (fn [ctx] (if-let [widget (:widget ctx)] (assoc ctx :response {:status 200 :body (format \"Widget ID %d, Title '%s'\" (:id widget) (:title widget))}) (assoc ctx :response {:status 404 :body \"Not Found\"})))})) (is (= \"Widget ID 1, Title 'foobar'\" (get-in (chain/execute {} [widget-renderer widget-finder]) [:response :body]))) The value in exercising the end-to-end operation of your service endpoints is that it provides quick feedback that you’ve wired things up correctly. Pedestal provides the test helper response-for utility function to facilitate testing of services without having to spin up an http server. This style of testing ensures that routing is correct, and it fully exercises routing, interceptors, and any business logic. The response-for helper function is specific to servlet-based services and simulates the receipt of a servlet request and creation of a servlet response - but does so without the overhead of an actual HTTP connection, which ensures your tests are fast. `response-for takes as arguments a service function, verb and url as required parameters; headers and a request body are optional. Let us examine those parameters in more detail. The service function refers to the :io.pedestal.http/service-fn key value in the service map during service initialization. The verb is an HTTP method represented as a keyword (i.e., :get, :post, :delete, etc…​). The url is a relative url represented as a string. The headers and request body inputs are optional and specified with the :headers and :body keys, respectively. Before using response-for in tests, a test service must be created. This is done by calling io.pedestal.http/create-servlet with the service map as a parameter. The resulting service-fn can be bound to a var and used in subsequent tests. (def service (:io.pedestal.http/service-fn (io.pedestal.http/create-servlet service-map))) The following example illustrates a simple execution of response-for within a test: (is (= \"Hello!\" (:body (response-for service :get \"/hello\")))
1) The response returned by response-for contains :status, :body and :header keys. The value of the :headers key is a map with stringified keys. Testing header values would look something like this: (is (= \"text/plain\" (get-in (response-for service :get \"/hello\") [:headers \"Content-Type\"]))) POST’ing to a service endpoint can be tested by using the :post verb and specifying a request :body. The route under test typically includes the body-params interceptor to support request payload parsing. Therefore, you will need to set the Content-Type header of the test request to the appropriate value based on the payload format of the request body. (is (= 200 (:status (response-for service :post \"/foo\" :headers {\"Content-Type\" \"application/json\"} :body \"{\\\"foo\\\":\\\"bar\\\"}\")))) (is (= 200 (:status (response-for service :post \"/foo-login\" :headers {\"Content-Type\" \"application/x-www-form-urlencoded\"} :body \"[email protected]&password=my-pwd\")))) Notice how Content-Type is a string. Pedestal provides a utility, url-for-routes. This is passed the expanded routes for your application, and returns a function that will generate a URL for a specific route; primarily by specifying the route name, but also other factors. It is recommended to create a url-for test helper based on url-for-routes, and use that helper to create the relative urls for your tests. This allows you to refer to routes by name as opposed to hard-coded paths. Route names are typically more stable. Aside from that, it makes it easy to test routes which use query or path parameters. Here’s an example: (require '[io.pedestal.http.route :as http.routes]) (def routes #{[\"/user/:id/items\" :post `user-items]} ; (1) (def url-for (http.routes/url-for-routes (http.routes/expand-routes routes)))) (is (= 200 (:status (response-for service :get (url-for ::user-items ;(2) :path-params {:id 1} :query-params {:sort \"ASC\"}))))) 1 The namespace qualified symbol for user-items will be the default route name (as a keyword) 2 The route name is used to get the URL back Nothing special needs to be done when testing routes which include async interactions. The response-for helper forces asynchronous request processing to synchronous processing for test purposes.","title":"Unit testing","component":"pedestal","version":"0.6","name":"unit-testing","url":"/pedestal/0.6/reference/unit-testing.html","titles":[{"text":"Testing interceptors in isolation","hash":"_testing_interceptors_in_isolation","id":1},{"text":"Testing your service with response-for","hash":"_testing_your_service_with_response_for","id":2},{"text":"Usage","hash":"_usage","id":3},{"text":"Testing GET","hash":"_testing_get","id":4},{"text":"Testing POST","hash":"_testing_post","id":5},{"text":"Constructing route URLs","hash":"_constructing_route_urls","id":6},{"text":"Testing Async interactions","hash":"_testing_async_interactions","id":7}]},"166":{"id":166,"text":"Pull requests welcomed!","title":"Verbose Syntax","component":"pedestal","version":"0.6","name":"verbose-syntax","url":"/pedestal/0.6/reference/verbose-syntax.html","titles":[{"text":"Placeholder","hash":"_placeholder","id":1}]}},"components":{},"componentVersions":{"pedestal/0.8":{"displayVersion":"0.8","title":"Pedestal","version":"0.8","origins":{},"name":"pedestal","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Pedestal","kroki-fetch-diagram":true,"kroki-server-url":"http://localhost:9870","core_async":"link:https://github.com/clojure/core.async/[core.async]","clojure_spec":"link:https://clojure.org/guides/spec[Clojure spec]","repo_root":"https://github.com/pedestal/pedestal","guides_examples_root":"https://github.com/pedestal/pedestal/tree/master/docs/modules/guides/examples","component_home":"https://github.com/stuartsierra/component/","default_api_ns":"io.pedestal.http@","api_doc_root":"http://pedestal.io/api/0.8","page-api_doc_root":"http://pedestal.io/api/0.8","libs_version":"0.8.2-beta-11","base-clojure-version":1.11,"base-java-version":11,"otel":"link:https://
1opentelemetry.io/[Open Telemetry]","servlet-api":"link:https://jakarta.ee/specifications/servlet/[Jakarta Servlet API]","clj-reload":"link:https://github.com/tonsky/clj-reload[clj-reload]","matcher-combinators":"link:https://github.com/nubank/matcher-combinators[matcher-combinators]","sse":"https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events[Server-sent events]","ring-spec":"https://github.com/ring-clojure/ring/blob/master/SPEC.md[Ring request specification]"},"sourcemap":false,"extensions":[{}]},"nav":["modules/ROOT/nav.adoc","modules/guides/nav.adoc","modules/reference/nav.adoc","modules/ROOT/nav-tail.adoc"],"url":"/pedestal/0.8/index.html","navigation":[{"items":[{"content":"What is Pedestal?","url":"/pedestal/0.8/index.html","urlType":"internal","roles":["page"]},{"content":"Decision Log","url":"/pedestal/0.8/decision-log.html","urlType":"internal","roles":["page"]},{"content":"Deprecations","url":"/pedestal/0.8/deprecations.html","urlType":"internal","roles":["page"]},{"content":"Terminology","url":"/pedestal/0.8/terms.html","urlType":"internal","roles":["page"]}],"root":true,"order":0},{"items":[{"content":"Guides","items":[{"content":"Getting Started","items":[{"content":"Hello World","url":"/pedestal/0.8/guides/hello-world.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Parameters","url":"/pedestal/0.8/guides/hello-world-query-parameters.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Content Types","url":"/pedestal/0.8/guides/hello-world-content-types.html","urlType":"internal","roles":["page"]},{"content":"Your First API","url":"/pedestal/0.8/guides/your-first-api.html","urlType":"internal","roles":["page"]}]},{"content":"Embedded Template","url":"/pedestal/0.8/guides/embedded-template.html","urlType":"internal","roles":["page"]},{"content":"Defining Routes","url":"/pedestal/0.8/guides/defining-routes.html","urlType":"internal","roles":["page"]},{"content":"What is an Interceptor?","url":"/pedestal/0.8/guides/what-is-an-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Reloading at the REPL","url":"/pedestal/0.8/guides/live-repl.html","urlType":"internal","roles":["page"]},{"content":"Using Pedestal With Component","url":"/pedestal/0.8/guides/pedestal-with-component.html","urlType":"internal","roles":["page"]},{"content":"Using Pedestal With SSL","url":"/pedestal/0.8/guides/pedestal-with-ssl.html","urlType":"internal","roles":["page"]},{"content":"Pedestal with Component (Redux)","url":"/pedestal/0.8/guides/pedestal-component-2.html","urlType":"internal","roles":["page"]},{"content":"Unit testing","url":"/pedestal/0.8/guides/unit-testing.html","urlType":"internal","roles":["page"]},{"content":"Async Request Processing","url":"/pedestal/0.8/guides/async.html","urlType":"internal","roles":["page"]},{"content":"Server-Sent Events","url":"/pedestal/0.8/guides/sse.html","urlType":"internal","roles":["page"]},{"content":"WebSockets","url":"/pedestal/0.8/guides/websockets.html","urlType":"internal","roles":["page"]},{"content":"WAR Deployment","url":"/pedestal/0.8/guides/war-deployment.html","urlType":"internal","roles":["page"]}]}],"root":true,"order":1},{"items":[{"content":"Reference","items":[{"content":"Pedestal Architecture","items":[{"content":"Architecture Overview","url":"/pedestal/0.8/reference/architecture-overview.html","urlType":"internal","roles":["page"]},{"content":"Important Protocols","url":"/pedestal/0.8/reference/important-protocols.html","urlType":"internal","roles":["page"]},{"content":"Context Map","url":"/pedestal/0.8/reference/context-map.html","urlType":"internal","roles":["page"]},{"content":"Interceptors","url":"/pedestal/0.8/reference/interceptors.html","urlType":"internal","roles":["page"]},{"content":"Connector","url":"/pedestal/0.8/reference/connector.html","urlType":"internal","roles":["page"]},{"content":"Chain Providers","url":"/pedestal/0.8/reference/chain-providers.html","urlType":"internal","roles":["page"]},{"content":"Error Handling","url":"/pedestal/0.8/reference/error-handling.html","urlType":"internal","roles":["page"]}
1,{"content":"Specs","url":"/pedestal/0.8/reference/specs.html","urlType":"internal","roles":["page"]},{"content":"Development Mode","url":"/pedestal/0.8/reference/dev-mode.html","urlType":"internal","roles":["page"]}]},{"content":"HTTP Handling","items":[{"content":"Servlet Interceptor","url":"/pedestal/0.8/reference/servlet-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Connector Map","url":"/pedestal/0.8/reference/connector-map.html","urlType":"internal","roles":["page"]},{"content":"Request Map","url":"/pedestal/0.8/reference/request-map.html","urlType":"internal","roles":["page"]},{"content":"Response Map","url":"/pedestal/0.8/reference/response-map.html","urlType":"internal","roles":["page"]},{"content":"Response Bodies","url":"/pedestal/0.8/reference/response-bodies.html","urlType":"internal","roles":["page"]},{"content":"Resources","url":"/pedestal/0.8/reference/resources.html","urlType":"internal","roles":["page"]},{"content":"Parameters","url":"/pedestal/0.8/reference/parameters.html","urlType":"internal","roles":["page"]},{"content":"Ring Middleware","url":"/pedestal/0.8/reference/ring.html","urlType":"internal","roles":["page"]},{"content":"Default Interceptors","url":"/pedestal/0.8/reference/default-interceptors.html","urlType":"internal","roles":["page"]},{"content":"Streaming Responses","url":"/pedestal/0.8/reference/streaming.html","urlType":"internal","roles":["page"]},{"content":"Server-Sent Events","url":"/pedestal/0.8/reference/server-sent-events.html","urlType":"internal","roles":["page"]},{"content":"WebSockets","url":"/pedestal/0.8/reference/websockets.html","urlType":"internal","roles":["page"]}]},{"content":"Routing and Linking","items":[{"content":"Routing Quick Reference","url":"/pedestal/0.8/reference/routing-quick-reference.html","urlType":"internal","roles":["page"]},{"content":"Routing Specification Syntax","items":[{"content":"Table Syntax","url":"/pedestal/0.8/reference/table-syntax.html","urlType":"internal","roles":["page"]},{"content":"Terse Syntax","url":"/pedestal/0.8/reference/terse-syntax.html","urlType":"internal","roles":["page"]},{"content":"Verbose Syntax","url":"/pedestal/0.8/reference/verbose-syntax.html","urlType":"internal","roles":["page"]}]},{"content":"Routing Changes in 0.8","url":"/pedestal/0.8/reference/routing-changes.html","urlType":"internal","roles":["page"]},{"content":"Routers","items":[{"content":"Sawtooth Router","url":"/pedestal/0.8/reference/sawtooth-router.html","urlType":"internal","roles":["page"]},{"content":"Map Tree Router","url":"/pedestal/0.8/reference/map-tree-router.html","urlType":"internal","roles":["page"]},{"content":"Linear Search Router","url":"/pedestal/0.8/reference/linear-search-router.html","urlType":"internal","roles":["page"]},{"content":"Prefix Tree Router","url":"/pedestal/0.8/reference/prefix-tree-router.html","urlType":"internal","roles":["page"]}]}]},{"content":"Verb Smuggling","url":"/pedestal/0.8/reference/verb-smuggling.html","urlType":"internal","roles":["page"]},{"content":"Deployment and Operations","items":[{"content":"Configuration","url":"/pedestal/0.8/reference/config.html","urlType":"internal","roles":["page"]},{"content":"Connectors","items":[{"content":"Jetty 12","url":"/pedestal/0.8/reference/jetty.html","urlType":"internal","roles":["page"]},{"content":"Http-Kit","url":"/pedestal/0.8/reference/http-kit.html","urlType":"internal","roles":["page"]},{"content":"Immutant","url":"/pedestal/0.8/reference/immutant.html","urlType":"internal","roles":["page"]},{"content":"Tomcat","url":"/pedestal/0.8/reference/tomcat.html","urlType":"internal","roles":["page"]}]},{"content":"Logging","url":"/pedestal/0.8/reference/logging.html","urlType":"internal","roles":["page"]},{"content":"Metrics","url":"/pedestal/0.8/reference/metrics.html","urlType":"internal","roles":["page"]}]},{"content":"Pedestal Libraries","url":"/pedestal/0.8/reference/libraries.html","urlType":"internal","roles":["page"]},{"content":"API Docs","url":"http://pedestal.io/api/0.8","urlType":"external"}]}],"root":true,"order":2},{"items":[{"content":"Contributing to Pedestal","url":"/pedestal/0.8/contributing.html","urlType":"internal","roles":["page"]}
1,{"content":"Code of Conduct","url":"/pedestal/0.8/code-of-conduct.html","urlType":"internal","roles":["page"]},{"content":"Privacy Policy","url":"/pedestal/0.8/privacy.html","urlType":"internal","roles":["page"]}],"root":true,"order":3}]},"pedestal/0.7":{"displayVersion":"0.7","title":"Pedestal","version":"0.7","origins":{},"name":"pedestal","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Pedestal","kroki-fetch-diagram":true,"kroki-server-url":"http://localhost:9870","core_async":"link:https://github.com/clojure/core.async/[core.async]","clojure_spec":"link:https://clojure.org/guides/spec[Clojure spec]","repo_root":"https://github.com/pedestal/pedestal","guides_examples_root":"https://github.com/pedestal/pedestal/tree/master/docs/modules/guides/examples","component_home":"https://github.com/stuartsierra/component/","default_api_ns":"io.pedestal.http@","api_doc_root":"http://pedestal.io/api/0.7","page-api_doc_root":"http://pedestal.io/api/0.7","libs_version":"0.7.2","otel":"link:https://opentelemetry.io/[Open Telemetry]"},"sourcemap":false,"extensions":[{}]},"nav":["modules/ROOT/nav.adoc","modules/guides/nav.adoc","modules/reference/nav.adoc","modules/ROOT/nav-tail.adoc"],"url":"/pedestal/0.7/index.html","navigation":[{"items":[{"content":"What is Pedestal?","url":"/pedestal/0.7/index.html","urlType":"internal","roles":["page"]},{"content":"Deprecations","url":"/pedestal/0.7/deprecations.html","urlType":"internal","roles":["page"]},{"content":"Terminology","url":"/pedestal/0.7/terms.html","urlType":"internal","roles":["page"]}],"root":true,"order":0},{"items":[{"content":"Guides","items":[{"content":"Getting Started","items":[{"content":"Hello World","url":"/pedestal/0.7/guides/hello-world.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Parameters","url":"/pedestal/0.7/guides/hello-world-query-parameters.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Content Types","url":"/pedestal/0.7/guides/hello-world-content-types.html","urlType":"internal","roles":["page"]},{"content":"Your First API","url":"/pedestal/0.7/guides/your-first-api.html","urlType":"internal","roles":["page"]}]},{"content":"Embedded Template","url":"/pedestal/0.7/guides/embedded-template.html","urlType":"internal","roles":["page"]},{"content":"Defining Routes","url":"/pedestal/0.7/guides/defining-routes.html","urlType":"internal","roles":["page"]},{"content":"What is an Interceptor?","url":"/pedestal/0.7/guides/what-is-an-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Developing at the REPL","url":"/pedestal/0.7/guides/developing-at-the-repl.html","urlType":"internal","roles":["page"]},{"content":"Reloading at the REPL","url":"/pedestal/0.7/guides/live-repl.html","urlType":"internal","roles":["page"]},{"content":"Using Pedestal With Component","url":"/pedestal/0.7/guides/pedestal-with-component.html","urlType":"internal","roles":["page"]},{"content":"Unit testing","url":"/pedestal/0.7/guides/unit-testing.html","urlType":"internal","roles":["page"]},{"content":"Async Request Processing","url":"/pedestal/0.7/guides/async.html","urlType":"internal","roles":["page"]},{"content":"Server Sent Events","url":"/pedestal/0.7/guides/sse.html","urlType":"internal","roles":["page"]},{"content":"WAR Deployment","url":"/pedestal/0.7/guides/war-deployment.html","urlType":"internal","roles":["page"]}]}],"root":true,"order":1},{"items":[{"content":"Reference","items":[{"content":"Pedestal Architecture","items":[{"content":"Architecture Overview","url":"/pedestal/0.7/reference/architecture-overview.html","urlType":"internal","roles":["page"]},{"content":"Important Protocols","url":"/pedestal/0.7/reference/important-protocols.html","urlType":"internal","roles":["page"]},{"content":"Context Map","url":"/pedestal/0.7/reference/context-map.html","urlType":"internal","roles":["page"]},{"content":"Interceptors","url":"/pedestal/0.7/reference/interceptors.html","urlType":"internal","roles":["page"]},{"content":"Chain Providers","url":"/pedestal/0.7/reference/chain-providers.html","urlType":"internal","roles":["page"]},{"content":"Error Handling","url":"/pedestal/0.7/reference/error-handling.html","urlType":"internal","roles":["page"]}
1,{"content":"Specs","url":"/pedestal/0.7/reference/specs.html","urlType":"internal","roles":["page"]},{"content":"Development Mode","url":"/pedestal/0.7/reference/dev-mode.html","urlType":"internal","roles":["page"]}]},{"content":"HTTP Handling","items":[{"content":"Servlet Interceptor","url":"/pedestal/0.7/reference/servlet-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Service Map","url":"/pedestal/0.7/reference/service-map.html","urlType":"internal","roles":["page"]},{"content":"Request Map","url":"/pedestal/0.7/reference/request-map.html","urlType":"internal","roles":["page"]},{"content":"Response Map","url":"/pedestal/0.7/reference/response-map.html","urlType":"internal","roles":["page"]},{"content":"Response Bodies","url":"/pedestal/0.7/reference/response-bodies.html","urlType":"internal","roles":["page"]},{"content":"Parameters","url":"/pedestal/0.7/reference/parameters.html","urlType":"internal","roles":["page"]},{"content":"Ring Middleware","url":"/pedestal/0.7/reference/ring.html","urlType":"internal","roles":["page"]},{"content":"Default Interceptors","url":"/pedestal/0.7/reference/default-interceptors.html","urlType":"internal","roles":["page"]},{"content":"Streaming Responses","url":"/pedestal/0.7/reference/streaming.html","urlType":"internal","roles":["page"]},{"content":"Server-Sent Events","url":"/pedestal/0.7/reference/server-sent-events.html","urlType":"internal","roles":["page"]},{"content":"Websockets","url":"/pedestal/0.7/reference/websockets.html","urlType":"internal","roles":["page"]}]},{"content":"Routing and Linking","items":[{"content":"Routing Quick Reference","url":"/pedestal/0.7/reference/routing-quick-reference.html","urlType":"internal","roles":["page"]},{"content":"Routing Specification Syntax","items":[{"content":"Table Syntax","url":"/pedestal/0.7/reference/table-syntax.html","urlType":"internal","roles":["page"]},{"content":"Terse Syntax","url":"/pedestal/0.7/reference/terse-syntax.html","urlType":"internal","roles":["page"]},{"content":"Verbose Syntax","url":"/pedestal/0.7/reference/verbose-syntax.html","urlType":"internal","roles":["page"]}]},{"content":"Routers","items":[{"content":"Map Tree Router","url":"/pedestal/0.7/reference/map-tree-router.html","urlType":"internal","roles":["page"]},{"content":"Linear Search Router","url":"/pedestal/0.7/reference/linear-search-router.html","urlType":"internal","roles":["page"]},{"content":"Prefix Tree Router","url":"/pedestal/0.7/reference/prefix-tree-router.html","urlType":"internal","roles":["page"]}]}]},{"content":"Deployment and Operations","items":[{"content":"Configuration","url":"/pedestal/0.7/reference/config.html","urlType":"internal","roles":["page"]},{"content":"Containers","items":[{"content":"Jetty 11","url":"/pedestal/0.7/reference/jetty.html","urlType":"internal","roles":["page"]},{"content":"Immutant","url":"/pedestal/0.7/reference/immutant.html","urlType":"internal","roles":["page"]},{"content":"Tomcat","url":"/pedestal/0.7/reference/tomcat.html","urlType":"internal","roles":["page"]}]},{"content":"Logging","url":"/pedestal/0.7/reference/logging.html","urlType":"internal","roles":["page"]},{"content":"Metrics","url":"/pedestal/0.7/reference/metrics.html","urlType":"internal","roles":["page"]},{"content":"Metrics (Deprecated)","url":"/pedestal/0.7/reference/metrics-0.6.html","urlType":"internal","roles":["page"]}]},{"content":"Pedestal Libraries","url":"/pedestal/0.7/reference/libraries.html","urlType":"internal","roles":["page"]},{"content":"API Docs","url":"http://pedestal.io/api/0.7","urlType":"external"}]}],"root":true,"order":2},{"items":[{"content":"Contributing to Pedestal","url":"/pedestal/0.7/contributing.html","urlType":"internal","roles":["page"]},{"content":"Privacy Policy","url":"/pedestal/0.7/privacy.html","urlType":"internal","roles":["page"]}],"root":true,"order":3}]},"pedestal/0.6":{"displayVersion":"0.6","title":"Pedestal","version":"0.6","origins":{},"name":"pedestal","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanch
1ors":"","source-highlighter":"highlight.js","site-title":"Pedestal","kroki-fetch-diagram":true,"kroki-server-url":"http://localhost:9870","core_async":"link:https://github.com/clojure/core.async/[core.async]","repo_root":"https://github.com/pedestal/pedestal","guides_examples_root":"https://github.com/pedestal/pedestal/tree/master/modules/guides/examples","component_home":"https://github.com/stuartsierra/component/","default_api_ns":"io.pedestal.http@","api_doc_root":"http://pedestal.io/api/0.6","page-api_doc_root":"http://pedestal.io/api/0.6"},"sourcemap":false,"extensions":[{}]},"nav":["modules/ROOT/nav.adoc","modules/guides/nav.adoc","modules/reference/nav.adoc","modules/ROOT/nav-tail.adoc"],"url":"/pedestal/0.6/index.html","navigation":[{"items":[{"content":"What is Pedestal?","url":"/pedestal/0.6/index.html","urlType":"internal","roles":["page"]},{"content":"Terminology","url":"/pedestal/0.6/terms.html","urlType":"internal","roles":["page"]}],"root":true,"order":0},{"items":[{"content":"Guides","items":[{"content":"Getting Started","items":[{"content":"Hello World","url":"/pedestal/0.6/guides/hello-world.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Parameters","url":"/pedestal/0.6/guides/hello-world-query-parameters.html","urlType":"internal","roles":["page"]},{"content":"Hello World, With Content Types","url":"/pedestal/0.6/guides/hello-world-content-types.html","urlType":"internal","roles":["page"]},{"content":"Your First API","url":"/pedestal/0.6/guides/your-first-api.html","urlType":"internal","roles":["page"]}]},{"content":"Defining Routes","url":"/pedestal/0.6/guides/defining-routes.html","urlType":"internal","roles":["page"]},{"content":"What is an Interceptor?","url":"/pedestal/0.6/guides/what-is-an-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Developing at the REPL","url":"/pedestal/0.6/guides/developing-at-the-repl.html","urlType":"internal","roles":["page"]},{"content":"Reloading at the REPL","url":"/pedestal/0.6/guides/live-repl.html","urlType":"internal","roles":["page"]},{"content":"Using Pedestal With Component","url":"/pedestal/0.6/guides/pedestal-with-component.html","urlType":"internal","roles":["page"]},{"content":"Unit testing","url":"/pedestal/0.6/guides/unit-testing.html","urlType":"internal","roles":["page"]},{"content":"Async Request Processing","url":"/pedestal/0.6/guides/async.html","urlType":"internal","roles":["page"]},{"content":"Server Sent Events","url":"/pedestal/0.6/guides/sse.html","urlType":"internal","roles":["page"]},{"content":"WAR Deployment","url":"/pedestal/0.6/guides/war-deployment.html","urlType":"internal","roles":["page"]}]}],"root":true,"order":1},{"items":[{"content":"Reference","items":[{"content":"Pedestal Architecture","items":[{"content":"Architecture Overview","url":"/pedestal/0.6/reference/architecture-overview.html","urlType":"internal","roles":["page"]},{"content":"Important Protocols","url":"/pedestal/0.6/reference/important-protocols.html","urlType":"internal","roles":["page"]},{"content":"Interceptors","url":"/pedestal/0.6/reference/interceptors.html","urlType":"internal","roles":["page"]},{"content":"Chain Providers","url":"/pedestal/0.6/reference/chain-providers.html","urlType":"internal","roles":["page"]},{"content":"Error Handling","url":"/pedestal/0.6/reference/error-handling.html","urlType":"internal","roles":["page"]}]},{"content":"HTTP Handling","items":[{"content":"Servlet Interceptor","url":"/pedestal/0.6/reference/servlet-interceptor.html","urlType":"internal","roles":["page"]},{"content":"Service Map","url":"/pedestal/0.6/reference/service-map.html","urlType":"internal","roles":["page"]},{"content":"Context Map","url":"/pedestal/0.6/reference/context-map.html","urlType":"internal","roles":["page"]},{"content":"Request Map","url":"/pedestal/0.6/reference/request-map.html","urlType":"internal","roles":["page"]},{"content":"Response Map","url":"/pedestal/0.6/reference/response-map.html","urlType":"internal","roles":["page"]},{"content":"Response Bodies","url":"/pedestal/0.6/reference/response-bodies.html","urlType":"internal","roles":["page"]},{"content":"Parameters","url":"/pedestal/0.6/reference/parameters.html","urlType":"internal","roles":["page"]},{"content":"Default Interceptors","url":"/pedestal/0.6/reference/default-interceptors.html","urlType":"internal","roles":["page"]},{"content":"Streaming Responses","url":"/pedestal/0.6/reference/streaming.html","urlType":"internal","roles":["page"]},{"content":"Server-Sent Events","url":"/pedestal/0.6/reference/server-sent-events.html","urlType":"internal","roles":["page"]}]},{"content":"Routing and Linking","items":[{"content":"Routing Quick Reference","url":"/pedestal/0.6/reference/routing-quick-reference.html","urlType":"internal","roles":["page"]},{"content":"Routing Specification Syntax","items":[{"content":"Table Syntax","url":"/pedestal/0.6/reference/table-syntax.html","urlType":"internal","roles":["page"]},{"content":"Terse Syntax","url":"/pedestal/0.6/reference/terse-syntax.html","urlType":"internal","roles":["page"]},{"content":"Verbose Syntax","url":"/pedestal/0.6/reference/verbose-syntax.html","urlType":"internal","roles":["page"]}]},{"content":"Routers","items":[{"content":"Map Tree Router","url":"/pedestal/0.6/reference/map-tree-router.html","urlType":"internal","roles":["page"]},{"content":"Linear Search Router","url":"/pedestal/0.6/reference/linear-search-router.html","urlType":"internal","roles":["page"]},{"content":"Prefix Tree Router","url":"/pedestal/0.6/reference/prefix-tree-router.html","urlType":"internal","roles":["page"]}]}]},{"content":"Deployment and Operations","items":[{"content":"Containers","items":[{"content":"Jetty 9","url":"/pedestal/0.6/reference/jetty.html","urlType":"internal","roles":["page"]},{"content":"Immutant","url":"/pedestal/0.6/reference/immutant.html","urlType":"internal","roles":["page"]},{"content":"Tomcat Configuration and Deployment","url":"/pedestal/0.6/reference/tomcat.html","urlType":"internal","roles":["page"]}]},{"content":"Logging","url":"/pedestal/0.6/reference/logging.html","urlType":"internal","roles":["page"]},{"content":"Metrics","url":"/pedestal/0.6/reference/metrics.html","urlType":"internal","roles":["page"]}]}]}],"root":true,"order":2},{"items":[{"content":"Contributing to Pedestal","url":"/pedestal/0.6/contributing.html","urlType":"internal","roles":["page"]},{"content":"Privacy Policy","url":"/pedestal/0.6/privacy.html","urlType":"internal","roles":["page"]},{"content":"Documentation Work Queue","url":"/pedestal/0.6/todo.html","urlType":"internal","roles":["page"]}],"root":true,"order":3}]}}}})

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.