From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============5106650738239454543==" MIME-Version: 1.0 From: Nicolas Boichat To: kbuild-all@lists.01.org Subject: Re: [chrome-os:chromeos-5.4 180/242] drivers/net/wireless/mediatek/mt76/tx.c:504:7: error: 'q' undeclared; did you mean 'sq'? Date: Sat, 17 Apr 2021 11:52:10 +0800 Message-ID: In-Reply-To: <202104171103.baCz56rh-lkp@intel.com> List-Id: --===============5106650738239454543== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable +Claire Chang On Sat, Apr 17, 2021 at 11:16 AM kernel test robot wrote: > tree: https://chromium.googlesource.com/chromiumos/third_party/kernel > chromeos-5.4 > head: 03c601082f2f279deba7e2b6923e735273c65587 > commit: 0d7e331a785cdb87c2b4005d226bf8a22f7fd87e [180/242] UPSTREAM: mt76: > rely on AQL for burst size limits on tx queueing > config: nios2-allyesconfig (attached as .config) > compiler: nios2-linux-gcc (GCC) 9.3.0 > reproduce (this is a W=3D1 build): > wget > https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross > -O ~/bin/make.cross > chmod +x ~/bin/make.cross > git remote add chrome-os > https://chromium.googlesource.com/chromiumos/third_party/kernel > git fetch --no-tags chrome-os chromeos-5.4 > git checkout 0d7e331a785cdb87c2b4005d226bf8a22f7fd87e > # save the attached .config to linux build tree > COMPILER_INSTALL_PATH=3D$HOME/0day COMPILER=3Dgcc-9.3.0 make.cros= s W=3D1 > ARCH=3Dnios2 > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot > > Note: the chrome-os/chromeos-5.4 HEAD > 03c601082f2f279deba7e2b6923e735273c65587 builds fine. > It only hurts bisectibility. > > All errors (new ones prefixed by >>): > > drivers/net/wireless/mediatek/mt76/tx.c: In function > 'mt76_txq_send_burst': > >> drivers/net/wireless/mediatek/mt76/tx.c:504:7: error: 'q' undeclared > (first use in this function); did you mean 'sq'? > 504 | if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) > | ^ > | sq > drivers/net/wireless/mediatek/mt76/tx.c:504:7: note: each undeclared > identifier is reported only once for each function it appears in > drivers/net/wireless/mediatek/mt76/tx.c: In function > 'mt76_txq_schedule_list': > drivers/net/wireless/mediatek/mt76/tx.c:547:7: error: 'q' undeclared > (first use in this function); did you mean 'sq'? > 547 | if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) > | ^ > | sq > > > vim +504 drivers/net/wireless/mediatek/mt76/tx.c > > 461 > 462 static int > 463 mt76_txq_send_burst(struct mt76_phy *phy, struct mt76_sw_queue *s= q, > 464 struct mt76_txq *mtxq) > 465 { > 466 struct mt76_dev *dev =3D phy->dev; > 467 struct ieee80211_txq *txq =3D mtxq_to_txq(mtxq); > 468 enum mt76_txq_id qid =3D mt76_txq_get_qid(txq); > 469 struct mt76_wcid *wcid =3D mtxq->wcid; > 470 struct mt76_queue *hwq =3D sq->q; > 471 struct ieee80211_tx_info *info; > 472 struct sk_buff *skb; > 473 int n_frames =3D 1; > 474 bool stop =3D false; > 475 int idx; > 476 > 477 if (test_bit(MT_WCID_FLAG_PS, &wcid->flags)) > 478 return 0; > 479 > 480 if (atomic_read(&wcid->non_aql_packets) >=3D > MT_MAX_NON_AQL_PKT) > 481 return 0; > 482 > 483 skb =3D mt76_txq_dequeue(phy, mtxq, false); > 484 if (!skb) > 485 return 0; > 486 > 487 info =3D IEEE80211_SKB_CB(skb); > 488 if (!(wcid->tx_info & MT_WCID_TX_INFO_SET)) > 489 ieee80211_get_tx_rates(txq->vif, txq->sta, skb, > 490 info->control.rates, 1); > 491 > 492 idx =3D __mt76_tx_queue_skb(dev, qid, skb, wcid, txq->sta, > &stop); > 493 if (idx < 0) > 494 return idx; > 495 > 496 do { > 497 if (test_bit(MT76_STATE_PM, &phy->state) || > 498 test_bit(MT76_RESET, &phy->state)) > 499 return -EBUSY; > 500 > 501 if (stop) > 502 break; > 503 > > 504 if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) > 505 break; > 506 > 507 skb =3D mt76_txq_dequeue(phy, mtxq, false); > 508 if (!skb) > 509 break; > 510 > 511 info =3D IEEE80211_SKB_CB(skb); > 512 if (!(wcid->tx_info & MT_WCID_TX_INFO_SET)) > 513 ieee80211_get_tx_rates(txq->vif, txq->sta, > skb, > 514 > info->control.rates, 1); > 515 > 516 idx =3D __mt76_tx_queue_skb(dev, qid, skb, wcid, > txq->sta, &stop); > 517 if (idx < 0) > 518 break; > 519 > 520 n_frames++; > 521 } while (1); > 522 > 523 dev->queue_ops->kick(dev, hwq); > 524 > 525 return n_frames; > 526 } > 527 > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org > > -- > You received this message because you are subscribed to the Google Groups > "cros-kernel-buildreports" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cros-kernel-buildreports+unsubscribe(a)googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/cros-kernel-buildreports/202104171103.b= aCz56rh-lkp%40intel.com > . > --===============5106650738239454543== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGEgY2xhc3M9ImdtYWlsX3BsdXNyZXBseSIg aWQ9InBsdXNSZXBseUNoaXAtMCIgaHJlZj0ibWFpbHRvOnRpZW50enVAZ29vZ2xlLmNvbSIgdGFi aW5kZXg9Ii0xIj4rQ2xhaXJlIENoYW5nPC9hPsKgPGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJn bWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFNhdCwgQXBy IDE3LCAyMDIxIGF0IDExOjE2IEFNIGtlcm5lbCB0ZXN0IHJvYm90ICZsdDs8YSBocmVmPSJtYWls dG86bGtwQGludGVsLmNvbSI+bGtwQGludGVsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48 YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHgg MC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0 OjFleCI+dHJlZTrCoCDCoDxhIGhyZWY9Imh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv bS9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5L2tlcm5lbCIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9 Il9ibGFuayI+aHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvdGhp cmRfcGFydHkva2VybmVsPC9hPiBjaHJvbWVvcy01LjQ8YnI+CmhlYWQ6wqAgwqAwM2M2MDEwODJm MmYyNzlkZWJhN2UyYjY5MjNlNzM1MjczYzY1NTg3PGJyPgpjb21taXQ6IDBkN2UzMzFhNzg1Y2Ri ODdjMmI0MDA1ZDIyNmJmOGEyMmY3ZmQ4N2UgWzE4MC8yNDJdIFVQU1RSRUFNOiBtdDc2OiByZWx5 IG9uIEFRTCBmb3IgYnVyc3Qgc2l6ZSBsaW1pdHMgb24gdHggcXVldWVpbmc8YnI+CmNvbmZpZzog bmlvczItYWxseWVzY29uZmlnIChhdHRhY2hlZCBhcyAuY29uZmlnKTxicj4KY29tcGlsZXI6IG5p b3MyLWxpbnV4LWdjYyAoR0NDKSA5LjMuMDxicj4KcmVwcm9kdWNlICh0aGlzIGlzIGEgVz0xIGJ1 aWxkKTo8YnI+CsKgIMKgIMKgIMKgIHdnZXQgPGEgaHJlZj0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNl cmNvbnRlbnQuY29tL2ludGVsL2xrcC10ZXN0cy9tYXN0ZXIvc2Jpbi9tYWtlLmNyb3NzIiByZWw9 Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVu dC5jb20vaW50ZWwvbGtwLXRlc3RzL21hc3Rlci9zYmluL21ha2UuY3Jvc3M8L2E+IC1PIH4vYmlu L21ha2UuY3Jvc3M8YnI+CsKgIMKgIMKgIMKgIGNobW9kICt4IH4vYmluL21ha2UuY3Jvc3M8YnI+ CsKgIMKgIMKgIMKgIGdpdCByZW1vdGUgYWRkIGNocm9tZS1vcyA8YSBocmVmPSJodHRwczovL2No cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW1vcy90aGlyZF9wYXJ0eS9rZXJuZWwiIHJl bD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291 cmNlLmNvbS9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5L2tlcm5lbDwvYT48YnI+CsKgIMKgIMKgIMKg IGdpdCBmZXRjaCAtLW5vLXRhZ3MgY2hyb21lLW9zIGNocm9tZW9zLTUuNDxicj4KwqAgwqAgwqAg wqAgZ2l0IGNoZWNrb3V0IDBkN2UzMzFhNzg1Y2RiODdjMmI0MDA1ZDIyNmJmOGEyMmY3ZmQ4N2U8 YnI+CsKgIMKgIMKgIMKgICMgc2F2ZSB0aGUgYXR0YWNoZWQgLmNvbmZpZyB0byBsaW51eCBidWls ZCB0cmVlPGJyPgrCoCDCoCDCoCDCoCBDT01QSUxFUl9JTlNUQUxMX1BBVEg9JEhPTUUvMGRheSBD T01QSUxFUj1nY2MtOS4zLjAgbWFrZS5jcm9zcyBXPTEgQVJDSD1uaW9zMiA8YnI+Cjxicj4KSWYg eW91IGZpeCB0aGUgaXNzdWUsIGtpbmRseSBhZGQgZm9sbG93aW5nIHRhZyBhcyBhcHByb3ByaWF0 ZTxicj4KUmVwb3J0ZWQtYnk6IGtlcm5lbCB0ZXN0IHJvYm90ICZsdDs8YSBocmVmPSJtYWlsdG86 bGtwQGludGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmxrcEBpbnRlbC5jb208L2E+Jmd0Ozxicj4K PGJyPgpOb3RlOiB0aGUgY2hyb21lLW9zL2Nocm9tZW9zLTUuNCBIRUFEIDAzYzYwMTA4MmYyZjI3 OWRlYmE3ZTJiNjkyM2U3MzUyNzNjNjU1ODcgYnVpbGRzIGZpbmUuPGJyPgrCoCDCoCDCoCBJdCBv bmx5IGh1cnRzIGJpc2VjdGliaWxpdHkuPGJyPgo8YnI+CkFsbCBlcnJvcnMgKG5ldyBvbmVzIHBy ZWZpeGVkIGJ5ICZndDsmZ3Q7KTo8YnI+Cjxicj4KwqAgwqBkcml2ZXJzL25ldC93aXJlbGVzcy9t ZWRpYXRlay9tdDc2L3R4LmM6IEluIGZ1bmN0aW9uICYjMzk7bXQ3Nl90eHFfc2VuZF9idXJzdCYj Mzk7Ojxicj4KJmd0OyZndDsgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5j OjUwNDo3OiBlcnJvcjogJiMzOTtxJiMzOTsgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMg ZnVuY3Rpb24pOyBkaWQgeW91IG1lYW4gJiMzOTtzcSYjMzk7Pzxicj4KwqAgwqAgwqA1MDQgfMKg IMKgaWYgKHEtJmd0O3F1ZXVlZCArIE1UX1RYUV9GUkVFX1RIUiAmZ3Q7PSBxLSZndDtuZGVzYyk8 YnI+CsKgIMKgIMKgIMKgIMKgfMKgIMKgIMKgIMKgXjxicj4KwqAgwqAgwqAgwqAgwqB8wqAgwqAg wqAgwqBzcTxicj4KwqAgwqBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6 NTA0Ojc6IG5vdGU6IGVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkg b25jZSBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluPGJyPgrCoCDCoGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzogSW4gZnVuY3Rpb24gJiMzOTttdDc2X3R4cV9z Y2hlZHVsZV9saXN0JiMzOTs6PGJyPgrCoCDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvdHguYzo1NDc6NzogZXJyb3I6ICYjMzk7cSYjMzk7IHVuZGVjbGFyZWQgKGZpcnN0IHVz ZSBpbiB0aGlzIGZ1bmN0aW9uKTsgZGlkIHlvdSBtZWFuICYjMzk7c3EmIzM5Oz88YnI+CsKgIMKg IMKgNTQ3IHzCoCDCoGlmIChxLSZndDtxdWV1ZWQgKyBNVF9UWFFfRlJFRV9USFIgJmd0Oz0gcS0m Z3Q7bmRlc2MpPGJyPgrCoCDCoCDCoCDCoCDCoHzCoCDCoCDCoCDCoF48YnI+CsKgIMKgIMKgIMKg IMKgfMKgIMKgIMKgIMKgc3E8YnI+Cjxicj4KPGJyPgp2aW0gKzUwNCBkcml2ZXJzL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L3R4LmM8YnI+Cjxicj4KwqAgwqA0NjHCoCA8YnI+CsKgIMKgNDYy wqAgc3RhdGljIGludDxicj4KwqAgwqA0NjPCoCBtdDc2X3R4cV9zZW5kX2J1cnN0KHN0cnVjdCBt dDc2X3BoeSAqcGh5LCBzdHJ1Y3QgbXQ3Nl9zd19xdWV1ZSAqc3EsPGJyPgrCoCDCoDQ2NMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBtdDc2X3R4cSAqbXR4cSk8YnI+CsKg IMKgNDY1wqAgezxicj4KwqAgwqA0NjbCoCDCoCDCoCDCoCDCoCBzdHJ1Y3QgbXQ3Nl9kZXYgKmRl diA9IHBoeS0mZ3Q7ZGV2Ozxicj4KwqAgwqA0NjfCoCDCoCDCoCDCoCDCoCBzdHJ1Y3QgaWVlZTgw MjExX3R4cSAqdHhxID0gbXR4cV90b190eHEobXR4cSk7PGJyPgrCoCDCoDQ2OMKgIMKgIMKgIMKg IMKgIGVudW0gbXQ3Nl90eHFfaWQgcWlkID0gbXQ3Nl90eHFfZ2V0X3FpZCh0eHEpOzxicj4KwqAg wqA0NjnCoCDCoCDCoCDCoCDCoCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gbXR4cS0mZ3Q7d2Np ZDs8YnI+CsKgIMKgNDcwwqAgwqAgwqAgwqAgwqAgc3RydWN0IG10NzZfcXVldWUgKmh3cSA9IHNx LSZndDtxOzxicj4KwqAgwqA0NzHCoCDCoCDCoCDCoCDCoCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKmluZm87PGJyPgrCoCDCoDQ3MsKgIMKgIMKgIMKgIMKgIHN0cnVjdCBza19idWZmICpza2I7 PGJyPgrCoCDCoDQ3M8KgIMKgIMKgIMKgIMKgIGludCBuX2ZyYW1lcyA9IDE7PGJyPgrCoCDCoDQ3 NMKgIMKgIMKgIMKgIMKgIGJvb2wgc3RvcCA9IGZhbHNlOzxicj4KwqAgwqA0NzXCoCDCoCDCoCDC oCDCoCBpbnQgaWR4Ozxicj4KwqAgwqA0NzbCoCA8YnI+CsKgIMKgNDc3wqAgwqAgwqAgwqAgwqAg aWYgKHRlc3RfYml0KE1UX1dDSURfRkxBR19QUywgJmFtcDt3Y2lkLSZndDtmbGFncykpPGJyPgrC oCDCoDQ3OMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOzxicj4KwqAgwqA0NznC oCA8YnI+CsKgIMKgNDgwwqAgwqAgwqAgwqAgwqAgaWYgKGF0b21pY19yZWFkKCZhbXA7d2NpZC0m Z3Q7bm9uX2FxbF9wYWNrZXRzKSAmZ3Q7PSBNVF9NQVhfTk9OX0FRTF9QS1QpPGJyPgrCoCDCoDQ4 McKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOzxicj4KwqAgwqA0ODLCoCA8YnI+ CsKgIMKgNDgzwqAgwqAgwqAgwqAgwqAgc2tiID0gbXQ3Nl90eHFfZGVxdWV1ZShwaHksIG10eHEs IGZhbHNlKTs8YnI+CsKgIMKgNDg0wqAgwqAgwqAgwqAgwqAgaWYgKCFza2IpPGJyPgrCoCDCoDQ4 NcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOzxicj4KwqAgwqA0ODbCoCA8YnI+ CsKgIMKgNDg3wqAgwqAgwqAgwqAgwqAgaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTs8YnI+ CsKgIMKgNDg4wqAgwqAgwqAgwqAgwqAgaWYgKCEod2NpZC0mZ3Q7dHhfaW5mbyAmYW1wOyBNVF9X Q0lEX1RYX0lORk9fU0VUKSk8YnI+CsKgIMKgNDg5wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aWVlZTgwMjExX2dldF90eF9yYXRlcyh0eHEtJmd0O3ZpZiwgdHhxLSZndDtzdGEsIHNrYiw8YnI+ CsKgIMKgNDkwwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBpbmZvLSZndDtjb250cm9sLnJhdGVzLCAxKTs8YnI+CsKgIMKgNDkxwqAg PGJyPgrCoCDCoDQ5MsKgIMKgIMKgIMKgIMKgIGlkeCA9IF9fbXQ3Nl90eF9xdWV1ZV9za2IoZGV2 LCBxaWQsIHNrYiwgd2NpZCwgdHhxLSZndDtzdGEsICZhbXA7c3RvcCk7PGJyPgrCoCDCoDQ5M8Kg IMKgIMKgIMKgIMKgIGlmIChpZHggJmx0OyAwKTxicj4KwqAgwqA0OTTCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCByZXR1cm4gaWR4Ozxicj4KwqAgwqA0OTXCoCA8YnI+CsKgIMKgNDk2wqAgwqAg wqAgwqAgwqAgZG8gezxicj4KwqAgwqA0OTfCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAo dGVzdF9iaXQoTVQ3Nl9TVEFURV9QTSwgJmFtcDtwaHktJmd0O3N0YXRlKSB8fDxicj4KwqAgwqA0 OTjCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZXN0X2JpdChNVDc2X1JFU0VULCAm YW1wO3BoeS0mZ3Q7c3RhdGUpKTxicj4KwqAgwqA0OTnCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gLUVCVVNZOzxicj4KwqAgwqA1MDDCoCA8YnI+CsKgIMKgNTAx wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHN0b3ApPGJyPgrCoCDCoDUwMsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOzxicj4KwqAgwqA1MDPCoCA8YnI+ CsKgJmd0OyA1MDTCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocS0mZ3Q7cXVldWVkICsg TVRfVFhRX0ZSRUVfVEhSICZndDs9IHEtJmd0O25kZXNjKTxicj4KwqAgwqA1MDXCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazs8YnI+CsKgIMKgNTA2wqAgPGJyPgrC oCDCoDUwN8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNrYiA9IG10NzZfdHhxX2RlcXVldWUo cGh5LCBtdHhxLCBmYWxzZSk7PGJyPgrCoCDCoDUwOMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGlmICghc2tiKTxicj4KwqAgwqA1MDnCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBicmVhazs8YnI+CsKgIMKgNTEwwqAgPGJyPgrCoCDCoDUxMcKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7PGJyPgrCoCDCoDUxMsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghKHdjaWQtJmd0O3R4X2luZm8gJmFtcDsgTVRfV0NJ RF9UWF9JTkZPX1NFVCkpPGJyPgrCoCDCoDUxM8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGllZWU4MDIxMV9nZXRfdHhfcmF0ZXModHhxLSZndDt2aWYsIHR4cS0mZ3Q7c3Rh LCBza2IsPGJyPgrCoCDCoDUxNMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW5mby0mZ3Q7Y29udHJvbC5yYXRl cywgMSk7PGJyPgrCoCDCoDUxNcKgIDxicj4KwqAgwqA1MTbCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZHggPSBfX210NzZfdHhfcXVldWVfc2tiKGRldiwgcWlkLCBza2IsIHdjaWQsIHR4cS0m Z3Q7c3RhLCAmYW1wO3N0b3ApOzxicj4KwqAgwqA1MTfCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAoaWR4ICZsdDsgMCk8YnI+CsKgIMKgNTE4wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgYnJlYWs7PGJyPgrCoCDCoDUxOcKgIDxicj4KwqAgwqA1MjDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBuX2ZyYW1lcysrOzxicj4KwqAgwqA1MjHCoCDCoCDCoCDCoCDCoCB9 IHdoaWxlICgxKTs8YnI+CsKgIMKgNTIywqAgPGJyPgrCoCDCoDUyM8KgIMKgIMKgIMKgIMKgIGRl di0mZ3Q7cXVldWVfb3BzLSZndDtraWNrKGRldiwgaHdxKTs8YnI+CsKgIMKgNTI0wqAgPGJyPgrC oCDCoDUyNcKgIMKgIMKgIMKgIMKgIHJldHVybiBuX2ZyYW1lczs8YnI+CsKgIMKgNTI2wqAgfTxi cj4KwqAgwqA1MjfCoCA8YnI+Cjxicj4KLS0tPGJyPgowLURBWSBDSSBLZXJuZWwgVGVzdCBTZXJ2 aWNlLCBJbnRlbCBDb3Jwb3JhdGlvbjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy4wMS5vcmcv aHlwZXJraXR0eS9saXN0L2tidWlsZC1hbGxAbGlzdHMuMDEub3JnIiByZWw9Im5vcmVmZXJyZXIi IHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xpc3RzLjAxLm9yZy9oeXBlcmtpdHR5L2xpc3Qva2J1 aWxkLWFsbEBsaXN0cy4wMS5vcmc8L2E+PGJyPgo8YnI+Ci0tIDxicj4KWW91IHJlY2VpdmVkIHRo aXMgbWVzc2FnZSBiZWNhdXNlIHlvdSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgR29vZ2xlIEdyb3Vw cyAmcXVvdDtjcm9zLWtlcm5lbC1idWlsZHJlcG9ydHMmcXVvdDsgZ3JvdXAuPGJyPgpUbyB1bnN1 YnNjcmliZSBmcm9tIHRoaXMgZ3JvdXAgYW5kIHN0b3AgcmVjZWl2aW5nIGVtYWlscyBmcm9tIGl0 LCBzZW5kIGFuIGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzpjcm9zLWtlcm5lbC1idWlsZHJlcG9y dHMlMkJ1bnN1YnNjcmliZUBnb29nbGVncm91cHMuY29tIiB0YXJnZXQ9Il9ibGFuayI+Y3Jvcy1r ZXJuZWwtYnVpbGRyZXBvcnRzK3Vuc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb208L2E+Ljxicj4K VG8gdmlldyB0aGlzIGRpc2N1c3Npb24gb24gdGhlIHdlYiB2aXNpdCA8YSBocmVmPSJodHRwczov L2dyb3Vwcy5nb29nbGUuY29tL2QvbXNnaWQvY3Jvcy1rZXJuZWwtYnVpbGRyZXBvcnRzLzIwMjEw NDE3MTEwMy5iYUN6NTZyaC1sa3AlNDBpbnRlbC5jb20iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0 PSJfYmxhbmsiPmh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZC9tc2dpZC9jcm9zLWtlcm5lbC1i dWlsZHJlcG9ydHMvMjAyMTA0MTcxMTAzLmJhQ3o1NnJoLWxrcCU0MGludGVsLmNvbTwvYT4uPGJy Pgo8L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+Cg== --===============5106650738239454543==--