Grades were reported for 679 students.

Exam Score

Mean exam score: 14.4

Gender was reported for 676 students.

Gender Number of Students Percent of Class (%) Mean Exam Score
Female 212 31 13.3
Male 464 68 14.8
NA 3 <1 14.4

Violins are scaled to number of observations in each group.

Exam Percent

Mean exam percent: 71.8 %

Gender Number of Students Percent of Class (%) Mean Exam Percent (%)
Female 212 31 66.4
Male 464 68 74.2
NA 3 <1 71.8


Exam Wrapper Questions

Responses, Performance, and Group Differences

Question 21

  1. What is the highest physics course you have taken before this class?
  1. None
  2. High school mechanics
  3. High school electricity and magnetism
  4. AP mechanics
  5. AP electricity and magnetism, or above
450 responses

Note that 2 students selected B and C, 1 student selected C and E, and 2 students selected D and E. These are not included in the figure below.

Also note that students that report their parents’ highest level of education at Elementary, Less th HS, or HS diploma are recorded as first-generation students. The others are recorded as non-first-generation students. Not including students who did not report or responded “Don’t Know.”

Students that self-report as white or asian are recorded as non-underrepresented minority students. The others are recorded as underrepresented minorities. Not including students who did not indicate a race/ethnicity.

Question 22

  1. How much of the content for this exam do you feel you already knew before this class?
  1. None of it
  2. Very little of it
  3. Some of it
  4. Most of it
  5. All of it
449 responses

Question 23

  1. What do you like most about having extra time on the exam?
  1. I took time with each question
  2. I checked my work thoroughly at the end
  3. I revisited problems I was not sure about
  4. I felt less stress/pressure during this exam
  5. Nothing, I did not need extra time and did not use it
445 responses

Note that 1 student selected A, B, C, and D and 1 student selected A, B, and C. These are not included in the figure below.

Question 24

  1. Rate how you felt during the exam, with 5 being the best and 1 being the worst.
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
444 responses

Note that 1 student selected C and D. These are not included in the figure below.

Question 25

  1. Looking to the next exam, how do you plan to change your study strategies?
  1. I will start studying earlier
  2. I will be studying regularly throughout the next month
  3. I will solve more practice problems (from the Problem Roulette or from the textbook)
  4. I will use more of the resources available (Physics Help Room, office hours, Piazza, etc)
  5. I do not plan to change my study strategies
439 responses

Note that 3 students selected A, B, C, and D, 1 student selected B and C, 1 student selected A and B, 1 student selected C and D, 1 student selected A and C, and 1 student selected A, B, and D. These are not included in the figure below.


ECoach Exam 1 Playbook

By Gender

Students that haven’t taken high school physics

Students that checked their work

Time data

LS0tCnRpdGxlOiAiRkEgMjAxOCBQaHlzaWNzIDE0MCBNaWR0ZXJtIDEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGJvb3QpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGhlbWVfcHViIDwtIAogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSByZWwoMS4yKSwgaGp1c3QgPSAwLjUpLAogICAgICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KCksCiAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSwKICAgICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLHNpemUgPSAxNCksCiAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCx2anVzdCA9MixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gLTAuMixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTApLCAKICAgICAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91cj0iYmxhY2siKSwKICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZSgpLAogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91cj0iZ3JleTkwIiksCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gTkEpLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgbGVnZW5kLmtleS5zaXplPSB1bml0KDAuMiwgImNtIiksCiAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJpdGFsaWMiKSwKICAgICAgICAgICAgcGxvdC5tYXJnaW49dW5pdChjKDEwLDUsNSw1KSwibW0iKSwKICAgICAgICAgICAgc3RyaXAuYmFja2dyb3VuZD1lbGVtZW50X3JlY3QoY29sb3VyPSIjZjBmMGYwIixmaWxsPSIjZjBmMGYwIiksCiAgICAgICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpLAogICAgICAgICAgYXNwZWN0LnJhdGlvPS42NQogICAgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KYW5zd2VycyA8LSByZWFkX2NzdigiTWlkdGVybTFfYW5zd2Vycy5jc3YiKQpncmFkZXMgPC0gcmVhZF9jc3YoIk1pZHRlcm0xX3Njb3Jlcy5jc3YiKQpkZW1vZ3JhcGhpY3MgPC0gcmVhZF9jc3YoInBoeXNpY3NfMTQwX2RlbW9zXzIyMTAuY3N2IikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQojIGFkZCBsZWFkaW5nIHplcm9zIHRvIHN0dWRlbnQgSUQgbnVtYmVycwpzdHVkZW50X2lkIDwtIGMoKQpmb3IoaSBpbiAxOm5yb3coZGVtb2dyYXBoaWNzKSkgewogIGlmKGNlaWxpbmcobG9nMTAoZGVtb2dyYXBoaWNzJGFjY291bnRfaWRbaV0rMSkpID09IDYpIHsKICAgIHN0dWRlbnRfaWRbaV0gPSBwYXN0ZTAoIjAwIiwgZGVtb2dyYXBoaWNzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgaWYgKGNlaWxpbmcobG9nMTAoZGVtb2dyYXBoaWNzJGFjY291bnRfaWRbaV0rMSkpID09IDcpIHsKICAgIHN0dWRlbnRfaWRbaV0gPSBwYXN0ZTAoIjAiLCBkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSkKICB9IGVsc2UgewogICAgc3R1ZGVudF9pZFtpXSA9IGRlbW9ncmFwaGljcyRhY2NvdW50X2lkW2ldCiAgfQp9CmRlbW9ncmFwaGljcyA8LSBtdXRhdGUoZGVtb2dyYXBoaWNzLCBzdHVkZW50SUQgPSBzdHVkZW50X2lkKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnN0dWRlbnRfaWRfZ3JhZGVzIDwtIGMoKQpmb3IoaSBpbiAxOm5yb3coZ3JhZGVzKSkgewogIGlmKGNlaWxpbmcobG9nMTAoZ3JhZGVzJHN0dWRlbnRfaWRbaV0rMSkpID09IDYpIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gcGFzdGUwKCIwMCIsIGdyYWRlcyRzdHVkZW50X2lkW2ldKQogIH0KICBlbHNlIGlmIChjZWlsaW5nKGxvZzEwKGdyYWRlcyRzdHVkZW50X2lkW2ldKzEpKSA9PSA3KSB7CiAgICBzdHVkZW50X2lkX2dyYWRlc1tpXSA9IHBhc3RlMCgiMCIsIGdyYWRlcyRzdHVkZW50X2lkW2ldKQogIH0KICBlbHNlIGlmIChjZWlsaW5nKGxvZzEwKGdyYWRlcyRzdHVkZW50X2lkW2ldKzEpKSA9PSAxKSB7CiAgICBzdHVkZW50X2lkX2dyYWRlc1tpXSA9IHBhc3RlMCgiMDAwMDAwMCIsIGdyYWRlcyRzdHVkZW50X2lkW2ldKQogIH0KICBlbHNlIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gZ3JhZGVzJHN0dWRlbnRfaWRbaV0KICB9Cn0KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpncmFkZXMgPC0gbXV0YXRlKGdyYWRlcywgc3R1ZGVudElEID0gc3R1ZGVudF9pZF9ncmFkZXMpICU+JQogIGZpbHRlcihmaXJzdF9uYW1lICE9ICIwIikKYGBgCgojIyMgR3JhZGVzIHdlcmUgcmVwb3J0ZWQgZm9yIDY3OSBzdHVkZW50cy4KCiMjIyBFeGFtIFNjb3JlCiMjIyMgKipNZWFuIGV4YW0gc2NvcmU6KiogMTQuNApgYGB7ciwgZWNobyA9IEZBTFNFfQojIyBGaXJzdCBvcmRlciAtIGV4YW0gZ3JhZGVzIG9mIEYgdnMuIE0KZ3JhZGVzR2VuZGVyIDwtIHJpZ2h0X2pvaW4oZGVtb2dyYXBoaWNzW2MoNywzKV0sIGdyYWRlc1tjKDM5LDUsNildLCBieSA9ICJzdHVkZW50SUQiKQpjb2xuYW1lcyhncmFkZXNHZW5kZXIpIDwtIGMoInN0dWRlbnRJRCIsICJHZW5kZXIiLCAiRXhhbSBTY29yZSIsICJFeGFtIFBlcmNlbnQiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChncmFkZXNHZW5kZXIpICsgZ2VvbV9iYXIoYWVzKGBFeGFtIFNjb3JlYCksIGZpbGwgPSAiZ3JheTMwIikgKyAKICBnZ3RpdGxlKCJFeGFtIFNjb3JlIERpc3RyaWJ1dGlvbiAtIFBoeXNpY3MgMTQwIE1pZHRlcm0gMSBGQSAyMDE4IikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyBHZW5kZXIgd2FzIHJlcG9ydGVkIGZvciA2NzYgc3R1ZGVudHMuICAKYGBge3IsIGVjaG8gPSBGQUxTRX0KaW5mbyA8LSBkYXRhX2ZyYW1lKEdlbmRlciA9IGMoIkZlbWFsZSIsICJNYWxlIiwgIk5BIiksCiAgICAgICAgICAgICAgICAgICBgTnVtYmVyIG9mIFN0dWRlbnRzYCA9IGMoMjEyLDQ2NCwgMyksCiAgICAgICAgICAgICAgICAgICBgUGVyY2VudCBvZiBDbGFzcyAoJSlgID0gYygzMSwgNjgsICI8MSIpLAogICAgICAgICAgICAgICAgICAgYE1lYW4gRXhhbSBTY29yZWAgPSBjKDEzLjMsIDE0LjgsIDE0LjQpKQpgYGAKCnwgR2VuZGVyIHwgTnVtYmVyIG9mIFN0dWRlbnRzIHwgUGVyY2VudCBvZiBDbGFzcyAoJSkgfCBNZWFuIEV4YW0gU2NvcmUgfAp8Oi0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLXwKfCBGZW1hbGUgfCAgICAgICAgIDIxMiAgICAgICAgfCAgICAgICAgICAzMSAgICAgICAgICB8ICAgICAgMTMuMyAgICAgICB8CnwgIE1hbGUgIHwgICAgICAgICA0NjQgICAgICAgIHwgICAgICAgICAgNjggICAgICAgICAgfCAgICAgIDE0LjggICAgICAgfAp8ICAgTkEgICB8ICAgICAgICAgIDMgICAgICAgICB8ICAgICAgICAgIDwxICAgICAgICAgIHwgICAgICAxNC40ICAgICAgIHwKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsgCiAgICAgICAgIGdlb21fZGVuc2l0eShhZXMoYEV4YW0gU2NvcmVgLCBmaWxsID0gR2VuZGVyKSwgYWxwaGEgPSAuNykgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lYW4oZmlsdGVyKGdyYWRlc0dlbmRlciwgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwgCiAgICAgICAgICAgICBjb2xvciA9ICIjNjZjMmE1IikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lYW4oZmlsdGVyKGdyYWRlc0dlbmRlciwgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgIGNvbG9yID0gIiNmYzhkNjIiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKwogIGdndGl0bGUoIkV4YW0gU2NvcmUgRGlzdHJpYnV0aW9uIGJ5IEdlbmRlciIpICsgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGdyYWRlc0dlbmRlciwgR2VuZGVyID09ICJNIiB8IEdlbmRlciA9PSAiRiIpKSArIGdlb21fYm94cGxvdChhZXMoR2VuZGVyLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBHZW5kZXIpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKwogIGdndGl0bGUoIkV4YW0gU2NvcmUgRGlzdHJpYnV0aW9uIGJ5IEdlbmRlciIpICsgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgClZpb2xpbnMgYXJlIHNjYWxlZCB0byBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGluIGVhY2ggZ3JvdXAuCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIk0iIHwgR2VuZGVyID09ICJGIikpICsgZ2VvbV92aW9saW4oYWVzKEdlbmRlciwgYEV4YW0gU2NvcmVgLCBmaWxsID0gR2VuZGVyKSwgc2NhbGUgPSAiY291bnQiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKwogIGdndGl0bGUoIkV4YW0gU2NvcmUgRGlzdHJpYnV0aW9uIGJ5IEdlbmRlciAoVmlvbGluIHBsb3QpIikgKyBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmJvb3RmdW5jIDwtIGZ1bmN0aW9uKGQsaSkgewogIGQxIDwtIGRbaV0KICByZXR1cm4obWVhbihkMSkpCn0KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpmZW1hbGVFcnJvciA8LSBzZChib290KGZpbHRlcihncmFkZXNHZW5kZXIsIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQptYWxlRXJyb3IgPC0gc2QoYm9vdChmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpncmFkZVRhYmxlIDwtIGRhdGFfZnJhbWUoYygiRiIsICJNIiksIGMobWVhbihmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMoZmVtYWxlRXJyb3IsIG1hbGVFcnJvcikpCmNvbG5hbWVzKGdyYWRlVGFibGUpIDwtIGMoIkdlbmRlciIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChncmFkZVRhYmxlLCBhZXMoR2VuZGVyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHZW5kZXIpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwgCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCAKICAgICAgICAgICAgICAgIHdpZHRoID0gLjEpICsgCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsKICBnZ3RpdGxlKCJFeGFtIFNjb3JlIEdlbmRlcmVkIFBlcmZvcm1hbmNlIERpZmZlcmVuY2UiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgoKYGBgCgojIyMgRXhhbSBQZXJjZW50CiMjIyMgKipNZWFuIGV4YW0gcGVyY2VudDoqKiA3MS44ICUKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmluZm8yIDwtIGRhdGFfZnJhbWUoR2VuZGVyID0gYygiRmVtYWxlIiwgIk1hbGUiLCAiTkEiKSwKICAgICAgICAgICAgICAgICAgIGBOdW1iZXIgb2YgU3R1ZGVudHNgID0gYygyMTIsNDY0LDMpLAogICAgICAgICAgICAgICAgICAgYFBlcmNlbnQgb2YgQ2xhc3MgKCUpYCA9IGMoMzEsIDY5LCI8MSIpLAogICAgICAgICAgICAgICAgICAgYE1lYW4gRXhhbSBQZXJjZW50ICglKWAgPSBjKDY2LjQsIDc0LjIsNzEuOCkpCmBgYAoKfCBHZW5kZXIgfCBOdW1iZXIgb2YgU3R1ZGVudHMgfCBQZXJjZW50IG9mIENsYXNzICglKSB8IE1lYW4gRXhhbSBQZXJjZW50ICglKSB8Cnw6LS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IEZlbWFsZSB8ICAgICAgICAgMjEyICAgICAgICB8ICAgICAgICAgIDMxICAgICAgICAgIHwgICAgICAgICAgNjYuNCAgICAgICAgIHwKfCAgTWFsZSAgfCAgICAgICAgIDQ2NCAgICAgICAgfCAgICAgICAgICA2OCAgICAgICAgICB8ICAgICAgICAgIDc0LjIgICAgICAgICB8CnwgICBOQSAgIHwgICAgICAgICAgMyAgICAgICAgIHwgICAgICAgICAgPDEgICAgICAgICAgfCAgICAgICAgICA3MS44ICAgICAgICAgfAoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmZlbWFsZUVycm9yUGN0IDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0dlbmRlciwgR2VuZGVyID09ICJGIikkYEV4YW0gUGVyY2VudGAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKbWFsZUVycm9yUGN0IDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0dlbmRlciwgR2VuZGVyID09ICJNIikkYEV4YW0gUGVyY2VudGAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpncmFkZVRhYmxlUGN0IDwtIGRhdGFfZnJhbWUoYygiRiIsICJNIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihncmFkZXNHZW5kZXIsIEdlbmRlciA9PSAiRiIpJGBFeGFtIFBlcmNlbnRgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzR2VuZGVyLCBHZW5kZXIgPT0gIk0iKSRgRXhhbSBQZXJjZW50YCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhmZW1hbGVFcnJvclBjdCwgbWFsZUVycm9yUGN0KSkKY29sbmFtZXMoZ3JhZGVUYWJsZVBjdCkgPC0gYygiR2VuZGVyIiwgIk1lYW4gRXhhbSBQZXJjZW50IiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZ3JhZGVUYWJsZVBjdCwgYWVzKEdlbmRlciwgYE1lYW4gRXhhbSBQZXJjZW50YCwgY29sb3IgPSBHZW5kZXIpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBQZXJjZW50YCAtIEVycm9yLCAKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBQZXJjZW50YCArIEVycm9yKSwgCiAgICAgICAgICAgICAgICB3aWR0aCA9IC4xKSArIAogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZDhiMzY1IiwgIiM1YWI0YWMiKSkgKwogIGdndGl0bGUoIkV4YW0gU2NvcmUgR2VuZGVyZWQgUGVyZm9ybWFuY2UgRGlmZmVyZW5jZSIpICsgbGFicyhjb2xvciA9ICIiKSArCiAgdGhlbWVfcHViCgpgYGAKCioqKgojIyMgRXhhbSBXcmFwcGVyIFF1ZXN0aW9ucyAgCiMjIyMjIFJlc3BvbnNlcywgUGVyZm9ybWFuY2UsIGFuZCBHcm91cCBEaWZmZXJlbmNlcyAgICAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnMgPC0gbXV0YXRlKGFuc3dlcnMsIHN0dWRlbnRJRCA9IGFuc3dlcnMkc3R1ZGVudF9pZCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbyA8LSByaWdodF9qb2luKGRlbW9ncmFwaGljc1tjKDcsMzo2KV0sIGFuc3dlcnNbYygxNDQsOSwxMCwzNDozOCldLCBieSA9ICJzdHVkZW50SUQiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmZpcnN0Z2VuIDwtIGMoKQphbnN3ZXJzRGVtbzIgPC0gZmlsdGVyKGFuc3dlcnNEZW1vLCBwcm50X21heF9lZF9sdmxfZGVzICE9ICJOQSIpCmZvcihpIGluIDE6bnJvdyhhbnN3ZXJzRGVtbzIpKXsKICBpZihhbnN3ZXJzRGVtbzIkcHJudF9tYXhfZWRfbHZsX2Rlc1tpXSA9PSAiRWxlbWVudGFyeSIpIGZpcnN0Z2VuW2ldID0gImZpcnN0Z2VuIgogIGVsc2UgaWYoYW5zd2Vyc0RlbW8yJHBybnRfbWF4X2VkX2x2bF9kZXNbaV0gPT0gIkxlc3MgdGggSFMiKSBmaXJzdGdlbltpXSA9ICJmaXJzdGdlbiIKICBlbHNlIGlmKGFuc3dlcnNEZW1vMiRwcm50X21heF9lZF9sdmxfZGVzW2ldID09ICJIUyBkaXBsb21hIikgZmlyc3RnZW5baV0gPSAiZmlyc3RnZW4iCiAgZWxzZSBpZiAoYW5zd2Vyc0RlbW8yJHBybnRfbWF4X2VkX2x2bF9kZXNbaV0gPT0gIlNvbWUgQ29sbCIpIGZpcnN0Z2VuW2ldID0gIm5vdCBmaXJzdGdlbiIKICBlbHNlIGlmIChhbnN3ZXJzRGVtbzIkcHJudF9tYXhfZWRfbHZsX2Rlc1tpXSA9PSAiQXNzb2NpYXRlIikgZmlyc3RnZW5baV0gPSAibm90IGZpcnN0Z2VuIgogIGVsc2UgaWYgKGFuc3dlcnNEZW1vMiRwcm50X21heF9lZF9sdmxfZGVzW2ldID09ICJCYWNoZWxvcidzIikgZmlyc3RnZW5baV0gPSAibm90IGZpcnN0Z2VuIgogIGVsc2UgaWYgKGFuc3dlcnNEZW1vMiRwcm50X21heF9lZF9sdmxfZGVzW2ldID09ICJNYXN0ZXIncyIpIGZpcnN0Z2VuW2ldID0gIm5vdCBmaXJzdGdlbiIKICBlbHNlIGlmIChhbnN3ZXJzRGVtbzIkcHJudF9tYXhfZWRfbHZsX2Rlc1tpXSA9PSAiRG9jdG9yYXRlIikgZmlyc3RnZW5baV0gPSAibm90IGZpcnN0Z2VuIgogIGVsc2UgaWYgKGFuc3dlcnNEZW1vMiRwcm50X21heF9lZF9sdmxfZGVzW2ldID09ICJQcm9mIERvYyIpIGZpcnN0Z2VuW2ldID0gIm5vdCBmaXJzdGdlbiIKICBlbHNlIGZpcnN0Z2VuW2ldID0gIk5BIgp9CmFuc3dlcnNEZW1vMiA8LSBtdXRhdGUoYW5zd2Vyc0RlbW8yLCBmaXJzdGdlbiA9IGZpcnN0Z2VuKSAlPiUgZmlsdGVyKGZpcnN0Z2VuICE9ICJOQSIpICU+JQogIGZpbHRlcihzZXggIT0gIk5BIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQp1cm0gPC0gYygpCmFuc3dlcnNEZW1vMyA8LSBmaWx0ZXIoYW5zd2Vyc0RlbW8sIHJhY2VzICE9ICJOQSIpCmZvciAoaSBpbiAxOm5yb3coYW5zd2Vyc0RlbW8zKSkgewogIGlmIChhbnN3ZXJzRGVtbzMkcmFjZXNbaV0gPT0gIndoaXRlIikgdXJtW2ldID0gIm5vdCBVUk0iCiAgZWxzZSBpZiAoYW5zd2Vyc0RlbW8zJHJhY2VzW2ldID09ICJhc2lhbiIpIHVybVtpXSA9ICJub3QgVVJNIgogIGVsc2UgaWYgKGFuc3dlcnNEZW1vMyRyYWNlc1tpXSA9PSAibm9pbmRpYyIpIHVybVtpXSA9ICJOQSIKICBlbHNlIHVybVtpXSA9ICJVUk0iCn0KYW5zd2Vyc0RlbW8zIDwtIG11dGF0ZShhbnN3ZXJzRGVtbzMsIHVybSA9IHVybSkgJT4lIGZpbHRlcih1cm0gIT0gIk5BIikKYGBgCgojIyMjIFF1ZXN0aW9uIDIxICAKMjEuIFdoYXQgaXMgdGhlIGhpZ2hlc3QgcGh5c2ljcyBjb3Vyc2UgeW91IGhhdmUgdGFrZW4gYmVmb3JlIHRoaXMgY2xhc3M/CiAgQSkgTm9uZQogIEIpIEhpZ2ggc2Nob29sIG1lY2hhbmljcwogIEMpIEhpZ2ggc2Nob29sIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20KICBEKSBBUCBtZWNoYW5pY3MKICBFKSBBUCBlbGVjdHJpY2l0eSBhbmQgbWFnbmV0aXNtLCBvciBhYm92ZSAgCiAgCiMjIyMjIDQ1MCByZXNwb25zZXMgIApOb3RlIHRoYXQgMiBzdHVkZW50cyBzZWxlY3RlZCBCIGFuZCBDLCAxIHN0dWRlbnQgc2VsZWN0ZWQgQyBhbmQgRSwgYW5kIDIgc3R1ZGVudHMgc2VsZWN0ZWQgRCBhbmQgRS4gVGhlc2UgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgZmlndXJlIGJlbG93LiAgCgpBbHNvIG5vdGUgdGhhdCBzdHVkZW50cyB0aGF0IHJlcG9ydCB0aGVpciBwYXJlbnRzJyBoaWdoZXN0IGxldmVsIG9mIGVkdWNhdGlvbiBhdCBFbGVtZW50YXJ5LCBMZXNzIHRoIEhTLCBvciBIUyBkaXBsb21hIGFyZSByZWNvcmRlZCBhcyBmaXJzdC1nZW5lcmF0aW9uIHN0dWRlbnRzLiBUaGUgb3RoZXJzIGFyZSByZWNvcmRlZCBhcyBub24tZmlyc3QtZ2VuZXJhdGlvbiBzdHVkZW50cy4gTm90IGluY2x1ZGluZyBzdHVkZW50cyB3aG8gZGlkIG5vdCByZXBvcnQgb3IgcmVzcG9uZGVkICJEb24ndCBLbm93LiIgIAoKU3R1ZGVudHMgdGhhdCBzZWxmLXJlcG9ydCBhcyB3aGl0ZSBvciBhc2lhbiBhcmUgcmVjb3JkZWQgYXMgbm9uLXVuZGVycmVwcmVzZW50ZWQgbWlub3JpdHkgc3R1ZGVudHMuIFRoZSBvdGhlcnMgYXJlIHJlY29yZGVkIGFzIHVuZGVycmVwcmVzZW50ZWQgbWlub3JpdGllcy4gTm90IGluY2x1ZGluZyBzdHVkZW50cyB3aG8gZGlkIG5vdCBpbmRpY2F0ZSBhIHJhY2UvZXRobmljaXR5LgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYD09IkEifGAyMWA9PSJCInxgMjFgPT0iQyJ8YDIxYD09IkQifGAyMWA9PSJFIikpICsgCiAgICAgICAgIGdlb21fYmFyKGFlcyhgMjFgLCBmaWxsID0gYDIxYCkpICsgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiSGlnaGVzdCBQaHlzaWNzIENvdXJzZSBCZWZvcmUgUGh5c2ljcyAxNDAiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYD09IkEifGAyMWA9PSJCInxgMjFgPT0iQyJ8YDIxYD09IkQifGAyMWA9PSJFIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMWAsIHNjb3JlLCBmaWxsID0gYDIxYCkpICsgbGFicyhmaWxsID0gIiIpICsKICBnZ3RpdGxlKCJIaWdoZXN0IFBoeXNpY3MgQ291cnNlIHZzLiBFeGFtIDEgU2NvcmUiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8ycHJvcDIxIDwtIGFuc3dlcnNEZW1vMiAlPiUKICBncm91cF9ieShzZXgsYDIxYCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdlbmRlcmAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vMnByb3AyMSwgYDIxYD09IkEifGAyMWA9PSJCInxgMjFgPT0iQyJ8YDIxYD09IkQifGAyMWA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjFgLGBQZXJjZW50IG9mIEdlbmRlcmAsIGZpbGwgPSBzZXgpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsgCiAgZmFjZXRfd3JhcCh+c2V4KSArCiAgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiSGlnaGVzdCBQaHlzaWNzIENvdXJzZSBiZWZvcmUgUGh5c2ljcyAxNDAgKEdlbmRlcikiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8ycHJvcDIxRkcgPC0gYW5zd2Vyc0RlbW8yICU+JQogIGdyb3VwX2J5KGZpcnN0Z2VuLGAyMWApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vMnByb3AyMUZHLCBgMjFgPT0iQSJ8YDIxYD09IkIifGAyMWA9PSJDInxgMjFgPT0iRCJ8YDIxYD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9jb2woYWVzKGAyMWAsYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gZmlyc3RnZW4pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBmYWNldF93cmFwKH5maXJzdGdlbikgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIkhpZ2hlc3QgUGh5c2ljcyBDb3Vyc2UgYmVmb3JlIFBoeXNpY3MgMTQwIChGaXJzdC1HZW5lcmF0aW9uKSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzNwcm9wMjFVUk0gPC0gYW5zd2Vyc0RlbW8zICU+JQogIGdyb3VwX2J5KHVybSxgMjFgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbzNwcm9wMjFVUk0sIGAyMWA9PSJBInxgMjFgPT0iQiJ8YDIxYD09IkMifGAyMWA9PSJEInxgMjFgPT0iRSIpKSArIAogICAgICAgICBnZW9tX2NvbChhZXMoYDIxYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSB1cm0pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBmYWNldF93cmFwKH51cm0pICsKICBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJIaWdoZXN0IFBoeXNpY3MgQ291cnNlIGJlZm9yZSBQaHlzaWNzIDE0MCAoVVJNKSIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMjIFF1ZXN0aW9uIDIyICAKMjIuIEhvdyBtdWNoIG9mIHRoZSBjb250ZW50IGZvciB0aGlzIGV4YW0gZG8geW91IGZlZWwgeW91IGFscmVhZHkga25ldyBiZWZvcmUgdGhpcyBjbGFzcz8KICBBKSBOb25lIG9mIGl0CiAgQikgVmVyeSBsaXR0bGUgb2YgaXQKICBDKSBTb21lIG9mIGl0CiAgRCkgTW9zdCBvZiBpdAogIEUpIEFsbCBvZiBpdCAgCgojIyMjIyA0NDkgcmVzcG9uc2VzICAKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYD09IkEifGAyMmA9PSJCInxgMjJgPT0iQyJ8YDIyYD09IkQifGAyMmA9PSJFIikpICsgCiAgICAgICAgIGdlb21fYmFyKGFlcyhgMjJgLCBmaWxsID0gYDIyYCkpICsgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiUHJpb3IgS25vd2xlZGdlIG9mIEV4YW0gMSBDb250ZW50IikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmA9PSJBInxgMjJgPT0iQiJ8YDIyYD09IkMifGAyMmA9PSJEInxgMjJgPT0iRSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjJgLCBzY29yZSwgZmlsbCA9IGAyMmApKSArIGxhYnMoZmlsbCA9ICIiKSArCiAgZ2d0aXRsZSgiUHJpb3IgS25vd2xlZGdlIHZzLiBFeGFtIDEgU2NvcmUiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYD09IkEifGAyMmA9PSJCInxgMjJgPT0iQyJ8YDIyYD09IkQifGAyMmA9PSJFIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMmAsIHNjb3JlLCBmaWxsID0gc2V4KSkgKyBsYWJzKGZpbGwgPSAiIikgKwogIGdndGl0bGUoIlByaW9yIEtub3dsZWRnZSB2cy4gRXhhbSAxIFNjb3JlIGJ5IEdlbmRlciIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzJwcm9wMjIgPC0gYW5zd2Vyc0RlbW8yICU+JQogIGdyb3VwX2J5KHNleCxgMjJgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR2VuZGVyYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8ycHJvcDIyLCBgMjJgPT0iQSJ8YDIyYD09IkIifGAyMmA9PSJDInxgMjJgPT0iRCJ8YDIyYD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9jb2woYWVzKGAyMmAsIGBQZXJjZW50IG9mIEdlbmRlcmAsIGZpbGwgPSBzZXgpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsgCiAgZmFjZXRfd3JhcCh+c2V4KSArCiAgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiUHJpb3IgS25vd2xlZGdlIG9mIEV4YW0gMSBDb250ZW50IChHZW5kZXIpIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnNEZW1vMnByb3AyMkZHIDwtIGFuc3dlcnNEZW1vMiAlPiUKICBncm91cF9ieShmaXJzdGdlbixgMjJgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbzJwcm9wMjJGRywgYDIyYD09IkEifGAyMmA9PSJCInxgMjJgPT0iQyJ8YDIyYD09IkQifGAyMmA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjJgLGBQZXJjZW50IG9mIEdyb3VwYCwgZmlsbCA9IGZpcnN0Z2VuKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgZmFjZXRfd3JhcCh+Zmlyc3RnZW4pICsKICBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJQcmlvciBLbm93bGVkZ2Ugb2YgRXhhbSAxIENvbnRlbnQgKEZpcnN0LUdlbmVyYXRpb24pIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnNEZW1vM3Byb3AyMlVSTSA8LSBhbnN3ZXJzRGVtbzMgJT4lCiAgZ3JvdXBfYnkodXJtLGAyMmApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vM3Byb3AyMlVSTSwgYDIyYD09IkEifGAyMmA9PSJCInxgMjJgPT0iQyJ8YDIyYD09IkQifGAyMmA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjJgLGBQZXJjZW50IG9mIEdyb3VwYCwgZmlsbCA9IHVybSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGZhY2V0X3dyYXAofnVybSkgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlByaW9yIEtub3dsZWRnZSBvZiBFeGFtIDEgQ29udGVudCAoVVJNKSIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMjIFF1ZXN0aW9uIDIzICAKMjMuIFdoYXQgZG8geW91IGxpa2UgbW9zdCBhYm91dCBoYXZpbmcgZXh0cmEgdGltZSBvbiB0aGUgZXhhbT8KICBBKSBJIHRvb2sgdGltZSB3aXRoIGVhY2ggcXVlc3Rpb24KICBCKSBJIGNoZWNrZWQgbXkgd29yayB0aG9yb3VnaGx5IGF0IHRoZSBlbmQKICBDKSBJIHJldmlzaXRlZCBwcm9ibGVtcyBJIHdhcyBub3Qgc3VyZSBhYm91dAogIEQpIEkgZmVsdCBsZXNzIHN0cmVzcy9wcmVzc3VyZSBkdXJpbmcgdGhpcyBleGFtCiAgRSkgTm90aGluZywgSSBkaWQgbm90IG5lZWQgZXh0cmEgdGltZSBhbmQgZGlkIG5vdCB1c2UgaXQgIAoKIyMjIyMgNDQ1IHJlc3BvbnNlcyAgCk5vdGUgdGhhdCAxIHN0dWRlbnQgc2VsZWN0ZWQgQSwgQiwgQywgYW5kIEQgYW5kIDEgc3R1ZGVudCBzZWxlY3RlZCBBLCBCLCBhbmQgQy4gVGhlc2UgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgZmlndXJlIGJlbG93LgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgPT0iQSJ8YDIzYD09IkIifGAyM2A9PSJDInxgMjNgPT0iRCJ8YDIzYD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9iYXIoYWVzKGAyM2AsIGZpbGwgPSBgMjNgKSkgKyBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJQb3N0aXZlcyBBYm91dCBIYXZpbmcgRXh0cmEgVGltZSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgPT0iQSJ8YDIzYD09IkIifGAyM2A9PSJDInxgMjNgPT0iRCJ8YDIzYD09IkUiKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIzYCwgc2NvcmUsIGZpbGwgPSBgMjNgKSkgKyBsYWJzKGZpbGwgPSAiIikgKwogIGdndGl0bGUoIlBvc2l0aXZlcyBBYm91dCBFeHRyYSBUaW1lIHZzLiBFeGFtIDEgU2NvcmUiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8ycHJvcDIzIDwtIGFuc3dlcnNEZW1vMiAlPiUKICBncm91cF9ieShzZXgsYDIzYCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdlbmRlcmAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vMnByb3AyMywgYDIzYD09IkEifGAyM2A9PSJCInxgMjNgPT0iQyJ8YDIzYD09IkQifGAyM2A9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBHZW5kZXJgLCBmaWxsID0gc2V4KSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArIAogIGZhY2V0X3dyYXAofnNleCkgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlBvc2l0aXZlcyBBYm91dCBIYXZpbmcgRXh0cmEgVGltZSAoR2VuZGVyKSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzJwcm9wMjNGRyA8LSBhbnN3ZXJzRGVtbzIgJT4lCiAgZ3JvdXBfYnkoZmlyc3RnZW4sYDIzYCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8ycHJvcDIzRkcsIGAyM2A9PSJBInxgMjNgPT0iQiJ8YDIzYD09IkMifGAyM2A9PSJEInxgMjNgPT0iRSIpKSArIAogICAgICAgICBnZW9tX2NvbChhZXMoYDIzYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBmaXJzdGdlbiksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGZhY2V0X3dyYXAofmZpcnN0Z2VuKSArCiAgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiUG9zaXRpdmVzIEFib3V0IEhhdmluZyBFeHRyYSBUaW1lIChGaXJzdC1HZW5lcmF0aW9uKSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzNwcm9wMjNVUk0gPC0gYW5zd2Vyc0RlbW8zICU+JQogIGdyb3VwX2J5KHVybSxgMjNgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbzNwcm9wMjNVUk0sIGAyM2A9PSJBInxgMjNgPT0iQiJ8YDIzYD09IkMifGAyM2A9PSJEInxgMjNgPT0iRSIpKSArIAogICAgICAgICBnZW9tX2NvbChhZXMoYDIzYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSB1cm0pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBmYWNldF93cmFwKH51cm0pICsKICBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJQb3NpdGl2ZXMgQWJvdXQgSGF2aW5nIEV4dHJhIFRpbWUgKFVSTSkiKSArCiAgdGhlbWVfcHViCmBgYAoKIyMjIyBRdWVzdGlvbiAyNCAgCjI0LiBSYXRlIGhvdyB5b3UgZmVsdCBkdXJpbmcgdGhlIGV4YW0sIHdpdGggNSBiZWluZyB0aGUgYmVzdCBhbmQgMSBiZWluZyB0aGUgd29yc3QuCiAgQSkgMQogIEIpIDIKICBDKSAzCiAgRCkgNAogIEUpIDUgIAogIAojIyMjIyA0NDQgcmVzcG9uc2VzICAKTm90ZSB0aGF0IDEgc3R1ZGVudCBzZWxlY3RlZCBDIGFuZCBELiBUaGVzZSBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBmaWd1cmUgYmVsb3cuCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGA9PSJBInxgMjRgPT0iQiJ8YDI0YD09IkMifGAyNGA9PSJEInxgMjRgPT0iRSIpKSArIAogICAgICAgICBnZW9tX2JhcihhZXMoYDI0YCwgZmlsbCA9IGAyNGApKSArIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIkZlZWxpbmdzIER1cmluZyBFeGFtIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGA9PSJBInxgMjRgPT0iQiJ8YDI0YD09IkMifGAyNGA9PSJEInxgMjRgPT0iRSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjRgLCBzY29yZSwgZmlsbCA9IGAyNGApKSArIGxhYnMoZmlsbCA9ICIiKSArCiAgZ2d0aXRsZSgiRmVlbGluZ3MgRHVyaW5nIEV4YW0gdnMuIEV4YW0gMSBTY29yZSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzJwcm9wMjQgPC0gYW5zd2Vyc0RlbW8yICU+JQogIGdyb3VwX2J5KHNleCxgMjRgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR2VuZGVyYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChmaWx0ZXIoYW5zd2Vyc0RlbW8ycHJvcDI0LCBgMjRgPT0iQSJ8YDI0YD09IkIifGAyNGA9PSJDInxgMjRgPT0iRCJ8YDI0YD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIEdlbmRlcmAsIGZpbGwgPSBzZXgpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsgCiAgZmFjZXRfd3JhcCh+c2V4KSArCiAgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiRmVlbGluZ3MgRHVyaW5nIEV4YW0gKEdlbmRlcikiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8ycHJvcDI0RkcgPC0gYW5zd2Vyc0RlbW8yICU+JQogIGdyb3VwX2J5KGZpcnN0Z2VuLGAyNGApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vMnByb3AyNEZHLCBgMjRgPT0iQSJ8YDI0YD09IkIifGAyNGA9PSJDInxgMjRgPT0iRCJ8YDI0YD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9jb2woYWVzKGAyNGAsYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gZmlyc3RnZW4pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBmYWNldF93cmFwKH5maXJzdGdlbikgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIkZlZWxpbmdzIER1cmluZyBFeGFtIChGaXJzdC1HZW5lcmF0aW9uKSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXJzRGVtbzNwcm9wMjRVUk0gPC0gYW5zd2Vyc0RlbW8zICU+JQogIGdyb3VwX2J5KHVybSxgMjRgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbzNwcm9wMjRVUk0sIGAyNGA9PSJBInxgMjRgPT0iQiJ8YDI0YD09IkMifGAyNGA9PSJEInxgMjRgPT0iRSIpKSArIAogICAgICAgICBnZW9tX2NvbChhZXMoYDI0YCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSB1cm0pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBmYWNldF93cmFwKH51cm0pICsKICBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJGZWVsaW5ncyBEdXJpbmcgRXhhbSAoVVJNKSIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMjIFF1ZXN0aW9uIDI1ICAKMjUuIExvb2tpbmcgdG8gdGhlIG5leHQgZXhhbSwgaG93IGRvIHlvdSBwbGFuIHRvIGNoYW5nZSB5b3VyIHN0dWR5IHN0cmF0ZWdpZXM/CiAgQSkgSSB3aWxsIHN0YXJ0IHN0dWR5aW5nICoqZWFybGllcioqCiAgQikgSSB3aWxsIGJlIHN0dWR5aW5nICoqcmVndWxhcmx5KiogdGhyb3VnaG91dCB0aGUgbmV4dCBtb250aAogIEMpIEkgd2lsbCBzb2x2ZSAqKm1vcmUqKiBwcmFjdGljZSBwcm9ibGVtcyAoZnJvbSB0aGUgUHJvYmxlbSBSb3VsZXR0ZSBvciBmcm9tIHRoZSB0ZXh0Ym9vaykKICBEKSBJIHdpbGwgdXNlIG1vcmUgb2YgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgKFBoeXNpY3MgSGVscCBSb29tLCBvZmZpY2UgaG91cnMsIFBpYXp6YSwgZXRjKQogIEUpIEkgZG8gKipub3QqKiBwbGFuIHRvIGNoYW5nZSBteSBzdHVkeSBzdHJhdGVnaWVzICAKICAKIyMjIyMgNDM5IHJlc3BvbnNlcyAgCk5vdGUgdGhhdCAzIHN0dWRlbnRzIHNlbGVjdGVkIEEsIEIsIEMsIGFuZCBELCAxIHN0dWRlbnQgc2VsZWN0ZWQgQiBhbmQgQywgMSBzdHVkZW50IHNlbGVjdGVkIEEgYW5kIEIsIDEgc3R1ZGVudCBzZWxlY3RlZCBDIGFuZCBELCAxIHN0dWRlbnQgc2VsZWN0ZWQgQSBhbmQgQywgYW5kIDEgc3R1ZGVudCBzZWxlY3RlZCBBLCBCLCBhbmQgRC4gVGhlc2UgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgZmlndXJlIGJlbG93LgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgPT0iQSJ8YDI1YD09IkIifGAyNWA9PSJDInxgMjVgPT0iRCJ8YDI1YD09IkUiKSkgKyAKICAgICAgICAgZ2VvbV9iYXIoYWVzKGAyNWAsIGZpbGwgPSBgMjVgKSkgKyBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJQbGFucyBmb3IgQ2hhbmdpbmcgU3R1ZHkgU3RyYXRlZ2llcyIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgPT0iQSJ8YDI1YD09IkIifGAyNWA9PSJDInxgMjVgPT0iRCJ8YDI1YD09IkUiKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI1YCwgc2NvcmUsIGZpbGwgPSBgMjVgKSkgKyBsYWJzKGZpbGwgPSAiIikgKwogIGdndGl0bGUoIlBsYW5zIGZvciBDaGFuZ2luZyBTdHVkeSBTdHJhdGVnaWVzIHZzLiBFeGFtIDEgU2NvcmUiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8ycHJvcDI1IDwtIGFuc3dlcnNEZW1vMiAlPiUKICBncm91cF9ieShzZXgsYDI1YCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdlbmRlcmAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vMnByb3AyNSwgYDI1YD09IkEifGAyNWA9PSJCInxgMjVgPT0iQyJ8YDI1YD09IkQifGAyNWA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBHZW5kZXJgLCBmaWxsID0gc2V4KSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArIAogIGZhY2V0X3dyYXAofnNleCkgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlBsYW5zIGZvciBDaGFuZ2luZyBTdHVkeSBTdHJhdGVnaWVzIChHZW5kZXIpIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnNEZW1vMnByb3AyNUZHIDwtIGFuc3dlcnNEZW1vMiAlPiUKICBncm91cF9ieShmaXJzdGdlbixgMjVgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGZpbHRlcihhbnN3ZXJzRGVtbzJwcm9wMjVGRywgYDI1YD09IkEifGAyNWA9PSJCInxgMjVgPT0iQyJ8YDI1YD09IkQifGAyNWA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBmaXJzdGdlbiksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGZhY2V0X3dyYXAofmZpcnN0Z2VuKSArCiAgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiUGxhbnMgZm9yIENoYW5naW5nIFN0dWR5IFN0cmF0ZWdpZXMgKEZpcnN0LUdlbmVyYXRpb24pIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnNEZW1vM3Byb3AyNVVSTSA8LSBhbnN3ZXJzRGVtbzMgJT4lCiAgZ3JvdXBfYnkodXJtLGAyNWApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZmlsdGVyKGFuc3dlcnNEZW1vM3Byb3AyNVVSTSwgYDI1YD09IkEifGAyNWA9PSJCInxgMjVgPT0iQyJ8YDI1YD09IkQifGAyNWA9PSJFIikpICsgCiAgICAgICAgIGdlb21fY29sKGFlcyhgMjVgLGBQZXJjZW50IG9mIEdyb3VwYCwgZmlsbCA9IHVybSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGZhY2V0X3dyYXAofnVybSkgKwogIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlBsYW5zIGZvciBDaGFuZ2luZyBTdHVkeSBTdHJhdGVnaWVzIChVUk0pIikgKwogIHRoZW1lX3B1YgpgYGAKCioqKgojIyMgRUNvYWNoIEV4YW0gMSBQbGF5Ym9vawpgYGB7ciwgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CnBsYXlib29rIDwtIHJlYWRfY3N2KCJwaHlzaWNzMTQwX3BsYXlib29rMV9mYWxsXzE4LmNzdiIpW2MoNCw2KV0KY29sbmFtZXMocGxheWJvb2spIDwtIGMoInVuaXFuYW1lIiwgIlBsYXlib29rIikKcGxheWJvb2tHcmFkZXMgPC0gcmlnaHRfam9pbihwbGF5Ym9vayxhbnN3ZXJzLCBieSA9ICJ1bmlxbmFtZSIpW2MoMSwyLDMsMTAsMTEpXQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnBsYXlib29rIDwtIGMoKQpmb3IgKGkgaW4gMTpucm93KHBsYXlib29rR3JhZGVzKSkgewogIGlmKGlzLm5hKHBsYXlib29rR3JhZGVzJFBsYXlib29rW2ldKSkgcGxheWJvb2tbaV0gPSAiTm8iCiAgZWxzZSBwbGF5Ym9va1tpXSA9ICJZZXMiCn0KcGxheWJvb2tHcmFkZXMgPC0gbXV0YXRlKHBsYXlib29rR3JhZGVzLCBwbGF5Ym9vayA9IHBsYXlib29rKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChwbGF5Ym9va0dyYWRlcykgKyAKICBnZW9tX2JveHBsb3QoYWVzKHBsYXlib29rLCBzY29yZSwgZmlsbCA9IHBsYXlib29rKSkgKwogIGdndGl0bGUoIlBsYXlib29rIFVzYWdlIHZzLiBFeGFtIDEgU2NvcmUiKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QocGxheWJvb2tHcmFkZXMpICsgCiAgZ2VvbV92aW9saW4oYWVzKHBsYXlib29rLCBzY29yZSwgZmlsbCA9IHBsYXlib29rKSwgc2NhbGUgPSAiY291bnQiKSArCiAgZ2d0aXRsZSgiUGxheWJvb2sgVXNhZ2UgdnMuIEV4YW0gMSBTY29yZSIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgQnkgR2VuZGVyCmBgYHtyLCBlY2hvID0gRkFMU0V9CmNvbG5hbWVzKHBsYXlib29rR3JhZGVzKSA8LSBjKCJ1bmlxbmFtZSIsICJQbGF5Ym9vayIsInN0dWRlbnRJRCIsICJzY29yZSIsICJwZXJjZW50IiwicGxheWJvb2siKQpwbGF5Ym9va0dyYWRlc0RlbW8gPC0gcmlnaHRfam9pbihwbGF5Ym9va0dyYWRlcywgZGVtb2dyYXBoaWNzLCBieSA9ICJzdHVkZW50SUQiKVtjKDQsNiw5KV0lPiUKICBuYS5vbWl0KCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QocGxheWJvb2tHcmFkZXNEZW1vKSArIAogIGdlb21fYm94cGxvdChhZXMocGxheWJvb2ssIHNjb3JlLCBmaWxsID0gcGxheWJvb2spKSArCiAgZ2d0aXRsZSgiUGxheWJvb2sgVXNhZ2UgdnMuIEV4YW0gMSBTY29yZSIpICsKICBmYWNldF93cmFwKH5zZXgpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyBTdHVkZW50cyB0aGF0IGhhdmVuJ3QgdGFrZW4gaGlnaCBzY2hvb2wgcGh5c2ljcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpub0hTIDwtIGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQSIpCnllc0hTIDwtIGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgfCBgMjFgID09ICJDIiB8IGAyMWAgPT0gIkQiIHwgYDIxYCA9PSAiRSIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0Kbm9IU3Byb3AgPC0gbm9IUyAlPiUKICBncm91cF9ieShzY29yZSkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwLCBFeHBlcmllbmNlID0gIk5vIGhpZ2ggc2Nob29sIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpIU3Byb3AgPC0geWVzSFMgJT4lCiAgZ3JvdXBfYnkoc2NvcmUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgRXhwZXJpZW5jZSA9ICJIaWdoIHNjaG9vbCIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KSFNwcm9wdG90YWwgPC0gcmJpbmQoSFNwcm9wLCBub0hTcHJvcCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoSFNwcm9wdG90YWwpICsgCiAgZ2VvbV9jb2woYWVzKHNjb3JlLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBFeHBlcmllbmNlKSkgKwogIGdndGl0bGUoIkNvbXBhcmlzb24gb2Ygc2NvcmVzIC0gSGlnaCBzY2hvb2wgZXhwZXJpZW5jZSIsCiAgICAgICAgICBzdWJ0aXRsZSA9ICJIaWdoIHNjaG9vbCA9IDQ0LCBObyBoaWdoIHNjaG9vbCA9IDQwNCIpICsKICBmYWNldF93cmFwKH5FeHBlcmllbmNlKSArIGxhYnMoZmlsbCA9ICIiKSArIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9Cm5vSFNwcm9wZ2VuZGVyIDwtIGZpbHRlcihub0hTLCBzZXggPT0gIkYiIHwgc2V4ID09ICJNIikgJT4lCiAgZ3JvdXBfYnkoc2V4LHNjb3JlKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDAsIEV4cGVyaWVuY2UgPSAiTm8gaGlnaCBzY2hvb2wiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CkhTcHJvcGdlbmRlciA8LSBmaWx0ZXIoeWVzSFMsIHNleCA9PSAiRiIgfCBzZXggPT0gIk0iKSAlPiUKICBncm91cF9ieShzZXgsc2NvcmUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgRXhwZXJpZW5jZSA9ICJIaWdoIHNjaG9vbCIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KSFNwcm9wZ2VuZGVydG90YWwgPC0gcmJpbmQoSFNwcm9wZ2VuZGVyLCBub0hTcHJvcGdlbmRlcikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoSFNwcm9wZ2VuZGVydG90YWwpICsgCiAgZ2VvbV9jb2woYWVzKHNjb3JlLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBzZXgpKSArCiAgZ2d0aXRsZSgiQ29tcGFyaXNvbiBvZiBzY29yZXMgYW5kIGdlbmRlciAtIEhpZ2ggc2Nob29sIGV4cGVyaWVuY2UiKSArCiAgZmFjZXRfZ3JpZChFeHBlcmllbmNlfnNleCkgKyBsYWJzKGZpbGwgPSAiIikgKyB0aGVtZV9wdWIKYGBgCgojIyMgU3R1ZGVudHMgdGhhdCBjaGVja2VkIHRoZWlyIHdvcmsKYGBge3IsIGVjaG8gPSBGQUxTRX0KY2hlY2tXb3JrIDwtIGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIpCm5vQ2hlY2tXb3JrIDwtIGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgfCBgMjNgID09ICJDIiB8IGAyM2AgPT0gIkQiIHwgYDIzYCA9PSAiRSIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KY2hlY2tXb3JrUHJvcCA8LSBjaGVja1dvcmsgJT4lCiAgZ3JvdXBfYnkoc2NvcmUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgU3RyYXRlZ3kgPSAiQ2hlY2tlZCB3b3JrIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpub0NoZWNrV29ya1Byb3AgPC0gbm9DaGVja1dvcmsgJT4lCiAgZ3JvdXBfYnkoc2NvcmUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgU3RyYXRlZ3kgPSAiRGlkIG5vdCBjaGVjayB3b3JrIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpjaGVja1dvcmtQcm9wVG90YWwgPC0gcmJpbmQoY2hlY2tXb3JrUHJvcCwgbm9DaGVja1dvcmtQcm9wKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChjaGVja1dvcmtQcm9wVG90YWwpICsgCiAgZ2VvbV9jb2woYWVzKHNjb3JlLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBTdHJhdGVneSkpICsKICBnZ3RpdGxlKCJDb21wYXJpc29uIG9mIHNjb3JlcyAtIENoZWNraW5nIHdvcmsiLAogICAgICAgICAgc3VidGl0bGUgPSAiY2hlY2tlZCB3b3JrID0gNDYsIGRpZCBub3QgY2hlY2sgd29yayA9IDM5NyIpICsKICBmYWNldF93cmFwKH5TdHJhdGVneSkgKyBsYWJzKGZpbGwgPSAiIikgKyB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpub0NoZWNrV29ya1Byb3BHZW5kZXIgPC0gZmlsdGVyKG5vQ2hlY2tXb3JrLCBzZXggPT0gIkYiIHwgc2V4ID09ICJNIikgJT4lCiAgZ3JvdXBfYnkoc2V4LHNjb3JlKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDAsIFN0cmF0ZWd5ID0gIkRpZCBub3QgY2hlY2sgd29yayIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KY2hlY2tXb3JrUHJvcEdlbmRlciA8LSBmaWx0ZXIoY2hlY2tXb3JrLCBzZXggPT0gIkYiIHwgc2V4ID09ICJNIikgJT4lCiAgZ3JvdXBfYnkoc2V4LHNjb3JlKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDAsIFN0cmF0ZWd5ID0gIkNoZWNrZWQgd29yayIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KY2hlY2tXb3JrUHJvcEdlbmRlclRvdGFsIDwtIHJiaW5kKG5vQ2hlY2tXb3JrUHJvcEdlbmRlciwgY2hlY2tXb3JrUHJvcEdlbmRlcikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoY2hlY2tXb3JrUHJvcEdlbmRlclRvdGFsKSArIAogIGdlb21fY29sKGFlcyhzY29yZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gc2V4KSkgKwogIGdndGl0bGUoIkNvbXBhcmlzb24gb2Ygc2NvcmVzIGFuZCBnZW5kZXIgLSBDaGVja2luZyB3b3JrIikgKwogIGZhY2V0X2dyaWQoU3RyYXRlZ3l+c2V4KSArIGxhYnMoZmlsbCA9ICIiKSArIHRoZW1lX3B1YgpgYGAKCiMjIyBUaW1lIGRhdGEKYGBge3IsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQpFeGFtMXRpbWUgPC0gbGlzdCgpCkV4YW0xdGltZVtbMV1dIDwtIHJlYWRfY3N2KCJFeGFtIDFfdGltZS9FeGFtMV9Mb3N0X1N0dWRlbnRzX2NsZWFuLmNzdiIpCmNvbG5hbWVzKEV4YW0xdGltZVtbMV1dKSA8LSBjKCJJRG51bWJlciIsICJOYW1lIiwgImV4YW0iLCAidGVybSIsICJ0aW1lc3BlbnQiKQpFeGFtMXRpbWVbWzJdXSA8LSByZWFkX2NzdigiRXhhbSAxX3RpbWUvRXhhbTFfV2Vpc2VyMTcwX2NsZWFuLmNzdiIpCkV4YW0xdGltZVtbM11dIDwtIHJlYWRfY3N2KCJFeGFtIDFfdGltZS9FeGFtMV9XZWlzZXIxODJfY2xlYW4uY3N2IikKRXhhbTF0aW1lW1s0XV0gPC0gcmVhZF9jc3YoIkV4YW0gMV90aW1lL0V4YW0xX0FuZ2VsbEF1ZEFfY2xlYW4uY3N2IikKRXhhbTF0aW1lW1s1XV0gPC0gcmVhZF9jc3YoIkV4YW0gMV90aW1lL0V4YW0xX0FuZ2VsbEF1ZEJfY2xlYW4uY3N2IikKRXhhbTF0aW1lW1s2XV0gPC0gcmVhZF9jc3YoIkV4YW0gMV90aW1lL0V4YW0xX0FuZ2VsbEF1ZENfY2xlYW4uY3N2IikKRXhhbTF0aW1lW1s3XV0gPC0gcmVhZF9jc3YoIkV4YW0gMV90aW1lL0V4YW0xX0FuZ2VsbEF1ZERfY2xlYW4uY3N2IikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpFeGFtVGltZUFsbCA8LSByYmluZChFeGFtMXRpbWVbWzFdXSwgRXhhbTF0aW1lW1syXV0sIEV4YW0xdGltZVtbM11dLAogICAgICAgICAgICAgICAgICAgICBFeGFtMXRpbWVbWzRdXSwgRXhhbTF0aW1lW1s1XV0sIEV4YW0xdGltZVtbNl1dLCBFeGFtMXRpbWVbWzddXSlbYygxLDIsNSldCmNvbG5hbWVzKEV4YW1UaW1lQWxsKSA8LSBjKCJzdHVkZW50SUQiLCAibmFtZSIsICJ0aW1lc3BlbnQiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClRpbWVBbnN3ZXJzIDwtIGxlZnRfam9pbihhbnN3ZXJzRGVtbywgRXhhbVRpbWVBbGwsIGJ5ID0gInN0dWRlbnRJRCIpICU+JSB1bmlxdWUoKQpUaW1lQW5zd2Vyc1VuaXF1ZSA8LSBUaW1lQW5zd2Vyc1shKGR1cGxpY2F0ZWQoVGltZUFuc3dlcnMkc3R1ZGVudElEKSksXQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnRpbWUgPC0gYygpCmZvcihpIGluIDE6bnJvdyhUaW1lQW5zd2Vyc1VuaXF1ZSkpIHsKICBpZihpcy5uYShUaW1lQW5zd2Vyc1VuaXF1ZSR0aW1lc3BlbnRbaV0pID09IFRSVUUpIHRpbWVbaV0gPSAiTm8gcmVjb3JkZWQgdGltZSIKICBlbHNlIHRpbWVbaV0gPSAiUmVjb3JkZWQgdGltZSIKfQpUaW1lQW5zd2Vyc1VuaXF1ZSA8LSBtdXRhdGUoVGltZUFuc3dlcnNVbmlxdWUsIFRpbWUgPSB0aW1lKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcjI1IDwtIGZpbHRlcihUaW1lQW5zd2Vyc1VuaXF1ZSwgYDI1YCA9PSAiQSJ8YDI1YCA9PSAiQiJ8YDI1YCA9PSAiQyJ8YDI1YCA9PSAiRCJ8YDI1YCA9PSAiRSJ8CiAgICAgICAgICAgICAgICAgICAgIGAyNWAgPT0gIkFCQ0QifGAyNWAgPT0gIkJDInxgMjVgID09ICJDRCJ8YDI1YCA9PSAiQUMifGAyNWAgPT0gIkFCRCJ8YDI1YCA9PSAiQUIiKQpub2Fuc3dlcjI1IDwtIHN1YnNldChUaW1lQW5zd2Vyc1VuaXF1ZSwgaXMubmEoVGltZUFuc3dlcnNVbmlxdWUkYDI1YCkpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2VyMjVwcm9wIDwtIGFuc3dlcjI1ICU+JQogIGdyb3VwX2J5KFRpbWUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgUmVzcG9uc2UgPSAiQW5zd2VyZWQgUTI1IikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpub2Fuc3dlcjI1cHJvcCA8LSBub2Fuc3dlcjI1ICU+JQogIGdyb3VwX2J5KFRpbWUpICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCwgUmVzcG9uc2UgPSAiRGlkIG5vdCBhbnN3ZXIgUTI1IikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQphbnN3ZXIyNXByb3BUb3RhbCA8LSByYmluZChhbnN3ZXIyNXByb3AsIG5vYW5zd2VyMjVwcm9wKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXIyNXByb3BUb3RhbCkgKyAKICBnZW9tX2NvbChhZXMoVGltZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gUmVzcG9uc2UpKSArCiAgZ2d0aXRsZSgiV2hvIEFuc3dlcmVkIHRoZSBXcmFwcGVyIFF1ZXN0aW9ucywgYW5kIERpZCBUaGV5IExlYXZlIEVhcmx5PyIsCiAgICAgICAgICBzdWJ0aXRsZSA9ICJhbnN3ZXJlZCA9IDQzOSwgZGlkIG5vdCBhbnN3ZXIgPSAyNDAiKSArCiAgZmFjZXRfd3JhcCh+UmVzcG9uc2UpICsgbGFicyhmaWxsID0gIiIpICsgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGltZWFuc3dlcjIxIDwtIFRpbWVBbnN3ZXJzVW5pcXVlICU+JQogIGdyb3VwX2J5KFRpbWUsYDIxYCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdCh0aW1lYW5zd2VyMjEpICsgCiAgZ2VvbV9jb2woYWVzKGAyMWAsIGBQZXJjZW50IG9mIEdyb3VwYCwgZmlsbCA9IFRpbWUpKSArIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlEyMSBSZXNwb25zZXMiKSArCiAgZmFjZXRfd3JhcCh+VGltZSkgKyBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnRpbWVhbnN3ZXIyMiA8LSBUaW1lQW5zd2Vyc1VuaXF1ZSAlPiUKICBncm91cF9ieShUaW1lLGAyMmApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QodGltZWFuc3dlcjIyKSArIAogIGdlb21fY29sKGFlcyhgMjJgLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBUaW1lKSkgKyBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJRMjIgUmVzcG9uc2VzIikgKwogIGZhY2V0X3dyYXAoflRpbWUpICsgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQp0aW1lYW5zd2VyMjMgPC0gVGltZUFuc3dlcnNVbmlxdWUgJT4lCiAgZ3JvdXBfYnkoVGltZSxgMjNgKSAlPiUgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICBtdXRhdGUoYFBlcmNlbnQgb2YgR3JvdXBgID0gY291bnQvc3VtKGNvdW50KSoxMDApCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KHRpbWVhbnN3ZXIyMykgKyAKICBnZW9tX2NvbChhZXMoYDIzYCwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gVGltZSkpICsgbGFicyhmaWxsID0gIiIpICsgCiAgZ2d0aXRsZSgiUTIzIFJlc3BvbnNlcyIpICsKICBmYWNldF93cmFwKH5UaW1lKSArIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGltZWFuc3dlcjI0IDwtIFRpbWVBbnN3ZXJzVW5pcXVlICU+JQogIGdyb3VwX2J5KFRpbWUsYDI0YCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdCh0aW1lYW5zd2VyMjQpICsgCiAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIEdyb3VwYCwgZmlsbCA9IFRpbWUpKSArIGxhYnMoZmlsbCA9ICIiKSArIAogIGdndGl0bGUoIlEyNCBSZXNwb25zZXMiKSArCiAgZmFjZXRfd3JhcCh+VGltZSkgKyBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnRpbWVhbnN3ZXIyNSA8LSBUaW1lQW5zd2Vyc1VuaXF1ZSAlPiUKICBncm91cF9ieShUaW1lLGAyNWApICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QodGltZWFuc3dlcjI1KSArIAogIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBUaW1lKSkgKyBsYWJzKGZpbGwgPSAiIikgKyAKICBnZ3RpdGxlKCJRMjUgUmVzcG9uc2VzIikgKwogIGZhY2V0X3dyYXAoflRpbWUpICsgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgoKCgo=